function getLexboxScriptsLoader(assetsUrl, projectVersion) { // 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=' + projectVersion; var scripts = [ '/lb/dist/plugin/js/lexbox-plugin.min.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.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 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.iframeConfig = siteData.iframeConfig; // // Initiate loading of the scripts // if (supportsHtmlImports()) { loadAll(assetsUrl, versionQuery, scripts); } else { document.addEventListener('HTMLImportsLoaded', function(e) { console.info("[LB] HTML Imports loaded"); loadAll(assetsUrl, versionQuery, scripts); }); } } }; }