Skip to content

Commit 9190e8d

Browse files
committed
maxDepth & flatten "encoded" string tabs
1 parent 82e28bf commit 9190e8d

6 files changed

Lines changed: 258 additions & 188 deletions

File tree

src/js/main.js

Lines changed: 128 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -585,16 +585,19 @@
585585
abs.cfgFlags = 0x3FFFFF; // 21 bits
586586
}
587587
strClassname = this.dumpClassname(abs);
588-
if (abs.isMaxDepth) {
589-
this.dumper.getDumpOpts().attribs.class.push('max-depth');
590-
}
591588
if (abs.isRecursion) {
592589
return strClassname +
593590
' <span class="t_recursion">*RECURSION*</span>'
594-
} else if (abs.isExcluded) {
591+
}
592+
if (abs.isMaxDepth) {
593+
return strClassname +
594+
' <span class="t_maxDepth">*MAX DEPTH*</span>'
595+
}
596+
if (abs.isExcluded) {
595597
return strClassname +
596598
' <span class="excluded">(not inspected)</span>'
597-
} else if (abs.cfgFlags & this.BRIEF && abs.implements.indexOf('UnitEnum') > -1) {
599+
}
600+
if (abs.cfgFlags & this.BRIEF && abs.implements.indexOf('UnitEnum') > -1) {
598601
return strClassname
599602
}
600603
try {
@@ -974,7 +977,6 @@
974977
attributeOut: paramAttributeOut,
975978
phpDocOut: phpDocOut
976979
});
977-
var returnType = '';
978980
if (info.isFinal) {
979981
$dd.addClass('final');
980982
modifiers.push('<span class="t_modifier_final">final</span>');
@@ -983,24 +985,17 @@
983985
if (info.isStatic) {
984986
modifiers.push('<span class="t_modifier_static">static</span>');
985987
}
986-
if (info.return && info.return.type) {
987-
returnType = ' <span class="t_type"' +
988-
(phpDocOut && info.return.desc !== null
989-
? ' title="' + info.return.desc.escapeHtml() + '"'
990-
: ''
991-
) +
992-
'>' + info.return.type + '</span>';
993-
}
994988
$dd.html(
995989
modifiers.join(' ') +
996-
returnType +
990+
// returnType +
997991
' <span class="t_identifier"' +
998992
(phpDocOut && info.phpDoc && info.phpDoc.summary !== null
999993
? ' title="' + info.phpDoc.summary.escapeHtml() + '"'
1000994
: ''
1001995
) +
1002996
'>' + k + '</span>' +
1003997
'<span class="t_punct">(</span>' + paramStr + '<span class="t_punct">)</span>' +
998+
self.dumpMethodReturn(info, { phpDocOut: phpDocOut }) +
1004999
(k === '__toString'
10051000
? '<br />' + self.dumper.dump(info.returnValue)
10061001
: ''
@@ -1074,6 +1069,20 @@
10741069
: ''
10751070
};
10761071

1072+
DumpObject.prototype.dumpMethodReturn = function (info, opts) {
1073+
var haveReturnType = info.return && info.return.type;
1074+
if (haveReturnType === false) {
1075+
return ''
1076+
}
1077+
return '<span class="t_punct t_colon">:</span> ' +
1078+
' <span class="t_type"' +
1079+
(opts.phpDocOut && info.return.desc !== null
1080+
? ' title="' + info.return.desc.escapeHtml() + '"'
1081+
: ''
1082+
) +
1083+
'>' + info.return.type + '</span>'
1084+
};
1085+
10771086
function magicMethodInfo (abs, methods) {
10781087
var i = 0;
10791088
var methodsHave = [];
@@ -1175,6 +1184,101 @@
11751184
var base64Arraybuffer_1 = base64Arraybuffer.encode;
11761185
var base64Arraybuffer_2 = base64Arraybuffer.decode;
11771186

1187+
function DumpStringEncoded (dumpString) {
1188+
this.dumpString = dumpString;
1189+
this.dumper = dumpString.dumper;
1190+
}
1191+
1192+
DumpStringEncoded.prototype.dump = function (val, abs) {
1193+
var dumpOpts = this.dumper.getDumpOpts();
1194+
var tagName = dumpOpts.tagName === '__default__'
1195+
? 'span'
1196+
: dumpOpts.tagName;
1197+
var tabs = {};
1198+
1199+
if (abs.brief) {
1200+
return tabValues(val, abs, this.dumper).valRaw
1201+
}
1202+
1203+
tabs = this.buildTabsAndPanes(val, abs);
1204+
dumpOpts.tagName = null;
1205+
1206+
return $('<' + tagName + '>', {
1207+
class: 'string-encoded tabs-container',
1208+
'data-type-more': abs.typeMore
1209+
}).html('\n' +
1210+
'<nav role="tablist">' +
1211+
tabs.tabs.join('') +
1212+
'</nav>' +
1213+
tabs.panes.join('')
1214+
)[0].outerHTML
1215+
};
1216+
1217+
DumpStringEncoded.prototype.buildTabsAndPanes = function (val, abs) {
1218+
var tabs = {
1219+
tabs: [],
1220+
panes: []
1221+
};
1222+
var index = 1;
1223+
var vals;
1224+
do {
1225+
vals = tabValues(val, abs, this.dumper);
1226+
tabs.tabs.push('<a class="nav-link" data-target=".tab-' + index + '" data-toggle="tab" role="tab">' + vals.labelRaw + '</a>');
1227+
tabs.panes.push('<div class="tab-' + index + ' tab-pane" role="tabpanel">' + vals.valRaw + '</div>');
1228+
index++;
1229+
val = abs.value;
1230+
abs = abs.valueDecoded;
1231+
} while (this.dumpString.isEncoded(abs))
1232+
tabs.tabs.push('<a class="active nav-link" data-target=".tab-' + index + '" data-toggle="tab" role="tab">' + vals.labelDecoded + '</a>');
1233+
tabs.panes.push('<div class="active tab-' + index + ' tab-pane" role="tabpanel">' + this.dumper.dump(abs) + '</div>');
1234+
return tabs
1235+
};
1236+
1237+
function tabValues (val, abs, dumper) {
1238+
var dumpOpts = dumper.getDumpOpts();
1239+
var attribs = JSON.parse(JSON.stringify(dumpOpts.attribs));
1240+
attribs.class.push('no-quotes');
1241+
attribs.class.push('t_' + abs.type);
1242+
attribs.class = attribs.class.join(' ');
1243+
if (abs.typeMore === 'base64' && abs.brief) {
1244+
dumpOpts.postDump = function (val) {
1245+
return '<span class="t_keyword">string</span><span class="text-muted">(base64)</span><span class="t_punct colon">:</span> ' + val
1246+
};
1247+
}
1248+
return tabValuesFinish({
1249+
labelDecoded: 'decoded',
1250+
labelRaw: 'raw',
1251+
valDecoded: null,
1252+
valRaw: $('<span />', attribs).html(val)[0].outerHTML
1253+
}, abs, dumper)
1254+
}
1255+
1256+
function tabValuesFinish (vals, abs, dumper) {
1257+
switch (abs.typeMore) {
1258+
case 'base64':
1259+
// vals.labelDecoded = 'decoded'
1260+
vals.labelRaw = 'base64';
1261+
if (abs.strlen) {
1262+
vals.valRaw += '<span class="maxlen">&hellip; ' + (abs.strlen - abs.value.length) + ' more bytes (not logged)</span>';
1263+
}
1264+
break
1265+
case 'json':
1266+
// vals.labelDecoded = 'decoded'
1267+
vals.labelRaw = 'json';
1268+
if (abs.prettified || abs.strlen) {
1269+
abs.typeMore = null; // unset typeMore to prevent loop
1270+
vals.valRaw = dumper.dump(abs);
1271+
abs.typeMore = 'json';
1272+
}
1273+
break
1274+
case 'serialized':
1275+
vals.labelDecoded = 'unserialized';
1276+
vals.labelRaw = 'serialized';
1277+
break
1278+
}
1279+
return vals
1280+
}
1281+
11781282
/**
11791283
* Nutshell: working with strings in Javascript is a PITA
11801284
*
@@ -1734,6 +1838,7 @@
17341838

17351839
function DumpString (dump) {
17361840
this.dumper = dump;
1841+
this.dumpEncoded = new DumpStringEncoded(this);
17371842
}
17381843

17391844
DumpString.prototype.dump = function (val, abs) {
@@ -1762,8 +1867,8 @@
17621867
return parsed.innerhtml
17631868
}
17641869
val = this.helper(abs.value);
1765-
if (['base64', 'json', 'serialized'].indexOf(abs.typeMore) > -1) {
1766-
return this.dumpEncoded(val, abs)
1870+
if (this.isEncoded(abs)) {
1871+
return this.dumpEncoded.dump(val, abs)
17671872
}
17681873
if (abs.typeMore === 'binary') {
17691874
return this.dumpBinary(abs)
@@ -1844,38 +1949,6 @@
18441949
return val
18451950
};
18461951

1847-
DumpString.prototype.dumpEncoded = function (val, abs) {
1848-
var dumpOpts = this.dumper.getDumpOpts();
1849-
var tagName = dumpOpts.tagName === '__default__'
1850-
? 'span'
1851-
: dumpOpts.tagName;
1852-
var $tag = $('<' + tagName + '>', {
1853-
class: 'string-encoded tabs-container',
1854-
// 'data-type': abs.type,
1855-
'data-type-more': abs.typeMore
1856-
}).html('\n' +
1857-
'<nav role="tablist">' +
1858-
'<a class="nav-link" data-target=".string-raw" data-toggle="tab" role="tab"></a>' +
1859-
'<a class="active nav-link" data-target=".string-decoded" data-toggle="tab" role="tab"></a>' +
1860-
'</nav>' +
1861-
'<div class="string-raw tab-pane" role="tabpanel"></div>' +
1862-
'<div class="active string-decoded tab-pane" role="tabpanel"></div>'
1863-
);
1864-
var vals = encodedInitVals(val, abs, dumpOpts);
1865-
vals = encodedUpdateVals(vals, abs, this.dumper);
1866-
if (abs.brief) {
1867-
return vals.valRaw
1868-
}
1869-
1870-
vals.valDecoded = this.dumper.dump(abs.valueDecoded);
1871-
dumpOpts.tagName = null;
1872-
$tag.find('.nav-link').eq(0).html(vals.labelRaw);
1873-
$tag.find('.nav-link').eq(1).html(vals.labelDecoded);
1874-
$tag.find('.string-raw').html(vals.valRaw);
1875-
$tag.find('.string-decoded').html(vals.valDecoded); // this.dumper.dump(abs.valueDecoded)
1876-
return $tag[0].outerHTML
1877-
};
1878-
18791952
DumpString.prototype.helper = function (val) {
18801953
var bytes = val.substr(0, 6) === '_b64_:'
18811954
? new Uint8Array(base64Arraybuffer.decode(val.substr(6)))
@@ -1890,49 +1963,9 @@
18901963
return val
18911964
};
18921965

1893-
function encodedInitVals (val, abs, dumpOpts) {
1894-
var attribs = JSON.parse(JSON.stringify(dumpOpts.attribs));
1895-
attribs.class.push('no-quotes');
1896-
attribs.class.push('t_' + abs.type);
1897-
attribs.class = attribs.class.join(' ');
1898-
if (abs.typeMore === 'base64' && abs.brief) {
1899-
dumpOpts.postDump = function (val) {
1900-
return '<span class="t_keyword">string</span><span class="text-muted">(base64)</span><span class="t_punct colon">:</span> ' + val
1901-
};
1902-
}
1903-
return {
1904-
labelDecoded: 'Decoded',
1905-
labelRaw: 'Raw',
1906-
valDecoded: null,
1907-
valRaw: $('<span />', attribs).html(val)[0].outerHTML
1908-
}
1909-
}
1910-
1911-
function encodedUpdateVals (vals, abs, dumper) {
1912-
switch (abs.typeMore) {
1913-
case 'base64':
1914-
vals.labelDecoded = 'decoded';
1915-
vals.labelRaw = 'base64';
1916-
if (abs.strlen) {
1917-
vals.valRaw += '<span class="maxlen">&hellip; ' + (abs.strlen - abs.value.length) + ' more bytes (not logged)</span>';
1918-
}
1919-
break
1920-
case 'json':
1921-
vals.labelDecoded = 'decoded';
1922-
vals.labelRaw = 'json';
1923-
if (abs.prettified || abs.strlen) {
1924-
abs.typeMore = null; // unset typeMore to prevent loop
1925-
vals.valRaw = dumper.dump(abs);
1926-
abs.typeMore = 'json';
1927-
}
1928-
break
1929-
case 'serialized':
1930-
vals.labelDecoded = 'unserialized';
1931-
vals.labelRaw = 'serialized';
1932-
break
1933-
}
1934-
return vals
1935-
}
1966+
DumpString.prototype.isEncoded = function (val) {
1967+
return ['base64', 'json', 'serialized'].indexOf(val.typeMore) > -1
1968+
};
19361969

19371970
/**
19381971
* Add whitespace markup
@@ -2142,9 +2175,10 @@
21422175
dumpOpts.attribs.class.push('array-file-tree');
21432176
}
21442177
if (dumpOpts.isMaxDepth) {
2145-
dumpOpts.attribs.class.push('max-depth');
2178+
return '<span class="t_keyword">array</span>' +
2179+
' <span class="t_maxDepth">*MAX DEPTH*</span>'
21462180
}
2147-
if (length === 0 && dumpOpts.isMaxDepth === false) {
2181+
if (length === 0) {
21482182
return '<span class="t_keyword">array</span>' +
21492183
'<span class="t_punct">(</span>\n' +
21502184
'<span class="t_punct">)</span>'

src/js/main.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/js_src/Logger/Dump.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,9 +183,10 @@ Dump.prototype.dumpArray = function (array) {
183183
dumpOpts.attribs.class.push('array-file-tree')
184184
}
185185
if (dumpOpts.isMaxDepth) {
186-
dumpOpts.attribs.class.push('max-depth')
186+
return '<span class="t_keyword">array</span>' +
187+
' <span class="t_maxDepth">*MAX DEPTH*</span>'
187188
}
188-
if (length === 0 && dumpOpts.isMaxDepth === false) {
189+
if (length === 0) {
189190
return '<span class="t_keyword">array</span>' +
190191
'<span class="t_punct">(</span>\n' +
191192
'<span class="t_punct">)</span>'

0 commit comments

Comments
 (0)