//Polyfill for URLSearchParams (function (w) { w.URLSearchParams = w.URLSearchParams || function (searchString) { var self = this; self.searchString = searchString; self.get = function (name) { var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(self.searchString); if (results == null) { return null; } else { return decodeURI(results[1]) || 0; } }; } w["platform-ui-skin"] = { "manual_url": null }; })(window); (function () { var LINK_ELEM_ID = "skinLinkElem" var SANDBOX_QUERYPARAM = "platform-skin" var STATE_URL = "/ui/css/skin/state.json"; var SKIN_ROOT = "/ui/css/skin/"; var CHECK_INTERVAL = 80000 function errorHandler(error) { console.error(error); } function shallowEqual(object1, object2) { var keys1 = Object.keys(object1); var keys2 = Object.keys(object2); if (keys1.length !== keys2.length) { return false; } for (var i = 0; i < keys1.length - 1; i++) { var key = keys1[i]; if (object1[key] !== object2[key]) { return false; } } return true; } function skinPath(name, hash) { return SKIN_ROOT + name + "/skin.css" + "?" + hash } var state = {"settings":{"_id":"628e3fbf15dfa70220e4ca83","id":"platform-ui-skin","sandbox":false,"enabled":true,"default":"skin1","favicon":"data:image/png;base64,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vcG8bWv4hoVn35kpmyqlI/0tKzMe/yXVtkQMwW+239YIwKY7cB+mxdShHRRDbqeO0hkfvr1JL+QanI0QrnXaI0Tf7dR9p05psPX+3g6+H4ybwZeVjhMjMAN1Ofw0CAfgm4FXgO+tG3LdgVExOTDWhC9Z76bM2zp+WvDbdWWmpO+lvycU8SofCYt+2QmcAFJQavKS6nHgi6syvN7kx4owfBeMNKKuKzPD8O3N7LblZyxjs6thtFCpzCxxB2XurMwKywCC0611+J5bMW8rKR23ActeZxCCD6NtqlqjVDjYNodfltMxAW7mflvPNQlKp2reVvTnjtupkpmJU6b9lhUbPqBjjVrTMD/OS6q93ZQ3GP6487bSRvUmCTW3YWSr9+ADrEUaTkpSNHE/O6ojceDnD24AzCvi+FFzeJ5D0/4ItWzS3IVffN980tyDr134yivblZkh+Hkv8OEDnIwSrQ4DPc+PGpD8jRnCqxt1+UuqER60ACgFZ7vB/aAnwS/uacNXFjg7aEoa3zYe3yh9jZ8E4AfAA/SBw5GGFxPUCctnmQ9hvWLFrYzdQLZ/tZVO6Tt1HCszu675ysyqSfO8PlmP0cpuDPPZBHeW9QbxfO9aGX5SDz7AL4AXI1DvaPh+Alc8RXKDspm2ZRnuygqAYcuXlI7VGI4LaS8z3YGdagv/CvB94J1ogEo0vKBR39NZI+im8FUQflUev+5mZ1dmJgi+2+r+8iCo+P8aGJar7fMKF2RbvS0vHc8QkJkB+N8DfgAknR+99zK//9DTPeANjbqoNXdp1C4NHVPa1ZWZIQ2f3aP+1GGZTq+WmdK1bedt/aWFo3OGRp0Sg0Hg6AHHge8C/wis/eSl54uz/+m5vwboaNTDGp7T8Eyi1SFgToOqB5/0b+PP23r5lpLd+tqBX0dm1oUfkpmZcSZOnZxDA2vASeAw8CJwDBj+5KXnAfg/fi5u08ugTBwAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTgtMDUtMDNUMTA6NDg6MjErMDA6MDAOK55OAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE4LTA1LTAzVDEwOjQ4OjIxKzAwOjAwf3Ym8gAAAEZ0RVh0c29mdHdhcmUASW1hZ2VNYWdpY2sgNi43LjgtOSAyMDE0LTA1LTEyIFExNiBodHRwOi8vd3d3LmltYWdlbWFnaWNrLm9yZ9yG7QAAAAAYdEVYdFRodW1iOjpEb2N1bWVudDo6UGFnZXMAMaf/uy8AAAAYdEVYdFRodW1iOjpJbWFnZTo6aGVpZ2h0ADE5Mg8AcoUAAAAXdEVYdFRodW1iOjpJbWFnZTo6V2lkdGgAMTky06whCAAAABl0RVh0VGh1bWI6Ok1pbWV0eXBlAGltYWdlL3BuZz+yVk4AAAAXdEVYdFRodW1iOjpNVGltZQAxNTI1MzQ0NTAxpiXaOAAAAA90RVh0VGh1bWI6OlNpemUAMEJClKI+7AAAAFZ0RVh0VGh1bWI6OlVSSQBmaWxlOi8vL21udGxvZy9mYXZpY29ucy8yMDE4LTA1LTAzLzdmMzYwMmRiNDkzNDFjMjhhZWY4NmFkNGNjZGZlMjhjLmljby5wbmd+3ge5AAAAAElFTkSuQmCC","created":1653489599230},"current":{}}; var settings = state.settings var urlParams = new URLSearchParams(window.location.search); var sandboxParam = urlParams.get(SANDBOX_QUERYPARAM); let skinningEnabled = (sandboxParam === "" && settings.sandbox === true) || settings.sandbox === false ? true : false; let skinName = settings.default var skinHash = state.current[skinName] window["platform-ui-skin"]["manual_url"] = settings.manual_url; window["platform-ui-skin"]["settings"] = settings; function applyLinkElement(name, hash, state) { console.warn("Skinning applyLinkElement") var newLink = document.createElement('link'); newLink.id = LINK_ELEM_ID newLink.href = skinPath(name, hash) newLink.type = 'text/css'; newLink.rel = 'stylesheet'; newLink.addEventListener('error', errorHandler, false); var newFavicon = document.createElement('link'); newFavicon.rel = 'shortcut icon'; newFavicon.href = state.settings.favicon var favicon = document.querySelector("link[rel~='icon']"); var existing = document.getElementById(LINK_ELEM_ID); if (existing) { existing.replaceWith(newLink) } else { document.getElementsByTagName('head')[0].appendChild(newLink); } if (favicon) { favicon.replaceWith(newFavicon) } else { document.getElementsByTagName('head')[0].appendChild(newFavicon); } } function checkSkinChange() { function processState(state) { console.log(state); skinningEnabled = (sandboxParam === "" && state.settings.sandbox === true) || state.settings.sandbox === false ? true : false; if (skinningEnabled === false && shallowEqual(state.settings, {})) { console.warn("Skinning DISABLED") skinHash = null; try { var existing = document.getElementById(LINK_ELEM_ID); if (!('remove' in Element.prototype)) { Element.prototype.remove = function () { if (this.parentNode) { this.parentNode.removeChild(this); } }; } if (existing != null) { existing.remove(); } } catch (e) { console.error(e); } return; } skinName = state.settings.default var newHash = state.current[skinName]; window["platform-ui-skin"]["manual_url"] = settings.manual_url; if (newHash == null) { console.error('skin ' + skinName + ' not available'); return; } if (newHash === skinHash) { return; } skinHash = newHash; applyLinkElement(skinName, skinHash, state); } function reqListener() { state = JSON.parse(this.responseText); processState(state); } function errorListener(error) { console.error(error) } var xhr = new XMLHttpRequest(); xhr.addEventListener("load", reqListener); xhr.addEventListener('error', errorListener); xhr.open("GET", STATE_URL + "?" + (Math.random() * 100).toString()); xhr.send(); } var intervalId = setInterval(checkSkinChange, CHECK_INTERVAL); })();