· 5 years ago · Sep 07, 2020, 01:06 PM
1<script>
2 Sfdump = window.Sfdump || (function (doc) { var refStyle = doc.createElement('style'), rxEsc = /([.*+?^${}()|\[\]\/\\])/g, idRx = /\bsf-dump-\d+-ref[012]\w+\b/, keyHint = 0 <= navigator.platform.toUpperCase().indexOf('MAC') ? 'Cmd' : 'Ctrl', addEventListener = function (e, n, cb) { e.addEventListener(n, cb, false); }; (doc.documentElement.firstElementChild || doc.documentElement.children[0]).appendChild(refStyle); if (!doc.addEventListener) { addEventListener = function (element, eventName, callback) { element.attachEvent('on' + eventName, function (e) { e.preventDefault = function () {e.returnValue = false;}; e.target = e.srcElement; callback(e); }); }; } function toggle(a, recursive) { var s = a.nextSibling || {}, oldClass = s.className, arrow, newClass; if (/\bsf-dump-compact\b/.test(oldClass)) { arrow = '▼'; newClass = 'sf-dump-expanded'; } else if (/\bsf-dump-expanded\b/.test(oldClass)) { arrow = '▶'; newClass = 'sf-dump-compact'; } else { return false; } if (doc.createEvent && s.dispatchEvent) { var event = doc.createEvent('Event'); event.initEvent('sf-dump-expanded' === newClass ? 'sfbeforedumpexpand' : 'sfbeforedumpcollapse', true, false); s.dispatchEvent(event); } a.lastChild.innerHTML = arrow; s.className = s.className.replace(/\bsf-dump-(compact|expanded)\b/, newClass); if (recursive) { try { a = s.querySelectorAll('.'+oldClass); for (s = 0; s < a.length; ++s) { if (-1 == a[s].className.indexOf(newClass)) { a[s].className = newClass; a[s].previousSibling.lastChild.innerHTML = arrow; } } } catch (e) { } } return true; }; function collapse(a, recursive) { var s = a.nextSibling || {}, oldClass = s.className; if (/\bsf-dump-expanded\b/.test(oldClass)) { toggle(a, recursive); return true; } return false; }; function expand(a, recursive) { var s = a.nextSibling || {}, oldClass = s.className; if (/\bsf-dump-compact\b/.test(oldClass)) { toggle(a, recursive); return true; } return false; }; function collapseAll(root) { var a = root.querySelector('a.sf-dump-toggle'); if (a) { collapse(a, true); expand(a); return true; } return false; } function reveal(node) { var previous, parents = []; while ((node = node.parentNode || {}) && (previous = node.previousSibling) && 'A' === previous.tagName) { parents.push(previous); } if (0 !== parents.length) { parents.forEach(function (parent) { expand(parent); }); return true; } return false; } function highlight(root, activeNode, nodes) { resetHighlightedNodes(root); Array.from(nodes||[]).forEach(function (node) { if (!/\bsf-dump-highlight\b/.test(node.className)) { node.className = node.className + ' sf-dump-highlight'; } }); if (!/\bsf-dump-highlight-active\b/.test(activeNode.className)) { activeNode.className = activeNode.className + ' sf-dump-highlight-active'; } } function resetHighlightedNodes(root) { Array.from(root.querySelectorAll('.sf-dump-str, .sf-dump-key, .sf-dump-public, .sf-dump-protected, .sf-dump-private')).forEach(function (strNode) { strNode.className = strNode.className.replace(/\bsf-dump-highlight\b/, ''); strNode.className = strNode.className.replace(/\bsf-dump-highlight-active\b/, ''); }); } return function (root, x) { root = doc.getElementById(root); var indentRx = new RegExp('^('+(root.getAttribute('data-indent-pad') || ' ').replace(rxEsc, '\\$1')+')+', 'm'), options = {"maxDepth":1,"maxStringLength":160,"fileLinkFormat":false}, elt = root.getElementsByTagName('A'), len = elt.length, i = 0, s, h, t = []; while (i < len) t.push(elt[i++]); for (i in x) { options[i] = x[i]; } function a(e, f) { addEventListener(root, e, function (e) { if ('A' == e.target.tagName) { f(e.target, e); } else if ('A' == e.target.parentNode.tagName) { f(e.target.parentNode, e); } else if (e.target.nextElementSibling && 'A' == e.target.nextElementSibling.tagName) { f(e.target.nextElementSibling, e, true); } }); }; function isCtrlKey(e) { return e.ctrlKey || e.metaKey; } function xpathString(str) { var parts = str.match(/[^'"]+|['"]/g).map(function (part) { if ("'" == part) { return '"\'"'; } if ('"' == part) { return "'\"'"; } return "'" + part + "'"; }); return "concat(" + parts.join(",") + ", '')"; } function xpathHasClass(className) { return "contains(concat(' ', normalize-space(@class), ' '), ' " + className +" ')"; } addEventListener(root, 'mouseover', function (e) { if ('' != refStyle.innerHTML) { refStyle.innerHTML = ''; } }); a('mouseover', function (a, e, c) { if (c) { e.target.style.cursor = "pointer"; } else if (a = idRx.exec(a.className)) { try { refStyle.innerHTML = 'pre.sf-dump .'+a[0]+'{background-color: #B729D9; color: #FFF !important; border-radius: 2px}'; } catch (e) { } } }); a('click', function (a, e, c) { if (/\bsf-dump-toggle\b/.test(a.className)) { e.preventDefault(); if (!toggle(a, isCtrlKey(e))) { var r = doc.getElementById(a.getAttribute('href').substr(1)), s = r.previousSibling, f = r.parentNode, t = a.parentNode; t.replaceChild(r, a); f.replaceChild(a, s); t.insertBefore(s, r); f = f.firstChild.nodeValue.match(indentRx); t = t.firstChild.nodeValue.match(indentRx); if (f && t && f[0] !== t[0]) { r.innerHTML = r.innerHTML.replace(new RegExp('^'+f[0].replace(rxEsc, '\\$1'), 'mg'), t[0]); } if (/\bsf-dump-compact\b/.test(r.className)) { toggle(s, isCtrlKey(e)); } } if (c) { } else if (doc.getSelection) { try { doc.getSelection().removeAllRanges(); } catch (e) { doc.getSelection().empty(); } } else { doc.selection.empty(); } } else if (/\bsf-dump-str-toggle\b/.test(a.className)) { e.preventDefault(); e = a.parentNode.parentNode; e.className = e.className.replace(/\bsf-dump-str-(expand|collapse)\b/, a.parentNode.className); } }); elt = root.getElementsByTagName('SAMP'); len = elt.length; i = 0; while (i < len) t.push(elt[i++]); len = t.length; for (i = 0; i < len; ++i) { elt = t[i]; if ('SAMP' == elt.tagName) { a = elt.previousSibling || {}; if ('A' != a.tagName) { a = doc.createElement('A'); a.className = 'sf-dump-ref'; elt.parentNode.insertBefore(a, elt); } else { a.innerHTML += ' '; } a.title = (a.title ? a.title+'\n[' : '[')+keyHint+'+click] Expand all children'; a.innerHTML += '<span>▼</span>'; a.className += ' sf-dump-toggle'; x = 1; if ('sf-dump' != elt.parentNode.className) { x += elt.parentNode.getAttribute('data-depth')/1; } elt.setAttribute('data-depth', x); var className = elt.className; elt.className = 'sf-dump-expanded'; if (className ? 'sf-dump-expanded' !== className : (x > options.maxDepth)) { toggle(a); } } else if (/\bsf-dump-ref\b/.test(elt.className) && (a = elt.getAttribute('href'))) { a = a.substr(1); elt.className += ' '+a; if (/[\[{]$/.test(elt.previousSibling.nodeValue)) { a = a != elt.nextSibling.id && doc.getElementById(a); try { s = a.nextSibling; elt.appendChild(a); s.parentNode.insertBefore(a, s); if (/^[@#]/.test(elt.innerHTML)) { elt.innerHTML += ' <span>▶</span>'; } else { elt.innerHTML = '<span>▶</span>'; elt.className = 'sf-dump-ref'; } elt.className += ' sf-dump-toggle'; } catch (e) { if ('&' == elt.innerHTML.charAt(0)) { elt.innerHTML = '…'; elt.className = 'sf-dump-ref'; } } } } } if (doc.evaluate && Array.from && root.children.length > 1) { root.setAttribute('tabindex', 0); SearchState = function () { this.nodes = []; this.idx = 0; }; SearchState.prototype = { next: function () { if (this.isEmpty()) { return this.current(); } this.idx = this.idx < (this.nodes.length - 1) ? this.idx + 1 : 0; return this.current(); }, previous: function () { if (this.isEmpty()) { return this.current(); } this.idx = this.idx > 0 ? this.idx - 1 : (this.nodes.length - 1); return this.current(); }, isEmpty: function () { return 0 === this.count(); }, current: function () { if (this.isEmpty()) { return null; } return this.nodes[this.idx]; }, reset: function () { this.nodes = []; this.idx = 0; }, count: function () { return this.nodes.length; }, }; function showCurrent(state) { var currentNode = state.current(); if (currentNode) { reveal(currentNode); highlight(root, currentNode, state.nodes); } counter.textContent = (state.isEmpty() ? 0 : state.idx + 1) + ' of ' + state.count(); } var search = doc.createElement('div'); search.className = 'sf-dump-search-wrapper sf-dump-search-hidden'; search.innerHTML = ' <input type="text" class="sf-dump-search-input"> <span class="sf-dump-search-count">0 of 0<\/span> <button type="button" class="sf-dump-search-input-previous" tabindex="-1"> <svg viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1683 1331l-166 165q-19 19-45 19t-45-19L896 965l-531 531q-19 19-45 19t-45-19l-166-165q-19-19-19-45.5t19-45.5l742-741q19-19 45-19t45 19l742 741q19 19 19 45.5t-19 45.5z"\/><\/svg> <\/button> <button type="button" class="sf-dump-search-input-next" tabindex="-1"> <svg viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1683 808l-742 741q-19 19-45 19t-45-19L109 808q-19-19-19-45.5t19-45.5l166-165q19-19 45-19t45 19l531 531 531-531q19-19 45-19t45 19l166 165q19 19 19 45.5t-19 45.5z"\/><\/svg> <\/button> '; root.insertBefore(search, root.firstChild); var state = new SearchState(); var searchInput = search.querySelector('.sf-dump-search-input'); var counter = search.querySelector('.sf-dump-search-count'); var searchInputTimer = 0; var previousSearchQuery = ''; addEventListener(searchInput, 'keyup', function (e) { var searchQuery = e.target.value; /* Don't perform anything if the pressed key didn't change the query */ if (searchQuery === previousSearchQuery) { return; } previousSearchQuery = searchQuery; clearTimeout(searchInputTimer); searchInputTimer = setTimeout(function () { state.reset(); collapseAll(root); resetHighlightedNodes(root); if ('' === searchQuery) { counter.textContent = '0 of 0'; return; } var classMatches = [ "sf-dump-str", "sf-dump-key", "sf-dump-public", "sf-dump-protected", "sf-dump-private", ].map(xpathHasClass).join(' or '); var xpathResult = doc.evaluate('.//span[' + classMatches + '][contains(translate(child::text(), ' + xpathString(searchQuery.toUpperCase()) + ', ' + xpathString(searchQuery.toLowerCase()) + '), ' + xpathString(searchQuery.toLowerCase()) + ')]', root, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null); while (node = xpathResult.iterateNext()) state.nodes.push(node); showCurrent(state); }, 400); }); Array.from(search.querySelectorAll('.sf-dump-search-input-next, .sf-dump-search-input-previous')).forEach(function (btn) { addEventListener(btn, 'click', function (e) { e.preventDefault(); -1 !== e.target.className.indexOf('next') ? state.next() : state.previous(); searchInput.focus(); collapseAll(root); showCurrent(state); }) }); addEventListener(root, 'keydown', function (e) { var isSearchActive = !/\bsf-dump-search-hidden\b/.test(search.className); if ((114 === e.keyCode && !isSearchActive) || (isCtrlKey(e) && 70 === e.keyCode)) { /* F3 or CMD/CTRL + F */ e.preventDefault(); search.className = search.className.replace(/\bsf-dump-search-hidden\b/, ''); searchInput.focus(); } else if (isSearchActive) { if (27 === e.keyCode) { /* ESC key */ search.className += ' sf-dump-search-hidden'; e.preventDefault(); resetHighlightedNodes(root); searchInput.value = ''; } else if ( (isCtrlKey(e) && 71 === e.keyCode) /* CMD/CTRL + G */ || 13 === e.keyCode /* Enter */ || 114 === e.keyCode /* F3 */ ) { e.preventDefault(); e.shiftKey ? state.previous() : state.next(); collapseAll(root); showCurrent(state); } } }); } if (0 >= options.maxStringLength) { return; } try { elt = root.querySelectorAll('.sf-dump-str'); len = elt.length; i = 0; t = []; while (i < len) t.push(elt[i++]); len = t.length; for (i = 0; i < len; ++i) { elt = t[i]; s = elt.innerText || elt.textContent; x = s.length - options.maxStringLength; if (0 < x) { h = elt.innerHTML; elt[elt.innerText ? 'innerText' : 'textContent'] = s.substring(0, options.maxStringLength); elt.className += ' sf-dump-str-collapse'; elt.innerHTML = '<span class=sf-dump-str-collapse>'+h+'<a class="sf-dump-ref sf-dump-str-toggle" title="Collapse"> ◀</a></span>'+ '<span class=sf-dump-str-expand>'+elt.innerHTML+'<a class="sf-dump-ref sf-dump-str-toggle" title="'+x+' remaining characters"> ▶</a></span>'; } } } catch (e) { } }; })(document);
3</script>
4<style>
5 pre.sf-dump {
6 display: block;
7 white-space: pre;
8 padding: 5px;
9 }
10
11 pre.sf-dump:after {
12 content: "";
13 visibility: hidden;
14 display: block;
15 height: 0;
16 clear: both;
17 }
18
19 pre.sf-dump span {
20 display: inline;
21 }
22
23 pre.sf-dump .sf-dump-compact {
24 display: none;
25 }
26
27 pre.sf-dump abbr {
28 text-decoration: none;
29 border: none;
30 cursor: help;
31 }
32
33 pre.sf-dump a {
34 text-decoration: none;
35 cursor: pointer;
36 border: 0;
37 outline: none;
38 color: inherit;
39 }
40
41 pre.sf-dump .sf-dump-ellipsis {
42 display: inline-block;
43 overflow: visible;
44 text-overflow: ellipsis;
45 max-width: 5em;
46 white-space: nowrap;
47 overflow: hidden;
48 vertical-align: top;
49 }
50
51 pre.sf-dump .sf-dump-ellipsis+.sf-dump-ellipsis {
52 max-width: none;
53 }
54
55 pre.sf-dump code {
56 display: inline;
57 padding: 0;
58 background: none;
59 }
60
61 .sf-dump-str-collapse .sf-dump-str-collapse {
62 display: none;
63 }
64
65 .sf-dump-str-expand .sf-dump-str-expand {
66 display: none;
67 }
68
69 .sf-dump-public.sf-dump-highlight,
70 .sf-dump-protected.sf-dump-highlight,
71 .sf-dump-private.sf-dump-highlight,
72 .sf-dump-str.sf-dump-highlight,
73 .sf-dump-key.sf-dump-highlight {
74 background: rgba(111, 172, 204, 0.3);
75 border: 1px solid #7DA0B1;
76 border-radius: 3px;
77 }
78
79 .sf-dump-public.sf-dump-highlight-active,
80 .sf-dump-protected.sf-dump-highlight-active,
81 .sf-dump-private.sf-dump-highlight-active,
82 .sf-dump-str.sf-dump-highlight-active,
83 .sf-dump-key.sf-dump-highlight-active {
84 background: rgba(253, 175, 0, 0.4);
85 border: 1px solid #ffa500;
86 border-radius: 3px;
87 }
88
89 pre.sf-dump .sf-dump-search-hidden {
90 display: none;
91 }
92
93 pre.sf-dump .sf-dump-search-wrapper {
94 float: right;
95 font-size: 0;
96 white-space: nowrap;
97 max-width: 100%;
98 text-align: right;
99 }
100
101 pre.sf-dump .sf-dump-search-wrapper>* {
102 vertical-align: top;
103 box-sizing: border-box;
104 height: 21px;
105 font-weight: normal;
106 border-radius: 0;
107 background: #FFF;
108 color: #757575;
109 border: 1px solid #BBB;
110 }
111
112 pre.sf-dump .sf-dump-search-wrapper>input.sf-dump-search-input {
113 padding: 3px;
114 height: 21px;
115 font-size: 12px;
116 border-right: none;
117 width: 140px;
118 border-top-left-radius: 3px;
119 border-bottom-left-radius: 3px;
120 color: #000;
121 }
122
123 pre.sf-dump .sf-dump-search-wrapper>.sf-dump-search-input-next,
124 pre.sf-dump .sf-dump-search-wrapper>.sf-dump-search-input-previous {
125 background: #F2F2F2;
126 outline: none;
127 border-left: none;
128 font-size: 0;
129 line-height: 0;
130 }
131
132 pre.sf-dump .sf-dump-search-wrapper>.sf-dump-search-input-next {
133 border-top-right-radius: 3px;
134 border-bottom-right-radius: 3px;
135 }
136
137 pre.sf-dump .sf-dump-search-wrapper>.sf-dump-search-input-next>svg,
138 pre.sf-dump .sf-dump-search-wrapper>.sf-dump-search-input-previous>svg {
139 pointer-events: none;
140 width: 12px;
141 height: 12px;
142 }
143
144 pre.sf-dump .sf-dump-search-wrapper>.sf-dump-search-count {
145 display: inline-block;
146 padding: 0 5px;
147 margin: 0;
148 border-left: none;
149 line-height: 21px;
150 font-size: 12px;
151 }
152
153 pre.sf-dump,
154 pre.sf-dump .sf-dump-default {
155 background-color: #fff;
156 color: #222;
157 line-height: 1.2em;
158 font-weight: normal;
159 font: 12px Monaco, Consolas, monospace;
160 word-wrap: break-word;
161 white-space: pre-wrap;
162 position: relative;
163 z-index: 100000
164 }
165
166 pre.sf-dump .sf-dump-num {
167 color: #a71d5d
168 }
169
170 pre.sf-dump .sf-dump-const {
171 color: #795da3
172 }
173
174 pre.sf-dump .sf-dump-str {
175 color: #df5000
176 }
177
178 pre.sf-dump .sf-dump-cchr {
179 color: #222
180 }
181
182 pre.sf-dump .sf-dump-note {
183 color: #a71d5d
184 }
185
186 pre.sf-dump .sf-dump-ref {
187 color: #a0a0a0
188 }
189
190 pre.sf-dump .sf-dump-public {
191 color: #795da3
192 }
193
194 pre.sf-dump .sf-dump-protected {
195 color: #795da3
196 }
197
198 pre.sf-dump .sf-dump-private {
199 color: #795da3
200 }
201
202 pre.sf-dump .sf-dump-meta {
203 color: #b729d9
204 }
205
206 pre.sf-dump .sf-dump-key {
207 color: #df5000
208 }
209
210 pre.sf-dump .sf-dump-index {
211 color: #a71d5d
212 }
213</style>
214<pre class=sf-dump id=sf-dump-804892443 data-indent-pad=" ">"""
215<span class=sf-dump-str title="615 characters">Client error: `GET https://graph.facebook.com/v3.0/me?access_token=EAASNZCrDc8U4BAFHrqmYiRfLG7ombajxBF9di6ZBQGYkTtZCnKOfj4BtDIXxyUbK7WvEVeaCz4VqDpkZCjnXAjKrtAZBCLIjDqPprPmg04H42e7sZAnwsZABmceSg0LP7J2wZBICZBGs6rPFIzulBsEPZCXjNZA6H8vbUX0d7cDEIUpqRGqzp8BWJP61rNR2nVIDxJIHApGOmzrRL4695deek8pigxaaaU916ZBZB6Sl0RuJ1VQZDZD&fields=name,email,gender,verified,link&appsecret_proof=0ee75e60d2167e06fb8d61a8c8c38fe5dfebcce38bddf1965dae40063265a19a` resulted in a `400 Bad Request` response:<span class=sf-dump-default>\n</span></span>
216<span class=sf-dump-str title="615 characters">{"error":{"message":"Invalid appsecret_proof provided in the API argument","type":"GraphMethodException","code":100,"fbt (truncated...)<span class=sf-dump-default>\n</span></span>
217"""
218</pre>
219<script>
220 Sfdump("sf-dump-804892443")
221</script>