summaryrefslogtreecommitdiff
path: root/js/codeq/init.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/codeq/init.js')
-rw-r--r--js/codeq/init.js100
1 files changed, 100 insertions, 0 deletions
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';
+ }
+
+})();