'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;
}
};
});