diff options
Diffstat (limited to 'itjs/boot.js')
-rw-r--r-- | itjs/boot.js | 278 |
1 files changed, 0 insertions, 278 deletions
diff --git a/itjs/boot.js b/itjs/boot.js deleted file mode 100644 index 13b382f..0000000 --- a/itjs/boot.js +++ /dev/null @@ -1,278 +0,0 @@ -var it_boot_status = "boot"; -var it_panictimer = window.setTimeout("it_panic({reason:it_boot_status})", 31337), it_domtimer; -var it_starttime = new Date().getTime(); - -function it_stacktrace() -{ - var stacktrace = ""; - var callstack_done = false; - - try { i.dont.exist += 0; } // does not exist - that's the point - catch (e) - { - if (e.stack) // Firefox - { - stacktrace = e.stack.replace(/^[^\n]*\n/,'').replace(/(\n@)?\s+$/,'$1').replace(/^\(/g,'{anonymous}(') + ';'; - callstack_done = true; - } - else if (window.opera && e.message) // Opera - { - var entry, lines = e.message.split("\n"); - for (var i=1, len=lines.length; i < len; i++) - { - if (lines[i].match(/^\s*[A-Za-z0-9\-_\$]+\(/)) - { - entry = lines[i]; - // append next line also since it has the file info - if (lines[i+1]) - { - entry += " at " + lines[i+1]; - i++; - } - stacktrace += entry + ','; - } - } - callstack_done = true; - } - } - - if (!callstack_done) // IE and Safari - { - var fname, current_func = arguments.callee.caller; - while (current_func) - { - fname = /function\s*([\w\-$]+)?\s*\(/.test(current_func.toString()) ? RegExp.$1 || 'anonymous' : 'anonymous'; - stacktrace += fname + ','; - current_func = current_func.caller; - } - } - - return stacktrace; -} - -function it_catcherr(msg, url, line) -{ - var stacktrace = it_stacktrace(); - - if (typeof it_boot.sequence != 'undefined') - { - // trigger it_boot retry if error occured while evaluating loaded script - if (it_boot.sequence == 'ble' && it_boot.file) - { - it_boot(it_boot.file, true); - return true; - } - - stacktrace += "it_boot=" + it_boot.sequence + ";it_boot_file=" + it_boot.file; - } - if (typeof window.it_loader != 'undefined' && it_loader.sequence) - stacktrace += "it_loader=" + it_loader.sequence + ";"; - - it_boot_report({msg:msg, url:url, line:line, stacktrace:stacktrace}); - - return !window.env || !!window.env.is_live_server; // No env or live server -> suppress error -} - -window.onerror = it_catcherr; - -function it_boot_addparam(url, param) -{ - return url + (url.match(/\?/) ? "&" : "?") + param; -} - -function it_panic(p) -{ - if (!document.location.href.match(/[?&]static=/) && window.env && window.env.ua && window.env.ua.full && window.env.ua.device != "bot") // Avoid loop and non-full user agents - window.setTimeout("document.location.href = it_boot_addparam(document.location.href, 'static=" + p.reason + "')", 500); - - p.type = "panic"; - p.stacktrace = it_stacktrace(); - return it_boot_report(p); -} - -function it_boot_report(p) -{ - window.clearTimeout(window.it_domtimer); - window.clearTimeout(window.it_panictimer); - var loader = null; - var data = ""; - var postdata = p.data; - delete p.data; - p.time = new Date().getTime() - it_starttime; - - for (var k in p) - data += (data ? '&' : '') + k + "=" + escape(p[k]).replace(/\+/g, "%2B"); - - var url = "/itjs/error.gif?" + data; - - if (postdata) - { - loader = it_boot_getloader(); - for (var k in postdata) - data += (data ? '&' : '') + k + "=" + escape(postdata[k]).replace(/\+/g, "%2B"); - } - - try - { - loader.open('POST', url); - loader.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); - loader.send(data); - } - catch (e) - { - new Image().src = url; - } -} - -function it_boot_checkcss(style, key, value) -{ - return navigator.userAgent.match(/konqueror/i) || (style && style.getPropertyValue && (style.getPropertyValue(key) == value)); -} - -function it_boot_init() -{ - it_boot.sequence += "i"; - window.it_domtimer = null; - var konqueror = navigator.userAgent.match(/konqueror/i); - var doc = document; - var dom = doc && (dom = doc.getElementById('it_boot_dom')); // HTML has been rendered - var view = dom && doc.defaultView; // We can check if stylesheet is active - var style = view && view.getComputedStyle && view.getComputedStyle(dom, ''); - var css = window.it_boot_checkcss(style, "visibility", "hidden"); // CSS active (inline style on tag) - var stylesheet = window.it_boot_checkcss(style, "display", "none"); // External stylesheet loaded - - if (!(doc || !(it_boot_status = "doc")) || !(dom || !(it_boot_status = "dom")) || (style && !(stylesheet || !(it_boot_status = "stylesheet")))) - { - window.it_domtimer = window.setTimeout("it_boot_init()" , 42); - - if (style && !css) - it_panic({reason:"css"}); - - return; - } - - window.clearTimeout(window.it_panictimer); - it_boot.sequence += "s"; - window.it_boot_start(); - it_boot.sequence = ""; -} - -function it_boot_getloader() -{ - var result = null; - - if (!navigator.userAgent.match(/iPhone|iP.d/)) // Do not use XMLHttpRequest on iOS devices as it does not use cache - { - try - { - result = new XMLHttpRequest(); - } - catch (e) - { - var classnames = [ 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP' ]; - - for (var i in classnames) - try { result = new ActiveXObject(classnames[i]); break; } catch (e) {} - } - } - - return result; -} - -function it_boot(file, isretry) -{ - it_boot.file = file; - it_boot.sequence = isretry ? "r" : "b"; - var loader = it_boot_getloader(); - var bootparam = "boot=1" + (isretry ? "&retry=1" : ""); - var jsdebug = !!document.location.hostname.match(/\.jsdebug\./); - - if (loader && !jsdebug) - { - it_boot.sequence += "l"; - loader.open("GET", it_boot_addparam(file, bootparam)); - loader.onreadystatechange = function() - { - var error = "", code = ""; - - if (loader.readyState == 4) - { - if (loader.status < 400) // Opera gives back 304 if from cache - { - // check length cookie - var ln = String(loader.responseText).match(/\*sln:([0-9]+)[^\n]*\n([\s\S]*\n)\/\*eln:\1/); - code = ln ? unescape(ln[2]) : loader.responseText; - if (ln && ln[1]-0 == code.length) - { - it_boot.sequence += "e"; - if (!window.env || !!window.env.is_live_server) - code = "try {" + code + "} catch (e) { it_catcherr(e.message, it_boot.file, -1); }"; // Wrapped in try/catch as Konqueror does not support window.onerror - if (window.execScript) - window.execScript(code, "javascript"); // IE work-around to get script executed in global scope - else - window.setTimeout(code, 0); // Standard compliant version - } - else - error = (ln ? "length mismatch: " + ln[1] + " != " + code.length : "no length cookie"); - } - else - error = loader.statusText; - - if (error) - { - if (isretry) - it_panic({reason:'load', error:error, data:{code:code}}); - else - it_boot(file, true); - } - } - } - loader.send(null); - } - else - { - var doc = document; - var dom = doc && (dom = doc.getElementById('it_boot_dom')); // HTML has been rendered - var files = []; - it_boot.sequence += "n"; - bootparam += "&script=1"; - if (jsdebug) { - var path = file.match(/^(.*\/)[^\/]*$/)[1]; - var params = file.match(/\?.*$/)[0]; - var imports = file.split(','); - for (var i=0; i<imports.length; i++) { - var script = imports[i]; - if (script.substr(0, path.length) != path) - script = path + script; - if (script.substr(script.length - params.length, params.length) != params) - script = script + params; - if (i == imports.length-1) - script = it_boot_addparam(script, bootparam); - else - script = it_boot_addparam(script, 'script=1'); - files.push(script); - } - } - else - files = [it_boot_addparam(file, bootparam)]; - - if (window.opera || (document.all && navigator.platform.indexOf("Mac") >= 0)) { - for (var i=0; i < files.length; i++) - document.write('<sc'+'ript type="text/javascript" src="' + files[i] + '"><\/sc'+'ript>'); - } - else if (dom) - { - for (var i=0; i < files.length; i++) { - var tag = doc.createElement("script"); - tag.src = files[i]; - dom.appendChild(tag); - } - } - else - window.it_domtimer = window.setTimeout("it_boot('" + file + "')" , 42); - } -} - -if (document.documentElement) - document.documentElement.className += ' js'; - |