Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <script>
- 'use strict';
- Sfdump = window.Sfdump || function(doc) {
- /**
- * @param {!Object} element
- * @param {boolean} status
- * @return {?}
- */
- function callback(element, status) {
- var c = element.nextSibling || {};
- var classes = c.className;
- var arrow;
- var i;
- if (/\bsf-dump-compact\b/.test(classes)) {
- /** @type {string} */
- arrow = "▼";
- /** @type {string} */
- i = "sf-dump-expanded";
- } else {
- if (/\bsf-dump-expanded\b/.test(classes)) {
- /** @type {string} */
- arrow = "▶";
- /** @type {string} */
- i = "sf-dump-compact";
- } else {
- return false;
- }
- }
- if (doc.createEvent && c.dispatchEvent) {
- /** @type {(Event|null)} */
- var event = doc.createEvent("Event");
- event.initEvent("sf-dump-expanded" === i ? "sfbeforedumpexpand" : "sfbeforedumpcollapse", true, false);
- c.dispatchEvent(event);
- }
- /** @type {string} */
- element.lastChild.innerHTML = arrow;
- c.className = c.className.replace(/\bsf-dump-(compact|expanded)\b/, i);
- if (status) {
- try {
- element = c.querySelectorAll("." + classes);
- /** @type {number} */
- c = 0;
- for (; c < element.length; ++c) {
- if (-1 == element[c].className.indexOf(i)) {
- /** @type {string} */
- element[c].className = i;
- /** @type {string} */
- element[c].previousSibling.lastChild.innerHTML = arrow;
- }
- }
- } catch (e) {
- }
- }
- return true;
- }
- /**
- * @param {!Object} a
- * @param {boolean} size
- * @return {?}
- */
- function remove(a, size) {
- var jsGridCell = a.nextSibling || {};
- var oldClass = jsGridCell.className;
- if (/\bsf-dump-expanded\b/.test(oldClass)) {
- callback(a, size);
- return true;
- }
- return false;
- }
- /**
- * @param {!Object} a
- * @param {boolean} size
- * @return {?}
- */
- function get(a, size) {
- var jsGridCell = a.nextSibling || {};
- var oldClass = jsGridCell.className;
- if (/\bsf-dump-compact\b/.test(oldClass)) {
- callback(a, size);
- return true;
- }
- return false;
- }
- /**
- * @param {!Element} row
- * @return {?}
- */
- function collapseAll(row) {
- var matches = row.querySelector("a.sf-dump-toggle");
- if (matches) {
- remove(matches, true);
- get(matches);
- return true;
- }
- return false;
- }
- /**
- * @param {!Object} prev
- * @return {?}
- */
- function show(prev) {
- var node;
- /** @type {!Array} */
- var allCustomElements = [];
- for (; (prev = prev.parentNode || {}) && (node = prev.previousSibling) && "A" === node.tagName;) {
- allCustomElements.push(node);
- }
- if (0 !== allCustomElements.length) {
- allCustomElements.forEach(function(parent) {
- get(parent);
- });
- return true;
- }
- return false;
- }
- /**
- * @param {!Node} node
- * @param {!Object} map
- * @param {number} keys
- * @return {undefined}
- */
- function build(node, map, keys) {
- closeChildAnimations(node);
- Array.from(keys || []).forEach(function(node) {
- if (!/\bsf-dump-highlight\b/.test(node.className)) {
- /** @type {string} */
- node.className = node.className + " sf-dump-highlight";
- }
- });
- if (!/\bsf-dump-highlight-active\b/.test(map.className)) {
- /** @type {string} */
- map.className = map.className + " sf-dump-highlight-active";
- }
- }
- /**
- * @param {!Node} node
- * @return {undefined}
- */
- function closeChildAnimations(node) {
- Array.from(node.querySelectorAll(".sf-dump-str, .sf-dump-key, .sf-dump-public, .sf-dump-protected, .sf-dump-private")).forEach(function(wrapAt) {
- wrapAt.className = wrapAt.className.replace(/\bsf-dump-highlight\b/, "");
- wrapAt.className = wrapAt.className.replace(/\bsf-dump-highlight-active\b/, "");
- });
- }
- /** @type {!Element} */
- var t = doc.createElement("style");
- /** @type {!RegExp} */
- var REGEX_ESCAPE_EXPR = /([.*+?^${}()|\[\]\/\\])/g;
- /** @type {!RegExp} */
- var rTest = /\bsf-dump-\d+-ref[012]\w+\b/;
- /** @type {string} */
- var key = 0 <= navigator.platform.toUpperCase().indexOf("MAC") ? "Cmd" : "Ctrl";
- /**
- * @param {!Node} element
- * @param {string} type
- * @param {!Function} fn
- * @return {undefined}
- */
- var addEvent = function(element, type, fn) {
- element.addEventListener(type, fn, false);
- };
- (doc.documentElement.firstElementChild || doc.documentElement.children[0]).appendChild(t);
- if (!doc.addEventListener) {
- /**
- * @param {!Element} element
- * @param {string} type
- * @param {!Function} callback
- * @return {undefined}
- */
- addEvent = function(element, type, callback) {
- element.attachEvent("on" + type, function(event) {
- /**
- * @return {undefined}
- */
- event.preventDefault = function() {
- /** @type {boolean} */
- event.returnValue = false;
- };
- event.target = event.srcElement;
- callback(event);
- });
- };
- }
- return function(node, i) {
- /**
- * @param {string} event
- * @param {!Function} $
- * @return {undefined}
- */
- function link(event, $) {
- addEvent(node, event, function(e) {
- if ("A" == e.target.tagName) {
- $(e.target, e);
- } else {
- if ("A" == e.target.parentNode.tagName) {
- $(e.target.parentNode, e);
- } else {
- if (e.target.nextElementSibling && "A" == e.target.nextElementSibling.tagName) {
- $(e.target.nextElementSibling, e, true);
- }
- }
- }
- });
- }
- /**
- * @param {!Object} event
- * @return {?}
- */
- function linkClickWillUnloadCurrentPage(event) {
- return event.ctrlKey || event.metaKey;
- }
- /**
- * @param {string} seq
- * @return {?}
- */
- function editor_update_input_group(seq) {
- var parts = seq.match(/[^'"]+|['"]/g).map(function(canCreateDiscussions) {
- if ("'" == canCreateDiscussions) {
- return '"\'"';
- }
- if ('"' == canCreateDiscussions) {
- return "'\"'";
- }
- return "'" + canCreateDiscussions + "'";
- });
- return "concat(" + parts.join(",") + ", '')";
- }
- /**
- * @param {string} canCreateDiscussions
- * @return {?}
- */
- function _jsModuleExtensions(canCreateDiscussions) {
- return "contains(concat(' ', normalize-space(@class), ' '), ' " + canCreateDiscussions + " ')";
- }
- /** @type {(Element|null)} */
- node = doc.getElementById(node);
- /** @type {!RegExp} */
- var reg = new RegExp("^(" + (node.getAttribute("data-indent-pad") || " ").replace(REGEX_ESCAPE_EXPR, "\\$1") + ")+", "m");
- var s = {
- "maxDepth" : 1,
- "maxStringLength" : 160,
- "fileLinkFormat" : false
- };
- /** @type {!NodeList<Element>} */
- var a = node.getElementsByTagName("A");
- /** @type {number} */
- var len = a.length;
- /** @type {number} */
- var j = 0;
- var r;
- var actual;
- /** @type {!Array} */
- var p = [];
- for (; j < len;) {
- p.push(a[j++]);
- }
- for (j in i) {
- s[j] = i[j];
- }
- addEvent(node, "mouseover", function(canCreateDiscussions) {
- if ("" != t.innerHTML) {
- /** @type {string} */
- t.innerHTML = "";
- }
- });
- link("mouseover", function(span, e, canCreateDiscussions) {
- if (canCreateDiscussions) {
- /** @type {string} */
- e.target.style.cursor = "pointer";
- } else {
- if (span = rTest.exec(span.className)) {
- try {
- /** @type {string} */
- t.innerHTML = "pre.sf-dump ." + span[0] + "{background-color: #B729D9; color: #FFF !important; border-radius: 2px}";
- } catch (e) {
- }
- }
- }
- });
- link("click", function(a, e, canCreateDiscussions) {
- if (/\bsf-dump-toggle\b/.test(a.className)) {
- e.preventDefault();
- if (!callback(a, linkClickWillUnloadCurrentPage(e))) {
- /** @type {(Element|null)} */
- var e = doc.getElementById(a.getAttribute("href").substr(1));
- /** @type {(Node|null)} */
- var p = e.previousSibling;
- /** @type {(Node|null)} */
- var n = e.parentNode;
- var r = a.parentNode;
- r.replaceChild(e, a);
- n.replaceChild(a, p);
- r.insertBefore(p, e);
- /** @type {(Array<string>|null)} */
- n = n.firstChild.nodeValue.match(reg);
- r = r.firstChild.nodeValue.match(reg);
- if (n && r && n[0] !== r[0]) {
- /** @type {string} */
- e.innerHTML = e.innerHTML.replace(new RegExp("^" + n[0].replace(REGEX_ESCAPE_EXPR, "\\$1"), "mg"), r[0]);
- }
- if (/\bsf-dump-compact\b/.test(e.className)) {
- callback(p, linkClickWillUnloadCurrentPage(e));
- }
- }
- if (canCreateDiscussions) {
- } 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);
- }
- }
- });
- /** @type {!NodeList<Element>} */
- a = node.getElementsByTagName("SAMP");
- /** @type {number} */
- len = a.length;
- /** @type {number} */
- j = 0;
- for (; j < len;) {
- p.push(a[j++]);
- }
- /** @type {number} */
- len = p.length;
- /** @type {number} */
- j = 0;
- for (; j < len; ++j) {
- a = p[j];
- if ("SAMP" == a.tagName) {
- link = a.previousSibling || {};
- if ("A" != link.tagName) {
- /** @type {!Element} */
- link = doc.createElement("A");
- /** @type {string} */
- link.className = "sf-dump-ref";
- a.parentNode.insertBefore(link, a);
- } else {
- link.innerHTML += " ";
- }
- /** @type {string} */
- link.title = (link.title ? link.title + "\n[" : "[") + key + "+click] Expand all children";
- link.innerHTML += "<span>▼</span>";
- link.className += " sf-dump-toggle";
- /** @type {number} */
- i = 1;
- if ("sf-dump" != a.parentNode.className) {
- /** @type {number} */
- i = i + a.parentNode.getAttribute("data-depth") / 1;
- }
- a.setAttribute("data-depth", i);
- var state = a.className;
- /** @type {string} */
- a.className = "sf-dump-expanded";
- if (state ? "sf-dump-expanded" !== state : i > s.maxDepth) {
- callback(link);
- }
- } else {
- if (/\bsf-dump-ref\b/.test(a.className) && (link = a.getAttribute("href"))) {
- link = link.substr(1);
- a.className += " " + link;
- if (/[\[{]$/.test(a.previousSibling.nodeValue)) {
- /** @type {(Element|boolean|null)} */
- link = link != a.nextSibling.id && doc.getElementById(link);
- try {
- /** @type {(Node|null)} */
- r = link.nextSibling;
- a.appendChild(link);
- r.parentNode.insertBefore(link, r);
- if (/^[@#]/.test(a.innerHTML)) {
- a.innerHTML += " <span>▶</span>";
- } else {
- /** @type {string} */
- a.innerHTML = "<span>▶</span>";
- /** @type {string} */
- a.className = "sf-dump-ref";
- }
- a.className += " sf-dump-toggle";
- } catch (e) {
- if ("&" == a.innerHTML.charAt(0)) {
- /** @type {string} */
- a.innerHTML = "…";
- /** @type {string} */
- a.className = "sf-dump-ref";
- }
- }
- }
- }
- }
- }
- if (doc.evaluate && Array.from && node.children.length > 1) {
- /**
- * @param {!Object} options
- * @return {undefined}
- */
- var displayCrumbs = function(options) {
- var main = options.current();
- if (main) {
- show(main);
- build(node, main, options.nodes);
- }
- td1b2.textContent = (options.isEmpty() ? 0 : options.idx + 1) + " of " + options.count();
- };
- node.setAttribute("tabindex", 0);
- /**
- * @return {undefined}
- */
- SearchState = function() {
- /** @type {!Array} */
- this.nodes = [];
- /** @type {number} */
- 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();
- }
- /** @type {number} */
- 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() {
- /** @type {!Array} */
- this.nodes = [];
- /** @type {number} */
- this.idx = 0;
- },
- count : function() {
- return this.nodes.length;
- }
- };
- /** @type {!Element} */
- var search = doc.createElement("div");
- /** @type {string} */
- search.className = "sf-dump-search-wrapper sf-dump-search-hidden";
- /** @type {string} */
- 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> ';
- node.insertBefore(search, node.firstChild);
- var o = new SearchState;
- /** @type {(Element|null)} */
- var arcRange = search.querySelector(".sf-dump-search-input");
- /** @type {(Element|null)} */
- var td1b2 = search.querySelector(".sf-dump-search-count");
- /** @type {number} */
- var searchInputTimer = 0;
- /** @type {string} */
- var log_last_message = "";
- addEvent(arcRange, "keyup", function(e) {
- var message = e.target.value;
- if (message === log_last_message) {
- return;
- }
- log_last_message = message;
- clearTimeout(searchInputTimer);
- /** @type {number} */
- searchInputTimer = setTimeout(function() {
- o.reset();
- collapseAll(node);
- closeChildAnimations(node);
- if ("" === message) {
- /** @type {string} */
- td1b2.textContent = "0 of 0";
- return;
- }
- /** @type {string} */
- var classMatches = ["sf-dump-str", "sf-dump-key", "sf-dump-public", "sf-dump-protected", "sf-dump-private"].map(_jsModuleExtensions).join(" or ");
- var XPathResults = doc.evaluate(".//span[" + classMatches + "][contains(translate(child::text(), " + editor_update_input_group(message.toUpperCase()) + ", " + editor_update_input_group(message.toLowerCase()) + "), " + editor_update_input_group(message.toLowerCase()) + ")]", node, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
- for (; node = XPathResults.iterateNext();) {
- o.nodes.push(node);
- }
- displayCrumbs(o);
- }, 400);
- });
- Array.from(search.querySelectorAll(".sf-dump-search-input-next, .sf-dump-search-input-previous")).forEach(function(nextElement) {
- addEvent(nextElement, "click", function(event) {
- event.preventDefault();
- if (-1 !== event.target.className.indexOf("next")) {
- o.next();
- } else {
- o.previous();
- }
- arcRange.focus();
- collapseAll(node);
- displayCrumbs(o);
- });
- });
- addEvent(node, "keydown", function(event) {
- /** @type {boolean} */
- var isSearchActive = !/\bsf-dump-search-hidden\b/.test(search.className);
- if (114 === event.keyCode && !isSearchActive || linkClickWillUnloadCurrentPage(event) && 70 === event.keyCode) {
- event.preventDefault();
- search.className = search.className.replace(/\bsf-dump-search-hidden\b/, "");
- arcRange.focus();
- } else {
- if (isSearchActive) {
- if (27 === event.keyCode) {
- search.className += " sf-dump-search-hidden";
- event.preventDefault();
- closeChildAnimations(node);
- /** @type {string} */
- arcRange.value = "";
- } else {
- if (linkClickWillUnloadCurrentPage(event) && 71 === event.keyCode || 13 === event.keyCode || 114 === event.keyCode) {
- event.preventDefault();
- if (event.shiftKey) {
- o.previous();
- } else {
- o.next();
- }
- collapseAll(node);
- displayCrumbs(o);
- }
- }
- }
- }
- });
- }
- if (0 >= s.maxStringLength) {
- return;
- }
- try {
- /** @type {!NodeList<Element>} */
- a = node.querySelectorAll(".sf-dump-str");
- /** @type {number} */
- len = a.length;
- /** @type {number} */
- j = 0;
- /** @type {!Array} */
- p = [];
- for (; j < len;) {
- p.push(a[j++]);
- }
- /** @type {number} */
- len = p.length;
- /** @type {number} */
- j = 0;
- for (; j < len; ++j) {
- a = p[j];
- r = a.innerText || a.textContent;
- /** @type {number} */
- i = r.length - s.maxStringLength;
- if (0 < i) {
- actual = a.innerHTML;
- a[a.innerText ? "innerText" : "textContent"] = r.substring(0, s.maxStringLength);
- a.className += " sf-dump-str-collapse";
- /** @type {string} */
- a.innerHTML = "<span class=sf-dump-str-collapse>" + actual + '<a class="sf-dump-ref sf-dump-str-toggle" title="Collapse"> ◀</a></span>' + "<span class=sf-dump-str-expand>" + a.innerHTML + '<a class="sf-dump-ref sf-dump-str-toggle" title="' + i + ' remaining characters"> ▶</a></span>';
- }
- }
- } catch (e) {
- }
- };
- }(document);
- </script>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement