You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
277 lines
8.2 KiB
JavaScript
277 lines
8.2 KiB
JavaScript
/*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*/
|
|
|
|
var platform_type = "";
|
|
|
|
var platform_theme = "md";
|
|
|
|
var app_version = "unknown";
|
|
|
|
var nw_tray = null;
|
|
|
|
/**
|
|
* If true and animations are set to "auto", animations should be disabled.
|
|
* @type Boolean
|
|
*/
|
|
var auto_disable_animations = false;
|
|
|
|
var cordovaInAppBrowserRef = null;
|
|
|
|
var openBrowser = function (url) {
|
|
window.open(url);
|
|
};
|
|
|
|
var closeBrowser = function () {
|
|
// stub
|
|
};
|
|
|
|
var openExternalBrowser = function (url) {
|
|
window.open(url);
|
|
};
|
|
|
|
var doHapticFeedback = function () {
|
|
console.log("Haptics not enabled.");
|
|
};
|
|
|
|
var appTheme = "light";
|
|
|
|
var getLocation = function (success, error) {
|
|
if ("geolocation" in navigator) {
|
|
navigator.geolocation.getCurrentPosition(function (position) {
|
|
success(position);
|
|
}, function (err) {
|
|
if (typeof error == "function") {
|
|
error(err.message);
|
|
}
|
|
}, {
|
|
enableHighAccuracy: true,
|
|
timeout: 5000,
|
|
maximumAge: 0
|
|
});
|
|
} else {
|
|
if (typeof error == "function") {
|
|
error("Location is unavailable.");
|
|
}
|
|
}
|
|
};
|
|
|
|
var openGeoLink = function (href) {
|
|
if (platform_type == "cordova") {
|
|
if (cordova.platformId == "ios") {
|
|
window.open(href.replace("geo:", "http://maps.apple.com/?q="), "_system");
|
|
} else if (cordova.platformId == "android") {
|
|
window.open(href.replace("geo:", "geo:0,0?q="), "_system");
|
|
} else {
|
|
window.open(href, "_system");
|
|
}
|
|
} else if (platform_type == "nw") {
|
|
require('nw.gui').Shell.openExternal(href);
|
|
} else {
|
|
window.open(href, "_blank");
|
|
}
|
|
};
|
|
|
|
var copyToClipboard = function (text, callback) {
|
|
navigator.clipboard.writeText(text).then(() => {
|
|
if (typeof callback == "function") {
|
|
callback();
|
|
}
|
|
});
|
|
};
|
|
|
|
|
|
function initCordova() {
|
|
platform_type = "cordova";
|
|
|
|
// Handle back button to close things
|
|
document.addEventListener("backbutton", handleBackButton, false);
|
|
document.addEventListener("deviceready", function () {
|
|
// Make sure the status bar color is set properly
|
|
applyColorTheme();
|
|
|
|
if (typeof device != "undefined" && device.platform == "Android") {
|
|
doHapticFeedback = function () {
|
|
window.plugins.deviceFeedback.acoustic();
|
|
}
|
|
}
|
|
|
|
cordova.plugins.ThemeDetection.isAvailable(function (resp) {
|
|
if (resp.value == true) {
|
|
cordova.plugins.ThemeDetection.isDarkModeEnabled(function (resp) {
|
|
if (resp.value == true) {
|
|
appTheme = "dark";
|
|
} else {
|
|
appTheme = "light";
|
|
}
|
|
applyColorTheme();
|
|
}, function (err) {});
|
|
}
|
|
}, function (err) {});
|
|
|
|
window.htmlopen = window.open;
|
|
window.open = cordova.InAppBrowser.open;
|
|
|
|
openBrowser = function (url, options, onclose, onmessage) {
|
|
if (typeof options == "undefined") {
|
|
options = "location=yes";
|
|
}
|
|
cordovaInAppBrowserRef = cordova.InAppBrowser.open(url, "_blank", options);
|
|
if (typeof onclose == "function") {
|
|
try {
|
|
cordovaInAppBrowserRef.removeEventListener("exit");
|
|
} catch (ex) {
|
|
}
|
|
cordovaInAppBrowserRef.addEventListener("exit", onclose);
|
|
}
|
|
if (typeof onmessage == "function") {
|
|
try {
|
|
cordovaInAppBrowserRef.removeEventListener("message");
|
|
} catch (ex) {
|
|
}
|
|
cordovaInAppBrowserRef.addEventListener("message", onmessage);
|
|
}
|
|
}
|
|
|
|
closeBrowser = function () {
|
|
if (typeof cordovaInAppBrowserRef != null) {
|
|
cordovaInAppBrowserRef.close();
|
|
}
|
|
}
|
|
|
|
openExternalBrowser = function (url) {
|
|
window.open(url, '_system', '');
|
|
}
|
|
|
|
IonicDeeplink.onDeepLink(function (link) {
|
|
if (link.host != "fixphrase.com") {
|
|
return;
|
|
}
|
|
// Wait a bit so the home page has time to load first.
|
|
setTimeout(function () {
|
|
if (link.fragment) {
|
|
var hash = link.fragment;
|
|
if (/^-?[0-9]{1,2}\.?[0-9]*,-?[0-9]{1,3}\.?[0-9]*$/.test(hash)) {
|
|
var lat = hash.split(",")[0];
|
|
var lon = hash.split(",")[1];
|
|
lat = (Math.round(lat * 10000) / 10000);
|
|
lon = (Math.round(lon * 10000) / 10000);
|
|
lookupAndShowCoords(lat, lon);
|
|
} else if (/^[a-z]+\-[a-z]+\-?[a-z]+?\-?[a-z]+?$/.test(hash)) {
|
|
var words = hash.replaceAll("-", " ");
|
|
dolookup(words);
|
|
$("#wordbox").val(words);
|
|
} else if (/^[a-z]+\ [a-z]+\ ?[a-z]+?\ ?[a-z]+?$/.test(decodeURI(hash))) {
|
|
var words = decodeURI(hash);
|
|
dolookup(words);
|
|
}
|
|
}
|
|
}, 1000);
|
|
});
|
|
}, false);
|
|
|
|
// Handle geo: urls
|
|
$("body").on("click", "a[href^='geo:']", function (evt) {
|
|
openGeoLink($(this).attr("href"));
|
|
evt.preventDefault();
|
|
});
|
|
|
|
copyToClipboard = function (text, callback) {
|
|
cordova.plugins.clipboard.copy(text, function () {
|
|
if (typeof callback == "function") {
|
|
callback();
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
function initNW() {
|
|
platform_type = "nw";
|
|
platform_theme = "md";
|
|
openBrowser = function (url) {
|
|
nw.Window.open(url, {
|
|
id: url
|
|
}, function (browserwin) {
|
|
// Add menubar so the user can navigate around if they click a link
|
|
var browsermenu = new nw.Menu({type: 'menubar'});
|
|
browsermenu.append(new nw.MenuItem({
|
|
label: "Back",
|
|
click: function () {
|
|
browserwin.window.history.back();
|
|
}
|
|
}));
|
|
browsermenu.append(new nw.MenuItem({
|
|
label: "Forward",
|
|
click: function () {
|
|
browserwin.window.history.forward();
|
|
}
|
|
}));
|
|
browsermenu.append(new nw.MenuItem({
|
|
label: "Home",
|
|
click: function () {
|
|
browserwin.window.location.href = url;
|
|
}
|
|
}));
|
|
browserwin.menu = browsermenu;
|
|
});
|
|
}
|
|
|
|
openExternalBrowser = function (url) {
|
|
require('nw.gui').Shell.openExternal(url);
|
|
}
|
|
|
|
// Handle geo: urls
|
|
$("body").on("click", "a[href^='geo:']", function (evt) {
|
|
openGeoLink($(this).attr("href"));
|
|
evt.preventDefault();
|
|
});
|
|
|
|
// automatic theme, default light
|
|
if (typeof Framework7.device.prefersColorScheme() !== 'undefined' && Framework7.device.prefersColorScheme() == "dark") {
|
|
appTheme = "dark";
|
|
} else {
|
|
appTheme = "light";
|
|
}
|
|
applyColorTheme();
|
|
}
|
|
|
|
function initBrowser() {
|
|
platform_type = "browser";
|
|
platform_theme = "md";
|
|
openBrowser = function (url) {
|
|
window.open(url);
|
|
}
|
|
|
|
openExternalBrowser = function (url) {
|
|
window.open(url);
|
|
}
|
|
|
|
$("body").on("click", "a[href^='geo:']", function (evt) {
|
|
openGeoLink($(this).attr("href"));
|
|
evt.preventDefault();
|
|
});
|
|
|
|
// automatic theme, default light
|
|
if (typeof Framework7.device.prefersColorScheme() !== 'undefined' && Framework7.device.prefersColorScheme() == "dark") {
|
|
appTheme = "dark";
|
|
} else {
|
|
appTheme = "light";
|
|
}
|
|
applyColorTheme();
|
|
}
|
|
|
|
function initPlatform() {
|
|
if (typeof cordova !== 'undefined') {
|
|
initCordova();
|
|
} else if (typeof nw !== 'undefined') {
|
|
initNW();
|
|
} else {
|
|
initBrowser();
|
|
}
|
|
|
|
$.getJSON("package.json", function (data) {
|
|
app_version = data.version;
|
|
});
|
|
} |