|
585 | 585 | abs.cfgFlags = 0x3FFFFF; // 21 bits |
586 | 586 | } |
587 | 587 | strClassname = this.dumpClassname(abs); |
588 | | - if (abs.isMaxDepth) { |
589 | | - this.dumper.getDumpOpts().attribs.class.push('max-depth'); |
590 | | - } |
591 | 588 | if (abs.isRecursion) { |
592 | 589 | return strClassname + |
593 | 590 | ' <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) { |
595 | 597 | return strClassname + |
596 | 598 | ' <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) { |
598 | 601 | return strClassname |
599 | 602 | } |
600 | 603 | try { |
|
974 | 977 | attributeOut: paramAttributeOut, |
975 | 978 | phpDocOut: phpDocOut |
976 | 979 | }); |
977 | | - var returnType = ''; |
978 | 980 | if (info.isFinal) { |
979 | 981 | $dd.addClass('final'); |
980 | 982 | modifiers.push('<span class="t_modifier_final">final</span>'); |
|
983 | 985 | if (info.isStatic) { |
984 | 986 | modifiers.push('<span class="t_modifier_static">static</span>'); |
985 | 987 | } |
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 | | - } |
994 | 988 | $dd.html( |
995 | 989 | modifiers.join(' ') + |
996 | | - returnType + |
| 990 | + // returnType + |
997 | 991 | ' <span class="t_identifier"' + |
998 | 992 | (phpDocOut && info.phpDoc && info.phpDoc.summary !== null |
999 | 993 | ? ' title="' + info.phpDoc.summary.escapeHtml() + '"' |
1000 | 994 | : '' |
1001 | 995 | ) + |
1002 | 996 | '>' + k + '</span>' + |
1003 | 997 | '<span class="t_punct">(</span>' + paramStr + '<span class="t_punct">)</span>' + |
| 998 | + self.dumpMethodReturn(info, { phpDocOut: phpDocOut }) + |
1004 | 999 | (k === '__toString' |
1005 | 1000 | ? '<br />' + self.dumper.dump(info.returnValue) |
1006 | 1001 | : '' |
|
1074 | 1069 | : '' |
1075 | 1070 | }; |
1076 | 1071 |
|
| 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 | + |
1077 | 1086 | function magicMethodInfo (abs, methods) { |
1078 | 1087 | var i = 0; |
1079 | 1088 | var methodsHave = []; |
|
1175 | 1184 | var base64Arraybuffer_1 = base64Arraybuffer.encode; |
1176 | 1185 | var base64Arraybuffer_2 = base64Arraybuffer.decode; |
1177 | 1186 |
|
| 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">… ' + (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 | + |
1178 | 1282 | /** |
1179 | 1283 | * Nutshell: working with strings in Javascript is a PITA |
1180 | 1284 | * |
|
1734 | 1838 |
|
1735 | 1839 | function DumpString (dump) { |
1736 | 1840 | this.dumper = dump; |
| 1841 | + this.dumpEncoded = new DumpStringEncoded(this); |
1737 | 1842 | } |
1738 | 1843 |
|
1739 | 1844 | DumpString.prototype.dump = function (val, abs) { |
|
1762 | 1867 | return parsed.innerhtml |
1763 | 1868 | } |
1764 | 1869 | 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) |
1767 | 1872 | } |
1768 | 1873 | if (abs.typeMore === 'binary') { |
1769 | 1874 | return this.dumpBinary(abs) |
|
1844 | 1949 | return val |
1845 | 1950 | }; |
1846 | 1951 |
|
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 | | - |
1879 | 1952 | DumpString.prototype.helper = function (val) { |
1880 | 1953 | var bytes = val.substr(0, 6) === '_b64_:' |
1881 | 1954 | ? new Uint8Array(base64Arraybuffer.decode(val.substr(6))) |
|
1890 | 1963 | return val |
1891 | 1964 | }; |
1892 | 1965 |
|
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">… ' + (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 | + }; |
1936 | 1969 |
|
1937 | 1970 | /** |
1938 | 1971 | * Add whitespace markup |
|
2142 | 2175 | dumpOpts.attribs.class.push('array-file-tree'); |
2143 | 2176 | } |
2144 | 2177 | 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>' |
2146 | 2180 | } |
2147 | | - if (length === 0 && dumpOpts.isMaxDepth === false) { |
| 2181 | + if (length === 0) { |
2148 | 2182 | return '<span class="t_keyword">array</span>' + |
2149 | 2183 | '<span class="t_punct">(</span>\n' + |
2150 | 2184 | '<span class="t_punct">)</span>' |
|
0 commit comments