function getLexboxScriptsLoader() { // The release version is appended as a query to all resources requested in here to bootstrap Lexbox. // This is to force browsers to load new files when a new version of Lexbox is released. var versionQuery = "?v=" + lexboxConstants.projectVersion; // Loaded first to be able to asynchronously load the subsequent scripts var promisePolyfill = '/plugin/polyfill/es6-promise-3.2.2.min.js'; var scripts = ['/plugin/lexbox-plugin.min.js']; if (!lexboxConstants.minimizePlugin) { scripts = [ "/plugin/js/lib/underscore-min.js", "/plugin/js/lib/js_prototypes.js", "/plugin/js/lib/spin.min.js", "/plugin/js/common/lexboxTemplates.js", "/plugin/js/common/lexboxUrls.js", "/plugin/js/common/custom-feature-detections.js", "/plugin/js/common/custom-polyfills.js", "/plugin/js/common/functions.js", "/plugin/js/common/backgroundMessenger.js", "/plugin/js/common/localStorage.js", "/plugin/js/common/eventManager.js", "/plugin/js/common/lexboxGlobal.js", "/plugin/js/logger.js", "/plugin/js/background/ajaxRequest.js", "/plugin/js/background/ajaxMessenger.js", "/plugin/js/background.js", "/plugin/js/common/svgicons.js", "/plugin/js/common/i18n.js", "/plugin/js/loginForm/loginForm.js", "/plugin/js/contentscript/dialog/global/comp-parent.js", "/plugin/js/contentscript/dialog/global/form.js", "/plugin/js/contentscript/dialog/global/folderList/module.js", "/plugin/js/contentscript/dialog/global/module-email.js", "/plugin/js/contentscript/dialog/global/module-dynamic.js", "/plugin/js/contentscript/dialog/global/dialog.js", "/plugin/js/contentscript/lexbox-box/global/floating-menu.js", "/plugin/js/contentscript/lexbox-box/global/buttons.js", "/plugin/js/contentscript/lexbox-box/global/status-dropdown.js", "/plugin/js/contentscript/lexbox-box/global/box-user-logged-in.js", "/plugin/js/contentscript/lexbox-box/global/box-user-logged-out.js", "/plugin/js/contentscript/lexbox-box/global/host.js", "/plugin/js/contentscript/lexbox-box/global/box.js", "/plugin/js/contentscript/lexbox-box/lexbox.js", "/plugin/js/content-script.js" ] ; } function isIE10() { return "onpropertychange" in document && !!window.matchMedia; } function supportsHtmlImports() { return 'import' in document.createElement('link'); } function requestScript(script, successCallback, errorCallback) { var request = new XMLHttpRequest(); request.crossDomain = true; request.withCredentials = "true"; request.onreadystatechange = function() { if (request.readyState === 4) { if (request.status === 200) { successCallback(request.responseText); } else { throw(new Error('Script "' + script + '" didn\'t load correctly. Please check certificates and CORS settings.')); } } }; request.onerror = function(e) { errorCallback(new Error(request.statusText)); }; request.open('GET', script, true); request.send(); } function initiateScriptLoading(domain, versionQuery, promisePolyfill, restOfScripts) { var polyfillPath = domain + promisePolyfill + versionQuery; requestScript( polyfillPath, function successCallback(responseText) { evalScript(polyfillPath, responseText); loadAll(domain, versionQuery, restOfScripts); }, function errorCallback(error) { throw(error); }); } function loadAll(domain, versionQuery, restOfScripts) { console.time("Loading Lexbox scripts"); Promise.all(restOfScripts.map(function(script) { return new Promise(function(resolve, reject) { requestScript(domain + script + versionQuery, resolve, reject); }); })) .then(function(scripts) { console.timeEnd("Loading Lexbox scripts"); var length = scripts.length; console.time("Executing Lexbox scripts"); for (var scriptIdx = 0; scriptIdx < length; scriptIdx++) { evalScript(restOfScripts[scriptIdx], scripts[scriptIdx]); } console.timeEnd("Executing Lexbox scripts"); }) .catch(function(e) { if (e.scriptPath) { console.error("[LB] Couldn't load " + e.scriptPath + ", line number " + e.lineNumber); } else { console.error("%o", e); } }); } function evalScript(scriptPath, scriptText) { try { eval.call(window, scriptText); } catch (e) { throw new LexboxError(e, scriptPath); } } function LexboxError(e, scriptPath) { this.message = e.message; this.scriptPath = scriptPath; this.stack = e.stack; this.lineNumber = e.lineNumber || e.line || 'unknown'; } LexboxError.prototype = Object.create(Error.prototype); LexboxError.prototype.constructor = LexboxError; LexboxError.prototype.name = "LexboxError"; return function(siteInfo) { if (isIE10()) { } else { var siteData = siteInfo(); window.localStorage.setItem('savedLocale', JSON.stringify(siteData.savedLocale)); window.localStorage.setItem('supportedWebsitesListVersion', JSON.stringify(siteData.supportedWebsitesListVersion)); window.localStorage.setItem('userStatus', JSON.stringify(siteData.userStatus)); window.localStorage.setItem('supportedWebsitesList', JSON.stringify(siteData.supportedWebsitesList)); window.watchForIframes = siteData.watchForIframes; // // Initiate loading of the scripts // if (supportsHtmlImports()) { initiateScriptLoading(lexboxConstants.lexboxUrl, versionQuery, promisePolyfill, scripts); } else { document.addEventListener('HTMLImportsLoaded', function(e) { console.info("[LB] HTML Imports loaded"); initiateScriptLoading(lexboxConstants.lexboxUrl, versionQuery, promisePolyfill, scripts); }); } } }; }