From 16e584cc8dc057290e14f829b507fbbef3cdf60f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marko=20Pu=C5=A1nik?= Date: Mon, 5 Oct 2015 15:57:43 +0200 Subject: handle phonegap native mobile app --- js/codeq/init.js | 100 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 js/codeq/init.js (limited to 'js/codeq/init.js') diff --git a/js/codeq/init.js b/js/codeq/init.js new file mode 100644 index 0000000..b7e903c --- /dev/null +++ b/js/codeq/init.js @@ -0,0 +1,100 @@ +(function () { + + + var loadGuiTranslations = function () { + var langs = codeq.availableLangs, + loaders = [], + loaderLangs = [], + i, lang; + for (i = langs.length - 1; i >= 0; i--) { + lang = langs[i]; + loaders.push(codeq.comms.getGuiTranslation(lang)); + loaderLangs.push(lang); + } + return Q.all(loaders) + .then(function (results) { + // convert translations into something that the translation module can use + var dictionary = {}, + i, json, key, lang, translations; + for (i = results.length - 1; i >= 0; i--) { + json = results[i]; + lang = loaderLangs[i]; + for (key in json) { + if (!json.hasOwnProperty(key)) continue; + translations = dictionary[key]; + if (translations) translations[lang] = json[key]; + else { + translations = {}; + dictionary[key] = translations; + translations[lang] = json[key]; + } + } + } + // ensure each key contains all translations + for (key in dictionary) { + if (!dictionary.hasOwnProperty(key)) continue; + translations = dictionary[key]; + for (i = langs.length - 1; i >= 0; i--) { + lang = langs[i]; + if (!(lang in translations)) translations[lang] = "(Untranslated: " + lang + ")"; + } + } + // register with the system + codeq.tr.registerDictionary('gui', dictionary); + }); + }; + + // ================================================================================ + // The boot sequence + // ================================================================================ + + var Boot = function () { + // set the language + var navigatorLang = navigator.language || navigator.browserLanguage, // language reported by browser + lang = null, // the translation language that will be chosen + key; + if (typeof navigatorLang === 'string') { + navigatorLang = navigatorLang.split('-')[0]; // truncate the language variant, in eg. en-US + } + else navigatorLang = 'en'; + for (key in codeq.supportedLangs) { + if (!codeq.supportedLangs.hasOwnProperty(key)) continue; + if (key === navigatorLang) lang = key; // we support the browser's language + codeq.availableLangs.push(key); + } + + // the boot chain of async handlers: must be a sequence of .then() terminated with a .fail().done() + loadGuiTranslations() + .then(codeq.comms.getResourceTree) + .then(function (resourceTree) { + resources = resourceTree; // save the loaded resource tree to the internal variable + + codeq.fire('init'); // tell any interested modules that we are now initialized, perhaps they want to initialize too + codeq.setLang(lang || 'en'); // initial language setting, this also translates the GUI + // go to login + codeq.globalStateMachine.transition('login'); + + //For performance reasons, the Tooltip and Popover data-apis are opt-in, meaning you must initialize them yourself. + $('[data-toggle="popover"]').popover() + }) + .fail(function (e) { + codeq.log.error('CodeQ failed to start: ' + e, e); + alert('CodeQ failed to start: ' + e); + }) + .done(); + }; + + if (codeq.isWebApp) { + // we are a web app + $(window).on('load', Boot); + codeq.ajaxPrefix = location.pathname; + codeq.eioHost= 'ws://' + location.host; + } + else { + // we are a phonegap native app + document.addEventListener("deviceready", Boot, false); + codeq.ajaxPrefix = 'http://codeq.si/'; + codeq.eioHost= 'ws://codeq.si'; + } + +})(); -- cgit v1.2.1