Start making Helena Express app

master
Skylar Ittner 3 years ago
parent a4a8cd429e
commit 5691e91312

@ -1,8 +1,8 @@
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.netsyms.repairapp" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name short="PC Repair">Netsyms PC Repair</name>
<widget id="com.netsyms.helenaexpress.app" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name short="Helena Express">Helena Express</name>
<description>
Book, track, pay, and manage your computer repair from Netsyms Technologies
</description>
<author email="dev@netsyms.com" href="https://netsyms.com">
Netsyms Technologies
@ -21,6 +21,7 @@
<platform name="android">
<allow-intent href="market:*" />
<preference name="HeaderColor" value="#0D87F6" />
<!-- <resource-file src="src/android/BackgroundFetchHeadlessTask.java" target="app/src/main/java/com/transistorsoft/cordova/backgroundfetch/BackgroundFetchHeadlessTask.java" /> -->
<!-- <resource-file src="/res/android/drawable/ic_launcher_background.xml" target="/app/src/main/res/drawable/ic_launcher_background.xml" />
<resource-file src="/res/android/drawable/ic_launcher_foreground.xml" target="/app/src/main/res/drawable/ic_launcher_foreground.xml" />
<resource-file src="res/android/mipmap-anydpi-v26/ic_launcher.xml" target="app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml" />

File diff suppressed because it is too large Load Diff

@ -2,8 +2,8 @@ auxiliary.org-netbeans-modules-cordova.cordova_5f_build_5f_script_5f_version=52
auxiliary.org-netbeans-modules-cordova.phonegap=true
auxiliary.org-netbeans-modules-javascript-nodejs.run_2e_enabled=false
browser.run=true
file.reference.PCRepair-www=www
file.reference.HelenaExpress-www=www
files.encoding=UTF-8
project.licensePath=./nbproject/license-mpl.txt
site.root.folder=${file.reference.PCRepair-www}
site.root.folder=${file.reference.HelenaExpress-www}
start.file=index.html

@ -3,7 +3,7 @@
<type>org.netbeans.modules.web.clientproject</type>
<configuration>
<data xmlns="http://www.netbeans.org/ns/clientside-project/1">
<name>Netsyms PC Repair App</name>
<name>Helena Express App</name>
</data>
</configuration>
</project>

495
package-lock.json generated

File diff suppressed because it is too large Load Diff

@ -1,13 +1,13 @@
{
"name": "com.netsyms.repairapp",
"displayName": "Netsyms PC Repair",
"name": "com.netsyms.helenaexpress.app",
"displayName": "Helena Express",
"version": "1.0.0",
"description": "App to book, track, pay, and manage computer repair from Netsyms Technologies",
"product_string": "Netsyms PC Repair",
"description": "App to schedule and track package pickup and courier services",
"product_string": "Helena Express",
"main": "www/index.html",
"window": {
"icon": "res/logo.png",
"id": "com.netsyms.repairapp_window_main_00001",
"icon": "res/logo-sm.png",
"id": "express.helena.app_window_main_00001",
"frame": true
},
"user_agent": "Mozilla/5.0 (%osinfo) %name/%ver NW.js/%nwver WebKit/%webkit_ver Chromium/%chromium_ver",
@ -28,7 +28,9 @@
"cordova-plugin-device": {},
"cordova-plugin-statusbar": {},
"cordova-plugin-headercolor": {},
"cordova-plugin-theme-detection": {}
"cordova-plugin-theme-detection": {},
"cordova-plugin-background-fetch": {},
"cordova-plugin-nativestorage": {}
},
"platforms": [
"android",
@ -44,6 +46,9 @@
"cordova-plugin-whitelist": "^1.3.4"
},
"devDependencies": {
"cordova-android": "^9.0.0"
"cordova-android": "^9.0.0",
"cordova-browser": "^6.0.0",
"cordova-plugin-background-fetch": "^6.1.1",
"cordova-plugin-nativestorage": "^2.3.2"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 251 KiB

After

Width:  |  Height:  |  Size: 28 KiB

@ -20,19 +20,39 @@ Framework7 and FontAwesome both have a .fab class
}
.page {
background-image: linear-gradient(180deg, rgba(13,135,246,1) 0%, rgba(13,135,246,1) var(--f7-navbar-height), rgba(13,135,246,0.5) 30%, rgba(13,135,246,0.4) 50%, rgba(255,255,255,0.3) 80%), url(../images/bg.jpg);
background-size: cover;
background-position: top;
background-color: #d0f2fc;
background-image: url(../images/background.svg);
background-repeat: no-repeat;
background-size: contain;
background-position: bottom;
background-attachment: fixed;
}
.theme-dark .page {
background-image: linear-gradient(180deg, rgba(0,0,0,1) 0px, rgba(0,0,0,1) var(--f7-navbar-height), rgba(0,0,0,0) 30%), url(../images/bg_night.jpg);
background-size: cover;
background-position: top;
/* TODO: make this dark */
background-color: black;
background-image: url(../images/background-transparent.svg);
background-repeat: no-repeat;
background-size: contain;
background-position: bottom;
background-attachment: fixed;
}
.list.transparent ul {
background-color: rgba(255,255,255,0.65);
}
.list.transparent ul li.item-divider {
background-color: rgba(255,255,255,0.5);
}
.theme-dark .list.transparent ul {
background-color: rgba(0,0,0,0.65);
}
.theme-dark .list.transparent ul li.item-divider {
background-color: rgba(0,0,0,0.5);
}
.navbar {
background-color: rgba(13,135,246,1);
background-color: #d0f2fc;
}
.theme-dark .navbar {
@ -54,19 +74,6 @@ Framework7 and FontAwesome both have a .fab class
-webkit-app-region: no-drag;
}
.list.transparent ul {
background-color: rgba(255,255,255,0.65);
}
.list.transparent ul li.item-divider {
background-color: rgba(255,255,255,0.5);
}
.theme-dark .list.transparent ul {
background-color: rgba(0,0,0,0.65);
}
.theme-dark .list.transparent ul li.item-divider {
background-color: rgba(0,0,0,0.5);
}
/*
* Material icons are too big and disrupt the flow of text
*/
@ -94,6 +101,11 @@ Framework7 and FontAwesome both have a .fab class
transition: 10ms !important;
}
.trackingeventicon {
vertical-align: middle;
width: 1.5em;
}
/*
Allow easily changing help text to reflect finger/mouse usage.
*/

@ -10,8 +10,8 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
.widelogo {
max-width: 300px;
width: 80%;
max-width: 200px;
width: 50%;
}
div.page[data-name="home"] .card {

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.0 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 699 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 251 KiB

After

Width:  |  Height:  |  Size: 28 KiB

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg class="svg-inline--fa fa-check-circle fa-w-16" aria-hidden="true" data-icon="check-circle" data-prefix="fad" focusable="false" role="img" version="1.1" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><g class="fa-group" fill="#4caf50"><path class="fa-secondary" d="M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm155.31 195.31l-184 184a16 16 0 0 1-22.62 0l-104-104a16 16 0 0 1 0-22.62l22.62-22.63a16 16 0 0 1 22.63 0L216 308.12l150.06-150.06a16 16 0 0 1 22.63 0l22.62 22.63a16 16 0 0 1 0 22.62z" opacity=".4"/><path class="fa-primary" d="M227.31 387.31a16 16 0 0 1-22.62 0l-104-104a16 16 0 0 1 0-22.62l22.62-22.63a16 16 0 0 1 22.63 0L216 308.12l150.06-150.06a16 16 0 0 1 22.63 0l22.62 22.63a16 16 0 0 1 0 22.62l-184 184z"/></g></svg>

After

Width:  |  Height:  |  Size: 809 B

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg class="svg-inline--fa fa-exclamation-circle fa-w-16" aria-hidden="true" data-icon="exclamation-circle" data-prefix="fad" focusable="false" role="img" version="1.1" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><g class="fa-group" fill="#ffc107"><path class="fa-secondary" d="M256 8C119 8 8 119.08 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 376a32 32 0 1 1 32-32 32 32 0 0 1-32 32zm38.24-238.41l-12.8 128A16 16 0 0 1 265.52 288h-19a16 16 0 0 1-15.92-14.41l-12.8-128A16 16 0 0 1 233.68 128h44.64a16 16 0 0 1 15.92 17.59z" opacity=".4"/><path class="fa-primary" d="M278.32 128h-44.64a16 16 0 0 0-15.92 17.59l12.8 128A16 16 0 0 0 246.48 288h19a16 16 0 0 0 15.92-14.41l12.8-128A16 16 0 0 0 278.32 128zM256 320a32 32 0 1 0 32 32 32 32 0 0 0-32-32z"/></g></svg>

After

Width:  |  Height:  |  Size: 820 B

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg class="svg-inline--fa fa-info-circle fa-w-16" aria-hidden="true" data-icon="info-circle" data-prefix="fad" focusable="false" role="img" version="1.1" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><g class="fa-group" fill="#2196f3"><path class="fa-secondary" d="M256 8C119 8 8 119.08 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 110a42 42 0 1 1-42 42 42 42 0 0 1 42-42zm56 254a12 12 0 0 1-12 12h-88a12 12 0 0 1-12-12v-24a12 12 0 0 1 12-12h12v-64h-12a12 12 0 0 1-12-12v-24a12 12 0 0 1 12-12h64a12 12 0 0 1 12 12v100h12a12 12 0 0 1 12 12z" opacity=".4"/><path class="fa-primary" d="M256 202a42 42 0 1 0-42-42 42 42 0 0 0 42 42zm44 134h-12V236a12 12 0 0 0-12-12h-64a12 12 0 0 0-12 12v24a12 12 0 0 0 12 12h12v64h-12a12 12 0 0 0-12 12v24a12 12 0 0 0 12 12h88a12 12 0 0 0 12-12v-24a12 12 0 0 0-12-12z"/></g></svg>

After

Width:  |  Height:  |  Size: 870 B

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg class="svg-inline--fa fa-location-circle fa-w-16" aria-hidden="true" data-icon="location-circle" data-prefix="fad" focusable="false" role="img" version="1.1" viewBox="0 0 496 512" xmlns="http://www.w3.org/2000/svg"><g class="fa-group" fill="#00bcd4"><path class="fa-secondary" d="M248,8C111,8,0,119,0,256S111,504,248,504,496,393,496,256,385,8,248,8ZM358.24,177.74,262.29,385.63c-11.2,24-46.38,16-46.38-9.59V288H128c-25.59,0-33.58-35.18-9.59-46.38L326.3,145.71c19.15-8,39.94,12.84,31.94,32Z" opacity=".4"/><path class="fa-primary" d="M118.36,241.7l207.89-95.95c19.2-8,40,12.8,32,32l-96,207.88c-11.2,24-46.38,16-46.38-9.59V288H128c-25.64,0-33.63-35.14-9.64-46.34Z"/></g></svg>

After

Width:  |  Height:  |  Size: 719 B

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 220 KiB

After

Width:  |  Height:  |  Size: 16 KiB

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg class="svg-inline--fa fa-info-circle fa-w-16" aria-hidden="true" data-icon="info-circle" data-prefix="fad" focusable="false" role="img" version="1.1" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><g class="fa-group" fill="#673ab7"><path class="fa-secondary" d="m256 8c-137 0-248 111.08-248 248s111 248 248 248 248-111 248-248-111-248-248-248z" fill="#673ab7" opacity=".4"/></g><path class="fa-primary" d="m143.5 148.86h-32.143a5.3571 5.3571 0 0 0-5.3571 5.3571v203.57a5.3571 5.3571 0 0 0 5.3571 5.3572h32.143a5.3571 5.3571 0 0 0 5.3571-5.3572v-203.57a5.3571 5.3571 0 0 0-5.3571-5.3571zm42.857 0h-10.714a5.3571 5.3571 0 0 0-5.3572 5.3571v203.57a5.3571 5.3571 0 0 0 5.3572 5.3572h10.714a5.3571 5.3571 0 0 0 5.3571-5.3572v-203.57a5.3571 5.3571 0 0 0-5.3571-5.3571zm42.857 0h-10.714a5.3571 5.3571 0 0 0-5.3571 5.3571v203.57a5.3571 5.3571 0 0 0 5.3571 5.3572h10.714a5.3571 5.3571 0 0 0 5.3572-5.3572v-203.57a5.3571 5.3571 0 0 0-5.3572-5.3571zm85.714 0h-32.143a5.3571 5.3571 0 0 0-5.3571 5.3571v203.57a5.3571 5.3571 0 0 0 5.3571 5.3572h32.143a5.3571 5.3571 0 0 0 5.3571-5.3572v-203.57a5.3571 5.3571 0 0 0-5.3571-5.3571zm85.714 0h-32.143a5.3571 5.3571 0 0 0-5.3571 5.3571v203.57a5.3571 5.3571 0 0 0 5.3571 5.3572h32.143a5.3571 5.3571 0 0 0 5.3571-5.3572v-203.57a5.3571 5.3571 0 0 0-5.3571-5.3571z" fill="#673ab7"/></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -0,0 +1,29 @@
/*
* 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/.
*/
function getAddressQRCode() {
var qrstring = $("#addresscodeform #name").val() + "\t"
+ $("#addresscodeform #company").val() + "\t"
+ $("#addresscodeform #street1").val() + "\t"
+ $("#addresscodeform #street2").val() + "\t"
+ $("#addresscodeform #city").val() + "\t"
+ $("#addresscodeform #state").val() + "\t"
+ $("#addresscodeform #zip").val();
var canvas = document.createElement('canvas');
bwipjs.toCanvas(canvas, {
bcid: 'qrcode', // Barcode type
text: qrstring, // Text to encode
scale: 5, // 3x scaling factor
includetext: false, // Show human-readable text
textxalign: 'center', // Always good to set this
});
document.getElementById("addresscode-barcode").src = canvas.toDataURL('image/png');
app.popup.create({el: document.getElementById("addresscode-popup")}).open();
}

@ -1,96 +0,0 @@
/*
* 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/.
*/
function setupNewAccount(name) {
app.dialog.preloader("Finishing up...");
apirequest(
SETTINGS.apis.registernew,
{
name: name
},
function (resp) {
app.dialog.close();
if (resp.status == "ERROR") {
app.dialog.alert(resp.msg, "Error");
return;
}
setStorage("client_uuid", resp.client_uuid);
setStorage("device_uuid", resp.device_uuid);
app.toast.create({
icon: '<i class="far fa-user-check fa-3x margin"></i>',
text: '<h3 class="no-margin-top">Account Set Up!</h3>',
position: 'center',
closeTimeout: 3000
}).open();
router.navigate("/home", {
transition: "f7-dive"
});
},
function (xhr) {
app.dialog.close();
try {
var error = $.parseJSON(xhr.responseText);
if (error && typeof error.msg != 'undefined') {
app.dialog.alert(error.msg + " (NEWAC_XHR)", "Error");
} else {
app.dialog.alert("A server or network error occurred. Try again later. (NEWAC_XHRNOMSG)", "Error");
}
} catch (ex) {
app.dialog.alert("A server error occurred. Try again later. (NEWAC_XHRBADJSON)", "Error");
}
}, "POST");
}
function setupExistingAccount(email, phone, invoiceid) {
app.dialog.preloader("Finding your account...");
apirequest(
SETTINGS.apis.registerexisting,
{
email: email,
phone: phone,
invoiceid: invoiceid
},
function (resp) {
app.dialog.close();
if (resp.status == "ERROR") {
app.dialog.alert(resp.msg, "Error");
return;
}
setStorage("client_uuid", resp.client_uuid);
setStorage("device_uuid", resp.device_uuid);
app.toast.create({
icon: '<i class="far fa-user-check fa-3x margin"></i>',
text: '<h3 class="no-margin-top">Account Linked!</h3>',
position: 'center',
closeTimeout: 3000
}).open();
router.navigate("/home", {
transition: "f7-dive"
});
},
function (xhr) {
app.dialog.close();
try {
var error = $.parseJSON(xhr.responseText);
if (error && typeof error.msg != 'undefined') {
app.dialog.alert(error.msg + " (LINKAC_XHR)", "Error");
} else {
app.dialog.alert("A server or network error occurred. Try again later. (LINKAC_XHRNOMSG)", "Error");
}
} catch (ex) {
app.dialog.alert("A server error occurred. Try again later. (LINKAC_XHRBADJSON)", "Error");
}
}, "POST");
}
function unlinkAccount() {
localStorage.removeItem("client_uuid");
localStorage.removeItem("device_uuid");
restartApplication();
}

@ -10,8 +10,8 @@ initPlatform();
var app = new Framework7({
root: "#app",
name: "Netsyms PC Repair",
id: "com.netsyms.repairapp",
name: "Helena Express",
id: "com.netsyms.helenaexpress.app",
theme: "auto",
card: {
swipeToClose: false
@ -96,7 +96,7 @@ function setAppTheme(theme) {
$("#app").removeClass("theme-dark");
if (platform_type == "cordova" && cordova.platformId == 'android' && typeof StatusBar !== 'undefined') {
StatusBar.styleLightContent();
StatusBar.backgroundColorByHexString("#0D87F6");
StatusBar.backgroundColorByHexString("#D0F2FC");
}
} else if (theme == "dark") {
$("#app").addClass("theme-dark");

@ -1,86 +0,0 @@
/*
* 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/.
*/
function openOffersAsync(routeTo, routeFrom, resolve, reject) {
app.dialog.preloader("Fetching latest deals...");
apirequest(
SETTINGS.apis.offers_services,
{},
function (resp) {
app.dialog.close();
if (resp.status == "ERROR") {
app.dialog.alert(resp.msg, "Error");
reject();
} else {
var context = {
offers: []
};
for (var i = 0; i < resp.offers.length; i++) {
if (resp.offers[i].valid === true) {
// no expiration
resp.offers[i].expires = "Limited time offer";
} else {
resp.offers[i].expires = "Expires " + formatTimestamp("l F j, Y", resp.offers[i].valid.to);
}
context.offers.push(resp.offers[i]);
}
resolve({
templateUrl: "pages/offers.html",
}, {
context: context
});
}
},
function (xhr) {
app.dialog.close();
var error = $.parseJSON(xhr.responseText);
if (error && typeof error.msg != 'undefined') {
app.dialog.alert(error.msg, "Error");
} else {
app.dialog.alert("A server or network error occurred.", "Error");
}
reject();
}, "GET");
}
function openServicesAsync(routeTo, routeFrom, resolve, reject) {
app.dialog.preloader("Just a second...");
apirequest(
SETTINGS.apis.offers_services,
{},
function (resp) {
app.dialog.close();
if (resp.status == "ERROR") {
app.dialog.alert(resp.msg, "Error");
reject();
} else {
var context = {
services: resp.services
};
resolve({
templateUrl: "pages/services.html",
}, {
context: context
});
}
},
function (xhr) {
app.dialog.close();
var error = $.parseJSON(xhr.responseText);
if (error && typeof error.msg != 'undefined') {
app.dialog.alert(error.msg, "Error");
} else {
app.dialog.alert("A server or network error occurred.", "Error");
}
reject();
}, "GET");
}

@ -4,46 +4,23 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
function openTrackingInfoPage(id) {
if (typeof id == "undefined" || id == null || id == "") {
app.input.validate("#deviceid");
function openTrackingInfoPage(code) {
if (typeof code == "undefined" || code == null || code == "") {
app.input.validate("#trackingcode");
return;
}
router.navigate("/track/" + id);
router.navigate("/track/" + code);
}
function addClientMachineSuggestions() {
$("#client-link-account-message").addClass("display-none");
$("#client-machine-suggestion-list").addClass("display-none");
$("#client-machine-suggestion-list-preloader").addClass("display-none");
$("#client-machine-suggestion-list ul").html("");
if (inStorage("client_uuid")) {
$("#client-machine-suggestion-list-preloader").removeClass("display-none");
apirequest(
SETTINGS.apis.getmachines,
{
clientuuid: getStorage("client_uuid")
},
function (resp) {
if (resp.status == "OK") {
if (resp.machines.length > 0) {
for (var i = 0; i < resp.machines.length; i++) {
var id = resp.machines[i].id;
var type = resp.machines[i].type.label;
var icon = resp.machines[i].icon;
$("#client-machine-suggestion-list ul").append('<li><a class="item-link item-content" href="/track/' + id + '">'
+ '<div class="item-inner"><div class="item-title">'
+ '<i class="' + icon + '"></i> ' + type + " #" + id
+ '</div></div></a></li>');
}
$("#client-machine-suggestion-list").removeClass("display-none");
}
$("#client-machine-suggestion-list-preloader").addClass("display-none");
}
}, "GET");
} else {
$("#client-link-account-message").removeClass("display-none");
function addTrackingSuggestions() {
$("#tracking-suggestion-list ul").html("");
var history = getTrackingHistory();
for (var i = 0; i < history.length; i++) {
$("#tracking-suggestion-list ul").append('<li><a class="item-link item-content" href="/track/' + history[i] + '">'
+ '<div class="item-inner"><div class="item-title">'
+ history[i]
+ '</div></div></a></li>');
}
}
@ -53,27 +30,51 @@ function trackOpenAsync(routeTo, routeFrom, resolve, reject) {
apirequest(
SETTINGS.apis.track,
{
id: routeTo.params.id,
code: routeTo.params.code,
format: "json"
},
function (resp) {
app.dialog.close();
if (resp.status == "ERROR") {
app.dialog.alert(resp.msg, "Error");
reject();
} else {
addToTrackingHistory(resp.id);
if (resp.status == "OK") {
addToTrackingHistory(resp.code);
var context = {};
context.info = resp.info;
context.events = resp.events;
context.components = resp.components;
var context = {
code: resp.code,
info: [
{label: "Tracking Code", value: resp.code}
],
events: []
};
if (resp.info.statustext) {
context.info.push({label: "Status", value: resp.info.statustext});
}
if (resp.info.carrier) {
context.info.push({label: "Carrier", value: resp.info.carrier});
}
if (resp.info.delivery_date) {
var deliverydatelabel = "Estimated delivery on";
if (resp.info.status == "DELIVERED") {
deliverydatelabel = "Delivered on";
}
context.info.push({label: deliverydatelabel, value: formatTimestamp("F j Y", resp.info.delivery_date_unixtime)});
}
for (var i = 0; i < resp.events.length; i++) {
context.events.push({
text: resp.events[i].text,
date: formatTimestamp("F j g:i a", resp.events[i].unixtime),
icon: "./assets/images/icons/" + resp.events[i].icon + ".svg"
});
}
resolve({
templateUrl: "pages/trackresult.html",
}, {
context: context
});
} else {
app.dialog.alert(resp.msg, "Error");
reject();
}
},
function (xhr) {
@ -89,7 +90,7 @@ function trackOpenAsync(routeTo, routeFrom, resolve, reject) {
}
function getTrackingHistory() {
var history = getStorage("trackhistory");
var history = getStorage("trackinghistory");
if (history != null) {
return JSON.parse(history);
} else {
@ -97,19 +98,19 @@ function getTrackingHistory() {
}
}
function addToTrackingHistory(id) {
function addToTrackingHistory(code) {
var history = getTrackingHistory();
for (var i = 0; i < history.length; i++) {
if (history[i] == id) {
if (history[i] == code) {
history.splice(i, 1);
}
}
// Add the code back to the list so it's at the top
history.push(id);
history.push(code);
while (history.length > 10) {
history.shift();
}
setStorage("trackhistory", JSON.stringify(history));
setStorage("trackinghistory", JSON.stringify(history));
}

@ -19,7 +19,7 @@
<script src="cordova.js"></script>
<div id="app" class="color-theme-blue">
<div id="app" class="color-theme-green">
<div class="view view-main"></div>
@ -44,9 +44,8 @@
<script src="assets/js/platform.js"></script>
<script src="assets/js/util.js"></script>
<script src="assets/js/linkaccount.js"></script>
<script src="assets/js/track.js"></script>
<script src="assets/js/offers_services.js"></script>
<script src="assets/js/addresscode.js"></script>
<script src="routes.js"></script>
<script src="assets/js/main.js"></script>

@ -1,6 +1,6 @@
{
"name": "Netsyms PC Repair",
"short_name": "PC Repair",
"name": "Helena Express",
"short_name": "Helena Express",
"icons": [
{
"src": "assets/images/icons/32.png",
@ -45,13 +45,13 @@
"related_applications": [
{
"platform": "play",
"url": "https://play.google.com/store/apps/details?id=com.netsyms.repairapp",
"id": "com.netsyms.repairapp"
"url": "https://play.google.com/store/apps/details?id=com.netsyms.helenaexpress.app",
"id": "com.netsyms.helenaexpress.app"
}
],
"start_url": "index.html",
"display": "standalone",
"background_color": "#0D87F6",
"theme_color": "#0D87F6",
"background_color": "#d0f2fc",
"theme_color": "#d0f2fc",
"iarc_rating_id": ""
}

@ -1,5 +1,5 @@
{
"name": "NetsymsPCRepair",
"name": "HelenaExpressApp",
"version": "1.0.0",
"main": "index.html",
"license": "MPL-2.0",

@ -2,56 +2,59 @@
- 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/. -->
<div class="page" data-name="linkaccount_new">
<div class="page" data-name="addresscode">
<div class="navbar">
<div class="navbar-inner text-color-white color-white">
<div class="navbar-inner">
<div class="left">
<a class="link back" href="#">
<i class="icon icon-back"></i>
<span class="if-not-md">Back</span>
</a>
</div>
<div class="title">Setup Account</div>
<div class="title">Destination Code</div>
</div>
</div>
<div class="page-content noselect">
<div class="row justify-content-center margin-top">
<div class="col-100 medium-90 xlarge-75 margin-horizontal">
<div class="block text-color-white">
<p>Welcome and thanks for choosing Netsyms Technologies!
</div>
</div>
<div class="page-content">
<div class="block">
Get a faster pickup and a discount by filling in your package's destination address here. We'll scan the code on your screen instead of typing in the address, saving everyone's time and eliminating typos!
</div>
<div class="row justify-content-center">
<div class="col-100 medium-90 xlarge-75 margin-horizontal">
<div class="card margin">
<div class="card-content text-align-center padding-vertical">
<div>
<div class="card-header display-block no-hairlines">
<h2 class="no-margin">What's your name?</h2>
</div>
</div>
<div class="list">
<ul>
<ul id="addresscodeform">
{{#each fields}}
<li class="item-content item-input item-input-outline">
<div class="item-inner">
<div class="item-title item-floating-label">Name</div>
<div class="item-title item-floating-label">{{label}}</div>
<div class="item-input-wrap">
<input type="text" id="newaccount_name" />
<input type="text" id="{{id}}" />
<span class="input-clear-button"></span>
</div>
</div>
</li>
{{/each}}
</ul>
</div>
<div class="card-content-padding">
<div class="button" onclick="setupNewAccount($('#newaccount_name').val())"><i class="far fa-chevron-right"></i> Finish</div>
<div class="button" onclick="getAddressQRCode()"><i class="far fa-qrcode"></i> Show Code</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="popup" id="addresscode-popup">
<div class="block text-align-center">
<img id="addresscode-barcode" style="max-width: 90%;" />
<p>Present this code to the Helena Express agent.</p>
<p><a class="button popup-close" href="#">Close</a></p>
</div>
</div>
</div>

File diff suppressed because it is too large Load Diff

@ -19,87 +19,12 @@
<div class="block">
<p>This program is licensed under the Mozilla Public License 2.0.
To get the source code, visit https://source.netsyms.com/Netsyms/PackageHelper.
To get the source code, visit https://source.netsyms.com/Netsyms/PCRepairApp.
<br>
This application relies on and is bundled with third-party code.
See below for the their licenses and where to find source code.
</div>
<div class="block">
<h2>Map Data and Styles</h2>
<p>
Map data &copy; <a href="http://www.openmaptiles.org/" target="_system">OpenMapTiles</a>, &copy; <a href="https://www.openstreetmap.org/copyright" target="_system">OpenStreetMap</a> contributors.
</p>
<h4>OSM Liberty map style</h4>
<pre style="white-space: pre-line; overflow-wrap: break-word;">
Mapbox Open Styles are copyright (c) 2014, Mapbox, all rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
* Neither the name of Mapbox nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The visual design features of the Mapbox Open Styles (also known as the "look and feel" of the map) are licensed under the Creative Commons Attribution 3.0 license. To view a copy of the license, visit http://creativecommons.org/licenses/by/3.0/. Attribution need not be provided on map images, but should be reasonably accessable from maps based on on these styles (for example, in a webpage linked from copyright notice on the map).
</pre>
<p>
The look and feel of the OSM liberty map design is also derived (although heavily altered) from OSM Bright from Mapbox Open Styles which is licensed under the Creative Commons Attribution 3.0 license.
<br>OSM Liberty is using the Maki POI icon set which is licensed under CC0 1.0 Universal.
<br>OSM Liberty is using the Roboto font family (Copyright 2011 Google). Roboto is licensed under the Apache License, Version 2.0.
</p>
<h4>Klokantech Terrain map style</h4>
<p>
The visual design features of the Klokantech Terrain style (also known as the "look and feel" of
the map) are licensed under the <a href="http://creativecommons.org/licenses/by/4.0/" target="_system">Creative Commons Attribution 4.0 license</a>.
</p>
<pre style="white-space: pre-line; overflow-wrap: break-word;">
Copyright (c) 2016, KlokanTech.com & OpenMapTiles contributors.
Copyright (c) 2014, Mapbox.
All rights reserved.
Modifications by KlokanTech.com & OpenMapTiles contributors.
Derived from "Mapbox Open Styles" https://github.com/mapbox/mapbox-gl-styles
# Code license: BSD 3-Clause License
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</pre>
</div>
<div class="block">
<h2>Code and Libraries</h2>
<pre style="white-space: pre-line; overflow-wrap: break-word;">

@ -6,9 +6,9 @@
<div class="navbar">
<div class="navbar-inner">
<div class="title"><!-- {{js "SETTINGS.branding.apptitle"}} --></div>
<div class="title">{{js "SETTINGS.branding.apptitle"}}</div>
<div class="right">
<a href="/settings" class="link icon-only color-white">
<a href="/settings" class="link icon-only">
<i class="fal fa-cog"></i>
</a>
</div>
@ -16,17 +16,11 @@
</div>
<div class="page-content noselect">
<div class="row margin-top noselect">
<div class="col text-align-center">
<img class="widelogo" src="assets/images/companylogo.svg" />
</div>
</div>
<div class="row justify-content-center margin-top">
<div class="col-100 medium-90 xlarge-75 margin-horizontal">
<div class="row">
{{#each pages}}
<div class="col-50 small-33 large-15 margin-vertical-half">
<div class="col-100 small-33 large-33 margin-vertical-half">
<div class="card" onclick="router.navigate('{{href}}');">
<div class="card-content text-align-center padding-vertical">
<h1 class="no-margin"><i class="{{icon}}"></i></h1>
@ -36,9 +30,15 @@
</div>
</div>
{{/each}}
<div class="col-100 margin-vertical-half">
<div class="card" onclick="router.navigate('/addresscode');">
<div class="card-content text-align-center padding">
<span class="taptext">Tap</span><span class="clicktext">Click</span> here for a package pickup discount
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

@ -1,60 +0,0 @@
<!-- 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/. -->
<div class="page" data-name="linkaccount">
<div class="navbar">
<div class="navbar-inner text-color-white color-white">
<div class="left">
<a class="link back" href="#">
<i class="icon icon-back"></i>
<span class="if-not-md">Back</span>
</a>
</div>
<div class="title">Link Account</div>
</div>
</div>
<div class="page-content noselect">
<div class="row justify-content-center margin-top">
<div class="col-100 medium-90 xlarge-75 margin-horizontal">
<div class="block text-color-white">
<p><span class="taptext">Tap</span><span class="clicktext">Click</span> the option that best describes you.
</div>
</div>
<div class="col-100 medium-90 xlarge-75 margin-horizontal">
<div class="card margin">
<div class="card-content text-align-center padding-vertical" onclick='router.navigate("/linkaccount/new")'>
<div>
<div class="card-header display-block no-hairlines">
<h1 class="no-margin"><i class="fad fa-user-plus"></i></h1>
<h2 class="no-margin">New Customer</h2>
</div>
</div>
<div class="card-content-padding">
<p>I haven't done business with Netsyms before.
</div>
</div>
</div>
</div>
<div class="col-100 medium-90 xlarge-75 margin-horizontal">
<div class="card margin">
<div class="card-content text-align-center padding-vertical" onclick='router.navigate("/linkaccount/existing")'>
<div>
<div class="card-header display-block no-hairlines">
<h1 class="no-margin"><i class="fad fa-user-check"></i></h1>
<h2 class="no-margin">Current Customer</h2>
</div>
</div>
<div class="card-content-padding">
<p>I've received at least one invoice from Netsyms in the past.
</div>
</div>
</div>
</div>
</div>
</div>
</div>

@ -1,72 +0,0 @@
<!-- 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/. -->
<div class="page" data-name="linkaccount_new">
<div class="navbar">
<div class="navbar-inner text-color-white color-white">
<div class="left">
<a class="link back" href="#">
<i class="icon icon-back"></i>
<span class="if-not-md">Back</span>
</a>
</div>
<div class="title">Link Account</div>
</div>
</div>
<div class="page-content noselect">
<div class="row justify-content-center margin-top">
<div class="col-100 medium-90 xlarge-75 margin-horizontal">
<div class="card margin">
<div class="card-content padding-vertical">
<div>
<div class="card-header display-block no-hairlines text-align-center">
<h2 class="no-margin">Welcome back!<br>Let's find your account.</h2>
<p>Fill in as much info as you can.
</div>
</div>
<div class="list">
<ul>
<li class="item-content item-input item-input-outline">
<div class="item-inner">
<div class="item-title item-floating-label">Email</div>
<div class="item-input-wrap">
<input type="email" id="existingaccount_email" />
<span class="input-clear-button"></span>
</div>
</div>
</li>
<li class="item-content item-input item-input-outline">
<div class="item-inner">
<div class="item-title item-floating-label">Phone</div>
<div class="item-input-wrap">
<input type="tel" id="existingaccount_phone" />
<span class="input-clear-button"></span>
</div>
</div>
</li>
<li class="item-content item-input item-input-outline">
<div class="item-inner">
<div class="item-title item-floating-label">Invoice Number</div>
<div class="item-input-wrap">
<input type="tel" id="existingaccount_invoiceid" />
<span class="input-clear-button"></span>
<div class="item-input-info">Find it in the dark blue box on any invoice.</div>
</div>
</div>
</li>
</ul>
</div>
<div class="card-content-padding">
<div class="button" onclick="setupExistingAccount($('#existingaccount_email').val(),$('#existingaccount_phone').val(),$('#existingaccount_invoiceid').val())"><i class="far fa-chevron-right"></i> Finish</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>

@ -1,46 +0,0 @@
<!-- 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/. -->
<div class="page" data-name="offers">
<div class="navbar">
<div class="navbar-inner text-color-white color-white">
<div class="left">
<a class="link back" href="#">
<i class="icon icon-back"></i>
<span class="if-not-md">Back</span>
</a>
</div>
<div class="title">Offers</div>
</div>
</div>
<div class="page-content noselect">
<div class="row justify-content-center margin-top">
<div class="col-100 medium-90 xlarge-75 margin-horizontal">
<div class="row justify-content-center">
{{#each offers}}
<div class="col-100 small-50 xlarge-33">
<div class="card margin">
<div class="card-content text-align-center padding-vertical">
<div>
<div class="card-header display-block no-hairlines">
<h1 class="no-margin"><i class="{{icon}}"></i></h1>
<h1 class="no-margin">{{title}}</h1>
<small style="opacity: 0.7"><i class="far fa-clock"></i> {{expires}}</small>
</div>
</div>
<div class="card-content-padding">
<p>{{text}}
</div>
</div>
</div>
</div>
{{/each}}
</div>
</div>
</div>
</div>
</div>

@ -1,53 +0,0 @@
<!-- 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/. -->
<div class="page" data-name="services">
<div class="navbar">
<div class="navbar-inner text-color-white color-white">
<div class="left">
<a class="link back" href="#">
<i class="icon icon-back"></i>
<span class="if-not-md">Back</span>
</a>
</div>
<div class="title">Services</div>
</div>
</div>
<div class="page-content noselect">
<div class="row justify-content-center margin-top">
<div class="col-100 medium-90 xlarge-75 margin-horizontal">
<a name="top"></a>
{{#each services}}
<h2 class="margin-left display-flex justify-content-space-between">
<span>{{cat}}</span>
<span onclick="$('.page[data-name=services] .page-content').animate({scrollTop: '0'});" class="margin-top-half"><i class="material-icons">arrow_upward</i></span>
</h2>
<div class="row justify-content-center">
{{#each services}}
<div class="col-100 small-50 xlarge-33">
<div class="card margin">
<div class="card-content text-align-center padding-vertical">
<div>
<div class="card-header display-block no-hairlines">
<h1 class="no-margin"><i class="{{icon}}"></i></h1>
<h1 class="no-margin">{{title}}</h1>
<small style="opacity: 0.7">{{price}}</small>
</div>
</div>
<div class="card-content-padding">
<p>{{text}}
</div>
</div>
</div>
</div>
{{/each}}
</div>
{{/each}}
</div>
</div>
</div>
</div>

@ -5,7 +5,7 @@
<div class="page" data-name="settings">
<div class="navbar">
<div class="navbar-inner text-color-white color-white">
<div class="navbar-inner">
<div class="left">
<a href="#" class="link icon-only" onclick="router.back({force: true, ignoreCache: true})">
<i class="icon icon-back"></i>

@ -5,14 +5,14 @@
<div class="page" data-name="track">
<div class="navbar">
<div class="navbar-inner text-color-white color-white">
<div class="navbar-inner">
<div class="left">
<a class="link back" href="#">
<i class="icon icon-back"></i>
<span class="if-not-md">Back</span>
</a>
</div>
<div class="title">Repair Status</div>
<div class="title">Track</div>
</div>
</div>
@ -27,9 +27,9 @@
<ul>
<li class="item-content item-input item-input-outline">
<div class="item-inner">
<div class="item-title item-floating-label">Device ID or Tracking Code</div>
<div class="item-title item-floating-label">Tracking Code</div>
<div class="item-input-wrap">
<input type="text" id="deviceid" required validate data-error-message="&nbsp;" placeholder="" autocomplete="off" autocorrect="off" autocapitalize="off" />
<input type="text" name="trackingcode" id="trackingcode" required validate data-error-message="&nbsp;" placeholder="" autocomplete="off" autocorrect="off" autocapitalize="off" />
<span class="input-clear-button"></span>
</div>
</div>
@ -37,20 +37,10 @@
</ul>
</div>
<div class="card-content-padding">
<div class="button" onclick="openTrackingInfoPage($('input[name=\'deviceid\']').val())"><i class="fal fa-search"></i> Track</div>
<div class="button" onclick="openTrackingInfoPage($('input[name=\'trackingcode\']').val())"><i class="far fa-search"></i> Track</div>
</div>
</div>
<div class="card-content padding-vertical display-none" id="client-link-account-message">
<div class="block">
<p>Don't like typing? Connect to your Netsyms billing account for one-click tracking.</p>
<a href="/linkaccount" class="button"><i class="far fa-link"></i> Link Account</a>
</div>
</div>
<div class="card-content display-none padding text-align-center" id="client-machine-suggestion-list-preloader">
<div class="preloader"></div>
</div>
<div class="card-content display-none" id="client-machine-suggestion-list">
<h4 class="block">Or <span class="taptext">tap</span><span class="clicktext">click</span> one of your devices:</h4>
<div class="card-content" id="tracking-suggestion-list">
<div class="list">
<ul>

@ -5,14 +5,14 @@
<div class="page" data-name="trackresult">
<div class="navbar">
<div class="navbar-inner text-color-white color-white">
<div class="navbar-inner">
<div class="left">
<a class="link back" href="#">
<i class="icon icon-back"></i>
<span class="if-not-md">Back</span>
</a>
</div>
<div class="title">Repair Status</div>
<div class="title">Track</div>
</div>
</div>
@ -22,19 +22,22 @@
<div class="col-100 medium-60 large-50 xlarge-40">
<div class="list transparent no-hairlines tablet-inset elevation-tablet">
<ul>
{{#js_if "this.info != []"}}
<li class="item-divider">Info</li>
{{#each info}}
<li>
<div class="item-content">
<div class="item-inner">
<div class="item-title" style="white-space: normal !important;">
<div class="item-header">{{@key}}</div>
{{this}}
<div class="item-header">{{label}}</div>
{{value}}
</div>
</div>
</div>
</li>
{{/each}}
{{/js_if}}
{{#js_if "this.events != []"}}
<li class="item-divider">Events</li>
{{#each events}}
<li>
@ -42,24 +45,19 @@
<div class="item-inner item-cell">
<div class="item-row">
<div class="item-cell">
<div class="item-title">
<b>{{title}}</b>
</div>
<div class="item-header">{{date}}</div>
<img src="{{icon}}" class="trackingeventicon" /> {{text}}
</div>
</div>
{{#if details}}
<div class="item-row">
<div class="item-cell" style="font-size: 90%;">
{{details}}
<div class="item-cell">
{{date}}
</div>
</div>
{{/if}}
</div>
</div>
</li>
{{/each}}
{{/js_if}}
</ul>
</div>
</div>

@ -15,35 +15,20 @@ var routes = [
context: {
pages: [
{
title: "Book Repair",
href: "/bookrepair",
icon: "fal fa-calendar-check"
title: "Schedule Pickup",
href: "/schedule",
icon: "fad fa-calendar-alt"
},
{
title: "Live Chat",
href: "/chat",
icon: "fal fa-comments"
},
{
title: "Repair Status",
title: "Track Package",
href: "/track",
icon: "fal fa-search"
},
{
title: "Pay Bill",
href: "/pay",
icon: "fal fa-file-invoice"
icon: "fad fa-search"
},
{
title: "Get Deals",
href: "/offers",
icon: "fal fa-badge-dollar"
},
{
title: "View Services",
href: "/services",
icon: "fal fa-magic"
},
title: "Check Rates",
href: "/rates",
icon: "fad fa-calculator"
}
]
}
});
@ -55,53 +40,36 @@ var routes = [
name: 'track',
on: {
pageBeforeIn: function () {
addClientMachineSuggestions();
$("#deviceid").val("0");
app.input.validate("#deviceid");
$("#deviceid").val("");
addTrackingSuggestions();
$("#trackingcode").val("0");
app.input.validate("#trackingcode");
$("#trackingcode").val("");
}
}
},
{
path: '/linkaccount',
url: './pages/linkaccount.html',
name: 'linkaccount',
routes: [
{
path: "/new",
url: "./pages/linkaccount_new.html",
name: "linkaccount_new",
options: {
transition: 'f7-parallax'
}
},
{
path: "/existing",
url: "./pages/linkaccount_existing.html",
name: "linkaccount_existing",
options: {
transition: 'f7-parallax'
path: '/addresscode',
name: 'addresscode',
async: function (routeTo, routeFrom, resolve, reject) {
resolve({
templateUrl: './pages/addresscode.html'
}, {
context: {
fields: [
{label: "Name", id: "name"},
{label: "Company", id: "company"},
{label: "Street", id: "street1"},
{label: "Street (line 2)", id: "street2"},
{label: "City", id: "city"},
{label: "State", id: "state"},
{label: "ZIP", id: "zip"}
]
}
}
]
},
{
path: '/offers',
name: 'offers',
async: openOffersAsync,
on: {
pageAfterIn: function () {
JsBarcode(".offerbarcode").init();
}
});
}
},
{
path: '/services',
name: 'services',
async: openServicesAsync
},
{
path: '/track/:id',
path: '/track/:code',
name: 'trackresult',
async: trackOpenAsync
},
@ -115,27 +83,6 @@ var routes = [
name: 'settings',
async: function (routeTo, routeFrom, resolve, reject) {
var settings = [];
if (!inStorage("client_uuid")) {
settings.push(
{
setting: "linkaccount",
title: "Link To Account",
text: "Connect to your Netsyms billing account to enable more features.",
onclick: "router.navigate('/linkaccount')",
link: true
}
);
} else {
settings.push(
{
setting: "linkaccount",
title: "Unlink Account",
text: "Disconnect this device from your Netsyms account.",
onclick: "unlinkAccount()",
link: true
}
);
}
settings.push(
{
setting: "display",
@ -149,8 +96,8 @@ var routes = [
settings.push(
{
setting: "versions",
title: "Netsyms PC Repair app v" + app_version,
text: "Copyright &copy; 2019-2020 Netsyms Technologies. Licensed under the Mozilla Public License 2.0.",
title: "Helena Express app v" + app_version,
text: "Copyright &copy; 2019-2021 Netsyms Technologies.",
onclick: ""
},
{
@ -164,7 +111,7 @@ var routes = [
setting: "privacy",
title: "Privacy policy and legal",
text: "",
onclick: "openBrowser('https://netsyms.com/legal?pk_campaign=PCRepairApp')",
onclick: "openBrowser('https://netsyms.com/legal?mtm_campaign=HelenaExpressApp')",
link: true
});
resolve({

@ -6,16 +6,12 @@
var SETTINGS = {
apis: {
track: "https://track.netsyms.com/public/api.php",
getmachines: "https://apis.netsyms.net/repairapp/getmachines.php",
offers_services: "https://apis.netsyms.net/repairapp/offers_services.php",
registernew: "https://apis.netsyms.net/repairapp/registernew.php",
registerexisting: "https://apis.netsyms.net/repairapp/registerexisting.php"
track: "https://helena.express/tracker/api.php"
},
branding: {
apptitle: "Netsyms PC Repair",
company: "Netsyms Technologies",
website: "https://netsyms.com"
apptitle: "Helena Express",
company: "Helena Express",
website: "https://helena.express"
},
maptileurls: {
liberty: {

Loading…
Cancel
Save