'use strict'; window.addEventListener('HTMLImportsLoaded', function () { window.App = { get _rootContainer() { return document.querySelector('#rootContainer'); }, get _loadingScreen() { return document.querySelector('#loadingScreen'); }, get _userData() { return this.getSessionItem('userData'); }, set _userData(userData) { this.setSessionItem('userData', userData); }, get _settings() { return this.getSessionItem('appSettings'); }, set _settings(settings) { this.setSessionItem('appSettings', settings); }, _clearRootContainer: function () { var rootContainer = this._rootContainer; while (rootContainer.firstChild) { Polymer.dom(rootContainer).removeChild(rootContainer.firstChild); } }, _loadRootContainer: function (href, elementName) { var self = this; this.importHref(href, function () { var content = document.createElement(elementName); Polymer.dom(self._rootContainer).appendChild(content); }); }, importHref: function (href, onload, onerror) { href = Polymer.Base.resolveUrl(href); if (document.head.querySelectorAll('link[rel="import"][href="' + href + '"]').length === 0) { Polymer.Base.importHref(href, onload, onerror, true); } else { onload(); } }, loadingScreen: function (action) { var loadingScreen = this._loadingScreen; switch (action) { case 'show': loadingScreen.classList.add('visible'); break; case 'hide': loadingScreen.classList.remove('visible'); break; case 'toggle': loadingScreen.classList.toggle('visible'); break; } }, hasToken: function () { return (this._userData !== null && this._userData.token !== null); }, logout: function () { localStorage.clear(); this.run(); }, load: function (userData) { this._userData = userData; var url = window.location.href; this._clearRootContainer(); if (url.indexOf('/print/') !== -1){ this._loadRootContainer('layouts/print-page.html', 'print-page'); } else{ this._loadRootContainer('layouts/main-application.html', 'main-application'); } }, run: function () { this._clearRootContainer(); if (this.hasToken()) this.load(this._userData); else this._loadRootContainer('layouts/login-page.html', 'login-page'); }, setSessionItem: function (key, value) { key = key.toString(); if (typeof value !== 'string') { value = JSON.stringify(value); } localStorage.setItem(key, value); }, getSessionItem: function (key) { var item = localStorage.getItem(key); try { item = JSON.parse(item); } catch (e) { /* Session item is not an object */ } return item; }, getConfig: function () { if (!this._config) { var xobj = new XMLHttpRequest(); xobj.open('GET', 'config.json', false); xobj.send(null); if (xobj.status == 200) { this._config = JSON.parse(xobj.responseText); } } return this._config; }, goToUrl: function (url, params, replace) { url = this.prepareUrl(url, params, replace); window.history.pushState({}, null, url); window.dispatchEvent(new CustomEvent('location-changed')); }, prepareUrl: function (url, params, replace) { if (url === null) { url = window.location.pathname; } if (url.indexOf('?') >= 0) { url = url.substr(0, url.indexOf('?')); } if (replace !== true) { var currentParams = this.getUrlParams(); params = Object.assign(currentParams, params); } var paramsStr = []; for (var key in params) { if (params.hasOwnProperty(key)) { if (params[key]) { paramsStr.push(encodeURIComponent(decodeURIComponent(key)) + "=" + encodeURIComponent(decodeURIComponent(params[key]))); } } } if (paramsStr.length > 0) { url = url + "?" + paramsStr.join("&"); } return url; }, getUrlParams: function (url) { if(!url) { url = window.location.href; } var currentParams = {}; if (url.indexOf('?') >= 0) { var hashes = url.slice(url.indexOf('?') + 1).split('&'); for (var i = 0; i < hashes.length; i++) { var hash = hashes[i].split('='); currentParams[hash[0]] = hash[1]; } } return currentParams; }, getUrlParam: function (key, defaultValue) { var params = this.getUrlParams(); var value = defaultValue; if(params.hasOwnProperty(key)) { value = params[key]; } return value; } }; });