/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ var $$ = Dom7; // Detect platform and run platform-specific setup code // for Cordova, NW.js, or the browser initPlatform(); Template7.global = { qrenabled: (platform_type == "cordova") }; var app = new Framework7({ root: "#app", name: "TerranQuest", id: "com.netsyms.terranquest.TerranQuest", theme: platform_theme, card: { swipeToClose: false }, popup: { backdrop: false }, init: true, initOnDeviceReady: false, routes: routes }); var mainView = app.views.create('.view-main', { url: "/" }); var router = mainView.router; function restartApplication() { window.location = "index.html"; } function logout() { localStorage.clear(); restartApplication(); } router.on("pageInit", function (pagedata) { pagedata.$el.find('script').each(function (el) { if ($$(this).attr('src')) { var s = document.createElement('script'); s.src = $$(this).attr('src'); $$('head').append(s); } else { eval($$(this).text()); } }); }); /** * Check if the server is alive. * @param {function} callback * @returns {undefined} */ function isServerAlive(callback) { callAPIRawResponse("ping", { username: localStorage.getItem("username"), password: localStorage.getItem("password") }, function (data) { callback(true); }, function (msg, xhr) { app.preloader.hide(); if (xhr.status == 401) { callback(true); } else if (xhr.status == 400) { callback(true); } else { callback(false); } }); } /** * Compare two version strings. * http://stackoverflow.com/a/16187766/2534036 * @param {string} a * @param {string} b * @returns a number < 0 if a < b, a number > 0 if a > b, 0 if a = b */ function compareVersions(a, b) { var i, diff; var regExStrip0 = /(\.0+)+$/; var segmentsA = a.replace(regExStrip0, '').split('.'); var segmentsB = b.replace(regExStrip0, '').split('.'); var l = Math.min(segmentsA.length, segmentsB.length); for (i = 0; i < l; i++) { diff = parseInt(segmentsA[i], 10) - parseInt(segmentsB[i], 10); if (diff) { return diff; } } return segmentsA.length - segmentsB.length; } /** * Check if the saved username and password are valid. * @param {function} callback A function that will be called with a boolean argument indicating validity. * @return {undefined} */ function checkLogin(callback) { if (localStorage.getItem("username") === null || localStorage.getItem("password") === null) { callback(false); return; } callAPI("ping", { username: localStorage.getItem("username"), password: localStorage.getItem("password") }, function (data) { callback(true); }, function (msg) { callback(false); }); } if (localStorage.getItem("configured") == null) { router.navigate("/signin"); } else { isServerAlive(function (yes) { if (yes) { callAPI("version", { username: localStorage.getItem("username"), password: localStorage.getItem("password") }, function (data) { $.getJSON("package.json", {}, function (local) { if (compareVersions(local.version, data.version) < 0) { router.navigate("/upgrade"); } else { checkLogin(function (valid) { if (valid) { callAPI("playerexists", { username: localStorage.getItem("username"), password: localStorage.getItem("password") }, function (resp) { if (resp.exists == true) { router.navigate("/home"); } else { router.navigate("/chooseteam"); } }, function (msg) { router.navigate("/signin"); }); } else { router.navigate("/signin"); } }); } }); }); } else { router.navigate("/connection"); } }); }