<?php if (ENVIRONMENT !== 'testing') : ?> 
document.addEventListener('DOMContentLoaded', loadDoc, false); 
 
function loadDoc(time) { 
    if (isNaN(time)) { 
        time = document.getElementById("debugbar_loader").getAttribute("data-time"); 
        localStorage.setItem('debugbar-time', time); 
    } 
 
    localStorage.setItem('debugbar-time-new', time); 
 
    var url = "<?= rtrim(site_url(), '/') ?>"; 
 
    var xhttp = new XMLHttpRequest(); 
    xhttp.onreadystatechange = function() { 
        if (this.readyState === 4 && this.status === 200) { 
            var toolbar = document.getElementById("toolbarContainer"); 
            if (!toolbar) { 
                toolbar = document.createElement('div'); 
                toolbar.setAttribute('id', 'toolbarContainer'); 
                document.body.appendChild(toolbar); 
            } 
 
            // copy for easier manipulation 
            let responseText = this.responseText; 
 
            // get csp blocked parts 
            // the style block is the first and starts at 0 
            { 
                let PosBeg = responseText.indexOf( '>', responseText.indexOf( '<style' ) ) + 1; 
                let PosEnd = responseText.indexOf( '</style>', PosBeg ); 
                document.getElementById( 'debugbar_dynamic_style' ).innerHTML = responseText.substr( PosBeg, PosEnd - PosBeg ); 
                responseText = responseText.substr( PosEnd + 8 ); 
            } 
            // the script block starts right after style blocks ended 
            { 
                let PosBeg = responseText.indexOf( '>', responseText.indexOf( '<script' ) ) + 1; 
                let PosEnd = responseText.indexOf( '</script>' ); 
                document.getElementById( 'debugbar_dynamic_script' ).innerHTML = responseText.substr( PosBeg, PosEnd - PosBeg ); 
                responseText = responseText.substr( PosEnd + 9 ); 
            } 
            // check for last style block 
            { 
                let PosBeg = responseText.indexOf( '>', responseText.lastIndexOf( '<style' ) ) + 1; 
                let PosEnd = responseText.indexOf( '</style>', PosBeg ); 
                document.getElementById( 'debugbar_dynamic_style' ).innerHTML += responseText.substr( PosBeg, PosEnd - PosBeg ); 
                responseText = responseText.substr( 0, PosBeg + 8 ); 
            } 
 
            toolbar.innerHTML = responseText; 
            if (typeof ciDebugBar === 'object') { 
                ciDebugBar.init(); 
            } 
        } else if (this.readyState === 4 && this.status === 404) { 
            console.log('CodeIgniter DebugBar: File "WRITEPATH/debugbar/debugbar_' + time + '" not found.'); 
        } 
    }; 
 
    xhttp.open("GET", url + "?debugbar_time=" + time, true); 
    xhttp.send(); 
} 
 
// Track all AJAX requests 
if (window.ActiveXObject) { 
    var oldXHR = new ActiveXObject('Microsoft.XMLHTTP'); 
} else { 
    var oldXHR = window.XMLHttpRequest; 
} 
 
function newXHR() { 
    var realXHR = new oldXHR(); 
    realXHR.addEventListener("readystatechange", function() { 
        // Only success responses and URLs that do not contains "debugbar_time" are tracked 
        if (realXHR.readyState === 4 && realXHR.status.toString()[0] === '2' && realXHR.responseURL.indexOf('debugbar_time') === -1) { 
            var debugbarTime = realXHR.getResponseHeader('Debugbar-Time'); 
            if (debugbarTime) { 
                var h2 = document.querySelector('#ci-history > h2'); 
                if(h2) { 
                    h2.innerHTML = 'History <small>You have new debug data.</small> <button onclick="loadDoc(' + debugbarTime + ')">Update</button>'; 
                    var badge = document.querySelector('a[data-tab="ci-history"] > span > .badge'); 
                    badge.className += ' active'; 
                } 
            } 
        } 
    }, false); 
    return realXHR; 
} 
 
window.XMLHttpRequest = newXHR; 
<?php endif; ?> 
 
 |