aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/assets/javascripts/helpers/maps.js178
-rw-r--r--src/assets/javascripts/helpers/maps.js.backup274
-rw-r--r--src/pages/background/background.js4
3 files changed, 353 insertions, 103 deletions
diff --git a/src/assets/javascripts/helpers/maps.js b/src/assets/javascripts/helpers/maps.js
index c340557d..582a70d4 100644
--- a/src/assets/javascripts/helpers/maps.js
+++ b/src/assets/javascripts/helpers/maps.js
@@ -1,3 +1,5 @@
+"use strict";
+
window.browser = window.browser || window.chrome;
import commonHelper from './common.js'
@@ -37,7 +39,7 @@ function addressToLatLng(address, callback) {
if (xmlhttp.status === 200) {
const json = JSON.parse(xmlhttp.responseText)[0];
if (json) callback(
- `${json.lat}%2C${json.lon}`,
+ `${json.lat},${json.lon}`,
`${json.boundingbox[2]},${json.boundingbox[1]},${json.boundingbox[3]},${json.boundingbox[0]}`
);
} else
@@ -72,156 +74,126 @@ function redirect(url, initiator) {
if (disable) return;
if (initiator && initiator.host === "earth.google.com") return;
-
if (!url.href.match(targets)) return;
- let redirect;
- let randomInstance
+ let randomInstance;
if (frontend == 'osm') randomInstance = commonHelper.getRandomInstance(redirects.osm.normal);
if (frontend == 'facil') randomInstance = commonHelper.getRandomInstance(redirects.facil.normal);
- let mapCentre;
- let params = "";
+
+ let mapCentre = "#";
+ let prefs = {};
+
// Set map centre if present
if (url.pathname.match(mapCentreRegex)) {
- const [, lat, lon, zoom] = url.pathname.match(mapCentreRegex);
+ var [, lat, lon, zoom] = url.pathname.match(mapCentreRegex);
+ } else if (url.searchParams.has("center")) {
+ var [lat, lon] = url.searchParams.get("center").split(",");
+ var zoom = url.searchParams.get("zoom") ?? "17";
+ }
+
+ if (lat && lon && zoom) {
if (frontend == 'osm') mapCentre = `#map=${zoom}/${lat}/${lon}`;
- if (frontend == 'facil') mapCentre = `#${zoom}/${lat}/${lon}`
+ if (frontend == 'facil') mapCentre = `#${zoom}/${lat}/${lon}`;
console.log("lat", lat) // vertical
console.log("lon", lon) // horizontal
- console.log("zoom", zoom)
-
- } else if (url.search.includes("center=")) {
- const [lat, lon] = url.searchParams.get("center").split(",");
- const zoom = url.searchParams.get("zoom") || "17";
- if (frontend == 'osm') mapCentre = `#map=${zoom}/${lat}/${lon}`;
- if (frontend == 'facil') mapCentre = `#${zoom}/${lat}/${lon}`
-
- console.log("lat", lat)
- console.log("lon", lon)
- console.log("zoom", zoom)
+ console.log("zoom", zoom);
}
- // Set map layer
- let layer = osmLayers[url.searchParams.get("layer")] || osmLayers["none"];
- params = `${params}&layers=${layer}`;
-
- console.log("layer", layer);
+ if (url.searchParams.get("layer")) prefs.layers = osmLayers[url.searchParams.get("layer")];
// Handle Google Maps Embed API
if (url.pathname.includes("/embed")) {
let query = "";
if (url.searchParams.has("q")) query = url.searchParams.get("q");
else if (url.searchParams.has("query")) query = url.searchParams.has("query");
- else if (url.searchParams.has("pb"))
- try {
- query = url.searchParams.get("pb").split(/!2s(.*?)!/)[1];
- } catch (error) {
- console.error(error); // Unable to find map marker in URL.
- }
-
- console.log("query", query)
- let marker, bbox;
- addressToLatLng(query, (coords, boundingbox) => {
- marker = coords;
- bbox = boundingbox;
-
- console.log("marker", marker)
- console.log("bbox", bbox)
- });
- if (frontend == 'osm') redirect = `${randomInstance}/export/embed.html?bbox=${bbox}&layer=mapnik&marker=${marker}`;
- if (frontend == 'facil') redirect = redirect = `${randomInstance}/${mapCentre}/Mpnk`
-
- // Handle Google Maps Directions
- } else if (url.pathname.includes("/dir")) {
- const travelMode = travelModes[url.searchParams.get("travelmode")] || travelModes["driving"];
+ else if (url.searchParams.has("pb"))
+ try { query = url.searchParams.get("pb").split(/!2s(.*?)!/)[1]; }
+ catch (error) { console.error(error); } // Unable to find map marker in URL.
- let origin;
- console.log(url.searchParams.get("origin"))
- addressToLatLng(url.searchParams.get("origin"), coords => origin = coords);
+ addressToLatLng(
+ query,
+ (coords, boundingbox) => {
+ prefs.bbox = boundingbox;
+ prefs.marker = coords;
+ }
+ );
+ prefs.layer = "mapnik";
- let destination;
- addressToLatLng(url.searchParams.get("destination"), coords => destination = coords);
+ let prefsEncoded = new URLSearchParams(prefs).toString();
+ if (frontend == 'osm') return `${randomInstance}/export/embed.html?${prefsEncoded}`;
- if (frontend == 'osm') redirect = `${randomInstance}/directions?engine=${travelMode}&route=${origin}%3B${destination}`;
- // ${mapCentre}${params}
+ } else if (url.pathname.includes("/dir")) { // Handle Google Maps Directions
+ if (url.searchParams.has("travelmode")) prefs.engine = travelModes[url.searchParams.get("travelmode")];
- if (frontend == 'facil') {
- mapCentre = mapCentre ?? '#1/0/0';
- redirect = redirect = `${randomInstance}/${mapCentre}/Mpnk`
- }
+ let origin; addressToLatLng(url.searchParams.get("origin"), a => origin = a);
+ let destination; addressToLatLng(url.searchParams.get("destination"), a => destination = a);
+ prefs.route = `${origin};${destination}`;
- console.log("travelMode", travelMode)
- console.log("origin", origin)
- console.log("destination", destination)
+ let prefsEncoded = new URLSearchParams(prefs).toString();
+ if (frontend == 'osm') return `${randomInstance}/directions?${prefsEncoded}${mapCentre}`;
+ } else if (url.pathname.includes("data=") && url.pathname.match(dataLatLngRegex)) { // Get marker from data attribute
+ console.log("data life");
- // Get marker from data attribute
- } else if (url.pathname.includes("data=") && url.pathname.match(dataLatLngRegex)) {
const [mlat, mlon] = url.pathname.match(dataLatLngRegex);
-
- if (frontend == 'osm') redirect = `${randomInstance}/?mlat=${mlat.replace("!3d", "")}&mlon=${mlon.replace("!4d", "")}${mapCentre}${params}`;
-
- if (frontend == 'facil') redirect = redirect = `${randomInstance}/${mapCentre}/Mpnk`
-
- console.log("mlat", mlat)
- console.log("mlon", mlon)
+ prefs.mlat = mlat.replace("!3d", "");
+ prefs.mlon = mlon.replace("!4d", "");
// Get marker from ll param
} else if (url.searchParams.has("ll")) {
- const [mlat, mlon] = url.searchParams.get("ll").split(",");
- redirect = `${randomInstance}/?mlat=${mlat}&mlon=${mlon}${mapCentre}${params}`;
+ console.log("ll life");
- console.log("mlat", mlat)
- console.log("mlon", mlon)
+ const [mlat, mlon] = url.searchParams.get("ll").split(",");
+ prefs.mlat = mlat;
+ prefs.mlon = mlon;
// Get marker from viewpoint param.
} else if (url.searchParams.has("viewpoint")) {
- const [mlat, mlon] = url.searchParams.get("viewpoint").split(",");
- redirect = `${randomInstance}/?mlat=${mlat}&mlon=${mlon}${mapCentre}${params}`;
+ console.log("viewpoint life");
- console.log("mlat", mlat)
- console.log("mlon", mlon)
+ const [mlat, mlon] = url.searchParams.get("viewpoint").split(",");
+ prefs.mlat = mlat;
+ prefs.mlon = mlon;
// Use query as search if present.
} else {
- console.log("normal life")
+ console.log("normal life");
let query;
if (url.searchParams.has("q")) query = url.searchParams.get("q");
else if (url.searchParams.has("query")) query = url.searchParams.get("query");
else if (url.pathname.match(placeRegex)) query = url.pathname.match(placeRegex)[1];
- if (frontend == 'osm') {
- query = query ? "/search?query=" + query : "";
- mapCentre = mapCentre ?? '#';
- redirect = `${randomInstance}${query}${mapCentre}${params}`;
+ let prefsEncoded = new URLSearchParams(prefs).toString();
+ if (query) {
+ if (frontend == 'osm') return `${randomInstance}/search?query="${query}${mapCentre}&${prefsEncoded}`;
+ if (frontend == 'facil') return `${randomInstance}/${mapCentre}/Mpnk/${query}`
}
- if (frontend == 'facil') {
- query = query ? `/${query}` : "";
- mapCentre = mapCentre ?? '#1/0/0';
- redirect = `${randomInstance}/${mapCentre}/Mpnk${query}`
- }
-
- console.log("query", query)
}
- return redirect;
+
+ let prefsEncoded = new URLSearchParams(prefs).toString();
+ console.log("prefs", prefs);
+ console.log("prefsEncoded", prefsEncoded)
+ if (frontend == 'osm') return `${randomInstance}/${mapCentre}&${prefsEncoded}`
+ if (frontend == 'facil') return `${randomInstance}/${mapCentre}/Mpnk`
}
async function init() {
- return new Promise(resolve => {
- browser.storage.local.get(
- [
- "disableMaps",
- "mapsFrontend"
- ],
- r => {
- disable = r.disableMaps ?? false
- frontend = r.mapsFrontend ?? 'osm'
- resolve();
- }
- );
- });
+ return new Promise(
+ resolve => {
+ browser.storage.local.get(
+ [
+ "disableMaps",
+ "mapsFrontend"
+ ],
+ r => {
+ disable = r.disableMaps ?? false
+ frontend = r.mapsFrontend ?? 'osm'
+ resolve();
+ }
+ );
+ });
}
export default {
diff --git a/src/assets/javascripts/helpers/maps.js.backup b/src/assets/javascripts/helpers/maps.js.backup
new file mode 100644
index 00000000..81678c3d
--- /dev/null
+++ b/src/assets/javascripts/helpers/maps.js.backup
@@ -0,0 +1,274 @@
+window.browser = window.browser || window.chrome;
+import commonHelper from './common.js'
+
+const targets = /^https?:\/{2}(((www|maps)\.)?(google\.).*(\/maps)|maps\.(google\.).*)/;
+let redirects = {
+ 'osm': {
+ "normal": [
+ "https://openstreetmap.org"
+ ]
+ },
+ 'facil': {
+ "normal": [
+ "https://facilmap.org"
+ ]
+ }
+};
+const mapCentreRegex = /@(-?\d[0-9.]*),(-?\d[0-9.]*),(\d{1,2})[.z]/;
+const dataLatLngRegex = /(!3d|!4d)(-?[0-9]{1,10}.[0-9]{1,10})/g;
+const placeRegex = /\/place\/(.*)\//;
+const travelModes = {
+ driving: "fossgis_osrm_car",
+ walking: "fossgis_osrm_foot",
+ bicycling: "fossgis_osrm_bike",
+ transit: "fossgis_osrm_car", // not implemented on OSM, default to car.
+};
+const osmLayers = {
+ none: "S",
+ transit: "T",
+ traffic: "S", // not implemented on OSM, default to standard.
+ bicycling: "C",
+};
+
+function addressToLatLng(address, callback) {
+ const xmlhttp = new XMLHttpRequest();
+ xmlhttp.onreadystatechange = () => {
+ if (xmlhttp.readyState === XMLHttpRequest.DONE) {
+ if (xmlhttp.status === 200) {
+ const json = JSON.parse(xmlhttp.responseText)[0];
+ if (json) callback(
+ `${json.lat},${json.lon}`,
+ `${json.boundingbox[2]},${json.boundingbox[1]},${json.boundingbox[3]},${json.boundingbox[0]}`
+ );
+ } else
+ console.info("Error: Status is " + xmlhttp.status);
+ }
+ };
+ xmlhttp.open(
+ "GET",
+ `https://nominatim.openstreetmap.org/search/${address}?format=json&limit=1`,
+ false
+ );
+ xmlhttp.send();
+}
+
+let disable;
+const getDisable = () => disable;
+function setDisable(val) {
+ disable = val;
+ browser.storage.local.set({ disableMaps: disable })
+ console.log("disableMaps: ", disable)
+}
+
+let frontend;
+const getFrontend = () => frontend;
+function setFrontend(val) {
+ frontend = val;
+ browser.storage.local.set({ mapsFrontend: frontend })
+ console.log("mapsFrontend: ", frontend)
+};
+
+function redirect(url, initiator) {
+
+ if (disable) return;
+ if (initiator && initiator.host === "earth.google.com") return;
+
+ if (!url.href.match(targets)) return;
+
+ let redirect;
+ let randomInstance;
+ if (frontend == 'osm') randomInstance = commonHelper.getRandomInstance(redirects.osm.normal);
+ if (frontend == 'facil') randomInstance = commonHelper.getRandomInstance(redirects.facil.normal);
+ let mapCentre = "";
+ let prefs = {};
+
+ // Set map centre if present
+ if (url.pathname.match(mapCentreRegex)) {
+ const [, lat, lon, zoom] = url.pathname.match(mapCentreRegex);
+ if (frontend == 'osm') {
+ prefs["#map"] = `${zoom}/${lat}/${lon}`;
+ mapCentre = `#map=${zoom}/${lat}/${lon}`;
+ console.log("prefs", prefs);
+ }
+ if (frontend == 'facil') mapCentre = `#${zoom}/${lat}/${lon}`;
+
+
+ console.log("lat", lat) // vertical
+ console.log("lon", lon) // horizontal
+ console.log("zoom", zoom)
+
+ } else if (url.searchParams.has("center")) {
+ const [lat, lon] = url.searchParams.get("center").split(",");
+ const zoom = url.searchParams.get("zoom") ?? "17";
+ if (frontend == 'osm') {
+ console.log("here");
+ mapCentre = `#map=${zoom}/${lat}/${lon}`;
+ prefs["#map"] = `${zoom}/${lat}/${lon}`;
+ }
+ if (frontend == 'facil') mapCentre = `#${zoom}/${lat}/${lon}`
+
+ console.log("lat", lat)
+ console.log("lon", lon)
+ console.log("zoom", zoom)
+
+ console.log("prefs", prefs);
+ }
+
+ // Set map layer
+ let params = "";
+ if (url.searchParams.get("layer")) {
+ let layer = osmLayers[url.searchParams.get("layer")]
+ params = `&layers=${layer}`;
+ console.log("layer", layer);
+ }
+
+ // Handle Google Maps Embed API
+ if (url.pathname.includes("/embed")) {
+ let query = "";
+ if (url.searchParams.has("q")) query = url.searchParams.get("q");
+ else if (url.searchParams.has("query")) query = url.searchParams.has("query");
+
+ else if (url.searchParams.has("pb"))
+ try { query = url.searchParams.get("pb").split(/!2s(.*?)!/)[1]; }
+ catch (error) { console.error(error); } // Unable to find map marker in URL.
+
+ console.log("query", query);
+
+ let prefs = {};
+ addressToLatLng(
+ query,
+ (coords, boundingbox) => {
+ prefs.bbox = boundingbox;
+ prefs.marker = coords;
+ }
+ );
+ prefs.layer = "mapnik";
+
+ let prefsEncoded = new URLSearchParams(prefs).toString();
+
+ if (frontend == 'osm') redirect = `${randomInstance}/export/embed.html?${prefsEncoded}`;
+ if (frontend == 'facil') redirect = redirect = `${randomInstance}/${mapCentre}/Mpnk`;
+
+ // Handle Google Maps Directions
+ } else if (url.pathname.includes("/dir")) {
+ let prefs = {};
+
+ prefs.engine = travelModes[url.searchParams.get("travelmode")] ?? travelModes["driving"];
+
+ let origin; addressToLatLng(url.searchParams.get("origin"), a => origin = a);
+ let destination; addressToLatLng(url.searchParams.get("destination"), a => destination = a);
+ prefs.route = `${origin};${destination}`;
+
+ let prefsEncoded = new URLSearchParams(prefs).toString();
+
+ if (frontend == 'osm') redirect = `${randomInstance}/directions?${prefsEncoded}`;
+ // ${mapCentre}${params}
+
+ if (frontend == 'facil') {
+ mapCentre = mapCentre ?? '#1/0/0';
+ redirect = redirect = `${randomInstance}/${mapCentre}/Mpnk`
+ }
+
+ // Get marker from data attribute
+ } else if (url.pathname.includes("data=") && url.pathname.match(dataLatLngRegex)) {
+ console.log("data life");
+ const [mlat, mlon] = url.pathname.match(dataLatLngRegex);
+
+ let prefs = {};
+
+ prefs.mlat = mlat.replace("!3d", "");
+ prefs.mlon = mlon.replace("!4d", "");
+
+ let prefsEncoded = new URLSearchParams(prefs).toString();
+
+ // Stil didn't finished nor tested this
+ if (frontend == 'osm') redirect = `${randomInstance}/?${prefsEncoded}${mapCentre}${params}`;
+
+ if (frontend == 'facil') redirect = redirect = `${randomInstance}/${mapCentre}/Mpnk`
+
+ console.log("prefs", prefs);
+
+ // Get marker from ll param
+ } else if (url.searchParams.has("ll")) {
+ let prefs = {};
+
+ const [mlat, mlon] = url.searchParams.get("ll").split(",");
+
+ prefs.mlat = mlat;
+ prefs.mlon = mlon;
+
+ let prefsEncoded = new URLSearchParams(prefs).toString();
+
+ redirect = `${randomInstance}/?${prefsEncoded}${mapCentre}${params}`;
+
+ console.log("prefs", prefs);
+
+ // Get marker from viewpoint param.
+ } else if (url.searchParams.has("viewpoint")) {
+ console.log("viewpoint life");
+
+ const [mlat, mlon] = url.searchParams.get("viewpoint").split(",");
+
+ let prefs = {};
+ prefs.mlat = mlat;
+ prefs.mlon = mlon;
+
+ let prefsEncoded = new URLSearchParams(prefs).toString();
+
+ redirect = `${randomInstance}/?${prefsEncoded}${mapCentre}${params}`;
+
+ console.log("prefs", prefs);
+
+ // Use query as search if present.
+ } else {
+ console.log("normal life")
+
+ let query;
+ if (url.searchParams.has("q")) query = url.searchParams.get("q");
+ else if (url.searchParams.has("query")) query = url.searchParams.get("query");
+ else if (url.pathname.match(placeRegex)) query = url.pathname.match(placeRegex)[1];
+
+ if (frontend == 'osm') {
+ query = query ? `/search?query="${query}` : "";
+ mapCentre = mapCentre ?? '#';
+ redirect = `${randomInstance}${query}${mapCentre}${params}`;
+ }
+ if (frontend == 'facil') {
+ query = query ? `/${query}` : "";
+ mapCentre = mapCentre ?? '#1/0/0';
+ redirect = `${randomInstance}/${mapCentre}/Mpnk${query}`
+ }
+
+ console.log("mapCentre", mapCentre)
+ console.log("query", query)
+ }
+ return redirect;
+}
+
+async function init() {
+ return new Promise(
+ resolve => {
+ browser.storage.local.get(
+ [
+ "disableMaps",
+ "mapsFrontend"
+ ],
+ r => {
+ disable = r.disableMaps ?? false
+ frontend = r.mapsFrontend ?? 'osm'
+ resolve();
+ }
+ );
+ });
+}
+
+export default {
+ getDisable,
+ setDisable,
+
+ getFrontend,
+ setFrontend,
+
+ redirect,
+ init,
+};
diff --git a/src/pages/background/background.js b/src/pages/background/background.js
index dda0e9a9..d78ff203 100644
--- a/src/pages/background/background.js
+++ b/src/pages/background/background.js
@@ -107,6 +107,10 @@ browser.webRequest.onBeforeRequest.addListener(
}
else {
console.info("Redirecting", url.href, "=>", newUrl);
+ // let wewe = new URL(newUrl);
+ // console.log("wewe", wewe.search);
+ // console.log("path", wewe.pathname);
+ // console.log("searchParams", wewe.searchParams);
return { redirectUrl: newUrl };
}
}