Compare commits

...

56 Commits

Author SHA1 Message Date
Skylar Ittner b631561620 Remove URL handler 5 months ago
Skylar Ittner 8dea193917 Don't throw errors in console if Matomo isn't loaded 5 months ago
Skylar Ittner 4c68c14293 Remove money stuff (bloat--) 5 months ago
Skylar Ittner 25c27cb405 Bump app version to 2.1.0 5 months ago
Skylar Ittner 2031639623 Add locations map, add kiosks, remove crypto/money orders, text tweaks 5 months ago
Skylar Ittner ee42e8aeb3 Bump version to 2.0.5 and fix iOS App Store nonsense 10 months ago
Skylar Ittner 06c691aef2 Adjustments 11 months ago
Skylar Ittner 3e87c8f9b5 Don't require camera autofocus or flash or gps 11 months ago
Skylar Ittner e7512b73e4 Don't require camera autofocus or flash or gps 11 months ago
Skylar Ittner ef73d0b0c2 Don't require camera autofocus or flash or gps 11 months ago
Skylar Ittner 7238a86898 Don't require camera autofocus or flash 11 months ago
Skylar Ittner f23fc2417d Change Drop and Send time warning to 3PM since Helena PO critical entry moved an hour earlier 11 months ago
Skylar Ittner e0a2e91b85 Remove labelmaker.js reference 11 months ago
Skylar Ittner 2f54dbe032 Hide PostalPoint from menu 11 months ago
Skylar Ittner 0244e9e333 Fix two Quick Send bugs 12 months ago
Skylar Ittner e9950a222d Add PostalPoint page 12 months ago
Skylar Ittner c5923625c3 Organize and update link handler code 12 months ago
Skylar Ittner f2463d021d Handle Helena Express deep links with the home page barcode scanner 12 months ago
Skylar Ittner ed1f4dddcf Handle opening tracking URLs in receipts 12 months ago
Skylar Ittner 8e64fdfe62 Text and URL adjustments, handle more website URLs 12 months ago
Skylar Ittner 89df54c1fe Add account number to quick send 12 months ago
Skylar Ittner 35fbcca41b New more better quick send 12 months ago
Skylar Ittner f25a2a07db Cache dynamic content for eight hours, not one 1 year ago
Skylar Ittner 78f4c4992f Remove loyalty info since nobody's ever cashed it in anyways 1 year ago
Skylar Ittner f5d9bef01a Add note that prepaid pickups may cost extra 1 year ago
Skylar Ittner 8034957b31 Update API endpoints to use apis.helena.express 1 year ago
Skylar Ittner 9b77b8e8a0 Remove regional rate options 1 year ago
Skylar Ittner 7c2ca1d16c Bump version to 2.0.4 1 year ago
Skylar Ittner d5e270ecfa Set country zoom level to 3 1 year ago
Skylar Ittner db909f5a27 Update copyright year 1 year ago
Skylar Ittner 5285f6445f Support country-level map zoom on tracking page 1 year ago
Skylar Ittner 148f38d9d9 Add "quick send" for customers to present address info at trailer 1 year ago
Skylar Ittner b56c8dbe3f Fetch dynamically-updating text from server, add FAQ to money order page 1 year ago
Skylar Ittner 03515d5ac4 Make splash background darker 2 years ago
Skylar Ittner 400bc22362 Improve splashscreen 2 years ago
Skylar Ittner a92593dd7a Improve splashscreen 2 years ago
Skylar Ittner 046ba92611 Improve splash 2 years ago
Skylar Ittner 950ea1fb0d Try something for the new splashscreen 2 years ago
Skylar Ittner b897c11241 Use numeric keyboard for money order serial 2 years ago
Skylar Ittner 7cafca1319 Fix sharing plugin not working on Android 12 2 years ago
Skylar Ittner 3a802beca5 Fix barcodescanner plugin not compiling for Android 12 2 years ago
Skylar Ittner 5f855f2095 Cordova update stuff (Android and splashscreen mostly) 2 years ago
Skylar Ittner 318fcfa929 Trim bloat 2 years ago
Skylar Ittner 6809cde65a Bump version: 2.0.2 -> 2.0.3 2 years ago
Skylar Ittner 325099841a Add money order verification 2 years ago
Skylar Ittner a1c176986d Add trailer info 2 years ago
Skylar Ittner 2211f74671 Fix not detecting empty package count 2 years ago
Skylar Ittner 10a8b3f23f Make prepaid checkbox work more better (text wraps, no hairline after) 2 years ago
Skylar Ittner ee8b225d7c Bump version to 2.0.2 2 years ago
Skylar Ittner 972025f808 Make address and ZIP boxes work better on mobile, improve text at bottom 2 years ago
Skylar Ittner 0ff5b13ec3 Add prepaid return label checkbox to package pickup form 2 years ago
Skylar Ittner adc8b1d07a Improve "Apple bad" dialog 2 years ago
Skylar Ittner e49e841543 Web: Allow navigating to a page on launch with URL argument 2 years ago
Skylar Ittner ebe76f23c0 Disable sending crypto on iOS per App Store review guideline 3.1.5 2 years ago
Skylar Ittner 70c100a8ac Bump version 2.0.0 -> 2.0.1 2 years ago
Skylar Ittner 8c17811c5f Add padding and background to crypto QR code, Fix #10 2 years ago

@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.netsyms.helenaexpress.app" version="2.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<widget id="com.netsyms.helenaexpress.app" version="2.1.0" xmlns="http://www.w3.org/ns/widgets" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name short="Helena Express">Helena Express</name>
<description>
</description>
@ -38,8 +38,11 @@
<preference name="StatusBarOverlaysWebView" value="false" />
<allow-intent href="market:*" />
<preference name="AndroidLaunchMode" value="singleTask" />
<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" />
<preference name="AndroidWindowSplashScreenAnimatedIcon" value="res/android/drawable/ic_splash_logo.xml" />
<preference name="AndroidWindowSplashScreenBackground" value="#82b1ff" />
<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/drawable/ic_splash_logo.xml" target="app/src/main/res/drawable/ic_splash_logo.xml" />
<resource-file src="res/android/mipmap-anydpi-v26/ic_launcher.xml" target="app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml" />
<icon background="res/android/drawable/ic_launcher_background.xml" density="mdpi" foreground="res/android/drawable/ic_launcher_foreground.xml" src="res/android/mipmap-mdpi/ic_launcher.png" />
<icon background="res/android/drawable/ic_launcher_background.xml" density="hdpi" foreground="res/android/drawable/ic_launcher_foreground.xml" src="res/android/mipmap-hdpi/ic_launcher.png" />
@ -47,30 +50,13 @@
<icon background="res/android/drawable/ic_launcher_background.xml" density="xxhdpi" foreground="res/android/drawable/ic_launcher_foreground.xml" src="res/android/mipmap-xxhdpi/ic_launcher.png" />
<icon background="res/android/drawable/ic_launcher_background.xml" density="xxxhdpi" foreground="res/android/drawable/ic_launcher_foreground.xml" src="res/android/mipmap-xxxhdpi/ic_launcher.png" />
<preference name="SplashMaintainAspectRatio" value="true" />
<splash density="land-hdpi" src="res/android/splash/splash-land-hdpi.png" />
<splash density="land-ldpi" src="res/android/splash/splash-land-ldpi.png" />
<splash density="land-mdpi" src="res/android/splash/splash-land-mdpi.png" />
<splash density="land-xhdpi" src="res/android/splash/splash-land-xhdpi.png" />
<splash density="land-xxhdpi" src="res/android/splash/splash-land-xxhdpi.png" />
<splash density="land-xxxhdpi" src="res/android/splash/splash-land-xxxhdpi.png" />
<splash density="port-hdpi" src="res/android/splash/splash-port-hdpi.png" />
<splash density="port-ldpi" src="res/android/splash/splash-port-ldpi.png" />
<splash density="port-mdpi" src="res/android/splash/splash-port-mdpi.png" />
<splash density="port-xhdpi" src="res/android/splash/splash-port-xhdpi.png" />
<splash density="port-xxhdpi" src="res/android/splash/splash-port-xxhdpi.png" />
<splash density="port-xxxhdpi" src="res/android/splash/splash-port-xxxhdpi.png" />
<splash density="land-night-hdpi" src="res/android/splash-dark/splash-land-hdpi.png" />
<splash density="land-night-ldpi" src="res/android/splash-dark/splash-land-ldpi.png" />
<splash density="land-night-mdpi" src="res/android/splash-dark/splash-land-mdpi.png" />
<splash density="land-night-xhdpi" src="res/android/splash-dark/splash-land-xhdpi.png" />
<splash density="land-night-xxhdpi" src="res/android/splash-dark/splash-land-xxhdpi.png" />
<splash density="land-night-xxxhdpi" src="res/android/splash-dark/splash-land-xxxhdpi.png" />
<splash density="port-night-hdpi" src="res/android/splash-dark/splash-port-hdpi.png" />
<splash density="port-night-ldpi" src="res/android/splash-dark/splash-port-ldpi.png" />
<splash density="port-night-mdpi" src="res/android/splash-dark/splash-port-mdpi.png" />
<splash density="port-night-xhdpi" src="res/android/splash-dark/splash-port-xhdpi.png" />
<splash density="port-night-xxhdpi" src="res/android/splash-dark/splash-port-xxhdpi.png" />
<splash density="port-night-xxxhdpi" src="res/android/splash-dark/splash-port-xxxhdpi.png" />
<preference name="AndroidXEnabled" value="true" />
<!-- Don't exclude devices with very cheap cameras like Kindle Fire tablets -->
<config-file target="AndroidManifest.xml" parent="/manifest">
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
<uses-feature android:name="android.hardware.camera.flash" android:required="false"/>
<uses-feature android:name="android.hardware.location.gps" android:required="false" />
</config-file>
</platform>
<platform name="ios">
<preference name="StatusBarOverlaysWebView" value="false" />
@ -86,6 +72,9 @@
<edit-config file="*-Info.plist" mode="merge" target="NSLocationWhenInUseUsageDescription">
<string>Your location is used to show your position on maps. It does not leave your device.</string>
</edit-config>
<edit-config file="*-Info.plist" mode="merge" target="NSLocationAlwaysAndWhenInUseUsageDescription">
<string>Your location is used to show your position on maps. It does not leave your device.</string>
</edit-config>
<config-file target="*-Info.plist" parent="ITSAppUsesNonExemptEncryption" mode="add">
<false/>
</config-file>

@ -3010,7 +3010,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
-----
The following software may be included in this product: cordova-plugin-camera, cordova-plugin-device, cordova-plugin-geolocation, cordova-plugin-inappbrowser, cordova-plugin-splashscreen, cordova-plugin-statusbar. A copy of the source code may be downloaded from https://github.com/apache/cordova-plugin-camera.git (cordova-plugin-camera), https://github.com/apache/cordova-plugin-device.git (cordova-plugin-device), https://github.com/apache/cordova-plugin-geolocation.git (cordova-plugin-geolocation), https://github.com/apache/cordova-plugin-inappbrowser.git (cordova-plugin-inappbrowser), https://github.com/apache/cordova-plugin-splashscreen.git (cordova-plugin-splashscreen), https://github.com/apache/cordova-plugin-statusbar (cordova-plugin-statusbar). This software contains the following license and notice below:
The following software may be included in this product: cordova-plugin-camera, cordova-plugin-device, cordova-plugin-geolocation, cordova-plugin-inappbrowser, cordova-plugin-statusbar. A copy of the source code may be downloaded from https://github.com/apache/cordova-plugin-camera.git (cordova-plugin-camera), https://github.com/apache/cordova-plugin-device.git (cordova-plugin-device), https://github.com/apache/cordova-plugin-geolocation.git (cordova-plugin-geolocation), https://github.com/apache/cordova-plugin-inappbrowser.git (cordova-plugin-inappbrowser), https://github.com/apache/cordova-plugin-statusbar.git (cordova-plugin-statusbar). This software contains the following license and notice below:
Apache License
Version 2.0, January 2004

@ -1,269 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
<!--
Generated file; DO NOT EDIT.
-->
<project name="PackageNotice" basedir="..">
<property file="nbproject/configs/${config}.properties" />
<scriptdef name="checkVersion" language="javascript">
<attribute name="first" />
<attribute name="property" />
<![CDATA[
var first = attributes.get("first");
if (first >= "3.0.0") {
project.setProperty(attributes.get("property"), true);
}
]]>
</scriptdef>
<scriptdef name="forDevice" language="javascript">
<![CDATA[
var dev = project.getProperty("device");
if (dev == "device") {
project.setProperty("build.for.device", true);
}
]]>
</scriptdef>
<target name="check-cordova-project">
<condition property="cordova.project">
<or>
<available file=".cordova"/>
<available file="hooks"/>
</or>
</condition>
</target>
<target name="upgrade-to-cordova-project" depends="check-cordova-project,check-cordova-version" unless="cordova.project">
<echo level="info" message="${cordova.command} -d create ${java.io.tmpdir}/nb_temp_project com.coolappz.${project.name} ${project.name}" />
<delete dir="${java.io.tmpdir}/nb_temp_project"/>
<exec executable="${cordova.command}" resolveexecutable="true" searchpath="true" failonerror="true" >
<env key="${cordova.path.key}" path="${cordova.path.value}:${android.sdk.home}/tools:${android.sdk.home}/platform-tools:${jdk.home}/bin:${ant.home}/bin:${jdk.home}/bin"/>
<env key="JAVA_HOME" path="${jdk.home}"/>
<arg value="-d"/>
<arg value="create"/>
<arg value="${java.io.tmpdir}/nb_temp_project"/>
<arg value="com.coolappz.${project.name}"/>
<arg value="${project.name}" />
</exec>
<copy todir="." overwrite="true" failonerror="false">
<fileset dir="${java.io.tmpdir}/nb_temp_project"/>
</copy>
<delete dir="${java.io.tmpdir}/nb_temp_project"/>
<delete dir="www"/>
<copy todir="www" failonerror="false" quiet="true" >
<fileset dir="${site.root}"/>
</copy>
</target>
<target name="create-hello-world" depends="check-cordova-version">
<echo level="info" message="${cordova.command} -d create www_nb_temp com.coolappz.${project.name} ${project.name}" />
<exec executable="${cordova.command}" resolveexecutable="true" searchpath="true" failonerror="true">
<env key="${cordova.path.key}" path="${cordova.path.value}:${android.sdk.home}/tools:${android.sdk.home}/platform-tools:${jdk.home}/bin:${ant.home}/bin:${jdk.home}/bin"/>
<env key="JAVA_HOME" path="${jdk.home}"/>
<arg value="-d"/>
<arg value="create"/>
<arg value="www_nb_temp"/>
<arg value="com.coolappz.${project.name}"/>
<arg value="${project.name}" />
</exec>
<delete dir="www"/>
<mkdir dir="www"/>
<move file="www_nb_temp/www" tofile="www"/>
<delete dir="www_nb_temp"/>
<delete file="www/config.xml"/>
</target>
<taskdef
classname="org.netbeans.modules.cordova.updatetask.ReadConfigTask"
classpath="${update.task.jar}"
name="readconfig"/>
<taskdef
classname="org.netbeans.modules.cordova.updatetask.PluginTask"
classpath="${update.task.jar}"
name="plugintask"/>
<target name="check-cordova-version">
<property environment="env"/>
<checkVersion first="${cordova.version}" property="cordova.ver.3"/>
<fail message="Cordova version 3 or greater required." unless="cordova.ver.3"/>
<readconfig/>
<forDevice/>
</target>
<target name="check-android-template">
<available file="platforms/android" property="android.generated.exists"/>
</target>
<target name="check-ios-template">
<available file="platforms/ios" property="ios.generated.exists"/>
</target>
<target name="create-android" depends="check-android-template,check-cordova-version,upgrade-to-cordova-project" unless="android.generated.exists">
<echo level="info" message="${cordova.command} -d platform add android"/>
<exec executable="${cordova.command}" resolveexecutable="true" searchpath="true" failonerror="true">
<env key="${cordova.path.key}" path="${cordova.path.value}:${android.sdk.home}/tools:${android.sdk.home}/platform-tools:${jdk.home}/bin:${ant.home}/bin:${jdk.home}/bin"/>
<env key="JAVA_HOME" path="${jdk.home}"/>
<arg value="-d"/>
<arg value="platform"/>
<arg value="add"/>
<arg value="android"/>
</exec>
</target>
<target name="create-ios" depends="check-ios-template,check-cordova-version,upgrade-to-cordova-project" unless="ios.generated.exists">
<echo level="info" message="${cordova.command} -d platform add ios"/>
<exec executable="${cordova.command}" resolveexecutable="true" searchpath="true" dir="." failonerror="true">
<env key="${cordova.path.key}" path="${cordova.path.value}:${android.sdk.home}/tools:${android.sdk.home}/platform-tools:${jdk.home}/bin:${ant.home}/bin:${jdk.home}/bin"/>
<env key="JAVA_HOME" path="${jdk.home}"/>
<arg value="-d"/>
<arg value="platform"/>
<arg value="add"/>
<arg value="ios"/>
</exec>
</target>
<target name="rebuild-ios" depends="clean-ios,build-ios"/>
<target name="build-ios" depends="create-ios,update-plugins,update-ios,build-ios-xcodebuild,build-ios-ipa"/>
<target name="build-ios-xcodebuild">
<property name="path" location="platforms/ios/build"/>
<exec executable="xcodebuild" dir="platforms/ios" failonerror="true">
<arg value="-project"/>
<arg value="${project.name}.xcodeproj"/>
<arg value="ARCHS=${ios.build.arch}"/>
<arg value="-target"/>
<arg value="${project.name}"/>
<arg value="-configuration"/>
<arg value="Release"/>
<arg value="-sdk"/>
<arg value="${ios.build.sdk}" />
<arg value="build"/>
<arg value="CONFIGURATION_BUILD_DIR=${path}"/>
</exec>
</target>
<target name="build-ios-ipa" if="build.for.device">
<exec executable="xcrun" dir="platforms/ios/build" failonerror="true">
<env key="CODESIGN_ALLOCATE" value="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate" />
<arg value="-sdk"/>
<arg value="${ios.build.sdk}" />
<arg value="PackageApplication"/>
<arg value="-v"/>
<arg value="${project.name}.app"/>
<arg value="-o"/>
<arg value="${basedir}/platforms/ios/build/${project.name}.ipa"/>
<arg value="--sign"/>
<arg value="${ios.certificate.name}"/>
<arg value="--embed"/>
<arg value="${ios.provisioning.profile}"/>
</exec>
<available file="${basedir}/platforms/ios/build/${project.name}.ipa" property="ipa.found"/>
<fail unless="ipa.found" message="PackageApplication failed."/>
</target>
<target name="sim-ios" depends="build-ios,ios-run-device,ios-run-simulator">
</target>
<target name="ios-run-device" if="build.for.device">
<echo>
Install "${basedir}/platforms/ios/build/${project.name}.ipa" through iTunes and run it.
</echo>
<exec executable="open" failonerror="true">
<arg value="${basedir}/platforms/ios/build/${project.name}.ipa"/>
</exec>
</target>
<target name="ios-run-simulator" unless="build.for.device">
<exec executable="killall" dir="platforms/ios/build">
<arg value="launchd_sim"/>
</exec>
<exec executable="${ios.sim.exec}" dir="platforms/ios/build">
<arg line="launch ${project.name}.app ${ios.device.args} --exit"/>
</exec>
</target>
<target name="update-plugins">
<plugintask/>
</target>
<target name="update-android">
<echo level="info" message="${cordova.command} prepare android"/>
<exec executable="${cordova.command}" resolveexecutable="true" searchpath="true" failonerror="true">
<env key="${cordova.path.key}" path="${cordova.path.value}:${android.sdk.home}/tools:${android.sdk.home}/platform-tools:${jdk.home}/bin:${ant.home}/bin:${jdk.home}/bin"/>
<env key="JAVA_HOME" path="${jdk.home}"/>
<arg value="prepare"/>
<arg value="android"/>
</exec>
</target>
<target name="update-ios">
<echo level="info" message="${cordova.command} prepare ios"/>
<exec executable="${cordova.command}" resolveexecutable="true" searchpath="true" failonerror="true">
<env key="${cordova.path.key}" path="${cordova.path.value}:${android.sdk.home}/tools:${android.sdk.home}/platform-tools:${jdk.home}/bin:${ant.home}/bin:${jdk.home}/bin"/>
<env key="JAVA_HOME" path="${jdk.home}"/>
<arg value="prepare"/>
<arg value="ios"/>
</exec>
</target>
<target name="rebuild-android" depends="clean-android,build-android"/>
<target name="build-android" depends="create-android,update-plugins">
<echo level="info" message="${cordova.command} -d build android"/>
<exec executable="${cordova.command}" resolveexecutable="true" searchpath="true" failonerror="true">
<env key="${cordova.path.key}" path="${cordova.path.value}:${android.sdk.home}/tools:${android.sdk.home}/platform-tools:${jdk.home}/bin:${ant.home}/bin:${jdk.home}/bin"/>
<env key="JAVA_HOME" path="${jdk.home}"/>
<arg value="-d"/>
<arg value="build"/>
<arg value="android"/>
</exec>
</target>
<target name="sim-android" depends="create-android,update-plugins">
<echo level="info" message="${cordova.command} -d ${android.target.device.arg} android"/>
<exec executable="${cordova.command}" resolveexecutable="true" searchpath="true" failonerror="true">
<env key="${cordova.path.key}" path="${cordova.path.value}:${android.sdk.home}/tools:${android.sdk.home}/platform-tools:${jdk.home}/bin:${ant.home}/bin:${jdk.home}/bin"/>
<env key="JAVA_HOME" path="${jdk.home}"/>
<arg value="-d"/>
<arg value="${android.target.device.arg}"/>
<arg value="android"/>
</exec>
</target>
<target name="clean-android" depends="check-android-template" if="android.generated.exists">
<exec executable="./gradlew" dir="platforms/android">
<arg value="clean" />
</exec>
</target>
<target name="clean-ios" depends="check-ios-template" if="ios.generated.exists">
<exec executable="platforms/ios/cordova/clean" />
</target>
</project>

@ -1,3 +0,0 @@
device=emulator
display.name=Android Emulator
type=android

@ -1,3 +0,0 @@
device=device
display.name=Android Device
type=android

@ -1,5 +0,0 @@
device=emulator
display.name=iPhone Simulator
ios.build.arch=i386
ios.build.sdk=
type=ios

@ -1,5 +0,0 @@
device=device
display.name=iPhone Device
ios.build.arch=armv7 armv7s
ios.build.sdk=
type=ios

@ -1,9 +0,0 @@
<#if licenseFirst??>
${licenseFirst}
</#if>
${licensePrefix}This Source Code Form is subject to the terms of the Mozilla Public
${licensePrefix}License, v. 2.0. If a copy of the MPL was not distributed with this
${licensePrefix}file, You can obtain one at http://mozilla.org/MPL/2.0/.
<#if licenseLast??>
${licenseLast}
</#if>

@ -1,48 +0,0 @@
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# This is a list of plugins installed in your project
# You can delete or add new plugins
#
# Format is following:
# id.of.plugin=url_of_repository
#
# Corresponding "id.of.plugin" can be found in the plugin's plugin.xml file:
# <plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" id="foo.bar.plugin" version="0.0.1">
#
# This list contains all core cordova plugins.
#
# For more information about plugins see http://cordova.apache.org/blog/releases/2013/07/23/cordova-3.html
#
cordova-plugin-device=https://git-wip-us.apache.org/repos/asf/cordova-plugin-device.git
cordova-plugin-network-information=https://git-wip-us.apache.org/repos/asf/cordova-plugin-network-information.git
cordova-plugin-battery-status=https://git-wip-us.apache.org/repos/asf/cordova-plugin-battery-status.git
cordova-plugin-device-motion=https://git-wip-us.apache.org/repos/asf/cordova-plugin-device-motion.git
cordova-plugin-device-orientation=https://git-wip-us.apache.org/repos/asf/cordova-plugin-device-orientation.git
cordova-plugin-geolocation=https://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation.git
cordova-plugin-camera=https://git-wip-us.apache.org/repos/asf/cordova-plugin-camera.git
cordova-plugin-media-capture=https://git-wip-us.apache.org/repos/asf/cordova-plugin-media-capture.git
cordova-plugin-media=https://git-wip-us.apache.org/repos/asf/cordova-plugin-media.git
cordova-plugin-file=https://git-wip-us.apache.org/repos/asf/cordova-plugin-file.git
cordova-plugin-file-transfer=https://git-wip-us.apache.org/repos/asf/cordova-plugin-file-transfer.git
cordova-plugin-dialogs=https://git-wip-us.apache.org/repos/asf/cordova-plugin-dialogs.git
cordova-plugin-vibration=https://git-wip-us.apache.org/repos/asf/cordova-plugin-vibration.git
cordova-plugin-contacts=https://git-wip-us.apache.org/repos/asf/cordova-plugin-contacts.git
cordova-plugin-globalization=https://git-wip-us.apache.org/repos/asf/cordova-plugin-globalization.git
cordova-plugin-splashscreen=https://git-wip-us.apache.org/repos/asf/cordova-plugin-splashscreen.git
cordova-plugin-console=https://git-wip-us.apache.org/repos/asf/cordova-plugin-console.git

@ -1,9 +1,4 @@
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.HelenaExpress-www=www
files.encoding=UTF-8
project.licensePath=./nbproject/license-mpl.txt
site.root.folder=${file.reference.HelenaExpress-www}
start.file=index.html
source.folder=

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

269
package-lock.json generated

@ -1,12 +1,12 @@
{
"name": "com.netsyms.helenaexpress.app",
"version": "1.9.4",
"version": "2.1.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "com.netsyms.helenaexpress.app",
"version": "1.9.4",
"version": "2.0.3",
"license": "MPL-2.0",
"dependencies": {
"cordova-plugin-device": "^2.1.0",
@ -15,22 +15,20 @@
"cordova-plugin-theme-detection": "^1.3.0"
},
"devDependencies": {
"cordova-android": "^10.1.2",
"cordova-android": "^11.0.0",
"cordova-browser": "^6.0.0",
"cordova-ios": "^6.2.0",
"cordova-plugin-add-swift-support": "^2.0.2",
"cordova-plugin-androidx": "^3.0.0",
"cordova-plugin-androidx-adapter": "^1.1.3",
"cordova-plugin-camera": "^6.0.0",
"cordova-plugin-geolocation": "^4.1.0",
"cordova-plugin-inappbrowser": "^5.0.0",
"cordova-plugin-nativestorage": "^2.3.2",
"cordova-plugin-splashscreen": "^6.0.1",
"cordova-plugin-velda-devicefeedback": "0.0.2",
"cordova-plugin-x-socialsharing": "^6.0.3",
"cordova-plugin-x-socialsharing-android12": "^6.0.5",
"cordova-webintent": "github:cordova-misc/cordova-webintent",
"es6-promise-plugin": "^4.2.2",
"ionic-plugin-deeplinks": "^1.0.23"
"ionic-plugin-deeplinks": "^1.0.23",
"phonegap-plugin-barcodescanner-android12": "^8.1.2"
}
},
"node_modules/@netflix/nerror": {
@ -99,9 +97,9 @@
}
},
"node_modules/android-versions": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/android-versions/-/android-versions-1.7.0.tgz",
"integrity": "sha512-TCy4b8Dk8YS6A23ZPfhSKqK66JHFq0D8avGYiwvYpjno6HrrcI0DRgHx9+jtkvWYmrsE2vQWgbHJhvGGhhOb0g==",
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/android-versions/-/android-versions-1.8.0.tgz",
"integrity": "sha512-2diLBcg3J4sGesUCl/3wkcHhTUOPDXptlXjj/m48yEC0TuVNaEfzgrXQYpqnqj1b5bId9HsAXvR9HaO/mHDcCw==",
"dev": true,
"dependencies": {
"semver": "^5.7.1"
@ -365,25 +363,25 @@
"dev": true
},
"node_modules/cordova-android": {
"version": "10.1.2",
"resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-10.1.2.tgz",
"integrity": "sha512-F28+NvgKO4ZhKFkqctCOh62mhVoNyUuRQh/F/nqp+Sti4ODv2rUa6UeW18khhdYTjlDeihHQsPqxvB7mI6fVYA==",
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-11.0.0.tgz",
"integrity": "sha512-ZhvSF5BYY8gmrAu1PtMPdHFsRoom/emT4OtTcecmh3Zj22900y4Golg5whhBPcYcTPC7BU6PG/EmG9BBHcX9tQ==",
"dev": true,
"dependencies": {
"android-versions": "^1.7.0",
"cordova-common": "^4.0.2",
"execa": "^5.1.1",
"fast-glob": "^3.2.7",
"fs-extra": "^10.0.0",
"fast-glob": "^3.2.11",
"fs-extra": "^10.1.0",
"is-path-inside": "^3.0.3",
"nopt": "^5.0.0",
"properties-parser": "^0.3.1",
"semver": "^7.3.5",
"semver": "^7.3.7",
"untildify": "^4.0.0",
"which": "^2.0.2"
},
"engines": {
"node": ">=12.0.0"
"node": ">=14.0.0"
}
},
"node_modules/cordova-android/node_modules/bplist-parser": {
@ -453,9 +451,9 @@
}
},
"node_modules/cordova-android/node_modules/fs-extra": {
"version": "10.0.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz",
"integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==",
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
"integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
"dev": true,
"dependencies": {
"graceful-fs": "^4.2.0",
@ -503,9 +501,9 @@
}
},
"node_modules/cordova-android/node_modules/semver": {
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
"version": "7.3.7",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
"integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
"dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
@ -848,22 +846,6 @@
"node": ">=6.0.0"
}
},
"node_modules/cordova-plugin-androidx": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cordova-plugin-androidx/-/cordova-plugin-androidx-3.0.0.tgz",
"integrity": "sha512-niMnhcxKsu4/oKTUbL0jRAnh6/cdoIVxRxJqj3uEyv8CVOlAj1sWhX+9b1XiAo9+bejAM9BbA21YK0mChfbVTA==",
"dev": true
},
"node_modules/cordova-plugin-androidx-adapter": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/cordova-plugin-androidx-adapter/-/cordova-plugin-androidx-adapter-1.1.3.tgz",
"integrity": "sha512-W1SImn0cCCvOSTSfWWp5TnanIQrSuh2Bch+dcZXIzEn0km3Qb7VryeAqHhgBQYwwzC5Ollk1DtUAk/AJSojuZA==",
"dev": true,
"dependencies": {
"q": "^1.5.1",
"recursive-readdir": "^2.2.2"
}
},
"node_modules/cordova-plugin-camera": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/cordova-plugin-camera/-/cordova-plugin-camera-6.0.0.tgz",
@ -964,26 +946,6 @@
"integrity": "sha512-olg/BzYRk0NGbKQ5f7rf21RYQEyJI19CCZn6RpVMO9/kbRRFqae/6ixjDNy81dXSu2TQ42brjBddGe1Qpn5ViA==",
"dev": true
},
"node_modules/cordova-plugin-splashscreen": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/cordova-plugin-splashscreen/-/cordova-plugin-splashscreen-6.0.1.tgz",
"integrity": "sha512-olJPBFRUuzunzeuB76TOBoq3yYlnhpWDk/S7ErR6MdqPz1KuK36omB9u4o//SdgfBbxHz+SsUtyvst68NrU3pA==",
"dev": true,
"engines": {
"cordovaDependencies": {
">=4.0.0": {
"cordova-android": ">=3.6.0",
"cordova-windows": ">=4.4.0"
},
"2.0.0": {
"cordova-android": ">=3.6.0"
},
"7.0.0": {
"cordova": ">100"
}
}
}
},
"node_modules/cordova-plugin-statusbar": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cordova-plugin-statusbar/-/cordova-plugin-statusbar-3.0.0.tgz",
@ -1016,10 +978,10 @@
}
]
},
"node_modules/cordova-plugin-x-socialsharing": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/cordova-plugin-x-socialsharing/-/cordova-plugin-x-socialsharing-6.0.3.tgz",
"integrity": "sha512-pnrE2CXsz4G0n0WoFDAasLS1VT3nIsNpddvXgfpiqX3wyOlSjO2NdF+sjYaTvs1B+f7z8EWbYCHpCrgBQiMLIg==",
"node_modules/cordova-plugin-x-socialsharing-android12": {
"version": "6.0.5",
"resolved": "https://registry.npmjs.org/cordova-plugin-x-socialsharing-android12/-/cordova-plugin-x-socialsharing-android12-6.0.5.tgz",
"integrity": "sha512-1NrHROIxrsjDHp+haL+68QsK4QoPcSNDwNC0JSvGXWqXsf1G8qZPulWs6M6m/FMcq5c5imG2C41H1ZT0B+Sxaw==",
"dev": true,
"engines": [
{
@ -1298,9 +1260,9 @@
]
},
"node_modules/fast-glob": {
"version": "3.2.7",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
"integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
"version": "3.2.11",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
"integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
"dev": true,
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
@ -1310,7 +1272,7 @@
"micromatch": "^4.0.4"
},
"engines": {
"node": ">=8"
"node": ">=8.6.0"
}
},
"node_modules/fast-json-parse": {
@ -2027,6 +1989,51 @@
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
"dev": true
},
"node_modules/phonegap-plugin-barcodescanner-android12": {
"version": "8.1.2",
"resolved": "https://registry.npmjs.org/phonegap-plugin-barcodescanner-android12/-/phonegap-plugin-barcodescanner-android12-8.1.2.tgz",
"integrity": "sha512-yZFKr22+gwQfZa+HIxCTpPeIs7PbwXnjnCiJFgDFtJM0sesISIEgLIOpjXzkQ42aWqlvGLDgYLwWQ923xEEEBA==",
"dev": true,
"dependencies": {
"nopt": "^4.0.1",
"shelljs": "^0.8.3"
},
"engines": {
"cordovaDependencies": {
"<7.0.0": {
"cordova-android": "<6.3.0"
},
"7.0.0": {
"cordova-android": ">=6.3.0"
},
"7.1.0": {
"cordova": ">=7.1.0",
"cordova-android": ">=6.3.0"
},
"8.0.0": {
"cordova": ">=7.1.0",
"cordova-android": ">=6.3.0"
}
}
}
},
"node_modules/phonegap-plugin-barcodescanner-android12/node_modules/shelljs": {
"version": "0.8.5",
"resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
"integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
"dev": true,
"dependencies": {
"glob": "^7.0.0",
"interpret": "^1.0.0",
"rechoir": "^0.6.2"
},
"bin": {
"shjs": "bin/shjs"
},
"engines": {
"node": ">=4"
}
},
"node_modules/picomatch": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
@ -2064,7 +2071,7 @@
"node_modules/properties-parser": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/properties-parser/-/properties-parser-0.3.1.tgz",
"integrity": "sha1-ExbpU5/7/ZOEXjabIRAiq9R4dxo=",
"integrity": "sha512-AkSQxQAviJ89x4FIxOyHGfO3uund0gvYo7lfD0E+Gp7gFQKrTNgtoYQklu8EhrfHVZUzTwKGZx2r/KDSfnljcA==",
"dev": true,
"dependencies": {
"string.prototype.codepointat": "^0.2.0"
@ -2163,18 +2170,6 @@
"node": ">= 0.10"
}
},
"node_modules/recursive-readdir": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz",
"integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==",
"dev": true,
"dependencies": {
"minimatch": "3.0.4"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/resolve": {
"version": "1.22.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
@ -2320,9 +2315,9 @@
}
},
"node_modules/signal-exit": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.4.tgz",
"integrity": "sha512-rqYhcAnZ6d/vTPGghdrw7iumdcbXpsk1b8IG/rz+VWV51DM0p7XCtMoJ3qhPLIbp3tvyt3pKRbaaEMZYpHto8Q==",
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
"dev": true
},
"node_modules/simctl": {
@ -2697,9 +2692,9 @@
}
},
"android-versions": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/android-versions/-/android-versions-1.7.0.tgz",
"integrity": "sha512-TCy4b8Dk8YS6A23ZPfhSKqK66JHFq0D8avGYiwvYpjno6HrrcI0DRgHx9+jtkvWYmrsE2vQWgbHJhvGGhhOb0g==",
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/android-versions/-/android-versions-1.8.0.tgz",
"integrity": "sha512-2diLBcg3J4sGesUCl/3wkcHhTUOPDXptlXjj/m48yEC0TuVNaEfzgrXQYpqnqj1b5bId9HsAXvR9HaO/mHDcCw==",
"dev": true,
"requires": {
"semver": "^5.7.1"
@ -2909,20 +2904,20 @@
"dev": true
},
"cordova-android": {
"version": "10.1.2",
"resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-10.1.2.tgz",
"integrity": "sha512-F28+NvgKO4ZhKFkqctCOh62mhVoNyUuRQh/F/nqp+Sti4ODv2rUa6UeW18khhdYTjlDeihHQsPqxvB7mI6fVYA==",
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-11.0.0.tgz",
"integrity": "sha512-ZhvSF5BYY8gmrAu1PtMPdHFsRoom/emT4OtTcecmh3Zj22900y4Golg5whhBPcYcTPC7BU6PG/EmG9BBHcX9tQ==",
"dev": true,
"requires": {
"android-versions": "^1.7.0",
"cordova-common": "^4.0.2",
"execa": "^5.1.1",
"fast-glob": "^3.2.7",
"fs-extra": "^10.0.0",
"fast-glob": "^3.2.11",
"fs-extra": "^10.1.0",
"is-path-inside": "^3.0.3",
"nopt": "^5.0.0",
"properties-parser": "^0.3.1",
"semver": "^7.3.5",
"semver": "^7.3.7",
"untildify": "^4.0.0",
"which": "^2.0.2"
},
@ -2984,9 +2979,9 @@
}
},
"fs-extra": {
"version": "10.0.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz",
"integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==",
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
"integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
"dev": true,
"requires": {
"graceful-fs": "^4.2.0",
@ -3020,9 +3015,9 @@
"dev": true
},
"semver": {
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
"version": "7.3.7",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
"integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
"dev": true,
"requires": {
"lru-cache": "^6.0.0"
@ -3278,22 +3273,6 @@
}
}
},
"cordova-plugin-androidx": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cordova-plugin-androidx/-/cordova-plugin-androidx-3.0.0.tgz",
"integrity": "sha512-niMnhcxKsu4/oKTUbL0jRAnh6/cdoIVxRxJqj3uEyv8CVOlAj1sWhX+9b1XiAo9+bejAM9BbA21YK0mChfbVTA==",
"dev": true
},
"cordova-plugin-androidx-adapter": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/cordova-plugin-androidx-adapter/-/cordova-plugin-androidx-adapter-1.1.3.tgz",
"integrity": "sha512-W1SImn0cCCvOSTSfWWp5TnanIQrSuh2Bch+dcZXIzEn0km3Qb7VryeAqHhgBQYwwzC5Ollk1DtUAk/AJSojuZA==",
"dev": true,
"requires": {
"q": "^1.5.1",
"recursive-readdir": "^2.2.2"
}
},
"cordova-plugin-camera": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/cordova-plugin-camera/-/cordova-plugin-camera-6.0.0.tgz",
@ -3328,12 +3307,6 @@
"integrity": "sha512-olg/BzYRk0NGbKQ5f7rf21RYQEyJI19CCZn6RpVMO9/kbRRFqae/6ixjDNy81dXSu2TQ42brjBddGe1Qpn5ViA==",
"dev": true
},
"cordova-plugin-splashscreen": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/cordova-plugin-splashscreen/-/cordova-plugin-splashscreen-6.0.1.tgz",
"integrity": "sha512-olJPBFRUuzunzeuB76TOBoq3yYlnhpWDk/S7ErR6MdqPz1KuK36omB9u4o//SdgfBbxHz+SsUtyvst68NrU3pA==",
"dev": true
},
"cordova-plugin-statusbar": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cordova-plugin-statusbar/-/cordova-plugin-statusbar-3.0.0.tgz",
@ -3350,10 +3323,10 @@
"integrity": "sha1-ZCnduHXMrCIEpAqA6juzLAovXRo=",
"dev": true
},
"cordova-plugin-x-socialsharing": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/cordova-plugin-x-socialsharing/-/cordova-plugin-x-socialsharing-6.0.3.tgz",
"integrity": "sha512-pnrE2CXsz4G0n0WoFDAasLS1VT3nIsNpddvXgfpiqX3wyOlSjO2NdF+sjYaTvs1B+f7z8EWbYCHpCrgBQiMLIg==",
"cordova-plugin-x-socialsharing-android12": {
"version": "6.0.5",
"resolved": "https://registry.npmjs.org/cordova-plugin-x-socialsharing-android12/-/cordova-plugin-x-socialsharing-android12-6.0.5.tgz",
"integrity": "sha512-1NrHROIxrsjDHp+haL+68QsK4QoPcSNDwNC0JSvGXWqXsf1G8qZPulWs6M6m/FMcq5c5imG2C41H1ZT0B+Sxaw==",
"dev": true
},
"cordova-serve": {
@ -3575,9 +3548,9 @@
"dev": true
},
"fast-glob": {
"version": "3.2.7",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
"integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
"version": "3.2.11",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
"integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
"dev": true,
"requires": {
"@nodelib/fs.stat": "^2.0.2",
@ -4139,6 +4112,29 @@
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
"dev": true
},
"phonegap-plugin-barcodescanner-android12": {
"version": "8.1.2",
"resolved": "https://registry.npmjs.org/phonegap-plugin-barcodescanner-android12/-/phonegap-plugin-barcodescanner-android12-8.1.2.tgz",
"integrity": "sha512-yZFKr22+gwQfZa+HIxCTpPeIs7PbwXnjnCiJFgDFtJM0sesISIEgLIOpjXzkQ42aWqlvGLDgYLwWQ923xEEEBA==",
"dev": true,
"requires": {
"nopt": "^4.0.1",
"shelljs": "^0.8.3"
},
"dependencies": {
"shelljs": {
"version": "0.8.5",
"resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
"integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
"dev": true,
"requires": {
"glob": "^7.0.0",
"interpret": "^1.0.0",
"rechoir": "^0.6.2"
}
}
}
},
"picomatch": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
@ -4164,7 +4160,7 @@
"properties-parser": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/properties-parser/-/properties-parser-0.3.1.tgz",
"integrity": "sha1-ExbpU5/7/ZOEXjabIRAiq9R4dxo=",
"integrity": "sha512-AkSQxQAviJ89x4FIxOyHGfO3uund0gvYo7lfD0E+Gp7gFQKrTNgtoYQklu8EhrfHVZUzTwKGZx2r/KDSfnljcA==",
"dev": true,
"requires": {
"string.prototype.codepointat": "^0.2.0"
@ -4237,15 +4233,6 @@
"resolve": "^1.1.6"
}
},
"recursive-readdir": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz",
"integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==",
"dev": true,
"requires": {
"minimatch": "3.0.4"
}
},
"resolve": {
"version": "1.22.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
@ -4362,9 +4349,9 @@
"dev": true
},
"signal-exit": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.4.tgz",
"integrity": "sha512-rqYhcAnZ6d/vTPGghdrw7iumdcbXpsk1b8IG/rz+VWV51DM0p7XCtMoJ3qhPLIbp3tvyt3pKRbaaEMZYpHto8Q==",
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
"dev": true
},
"simctl": {

@ -1,7 +1,7 @@
{
"name": "com.netsyms.helenaexpress.app",
"displayName": "Helena Express",
"version": "2.0.0",
"version": "2.1.0",
"description": "App to request and track shipping services",
"product_string": "Helena Express",
"main": "www/index.html",
@ -21,19 +21,14 @@
"license": "MPL-2.0",
"cordova": {
"plugins": {
"phonegap-plugin-barcodescanner": {},
"cordova-plugin-device": {},
"cordova-plugin-statusbar": {},
"cordova-plugin-headercolor": {},
"cordova-plugin-theme-detection": {},
"cordova-plugin-nativestorage": {},
"cordova-plugin-androidx": {},
"cordova-plugin-androidx-adapter": {},
"cordova-plugin-splashscreen": {},
"cordova-plugin-camera": {
"ANDROID_SUPPORT_V4_VERSION": "27.+"
},
"cordova-plugin-x-socialsharing": {},
"cordova-plugin-velda-devicefeedback": {},
"cordova-plugin-inappbrowser": {},
"ionic-plugin-deeplinks": {
@ -56,6 +51,13 @@
},
"cordova-plugin-geolocation": {
"GPS_REQUIRED": "false"
},
"phonegap-plugin-barcodescanner-android12": {
"ANDROID_SUPPORT_V4_VERSION": "27.+"
},
"cordova-plugin-x-socialsharing-android12": {
"PHOTO_LIBRARY_ADD_USAGE_DESCRIPTION": "This app requires photo library access to function properly.",
"PHOTO_LIBRARY_USAGE_DESCRIPTION": "This app requires photo library access to function properly."
}
},
"platforms": [
@ -71,21 +73,19 @@
"cordova-plugin-theme-detection": "^1.3.0"
},
"devDependencies": {
"cordova-android": "^10.1.2",
"cordova-android": "^11.0.0",
"cordova-browser": "^6.0.0",
"cordova-ios": "^6.2.0",
"cordova-plugin-add-swift-support": "^2.0.2",
"cordova-plugin-androidx": "^3.0.0",
"cordova-plugin-androidx-adapter": "^1.1.3",
"cordova-plugin-camera": "^6.0.0",
"cordova-plugin-geolocation": "^4.1.0",
"cordova-plugin-inappbrowser": "^5.0.0",
"cordova-plugin-nativestorage": "^2.3.2",
"cordova-plugin-splashscreen": "^6.0.1",
"cordova-plugin-velda-devicefeedback": "0.0.2",
"cordova-plugin-x-socialsharing": "^6.0.3",
"cordova-plugin-x-socialsharing-android12": "^6.0.5",
"cordova-webintent": "github:cordova-misc/cordova-webintent",
"es6-promise-plugin": "^4.2.2",
"ionic-plugin-deeplinks": "^1.0.23"
"ionic-plugin-deeplinks": "^1.0.23",
"phonegap-plugin-barcodescanner-android12": "^8.1.2"
}
}

@ -0,0 +1,29 @@
<vector xmlns:ns0="http://schemas.android.com/apk/res/android" ns0:name="svg1604" ns0:width="280.0dp" ns0:height="280.0dp" ns0:viewportWidth="1000.0" ns0:viewportHeight="999.999946007">
<group ns0:name="layer1">
<group ns0:name="g3063">
<group ns0:name="g2213">
<path ns0:name="path2187" ns0:pathData="M243.774589184 499.999966847C243.774589184 499.999966847 756.225397373 499.999966847 756.225397373 499.999966847C756.225397373 499.999966847 714.803119535 646.34345085 714.803119535 646.34345085C714.803119535 646.34345085 202.352250993 646.34345085 202.352250993 646.34345085C202.352250993 646.34345085 243.774589184 499.999966847 243.774589184 499.999966847" ns0:fillColor="#a5d6a7" ns0:fillAlpha="1.0" ns0:strokeWidth="0.0872651051858" ns0:strokeAlpha="1.0" ns0:strokeLineCap="butt" ns0:strokeLineJoin="miter" ns0:strokeMiterLimit="4"/>
<group ns0:name="g2204">
<path ns0:name="path2185" ns0:pathData="M285.196854952 353.656494914C285.196854952 353.656494914 797.647675212 353.656494914 797.647675212 353.656494914C797.647675212 353.656494914 756.225397373 499.999966847 756.225397373 499.999966847C756.225397373 499.999966847 243.774516761 499.999966847 243.774516761 499.999966847C243.774516761 499.999966847 285.196854952 353.656494914 285.196854952 353.656494914" ns0:fillColor="#d0f2fc" ns0:fillAlpha="1.0" ns0:strokeWidth="0.0872651051858" ns0:strokeAlpha="1.0" ns0:strokeLineCap="butt" ns0:strokeLineJoin="miter" ns0:strokeMiterLimit="4"/>
<group ns0:name="text2151">
<path ns0:name="path1675" ns0:pathData="M293.772156548 522.327920228C293.772156548 522.327920228 343.899808269 522.327920228 343.899808269 522.327920228C343.899808269 522.327920228 341.586221093 533.234818264 341.586221093 533.234818264C341.586221093 533.234818264 303.907860871 533.234818264 303.907860871 533.234818264C303.907860871 533.234818264 299.170518576 555.489292149 299.170518576 555.489292149C299.170518576 555.489292149 331.781032672 555.489292149 331.781032672 555.489292149C331.781032672 555.489292149 329.687793455 565.735158381 329.687793455 565.735158381C329.687793455 565.735158381 296.96710538 565.735158381 296.96710538 565.735158381C296.96710538 565.735158381 291.899259254 589.642205742 291.899259254 589.642205742C291.899259254 589.642205742 330.569155113 589.642205742 330.569155113 589.642205742C330.569155113 589.642205742 328.255573973 600.549097744 328.255573973 600.549097744C328.255573973 600.549097744 277.136386615 600.549097744 277.136386615 600.549097744C277.136386615 600.549097744 293.772156548 522.327920228 293.772156548 522.327920228" ns0:fillColor="#1b5e20" ns0:fillAlpha="1.0" ns0:strokeWidth="0.301863950494" ns0:strokeAlpha="1.0"/>
<path ns0:name="path1677" ns0:pathData="M362.420974554 571.794546179C362.420974554 571.794546179 348.649643587 542.929832706 348.649643587 542.929832706C348.649643587 542.929832706 361.209096994 542.929832706 361.209096994 542.929832706C361.209096994 542.929832706 370.022749779 562.650383528 370.022749779 562.650383528C370.022749779 562.650383528 370.573589498 564.523286857 370.573589498 564.523286857C370.573589498 564.523286857 371.895635002 562.650383528 371.895635002 562.650383528C371.895635002 562.650383528 389.08226276 542.929832706 389.08226276 542.929832706C389.08226276 542.929832706 401.641716167 542.929832706 401.641716167 542.929832706C401.641716167 542.929832706 375.64144166 571.794546179 375.64144166 571.794546179C375.64144166 571.794546179 389.63311455 600.549097744 389.63311455 600.549097744C389.63311455 600.549097744 376.963487163 600.549097744 376.963487163 600.549097744C376.963487163 600.549097744 368.039666435 580.938714866 368.039666435 580.938714866C368.039666435 580.938714866 367.378640666 579.175979481 367.378640666 579.175979481C367.378640666 579.175979481 366.166763106 580.938714866 366.166763106 580.938714866C366.166763106 580.938714866 348.869967404 600.549097744 348.869967404 600.549097744C348.869967404 600.549097744 336.200346052 600.549097744 336.200346052 600.549097744C336.200346052 600.549097744 362.420974554 571.794546179 362.420974554 571.794546179" ns0:fillColor="#1b5e20" ns0:fillAlpha="1.0" ns0:strokeWidth="0.301863950494" ns0:strokeAlpha="1.0"/>
<path ns0:name="path1679" ns0:pathData="M413.093032389 542.929832706C413.093032389 542.929832706 423.779588503 542.929832706 423.779588503 542.929832706C423.779588503 542.929832706 421.576175307 553.285878953 421.576175307 553.285878953C424.440610249 549.833861525 427.745729037 547.079594527 431.491531672 545.023077958C435.237334306 542.966557366 439.203478864 541.93829707 443.389965345 541.93829707C446.548189518 541.93829707 449.375901812 542.562598179 451.873102227 543.811200399C454.370306666 545.059802618 456.463549906 546.78580932 458.152831949 548.989220504C459.91556331 551.119186393 461.237610826 553.653111468 462.118974495 556.590995729C463.073787483 559.455434695 463.551193977 562.540213572 463.551193977 565.84533236C463.551193977 570.472498664 462.706552956 574.952772364 461.017270914 579.28615346C459.327984848 583.619530533 457.014399685 587.43877444 454.076515423 590.743885181C451.212080481 594.04900397 447.870237033 596.693099 444.050985079 598.676170273C440.305186468 600.659241546 436.339043922 601.650777183 432.152557441 601.650777183C427.745731049 601.650777183 424.11009837 600.549077626 421.245659404 598.345678512C418.454669758 596.142279398 416.471598485 593.277836409 415.296445585 589.752349545C415.296445585 589.752349545 408.025180227 624.015461258 408.025180227 624.015461258C408.025180227 624.015461258 395.906410666 624.015461258 395.906410666 624.015461258C395.906410666 624.015461258 413.093032389 542.929832706 413.093032389 542.929832706M430.389828091 591.294724901C433.107368418 591.294724901 435.714740801 590.596986542 438.211945239 589.201509825C440.709145655 587.806033108 442.875834191 586.006579098 444.712010849 583.803147796C446.621636826 581.599736612 448.127303616 579.102536197 449.22901122 576.311546551C450.330714801 573.447107585 450.881566591 570.582670631 450.881566591 567.718235689C450.881566591 565.588269801 450.587779372 563.605196516 450.000204933 561.769015835C449.412626472 559.859393881 448.531260791 558.206834487 447.356107891 556.811337652C446.254400287 555.415840818 444.895628112 554.314135225 443.279791366 553.506220876C441.66395462 552.698302503 439.86450061 552.294343316 437.881429337 552.294343316C436.412487206 552.294343316 434.83337512 552.588130535 433.144093078 553.175704974C431.528256331 553.763283435 429.912419585 554.571201808 428.296582839 555.599460093C426.754195412 556.627718377 425.321977941 557.839595937 423.999930426 559.235092772C422.677878887 560.557140287 421.649618591 562.026082418 420.915149537 563.641919164C420.915149537 563.641919164 417.610032761 578.73530167 417.610032761 578.73530167C418.271056518 582.26076037 419.739996637 585.235371303 422.016853118 587.659134469C424.293713622 590.082861424 427.084705279 591.294724901 430.389828091 591.294724901C430.389828091 591.294724901 430.389828091 591.294724901 430.389828091 591.294724901" ns0:fillColor="#1b5e20" ns0:fillAlpha="1.0" ns0:strokeWidth="0.301863950494" ns0:strokeAlpha="1.0"/>
<path ns0:name="path1681" ns0:pathData="M483.101761226 542.929832706C483.101761226 542.929832706 494.339163094 542.929832706 494.339163094 542.929832706C494.339163094 542.929832706 491.474730164 555.819802016 491.474730164 555.819802016C494.26571981 551.85365947 497.423943983 548.658710637 500.949402683 546.234955518C504.474865406 543.811200399 507.96360347 542.599322839 511.415616873 542.599322839C512.150069833 542.599322839 512.70092967 542.63603744 513.068196385 542.709466642C513.508852067 542.709466642 513.912813265 542.746181243 514.28007998 542.819610445C514.28007998 542.819610445 511.966456593 553.395992579 511.966456593 553.395992579C507.559638248 553.542891218 503.44660511 554.644598822 499.627357179 556.701115391C495.808109249 558.684186664 492.723330372 561.548623618 490.373020548 565.294426252C490.373020548 565.294426252 482.881419303 600.549037391 482.881419303 600.549037391C482.881419303 600.549037391 470.762643706 600.549037391 470.762643706 600.549037391C470.762643706 600.549037391 483.101761226 542.929832706 483.101761226 542.929832706" ns0:fillColor="#1b5e20" ns0:fillAlpha="1.0" ns0:strokeWidth="0.301863950494" ns0:strokeAlpha="1.0"/>
<path ns0:name="path1683" ns0:pathData="M536.626175403 601.650777183C532.953830135 601.650777183 529.685446065 601.026488144 526.821023193 599.777910065C524.030029524 598.529291752 521.642997052 596.839997639 519.659925779 594.710027727C517.676854506 592.506628614 516.171193751 589.935982902 515.142943514 586.998090594C514.114653041 583.98676506 513.600507805 580.755095591 513.600507805 577.303082187C513.600507805 572.602466564 514.481879521 568.122192864 516.244622953 563.862261087C518.080795587 559.60232931 520.577991979 555.856526676 523.736212128 552.624853183C526.967901715 549.393179691 530.750431021 546.822529956 535.083800047 544.912903979C539.490638509 542.929832706 544.227988851 541.93829707 549.295851072 541.93829707C555.245064891 541.93829707 559.982395115 543.297069245 563.507841744 546.014613595C567.10675781 548.658708626 568.906215843 552.588128524 568.906215843 557.802873289C568.906215843 569.848199566 558.146202363 575.870862704 536.626175403 575.870862704C533.467955253 575.870862704 529.905773906 575.760698784 525.93963136 575.540370943C525.93963136 575.540370943 525.93963136 577.523442216 525.93963136 577.523442216C525.93963136 579.653408105 526.196693919 581.636479378 526.710819038 583.472656035C527.224944156 585.308832693 527.996151952 586.924653345 529.024442425 588.320117992C530.052692662 589.715634944 531.374740177 590.817354618 532.990584971 591.625277015C534.606389529 592.359729975 536.516011482 592.726956454 538.719450831 592.726956454C541.877670981 592.726956454 544.92572721 591.955768776 547.863619518 590.41339342C550.801511827 588.797548627 553.115094979 586.630864114 554.804368974 583.913339881C554.804368974 583.913339881 564.389173225 586.887946791 564.389173225 586.887946791C562.993696507 589.091345905 561.267707911 591.111131779 559.211207437 592.947304413C557.228136164 594.710047845 555.024716932 596.252443319 552.600949742 597.574490834C550.177182552 598.823068912 547.606536841 599.814604549 544.889012609 600.549097744C542.171448141 601.283550703 539.417169072 601.650777183 536.626175403 601.650777183C536.626175403 601.650777183 536.626175403 601.650777183 536.626175403 601.650777183M547.753415363 550.862123833C545.109320332 550.862123833 542.68557326 551.339530328 540.482174146 552.294343316C538.278775032 553.175706985 536.33241836 554.387582533 534.64310413 555.92996996C532.953830135 557.47236141 531.521618699 559.27181542 530.346469822 561.328331989C529.171320946 563.311407285 528.21649991 565.404650526 527.482006716 567.60806171C530.860594941 567.828389551 533.98210049 567.938553471 536.846523361 567.938553471C540.739236705 567.938553471 544.007640893 567.71821356 546.651735923 567.277533737C549.295830954 566.763404595 551.425800866 566.102380837 553.041645659 565.294462464C554.730919654 564.413094772 555.906068531 563.384834475 556.567092288 562.209681575C557.301545248 560.961079356 557.668771728 559.602307181 557.668771728 558.13336505C557.668771728 555.636164635 556.787420129 553.799987977 555.024716932 552.624835078C553.2619735 551.449682178 550.83820631 550.862105728 547.753415363 550.862105728C547.753415363 550.862105728 547.753415363 550.862123833 547.753415363 550.862123833" ns0:fillColor="#1b5e20" ns0:fillAlpha="1.0" ns0:strokeWidth="0.301863950494" ns0:strokeAlpha="1.0"/>
<path ns0:name="path1685" ns0:pathData="M594.566100735 601.650777183C590.085833071 601.650777183 585.825893247 600.916304106 581.786281264 599.447357951C577.746709516 597.904982595 574.441590727 595.738298082 571.870924899 592.947304413C571.870924899 592.947304413 578.370978437 585.235367279 578.370978437 585.235367279C583.879536575 590.3032295 589.792035793 592.83716061 596.108476091 592.83716061C599.854290797 592.83716061 602.865612307 591.992503495 605.142440623 590.303189265C607.419309174 588.613915269 608.557743449 586.373787472 608.557743449 583.582805873C608.557743449 581.5997346 607.602942531 580.094069822 605.693340695 579.065811537C603.857168061 578.037553253 600.956010471 576.972570308 596.989867925 575.870862704C594.198874255 575.062944331 591.775107066 574.291748606 589.718566356 573.557275529C587.662065881 572.749357156 585.972791886 571.867993487 584.65074437 570.913184522C583.328696855 569.884922214 582.337161218 568.746491962 581.676137461 567.497893766C581.015113703 566.249291547 580.684601824 564.780349416 580.684601824 563.091067374C580.684601824 559.859393881 581.382340183 556.958232268 582.7778169 554.387582533C584.173333852 551.743487503 586.046241205 549.503351658 588.396538958 547.667175001C590.746836711 545.83099432 593.464381061 544.435499497 596.549172008 543.480690532C599.633922721 542.452428224 602.90230679 541.93829707 606.354324218 541.93829707C610.467365403 541.93829707 614.139730788 542.599320827 617.371420375 543.921368343C620.603069726 545.243419882 623.394063396 547.153045859 625.744401384 549.650246274C625.744401384 549.650246274 619.023999887 556.921505596 619.023999887 556.921505596C616.894029975 554.791539708 614.580426705 553.212427622 612.083190078 552.184169337C609.585993687 551.082461733 606.978633374 550.531607931 604.261109142 550.531607931C601.029419555 550.531607931 598.275160604 551.302803656 595.998332289 552.845195106C593.721463738 554.387582533 592.583029462 556.737890345 592.583029462 559.896118541C592.583029462 561.732295199 593.35421714 563.127790022 594.896592497 564.08260301C596.438967853 564.963966679 599.009613564 565.882055008 602.60852963 566.836867997C605.693320578 567.64478637 608.374150327 568.489427391 610.651018878 569.37079106C612.927847193 570.252158752 614.800734428 571.243694389 616.269680583 572.345397969C617.812096174 573.373660277 618.950530449 574.585537837 619.684983409 575.981030648C620.419476604 577.376527483 620.786723201 578.992364229 620.786723201 580.828540887C620.786723201 583.913319764 620.125699443 586.741024011 618.803651928 589.311653628C617.555033615 591.808890255 615.755575582 593.975594885 613.405277829 595.811767519C611.128409278 597.647940154 608.374130209 599.080151589 605.142440623 600.108401827C601.910791271 601.136652064 598.385344642 601.650777183 594.566100735 601.650777183C594.566100735 601.650777183 594.566100735 601.650777183 594.566100735 601.650777183" ns0:fillColor="#1b5e20" ns0:fillAlpha="1.0" ns0:strokeWidth="0.301863950494" ns0:strokeAlpha="1.0"/>
<path ns0:name="path1687" ns0:pathData="M650.262955067 601.650777183C645.782687403 601.650777183 641.522747579 600.916304106 637.483135596 599.447357951C633.443563848 597.904982595 630.13844506 595.738298082 627.567779231 592.947304413C627.567779231 592.947304413 634.067893122 585.235367279 634.067893122 585.235367279C639.576411024 590.3032295 645.488890125 592.83716061 651.805330424 592.83716061C655.551145129 592.83716061 658.562486757 591.992503495 660.839355308 590.303189265C663.116223859 588.613915269 664.254658134 586.373787472 664.254658134 583.582805873C664.254658134 581.5997346 663.299837098 580.094069822 661.390195027 579.065811537C659.554022393 578.037553253 656.652864803 576.972570308 652.686722257 575.870862704C649.895728588 575.062944331 647.471981515 574.291748606 645.415481041 573.557275529C643.35894033 572.749357156 641.669646218 571.867993487 640.347598702 570.913184522C639.025551187 569.884922214 638.034015551 568.746491962 637.372991793 567.497893766C636.711968035 566.249291547 636.381456156 564.780349416 636.381456156 563.091067374C636.381456156 559.859393881 637.079214633 556.958232268 638.474731585 554.387582533C639.870208302 551.743487503 641.743095537 549.503351658 644.09339329 547.667175001C646.443691043 545.83099432 649.161235393 544.435499497 652.24602634 543.480690532C655.330817288 542.452428224 658.599221475 541.93829707 662.051238903 541.93829707C666.164280088 541.93829707 669.836625356 542.599320827 673.068274707 543.921368343C676.299964293 545.243419882 679.090957963 547.153045859 681.441255716 549.650246274C681.441255716 549.650246274 674.720854219 556.921505596 674.720854219 556.921505596C672.590884307 554.791539708 670.277301155 553.212427622 667.780104763 552.184169337C665.282908371 551.082461733 662.675527942 550.531607931 659.957963474 550.531607931C656.726314123 550.531607931 653.972055172 551.302803656 651.695186621 552.845195106C649.41831807 554.387582533 648.279883794 556.737890345 648.279883794 559.896118541C648.279883794 561.732295199 649.051071473 563.127790022 650.593446829 564.08260301C652.13586242 564.963966679 654.706528249 565.882055008 658.305444315 566.836867997C661.390195027 567.64478637 664.071004659 568.489427391 666.34787321 569.37079106C668.624741761 570.252158752 670.497649113 571.243694389 671.966595268 572.345397969C673.508970624 573.373660277 674.647404899 574.585537837 675.381898094 575.981030648C676.116351054 577.376527483 676.483577533 578.992364229 676.483577533 580.828540887C676.483577533 583.913319764 675.822553776 586.741024011 674.50050626 589.311653628C673.251887947 591.808890255 671.452429914 593.975594885 669.102132161 595.811767519C666.82526361 597.647940154 664.071004659 599.080151589 660.839355308 600.108401827C657.607665721 601.136652064 654.082198974 601.650777183 650.262955067 601.650777183C650.262955067 601.650777183 650.262955067 601.650777183 650.262955067 601.650777183" ns0:fillColor="#1b5e20" ns0:fillAlpha="1.0" ns0:strokeWidth="0.301863950494" ns0:strokeAlpha="1.0"/>
</group>
<group ns0:name="text2193">
<path ns0:name="path1690" ns0:pathData="M351.208130227 388.268493913C351.208130227 388.268493913 363.657409655 388.268493913 363.657409655 388.268493913C363.657409655 388.268493913 356.716660199 420.989181988 356.716660199 420.989181988C356.716660199 420.989181988 393.293316841 420.989181988 393.293316841 420.989181988C393.293316841 420.989181988 400.234072332 388.268493913 400.234072332 388.268493913C400.234072332 388.268493913 412.573183816 388.268493913 412.573183816 388.268493913C412.573183816 388.268493913 395.937413884 466.489665394 395.937413884 466.489665394C395.937413884 466.489665394 383.598302399 466.489665394 383.598302399 466.489665394C383.598302399 466.489665394 390.979735701 432.006247969 390.979735701 432.006247969C390.979735701 432.006247969 354.403079059 432.006247969 354.403079059 432.006247969C354.403079059 432.006247969 347.021639722 466.489665394 347.021639722 466.489665394C347.021639722 466.489665394 334.572360294 466.489665394 334.572360294 466.489665394C334.572360294 466.489665394 351.208130227 388.268493913 351.208130227 388.268493913" ns0:fillColor="#0d47a1" ns0:fillAlpha="1.0" ns0:strokeWidth="0.301863950494" ns0:strokeAlpha="1.0"/>
<path ns0:name="path1692" ns0:pathData="M439.236644722 467.591368974C435.564287384 467.591368974 432.295891243 466.967069876 429.431456301 465.71847168C426.640462632 464.469869461 424.25343016 462.780585407 422.270358887 460.650619519C420.287287614 458.447204311 418.781622835 455.876554576 417.753364551 452.938670314C416.725106267 449.927340757 416.210977124 446.695669276 416.210977124 443.243655873C416.210977124 438.543040249 417.092340793 434.062766549 418.855068131 429.802834773C420.691248813 425.542902996 423.18845124 421.797100361 426.346675412 418.565426869C429.578348905 415.333753376 433.360874187 412.763105653 437.69425126 410.8534837C442.101077653 408.870408403 446.838415924 407.878870755 451.906266074 407.878870755C457.855483916 407.878870755 462.592822187 409.23764293 466.118280887 411.95518728C469.717188906 414.599282311 471.516642916 418.528702209 471.516642916 423.743446974C471.516642916 435.788773251 460.756643518 441.81143639 439.236644722 441.81143639C436.078416526 441.81143639 432.516231155 441.701272469 428.550088609 441.480944629C428.550088609 441.480944629 428.550088609 443.464015902 428.550088609 443.464015902C428.550088609 445.59398179 428.80715318 447.577053063 429.321282322 449.413229721C429.835411464 451.249406378 430.606607189 452.865243124 431.634869497 454.260739959C432.663127782 455.65623277 433.985175297 456.757938363 435.601012043 457.565856736C437.21684879 458.300329813 439.126472755 458.667566351 441.329883939 458.667566351C444.488108112 458.667566351 447.536162329 457.896370626 450.474046591 456.353979176C453.411930852 454.73814243 455.725516016 452.571453893 457.414802082 449.853913567C457.414802082 449.853913567 466.99964858 452.828520476 466.99964858 452.828520476C465.604151745 455.031931661 463.878145043 457.051727593 461.821628474 458.887908275C459.838557201 460.650639636 457.635144005 462.193029075 455.211388885 463.51507659C452.787633766 464.763674786 450.216984031 465.755210422 447.499439681 466.489683499C444.781899355 467.224152553 442.027634368 467.59138708 439.236644722 467.59138708C439.236644722 467.59138708 439.236644722 467.591368974 439.236644722 467.591368974M450.363878647 416.802697519C447.719783616 416.802697519 445.296028497 417.280104013 443.092613289 418.234917002C440.889202105 419.116280671 438.94285348 420.32815823 437.253567414 421.870549681C435.564285372 423.412937107 434.132067901 425.212391117 432.956915001 427.268911709C431.781762101 429.251982982 430.826949112 431.345224211 430.092476035 433.548635395C433.471044143 433.768963236 436.592545668 433.879127157 439.45698061 433.879127157C443.34967786 433.879127157 446.618076012 433.658785234 449.262175066 433.218101387C451.906270097 432.703972245 454.036235986 432.042948487 455.652072732 431.235030114C457.341354774 430.353662422 458.516507674 429.325402125 459.177531431 428.150249226C459.912000485 426.90165103 460.279235012 425.542880866 460.279235012 424.073938736C460.279235012 421.576734297 459.397871343 419.740555628 457.635144005 418.565402728C455.872412643 417.390249828 453.448657524 416.802673378 450.363878647 416.802673378C450.363878647 416.802673378 450.363878647 416.802697519 450.363878647 416.802697519" ns0:fillColor="#0d47a1" ns0:fillAlpha="1.0" ns0:strokeWidth="0.301863950494" ns0:strokeAlpha="1.0"/>
<path ns0:name="path1694" ns0:pathData="M490.015424359 467.371027051C486.636860274 467.371027051 484.029487892 466.563108678 482.193307211 464.947271932C480.430579873 463.331439209 479.549216203 461.017856057 479.549216203 458.006522476C479.549216203 457.418948038 479.585930804 456.831371588 479.659360006 456.243793126C479.732789208 455.582769369 479.842953129 454.921745611 479.989851768 454.260721853C479.989851768 454.260721853 494.422208504 386.065080717 494.422208504 386.065080717C494.422208504 386.065080717 506.430810121 386.065080717 506.430810121 386.065080717C506.430810121 386.065080717 492.990037303 449.853895461 492.990037303 449.853895461C492.769709463 450.661813834 492.659545542 451.396284899 492.659545542 452.057308657C492.659545542 453.526250788 493.063504729 454.66468104 493.871423102 455.472599413C494.752790794 456.280517786 495.927945706 456.684476973 497.396887837 456.684476973C498.204802186 456.684476973 499.159613163 456.537578334 500.261320767 456.243781056C501.363028371 455.949983778 502.428011315 455.619471899 503.4562696 455.252245419C503.4562696 455.252245419 503.015573683 464.726923973 503.015573683 464.726923973C501.105951729 465.534842346 498.939263193 466.159141444 496.515508074 466.599821267C494.091752954 467.113950409 491.925062406 467.37101498 490.015436429 467.37101498C490.015436429 467.37101498 490.015424359 467.371027051 490.015424359 467.371027051" ns0:fillColor="#0d47a1" ns0:fillAlpha="1.0" ns0:strokeWidth="0.301863950494" ns0:strokeAlpha="1.0"/>
<path ns0:name="path1696" ns0:pathData="M537.504609951 467.591368974C533.832224447 467.591368974 530.56382026 466.967069876 527.699397388 465.71847168C524.908403719 464.469869461 522.521371248 462.780585407 520.538299975 460.650619519C518.555228702 458.447204311 517.049567946 455.876554576 516.021317709 452.938670314C514.993067471 449.927340757 514.478942353 446.695669276 514.478942353 443.243655873C514.478942353 438.543040249 515.360293951 434.062766549 517.122997148 429.802834773C518.959210017 425.542902996 521.456426527 421.797100361 524.614646676 418.565426869C527.846296027 415.333753376 531.628825334 412.763105653 535.962234595 410.8534837C540.369032822 408.870408403 545.106363046 407.878870755 550.174225267 407.878870755C556.123439086 407.878870755 560.86076931 409.23764293 564.386215939 411.95518728C567.985132005 414.599282311 569.784590038 418.528702209 569.784590038 423.743446974C569.784590038 435.788773251 559.024596676 441.81143639 537.504609951 441.81143639C534.346389801 441.81143639 530.784208454 441.701272469 526.818065908 441.480944629C526.818065908 441.480944629 526.818065908 443.464015902 526.818065908 443.464015902C526.818065908 445.59398179 527.075128467 447.577053063 527.589253586 449.413229721C528.103378704 451.249406378 528.874566382 452.865243124 529.90281662 454.260739959C530.931066857 455.65623277 532.253114373 456.757938363 533.868959166 457.565856736C535.484803959 458.300329813 537.394425913 458.667566351 539.597825027 458.667566351C542.756045176 458.667566351 545.804101405 457.896370626 548.741993713 456.353979176C551.679886022 454.73814243 553.993469174 452.571453893 555.682743169 449.853913567C555.682743169 449.853913567 565.267607773 452.828520476 565.267607773 452.828520476C563.87209082 455.031931661 562.146082107 457.051727593 560.089581632 458.887908275C558.106510359 460.650639636 555.903091127 462.193029075 553.479323938 463.51507659C551.055596983 464.763674786 548.484951272 465.755210422 545.767386804 466.489683499C543.049862571 467.224152553 540.29560362 467.59138708 537.504609951 467.59138708C537.504609951 467.59138708 537.504609951 467.591368974 537.504609951 467.591368974M548.631849911 416.802697519C545.98775488 416.802697519 543.56398769 417.280104013 541.360548341 418.234917002C539.157149227 419.116280671 537.210812673 420.32815823 535.521538678 421.870549681C533.832264683 423.412937107 532.400033129 425.212391117 531.224844018 427.268911709C530.049695141 429.251982982 529.094894223 431.345224211 528.360441264 433.548635395C531.738989254 433.768963236 534.860494802 433.879127157 537.724957909 433.879127157C541.617631018 433.879127157 544.886015088 433.658785234 547.530110119 433.218101387C550.174205149 432.703972245 552.304175061 432.042948487 553.920019854 431.235030114C555.609293849 430.353662422 556.784442726 429.325402125 557.445466484 428.150249226C558.179959678 426.90165103 558.547206276 425.542880866 558.547206276 424.073938736C558.547206276 421.576734297 557.66583456 419.740555628 555.903091127 418.565402728C554.140347695 417.390249828 551.716600623 416.802673378 548.631849911 416.802673378C548.631849911 416.802673378 548.631849911 416.802697519 548.631849911 416.802697519" ns0:fillColor="#0d47a1" ns0:fillAlpha="1.0" ns0:strokeWidth="0.301863950494" ns0:strokeAlpha="1.0"/>
<path ns0:name="path1698" ns0:pathData="M587.8426816 408.870406392C587.8426816 408.870406392 598.749573601 408.870406392 598.749573601 408.870406392C598.749573601 408.870406392 596.325866764 420.438330198 596.325866764 420.438330198C599.190289636 416.545632948 602.825920303 413.497576719 607.232758766 411.294161511C611.639556993 409.017301007 616.266723297 407.878870755 621.114257677 407.878870755C623.537984631 407.878870755 625.557770505 408.209382634 627.173615299 408.870406392C628.789460092 409.531434173 630.074793006 410.486247161 631.029614042 411.734845357C632.057864279 412.909998257 632.792337356 414.30549308 633.233033273 415.921329826C633.673688955 417.537166572 633.894016796 419.336620582 633.894016796 421.319691855C633.894016796 422.862083305 633.747158392 424.477920052 633.453441584 426.167202094C633.232952803 427.856484136 632.939175642 429.582490838 632.572110103 431.345222199C632.572110103 431.345222199 625.190664731 466.489665394 625.190664731 466.489665394C625.190664731 466.489665394 613.071889135 466.489665394 613.071889135 466.489665394C613.071889135 466.489665394 619.902494787 434.209661165 619.902494787 434.209661165C620.196211595 432.81416433 620.416539436 431.565564122 620.56347831 430.463860542C620.710336714 429.288703619 620.783765915 428.186996015 620.783765915 427.15873773C620.783765915 421.503313142 618.433468163 418.675600848 613.732872657 418.675600848C612.117027864 418.675600848 610.427733751 419.006112727 608.664990319 419.667136484C606.902287122 420.328160242 605.176278408 421.282971219 603.486964178 422.531569415C601.797690183 423.706722315 600.181865507 425.138941797 598.639490151 426.828227863C597.170543997 428.444064609 595.958660402 430.243518619 595.003839366 432.226589892C595.003839366 432.226589892 587.622393994 466.489665394 587.622393994 466.489665394C587.622393994 466.489665394 575.503618398 466.489665394 575.503618398 466.489665394C575.503618398 466.489665394 587.8426816 408.870406392 587.8426816 408.870406392" ns0:fillColor="#0d47a1" ns0:fillAlpha="1.0" ns0:strokeWidth="0.301863950494" ns0:strokeAlpha="1.0"/>
<path ns0:name="path1700" ns0:pathData="M664.544291071 467.591368974C661.31264172 467.591368974 658.41148413 466.967069876 655.840818301 465.71847168C653.343621909 464.469869461 651.213651997 462.780585407 649.450908565 460.650619519C647.688205368 458.52065363 646.329443252 456.023451203 645.374622216 453.159012238C644.493230382 450.221127976 644.052534466 447.099626451 644.052534466 443.794507663C644.052534466 439.09389204 644.897191581 434.576895692 646.586505811 430.243518619C648.349209008 425.910137523 650.699506761 422.09088758 653.637399069 418.785768792C656.575291378 415.480650004 659.953859486 412.836554973 663.773103393 410.8534837C667.5923473 408.870408403 671.595224564 407.878870755 675.781735186 407.878870755C679.968205573 407.878870755 683.456937601 409.017301007 686.247931271 411.294161511C689.112354143 413.497576719 691.132140017 416.325291025 692.307288893 419.777304428C692.307288893 419.777304428 694.62091228 408.980580371 694.62091228 408.980580371C694.62091228 408.980580371 706.849831679 408.980580371 706.849831679 408.980580371C706.849831679 408.980580371 697.595519189 452.167476601 697.595519189 452.167476601C697.521888812 452.534703081 697.44845961 452.86521496 697.375231584 453.159012238C697.375231584 453.379340078 697.375231584 453.599682002 697.375231584 453.820038007C697.375231584 455.288980138 698.219868581 456.060173851 699.909142576 456.133619147C699.909142576 456.133619147 697.705723345 466.489665394 697.705723345 466.489665394C696.677473108 466.636564033 695.72267219 466.746727953 694.841320591 466.820157155C694.033398195 466.967055794 693.335639718 467.040505113 692.748045163 467.040505113C687.97398022 467.040505113 685.586947749 465.130881148 685.586947749 461.311633217C685.586947749 460.136476294 685.844010308 458.373744932 686.358135427 456.023439133C683.567141757 459.769241767 680.188573649 462.633678721 676.222431103 464.616749994C672.256288557 466.599821267 668.363595331 467.591356904 664.544351424 467.591356904C664.544351424 467.591356904 664.544291071 467.591368974 664.544291071 467.591368974M669.832521367 457.235328763C671.301427287 457.235328763 672.843802643 456.941539532 674.459647436 456.35396107C676.148921431 455.766386632 677.764766224 454.958468259 679.307181816 453.930205951C680.923026609 452.901947666 682.391972763 451.690072119 683.714020278 450.294579307C685.036067794 448.899082472 686.101032632 447.393415682 686.908914794 445.777578936C686.908914794 445.777578936 689.993725859 430.684202465 689.993725859 430.684202465C689.773237077 428.921471104 689.259111958 427.305634357 688.451350503 425.836692227C687.716857308 424.294300776 686.762036272 422.972253261 685.586887396 421.870549681C684.411738519 420.695392757 683.126425723 419.814027076 681.730949005 419.226452638C680.335432053 418.56542888 678.866485899 418.234917002 677.324110543 418.234917002C674.533116873 418.234917002 671.889021842 418.932663407 669.391825451 420.328156219C666.968058261 421.723653053 664.80135363 423.523107063 662.891711559 425.726518247C661.055538925 427.929933455 659.586612888 430.46385853 658.484933449 433.328293472C657.383213775 436.119283118 656.832353937 438.946997424 656.832353937 441.81143639C656.832353937 444.014847574 657.126151215 446.071366155 657.713745771 447.980992132C658.301300092 449.81716879 659.145937089 451.433005536 660.247656764 452.828502371C661.42280564 454.150549886 662.818302475 455.21553283 664.434147268 456.023451203C666.049951826 456.831369576 667.849409859 457.235328763 669.832521367 457.235328763C669.832521367 457.235328763 669.832521367 457.235328763 669.832521367 457.235328763" ns0:fillColor="#0d47a1" ns0:fillAlpha="1.0" ns0:strokeWidth="0.301863950494" ns0:strokeAlpha="1.0"/>
</group>
</group>
</group>
</group>
</group>
</vector>

@ -10,7 +10,7 @@ DIR="$(pwd)/www/node_modules"
cd $DIR
rm -rf {buffer-from,concat-stream,csscolorparser,dom7,earcut,geojson-vt,gl-matrix,get-stream}
rm -rf {grid-index,htm,ieee754,inherits,kdbush,@mapbox,minimist,murmurhash-js,path-to-regexp,pbf}
rm -rf {grid-index,htm,ieee754,inherits,kdbush,@mapbox,mapbox-gl,minimist,murmurhash-js,path-to-regexp,pbf}
rm -rf {potpack,protocol-buffers-schema,quickselect,readable-stream,resolve-protobuf-schema,rw}
rm -rf {safe-buffer,skeleton-elements,ssr-window,string_decoder,supercluster,swiper,text-encoding,tinyqueue}
rm -rf {ts-custom-error,typedarray,util-deprecate,vt-pbf}

@ -63,6 +63,18 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
background-color: rgba(0,0,0,0.95);
}
.hidden-light {
display: none;
}
.dark .hidden-dark {
display: none;
}
.dark .hidden-light {
display: initial;
}
.navbar, .navbar-bg, .subnavbar, .subnavbar *, .subnavbar .searchbar-inner .searchbar-input-wrap * {
background-color: var(--solid-translucent-color);
}
@ -199,4 +211,18 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
max-height: 40vh;
max-width: 90%;
height: 50rem;
}
dl {
margin-left: 1rem;
margin-right: 1rem;
}
dt {
font-weight: 700;
}
dd {
margin-left: 1rem;
margin-bottom: .5rem;
}

@ -57,6 +57,10 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
:root {
--location-map-height: calc(100vh - calc(var(--f7-navbar-height) + var(--f7-toolbar-height)));
}
.md, .aurora {
--service-area-map-height: calc(100vh - calc(var(--f7-navbar-height) + var(--f7-toolbar-height)));
}
@ -70,6 +74,22 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
height: var(--service-area-map-height);
}
#mapbox-locations {
width: 100%;
height: var(--location-map-height);
}
#locationInfoModal .sheet-modal-inner {
overflow-y: auto;
}
#locationInfoModalContainer {
margin-top: 1em;
}
#mapbox-locations.sheet-open {
height: calc(var(--location-map-height) - var(--f7-sheet-height));
}
/*
@ -104,6 +124,18 @@ html.md #track-page-tabbar .tabbar-label {
}
}
/*
Crypto
*/
#paymentRequestQRCodeContainer img {
padding: 2em;
background-color: white;
max-width: 100%;
}
/*
Map
@ -133,6 +165,16 @@ html.md #track-page-tabbar .tabbar-label {
background-size: contain;
}
/*
Request Pickup
*/
.item-inner.no-line-after:after {
height: 0px;
}
/*
Signature box

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 896 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.5 KiB

@ -0,0 +1,90 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="81.953mm" height="17.496mm" version="1.1" viewBox="0 0 81.953 17.496" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<defs>
<clipPath id="clipPath965">
<rect x="73.099" y="121.75" width="66.791" height=".70158" fill="#2196f3" style="paint-order:normal"/>
</clipPath>
</defs>
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<g transform="translate(-49.738 -106.82)">
<g transform="translate(-7.3027 -5.9991)">
<g stroke-width=".26458px">
<g aria-label="PostalPoint">
<path d="m78.763 117.96q0.71118 0 1.2756 0.15804 0.57572 0.14675 0.97082 0.44026 0.3951 0.28221 0.60958 0.69989 0.21448 0.41768 0.21448 0.93696 0 0.84664-0.32737 1.4336-0.32737 0.58701-0.90309 0.94824-0.57572 0.36124-1.3546 0.51928t-1.6933 0.15804h-0.44026l-0.63216 2.619h-1.7497l1.84-7.7101q0.60958-0.11289 1.1514-0.15804 0.55314-0.0452 1.0386-0.0452zm-0.14675 1.4788q-0.19191 0-0.32737 0.0113-0.13546 0.0113-0.27093 0.0226l-0.54185 2.3029h0.44026q0.47412 0 0.85794-0.0677 0.3951-0.079 0.66603-0.24835 0.28222-0.16933 0.42897-0.42897 0.15804-0.27092 0.15804-0.65474 0-0.50798-0.37252-0.72247-0.36124-0.21448-1.0386-0.21448z"/>
<path d="m84.728 126.03q-0.5983 0-1.0386-0.18062-0.44026-0.18062-0.73376-0.50799-0.28222-0.32737-0.42897-0.76762-0.14675-0.45155-0.14675-0.9934 0-0.67732 0.21448-1.3546 0.22577-0.67732 0.65474-1.2192 0.42897-0.54186 1.0498-0.88052 0.62087-0.34994 1.4224-0.34994 0.58701 0 1.0273 0.18062 0.45154 0.18061 0.73376 0.50798 0.2935 0.32737 0.44026 0.77892 0.14675 0.44025 0.14675 0.98211 0 0.67731-0.21448 1.3546-0.21448 0.67732-0.63216 1.2192-0.41768 0.54185-1.0498 0.8918-0.62087 0.33866-1.4449 0.33866zm0.83536-4.8315q-0.37252 0-0.65474 0.21449-0.28222 0.21448-0.47412 0.54185-0.19191 0.32737-0.2935 0.72247-0.09031 0.38381-0.09031 0.73376 0 0.57572 0.18062 0.8918 0.18062 0.30479 0.65474 0.30479 0.37252 0 0.65474-0.21448t0.47412-0.54185q0.19191-0.32737 0.28222-0.71119 0.1016-0.3951 0.1016-0.74504 0-0.57572-0.18062-0.88052-0.18062-0.31608-0.65474-0.31608z"/>
<path d="m90.718 124.67q0.57572 0 0.7902-0.15804 0.21448-0.16933 0.21448-0.36123 0-0.12418-0.04515-0.21449-0.03387-0.0903-0.12417-0.16932-0.09031-0.079-0.24835-0.15805-0.15804-0.0903-0.40639-0.20319-0.28222-0.12417-0.53056-0.25964-0.24835-0.14675-0.44026-0.33866-0.18062-0.20319-0.2935-0.45154-0.1016-0.25964-0.1016-0.60959 0-0.91437 0.66603-1.4449 0.67732-0.53056 1.9642-0.53056 0.60958 0 1.0837 0.13546 0.47412 0.13546 0.76762 0.29351l-0.57572 1.253q-0.23706-0.12417-0.60958-0.23706t-0.73376-0.11289q-0.15804 0-0.31608 0.0226-0.14675 0.0113-0.28222 0.0677-0.12418 0.0564-0.2032 0.15804-0.07902 0.1016-0.07902 0.27093 0 0.22577 0.16933 0.33866 0.18062 0.11288 0.4967 0.27092 0.44026 0.21449 0.73376 0.39511 0.2935 0.18061 0.46283 0.38381 0.18062 0.20319 0.25964 0.46283 0.07902 0.25964 0.07902 0.60959 0 0.36123-0.15804 0.71118-0.14675 0.34995-0.47412 0.62087-0.32737 0.27093-0.83536 0.44026-0.50799 0.16933-1.2192 0.16933-0.44026 0-0.80149-0.0564-0.34995-0.0564-0.62087-0.13546-0.27093-0.0903-0.46283-0.18062-0.18062-0.0903-0.28222-0.14675l0.57572-1.2869q0.19191 0.11289 0.5983 0.28221 0.40639 0.16933 0.98211 0.16933z"/>
<path d="m96.112 118.45 1.7497-0.27093-0.42897 1.7497h1.8739l-0.33866 1.3772h-1.8626l-0.4967 2.0771q-0.06773 0.25964-0.09031 0.48541-0.01129 0.22577 0.05644 0.3951 0.07902 0.15804 0.25964 0.24835 0.18062 0.0903 0.4967 0.0903 0.27093 0 0.51928-0.0451 0.25964-0.0564 0.51928-0.14675l0.12418 1.2869q-0.33866 0.12417-0.73376 0.21448-0.3951 0.0903-0.93696 0.0903-0.77891 0-1.2079-0.22577-0.42897-0.23706-0.60958-0.63216-0.18062-0.40639-0.15804-0.92567 0.02258-0.51928 0.15804-1.095z"/>
<path d="m104.8 123.31q-0.15804 0.64345-0.0903 1.2982 0.0677 0.64345 0.25963 1.1514l-1.5014 0.21448q-0.0677-0.13546-0.12418-0.25963-0.0564-0.12418-0.11288-0.28222-0.31608 0.25964-0.6999 0.42897-0.38381 0.16933-0.85793 0.16933-0.56443 0-0.97082-0.19191-0.3951-0.20319-0.65474-0.53056-0.24835-0.33866-0.36124-0.77892-0.11289-0.45154-0.11289-0.95953 0-0.77891 0.27093-1.4675 0.28222-0.6886 0.76762-1.1966 0.4967-0.51928 1.1627-0.81278t1.4449-0.2935q0.1016 0 0.34995 0.0113 0.25963 0.0113 0.587 0.0564 0.32737 0.0339 0.68861 0.12417 0.36123 0.0903 0.6886 0.24835zm-1.174-2.0771q-0.14675-0.0226-0.27093-0.0339-0.11288-0.0113-0.28221-0.0113-0.38382 0-0.72247 0.19191-0.32737 0.19191-0.57572 0.50799-0.24835 0.30479-0.3951 0.71118-0.13547 0.40639-0.13547 0.84665 0 0.54185 0.18062 0.85793t0.66603 0.31608q0.25964 0 0.46283-0.1016 0.21448-0.10159 0.45155-0.33865 0.0226-0.28222 0.0677-0.58701 0.0564-0.31608 0.11288-0.57572z"/>
<path d="m108.6 125.98q-0.80149 0-1.2643-0.20319-0.45155-0.21449-0.65474-0.57572-0.19191-0.36124-0.19191-0.82407 0.0113-0.47412 0.13546-1.0047l1.4337-5.9942 1.7497-0.27092-1.5691 6.5022q-0.0451 0.2032-0.0564 0.37253 0 0.16933 0.0677 0.30479 0.0677 0.12418 0.22578 0.2032 0.16932 0.079 0.46283 0.10159z"/>
<path d="m114.04 117.96q0.71119 0 1.2756 0.15804 0.57571 0.14675 0.97082 0.44026 0.3951 0.28221 0.60958 0.69989t0.21448 0.93696q0 0.84664-0.32737 1.4336-0.32736 0.58701-0.90308 0.94824-0.57572 0.36124-1.3546 0.51928-0.77891 0.15804-1.6933 0.15804h-0.44025l-0.63217 2.619h-1.7497l1.84-7.7101q0.60959-0.11289 1.1514-0.15804 0.55314-0.0452 1.0386-0.0452zm-0.14675 1.4788q-0.1919 0-0.32737 0.0113-0.13546 0.0113-0.27092 0.0226l-0.54186 2.3029h0.44026q0.47412 0 0.85793-0.0677 0.3951-0.079 0.66603-0.24835 0.28221-0.16933 0.42897-0.42897 0.15804-0.27092 0.15804-0.65474 0-0.50798-0.37253-0.72247-0.36123-0.21448-1.0386-0.21448z"/>
<path d="m120 126.03q-0.59829 0-1.0386-0.18062t-0.73376-0.50799q-0.28221-0.32737-0.42897-0.76762-0.14675-0.45155-0.14675-0.9934 0-0.67732 0.21448-1.3546 0.22578-0.67732 0.65474-1.2192 0.42897-0.54186 1.0498-0.88052 0.62088-0.34994 1.4224-0.34994 0.58701 0 1.0273 0.18062 0.45155 0.18061 0.73376 0.50798 0.29351 0.32737 0.44026 0.77892 0.14675 0.44025 0.14675 0.98211 0 0.67731-0.21448 1.3546-0.21449 0.67732-0.63217 1.2192-0.41767 0.54185-1.0498 0.8918-0.62087 0.33866-1.4449 0.33866zm0.83536-4.8315q-0.37253 0-0.65474 0.21449-0.28222 0.21448-0.47412 0.54185-0.19191 0.32737-0.29351 0.72247-0.0903 0.38381-0.0903 0.73376 0 0.57572 0.18061 0.8918 0.18062 0.30479 0.65474 0.30479 0.37253 0 0.65474-0.21448 0.28222-0.21448 0.47412-0.54185 0.19191-0.32737 0.28222-0.71119 0.1016-0.3951 0.1016-0.74504 0-0.57572-0.18062-0.88052-0.18062-0.31608-0.65474-0.31608z"/>
<path d="m125.74 125.87h-1.6707l1.4111-5.9378h1.682zm0.81278-6.6603q-0.34995 0-0.63216-0.2032-0.28222-0.21448-0.28222-0.64345 0-0.23706 0.0903-0.44025 0.1016-0.21449 0.25964-0.36124 0.15804-0.15804 0.36124-0.24835 0.21448-0.0903 0.45154-0.0903 0.34995 0 0.63216 0.21449 0.28222 0.20319 0.28222 0.63216 0 0.23706-0.1016 0.45154-0.0903 0.2032-0.24835 0.36124-0.15804 0.14675-0.37252 0.23706-0.2032 0.0903-0.44026 0.0903z"/>
<path d="m128.89 120.2q0.1919-0.0564 0.41767-0.12418 0.23707-0.079 0.51928-0.13546 0.2935-0.0677 0.64345-0.1016 0.36124-0.0451 0.81278-0.0451 1.3321 0 1.8288 0.76762 0.49669 0.76763 0.16932 2.0997l-0.76762 3.206h-1.682l0.74505-3.1382q0.0677-0.2935 0.10159-0.56443 0.0452-0.28221 0-0.48541-0.0451-0.21448-0.21448-0.33866-0.15804-0.13546-0.4967-0.13546-0.32737 0-0.66603 0.0677l-1.095 4.5945h-1.682z"/>
<path d="m135.8 118.45 1.7497-0.27093-0.42896 1.7497h1.8739l-0.33865 1.3772h-1.8626l-0.4967 2.0771q-0.0677 0.25964-0.0903 0.48541-0.0113 0.22577 0.0564 0.3951 0.079 0.15804 0.25964 0.24835 0.18062 0.0903 0.4967 0.0903 0.27092 0 0.51927-0.0451 0.25964-0.0564 0.51928-0.14675l0.12417 1.2869q-0.33865 0.12417-0.73376 0.21448-0.3951 0.0903-0.93695 0.0903-0.77891 0-1.2079-0.22577-0.42897-0.23706-0.60959-0.63216-0.18061-0.40639-0.15804-0.92567 0.0226-0.51928 0.15804-1.095z"/>
</g>
<g clip-path="url(#clipPath965)" fill="#fff" aria-label="PostalPoint">
<path d="m78.763 117.96q0.71118 0 1.2756 0.15804 0.57572 0.14675 0.97082 0.44026 0.3951 0.28221 0.60958 0.69989 0.21448 0.41768 0.21448 0.93696 0 0.84664-0.32737 1.4336-0.32737 0.58701-0.90309 0.94824-0.57572 0.36124-1.3546 0.51928t-1.6933 0.15804h-0.44026l-0.63216 2.619h-1.7497l1.84-7.7101q0.60958-0.11289 1.1514-0.15804 0.55314-0.0452 1.0386-0.0452zm-0.14675 1.4788q-0.19191 0-0.32737 0.0113-0.13546 0.0113-0.27093 0.0226l-0.54185 2.3029h0.44026q0.47412 0 0.85794-0.0677 0.3951-0.079 0.66603-0.24835 0.28222-0.16933 0.42897-0.42897 0.15804-0.27092 0.15804-0.65474 0-0.50798-0.37252-0.72247-0.36124-0.21448-1.0386-0.21448z"/>
<path d="m84.728 126.03q-0.5983 0-1.0386-0.18062-0.44026-0.18062-0.73376-0.50799-0.28222-0.32737-0.42897-0.76762-0.14675-0.45155-0.14675-0.9934 0-0.67732 0.21448-1.3546 0.22577-0.67732 0.65474-1.2192 0.42897-0.54186 1.0498-0.88052 0.62087-0.34994 1.4224-0.34994 0.58701 0 1.0273 0.18062 0.45154 0.18061 0.73376 0.50798 0.2935 0.32737 0.44026 0.77892 0.14675 0.44025 0.14675 0.98211 0 0.67731-0.21448 1.3546-0.21448 0.67732-0.63216 1.2192-0.41768 0.54185-1.0498 0.8918-0.62087 0.33866-1.4449 0.33866zm0.83536-4.8315q-0.37252 0-0.65474 0.21449-0.28222 0.21448-0.47412 0.54185-0.19191 0.32737-0.2935 0.72247-0.09031 0.38381-0.09031 0.73376 0 0.57572 0.18062 0.8918 0.18062 0.30479 0.65474 0.30479 0.37252 0 0.65474-0.21448t0.47412-0.54185q0.19191-0.32737 0.28222-0.71119 0.1016-0.3951 0.1016-0.74504 0-0.57572-0.18062-0.88052-0.18062-0.31608-0.65474-0.31608z"/>
<path d="m90.718 124.67q0.57572 0 0.7902-0.15804 0.21448-0.16933 0.21448-0.36123 0-0.12418-0.04515-0.21449-0.03387-0.0903-0.12417-0.16932-0.09031-0.079-0.24835-0.15805-0.15804-0.0903-0.40639-0.20319-0.28222-0.12417-0.53056-0.25964-0.24835-0.14675-0.44026-0.33866-0.18062-0.20319-0.2935-0.45154-0.1016-0.25964-0.1016-0.60959 0-0.91437 0.66603-1.4449 0.67732-0.53056 1.9642-0.53056 0.60958 0 1.0837 0.13546 0.47412 0.13546 0.76762 0.29351l-0.57572 1.253q-0.23706-0.12417-0.60958-0.23706t-0.73376-0.11289q-0.15804 0-0.31608 0.0226-0.14675 0.0113-0.28222 0.0677-0.12418 0.0564-0.2032 0.15804-0.07902 0.1016-0.07902 0.27093 0 0.22577 0.16933 0.33866 0.18062 0.11288 0.4967 0.27092 0.44026 0.21449 0.73376 0.39511 0.2935 0.18061 0.46283 0.38381 0.18062 0.20319 0.25964 0.46283 0.07902 0.25964 0.07902 0.60959 0 0.36123-0.15804 0.71118-0.14675 0.34995-0.47412 0.62087-0.32737 0.27093-0.83536 0.44026-0.50799 0.16933-1.2192 0.16933-0.44026 0-0.80149-0.0564-0.34995-0.0564-0.62087-0.13546-0.27093-0.0903-0.46283-0.18062-0.18062-0.0903-0.28222-0.14675l0.57572-1.2869q0.19191 0.11289 0.5983 0.28221 0.40639 0.16933 0.98211 0.16933z"/>
<path d="m96.112 118.45 1.7497-0.27093-0.42897 1.7497h1.8739l-0.33866 1.3772h-1.8626l-0.4967 2.0771q-0.06773 0.25964-0.09031 0.48541-0.01129 0.22577 0.05644 0.3951 0.07902 0.15804 0.25964 0.24835 0.18062 0.0903 0.4967 0.0903 0.27093 0 0.51928-0.0451 0.25964-0.0564 0.51928-0.14675l0.12418 1.2869q-0.33866 0.12417-0.73376 0.21448-0.3951 0.0903-0.93696 0.0903-0.77891 0-1.2079-0.22577-0.42897-0.23706-0.60958-0.63216-0.18062-0.40639-0.15804-0.92567 0.02258-0.51928 0.15804-1.095z"/>
<path d="m104.8 123.31q-0.15804 0.64345-0.0903 1.2982 0.0677 0.64345 0.25963 1.1514l-1.5014 0.21448q-0.0677-0.13546-0.12418-0.25963-0.0564-0.12418-0.11288-0.28222-0.31608 0.25964-0.6999 0.42897-0.38381 0.16933-0.85793 0.16933-0.56443 0-0.97082-0.19191-0.3951-0.20319-0.65474-0.53056-0.24835-0.33866-0.36124-0.77892-0.11288-0.45154-0.11288-0.95953 0-0.77891 0.27092-1.4675 0.28222-0.6886 0.76763-1.1966 0.4967-0.51928 1.1627-0.81278t1.4449-0.2935q0.1016 0 0.34995 0.0113 0.25963 0.0113 0.587 0.0564 0.32737 0.0339 0.68861 0.12417 0.36123 0.0903 0.6886 0.24835zm-1.174-2.0771q-0.14675-0.0226-0.27093-0.0339-0.11288-0.0113-0.28221-0.0113-0.38382 0-0.72247 0.19191-0.32737 0.19191-0.57572 0.50799-0.24835 0.30479-0.3951 0.71118-0.13547 0.40639-0.13547 0.84665 0 0.54185 0.18062 0.85793t0.66603 0.31608q0.25964 0 0.46283-0.1016 0.21448-0.10159 0.45155-0.33865 0.0226-0.28222 0.0677-0.58701 0.0564-0.31608 0.11288-0.57572z"/>
<path d="m108.6 125.98q-0.80149 0-1.2643-0.20319-0.45155-0.21449-0.65474-0.57572-0.19191-0.36124-0.19191-0.82407 0.0113-0.47412 0.13546-1.0047l1.4337-5.9942 1.7497-0.27092-1.5691 6.5022q-0.0451 0.2032-0.0564 0.37253 0 0.16933 0.0677 0.30479 0.0677 0.12418 0.22578 0.2032 0.16932 0.079 0.46283 0.10159z"/>
<path d="m114.04 117.96q0.71119 0 1.2756 0.15804 0.57571 0.14675 0.97082 0.44026 0.3951 0.28221 0.60958 0.69989t0.21448 0.93696q0 0.84664-0.32737 1.4336-0.32736 0.58701-0.90308 0.94824-0.57572 0.36124-1.3546 0.51928-0.77891 0.15804-1.6933 0.15804h-0.44025l-0.63217 2.619h-1.7497l1.84-7.7101q0.60959-0.11289 1.1514-0.15804 0.55314-0.0452 1.0386-0.0452zm-0.14675 1.4788q-0.1919 0-0.32737 0.0113-0.13546 0.0113-0.27092 0.0226l-0.54186 2.3029h0.44026q0.47412 0 0.85793-0.0677 0.3951-0.079 0.66603-0.24835 0.28221-0.16933 0.42897-0.42897 0.15804-0.27092 0.15804-0.65474 0-0.50798-0.37253-0.72247-0.36123-0.21448-1.0386-0.21448z"/>
<path d="m120 126.03q-0.59829 0-1.0386-0.18062t-0.73376-0.50799q-0.28221-0.32737-0.42897-0.76762-0.14675-0.45155-0.14675-0.9934 0-0.67732 0.21448-1.3546 0.22578-0.67732 0.65474-1.2192 0.42897-0.54186 1.0498-0.88052 0.62088-0.34994 1.4224-0.34994 0.58701 0 1.0273 0.18062 0.45155 0.18061 0.73376 0.50798 0.29351 0.32737 0.44026 0.77892 0.14675 0.44025 0.14675 0.98211 0 0.67731-0.21448 1.3546-0.21449 0.67732-0.63217 1.2192-0.41767 0.54185-1.0498 0.8918-0.62087 0.33866-1.4449 0.33866zm0.83536-4.8315q-0.37253 0-0.65474 0.21449-0.28222 0.21448-0.47412 0.54185-0.19191 0.32737-0.29351 0.72247-0.0903 0.38381-0.0903 0.73376 0 0.57572 0.18061 0.8918 0.18062 0.30479 0.65474 0.30479 0.37253 0 0.65474-0.21448 0.28222-0.21448 0.47412-0.54185 0.19191-0.32737 0.28222-0.71119 0.1016-0.3951 0.1016-0.74504 0-0.57572-0.18062-0.88052-0.18062-0.31608-0.65474-0.31608z"/>
<path d="m125.74 125.87h-1.6707l1.4111-5.9378h1.682zm0.81278-6.6603q-0.34995 0-0.63216-0.2032-0.28222-0.21448-0.28222-0.64345 0-0.23706 0.0903-0.44025 0.1016-0.21449 0.25964-0.36124 0.15804-0.15804 0.36124-0.24835 0.21448-0.0903 0.45154-0.0903 0.34995 0 0.63216 0.21449 0.28222 0.20319 0.28222 0.63216 0 0.23706-0.1016 0.45154-0.0903 0.2032-0.24835 0.36124-0.15804 0.14675-0.37252 0.23706-0.2032 0.0903-0.44026 0.0903z"/>
<path d="m128.89 120.2q0.1919-0.0564 0.41767-0.12418 0.23707-0.079 0.51928-0.13546 0.2935-0.0677 0.64345-0.1016 0.36124-0.0451 0.81278-0.0451 1.3321 0 1.8288 0.76762 0.49669 0.76763 0.16932 2.0997l-0.76762 3.206h-1.682l0.74505-3.1382q0.0677-0.2935 0.10159-0.56443 0.0452-0.28221 0-0.48541-0.0451-0.21448-0.21448-0.33866-0.15804-0.13546-0.4967-0.13546-0.32737 0-0.66603 0.0677l-1.095 4.5945h-1.682z"/>
<path d="m135.8 118.45 1.7497-0.27093-0.42896 1.7497h1.8739l-0.33865 1.3772h-1.8626l-0.4967 2.0771q-0.0677 0.25964-0.0903 0.48541-0.0113 0.22577 0.0564 0.3951 0.079 0.15804 0.25964 0.24835 0.18062 0.0903 0.4967 0.0903 0.27092 0 0.51927-0.0451 0.25964-0.0564 0.51928-0.14675l0.12417 1.2869q-0.33865 0.12417-0.73376 0.21448-0.3951 0.0903-0.93695 0.0903-0.77891 0-1.2079-0.22577-0.42897-0.23706-0.60959-0.63216-0.18061-0.40639-0.15804-0.92567 0.0226-0.51928 0.15804-1.095z"/>
</g>
</g>
<g transform="translate(1.3993 2.6002)">
<path d="m61.891 114.86 1.25 0.53541v1.5177l-1.25-0.53541z" fill="#00b0ff" style="paint-order:normal"/>
<path d="m64.391 114.86-1.25 0.53541v1.5177l1.25-0.53541z" fill="#00b0ff" style="paint-order:normal"/>
<path d="m64.391 114.86-1.25 0.53541-1.25-0.53541 1.25-0.53541z" fill="#fff" style="paint-order:normal"/>
<path d="m63.141 116.92 1.25 0.53541v1.5177l-1.25-0.53542z" fill="#00b0ff" style="paint-order:normal"/>
<path d="m65.641 116.92-1.25 0.53541v1.5177l1.25-0.53542z" fill="#bdbdbd" style="paint-order:normal"/>
<path d="m65.641 116.92-1.25 0.53541-1.25-0.53541 1.25-0.53541z" fill="#006e9f" style="paint-order:normal"/>
<path d="m60.641 116.92 1.25 0.53541v1.5177l-1.25-0.53541z" fill="#eee" style="paint-order:normal"/>
<path d="m63.141 116.92-1.25 0.53541v1.5177l1.25-0.53541z" fill="#00b0ff" style="paint-order:normal"/>
<path d="m63.141 116.92-1.25 0.53541-1.25-0.53541 1.25-0.53541z" fill="#006e9f" style="paint-order:normal"/>
<path d="m60.641 115.4 1.25 0.53541v1.5177l-1.25-0.53541z" fill="#eee" style="paint-order:normal"/>
<path d="m63.141 115.4-1.25 0.53541v1.5177l1.25-0.53541z" fill="#bdbdbd" style="paint-order:normal"/>
<path d="m63.141 115.4-1.25 0.53541-1.25-0.53541 1.25-0.53541z" fill="#fff" style="paint-order:normal"/>
<path d="m63.141 115.4 1.25 0.53541v1.5177l-1.25-0.53541z" fill="#eee" style="paint-order:normal"/>
<path d="m65.641 115.4-1.25 0.53541v1.5177l1.25-0.53541z" fill="#bdbdbd" style="paint-order:normal"/>
<path d="m65.641 115.4-1.25 0.53541-1.25-0.53541 1.25-0.53541z" fill="#fff" style="paint-order:normal"/>
<path d="m60.641 123.61 2.5 1.0708v3.0354l-2.5-1.0708z" fill="#40c4ff" style="paint-order:normal"/>
<path d="m65.641 123.61-2.5 1.0708v3.0354l2.5-1.0708z" fill="#0091ea" style="paint-order:normal"/>
<path d="m65.641 123.61-2.5 1.0708-2.5-1.0708 2.5-1.0708z" fill="#03a9f4" style="paint-order:normal"/>
<path d="m58.141 111.29 2.5 1.0708v3.0354l-2.5-1.0708z" fill="#40c4ff" style="paint-order:normal"/>
<path d="m63.141 111.29-2.5 1.0708v3.0354l2.5-1.0708z" fill="#0091ea" style="paint-order:normal"/>
<path d="m63.141 111.29-2.5 1.0708-2.5-1.0708 2.5-1.0708z" fill="#03a9f4" style="paint-order:normal"/>
<path d="m63.141 119.51 2.5 1.0708v3.0354l-2.5-1.0708z" fill="#40c4ff" style="paint-order:normal"/>
<path d="m68.141 119.51-2.5 1.0708v3.0354l2.5-1.0708z" fill="#0091ea" style="paint-order:normal"/>
<path d="m68.141 119.51-2.5 1.0708-2.5-1.0708 2.5-1.0708z" fill="#03a9f4" style="paint-order:normal"/>
<path d="m58.141 119.51 2.5 1.0708v3.0354l-2.5-1.0708z" fill="#40c4ff" style="paint-order:normal"/>
<path d="m63.141 119.51-2.5 1.0708v3.0354l2.5-1.0708z" fill="#0091ea" style="paint-order:normal"/>
<path d="m63.141 119.51-2.5 1.0708-2.5-1.0708 2.5-1.0708z" fill="#03a9f4" style="paint-order:normal"/>
<path d="m65.641 115.4 2.5 1.0708v3.0354l-2.5-1.0708z" fill="#40c4ff" style="paint-order:normal"/>
<path d="m70.641 115.4-2.5 1.0708v3.0354l2.5-1.0708z" fill="#0091ea" style="paint-order:normal"/>
<path d="m70.641 115.4-2.5 1.0708-2.5-1.0708 2.5-1.0708z" fill="#03a9f4" style="paint-order:normal"/>
<path d="m55.641 115.4 2.5 1.0708v3.0354l-2.5-1.0708z" fill="#40c4ff" style="paint-order:normal"/>
<path d="m60.641 115.4-2.5 1.0708v3.0354l2.5-1.0708z" fill="#0091ea" style="paint-order:normal"/>
<path d="m60.641 115.4-2.5 1.0708-2.5-1.0708 2.5-1.0708z" fill="#03a9f4" style="paint-order:normal"/>
<path d="m63.141 111.29 2.5 1.0708v3.0354l-2.5-1.0708z" fill="#40c4ff" style="paint-order:normal"/>
<path d="m68.141 111.29-2.5 1.0708v3.0354l2.5-1.0708z" fill="#0091ea" style="paint-order:normal"/>
<path d="m68.141 111.29-2.5 1.0708-2.5-1.0708 2.5-1.0708z" fill="#03a9f4" style="paint-order:normal"/>
<path d="m61.891 117.45 1.25 0.53541v1.5177l-1.25-0.53541z" fill="#eee" style="paint-order:normal"/>
<path d="m64.391 117.45-1.25 0.53541v1.5177l1.25-0.53541z" fill="#bdbdbd" style="paint-order:normal"/>
<path d="m64.391 117.45-1.25 0.53541-1.25-0.53541 1.25-0.53541z" fill="#fff" style="paint-order:normal"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 19 KiB

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="82.453mm" height="18.496mm" version="1.1" viewBox="0 0 82.453 18.496" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<defs>
<clipPath id="clipPath907">
<rect x="73.099" y="121.75" width="66.791" height=".70158" display="none" fill="#2196f3" style="paint-order:normal"/>
<path class="powerclip" d="m69.733 112.11h74.26v18.918h-74.26zm3.3652 9.6352v0.70159h66.791v-0.70159z" fill="#2196f3" style="paint-order:normal"/>
</clipPath>
</defs>
<metadata>
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<g transform="translate(-49.238 -106.32)">
<g transform="translate(-27.882 -9.2062)" style="paint-order:normal">
<path d="m82.619 116.03-2.5001 1.0707v3.0355l-2.4996 1.0707v3.0355l2.4996 1.0713v3.035l2.5001 1.0713v3.035l2.5001 1.0713 2.5001-1.0713v-3.035l2.5001-1.0713v-3.035l2.4996-1.0713v-3.0355l-2.4996-1.0707v-3.0355l-2.5001-1.0707-2.5001 1.0707z" fill="#00b0ff" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" style="paint-order:normal"/>
</g>
<g transform="translate(-7.3027 -5.9991)">
<g transform="translate(1.3993 2.6002)">
<path d="m61.891 114.86 1.25 0.53541v1.5177l-1.25-0.53541z" fill="#00b0ff" style="paint-order:normal"/>
<path d="m64.391 114.86-1.25 0.53541v1.5177l1.25-0.53541z" fill="#00b0ff" style="paint-order:normal"/>
<path d="m64.391 114.86-1.25 0.53541-1.25-0.53541 1.25-0.53541z" fill="#fff" style="paint-order:normal"/>
<path d="m63.141 116.92 1.25 0.53541v1.5177l-1.25-0.53542z" fill="#00b0ff" style="paint-order:normal"/>
<path d="m65.641 116.92-1.25 0.53541v1.5177l1.25-0.53542z" fill="#bdbdbd" style="paint-order:normal"/>
<path d="m65.641 116.92-1.25 0.53541-1.25-0.53541 1.25-0.53541z" fill="#006e9f" style="paint-order:normal"/>
<path d="m60.641 116.92 1.25 0.53541v1.5177l-1.25-0.53541z" fill="#eee" style="paint-order:normal"/>
<path d="m63.141 116.92-1.25 0.53541v1.5177l1.25-0.53541z" fill="#00b0ff" style="paint-order:normal"/>
<path d="m63.141 116.92-1.25 0.53541-1.25-0.53541 1.25-0.53541z" fill="#006e9f" style="paint-order:normal"/>
<path d="m60.641 115.4 1.25 0.53541v1.5177l-1.25-0.53541z" fill="#eee" style="paint-order:normal"/>
<path d="m63.141 115.4-1.25 0.53541v1.5177l1.25-0.53541z" fill="#bdbdbd" style="paint-order:normal"/>
<path d="m63.141 115.4-1.25 0.53541-1.25-0.53541 1.25-0.53541z" fill="#fff" style="paint-order:normal"/>
<path d="m63.141 115.4 1.25 0.53541v1.5177l-1.25-0.53541z" fill="#eee" style="paint-order:normal"/>
<path d="m65.641 115.4-1.25 0.53541v1.5177l1.25-0.53541z" fill="#bdbdbd" style="paint-order:normal"/>
<path d="m65.641 115.4-1.25 0.53541-1.25-0.53541 1.25-0.53541z" fill="#fff" style="paint-order:normal"/>
<path d="m60.641 123.61 2.5 1.0708v3.0354l-2.5-1.0708z" fill="#40c4ff" style="paint-order:normal"/>
<path d="m65.641 123.61-2.5 1.0708v3.0354l2.5-1.0708z" fill="#0091ea" style="paint-order:normal"/>
<path d="m65.641 123.61-2.5 1.0708-2.5-1.0708 2.5-1.0708z" fill="#03a9f4" style="paint-order:normal"/>
<path d="m58.141 111.29 2.5 1.0708v3.0354l-2.5-1.0708z" fill="#40c4ff" style="paint-order:normal"/>
<path d="m63.141 111.29-2.5 1.0708v3.0354l2.5-1.0708z" fill="#0091ea" style="paint-order:normal"/>
<path d="m63.141 111.29-2.5 1.0708-2.5-1.0708 2.5-1.0708z" fill="#03a9f4" style="paint-order:normal"/>
<path d="m63.141 119.51 2.5 1.0708v3.0354l-2.5-1.0708z" fill="#40c4ff" style="paint-order:normal"/>
<path d="m68.141 119.51-2.5 1.0708v3.0354l2.5-1.0708z" fill="#0091ea" style="paint-order:normal"/>
<path d="m68.141 119.51-2.5 1.0708-2.5-1.0708 2.5-1.0708z" fill="#03a9f4" style="paint-order:normal"/>
<path d="m58.141 119.51 2.5 1.0708v3.0354l-2.5-1.0708z" fill="#40c4ff" style="paint-order:normal"/>
<path d="m63.141 119.51-2.5 1.0708v3.0354l2.5-1.0708z" fill="#0091ea" style="paint-order:normal"/>
<path d="m63.141 119.51-2.5 1.0708-2.5-1.0708 2.5-1.0708z" fill="#03a9f4" style="paint-order:normal"/>
<path d="m65.641 115.4 2.5 1.0708v3.0354l-2.5-1.0708z" fill="#40c4ff" style="paint-order:normal"/>
<path d="m70.641 115.4-2.5 1.0708v3.0354l2.5-1.0708z" fill="#0091ea" style="paint-order:normal"/>
<path d="m70.641 115.4-2.5 1.0708-2.5-1.0708 2.5-1.0708z" fill="#03a9f4" style="paint-order:normal"/>
<path d="m55.641 115.4 2.5 1.0708v3.0354l-2.5-1.0708z" fill="#40c4ff" style="paint-order:normal"/>
<path d="m60.641 115.4-2.5 1.0708v3.0354l2.5-1.0708z" fill="#0091ea" style="paint-order:normal"/>
<path d="m60.641 115.4-2.5 1.0708-2.5-1.0708 2.5-1.0708z" fill="#03a9f4" style="paint-order:normal"/>
<path d="m63.141 111.29 2.5 1.0708v3.0354l-2.5-1.0708z" fill="#40c4ff" style="paint-order:normal"/>
<path d="m68.141 111.29-2.5 1.0708v3.0354l2.5-1.0708z" fill="#0091ea" style="paint-order:normal"/>
<path d="m68.141 111.29-2.5 1.0708-2.5-1.0708 2.5-1.0708z" fill="#03a9f4" style="paint-order:normal"/>
<path d="m61.891 117.45 1.25 0.53541v1.5177l-1.25-0.53541z" fill="#eee" style="paint-order:normal"/>
<path d="m64.391 117.45-1.25 0.53541v1.5177l1.25-0.53541z" fill="#bdbdbd" style="paint-order:normal"/>
<path d="m64.391 117.45-1.25 0.53541-1.25-0.53541 1.25-0.53541z" fill="#fff" style="paint-order:normal"/>
</g>
<g clip-path="url(#clipPath907)" fill="#fff" stroke-width=".26458px" aria-label="PostalPoint">
<path d="m78.763 117.96q0.71118 0 1.2756 0.15804 0.57572 0.14675 0.97082 0.44026 0.3951 0.28221 0.60958 0.69989 0.21448 0.41768 0.21448 0.93696 0 0.84664-0.32737 1.4336-0.32737 0.58701-0.90309 0.94824-0.57572 0.36124-1.3546 0.51928t-1.6933 0.15804h-0.44026l-0.63216 2.619h-1.7497l1.84-7.7101q0.60958-0.11289 1.1514-0.15804 0.55314-0.0452 1.0386-0.0452zm-0.14675 1.4788q-0.19191 0-0.32737 0.0113-0.13546 0.0113-0.27093 0.0226l-0.54185 2.3029h0.44026q0.47412 0 0.85794-0.0677 0.3951-0.079 0.66603-0.24835 0.28222-0.16933 0.42897-0.42897 0.15804-0.27092 0.15804-0.65474 0-0.50798-0.37252-0.72247-0.36124-0.21448-1.0386-0.21448z"/>
<path d="m84.728 126.03q-0.5983 0-1.0386-0.18062-0.44026-0.18062-0.73376-0.50799-0.28222-0.32737-0.42897-0.76762-0.14675-0.45155-0.14675-0.9934 0-0.67732 0.21448-1.3546 0.22577-0.67732 0.65474-1.2192 0.42897-0.54186 1.0498-0.88052 0.62087-0.34994 1.4224-0.34994 0.58701 0 1.0273 0.18062 0.45154 0.18061 0.73376 0.50798 0.2935 0.32737 0.44026 0.77892 0.14675 0.44025 0.14675 0.98211 0 0.67731-0.21448 1.3546-0.21448 0.67732-0.63216 1.2192-0.41768 0.54185-1.0498 0.8918-0.62087 0.33866-1.4449 0.33866zm0.83536-4.8315q-0.37252 0-0.65474 0.21449-0.28222 0.21448-0.47412 0.54185-0.19191 0.32737-0.2935 0.72247-0.09031 0.38381-0.09031 0.73376 0 0.57572 0.18062 0.8918 0.18062 0.30479 0.65474 0.30479 0.37252 0 0.65474-0.21448t0.47412-0.54185q0.19191-0.32737 0.28222-0.71119 0.1016-0.3951 0.1016-0.74504 0-0.57572-0.18062-0.88052-0.18062-0.31608-0.65474-0.31608z"/>
<path d="m90.718 124.67q0.57572 0 0.7902-0.15804 0.21448-0.16933 0.21448-0.36123 0-0.12418-0.04515-0.21449-0.03387-0.0903-0.12417-0.16932-0.09031-0.079-0.24835-0.15805-0.15804-0.0903-0.40639-0.20319-0.28222-0.12417-0.53056-0.25964-0.24835-0.14675-0.44026-0.33866-0.18062-0.20319-0.2935-0.45154-0.1016-0.25964-0.1016-0.60959 0-0.91437 0.66603-1.4449 0.67732-0.53056 1.9642-0.53056 0.60958 0 1.0837 0.13546 0.47412 0.13546 0.76762 0.29351l-0.57572 1.253q-0.23706-0.12417-0.60958-0.23706t-0.73376-0.11289q-0.15804 0-0.31608 0.0226-0.14675 0.0113-0.28222 0.0677-0.12418 0.0564-0.2032 0.15804-0.07902 0.1016-0.07902 0.27093 0 0.22577 0.16933 0.33866 0.18062 0.11288 0.4967 0.27092 0.44026 0.21449 0.73376 0.39511 0.2935 0.18061 0.46283 0.38381 0.18062 0.20319 0.25964 0.46283 0.07902 0.25964 0.07902 0.60959 0 0.36123-0.15804 0.71118-0.14675 0.34995-0.47412 0.62087-0.32737 0.27093-0.83536 0.44026-0.50799 0.16933-1.2192 0.16933-0.44026 0-0.80149-0.0564-0.34995-0.0564-0.62087-0.13546-0.27093-0.0903-0.46283-0.18062-0.18062-0.0903-0.28222-0.14675l0.57572-1.2869q0.19191 0.11289 0.5983 0.28221 0.40639 0.16933 0.98211 0.16933z"/>
<path d="m96.112 118.45 1.7497-0.27093-0.42897 1.7497h1.8739l-0.33866 1.3772h-1.8626l-0.4967 2.0771q-0.06773 0.25964-0.09031 0.48541-0.01129 0.22577 0.05644 0.3951 0.07902 0.15804 0.25964 0.24835 0.18062 0.0903 0.4967 0.0903 0.27093 0 0.51928-0.0451 0.25964-0.0564 0.51928-0.14675l0.12418 1.2869q-0.33866 0.12417-0.73376 0.21448-0.3951 0.0903-0.93696 0.0903-0.77891 0-1.2079-0.22577-0.42897-0.23706-0.60958-0.63216-0.18062-0.40639-0.15804-0.92567 0.02258-0.51928 0.15804-1.095z"/>
<path d="m104.8 123.31q-0.15804 0.64345-0.0903 1.2982 0.0677 0.64345 0.25963 1.1514l-1.5014 0.21448q-0.0677-0.13546-0.12418-0.25963-0.0564-0.12418-0.11288-0.28222-0.31608 0.25964-0.6999 0.42897-0.38381 0.16933-0.85793 0.16933-0.56443 0-0.97082-0.19191-0.3951-0.20319-0.65474-0.53056-0.24835-0.33866-0.36124-0.77892-0.11288-0.45154-0.11288-0.95953 0-0.77891 0.27092-1.4675 0.28222-0.6886 0.76763-1.1966 0.4967-0.51928 1.1627-0.81278t1.4449-0.2935q0.1016 0 0.34995 0.0113 0.25963 0.0113 0.587 0.0564 0.32737 0.0339 0.68861 0.12417 0.36123 0.0903 0.6886 0.24835zm-1.174-2.0771q-0.14675-0.0226-0.27093-0.0339-0.11288-0.0113-0.28221-0.0113-0.38382 0-0.72247 0.19191-0.32737 0.19191-0.57572 0.50799-0.24835 0.30479-0.3951 0.71118-0.13547 0.40639-0.13547 0.84665 0 0.54185 0.18062 0.85793t0.66603 0.31608q0.25964 0 0.46283-0.1016 0.21448-0.10159 0.45155-0.33865 0.0226-0.28222 0.0677-0.58701 0.0564-0.31608 0.11288-0.57572z"/>
<path d="m108.6 125.98q-0.80149 0-1.2643-0.20319-0.45155-0.21449-0.65474-0.57572-0.19191-0.36124-0.19191-0.82407 0.0113-0.47412 0.13546-1.0047l1.4337-5.9942 1.7497-0.27092-1.5691 6.5022q-0.0451 0.2032-0.0564 0.37253 0 0.16933 0.0677 0.30479 0.0677 0.12418 0.22578 0.2032 0.16932 0.079 0.46283 0.10159z"/>
<path d="m114.04 117.96q0.71119 0 1.2756 0.15804 0.57571 0.14675 0.97082 0.44026 0.3951 0.28221 0.60958 0.69989t0.21448 0.93696q0 0.84664-0.32737 1.4336-0.32736 0.58701-0.90308 0.94824-0.57572 0.36124-1.3546 0.51928-0.77891 0.15804-1.6933 0.15804h-0.44025l-0.63217 2.619h-1.7497l1.84-7.7101q0.60959-0.11289 1.1514-0.15804 0.55314-0.0452 1.0386-0.0452zm-0.14675 1.4788q-0.1919 0-0.32737 0.0113-0.13546 0.0113-0.27092 0.0226l-0.54186 2.3029h0.44026q0.47412 0 0.85793-0.0677 0.3951-0.079 0.66603-0.24835 0.28221-0.16933 0.42897-0.42897 0.15804-0.27092 0.15804-0.65474 0-0.50798-0.37253-0.72247-0.36123-0.21448-1.0386-0.21448z"/>
<path d="m120 126.03q-0.59829 0-1.0386-0.18062t-0.73376-0.50799q-0.28221-0.32737-0.42897-0.76762-0.14675-0.45155-0.14675-0.9934 0-0.67732 0.21448-1.3546 0.22578-0.67732 0.65474-1.2192 0.42897-0.54186 1.0498-0.88052 0.62088-0.34994 1.4224-0.34994 0.58701 0 1.0273 0.18062 0.45155 0.18061 0.73376 0.50798 0.29351 0.32737 0.44026 0.77892 0.14675 0.44025 0.14675 0.98211 0 0.67731-0.21448 1.3546-0.21449 0.67732-0.63217 1.2192-0.41767 0.54185-1.0498 0.8918-0.62087 0.33866-1.4449 0.33866zm0.83536-4.8315q-0.37253 0-0.65474 0.21449-0.28222 0.21448-0.47412 0.54185-0.19191 0.32737-0.29351 0.72247-0.0903 0.38381-0.0903 0.73376 0 0.57572 0.18061 0.8918 0.18062 0.30479 0.65474 0.30479 0.37253 0 0.65474-0.21448 0.28222-0.21448 0.47412-0.54185 0.19191-0.32737 0.28222-0.71119 0.1016-0.3951 0.1016-0.74504 0-0.57572-0.18062-0.88052-0.18062-0.31608-0.65474-0.31608z"/>
<path d="m125.74 125.87h-1.6707l1.4111-5.9378h1.682zm0.81278-6.6603q-0.34995 0-0.63216-0.2032-0.28222-0.21448-0.28222-0.64345 0-0.23706 0.0903-0.44025 0.1016-0.21449 0.25964-0.36124 0.15804-0.15804 0.36124-0.24835 0.21448-0.0903 0.45154-0.0903 0.34995 0 0.63216 0.21449 0.28222 0.20319 0.28222 0.63216 0 0.23706-0.1016 0.45154-0.0903 0.2032-0.24835 0.36124-0.15804 0.14675-0.37252 0.23706-0.2032 0.0903-0.44026 0.0903z"/>
<path d="m128.89 120.2q0.1919-0.0564 0.41767-0.12418 0.23707-0.079 0.51928-0.13546 0.2935-0.0677 0.64345-0.1016 0.36124-0.0451 0.81278-0.0451 1.3321 0 1.8288 0.76762 0.49669 0.76763 0.16932 2.0997l-0.76762 3.206h-1.682l0.74505-3.1382q0.0677-0.2935 0.10159-0.56443 0.0452-0.28221 0-0.48541-0.0451-0.21448-0.21448-0.33866-0.15804-0.13546-0.4967-0.13546-0.32737 0-0.66603 0.0677l-1.095 4.5945h-1.682z"/>
<path d="m135.8 118.45 1.7497-0.27093-0.42896 1.7497h1.8739l-0.33865 1.3772h-1.8626l-0.4967 2.0771q-0.0677 0.25964-0.0903 0.48541-0.0113 0.22577 0.0564 0.3951 0.079 0.15804 0.25964 0.24835 0.18062 0.0903 0.4967 0.0903 0.27092 0 0.51927-0.0451 0.25964-0.0564 0.51928-0.14675l0.12417 1.2869q-0.33865 0.12417-0.73376 0.21448-0.3951 0.0903-0.93695 0.0903-0.77891 0-1.2079-0.22577-0.42897-0.23706-0.60959-0.63216-0.18061-0.40639-0.15804-0.92567 0.0226-0.51928 0.15804-1.095z"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 414 KiB

@ -31,12 +31,20 @@ class MapControl {
* @param {number} latitude
* @param {number} longitude
* @param {boolean} accurate set true to zoom to street level (z13), false to zoom to general area (z10).
* @param {boolean} countrylevel set true to override accurate and set zoom level to 3
* @returns {undefined}
*/
clearMarkersAndCenterMapOnNewMarker(classname, latitude, longitude, accurate) {
clearMarkersAndCenterMapOnNewMarker(classname, latitude, longitude, accurate, countrylevel) {
this.mapObj.removeMarkers();
this.mapObj.addMarker(latitude, longitude, classname);
this.mapObj.animateMapIn(latitude, longitude, (accurate ? 13 : 10));
var zoomlevel = 10;
if (accurate) {
zoomlevel = 13;
}
if (countrylevel) {
zoomlevel = 3;
}
this.mapObj.animateMapIn(latitude, longitude, zoomlevel);
}
loadMarkersFromGeoJson(geojson, iconname, name) {

@ -101,11 +101,9 @@ function verifyCode(code) {
}
function displayAccountInfo() {
$("#loyaltyBalanceBox").addClass("display-none");
$("#loyaltyErrorMessage").html("");
if (inStorage("accountkey") && inStorage("accountnumber")) {
} else {
$("#loyaltyErrorMessage").text("Error: No account connected.");
$("#accountErrorMessage").text("Error: No account connected.");
return;
}
apirequest(SETTINGS.apis.getaccountinfo, {
@ -115,8 +113,6 @@ function displayAccountInfo() {
$("#hasaccountbox").css("display", "");
$("#loadingaccountbox").css("display", "none");
if (success.status == "OK") {
$("#loyaltyCreditBalanceHeading").text(success.credits + " points");
$("#loyaltyBalanceBox").removeClass("display-none")
$("#accountnumberspan").text(success.accountnumber);
if (success.payments_setup === false) {
@ -131,11 +127,10 @@ function displayAccountInfo() {
$("#accountupdateform input#streetaddress").val(success.streetaddress);
$("#accountupdateform input#zipcode").val(success.zipcode);
} else {
$("#loyaltyBalanceBox").addClass("display-none");
$("#loyaltyErrorMessage").text("Error: " + success.msg);
$("#accountErrorMessage").text("Error: " + success.msg);
}
}, function (xhr, status, error) {
$("#loyaltyErrorMessage").text("Error: Couldn't get your account info. Try again later.");
$("#accountErrorMessage").text("Error: Couldn't get your account info. Try again later.");
sendErrorReport("Account", "Couldn't display account info", "Server/network problem: " + xhr.status + ": " + xhr.statusText);
}, "GET");
}
@ -329,4 +324,21 @@ function loadReceiptHTMLIntoPopup(receiptid) {
app.dialog.alert("There's a server or network problem. Check your Internet connection or try again later.", "Error");
sendErrorReport("Receipts", "Couldn't load receipt", "Server/network problem: " + xhr.status + ": " + xhr.statusText);
}, "POST");
}
function receiptiframeloadevent() {
$("#receiptvieweriframe").contents().find("a").each(function () {
$(this).attr("data-href", $(this).attr("href"));
$(this).attr("href", "#");
$(this).on("click", function (evt) {
var href = evt.target.getAttribute("data-href");
window.parent.openReceiptIframeLink(href);
});
});
}
function openReceiptIframeLink(href) {
if (handleDeepLink(href)) {
app.popup.close();
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1,498 +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/.
*/
var walletPubKeyRegex = /^(bc1|[13]|D)[a-zA-HJ-NP-Z0-9]{25,}$/;
var paymentRequestRegex = /^(?:bitcoin|dogecoin):([a-zA-Z0-9]{20,40})(?:\?(.*))?$/;
var walletPrivateKeyRegex = /^[0-9A-Za-z]+$/;
/**
* Parse a crypto URI and extract the info in it.
* Copyright (c) 2019 Robin Linus, MIT license, https://github.com/coins/bitcoin-uri-js
* @param {type} uri
* @returns {parsePaymentURI.parsed}
*/
function parsePaymentURI(uri) {
const legalKeys = ['address', 'amount', 'value', 'message', 'send', 'tx'];
const match = paymentRequestRegex.exec(uri);
if (!match) {
return null;
}
const parsed = {uri: uri}
if (match[2]) {
const queries = match[2].split('&');
for (let i = 0; i < queries.length; i++) {
const query = queries[i].split('=');
const key = query[0];
if (query.length === 2 && legalKeys.includes(key)) {
parsed[key] = decodeURIComponent(query[1].replace(/\+/g, '%20'));
}
}
}
parsed.address = match[1];
return parsed;
}
function openWalletPage(walletaddress) {
var navuri = '/crypto/' + walletaddress;
if (typeof router.currentRoute.query.paymenturi != 'undefined') {
var parsed = parsePaymentURI(router.currentRoute.query.paymenturi);
if (parsed != null) {
navuri += '/' + parsed.address;
if (typeof parsed['amount'] != 'undefined') {
navuri += '/' + parsed.amount;
}
}
}
router.navigate(navuri);
}
function scanWalletQrCode(callback) {
scanBarcode(function (result) {
if (walletPubKeyRegex.test(result)) {
callback(result);
} else {
app.dialog.alert("That doesn't look like a valid wallet address.", "Error");
return;
}
}, function () {
app.dialog.alert("Something went wrong and we can't scan right now.", "Error");
});
}
function scanPrivateKeyQrCode(callback) {
scanBarcode(function (result) {
if (walletPrivateKeyRegex.test(result)) {
callback(result);
} else {
app.dialog.alert("That doesn't look like a valid wallet address.", "Error");
return;
}
}, function () {
app.dialog.alert("Something went wrong and we can't scan right now.", "Error");
});
}
/**
* Create and sign a crypto transaction.
*
* @param {type} bitcoreLib Bitcore, Litecore, Dogecore, etc.
* @param {type} privateKeyString Private key from wallet QR code
* @param {type} sourceAddress Sender's wallet address
* @param {type} destinationAddress Recipient's wallet address
* @param {Array} utxos Unspent transaction inputs, as array. See createUtxo()
* @param {type} outputSatoshis Amount to send to recipient's wallet
* @returns {string} Hex of serialized transaction, suitable for broadcast via Bitcoin Core or an API.
*/
function createSignedTransaction(bitcoreLib, privateKeyString, sourceAddress, destinationAddress, utxos, outputSatoshis, feePerByte) {
if (typeof feePerByte == "undefined") {
feePerByte = -1;
}
try {
var privateKey = new bitcoreLib.PrivateKey(privateKeyString);
var transaction = new bitcoreLib.Transaction()
.from(utxos)
.to(destinationAddress, outputSatoshis)
.change(sourceAddress);
var size = transaction._estimateSize();
var fee = size * feePerByte;
if (feePerByte > -1) {
// use our fee
transaction = transaction.fee(fee);
} else {
// use lib's fee
fee = transaction.getFee();
}
transaction = transaction.sign(privateKey);
var inputTotal = transaction._getInputAmount();
var outputTotal = fee + outputSatoshis;
} catch (ex) {
throw new Error("There was an internal error while creating the transaction. Details: " + ex.message);
}
console.log(inputTotal, outputTotal);
if (outputTotal > inputTotal) {
throw new Error("You have insufficient funds to cover the payment and transaction fees.");
}
try {
return {serialized: transaction.serialize(), fee: fee, sendamount: outputSatoshis, totalspent: outputTotal};
} catch (ex) {
throw new Error("Couldn't create the transaction. It's likely you typed something wrong. Check that you have enough funds.");
}
}
/**
* Create a UTXO.
*
* @param {type} sourceAddress Sender's wallet address
* @param {type} txHash From UTXO (unspent output)
* @param {type} txOutputIndex From UTXO (unspent output)
* @param {type} script From UTXO (unspent output)
* @param {type} inputSatoshis From UTXO (unspent output)
* @returns {createUtxo.utxo}
*/
function createUtxo(sourceAddress, txHash, txOutputIndex, script, inputSatoshis) {
var utxo = {
"txId": txHash,
"outputIndex": txOutputIndex,
"address": sourceAddress,
"script": script,
"satoshis": inputSatoshis
};
return utxo;
}
/**
* Get unspent outputs for a wallet address.
* @param {string} walletaddress
* @param {function} successCallback Passes object with {utxos: [{txHash,txOutputIndex,script,value}], currency: "DOGE", label: "Dogecoin"}
* @param {function} errorCallback Passes string error message suitable for display
* @returns {undefined}
*/
function getUTXOData(walletaddress, successCallback, errorCallback) {
apirequest(SETTINGS.apis.getutxo, {
walletaddress: walletaddress
}, function (resp) {
if (resp.status == "OK") {
successCallback({
utxos: resp.unspent_outputs,
currency: resp.currency,
label: resp.label
});
} else {
errorCallback(resp.msg);
}
}, function (errorData) {
try {
var error = $.parseJSON(errorData.responseText);
if (error && typeof error.msg != 'undefined') {
errorCallback(resp.msg);
sendErrorReport("Crypto", "Couldn't get UTXO data", error.msg);
} else {
errorCallback("There's a server or network problem. Check your Internet connection or try again later. Your funds are safe.");
sendErrorReport("Crypto", "Couldn't get UTXO data", "Server/network problem: " + errorData.status + ": " + errorData.statusText);
}
} catch (ex) {
errorCallback("There's a server or network problem. Check your Internet connection or try again later. Your funds are safe.");
sendErrorReport("Crypto", "Couldn't get UTXO data", "Server/network problem: " + errorData.status + ": " + errorData.statusText);
}
});
}
function sendCoins(privatekey, fromaddress, toaddress, amount) {
var progressdialog = app.dialog.progress("Querying blockchain...", 20);
getUTXOData(fromaddress, function (success) {
progressdialog.setProgress(40);
progressdialog.setText("Creating transaction...");
if (success.utxos.length == 0) {
app.dialog.close();
app.dialog.alert("Your wallet has no available funds (ZERO_LENGTH_UTXO).", "Error");
return;
}
var utxos = [];
for (var i = 0; i < success.utxos.length; i++) {
utxos.push(createUtxo(fromaddress, success.utxos[i].txHash, success.utxos[i].txOutputIndex, success.utxos[i].script, success.utxos[i].value));
}
var bitcore = null;
var satoshis = parseInt((amount * 100000000).toFixed(0)); // Make sure it's an int and not something like 10.0000000001 or 9.532999999999
switch (success.currency) {
case "DOGE":
bitcore = require("bitcore-lib-doge");
break;
case "BTC":
bitcore = require("bitcore-lib");
break;
default:
app.dialog.close();
app.dialog.alert("This app version doesn't support " + success.currency + ".", "Error");
return;
}
progressdialog.setProgress(60);
progressdialog.setText("Calculating fees...");
apirequest(SETTINGS.apis.cryptofees, {
currency: success.currency
}, function (resp) {
if (resp.status == "OK") {
try {
var txdata = createSignedTransaction(bitcore, privatekey, fromaddress, toaddress, utxos, satoshis, resp.feePerByte);
} catch (ex) {
console.error(ex);
app.dialog.close();
app.dialog.alert(ex.message, "Error");
return;
}
progressdialog.close();
app.dialog.confirm("Sending " + (txdata.sendamount / 100000000) + " " + success.currency
+ " with a fee of " + (txdata.fee / 100000000) + " " + success.currency
+ " for a total spend of " + (txdata.totalspent / 100000000) + " " + success.currency + ".",
"Confirm Transaction",
function (ok) {
progressdialog = app.dialog.progress("Sending payment...", 80);
apirequest(SETTINGS.apis.broadcasttransaction, {
transactiondata: txdata.serialized,
currency: success.currency
}, function (resp) {
if (resp.status == "OK") {
app.dialog.close();
app.dialog.alert("Sent " + amount + " " + success.currency + " to " + toaddress.substring(0, 5) + "..." + toaddress.substring(toaddress.length - 5, 999), "Success!");
$('#walletPrivateKey').val(""); // clear private key input box
app.popup.close();
return;
} else {
app.dialog.close();
app.dialog.alert(resp.msg, "Error");
}
}, function (errorData) {
app.dialog.close();
try {
var error = $.parseJSON(errorData.responseText);
if (error && typeof error.msg != 'undefined') {
app.dialog.alert(error.msg, "Error");
sendErrorReport("Crypto", "Couldn't broadcast transaction", error.msg);
} else {
app.dialog.alert("There's a server or network problem. Check your Internet connection or try again later. Your funds are safe.", "Error");
sendErrorReport("Crypto", "Couldn't broadcast transaction", "Server/network problem: " + errorData.status + ": " + errorData.statusText);
}
} catch (ex) {
app.dialog.alert("There's a server or network problem. Check your Internet connection or try again later. Your funds are safe.", "Error");
sendErrorReport("Crypto", "Couldn't broadcast transaction", "Server/network problem: " + errorData.status + ": " + errorData.statusText);
}
});
});
} else {
app.dialog.close();
app.dialog.alert(resp.msg, "Error");
}
}, function (errorData) {
app.dialog.close();
try {
var error = $.parseJSON(errorData.responseText);
if (error && typeof error.msg != 'undefined') {
app.dialog.alert(error.msg, "Error");
sendErrorReport("Crypto", "Couldn't get transaction fees", error.msg);
} else {
app.dialog.alert("There's a server or network problem. Check your Internet connection or try again later. Your funds are safe.", "Error");
sendErrorReport("Crypto", "Couldn't get transaction fees", "Server/network problem: " + errorData.status + ": " + errorData.statusText);
}
} catch (ex) {
app.dialog.alert("There's a server or network problem. Check your Internet connection or try again later. Your funds are safe.", "Error");
sendErrorReport("Crypto", "Couldn't get transaction fees", "Server/network problem: " + errorData.status + ": " + errorData.statusText);
}
});
}, function (error) {
app.dialog.close();
app.dialog.alert(error, "Error");
});
}
function walletGUISendCoins() {
if (!walletPubKeyRegex.test($('#walletAddress').text())) {
app.dialog.alert("Your wallet address doesn't look right. Check it and try again.", "Error");
return;
}
if (isNaN($('#transactionAmount').val()) || $('#transactionAmount').val() < 0.00000001) {
app.dialog.alert("The amount to send doesn't look right. Check it and try again.", "Error");
return;
}
// Remove payment request URL stuff
if ($('#walletToAddress').val().startsWith("bitcoin:")) {
$('#walletToAddress').val($('#walletToAddress').val().replace("bitcoin:", ""));
}
if ($('#walletToAddress').val().startsWith("dogecoin:")) {
$('#walletToAddress').val($('#walletToAddress').val().replace("dogecoin:", ""));
}
if (!walletPubKeyRegex.test($('#walletToAddress').val())) {
app.dialog.alert("The recipient's wallet address doesn't look right. Check it and try again.", "Error");
return;
}
sendCoins($('#walletPrivateKey').val(), $('#walletAddress').text(), $('#walletToAddress').val(), parseFloat($('#transactionAmount').val()));
}
function openWalletBalancePage( {to, resolve, reject}) {
var address = to.params.walletaddress;
if (!walletPubKeyRegex.test(address)) {
app.dialog.alert("That doesn't look like a valid wallet address.", "Error");
reject();
return;
}
app.dialog.preloader("Loading...");
apirequest(SETTINGS.apis.walletbalance, {
walletaddress: address
}, function (resp) {
app.dialog.close();
if (resp.status == "OK") {
var context = {
balance: resp.balance,
currencyunit: resp.currency,
fiatvalue: resp.usdvalue,
currencyname: resp.label,
attribution: resp.attribution,
exchangerate: resp.exchangerates.usd,
logo: "./assets/images/crypto/" + resp.currency + ".svg",
walletaddress: to.params.walletaddress,
sendtoaddress: (typeof to.params.toaddress != "undefined" ? to.params.toaddress : ""),
sendtoamount: (typeof to.params.amount != "undefined" ? to.params.amount : "")
};
resolve({
content: compiledPages.crypto_wallet(context)
});
} else {
reject();
app.dialog.alert(resp.msg, "Error");
}
}, function (error) {
reject();
app.dialog.close();
try {
var error = $.parseJSON(error.responseText);
if (error && typeof error.msg != 'undefined') {
app.dialog.alert(error.msg, "Error");
sendErrorReport("Crypto", "Couldn't get wallet balance", error.msg);
} else {
app.dialog.alert("There's a server or network problem. Check your Internet connection or try again later. Your funds are safe.", "Error");
sendErrorReport("Crypto", "Couldn't get wallet balance", "Server/network problem: " + error.status + ": " + error.statusText);
}
} catch (ex) {
app.dialog.alert("There's a server or network problem. Check your Internet connection or try again later. Your funds are safe.", "Error");
sendErrorReport("Crypto", "Couldn't get wallet balance", "Server/network problem: " + error.status + ": " + error.statusText);
}
});
}
/**
* Setup an input for specifying amount to send in USD, with conversion to crypto.
* @param {string} walletAddress Detects cryptocurrency from wallet address
* @returns {undefined}
*/
function setupFiatConversion(walletAddress) {
apirequest(SETTINGS.apis.walletbalance, {
walletaddress: walletAddress
}, function (resp) {
if (resp.status != "OK") {
return;
}
if (resp.exchangerates.usd == -1) {
return;
}
$("#cryptoFiatInputItem").css("display", "");
$("#cryptoAmountSendCurrencyLabel").text(resp.currency);
$("#cryptoAmountSendFiatLabel").text("$");
$("#transactionAmountFiat").data("exchange-rate", resp.exchangerates.usd);
$("#transactionAmountFiat").data("cryptocurrency", resp.currency);
$("#transactionAmount").off("input change paste keyup");
$("#transactionAmountFiat").off("input change paste keyup");
$("#transactionAmount").on("input change paste keyup", function () {
if ($("#cryptoFiatInputItem").css("display") == "none") {
return;
}
var amount = parseFloat($("#transactionAmount").val());
var exchangerate = parseFloat($("#transactionAmountFiat").data("exchange-rate"));
$("#transactionAmountFiat").val((amount * exchangerate).toFixed(2));
//$("#transactionAmount").val(amount.toFixed(8));
});
$("#transactionAmountFiat").on("input change paste keyup", function () {
if ($("#cryptoFiatInputItem").css("display") == "none") {
return;
}
var fiatamount = parseFloat($("#transactionAmountFiat").val());
var exchangerate = parseFloat($("#transactionAmountFiat").data("exchange-rate"));
$("#transactionAmount").val((fiatamount / exchangerate).toFixed(8));
});
if ($("#transactionAmount").val() != "") {
// Update the fiat conversion calculation if there's an amount prefilled
$("#transactionAmount").trigger("input");
}
});
}
function setupReceiveFiatConversion() {
var exchangerate = $("#receiveAmountFiat").data("exchangerate");
var fiatlabel = $("#receiveAmountFiat").data("currencylabel");
if (exchangerate == -1) {
return;
}
$("#cryptoAmountReceiveFiatLI").css("display", "");
$("#cryptoAmountReceiveFiatLabel").text(fiatlabel);
$("#receiveAmount").off("input change paste keyup");
$("#receiveAmountFiat").off("input change paste keyup");
$("#receiveAmount").on("input change paste keyup", function () {
if ($("#cryptoAmountReceiveFiatLI").css("display") == "none") {
return;
}
var amount = parseFloat($("#receiveAmount").val());
var exchangerate = parseFloat($("#receiveAmountFiat").data("exchangerate"));
$("#receiveAmountFiat").val((amount * exchangerate).toFixed(2));
});
$("#receiveAmountFiat").on("input change paste keyup", function () {
var fiatamount = parseFloat($("#receiveAmountFiat").val());
var exchangerate = parseFloat($("#receiveAmountFiat").data("exchangerate"));
$("#receiveAmount").val((fiatamount / exchangerate).toFixed(8));
});
if ($("#receiveAmount").val() != "") {
// Update the fiat conversion calculation if there's an amount prefilled
$("#receiveAmount").trigger("input");
}
}
/**
* Hides the fiat conversion input box.
* @returns {undefined}
*/
function unsetupFiatConversion() {
$("#cryptoFiatInputItem").css("display", "none");
$("#cryptoAmountSendCurrencyLabel").text("");
$("#transactionAmountFiat").removeData("exchange-rate");
$("#transactionAmountFiat").removeData("cryptocurrency");
$("#transactionAmount").off("input change paste keyup");
$("#transactionAmountFiat").off("input change paste keyup");
}
function showPaymentRequestQRCode() {
var paymenturi = "";
switch ($("#receiveAmount").data("currency")) {
case "DOGE":
paymenturi = "dogecoin:";
break;
case "BTC":
paymenturi = "bitcoin:";
break;
}
paymenturi += $('#walletAddress').text();
if ($("#receiveAmount").val() > 0) {
paymenturi += "?amount=" + $("#receiveAmount").val();
}
$("#paymentRequestQRCodeContainer").html("");
new QRCode(document.getElementById("paymentRequestQRCodeContainer"), paymenturi);
}
$("#app").on("click", "#sendCryptoOpenPopupBtn", function () {
if (walletPubKeyRegex.test($("#walletAddress").text())) {
setupFiatConversion($("#walletAddress").text());
} else {
unsetupFiatConversion();
}
});

@ -78,7 +78,7 @@ $("body").on("popup:open", "#dasLocationMapPopup", function () {
dropboxMap.reloadMap();
dropboxMap.mapObj.on('load', function () {
dropboxMap.mapObj.jumpTo({center: [-112.005, 46.589], zoom: 8});
dropboxMap.loadIcon("./assets/images/dropbox-icon.png", "dropbox", function () {
dropboxMap.loadIcon("./assets/images/DAS_marker.png", "dropbox", function () {
apirequest(SETTINGS.apis.dropandsendlocations, {}, function (data) {
dropboxMap.loadMarkersFromGeoJson(data, "dropbox", "dropbox");
dropboxMap.mapObj.on('click', 'marker-layer-dropbox', function (e) {

@ -33,6 +33,8 @@ function openGenericBarcodeScanner() {
} else if (trackingcoderegex.test(result)) {
code = result;
action = "track";
} else if (result.startsWith("https://helena.express/")) {
action = "hlnexurl";
}
switch (action) {
@ -49,6 +51,9 @@ function openGenericBarcodeScanner() {
router.navigate("/crypto?paymenturi=" + code);
//app.dialog.alert("Not implemented.");
break;
case "hlnexurl":
handleDeepLink(result);
break;
default:
app.dialog.alert("This app can't understand what's in that barcode.", "Error");
return;

@ -0,0 +1,128 @@
/*
* 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/.
*/
/**
* Open a location on the map.
* @param {type} e
* @returns {undefined}
*/
var openMapLocationInfo = function (e) {
var coordinates = e.geometry.coordinates.slice();
showLocationDetails(e);
locationMap.mapObj.resize();
locationMap.mapObj.easeTo({
center: [coordinates[0], coordinates[1]],
zoom: 15,
bearing: 0,
pitch: 0
});
};
var showLocationDetails = function (e) {
var coordinates = e.geometry.coordinates.slice();
var name = e.properties.name;
var info = e.properties.info;
var hours = e.properties.hours;
var geolink = "geo:" + (Math.round(coordinates[1] * 1000000) / 1000000) + "," + (Math.round(coordinates[0] * 1000000) / 1000000);
var typeinfo = "";
if (e.properties.branding == "DAS") {
typeinfo = "<b>Drop and Send&#8480; Drop Box</b><br />Use this app to send packages from this box, no postage necessary. Just put your package inside and scan the QR code with this app.";
} else if (e.properties.branding == "PP") {
typeinfo = "<b>PostalPoint&trade; Kiosk</b><br />Purchase postage, send USPS packages, and get free boxes here.";
}
$("#locationInfoName").text(name);
$("#locationInfoModalContainer").html(
"<div class='row'><div class='col-50'>"
+ "<a class=\"button button-small\" href=\"" + geolink + "\"><i class=\"fas fa-location-circle\"></i>&nbsp; Directions</a>"
+ "</div>"
+ "<div class='col-50'>"
+ (e.properties.branding == "DAS" ? "<a class=\"button button-small sheet-close\" href=\"\" onclick=\"router.navigate('/das');\"><i class=\"fas fa-info-circle\"></i>&nbsp; More Info</a>" : "")
+ (e.properties.branding == "PP" ? "<a class=\"button button-small sheet-close\" href=\"\" onclick=\"router.navigate('/kiosk');\"><i class=\"fas fa-info-circle\"></i>&nbsp; More info</a>" : "")
+ "</div></div>"
+ typeinfo + "<br />"
+ (hours == "" ? "" : "<b>Hours:</b> " + hours)
+ "<br /><b>Info:</b> " + info
);
app.sheet.open("#locationInfoModal");
};
function loadLocationMap() {
if (MapControl.supported()) {
if (locationMap == null) {
app.preloader.show();
var mapboxel = document.getElementById("mapbox-locations");
locationMap = new MapControl(mapboxel, true);
locationMap.reloadMap();
var locationMapLoaded = false;
locationMap.mapObj.on('load', function () {
locationMapLoaded = true;
});
apirequest(SETTINGS.apis.locations, {}, function (resp) {
var loadWhenMapReady = function () {
if (locationMapLoaded) {
setupLocationMap(resp);
} else {
setTimeout(function () {
loadWhenMapReady();
}, 100);
}
}
loadWhenMapReady();
}, function (xhr) {
app.preloader.hide();
try {
var error = $.parseJSON(xhr.responseText);
if (error && typeof error.msg != 'undefined') {
app.dialog.alert(error.msg, "Error");
sendErrorReport("Location Map", "Couldn't get locations GeoJSON", error.msg);
} else {
app.dialog.alert("There's a server or network problem. Check your Internet connection or try again later.", "Error");
sendErrorReport("Location Map", "Couldn't get locations GeoJSON", "Server/network problem: " + xhr.status + ": " + xhr.statusText);
}
} catch (ex) {
app.dialog.alert("There's a server or network problem. Check your Internet connection or try again later.", "Error");
sendErrorReport("Location Map", "Couldn't get locations GeoJSON", "Server/network problem: " + xhr.status + ": " + xhr.statusText);
}
});
}
} else {
showWebGLErrorMessage();
app.preloader.hide();
}
}
function setupLocationMap(geojson) {
app.preloader.hide();
geojson.features.forEach((marker) => {
const el = document.createElement('div');
el.className = 'marker';
el.style.backgroundImage = "url(./assets/images/" + marker.properties.branding + "_marker.png)";
el.style.width = "32px";
el.style.height = "32px";
el.style.cursor = "pointer";
el.addEventListener('click', () => {
openMapLocationInfo(marker);
});
new maplibregl.Marker({element: el})
.setLngLat(marker.geometry.coordinates)
.addTo(locationMap.mapObj);
});
locationMap.mapObj.jumpTo({center: [-112.005, 46.589], zoom: 9});
}
$("body").on("sheet:open", "#locationInfoModal", function () {
$("#mapbox-locations").addClass("sheet-open");
locationMap.mapObj.resize();
});
$("body").on("sheet:close", "#locationInfoModal", function () {
$("#mapbox-locations").removeClass("sheet-open");
locationMap.mapObj.resize();
locationMap.mapObj.easeTo({center: [-112.005, 46.589], zoom: 9});
});

@ -23,6 +23,9 @@ var app = new Framework7({
popover: {
backdrop: true
},
sheet: {
backdrop: false
},
touch: {
tapHold: true
},
@ -204,6 +207,60 @@ if (getStorage("analytics") !== "false") {
}
document.title = SETTINGS.branding.apptitle;
/**
* Open the page set in the startpage URL parameter.
* @returns {Boolean} true if navigated to a set page, false if app should open something else.
*/
function openStartpageURLArg() {
try {
var urlParams = new URLSearchParams(window.location.search);
if (urlParams.has("startpage")) {
var startpage = urlParams.get("startpage");
if (startpage == "") {
return false;
}
router.navigate("/" + startpage);
return true;
}
} catch (ex) {
}
return false;
}
/**
* Get the cached dynamic page content if available, else return null (and try to fetch it for next time)
* @param {string} page the page ID
* @returns {string|null}
*/
function getDynamicPageContent(page) {
if (inStorage("dynamiccontent_" + page)) {
return getStorage("dynamiccontent_" + page);
}
apirequest(SETTINGS.apis.dynamicappcontent, {page: page}, function (resp) {
if (resp.status == "OK") {
setStorage("dynamiccontent_" + resp.page, resp.content);
}
});
return null;
}
// update dynamic page text cache
setTimeout(function () {
dynamicPages.forEach(function (pageid) {
// Only update if it's been over eight hours since last update
if (!inStorage("dynamiccontent-lastupdated_" + pageid) || getStorage("dynamiccontent-lastupdated_" + pageid) < time() - 60 * 60 * 8) {
apirequest(SETTINGS.apis.dynamicappcontent, {page: pageid}, function (resp) {
if (resp.status == "OK") {
setStorage("dynamiccontent_" + resp.page, resp.content);
setStorage("dynamiccontent-lastupdated_" + resp.page, time());
}
});
}
});
}, 500);
if (setup) {
router.navigate("/home");
} else {
@ -212,4 +269,5 @@ if (setup) {
pushState: false
});
}
document.title = SETTINGS.branding.apptitle;
openStartpageURLArg();

@ -7,6 +7,7 @@
var dropboxMap = null;
var serviceAreaMap = null;
var locationMap = null;
function showWebGLErrorMessage() {
app.dialog.alert("Well, this is awkward. Your device doesn't support displaying the map. If your \n\

@ -6,7 +6,7 @@
function requestPickup() {
if (isNaN($("#pickupRequestForm #packagecount").val())) {
if (isNaN($("#pickupRequestForm #packagecount").val()) || $("#pickupRequestForm #packagecount").val() == "") {
app.dialog.alert("Tell us how many packages you're sending so we'll know if we miss any.", "Whoops!");
return;
}
@ -32,7 +32,8 @@ function requestPickup() {
accountkey: getStorage("accountkey"),
count: $("#pickupRequestForm #packagecount").val(),
address: $("#pickupRequestForm #streetaddress").val() + " " + $("#pickupRequestForm #zipcode").val(),
instructions: instructions
instructions: instructions,
prepaid: $("#prepaid-label-checkbox").is(":checked") ? "1" : "0"
}, function (success) {
app.dialog.close();
if (success.status == "OK") {

@ -141,6 +141,96 @@ function setupCordovaBarcodeScanner() {
};
}
/**
* Handle a deep link.
* @param {string} href the link
* @returns {boolean} true if handled, false if rejected.
*/
function handleDeepLink(href) {
var link = new URL(href);
if (link.host != "helena.express") {
return false;
}
if (link.hash) {
link.fragment = link.hash.substr(1);
}
switch (link.pathname) {
case "/":
break;
case "/app":
case "/app/get":
app.dialog.alert("You already have the Helena Express app. You're using it right now!", "Hi there!");
break;
case "/das":
router.navigate("/das");
break;
case "/das/map":
router.navigate("/das");
break;
case "/das/pickup":
if (link.fragment) {
sendPickupCode(link.fragment);
} else {
router.navigate("/das");
}
break;
case "/das/account":
router.navigate("/account");
break;
case "/fast":
router.navigate("/quicksend");
break;
case "/kiosk":
router.navigate("/kiosk");
break;
case "/manifest":
openExternalBrowser(link.href);
break;
case "/mobile":
case "/mobile/":
router.navigate("/mobile");
break;
case "/notary":
router.navigate("/notary");
break;
case "/pickup":
router.navigate("/pickup");
break;
case "/locations":
router.navigate("/locations");
break;
case "/rates":
router.navigate("/rates");
break;
case "/review":
openExternalBrowser("https://helena.express/review");
break;
case "/schedule":
router.navigate("/appointment");
break;
case "/send":
router.navigate("/send");
break;
case "/shop":
router.navigate("/shop");
break;
case "/telegram":
case "/telegram/":
router.navigate("/telegram");
break;
case "/track":
if (link.fragment) {
router.navigate("/track/" + link.fragment);
} else {
router.navigate("/track");
}
break;
default:
openBrowser(link.href);
}
return true;
}
function initCordova() {
platform_type = "cordova";
@ -221,57 +311,9 @@ function initCordova() {
}
IonicDeeplink.onDeepLink(function (link) {
if (link.host != "helena.express") {
return;
}
// Wait a bit so the home page has time to load first.
setTimeout(function () {
switch (link.path) {
case "/":
break;
case "/track":
if (link.fragment) {
router.navigate("/track/" + link.fragment);
} else {
router.navigate("/track");
}
break;
case "/rates":
router.navigate("/rates");
break;
case "/schedule":
router.navigate("/appointment");
break;
case "/shop":
router.navigate("/shop");
break;
case "/pickup":
router.navigate("/send");
break;
case "/telegram":
case "/telegram/":
router.navigate("/telegram");
break;
case "/das":
router.navigate("/dropandsend");
break;
case "/das/map":
router.navigate("/dropandsend");
break;
case "/das/pickup":
if (link.fragment) {
sendPickupCode(link.fragment);
} else {
router.navigate("/dropandsend");
}
break;
case "/das/account":
router.navigate("/account");
break;
default:
openBrowser(link.url);
break;
}
handleDeepLink(link.url);
}, 1000);
});
}, false);

@ -0,0 +1,52 @@
/*
* 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 showAddressQRCode() {
var content = "QSv1|tofrom"
+ "|" + (inStorage("accountnumber") ? getStorage("accountnumber") : "")
+ "|" + $("#addresscodeform #to_name").val()
+ "|" + $("#addresscodeform #to_company").val()
+ "|" + $("#addresscodeform #to_street1").val()
+ "|" + $("#addresscodeform #to_street2").val()
+ "|" + $("#addresscodeform #to_city").val()
+ "|" + $("#addresscodeform #to_state").val()
+ "|" + $("#addresscodeform #to_zip").val()
+ "|" + $("#addresscodeform #to_country").val()
+ "|" + $("#addresscodeform #to_phone").val()
+ "|" // email
+ "|" + $("#addresscodeform #from_name").val()
+ "|" + $("#addresscodeform #from_company").val()
+ "|" + $("#addresscodeform #from_street1").val()
+ "|" + $("#addresscodeform #from_street2").val()
+ "|" // city
+ "|" // state
+ "|" + $("#addresscodeform #from_zip").val()
+ "|" // country
+ "|" + $("#addresscodeform #from_phone").val()
+ "|"; // email
setStorage("quicksend_name", $("#addresscodeform #from_name").val());
setStorage("quicksend_company", $("#addresscodeform #from_company").val());
setStorage("quicksend_street1", $("#addresscodeform #from_street1").val());
setStorage("quicksend_street2", $("#addresscodeform #from_street2").val());
setStorage("quicksend_zip", $("#addresscodeform #from_zip").val());
setStorage("quicksend_phone", $("#addresscodeform #from_phone").val());
var canvas = document.createElement('canvas');
bwipjs.toCanvas(canvas, {
bcid: 'pdf417', // Barcode type
text: content, // Text to encode
scale: 5,
includetext: false, // Show human-readable text
textxalign: 'center', // Always good to set this
eclevel: 'M'
});
document.getElementById("addresscode-barcode").src = canvas.toDataURL('image/png');
app.popup.create({el: document.getElementById("qrCodePopup")}).open();
}

@ -6,7 +6,7 @@
function sendErrorReport(category, error, errordata) {
if (getStorage("analytics") !== "false") {
if (getStorage("analytics") !== "false" && typeof _paq !== "undefined") {
try {
if (typeof errordata == "undefined") {
_paq.push(['trackEvent', 'Error', category, error]);
@ -20,7 +20,7 @@ function sendErrorReport(category, error, errordata) {
}
function sendActionReport(category, action, data) {
if (getStorage("analytics") !== "false") {
if (getStorage("analytics") !== "false" && typeof _paq !== "undefined") {
try {
if (typeof data == "undefined") {
_paq.push(['trackEvent', 'User Action', category, action]);
@ -34,7 +34,7 @@ function sendActionReport(category, action, data) {
}
function trackPageView(url, title) {
if (getStorage("analytics") !== "false") {
if (getStorage("analytics") !== "false" && typeof _paq !== "undefined") {
try {
_paq.push(['setCustomUrl', "https://app.helena.express" + url]);
_paq.push(['setDocumentTitle', title]);

@ -12,7 +12,11 @@
* @returns {undefined}
*/
function setStorage(key, value) {
localStorage.setItem(key, value);
if (typeof value == "string") {
localStorage.setItem(key, value);
} else {
localStorage.setItem(key, "JSON|" + JSON.stringify(value));
}
}
/**
@ -21,7 +25,12 @@ function setStorage(key, value) {
* @returns {DOMString}
*/
function getStorage(key) {
return localStorage.getItem(key);
var val = localStorage.getItem(key);
if (typeof val == "string" && val.startsWith("JSON|")) {
return JSON.parse(val.substr(5));
} else {
return val;
}
}
function removeFromStorage(key) {

@ -193,7 +193,8 @@ function trackOpenAsync( {to, resolve, reject}) {
enabled: (typeof resp.info.latitude == "number" && typeof resp.info.longitude == "number" && MapControl.supported()),
latitude: resp.info.latitude,
longitude: resp.info.longitude,
accurate: resp.info.geoaccurate
accurate: resp.info.geoaccurate,
geoiscountrylevel: (typeof resp.info.geoiscountrylevel == "undefined" ? false : resp.info.geoiscountrylevel)
}
};
if (resp.info.statustext) {

@ -44,9 +44,8 @@
<script src="node_modules/template7/dist/template7.min.js"></script>
<script src="node_modules/jquery/dist/jquery.min.js"></script>
<script src="node_modules/maplibre-gl/dist/maplibre-gl.js"></script>
<script src="node_modules/bwip-js/dist/bwip-js-min.js"></script>
<script src="assets/js/qrcode.min.js"></script>
<script src="assets/js/bitcore-lib.min.js"></script>
<script src="assets/js/bitcore-lib-doge.min.js"></script>
<script src="settings.js"></script>
@ -67,8 +66,9 @@
<script src="assets/js/account.js"></script>
<script src="assets/js/shop.js"></script>
<script src="assets/js/home.js"></script>
<script src="assets/js/crypto.js"></script>
<script src="assets/js/serviceareamap.js"></script>
<script src="assets/js/locationmap.js"></script>
<script src="assets/js/quicksend.js"></script>
<script src="routes.js"></script>
<script src="assets/js/main.js"></script>

@ -1,16 +1,17 @@
{
"name": "HelenaExpressApp",
"version": "2.0.0",
"version": "2.1.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "HelenaExpressApp",
"version": "2.0.0",
"version": "2.0.4",
"license": "MPL-2.0",
"dependencies": {
"@fortawesome/fontawesome-pro": "^6",
"@zxing/library": "^0.15.2",
"bwip-js": "^3.1.0",
"framework7": "^7.0.2",
"jquery": "^3.6.0",
"maplibre-gl": "^1.15.3",
@ -103,6 +104,14 @@
"text-encoding": "^0.7.0"
}
},
"node_modules/bwip-js": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/bwip-js/-/bwip-js-3.1.0.tgz",
"integrity": "sha512-H+4s1/25kC/ybwt+o0zhFkbTL4nGrzZV7KW44luWqT/ClmCzhXVqVgaNx8d9YoOUVKR461xDmLt3eGDRtGqRag==",
"bin": {
"bwip-js": "bin/bwip-js.js"
}
},
"node_modules/csscolorparser": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz",
@ -435,6 +444,11 @@
"ts-custom-error": "^3.0.0"
}
},
"bwip-js": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/bwip-js/-/bwip-js-3.1.0.tgz",
"integrity": "sha512-H+4s1/25kC/ybwt+o0zhFkbTL4nGrzZV7KW44luWqT/ClmCzhXVqVgaNx8d9YoOUVKR461xDmLt3eGDRtGqRag=="
},
"csscolorparser": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz",

@ -1,11 +1,12 @@
{
"name": "HelenaExpressApp",
"version": "2.0.0",
"version": "2.1.0",
"main": "index.html",
"license": "MPL-2.0",
"dependencies": {
"@fortawesome/fontawesome-pro": "^6",
"@zxing/library": "^0.15.2",
"bwip-js": "^3.1.0",
"framework7": "^7.0.2",
"jquery": "^3.6.0",
"maplibre-gl": "^1.15.3",

@ -40,11 +40,6 @@
Your Account Number:
<h2><span id="accountnumberspan">Loading...</span></h2>
</div>
<div id="loyaltyBalanceBox" class="card-content-padding">
<div>You have earned a total of</div>
<h2 id="loyaltyCreditBalanceHeading">...</h2>
<img id="loyaltyBarcodeImg" style="width: 90%; max-width: 300px; padding: 1.2em; background: white; display: none;" />
</div>
<div class="row">
<div class="col-100 medium-50">
<div class="block padding-half">
@ -57,12 +52,7 @@
</div>
</div>
</div>
<div id="loyaltyErrorMessage"></div>
<div class="block margin-top">
Loyalty points have no cash value. All points and associated discounts
are offered as a courtesy by and at the discretion of Helena Express
and may be revoked, canceled, or modified at any time for any reason.
</div>
<div id="accountErrorMessage"></div>
</div>

@ -20,15 +20,15 @@
<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/HelenaExpressApp.
<hr>
When viewing tracking results for a UPS package, the following copyright notice applies to the tracking data shown:
<br>
© 2021 United Parcel Service of America, Inc. All Rights Reserved. Confidential and Proprietary.
The use, disclosure, reproduction, modification, transfer, or transmittal of this work for any purpose in any form
or by any means without the written permission of United Parcel Service is strictly prohibited.
<hr>
This application relies on and is bundled with third-party code.
See below for the their licenses and where to find source code.
<hr>
When viewing tracking results for a UPS package, the following copyright notice applies to the tracking data shown:
<br>
© 2022 United Parcel Service of America, Inc. All Rights Reserved. Confidential and Proprietary.
The use, disclosure, reproduction, modification, transfer, or transmittal of this work for any purpose in any form
or by any means without the written permission of United Parcel Service is strictly prohibited.
<hr>
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">
@ -3046,7 +3046,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
-----
The following software may be included in this product: cordova-plugin-camera, cordova-plugin-device, cordova-plugin-geolocation, cordova-plugin-inappbrowser, cordova-plugin-splashscreen, cordova-plugin-statusbar. A copy of the source code may be downloaded from https://github.com/apache/cordova-plugin-camera.git (cordova-plugin-camera), https://github.com/apache/cordova-plugin-device.git (cordova-plugin-device), https://github.com/apache/cordova-plugin-geolocation.git (cordova-plugin-geolocation), https://github.com/apache/cordova-plugin-inappbrowser.git (cordova-plugin-inappbrowser), https://github.com/apache/cordova-plugin-splashscreen.git (cordova-plugin-splashscreen), https://github.com/apache/cordova-plugin-statusbar (cordova-plugin-statusbar). This software contains the following license and notice below:
The following software may be included in this product: cordova-plugin-camera, cordova-plugin-device, cordova-plugin-geolocation, cordova-plugin-inappbrowser, cordova-plugin-statusbar. A copy of the source code may be downloaded from https://github.com/apache/cordova-plugin-camera.git (cordova-plugin-camera), https://github.com/apache/cordova-plugin-device.git (cordova-plugin-device), https://github.com/apache/cordova-plugin-geolocation.git (cordova-plugin-geolocation), https://github.com/apache/cordova-plugin-inappbrowser.git (cordova-plugin-inappbrowser), https://github.com/apache/cordova-plugin-statusbar.git (cordova-plugin-statusbar). This software contains the following license and notice below:
Apache License
Version 2.0, January 2004
@ -7132,6 +7132,32 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
-----
The following software may be included in this product: QRCode.js A copy of the source code may be downloaded from https://github.com/davidshimjs/qrcodejs. This software contains the following license and notice below:
The MIT License (MIT)
Copyright (c) 2012 davidshimjs
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
</pre>
</div>

@ -1,67 +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="crypto">
<div class="navbar">
<div class="navbar-bg"></div>
<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">Crypto Wallet</div>
</div>
</div>
<div class="page-content">
<div class="row justify-content-center">
<div class="col-100 medium-60 large-70">
<div class="swiper margin-top" id="crypto-intro-swiper">
<div class="swiper-wrapper">
{{#each slideshow}}
<div class="swiper-slide display-flex justify-contenty-center align-items-center flex-direction-column">
<img src="{{image}}" style="max-height: 40vh; max-width: 90%; height: 50rem;"/>
<p class="text-align-center margin padding">{{text}}</p>
</div>
{{/each}}
</div>
<div id="crypto-intro-swiper-pagination" class="swiper-pagination"></div>
</div>
</div>
<div class="col-100 medium-40 large-30">
<div class="block text-align-center">
<div class="button hapticbtn button-fill" onclick="scanWalletQrCode(openWalletPage);"><i class="fa-solid fa-qrcode"></i> Scan Wallet</div>
</div>
<div class="block text-align-center">
<a href="#" onclick="$('#wallet-address-manual-entry').removeClass('display-none');$('a[name=wallet-address-manual-entry-anchor]').get(0).scrollIntoView();">Can't scan? <span class="taptext">Tap</span><span class="clicktext">Click</span> here.</a>
</div>
<div class="block">
<div class="list margin-bottom-half display-none" id="wallet-address-manual-entry">
<ul class="padding">
<li class="item-content">
Type your wallet's public address below, then press the open wallet button.
</li>
<li class="item-content item-input">
<div class="item-inner">
<div class="item-input-wrap">
<input type="text" id="walletPubKeyManualEntry" placeholder="1X68a3n1..." />
<span class="input-clear-button"></span>
</div>
</div>
</li>
<li class="item-content">
<div class="button button-outline hapticbtn" onclick="openWalletPage($('#walletPubKeyManualEntry').val());">Open Wallet</div>
</li>
</ul>
</div>
<a name="wallet-address-manual-entry-anchor" href="#wallet-address-manual-entry-anchor"></a>
</div>
</div>
</div>
</div>
</div>

@ -1,209 +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="crypto_wallet">
<div class="navbar">
<div class="navbar-bg"></div>
<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">Crypto Wallet</div>
</div>
</div>
<div class="page-content">
<div class="card-content-padding text-align-center">
<img id="walletBalanceLogo" style="max-height: 25vh; max-width: 25vw; height: 5em;" src="{{logo}}" />
<p>This <span id="walletCurrency">{{currencyname}}</span> wallet contains</p>
<h2><span id="walletBalanceAmount">{{balance}} {{currencyunit}}</span></h2>
<p>currently worth</p>
<h2><span id="walletFiatAmount">{{fiatvalue}}</span></h2>
</div>
<div class="row justify-content-center">
<div class="col-100 medium-50 large-30">
<div class="block">
<div class="button hapticbtn button-fill popup-open" data-popup="#sendCryptoPopup" id="sendCryptoOpenPopupBtn"><i class="fa-solid fa-inbox-out"></i> Send</div>
</div>
<div class="block">
<div class="button hapticbtn button-fill popup-open" data-popup="#receiveCryptoPopup" id="receiveCryptoOpenPopupBtn"><i class="fa-solid fa-inbox-in"></i> Receive</div>
</div>
</div>
</div>
<div class="card-content-padding text-color-gray text-align-center" id="walletAddress">{{walletaddress}}</div>
<div class="card-content-padding text-color-gray text-align-center" id="walletBalanceAttribution">
{{attribution}}
</div>
</div>
<div class="popup" id="sendCryptoPopup">
<div class="navbar">
<div class="navbar-bg"></div>
<div class="navbar-inner">
<div class="left">
<a class="link popup-close" href="#">
<i class="icon icon-back"></i>
<span class="if-not-md">Close</span>
</a>
</div>
<div class="title">Send Crypto</div>
</div>
</div>
<div class="list margin-bottom-half">
<ul>
<li class="item-divider">Step 1</li>
<li class="item-content">
<div class="item-inner">
Scan your private key. The private key unlocks your wallet and authorizes the transfer.
</div>
</li>
<li class="item-content item-input">
<div class="item-inner">
<div class="item-input-wrap">
<input type="text" id="walletPrivateKey" placeholder="6JJRxyW..." />
<span class="input-clear-button"></span>
</div>
</div>
</li>
<li class="item-content">
<div class="button hapticbtn button-fill" onclick="scanPrivateKeyQrCode(function (d) {
$('#walletPrivateKey').val(d);
});"><i class="fa-solid fa-key"></i> Scan Private Key
</div>
</li>
<li class="item-divider">Step 2</li>
<li class="item-content">
<div class="item-inner">
Scan or paste the recipient's wallet address.
The money will be sent here. Important: the recipient must be expecting the
same cryptocurrency your wallet uses. Otherwise the money will
be lost forever.
</div>
</li>
<li class="item-content item-input">
<div class="item-inner">
<div class="item-input-wrap">
<input type="text" id="walletToAddress" placeholder="1X68a3n1..." value="{{sendtoaddress}}" />
<span class="input-clear-button"></span>
</div>
</div>
</li>
<li class="item-content">
<div class="button hapticbtn button-fill" onclick="scanWalletQrCode(function (d) {
var parsed = parsePaymentURI(d);
if (parsed == null) {
$('#walletToAddress').val(d);
} else {
$('#walletToAddress').val(parsed.address);
if (typeof parsed['amount'] != 'undefined') {
$('#transactionAmount').val(parsed.amount);
}
}
});"><i class="fa-solid fa-inbox-in"></i> Scan Recipient's Wallet
</div>
</li>
<li class="item-divider">Step 3</li>
<li class="item-content">
<div class="item-inner">
Enter the amount to send.
</div>
</li>
<li class="item-content item-input">
<div class="item-inner">
<div class="item-title item-label" id="cryptoAmountSendCurrencyLabel"></div>
<div class="item-input-wrap">
<input type="number" id="transactionAmount" step="0.00000001" min="0.00000001" max="999999.99999999" value="{{sendtoamount}}"/>
<span class="input-clear-button"></span>
</div>
</div>
</li>
<li class="item-content item-input" id="cryptoFiatInputItem" style="display: none;">
<div class="item-inner">
<div class="item-title item-label" id="cryptoAmountSendFiatLabel"></div>
<div class="item-input-wrap">
<input type="number" id="transactionAmountFiat" step="0.01" min="0.01" max="9999.99"/>
<span class="input-clear-button"></span>
</div>
</div>
</li>
<li class="item-divider">Step 4</li>
<li class="item-content">
<div class="item-inner">
<div><span class="taptext">Tap</span><span class="clicktext">Click</span> the button to send the transaction.</div>
</div>
</li>
<li class="item-content">
<div class="button hapticbtn button-fill" onclick="walletGUISendCoins()">
<i class="fa-solid fa-paper-plane"></i> Send Transaction
</div>
</li>
<li class="item-content">
<div class="button hapticbtn popup-close" onclick="$('#walletPrivateKey').val('');" >
<i class="fa-solid fa-xmark"></i> Cancel
</div>
</li>
</ul>
</div>
</div>
<div class="popup" id="receiveCryptoPopup">
<div class="navbar">
<div class="navbar-bg"></div>
<div class="navbar-inner">
<div class="left">
<a class="link popup-close" href="#">
<i class="icon icon-back"></i>
<span class="if-not-md">Close</span>
</a>
</div>
<div class="title">Request Crypto</div>
</div>
</div>
<div class="margin">
Enter the amount to request.
</div>
<div class="list margin-bottom-half margin-top-half">
<ul>
<li class="item-content item-input">
<div class="item-inner">
<div class="item-title item-label" id="cryptoAmountReceiveCurrencyLabel">{{currencyunit}}</div>
<div class="item-input-wrap">
<input type="number" id="receiveAmount" step="0.00000001" min="0.00000001" max="999999.99999999" data-currency="{{currencyunit}}" />
<span class="input-clear-button"></span>
</div>
</div>
</li>
<li class="item-content item-input" id="cryptoAmountReceiveFiatLI" style="display: none;">
<div class="item-inner">
<div class="item-title item-label" id="cryptoAmountReceiveFiatLabel"></div>
<div class="item-input-wrap">
<input type="number" id="receiveAmountFiat" step="0.01" min="0.01" max="9999.99" data-exchangerate="{{exchangerate}}" data-currencylabel="$"/>
<span class="input-clear-button"></span>
</div>
</div>
</li>
<li class="item-content">
<div class="button hapticbtn button-fill" onclick="showPaymentRequestQRCode()">
<i class="fa-solid fa-qrcode"></i> Show Payment Request Code
</div>
</li>
</ul>
</div>
<div id="paymentRequestQRCodeContainer" class="block display-flex justify-content-center"></div>
</div>
</div>

@ -41,11 +41,11 @@
</li>
<li class="padding text-align-center" id="pickupLateInDayWarning" style="display: none;">
<i class="fa-duotone fa-clock fa-2x text-color-purple"></i><br>
Packages dropped off after 4PM might not be shipped until the following day.
Packages dropped off after 3PM might not be shipped until the following day.
</li>
<li class="padding text-align-center" id="pickupWeekendWarning" style="display: none;">
<i class="fa-duotone fa-calendar-exclamation fa-2x text-color-blue"></i><br>
Most packages won't leave Helena until Monday.
We pick up packages every day, but many won't ship out until Monday.
</li>
<li>
<div class="item-content item-link hapticbtn popup-open" data-popup="#dasHowItWorksPopup">
@ -160,7 +160,7 @@
<i class="fa-regular fa-qrcode"></i> Scan the Pickup Code to alert us there's a package to send.
</li>
<li>
<i class="fa-duotone fa-receipt"></i> Wait for an emailed receipt from us with the tracking code. Your credit card is automatically billed for the cost of shipping.
<i class="fa-duotone fa-receipt"></i> Wait for an emailed receipt from us with the tracking code. Your credit card is automatically billed for the cost of shipping plus a small pickup fee.
</li>
</ul>
</div>

@ -0,0 +1,68 @@
<!-- 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="trailer">
<div class="navbar">
<div class="navbar-bg"></div>
<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">Shipping Kiosks</div>
</div>
</div>
<div class="page-content noselect">
<div class="row justify-content-center">
<div class="col-100 medium-50 padding-top">
<div class="card">
<div class="card-body padding">
<div class="text-align-center">
<img src="./assets/images/postalpoint-logo-horizontal-black.svg" class="hidden-dark margin" style="max-height: 20vh; max-width: 80%;" />
<img src="./assets/images/postalpoint-logo-horizontal-white.svg" class="hidden-light margin" style="max-height: 20vh; max-width: 80%;" />
</div>
<div class="block margin-bottom" id="kiosk-dyncontent">
Visit a PostalPoint™ shipping kiosk to send mail and packages.
We've designed the kiosks with a simple and easy to use touchscreen, free boxes and envelopes, and a secure package drop.
You pay USPS retail prices with no markup. Free tracking and insurance included.
</div>
</div>
</div>
</div>
<div class="col-100 medium-50">
<div class="block-title">Locations</div>
<div class="list">
<ul>
{{#each locations}}
<li>
<a href="geo:{{geo}}" class="item-content item-link">
<div class="item-inner item-cell">
<div class="item-row">
<div class="item-cell">
<span style="font-weight: 600;">{{name}}</span>
<br />Hours: {{hours}}
</div>
</div>
<div class="item-row">
<div class="item-cell">
{{info}}
</div>
</div>
</div>
</a>
</li>
{{/each}}
</ul>
</div>
</div>
</div>
<div class="block text-align-center margin-top">
Helena Express is a founding member of the PostalPoint shipping network. PostalPoint is a trademark of PostalPortal LLC.
</div>
</div>
</div>

@ -0,0 +1,42 @@
<!-- 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="locations">
<div class="navbar">
<div class="navbar-bg"></div>
<div class="navbar-inner">
<div class="left">
<a class="link back sheet-close" href="#">
<i class="icon icon-back"></i>
<span class="if-not-md">Back</span>
</a>
</div>
<div class="title">Locations</div>
</div>
</div>
<div class="page-content noselect">
<div class="toolbar">
<div class="toolbar-inner justify-content-start">
<span class="margin-horizontal-half padding-half"><img src="./assets/images/DAS_marker.png" style="height: 24px; vertical-align: middle;" /> Drop Box</span>
<span class="margin-horizontal-half padding-half"><img src="./assets/images/PP_marker.png" style="height: 24px; vertical-align: middle;" /> Kiosk</span>
</div>
</div>
<div id="mapbox-locations"></div>
</div>
<div class="sheet-modal" id="locationInfoModal">
<div class="navbar">
<div class="navbar-bg"></div>
<div class="navbar-inner">
<div class="title" id="locationInfoName">Hide On Scroll</div>
<div class="right"><a class="link sheet-close" href="#"><i class="far fa-times if-not-ios"></i> <span class="if-ios">Close</span></a></div>
</div>
</div>
<div class="sheet-modal-inner">
<div class="block" id="locationInfoModalContainer"></div>
</div>
</div>
</div>

@ -19,7 +19,7 @@
<div class="page-content noselect">
<div class="row justify-content-center">
<div class="col-100 medium-60 large-70">
<div class="col-100 medium-60 large-70" id="notary-dyncontent">
<div class="swiper margin-top" id="notary-info-swiper">
<div class="swiper-wrapper">
<div class="swiper-slide display-flex justify-contenty-center align-items-center flex-direction-column">
@ -61,6 +61,11 @@
licensed to practice law. We are not allowed to draft legal
records, give advice on legal matters, including immigration, or charge
a fee for those activities.
<br />
<br />
<br />
<br />
<br />
</div>
</div>
</div>

@ -51,7 +51,7 @@
<div class="item-inner">
<div class="item-title item-floating-label">Pickup Address</div>
<div class="item-input-wrap">
<input type="text" id="streetaddress" placeholder="1234 Your Rd" value="{{streetaddress}}" />
<input type="text" id="streetaddress" placeholder="1234 Your Rd" value="{{streetaddress}}" autocomplete="off" autocorrect="off" />
<span class="input-clear-button"></span>
</div>
</div>
@ -60,7 +60,7 @@
<div class="item-inner">
<div class="item-title item-floating-label">ZIP Code</div>
<div class="item-input-wrap">
<input type="text" id="zipcode" value="{{zipcode}}"/>
<input type="text" id="zipcode" placeholder="59601" value="{{zipcode}}" autocomplete="off" autocorrect="off" inputmode="numeric" />
<span class="input-clear-button"></span>
</div>
</div>
@ -102,12 +102,31 @@
</div>
</div>
</li>
<li class="padding">
By requesting a pickup, you confirm that you aren't sending any <a onclick="openBrowser('https://helena.express/articles/restricted-items')">restricted items</a>.
You agree that we can bill your saved payment method for the shipping cost.
You also confirm that you've filled out a destination address on each package and indicated
any desired options (signature, insurance, etc).
We recommend using free Helena Express shipping labels, available <a href="/shop">from the shop</a>.
<li>
<label class="item-checkbox item-content text-align-left">
<!-- Checkbox input -->
<input type="checkbox" id="prepaid-label-checkbox" />
<!-- Checkbox icon -->
<i class="icon icon-checkbox"></i>
<span class="item-inner no-line-after">
<span>Package has a prepaid return label (extra fees may apply to prepaid pickups)</span>
</span>
</label>
</li>
<li class="padding text-align-left">
<p>
By requesting a pickup, you confirm that your package(s) don't contain anything fragile, liquid, perishable
or potentially hazardous such as perfume, lithium batteries, mercury, or anything on
our <a onclick="openBrowser('https://helena.express/articles/restricted-items')">restricted items list</a>.
</p>
<p>
You agree that we can bill your saved payment method for the shipping cost.
<br />
You also confirm that you've filled out a destination address on each package and indicated
any desired options (signature, insurance, etc).
<br />
We recommend using free Helena Express shipping labels, available <a href="/shop">from the shop</a>.
</p>
</li>
<li class="padding">
<div class="button hapticbtn button-fill" onclick="requestPickup()"><i class="fa-regular fa-dolly"></i> Request Pickup</div>

@ -0,0 +1,73 @@
<!-- 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="postalpoint">
<div class="navbar">
<div class="navbar-bg"></div>
<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">PostalPoint Kiosk</div>
</div>
</div>
<div class="page-content noselect">
<div class="row justify-content-center">
<div class="col-100 medium-50 padding-top">
<div class="card">
<div class="card-body padding-top">
<!-- <div class="block text-align-center">
<img src="assets/images/mail-trailer.svg" class="margin" style="max-height: 20vh; max-width: 80%;" />
</div> -->
<div class="block margin-bottom" id="postalpoint-dyncontent">
Our network of PostalPoint kiosks are a quick and convenient way to
send mail and packages. Located in local businesses, our kiosks have an
easy to use touchscreen and a secure parcel drop. You pay the normal
USPS prices without markup or fees.
<br /><br />
Walk in, put your box on the scale, answer a few questions, tap your
card, and get a shipping label (with postage). Then just place your package
in the secure locker. The kiosk can print or email a receipt so you'll
have the tracking number.
</div>
<div class="block margin-bottom">
Don't like typing addresses on the kiosk? With Quick Send, you can type
right here instead! Tap the button below, then tap "Quick Send" on the kiosk.
</div>
<div class="block">
<div class="button" onclick='router.navigate("/quicksend");'>
Open Quick Send
</div>
</div>
</div>
</div>
</div>
<div class="col-100 medium-50">
<div class="block-title">Locations</div>
<div class="list media-list">
<ul>
{{#each locations}}
<li>
<a href="geo:{{geo}}" class="item-link item-content">
<div class="item-inner">
<div class="item-title-row">
<div class="item-title">{{name}}</div>
</div>
<div class="item-text">{{info}}</div>
<div class="item-text">{{hours}}</div>
</div>
</a>
</li>
{{/each}}
</ul>
</div>
</div>
</div>
</div>
</div>

@ -0,0 +1,577 @@
<!-- 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="address_qrcode">
<div class="navbar">
<div class="navbar-bg"></div>
<div class="navbar-inner">
<div class="left">
<a class="link back hapticbtn" href="#">
<i class="icon icon-back"></i>
<span class="if-not-md">Back</span>
</a>
</div>
<div class="title">Quick Send</div>
</div>
</div>
<div class="page-content">
<div class="row justify-content-center">
<div class="col-100 medium-90 margin-horizontal">
<div class="card margin">
<div class="card-content text-align-center padding">
For faster service, fill in this form and press Show Barcode, then scan the barcode that appears.
<br>
All fields are optional, but fill in as much as possible.
</div>
</div>
</div>
<div class="col-100 medium-90 margin-horizontal">
<div class="card margin">
<div class="card-content text-align-center" id="addresscodeform">
<div class="row">
<div class="col-100 medium-50 xlarge-33">
<div class="list">
<ul>
<li class="item-divider">Return Address:</li>
<li class="item-content item-input item-input-outline">
<div class="item-inner">
<div class="item-title item-floating-label">Name (or care of)</div>
<div class="item-input-wrap">
<input type="text" id="from_name" placeholder="" value="{{from_name}}" />
<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">Company (or name)</div>
<div class="item-input-wrap">
<input type="text" id="from_company" placeholder="" value="{{from_company}}" />
<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">Street Address</div>
<div class="item-input-wrap">
<input type="text" id="from_street1" placeholder="1234 Example Rd" value="{{from_street1}}" />
<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">Address Line 2</div>
<div class="item-input-wrap">
<input type="text" id="from_street2" placeholder="Apt 37" value="{{from_street2}}" />
<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">ZIP Code</div>
<div class="item-input-wrap">
<input type="text" id="from_zip" inputmode="numeric" value="{{from_zip}}" />
<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 Number</div>
<div class="item-input-wrap">
<input type="tel" id="from_phone" value="{{from_phone}}" />
<span class="input-clear-button"></span>
</div>
</div>
</li>
</ul>
</div>
</div>
<div class="col-100 medium-50 xlarge-33">
<div class="list">
<ul>
<li class="item-divider">To:</li>
<li class="item-content item-input item-input-outline">
<div class="item-inner">
<div class="item-title item-floating-label">Name (or care of)</div>
<div class="item-input-wrap">
<input type="text" id="to_name" placeholder="" />
<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">Company (or name)</div>
<div class="item-input-wrap">
<input type="text" id="to_company" placeholder="" />
<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">Street Address</div>
<div class="item-input-wrap">
<input type="text" id="to_street1" placeholder="987 Street Drive" />
<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">Address Line 2</div>
<div class="item-input-wrap">
<input type="text" id="to_street2" placeholder="Apt 37" />
<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" id="ziptext">ZIP Code</div>
<div class="item-input-wrap">
<input type="text" id="to_zip" inputmode="numeric" />
<span class="input-clear-button"></span>
</div>
<a href="#" class="popup-open" id="zipcodelookuplink" onclick="$('#ziplookup_address').val($('#to_street1').val());" data-popup="#zipLookupPopup">I don't know the ZIP Code</a>
</div>
</li>
<li class="item-content item-input item-input-outline citystateboxes" style="display: none;">
<div class="item-inner">
<div class="item-title item-floating-label">City</div>
<div class="item-input-wrap">
<input type="text" id="to_city" />
<span class="input-clear-button"></span>
</div>
</div>
</li>
<li class="item-content item-input item-input-outline citystateboxes" style="display: none;">
<div class="item-inner">
<div class="item-title item-floating-label">State/Province</div>
<div class="item-input-wrap">
<input type="text" id="to_state" />
<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">Country</div>
<div class="item-input-wrap input-dropdown-wrap">
<select id="to_country" name="to_country">
<option value="US" selected>United States of America</option>
<option value="AF">Afghanistan</option>
<option value="AX">Åland Islands</option>
<option value="AL">Albania</option>
<option value="DZ">Algeria</option>
<option value="AS">American Samoa</option>
<option value="AD">Andorra</option>
<option value="AO">Angola</option>
<option value="AI">Anguilla</option>
<option value="AQ">Antarctica</option>
<option value="AG">Antigua and Barbuda</option>
<option value="AR">Argentina</option>
<option value="AM">Armenia</option>
<option value="AW">Aruba</option>
<option value="AU">Australia</option>
<option value="AT">Austria</option>
<option value="AZ">Azerbaijan</option>
<option value="BS">Bahamas</option>
<option value="BH">Bahrain</option>
<option value="BD">Bangladesh</option>
<option value="BB">Barbados</option>
<option value="BY">Belarus</option>
<option value="BE">Belgium</option>
<option value="BZ">Belize</option>
<option value="BJ">Benin</option>
<option value="BM">Bermuda</option>
<option value="BT">Bhutan</option>
<option value="BO">Bolivia (Plurinational State of)</option>
<option value="BQ">Bonaire, Sint Eustatius and Saba</option>
<option value="BA">Bosnia and Herzegovina</option>
<option value="BW">Botswana</option>
<option value="BV">Bouvet Island</option>
<option value="BR">Brazil</option>
<option value="IO">British Indian Ocean Territory</option>
<option value="BN">Brunei Darussalam</option>
<option value="BG">Bulgaria</option>
<option value="BF">Burkina Faso</option>
<option value="BI">Burundi</option>
<option value="CV">Cabo Verde</option>
<option value="KH">Cambodia</option>
<option value="CM">Cameroon</option>
<option value="CA">Canada</option>
<option value="KY">Cayman Islands</option>
<option value="CF">Central African Republic</option>
<option value="TD">Chad</option>
<option value="CL">Chile</option>
<option value="CN">China</option>
<option value="CX">Christmas Island</option>
<option value="CC">Cocos (Keeling) Islands</option>
<option value="CO">Colombia</option>
<option value="KM">Comoros</option>
<option value="CG">Congo</option>
<option value="CD">Congo, Democratic Republic of the</option>
<option value="CK">Cook Islands</option>
<option value="CR">Costa Rica</option>
<option value="CI">Côte d'Ivoire</option>
<option value="HR">Croatia</option>
<option value="CU">Cuba</option>
<option value="CW">Curaçao</option>
<option value="CY">Cyprus</option>
<option value="CZ">Czechia</option>
<option value="DK">Denmark</option>
<option value="DJ">Djibouti</option>
<option value="DM">Dominica</option>
<option value="DO">Dominican Republic</option>
<option value="EC">Ecuador</option>
<option value="EG">Egypt</option>
<option value="SV">El Salvador</option>
<option value="GQ">Equatorial Guinea</option>
<option value="ER">Eritrea</option>
<option value="EE">Estonia</option>
<option value="SZ">Eswatini</option>
<option value="ET">Ethiopia</option>
<option value="FK">Falkland Islands (Malvinas)</option>
<option value="FO">Faroe Islands</option>
<option value="FJ">Fiji</option>
<option value="FI">Finland</option>
<option value="FR">France</option>
<option value="GF">French Guiana</option>
<option value="PF">French Polynesia</option>
<option value="TF">French Southern Territories</option>
<option value="GA">Gabon</option>
<option value="GM">Gambia</option>
<option value="GE">Georgia</option>
<option value="DE">Germany</option>
<option value="GH">Ghana</option>
<option value="GI">Gibraltar</option>
<option value="GR">Greece</option>
<option value="GL">Greenland</option>
<option value="GD">Grenada</option>
<option value="GP">Guadeloupe</option>
<option value="GU">Guam</option>
<option value="GT">Guatemala</option>
<option value="GG">Guernsey</option>
<option value="GN">Guinea</option>
<option value="GW">Guinea-Bissau</option>
<option value="GY">Guyana</option>
<option value="HT">Haiti</option>
<option value="HM">Heard Island and McDonald Islands</option>
<option value="VA">Holy See</option>
<option value="HN">Honduras</option>
<option value="HK">Hong Kong</option>
<option value="HU">Hungary</option>
<option value="IS">Iceland</option>
<option value="IN">India</option>
<option value="ID">Indonesia</option>
<option value="IR">Iran (Islamic Republic of)</option>
<option value="IQ">Iraq</option>
<option value="IE">Ireland</option>
<option value="IM">Isle of Man</option>
<option value="IL">Israel</option>
<option value="IT">Italy</option>
<option value="JM">Jamaica</option>
<option value="JP">Japan</option>
<option value="JE">Jersey</option>
<option value="JO">Jordan</option>
<option value="KZ">Kazakhstan</option>
<option value="KE">Kenya</option>
<option value="KI">Kiribati</option>
<option value="KP">Korea (Democratic People's Republic of)</option>
<option value="KR">Korea, Republic of</option>
<option value="KW">Kuwait</option>
<option value="KG">Kyrgyzstan</option>
<option value="LA">Lao People's Democratic Republic</option>
<option value="LV">Latvia</option>
<option value="LB">Lebanon</option>
<option value="LS">Lesotho</option>
<option value="LR">Liberia</option>
<option value="LY">Libya</option>
<option value="LI">Liechtenstein</option>
<option value="LT">Lithuania</option>
<option value="LU">Luxembourg</option>
<option value="MO">Macao</option>
<option value="MG">Madagascar</option>
<option value="MW">Malawi</option>
<option value="MY">Malaysia</option>
<option value="MV">Maldives</option>
<option value="ML">Mali</option>
<option value="MT">Malta</option>
<option value="MH">Marshall Islands</option>
<option value="MQ">Martinique</option>
<option value="MR">Mauritania</option>
<option value="MU">Mauritius</option>
<option value="YT">Mayotte</option>
<option value="MX">Mexico</option>
<option value="FM">Micronesia (Federated States of)</option>
<option value="MD">Moldova, Republic of</option>
<option value="MC">Monaco</option>
<option value="MN">Mongolia</option>
<option value="ME">Montenegro</option>
<option value="MS">Montserrat</option>
<option value="MA">Morocco</option>
<option value="MZ">Mozambique</option>
<option value="MM">Myanmar</option>
<option value="NA">Namibia</option>
<option value="NR">Nauru</option>
<option value="NP">Nepal</option>
<option value="NL">Netherlands</option>
<option value="NC">New Caledonia</option>
<option value="NZ">New Zealand</option>
<option value="NI">Nicaragua</option>
<option value="NE">Niger</option>
<option value="NG">Nigeria</option>
<option value="NU">Niue</option>
<option value="NF">Norfolk Island</option>
<option value="MK">North Macedonia</option>
<option value="MP">Northern Mariana Islands</option>
<option value="NO">Norway</option>
<option value="OM">Oman</option>
<option value="PK">Pakistan</option>
<option value="PW">Palau</option>
<option value="PS">Palestine, State of</option>
<option value="PA">Panama</option>
<option value="PG">Papua New Guinea</option>
<option value="PY">Paraguay</option>
<option value="PE">Peru</option>
<option value="PH">Philippines</option>
<option value="PN">Pitcairn</option>
<option value="PL">Poland</option>
<option value="PT">Portugal</option>
<option value="PR">Puerto Rico</option>
<option value="QA">Qatar</option>
<option value="RE">Réunion</option>
<option value="RO">Romania</option>
<option value="RU">Russian Federation</option>
<option value="RW">Rwanda</option>
<option value="BL">Saint Barthélemy</option>
<option value="SH">Saint Helena, Ascension and Tristan da Cunha</option>
<option value="KN">Saint Kitts and Nevis</option>
<option value="LC">Saint Lucia</option>
<option value="MF">Saint Martin (French part)</option>
<option value="PM">Saint Pierre and Miquelon</option>
<option value="VC">Saint Vincent and the Grenadines</option>
<option value="WS">Samoa</option>
<option value="SM">San Marino</option>
<option value="ST">Sao Tome and Principe</option>
<option value="SA">Saudi Arabia</option>
<option value="SN">Senegal</option>
<option value="RS">Serbia</option>
<option value="SC">Seychelles</option>
<option value="SL">Sierra Leone</option>
<option value="SG">Singapore</option>
<option value="SX">Sint Maarten (Dutch part)</option>
<option value="SK">Slovakia</option>
<option value="SI">Slovenia</option>
<option value="SB">Solomon Islands</option>
<option value="SO">Somalia</option>
<option value="ZA">South Africa</option>
<option value="GS">South Georgia and the South Sandwich Islands</option>
<option value="SS">South Sudan</option>
<option value="ES">Spain</option>
<option value="LK">Sri Lanka</option>
<option value="SD">Sudan</option>
<option value="SR">Suriname</option>
<option value="SJ">Svalbard and Jan Mayen</option>
<option value="SE">Sweden</option>
<option value="CH">Switzerland</option>
<option value="SY">Syrian Arab Republic</option>
<option value="TW">Taiwan, Province of China</option>
<option value="TJ">Tajikistan</option>
<option value="TZ">Tanzania, United Republic of</option>
<option value="TH">Thailand</option>
<option value="TL">Timor-Leste</option>
<option value="TG">Togo</option>
<option value="TK">Tokelau</option>
<option value="TO">Tonga</option>
<option value="TT">Trinidad and Tobago</option>
<option value="TN">Tunisia</option>
<option value="TR">Turkey</option>
<option value="TM">Turkmenistan</option>
<option value="TC">Turks and Caicos Islands</option>
<option value="TV">Tuvalu</option>
<option value="UG">Uganda</option>
<option value="UA">Ukraine</option>
<option value="AE">United Arab Emirates</option>
<option value="GB">United Kingdom of Great Britain and Northern Ireland</option>
<option value="US">United States of America</option>
<option value="UM">United States Minor Outlying Islands</option>
<option value="UY">Uruguay</option>
<option value="UZ">Uzbekistan</option>
<option value="VU">Vanuatu</option>
<option value="VE">Venezuela (Bolivarian Republic of)</option>
<option value="VN">Viet Nam</option>
<option value="VG">Virgin Islands (British)</option>
<option value="VI">Virgin Islands (U.S.)</option>
<option value="WF">Wallis and Futuna</option>
<option value="EH">Western Sahara</option>
<option value="YE">Yemen</option>
<option value="ZM">Zambia</option>
<option value="ZW">Zimbabwe</option>
</select>
</div>
</div>
</li>
<li class="item-content item-input item-input-outline">
<div class="item-inner">
<div class="item-title item-floating-label">Phone Number</div>
<div class="item-input-wrap">
<input type="tel" id="to_phone" />
<span class="input-clear-button"></span>
</div>
</div>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="card-content-padding">
<div class="button hapticbtn button-fill" onclick="showAddressQRCode()"><i class="fa-regular fa-qrcode"></i> Show Barcode</div>
</div>
</div>
</div>
</div>
</div>
<div class="popup" id="qrCodePopup">
<div class="block text-align-center">
<span style="padding: 20px; background-color: white; display: inline-block;">
<img id="addresscode-barcode" style="max-width: 90%;" />
</span>
<p><a class="button popup-close" href="#">Close</a></p>
</div>
</div>
<div class="popup" id="zipLookupPopup">
<div class="navbar">
<div class="navbar-bg"></div>
<div class="navbar-inner">
<div class="left">
<a class="link popup-close" href="#">
<i class="icon icon-back"></i>
<span class="if-not-md">Close</span>
</a>
</div>
<div class="title">ZIP Code Lookup</div>
</div>
</div>
<div class="list margin-bottom-half margin-top-half">
<ul>
<li class="item-content item-input">
<div class="item-inner">
<div class="item-title item-label">Address</div>
<div class="item-input-wrap">
<input type="text" id="ziplookup_address" placeholder="123 Example St"/>
<span class="input-clear-button"></span>
</div>
</div>
</li>
<li class="item-content item-input">
<div class="item-inner">
<div class="item-title item-label">City</div>
<div class="item-input-wrap">
<input type="text" id="ziplookup_city" placeholder="Helena"/>
<span class="input-clear-button"></span>
</div>
</div>
</li>
<li class="item-content item-input">
<div class="item-inner">
<div class="item-title item-label">State/Territory</div>
<div class="item-input-wrap">
<select id="ziplookup_state">
<option value=""></option>
<optgroup label="States">
<option value="AL">Alabama</option>
<option value="AK">Alaska</option>
<option value="AZ">Arizona</option>
<option value="AR">Arkansas</option>
<option value="CA">California</option>
<option value="CO">Colorado</option>
<option value="CT">Connecticut</option>
<option value="DC">District of Columbia/Washington D.C.</option>
<option value="DE">Delaware</option>
<option value="FL">Florida</option>
<option value="GA">Georgia</option>
<option value="HI">Hawaii</option>
<option value="ID">Idaho</option>
<option value="IL">Illinois</option>
<option value="IN">Indiana</option>
<option value="IA">Iowa</option>
<option value="KS">Kansas</option>
<option value="KY">Kentucky</option>
<option value="LA">Louisiana</option>
<option value="ME">Maine</option>
<option value="MD">Maryland</option>
<option value="MA">Massachusetts</option>
<option value="MI">Michigan</option>
<option value="MN">Minnesota</option>
<option value="MS">Mississippi</option>
<option value="MO">Missouri</option>
<option value="MT">Montana</option>
<option value="NE">Nebraska</option>
<option value="NV">Nevada</option>
<option value="NH">New Hampshire</option>
<option value="NJ">New Jersey</option>
<option value="NM">New Mexico</option>
<option value="NY">New York</option>
<option value="NC">North Carolina</option>
<option value="ND">North Dakota</option>
<option value="OH">Ohio</option>
<option value="OK">Oklahoma</option>
<option value="OR">Oregon</option>
<option value="PA">Pennsylvania</option>
<option value="RI">Rhode Island</option>
<option value="SC">South Carolina</option>
<option value="SD">South Dakota</option>
<option value="TN">Tennessee</option>
<option value="TX">Texas</option>
<option value="UT">Utah</option>
<option value="VT">Vermont</option>
<option value="VA">Virginia</option>
<option value="WA">Washington</option>
<option value="WV">West Virginia</option>
<option value="WI">Wisconsin</option>
<option value="WY">Wyoming</option>
</optgroup>
<optgroup label="Military">
<option value="AE">AE: Europe, Middle East, Canada</option>
<option value="AP">AP: Pacific</option>
<option value="AA">AA: Americas (except Canada)</option>
</optgroup>
<optgroup label="Territories">
<option value="AS">American Samoa</option>
<option value="GU">Guam</option>
<option value="MP">Northern Mariana Islands</option>
<option value="PR">Puerto Rico</option>
<option value="VI">U.S. Virgin Islands</option>
</optgroup>
<optgroup label="Freely Associated States">
<option value="FM">Federated States of Micronesia</option>
<option value="MH">Marshall Islands</option>
<option value="PW">Palau</option>
</optgroup>
</select>
</div>
</div>
</li>
<li class="item-content">
<div class="button hapticbtn button-fill" onclick="doZipCodeLookup($('#ziplookup_address').val(), $('#ziplookup_city').val(), $('#ziplookup_state').val());">
<i class="fa-solid fa-search"></i> Find ZIP Code
</div>
</li>
</ul>
</div>
</div>
</div>

@ -373,8 +373,6 @@
<option value="MediumFlatRateBox">USPS Medium Flat Rate Box</option>
<option value="LargeFlatRateBox">USPS Large Flat Rate Box</option>
<option value="LargeFlatRateBoxAPOFPO">USPS Large Flat Rate Box APO/FPO</option>
<option value="RegionalRateBoxA">USPS Regional Rate Box A</option>
<option value="RegionalRateBoxB">USPS Regional Rate Box B</option>
</optgroup>
<optgroup label="UPS">
<option value="UPSLetter">UPS Letter</option>

@ -62,7 +62,7 @@
<div class="title">Receipt</div>
</div>
</div>
<iframe id="receiptvieweriframe"></iframe>
<iframe id="receiptvieweriframe" onload="receiptiframeloadevent()"></iframe>
</div>
</div>

@ -23,7 +23,7 @@
<div class="row justify-content-center">
{{#each pages}}
<div class="col-100 small-50 large-33 no-margin-vertical">
<div class="card hapticbtn pointercursor" onclick="router.navigate('{{href}}');">
<div class="card hapticbtn pointercursor margin-half" onclick="router.navigate('{{href}}');">
<div class="card-content text-align-center padding">
<h1 class="no-margin"><i class="{{icon}}"></i></h1>
<br />

@ -28,7 +28,7 @@
<li>
<div class="block text-align-center">
<img src="assets/images/telegram.svg" class="margin" style="max-height: 20vh; max-width: 80%;" />
<p class="margin">
<p class="margin" id="telegram-dyncontent">
Send a telegram with Helena Express for $15.
We'll hand-deliver your message to anywhere in Helena, East Helena, Montana City, the Helena Valley, and the hills around Helena.
</p>

@ -30,7 +30,7 @@
{{#if map.enabled}}
<div class="col-100 large-50 xlarge-50">
<div class="no-margin-vertical-md tablet-inset elevation-tablet display-flex align-items-stretch" id="trackMapContainer">
<div class="mapbox" style="width: 100%; height: 100%;" id="mapbox-track" data-latitude="{{map.latitude}}" data-longitude="{{map.longitude}}" data-accurate="{{map.accurate}}"></div>
<div class="mapbox" style="width: 100%; height: 100%;" id="mapbox-track" data-latitude="{{map.latitude}}" data-longitude="{{map.longitude}}" data-accurate="{{map.accurate}}" data-geoiscountrylevel="{{map.geoiscountrylevel}}"></div>
</div>
</div>
{{/if}}
@ -57,7 +57,7 @@
<div class="item-content item-link hapticbtn" onclick='openExternalBrowser("{{carrierurl}}");'>
<div class="item-inner">
<div class="item-title">
<i class="fa-regular fa-external-link"></i> More Info
<i class="fa-regular fa-arrow-up-right-from-square"></i> More Info
</div>
</div>
</div>

@ -0,0 +1,73 @@
<!-- 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="trailer">
<div class="navbar">
<div class="navbar-bg"></div>
<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">Mobile Shipping Center</div>
</div>
</div>
<div class="page-content noselect">
<div class="row justify-content-center">
<div class="col-100 medium-50 padding-top">
<div class="card">
<div class="card-body padding-top">
<div class="block text-align-center">
<img src="assets/images/mail-trailer.svg" class="margin" style="max-height: 20vh; max-width: 80%;" />
</div>
<div class="block margin-bottom" id="trailer-dyncontent">
Our Mobile Shipping Center is a specialized trailer equipped to offer mailing,
shipping, notarizing, copying, and faxing services. With no markup or extra fees,
it's a good way to save money and skip the line at the post office.
</div>
<div class="block">
<div class="button" onclick='openExternalBrowser("https://helena.express/mobile");'>
Learn More &nbsp;<i class="fa-regular fa-arrow-up-right-from-square"></i>
</div>
</div>
<div class="block margin-bottom">
Use Quick Send for faster service! Just enter the address info for your package ahead of time then show us your phone screen.
</div>
<div class="block">
<div class="button" onclick='router.navigate("/quicksend");'>
Open Quick Send
</div>
</div>
</div>
</div>
</div>
<div class="col-100 medium-50">
<div class="block-title">Schedule</div>
<div class="list media-list">
<ul>
{{#each schedule}}
<li>
<a href="geo:{{geo}}" class="item-link item-content">
<div class="item-inner">
<div class="item-title-row">
<div class="item-title">{{date}}</div>
</div>
<div class="item-subtitle">{{time}}</div>
<div class="item-text">{{location}}</div>
</div>
</a>
</li>
{{/each}}
</ul>
</div>
</div>
</div>
</div>
</div>

@ -4,6 +4,11 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
var dynamicPages = [
"notary",
"telegram",
"trailer"
];
var compiledPages = {};
var pagesToCompile = [
"home",
@ -17,12 +22,14 @@ var pagesToCompile = [
"shop",
"shoppingcart_fragment",
"rateresult",
"crypto",
"crypto_wallet",
"account",
"trackresult",
"settings",
"receipts"
"receipts",
"trailer",
"kiosk",
"locations",
"quicksend"
];
console.log("Compiling page templates...");
for (var i = 0; i < pagesToCompile.length; i++) {
@ -45,82 +52,6 @@ var routes = [
}
}
},
{
path: '/crypto',
name: 'crypto',
async: function ( {resolve, reject}) {
resolve({
content: compiledPages.crypto({
slideshow: [
{
image: "assets/images/crypto/slides/intro.svg",
text: "Bitcoin and cryptocurrency can be complicated. We've made it simple. Swipe left for more."
},
{
image: "assets/images/crypto/slides/vault.svg",
text: "With your Helena Express paper wallet, you can save..."
},
{
image: "assets/images/crypto/slides/spend.svg",
text: "...or spend, without worrying about hackers..."
},
{
image: "assets/images/crypto/slides/secure.svg",
text: "...because paper can't be hacked."
},
{
image: "assets/images/crypto/slides/scantostart.svg",
text: "Scan your paper wallet to get started, or order one in the shop."
}
]
})
}, {});
},
on: {
pageAfterIn: function () {
app.swiper.destroy("#crypto-intro-swiper");
app.swiper.create("#crypto-intro-swiper", {
pagination: {
el: "#crypto-intro-swiper-pagination",
type: "bullets",
clickable: true
}
});
}
}
},
{
path: '/crypto/:walletaddress/:toaddress',
async: openWalletBalancePage,
name: 'crypto_wallet',
on: {
pageAfterIn: function () {
$("#sendCryptoOpenPopupBtn").click();
setupReceiveFiatConversion();
}
}
},
{
path: '/crypto/:walletaddress/:toaddress/:amount',
async: openWalletBalancePage,
name: 'crypto_wallet',
on: {
pageAfterIn: function () {
$("#sendCryptoOpenPopupBtn").click();
setupReceiveFiatConversion();
}
}
},
{
path: '/crypto/:walletaddress',
async: openWalletBalancePage,
name: 'crypto_wallet',
on: {
pageAfterIn: function () {
setupReceiveFiatConversion();
}
}
},
{
path: '/home',
name: 'home',
@ -151,7 +82,7 @@ var routes = [
title: "Send a Package",
href: "/send",
icon: "fa-duotone fa-box-alt",
text: "Find a drop box or schedule a pickup."
text: "Find locations or request a pickup."
},
{
title: "Notarize a Document",
@ -160,10 +91,10 @@ var routes = [
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: "Locations",
href: "/locations",
icon: "fa-duotone fa-map-location-dot",
text: "Find a shipping kiosk or drop box near you."
},
{
title: "Shop for Supplies",
@ -172,17 +103,17 @@ var routes = [
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: "Write a Telegram",
href: "/telegram",
icon: "fa-duotone fa-typewriter",
text: "Send a hand-delivered telegram anywhere in the Helena area."
},
{
title: "My Account",
href: "/account",
icon: "fa-duotone fa-user-circle",
text: "Get account number, check rewards points, update payment method, and more."
},
text: "View receipts, get account number, update payment method, and more."
}
]
})
}, {});
@ -196,22 +127,34 @@ var routes = [
content: compiledPages.send({
pages: [
{
title: "Use a Drop Box",
href: "/dropandsend",
title: "Self-Serve Kiosk",
href: "/kiosk",
icon: "fa-duotone fa-display",
text: "Visit a friendly neighborhood PostalPoint™ shipping kiosk to send mail and packages with no lines or hassle."
},
{
title: "Drop Box",
href: "/das",
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."
text: "Just drop your package into a Drop and Send℠ drop box and scan the QR code. We'll charge the postage to your Helena Express account."
},
{
title: "Request a Pickup",
title: "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",
title: "Appointment",
href: "/appointment/shipping",
icon: "fa-duotone fa-calendar-alt",
text: "A courier will come to you on your schedule. No account required."
text: "We'll come to your home or business on your schedule. It's like a post office in your driveway!"
},
{
title: "Mobile Shipping Center",
href: "/mobile",
icon: "fa-duotone fa-caravan",
text: "Our Mobile Shipping Center is a specially-designed trailer for printing postage, shipping mail and packages, and more."
}
]
})
@ -223,6 +166,12 @@ var routes = [
content: compiledPages.notary(),
name: 'notary',
on: {
pageBeforeIn: function () {
dyncontent = getDynamicPageContent("notary");
if (dyncontent != null) {
$("#notary-dyncontent").html(dyncontent);
}
},
pageAfterIn: function () {
app.swiper.destroy("#notary-info-swiper");
app.swiper.create("#notary-info-swiper", {
@ -235,6 +184,19 @@ var routes = [
}
}
},
{
path: '/locations',
content: compiledPages.locations(),
name: 'locations',
on: {
pageAfterIn: function () {
loadLocationMap();
},
pageAfterOut: function () {
locationMap = null;
}
}
},
{
path: '/servicearea',
content: compiledPages.servicearea(),
@ -248,6 +210,22 @@ var routes = [
}
}
},
{
path: '/quicksend',
name: 'quicksend',
async: function ( {resolve}) {
resolve({
content: compiledPages.quicksend({
from_name: inStorage("quicksend_name") ? getStorage("quicksend_name") : "",
from_company: inStorage("quicksend_company") ? getStorage("quicksend_company") : "",
from_street1: inStorage("quicksend_street1") ? getStorage("quicksend_street1") : (inStorage("lastpickupaddress") ? getStorage("lastpickupaddress") : ""),
from_street2: inStorage("quicksend_street2") ? getStorage("quicksend_street2") : "",
from_zip: inStorage("quicksend_zip") ? getStorage("quicksend_zip") : (inStorage("lastpickupzipcode") ? getStorage("lastpickupzipcode") : ""),
from_phone: inStorage("quicksend_phone") ? getStorage("quicksend_phone") : ""
})
}, {});
},
},
{
path: '/appointment',
name: 'appointment',
@ -292,7 +270,7 @@ var routes = [
]
},
{
path: '/dropandsend',
path: '/das',
name: 'dropandsend',
content: compiledPages.dropandsend(),
on: {
@ -312,7 +290,7 @@ var routes = [
break;
}
var hourofday = formatTimestamp("H");
if (hourofday > 12 + 4) {
if (hourofday > 12 + 3) {
$("#pickupLateInDayWarning").css("display", "");
}
},
@ -321,6 +299,48 @@ var routes = [
}
}
},
{
path: '/postalpoint',
name: 'postalpoint',
async: function ( {resolve, reject}) {
app.dialog.preloader("Loading...");
apirequest(SETTINGS.apis.postalpoint_locations, [], function (resp) {
app.dialog.close();
var locations = [];
for (var i = 0; i < resp.features.length; i++) {
locations.push({
name: resp.features[i].properties.name,
info: resp.features[i].properties.info,
hours: resp.features[i].properties.hours,
geo: resp.features[i].geometry.coordinates[1] + "," + resp.features[i].geometry.coordinates[0]
});
}
resolve({
content: compiledPages.postalpoint({
locations: locations
})
}, {});
}, function (error) {
app.dialog.close();
app.dialog.alert("Couldn't download the list of PostalPoint locations. Try again later.", "Whoops!");
sendErrorReport("PostalPoint", "Loading locations");
resolve({
content: compiledPages.postalpoint({
locations: []
})
}, {});
}, "GET");
},
on: {
pageBeforeIn: function () {
dyncontent = getDynamicPageContent("postalpoint");
if (dyncontent != null) {
$("#postalpoint-dyncontent").html(dyncontent);
}
}
}
},
{
path: '/pickup',
name: 'pickup',
@ -372,6 +392,85 @@ var routes = [
}
}
},
{
path: '/mobile',
name: 'trailer',
async: function ( {resolve, reject}) {
app.dialog.preloader("Checking the schedule...");
apirequest(SETTINGS.apis.trailerschedule, [], function (resp) {
app.dialog.close();
resolve({
content: compiledPages.trailer({
schedule: resp
})
}, {});
}, function (error) {
app.dialog.close();
app.dialog.alert("Couldn't get the latest schedule. Try again later.", "Whoops!");
sendErrorReport("Trailer", "Loading schedule");
resolve({
content: compiledPages.trailer({
schedule: []
})
}, {});
}, "GET");
},
on: {
pageBeforeIn: function () {
dyncontent = getDynamicPageContent("trailer");
if (dyncontent != null) {
$("#trailer-dyncontent").html(dyncontent);
}
}
}
},
{
path: '/kiosk',
name: 'kiosk',
async: function ( {resolve, reject}) {
app.dialog.preloader("Loading...");
apirequest(SETTINGS.apis.locations, [], function (resp) {
app.dialog.close();
var kioskLocations = [];
for (var i = 0; i < resp.features.length; i++) {
if (resp.features[i].properties.branding != "PP") {
continue;
}
kioskLocations.push({
name: resp.features[i].properties.name,
hours: resp.features[i].properties.hours,
info: resp.features[i].properties.info,
geo: "geo:" + (Math.round(resp.features[i].geometry.coordinates[1] * 1000000) / 1000000) + "," + (Math.round(resp.features[i].geometry.coordinates[0] * 1000000) / 1000000)
});
}
resolve({
content: compiledPages.kiosk({
locations: kioskLocations
})
}, {});
}, function (error) {
app.dialog.close();
app.dialog.alert("Couldn't get the kiosk locations. Try again later.", "Whoops!");
sendErrorReport("Kiosks", "Loading locations");
resolve({
content: compiledPages.kiosk({
locations: []
})
}, {});
}, "GET");
},
on: {
pageBeforeIn: function () {
dyncontent = getDynamicPageContent("kiosk");
if (dyncontent != null) {
$("#kiosk-dyncontent").html(dyncontent);
}
}
}
},
{
path: '/telegram',
name: 'telegram',
@ -385,6 +484,10 @@ var routes = [
}, function (error) {
$("#addPaymentMethodNag").css("display", "");
});
dyncontent = getDynamicPageContent("telegram");
if (dyncontent != null) {
$("#telegram-dyncontent").html(dyncontent);
}
}
}
},
@ -433,7 +536,8 @@ var routes = [
var latitude = $(mapboxel).data("latitude");
var longitude = $(mapboxel).data("longitude");
var accurate = $(mapboxel).data("accurate") == true;
trackingMap.clearMarkersAndCenterMapOnNewMarker("package-marker", latitude, longitude, accurate);
var geoiscountrylevel = $(mapboxel).data("geoiscountrylevel") == true;
trackingMap.clearMarkersAndCenterMapOnNewMarker("package-marker", latitude, longitude, accurate, geoiscountrylevel);
}
}
},
@ -501,7 +605,7 @@ var routes = [
{
setting: "versions",
title: "Helena Express app v" + app_version,
text: "Copyright &copy; 2019-2022 Helena Express and Netsyms Technologies.",
text: "Copyright &copy; 2019-2023 Helena Express and Netsyms Technologies.",
onclick: ""
},
{

@ -6,47 +6,48 @@
var SETTINGS = {
apis: {
// Dynamic text content updater
dynamicappcontent: "https://apis.helena.express/v1/dynamicappcontent/",
// Tracking
track: "http://localhost/helena.express/apis/track/",
trackmultiple: "http://localhost/helena.express/apis/trackmultiple/",
track: "https://apis.helena.express/v1/track/",
trackmultiple: "https://apis.helena.express/v1/trackmultiple/",
// Shipping rates
rates: "http://localhost/helena.express/apis/rates/",
rates: "https://apis.helena.express/v1/rates/",
// ZIP Code lookup
zipcodelookup: "http://localhost/helena.express/apis/zipcodelookup/",
zipcodelookup: "https://apis.helena.express/v1/zipcodelookup/",
// Get appointment iframe URL
appointmentredirect: "http://localhost/helena.express/apis/appointmentredirect/",
appointmentredirect: "https://apis.helena.express/v1/appointmentredirect/",
// Request home pickup
requestpickup: "http://localhost/helena.express/apis/requestpickup/",
requestpickup: "https://apis.helena.express/v1/requestpickup/",
// Drop and Send
dropandsendlocations: "http://localhost/helena.express/apis/dropandsend/locations/",
dropandsendpickup: "http://localhost/helena.express/apis/dropandsend/requestpickup/",
dropandsendlocations: "https://apis.helena.express/v1/dropandsend/locations/",
dropandsendpickup: "https://apis.helena.express/v1/dropandsend/requestpickup/",
// Fetch account data
getaccountinfo: "http://localhost/helena.express/apis/account/getinfo/",
getaccountinfo: "https://apis.helena.express/v1/account/getinfo/",
// Fetch tracking numbers associated with account
gettrackingnumbers: "http://localhost/helena.express/apis/account/gettrackingnumbers/",
gettrackingnumbers: "https://apis.helena.express/v1/account/gettrackingnumbers/",
// Account login/registration/onboarding endpoints
authorstartverify: "http://localhost/helena.express/apis/account/authorstartverify/",
verifyauthcode: "http://localhost/helena.express/apis/account/verifyauthcode/",
accountregister: "http://localhost/helena.express/apis/account/register/",
authorstartverify: "https://apis.helena.express/v1/account/authorstartverify/",
verifyauthcode: "https://apis.helena.express/v1/account/verifyauthcode/",
accountregister: "https://apis.helena.express/v1/account/register/",
// Setup saved payment method
redirecttopaymentsetup: "http://localhost/helena.express/apis/account/redirecttopaymentsetup/",
finishpaymentsetup: "http://localhost/helena.express/apis/account/finishpaymentsetup/",
redirecttopaymentsetup: "https://apis.helena.express/v1/account/redirecttopaymentsetup/",
finishpaymentsetup: "https://apis.helena.express/v1/account/finishpaymentsetup/",
// Send a telegram message
sendtelegram: "http://localhost/helena.express/apis/telegram",
sendtelegram: "https://apis.helena.express/v1/telegram/",
// Fetch shop items
shopitems: "http://localhost/helena.express/apis/shop/items",
shopitems: "https://apis.helena.express/v1/shop/items/",
// Create a shop order
shopbuy: "http://localhost/helena.express/apis/shop/buy",
shopbuy: "https://apis.helena.express/v1/shop/buy/",
// Get receipts linked with account
getreceipts: "http://localhost/helena.express/apis/account/getreceipts",
getreceipt: "http://localhost/helena.express/apis/account/getreceipt",
// Crypto: check balance and send transactions
walletbalance: "http://localhost/helena.express/apis/crypto/walletbalance",
getutxo: "http://localhost/helena.express/apis/crypto/getutxo",
broadcasttransaction: "http://localhost/helena.express/apis/crypto/broadcasttransaction",
cryptofees: "http://localhost/helena.express/apis/crypto/fees",
getreceipts: "https://apis.helena.express/v1/account/getreceipts/",
getreceipt: "https://apis.helena.express/v1/account/getreceipt/",
// Service area map
servicearea: "http://localhost/helena.express/apis/servicearea"
servicearea: "https://apis.helena.express/v1/servicearea/",
// Trailer schedule/dates/times/locations
trailerschedule: "https://helena.express/mobile/schedule.json",
// Physical locations
locations: "https://apis.helena.express/v1/locations/"
},
stripe_pubkey: "pk_test_51J6qFXCa1Fboir5UzPO3LCiMsVNiFP2lq4wR0dEcjJJVzAaJ3uRggDekZPB3qeYpMD3ayIYHKyD5sSn0IFLlEXMW001LqrvGSH",
branding: {

Loading…
Cancel
Save