blob: e8a6fcee025fd5509e15594ba71a3b44fbfd0d24 [file] [log] [blame]
// Copyright (c) 2000-2019 Ericsson Telecom AB Telecom AB //
// All rights reserved. This program and the accompanying materials are made available under the //
// terms of the Eclipse Public License v2.0 which accompanies this distribution, and is available at //
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html //
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Singleton list of applications inherited from WebAppBase.
// "WebApplications" object is intended to be the only global object.
// It is filled by each WebApplications/<WebAppDir>/Main.js, when the js is loaded.
var WebApplications = WebApplications || [];
if (window["$"] == undefined) {
var browser = browserCheck();
alert('This browser is not supported: ' + browser[0] + ' ' + browser[1] + '\nPlease use at least Firefox 38 or Chrome.');
}
$(document).ready(function() {
"use strict";
function receiveMessage(event) {
if (event.source == parent && event.data.username != undefined && event.data.password != undefined) {
localStorage.setItem('username', event.data.username);
localStorage.setItem('password', event.data.password);
}
}
window.addEventListener("message", receiveMessage, false);
window.addEventListener("popstate", function(event) {
if (event.state != undefined && event.state.index != undefined && WebApplications[event.state.index] != undefined) {
webappBtnClicked(event.state.index, 'applications_header_appBtn_' + event.state.index);
}
});
var m_this = this;
var m_fileHandler = new FileHandler();
var m_webAppModel = new CWebApp_Model(m_fileHandler);
var m_loadedWebAppIndex;
this.setAppParam = function(appName, key, value) {
var index = getWebAppIndexFromName(appName);
if (index != undefined) {
var app = WebApplications[index];
app.params[key] = value;
}
};
this.loadApp = function(appName) {
var index = getWebAppIndexFromName(appName);
if (index != undefined) {
webappBtnClicked(index, 'applications_header_appBtn_' + index, true);
} else {
alert('No application found with name ' + appName);
}
};
function getWebAppIndexFromName(appName) {
for (var i = 0; i < WebApplications.length; ++i) {
if (WebApplications[i].name == appName) {
return i;
}
}
}
function webappBtnClicked(index, buttonId, storeState) {
var webApp = WebApplications[index].application;
function webappUnloaded(aApplicationUnloaded) {
if (aApplicationUnloaded) {
if (storeState) {
window.history.pushState({'index': index}, '');
}
webApp.load(m_webAppModel, WebApplications[index].params, m_this); // calls WebApplications load fuction. WebApplications are derived from WebAppBase
m_loadedWebAppIndex = index;
$('#applications_header BUTTON').removeClass('SelectedWebApp');
$("#" + buttonId).addClass('SelectedWebApp');
}
else {
$('#applications_header BUTTON').attr('disabled', false);
}
}
$('#applications_header BUTTON').attr('disabled', true);
if (m_loadedWebAppIndex != undefined && WebApplications[m_loadedWebAppIndex].application != undefined && WebApplications[m_loadedWebAppIndex].application.unload != undefined) {
WebApplications[m_loadedWebAppIndex].application.unload(webappUnloaded);
} else {
webappUnloaded(true);
}
}
function webAppsDirLoaded(data) {
// Runs after all WebApplications/<WebAppDir>/Main.js are parsed, so WebApplications is populated by now.
var applications = data.availableApps;
var defaultApp = data.defaultApp;
function webAppsLoaded(ok, msg) {
var app = getLocationParam('app');
if (app != undefined) {
var index = parseInt(app);
if (isNaN(index)) {
m_this.loadApp(app);
} else {
webappBtnClicked(index, 'applications_header_appBtn_' + index, true);
}
} else if (defaultApp != undefined) {
m_this.loadApp(defaultApp);
}
}
function ApplicationLoadTask(index, application) {
var v_callback;
var v_index = index;
var v_directory = application.directory;
var v_params = application.params;
var v_name = application.name;
var v_icon = application.icon;
var v_color = application.color;
var v_hidden = application.hidden;
function mainJsFileImported(ok) {
if (ok) {
var webApp = WebApplications[WebApplications.length - 1];
if (v_name == undefined) {
v_name = webApp.application.info().defaultName;
}
if (v_icon == undefined) {
v_icon = webApp.application.info().defaultIcon;
}
webApp.name = v_name;
if (v_params != undefined) {
webApp.params = v_params;
} else {
webApp.params = {};
}
var buttonId = 'applications_header_appBtn_' + v_index;
var buttonHtml = ''
if (v_color != undefined) {
buttonHtml = '<button index="' + v_index + '" id="' + buttonId + '" style="background-color:' + v_color + '; border-color:' + v_color + ';"><span><img src="' + v_icon + '"/>' + v_name + '</span></button>';
} else {
buttonHtml = '<button index="' + v_index + '" id="' + buttonId + '"><span><img src="' + v_icon + '"/>' + v_name + '</span></button>';
}
if (v_hidden && !(getLocationParam('developerMode') == "true")) {
//$('#hiddenWebapps').append(buttonHtml);
} else {
$('#webapps').append(buttonHtml);
}
$("#" + buttonId).on('click', function() {
webappBtnClicked(parseInt($(this).attr('index')), $(this).attr('id'), true);
}).on('mouseup', function(e) {
if (e.which == 2) {
var url = 'Main.html?app=' + $(this).attr('index');
var win = window.open(url, '_blank');
}
});
} else {
alert('Failed to load application ' + v_name);
}
v_callback(true);
}
this.taskOperation = function(callback) {
v_callback = callback;
m_fileHandler.importJsFile(v_directory + '/Main.js', mainJsFileImported);
};
}
var importTasks = [];
for (var i = 0; i < applications.length; ++i) {
importTasks[i] = new ApplicationLoadTask(i, applications[i]);
}
var taskList = new SyncTaskList(importTasks, webAppsLoaded);
taskList.taskOperation();
// $('#webappToggleButton').click(function () {
// $('#hiddenWebapps').toggleClass('hidden');
// });
}
function start() {
if (getLocationParam('hideRibbon') == 'true') {
$('#applications_header_container').addClass('hidden');
}
// load framework javascript and css files
new MultipleDirectoryListTask(
[
"WebApplicationFramework/Views",
"WebApplicationFramework/ViewModels"
],
m_fileHandler
).taskOperation(function(ok, resources) {
m_fileHandler.loadCssFiles(resources.cssfiles, "TSGuiFrameworkMain");
new JsImportTaskList(resources.jsfiles, m_fileHandler, function(ok) {
m_webAppModel.loadMainConfig(webAppsDirLoaded);
}).taskOperation();
});
}
var browser = browserCheck();
if ((browser[0].toLowerCase() == "firefox" && parseInt(browser[1].split(".")[0]) >= 38) || browser[0].toLowerCase() == "chrome") {
start();
} else {
var html = '' +
'<div id="UnsupportedBrowser">' +
'<p>This browser is not supported: ' + browser[0] + ' ' + browser[1] + '</p>' +
'<p>Please use at least Firefox 38 or Chrome</p>' +
'<button>Continue anyway...</button>' +
'</div>'
$("#TSGuiFrameworkMain").append(html);
$("#UnsupportedBrowser > button").on("click", function() {
$("#UnsupportedBrowser").remove();
start();
});
}
});
function WebAppBase() {
"use strict";
var m_loaded = false;
var m_imported = false;
this.unload = function(destroy) {
if (m_loaded) {
destroy();
m_loaded = false;
}
};
this.load = function(jsfiles, alwasyImportableJsFiles, start, fileHandler) {
if (m_imported) {
jsfiles = alwasyImportableJsFiles
} else {
jsfiles = jsfiles.concat(alwasyImportableJsFiles)
}
var taskList = new JsImportTaskList(jsfiles, fileHandler, function(ok, msg) {
if (ok) {
start(function() {
$('#applications_header BUTTON').attr('disabled', false);
});
m_imported = true;
m_loaded = true;
} else {
alert('WebAppBase::load says task was not OK:' + JSON.stringify(msg, null, 4));
}
});
taskList.taskOperation();
};
}