| // 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(); |
| }; |
| } |