/** java -jar compiler.jar --js $FileName$ --js_output_file ../inc/kint.js --compilation_level ADVANCED_OPTIMIZATIONS --output_wrapper "(function(){%output%})()" */ if ( typeof kintInitialized === 'undefined' ) { kintInitialized = 1; var kint = { visiblePluses : [], // all visible toggle carets currentPlus : -1, // currently selected caret selectText : function( element ) { var selection = window.getSelection(), range = document.createRange(); range.selectNodeContents(element); selection.removeAllRanges(); selection.addRange(range); }, each : function( selector, callback ) { Array.prototype.slice.call(document.querySelectorAll(selector), 0).forEach(callback) }, hasClass : function( target, className ) { if ( !target.classList ) return false; if ( typeof className === 'undefined' ) { className = 'kint-show'; } return target.classList.contains(className); }, addClass : function( target, className ) { if ( typeof className === 'undefined' ) { className = 'kint-show'; } target.classList.add(className); }, removeClass : function( target, className ) { if ( typeof className === 'undefined' ) { className = 'kint-show'; } target.classList.remove(className); return target; }, next : function( element ) { do { element = element.nextElementSibling; } while ( element.nodeName.toLowerCase() !== 'dd' ); return element; }, toggle : function( element, hide ) { var parent = kint.next(element); if ( typeof hide === 'undefined' ) { hide = kint.hasClass(element); } if ( hide ) { kint.removeClass(element); } else { kint.addClass(element); } if ( parent.childNodes.length === 1 ) { parent = parent.childNodes[0].childNodes[0]; // reuse variable cause I can // parent is checked in case of empty
when array("\n") is dumped if ( parent && kint.hasClass(parent, 'kint-parent') ) { kint.toggle(parent, hide) } } }, toggleChildren : function( element, hide ) { var parent = kint.next(element) , nodes = parent.getElementsByClassName('kint-parent') , i = nodes.length; if ( typeof hide === 'undefined' ) { hide = kint.hasClass(element); } while ( i-- ) { kint.toggle(nodes[i], hide); } kint.toggle(element, hide); }, toggleAll : function( caret ) { var elements = document.getElementsByClassName('kint-parent') , i = elements.length , visible = kint.hasClass(caret.parentNode); while ( i-- ) { kint.toggle(elements[i], visible); } }, switchTab : function( target ) { var lis, el = target, index = 0; target.parentNode.getElementsByClassName('kint-active-tab')[0].className = ''; target.className = 'kint-active-tab'; // take the index of clicked title tab and make the same n-th content tab visible while ( el = el.previousSibling ) el.nodeType === 1 && index++; lis = target.parentNode.nextSibling.childNodes; for ( var i = 0; i < lis.length; i++ ) { if ( i === index ) { lis[i].style.display = 'block'; if ( lis[i].childNodes.length === 1 ) { el = lis[i].childNodes[0].childNodes[0]; if ( kint.hasClass(el, 'kint-parent') ) { kint.toggle(el, false) } } } else { lis[i].style.display = 'none'; } } }, isSibling : function( el ) { for ( ; ; ) { el = el.parentNode; if ( !el || kint.hasClass(el, 'kint') ) break; } return !!el; }, fetchVisiblePluses : function() { kint.visiblePluses = []; kint.each('.kint nav, .kint-tabs>li:not(.kint-active-tab)', function( el ) { if ( el.offsetWidth !== 0 || el.offsetHeight !== 0 ) { kint.visiblePluses.push(el) } }); }, openInNewWindow : function( kintContainer ) { var newWindow; if ( newWindow = window.open() ) { newWindow.document.open(); newWindow.document.write( '' + '' + 'Kint (' + new Date().toISOString() + ') ' + '' + document.getElementsByClassName('-kint-js')[0].outerHTML + document.getElementsByClassName('-kint-css')[0].outerHTML + '' + '' + '' + '' + kintContainer.parentNode.outerHTML + '' ); newWindow.document.close(); } }, sortTable : function( table, column ) { var tbody = table.tBodies[0]; var format = function( s ) { var n = column === 1 ? s.replace(/^#/, '') : s; if ( isNaN(n) ) { return s.trim().toLocaleLowerCase(); } else { n = parseFloat(n); return isNaN(n) ? s.trim() : n; } }; [].slice.call(table.tBodies[0].rows) .sort(function( a, b ) { a = format(a.cells[column].textContent); b = format(b.cells[column].textContent); if ( a < b ) return -1; if ( a > b ) return 1; return 0; }) .forEach(function( el ) { tbody.appendChild(el); }); }, keyCallBacks : { cleanup : function( i ) { var focusedClass = 'kint-focused'; var prevElement = document.querySelector('.' + focusedClass); prevElement && kint.removeClass(prevElement, focusedClass); if ( i !== -1 ) { var el = kint.visiblePluses[i]; kint.addClass(el, focusedClass); var offsetTop = function( el ) { return el.offsetTop + ( el.offsetParent ? offsetTop(el.offsetParent) : 0 ); }; var top = offsetTop(el) - (window.innerHeight / 2 ); window.scrollTo(0, top); } kint.currentPlus = i; }, moveCursor : function( up, i ) { // todo make the first VISIBLE plus active if ( up ) { if ( --i < 0 ) { i = kint.visiblePluses.length - 1; } } else { if ( ++i >= kint.visiblePluses.length ) { i = 0; } } kint.keyCallBacks.cleanup(i); return false; } } }; window.addEventListener("click", function( e ) { var target = e.target , nodeName = target.nodeName.toLowerCase(); if ( !kint.isSibling(target) ) return; // auto-select name of variable if ( nodeName === 'dfn' ) { kint.selectText(target); target = target.parentNode; } else if ( nodeName === 'var' ) { // stupid workaround for misc elements target = target.parentNode; // to not stop event from further propagating nodeName = target.nodeName.toLowerCase() } else if ( nodeName === 'th' ) { if ( !e.ctrlKey ) { kint.sortTable(target.parentNode.parentNode.parentNode, target.cellIndex) } return false; } // switch tabs if ( nodeName === 'li' && target.parentNode.className === 'kint-tabs' ) { if ( target.className !== 'kint-active-tab' ) { kint.switchTab(target); if ( kint.currentPlus !== -1 ) kint.fetchVisiblePluses(); } return false; } // handle clicks on the navigation caret if ( nodeName === 'nav' ) { // special case for nav in footer if ( target.parentNode.nodeName.toLowerCase() === 'footer' ) { target = target.parentNode; if ( kint.hasClass(target) ) { kint.removeClass(target) } else { kint.addClass(target) } } else { // ensure doubleclick has different behaviour, see below setTimeout(function() { var timer = parseInt(target.kintTimer, 10); if ( timer > 0 ) { target.kintTimer--; } else { kint.toggleChildren(target.parentNode); //