/* * 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 compiledPages = {}; var pagesToCompile = [ "home", "send", "welcome", "appointment", "dropandsend", "pickup", "shop", "shoppingcart_fragment", "rateresult", "crypto", "account", "trackresult", "settings", "receipts" ]; console.log("Compiling page templates..."); for (var i = 0; i < pagesToCompile.length; i++) { compiledPages[pagesToCompile[i]] = Template7.compile($.ajax({ type: "GET", url: "./pages/" + pagesToCompile[i] + ".html", async: false }).responseText); } console.log("Compiled page templates."); var routes = [ { path: '/welcome', content: compiledPages.welcome(), name: 'welcome', on: { pageAfterIn: function () { } } }, { path: '/crypto', content: compiledPages.crypto(), name: 'crypto', on: { pageAfterIn: function () { } } }, { path: '/crypto/balance/:walletaddress', content: compiledPages.crypto(), name: 'crypto', on: { pageAfterIn: function (e, page) { console.log(page); displayWalletBalance(page.route.params.walletaddress); } } }, { path: '/home', name: 'home', alias: ["/"], on: { pageBeforeIn: function () { // make sure it's not shown right after account setup var accountsetup = (inStorage("accountkey") && inStorage("accountnumber")); if (accountsetup) { $("#finishaccountsetupnag").css("display", "none"); } } }, async: function ( { resolve, reject }) { // Show a nag message if no account is set up var accountsetup = (inStorage("accountkey") && inStorage("accountnumber")) || getStorage("hideaccountnag") == "true"; // add escape hatch to regular website if running online var escapehatch = false; if (window.location.hostname == "app.helena.express") { escapehatch = true; } resolve({ content: compiledPages.home({ accountsetup: accountsetup, escapehatch: escapehatch, pages: [ { title: "Send a Package", href: "/send", icon: "fa-duotone fa-box-alt", text: "Find a drop box or schedule a pickup." }, { title: "Notarize a Document", href: "/appointment/notary", icon: "fa-duotone fa-file-signature", text: "Book a mobile notary visit." }, { title: "Write a Telegram", href: "/telegram", icon: "fa-duotone fa-typewriter", text: "Send a hand-delivered telegram anywhere in the Helena area." }, { title: "Shop for Supplies", href: "/shop", icon: "fa-duotone fa-shopping-cart", text: "Get boxes, labels, and shipping supplies delivered to your door." }, { title: "Crypto Wallet", href: "/crypto", icon: "fa-duotone fa-wallet", text: "Check your crypto wallet balance and pay people with cryptocurrency." }, { title: "My Account", href: "/account", icon: "fa-duotone fa-user-circle", text: "Get account number, check rewards points, update payment method, and more." }, ] }) }, {}); } }, { path: '/send', name: 'send', async: function ( { resolve, reject }) { resolve({ content: compiledPages.send({ pages: [ { title: "Use a Drop Box", href: "/dropandsend", icon: "fa-duotone fa-box-alt", text: "Bring your package to a Drop and Send location and we'll ship it for you. No postage or appointment needed." }, { title: "Request a Pickup", href: "/pickup", icon: "fa-duotone fa-home", text: "Leave your package on your porch and we'll pick it up and ship it for you. No postage or appointment needed." }, { title: "Book an Appointment", href: "/appointment/shipping", icon: "fa-duotone fa-calendar-alt", text: "A courier will come to you on your schedule. No account required." } ] }) }, {}); } }, { path: '/appointment', name: 'appointment', async: function ( { resolve, reject }) { resolve({ content: compiledPages.appointment({ services: [ { title: "Package Pickup", text: "A courier will come to you and ship your mail, packages, etc.", icon: "fa-duotone fa-hand-holding-box", serviceid: "shipping" }, { title: "Mobile Notary", text: "A notary public will come to you and notarize your documents.", icon: "fa-duotone fa-file-signature", serviceid: "notary" } ] }) }, { }); }, routes: [ { path: "/:serviceId", async: function ( { resolve, reject, to }) { var url = SETTINGS.apis.appointmentredirect + "?service=" + to.params.serviceId; if ($("body").hasClass("theme-dark")) { url += "&darkmode=1"; } resolve({ content: compiledPages.appointment({ url: url, serviceid: to.params.serviceId }) }, { }); } } ] }, { path: '/dropandsend', name: 'dropandsend', content: compiledPages.dropandsend(), on: { pageBeforeIn: function () { checkIfAccountGoodWithPaymentMethod(function (ok) { if (!ok) { $("#addPaymentMethodNag").css("display", ""); } }, function (error) { $("#addPaymentMethodNag").css("display", ""); }); var dayofweek = formatTimestamp("l"); switch (dayofweek) { case "Saturday": case "Sunday": $("#pickupWeekendWarning").css("display", ""); break; } var hourofday = formatTimestamp("H"); if (hourofday > 12 + 4) { $("#pickupLateInDayWarning").css("display", ""); } }, pageAfterOut: function () { dropboxMap = null; } } }, { path: '/pickup', name: 'pickup', async: function ( {resolve}) { resolve({ content: compiledPages.pickup({ streetaddress: inStorage("lastpickupaddress") ? getStorage("lastpickupaddress") : "", zipcode: inStorage("lastpickupzipcode") ? getStorage("lastpickupzipcode") : "" }) }, {}); }, on: { pageBeforeIn: function () { checkIfAccountGoodWithPaymentMethod(function (ok) { if (!ok) { $("#addPaymentMethodNag").css("display", ""); } }, function (error) { $("#addPaymentMethodNag").css("display", ""); }); var dayofweek = formatTimestamp("l"); switch (dayofweek) { case "Saturday": case "Sunday": $("#pickupWeekendWarning").css("display", ""); break; } var hourofday = formatTimestamp("H"); if (hourofday > 12 + 4) { $("#pickupLateInDayWarning").css("display", ""); } } } }, { path: '/shop', name: 'shop', async: loadShopPage, on: { pageBeforeIn: function () { checkIfAccountGoodWithPaymentMethod(function (ok) { if (!ok) { $("#addPaymentMethodNag").css("display", ""); } }, function (error) { $("#addPaymentMethodNag").css("display", ""); }); updateCart(); } } }, { path: '/telegram', name: 'telegram', url: './pages/telegram.html', on: { pageBeforeIn: function () { checkIfAccountGoodWithPaymentMethod(function (ok) { if (!ok) { $("#addPaymentMethodNag").css("display", ""); } }, function (error) { $("#addPaymentMethodNag").css("display", ""); }); } } }, { path: '/track', url: './pages/track.html', name: 'track', on: { pageBeforeIn: function () { addTrackingSuggestions(); $("#trackingcode").val("0"); app.input.validate("#trackingcode"); $("#trackingcode").val(""); } } }, { path: '/rates', url: './pages/rates.html', name: 'rates', on: { pageAfterIn: function () { initRateForm(); } } }, { path: '/account', name: 'account', content: compiledPages.account(), on: { pageAfterIn: function () { initAccountPage(); } } }, { path: '/track/:code', name: 'trackresult', async: trackOpenAsync, on: { pageAfterIn: function () { var mapboxel = document.getElementById("mapbox-track"); var trackingMap = new MapControl(mapboxel, false); trackingMap.reloadMap(); var latitude = $(mapboxel).data("latitude"); var longitude = $(mapboxel).data("longitude"); var accurate = $(mapboxel).data("accurate") == true; trackingMap.clearMarkersAndCenterMapOnNewMarker("package-marker", latitude, longitude, accurate); } } }, { path: '/receipts', name: 'receipts', async: function ( {resolve, reject}) { app.dialog.preloader("Loading..."); apirequest(SETTINGS.apis.getreceipts, { accountnumber: getStorage("accountnumber"), accountkey: getStorage("accountkey") }, function (success) { app.dialog.close(); if (success.status == "OK") { resolve({ content: compiledPages.receipts({ receipts: success.receipts }) }); } else { app.dialog.alert(success.msg, "Error"); sendErrorReport("Receipts", "Loading receipt list", success.msg); reject(); } }, function (xhr, status, error) { app.dialog.close(); app.dialog.alert("There's a server or network problem. Check your Internet connection or try again later.", "Error"); sendErrorReport("Receipts", "Couldn't load receipts", "Server/network problem: " + xhr.status + ": " + xhr.statusText); reject(); }, "POST"); } }, { path: '/credits', url: './pages/credits.html', name: 'credits' }, { path: '/settings', name: 'settings', async: function ( {resolve}) { var settings = []; settings.push( { setting: "display", title: "Display and Appearance", text: "", onclick: "router.navigate('/settings/display')", link: true } ); settings.push( { setting: "resetaccount", title: "Forget Account", text: "Log out and disconnect from your Helena Express account.", onclick: "resetAccountPrompt()", link: true }, { setting: "versions", title: "Helena Express app v" + app_version, text: "Copyright © 2019-2022 Helena Express and Netsyms Technologies.", onclick: "" }, { setting: "opensource", title: "Credits and open source info", text: "", onclick: "router.navigate('/credits')", link: true }, { setting: "legal", title: "Terms of Use and Privacy Policy", text: "", onclick: "openBrowser('https://helena.express/appterms?mtm_campaign=HelenaExpressApp')", link: true }, { setting: "analytics", title: "Analytics", text: "If turned on, we'll collect some anonymous information to help improve the app. It is not sent to any third parties.", toggle: true, checked: getStorage("analytics") !== "false", onclick: "" }, ); resolve({ content: compiledPages.settings({ page_title: "Settings", settings: settings }) }); }, routes: [ { path: '/display', name: 'settings', async: function ( {resolve}) { var settings = [ { setting: "apptheme", title: "Color theme", select: true, options: [ { value: "auto", label: "Auto", selected: getStorage("apptheme") == null || getStorage("apptheme") == "auto" }, { value: "dark", label: "Dark", selected: getStorage("apptheme") == "dark" }, { value: "light", label: "Light", selected: getStorage("apptheme") == "light" } ] }, { setting: "animation", title: "Animations", select: true, options: [ { value: "auto", label: "On", selected: getStorage("animation") == null || getStorage("animation") == "auto" || getStorage("animation") == "on" }, // { // value: "on", // label: "On", // selected: getStorage("animation") == "on" // }, { value: "off", label: "Off", selected: getStorage("animation") == "off" } ] }, { setting: "hideaccountnag", title: "Hide \"Finish Account Setup\"", text: "", toggle: true, checked: getStorage("hideaccountnag") == "true", onclick: "" } ]; resolve({ content: compiledPages.settings({ page_title: "Display Settings", settings: settings }) }); } } ] } ];