338 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			338 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*
 | |
|  * 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 routes = [
 | |
|     {
 | |
|         path: '/home',
 | |
|         name: 'home',
 | |
|         async: function (routeTo, routeFrom, resolve, reject) {
 | |
|             var total = countPackages();
 | |
|             var undelivered = countRemainingPackages();
 | |
|             var delivered = total - undelivered;
 | |
|             var percent = (total > 0 ? (delivered / total) : 1);
 | |
|             resolve({
 | |
|                 templateUrl: './pages/home.html'
 | |
|             }, {
 | |
|                 context: {
 | |
|                     packageTotal: total,
 | |
|                     packageLeft: undelivered,
 | |
|                     packageDelivered: delivered,
 | |
|                     packagePercent: percent
 | |
|                 }
 | |
|             });
 | |
|         }
 | |
|     },
 | |
|     {
 | |
|         path: '/manage',
 | |
|         templateUrl: './pages/manage.html',
 | |
|         options: {
 | |
|             context: {
 | |
|                 itemtypes: SETTINGS.itemtypes
 | |
|             }
 | |
|         },
 | |
|         name: 'manage',
 | |
|         on: {
 | |
|             pageAfterIn: function () {
 | |
|                 app.autocomplete.create({
 | |
|                     inputEl: '#streetInput',
 | |
|                     openIn: 'dropdown',
 | |
|                     /* If we set valueProperty to "id" then input value on select will be set according to this property */
 | |
|                     valueProperty: 'name', //object's "value" property name
 | |
|                     textProperty: 'name', //object's "text" property name
 | |
|                     limit: 10, //limit to 10 results
 | |
|                     typeahead: true,
 | |
|                     dropdownPlaceholderText: '',
 | |
|                     source: function (query, render) {
 | |
|                         var streets = searchAutofill(query, $("input[name=number]").val());
 | |
| 
 | |
|                         render(streets);
 | |
|                     }
 | |
|                 });
 | |
|             }
 | |
|         }
 | |
|     },
 | |
|     {
 | |
|         path: '/list',
 | |
|         templateUrl: './pages/list.html',
 | |
|         name: 'list',
 | |
|         on: {
 | |
|             pageAfterIn: function () {
 | |
|                 loadPackageList();
 | |
| 
 | |
|                 searchbar = app.searchbar.create({
 | |
|                     el: '.package-list-searchbar',
 | |
|                     searchContainer: '#addresslist',
 | |
|                     searchIn: '.item-title',
 | |
|                     backdrop: false,
 | |
|                     on: {
 | |
|                         search(sb, query, previousQuery) {
 | |
|                             console.log(query, previousQuery);
 | |
|                         }
 | |
|                     }
 | |
|                 });
 | |
|             }
 | |
|         },
 | |
|         keepAlive: true
 | |
|     },
 | |
|     {
 | |
|         path: '/map',
 | |
|         url: './pages/map.html',
 | |
|         name: 'map',
 | |
|         keepAlive: true,
 | |
|         on: {
 | |
|             pageAfterIn: function () {
 | |
|                 reloadMap();
 | |
|             }
 | |
|         }
 | |
|     },
 | |
|     {
 | |
|         path: '/toolbox',
 | |
|         url: './pages/toolbox.html',
 | |
|         name: 'toolbox',
 | |
|         routes: [
 | |
|             {
 | |
|                 path: '/scanner',
 | |
|                 templateUrl: './pages/toolbox/scanner.html',
 | |
|                 routes: [
 | |
|                     {
 | |
|                         path: '/scanner',
 | |
|                         templateUrl: './pages/toolbox/scanner/scanner.html',
 | |
|                         name: 'scanner'
 | |
|                     },
 | |
|                     {
 | |
|                         path: '/entries',
 | |
|                         name: 'entries',
 | |
|                         async: function (routeTo, routeFrom, resolve, reject) {
 | |
|                             if (localStorage.getItem("scanevents") != null && localStorage.getItem("scanevents") != "[]") {
 | |
|                                 var entries = JSON.parse(localStorage.getItem("scanevents"));
 | |
| 
 | |
|                                 for (i in entries) {
 | |
|                                     entries[i].event = entries[i].event.join(' <i class="fas fa-chevron-right"></i> ');
 | |
|                                 }
 | |
|                             } else {
 | |
|                                 var entries = false;
 | |
|                             }
 | |
| 
 | |
|                             resolve({
 | |
|                                 templateUrl: './pages/toolbox/scanner/entries.html'
 | |
|                             }, {
 | |
|                                 context: {
 | |
|                                     entries: entries
 | |
|                                 }
 | |
|                             });
 | |
|                         },
 | |
|                         on: {
 | |
|                             pageAfterIn: function () {
 | |
|                                 $(".barcode_entry").each(function () {
 | |
|                                     var code = $(this).data("barcode");
 | |
|                                     JsBarcode("#barcode_" + code, code, {
 | |
|                                         format: "code128",
 | |
|                                         ean128: true,
 | |
|                                         width: 2,
 | |
|                                         height: 40
 | |
|                                     });
 | |
|                                 });
 | |
|                             }
 | |
|                         }
 | |
|                     }
 | |
|                 ]
 | |
|             },
 | |
|             {
 | |
|                 path: '/track',
 | |
|                 url: './pages/toolbox/track.html',
 | |
|                 name: 'track',
 | |
|                 routes: [
 | |
|                     {
 | |
|                         path: '/info',
 | |
|                         templateUrl: './pages/toolbox/trackinginfo.html',
 | |
|                         name: 'trackinginfo'
 | |
|                     }
 | |
|                 ]
 | |
|             },
 | |
|             {
 | |
|                 path: '/weather',
 | |
|                 url: './pages/toolbox/weather.html',
 | |
|                 name: 'weather',
 | |
|                 on: {
 | |
|                     pageAfterIn: function () {
 | |
|                         loadWeather();
 | |
|                     }
 | |
|                 }
 | |
|             },
 | |
|             {
 | |
|                 path: '/sharelist',
 | |
|                 url: './pages/toolbox/sharelist.html',
 | |
|                 name: 'sharelist'
 | |
|             }
 | |
|         ]
 | |
|     },
 | |
|     {
 | |
|         path: '/credits',
 | |
|         url: './pages/credits.html',
 | |
|         name: 'credits'
 | |
|     },
 | |
|     {
 | |
|         path: '/settings',
 | |
|         name: 'settings',
 | |
|         async: function (routeTo, routeFrom, resolve, reject) {
 | |
|             var mapstyles = [];
 | |
|             for (var id in SETTINGS.maptileurls) {
 | |
|                 if (SETTINGS.maptileurls.hasOwnProperty(id)) {
 | |
|                     mapstyles.push({
 | |
|                         value: id,
 | |
|                         label: SETTINGS.maptileurls[id].name,
 | |
|                         selected: localStorage.getItem("mapsource") == id
 | |
|                     });
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             var settings = [
 | |
|                 {
 | |
|                     setting: "alerts",
 | |
|                     title: "Package Alerts",
 | |
|                     text: "Change the alert sound, volume, and distance.",
 | |
|                     onclick: "router.navigate('/settings/alerts')",
 | |
|                     link: true
 | |
|                 }
 | |
|             ];
 | |
| 
 | |
|             if (platform_type == "cordova" && cordova.platformId != "browser") {
 | |
|                 settings.push({
 | |
|                     setting: "wakelock",
 | |
|                     title: "Keep screen on",
 | |
|                     text: "Improves GPS accuracy and alert sound reliability, but uses more battery.",
 | |
|                     toggle: true,
 | |
|                     checked: localStorage.getItem("wakelock") == "true",
 | |
|                     onclick: ""
 | |
|                 });
 | |
|             }
 | |
| 
 | |
|             settings.push(
 | |
|                     {
 | |
|                         setting: "darktheme",
 | |
|                         title: "Use dark theme",
 | |
|                         text: "Saves power on phones with OLED screens.",
 | |
|                         toggle: true,
 | |
|                         checked: localStorage.getItem("darktheme") == "true",
 | |
|                         onclick: ""
 | |
|                     },
 | |
|                     {
 | |
|                         setting: "units",
 | |
|                         title: "Measurement units",
 | |
|                         select: true,
 | |
|                         options: [
 | |
|                             {
 | |
|                                 value: "metric",
 | |
|                                 label: "Meters/Kilometers",
 | |
|                                 selected: localStorage.getItem("units") == "metric"
 | |
|                             },
 | |
|                             {
 | |
|                                 value: "imperial",
 | |
|                                 label: "Feet/Miles",
 | |
|                                 selected: localStorage.getItem("units") == "imperial"
 | |
|                             }
 | |
|                         ]
 | |
|                     },
 | |
|                     {
 | |
|                         setting: "mapsource",
 | |
|                         title: "Map style",
 | |
|                         select: true,
 | |
|                         options: mapstyles,
 | |
|                         text: "Choose which map style to use."
 | |
|                     },
 | |
|                     {
 | |
|                         setting: "versions",
 | |
|                         title: "PackageHelper app v" + app_version,
 | |
|                         text: "Copyright © 2019 Netsyms Technologies.  Licensed under the Mozilla Public License 2.0.",
 | |
|                         onclick: ""
 | |
|                     },
 | |
|                     {
 | |
|                         setting: "opensource",
 | |
|                         title: "Credits and open source info",
 | |
|                         text: "",
 | |
|                         onclick: "router.navigate('/credits')",
 | |
|                         link: true
 | |
|                     },
 | |
|                     {
 | |
|                         setting: "privacy",
 | |
|                         title: "Privacy policy and legal",
 | |
|                         text: "",
 | |
|                         onclick: "openBrowser('https://netsyms.com/legal?pk_campaign=PackageHelpterApp')",
 | |
|                         link: true
 | |
|                     });
 | |
| 
 | |
|             resolve({
 | |
|                 templateUrl: './pages/settings.html'
 | |
|             }, {
 | |
|                 context: {
 | |
|                     settings: settings
 | |
|                 }
 | |
|             });
 | |
|         },
 | |
|         routes: [
 | |
|             {
 | |
|                 path: '/alerts',
 | |
|                 name: 'alertsettings',
 | |
|                 async: function (routeTo, routeFrom, resolve, reject) {
 | |
|                     var alertsounds = [];
 | |
|                     for (var id in SETTINGS.alertsounds) {
 | |
|                         if (SETTINGS.alertsounds.hasOwnProperty(id)) {
 | |
|                             alertsounds.push({
 | |
|                                 value: id,
 | |
|                                 label: SETTINGS.alertsounds[id].name,
 | |
|                                 selected: localStorage.getItem("alertsound") == id
 | |
|                             });
 | |
|                         }
 | |
|                     }
 | |
| 
 | |
|                     var settings = [{
 | |
|                             setting: "alertsound",
 | |
|                             title: "Alert sound",
 | |
|                             text: "Select which sound to play when a package is nearby.",
 | |
|                             select: true,
 | |
|                             options: alertsounds
 | |
|                         },
 | |
|                         {
 | |
|                             setting: "alertvolume",
 | |
|                             title: "Alert volume",
 | |
|                             min: 0,
 | |
|                             max: 100,
 | |
|                             step: 1,
 | |
|                             value: localStorage.getItem("alertvolume"),
 | |
|                             slider: true
 | |
|                         },
 | |
|                         {
 | |
|                             setting: "alertradius",
 | |
|                             title: "Alert radius (meters)",
 | |
|                             min: 50,
 | |
|                             max: 500,
 | |
|                             step: 50,
 | |
|                             value: localStorage.getItem("alertradius"),
 | |
|                             slider: true
 | |
|                         },
 | |
|                         {
 | |
|                             setting: "alertinterval",
 | |
|                             title: "Alert interval (seconds)",
 | |
|                             min: 15,
 | |
|                             max: 120,
 | |
|                             step: 15,
 | |
|                             value: localStorage.getItem("alertinterval") == null ? 30 : localStorage.getItem("alertinterval"),
 | |
|                             slider: true
 | |
|                         }];
 | |
| 
 | |
|                     resolve({
 | |
|                         templateUrl: './pages/alertsettings.html'
 | |
|                     }, {
 | |
|                         context: {
 | |
|                             settings: settings
 | |
|                         }
 | |
|                     });
 | |
|                 }
 | |
|             }
 | |
|         ]
 | |
|     }
 | |
| ];
 |