From e5e3efa18acc15f56ff936a5c085e9bf60f18054 Mon Sep 17 00:00:00 2001 From: Vilem Lipold Date: Fri, 8 Mar 2019 10:34:45 +0100 Subject: [PATCH 1/3] new icons in js --- .../Geocaching_Map_Enhancements.user.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/GeocachingMapEnhancements/Geocaching_Map_Enhancements.user.js b/GeocachingMapEnhancements/Geocaching_Map_Enhancements.user.js index 9655b1e..cab5a68 100644 --- a/GeocachingMapEnhancements/Geocaching_Map_Enhancements.user.js +++ b/GeocachingMapEnhancements/Geocaching_Map_Enhancements.user.js @@ -76,8 +76,8 @@ var gmeResources = { .gme-button-active {border:solid 3px #02b; padding:1px 0 1px 1px; background-color:#fff;}\ .gme-button-active:hover {border-color:#63f;filter:alpha(opacity=100);}\ span.gme-button, .gme-button-wide { padding-left:5px; padding-right:5px; font-size:12px; font-weight:bold; width:auto; background-image:none; color: #424242; }\ - .GME_home { background-position: -572px 4px;}\ - .GME_config { background-position: -284px 4px;}\ + .GME_home { background-size: 18px 18px; background-position: center;background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHg9IjBweCIgeT0iMHB4IgogICAgIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIKICAgICB2aWV3Qm94PSIwIDAgMzAgMzAiCiAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDsiPiAgICA8cGF0aCBkPSJNIDE1IDIgQSAxIDEgMCAwIDAgMTQuMzAwNzgxIDIuMjg1MTU2MiBMIDMuMzkyNTc4MSAxMS4yMDcwMzEgQSAxIDEgMCAwIDAgMy4zNTU0Njg4IDExLjIzNjMyOCBMIDMuMzE4MzU5NCAxMS4yNjc1NzggTCAzLjMxODM1OTQgMTEuMjY5NTMxIEEgMSAxIDAgMCAwIDMgMTIgQSAxIDEgMCAwIDAgNCAxMyBMIDUgMTMgTCA1IDI0IEMgNSAyNS4xMDUgNS44OTUgMjYgNyAyNiBMIDIzIDI2IEMgMjQuMTA1IDI2IDI1IDI1LjEwNSAyNSAyNCBMIDI1IDEzIEwgMjYgMTMgQSAxIDEgMCAwIDAgMjcgMTIgQSAxIDEgMCAwIDAgMjYuNjgxNjQxIDExLjI2NzU3OCBMIDI2LjY2NjAxNiAxMS4yNTU4NTkgQSAxIDEgMCAwIDAgMjYuNTk3NjU2IDExLjE5OTIxOSBMIDI1IDkuODkyNTc4MSBMIDI1IDYgQyAyNSA1LjQ0OCAyNC41NTIgNSAyNCA1IEwgMjMgNSBDIDIyLjQ0OCA1IDIyIDUuNDQ4IDIyIDYgTCAyMiA3LjQzOTQ1MzEgTCAxNS42Nzc3MzQgMi4yNjc1NzgxIEEgMSAxIDAgMCAwIDE1IDIgeiBNIDE4IDE1IEwgMjIgMTUgTCAyMiAyMyBMIDE4IDIzIEwgMTggMTUgeiI+PC9wYXRoPjwvc3ZnPg==")}\ + .GME_config { background-size: 18px 18px; background-position: center;background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHg9IjBweCIgeT0iMHB4IgogICAgIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCIKICAgICB2aWV3Qm94PSIwIDAgMzIgMzIiCiAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDsiPjxnIGlkPSJzdXJmYWNlMSI+PHBhdGggc3R5bGU9IiAiIGQ9Ik0gMjEuNSAyLjUgTCAyMS41IDMuOTA2MjUgQyAyMC42NjQwNjMgNC4wNTQ2ODggMTkuODg2NzE5IDQuMzcxMDk0IDE5LjIxODc1IDQuODQzNzUgTCAxOC4xODc1IDMuODc1IEwgMTYuODEyNSA1LjM0Mzc1IEwgMTcuODEyNSA2LjI4MTI1IEMgMTcuMzYzMjgxIDYuOTM3NSAxNy4wNTA3ODEgNy42ODc1IDE2LjkwNjI1IDguNSBMIDE1LjUgOC41IEwgMTUuNSAxMC41IEwgMTYuOTA2MjUgMTAuNSBDIDE3LjA1MDc4MSAxMS4zMjgxMjUgMTcuMzc4OTA2IDEyLjA4NTkzOCAxNy44NDM3NSAxMi43NSBMIDE2Ljc4MTI1IDEzLjc4MTI1IEwgMTguMjE4NzUgMTUuMjE4NzUgTCAxOS4yNSAxNC4xNTYyNSBDIDE5LjkxNDA2MyAxNC42MjEwOTQgMjAuNjcxODc1IDE0Ljk0OTIxOSAyMS41IDE1LjA5Mzc1IEwgMjEuNSAxNi41IEwgMjMuNSAxNi41IEwgMjMuNSAxNS4wOTM3NSBDIDI0LjMxMjUgMTQuOTQ5MjE5IDI1LjA2MjUgMTQuNjM2NzE5IDI1LjcxODc1IDE0LjE4NzUgTCAyNi42NTYyNSAxNS4xODc1IEwgMjguMTI1IDEzLjgxMjUgTCAyNy4xNTYyNSAxMi43ODEyNSBDIDI3LjYyODkwNiAxMi4xMTMyODEgMjcuOTQ1MzEzIDExLjMzNTkzOCAyOC4wOTM3NSAxMC41IEwgMjkuNSAxMC41IEwgMjkuNSA4LjUgTCAyOC4wOTM3NSA4LjUgQyAyNy45NDkyMTkgNy42NzE4NzUgMjcuNjIxMDk0IDYuOTE0MDYzIDI3LjE1NjI1IDYuMjUgTCAyOC4wOTM3NSA1LjMxMjUgTCAyNi42ODc1IDMuOTA2MjUgTCAyNS43NSA0Ljg0Mzc1IEMgMjUuMDg1OTM4IDQuMzc4OTA2IDI0LjMyODEyNSA0LjA1MDc4MSAyMy41IDMuOTA2MjUgTCAyMy41IDIuNSBaIE0gMjIuNSA1LjgxMjUgQyAyNC41NTQ2ODggNS44MTI1IDI2LjE4NzUgNy40NDUzMTMgMjYuMTg3NSA5LjUgQyAyNi4xODc1IDExLjU1NDY4OCAyNC41NTQ2ODggMTMuMTg3NSAyMi41IDEzLjE4NzUgQyAyMC40NDUzMTMgMTMuMTg3NSAxOC44MTI1IDExLjU1NDY4OCAxOC44MTI1IDkuNSBDIDE4LjgxMjUgNy40NDUzMTMgMjAuNDQ1MzEzIDUuODEyNSAyMi41IDUuODEyNSBaIE0gOS41MzEyNSAxMS43MTg3NSBMIDcuNjg3NSAxMi40Njg3NSBMIDguNDA2MjUgMTQuMjgxMjUgQyA3LjQ1MzEyNSAxNC44NTE1NjMgNi42NDA2MjUgMTUuNjQ4NDM4IDYuMDYyNSAxNi41OTM3NSBMIDQuMjgxMjUgMTUuODc1IEwgMy41MzEyNSAxNy43MTg3NSBMIDUuMzEyNSAxOC40Mzc1IEMgNS4xNzk2ODggMTguOTY0ODQ0IDUuMDkzNzUgMTkuNTIzNDM4IDUuMDkzNzUgMjAuMDkzNzUgQyA1LjA5Mzc1IDIwLjY2NDA2MyA1LjE3OTY4OCAyMS4yMTg3NSA1LjMxMjUgMjEuNzUgTCAzLjUzMTI1IDIyLjQ2ODc1IEwgNC4yODEyNSAyNC4zMTI1IEwgNi4wNjI1IDIzLjU5Mzc1IEMgNi42NDA2MjUgMjQuNTU0Njg4IDcuNDQ1MzEzIDI1LjM1OTM3NSA4LjQwNjI1IDI1LjkzNzUgTCA3LjY4NzUgMjcuNzE4NzUgTCA5LjUzMTI1IDI4LjQ2ODc1IEwgMTAuMjUgMjYuNjg3NSBDIDEwLjc4MTI1IDI2LjgyMDMxMyAxMS4zMzIwMzEgMjYuOTA2MjUgMTEuOTA2MjUgMjYuOTA2MjUgQyAxMi40NzY1NjMgMjYuOTA2MjUgMTMuMDM1MTU2IDI2LjgyMDMxMyAxMy41NjI1IDI2LjY4NzUgTCAxNC4yODEyNSAyOC40Njg3NSBMIDE2LjEyNSAyNy43MTg3NSBMIDE1LjQwNjI1IDI1LjkzNzUgQyAxNi4zNTE1NjMgMjUuMzU5Mzc1IDE3LjE0ODQzOCAyNC41NDY4NzUgMTcuNzE4NzUgMjMuNTkzNzUgTCAxOS41MzEyNSAyNC4zMTI1IEwgMjAuMjgxMjUgMjIuNDY4NzUgTCAxOC40Njg3NSAyMS43NSBDIDE4LjYwMTU2MyAyMS4yMTg3NSAxOC42ODc1IDIwLjY2NDA2MyAxOC42ODc1IDIwLjA5Mzc1IEMgMTguNjg3NSAxOS41MjM0MzggMTguNjAxNTYzIDE4Ljk2NDg0NCAxOC40Njg3NSAxOC40Mzc1IEwgMjAuMjgxMjUgMTcuNzE4NzUgTCAxOS41MzEyNSAxNS44NzUgTCAxNy43MTg3NSAxNi41OTM3NSBDIDE3LjE0ODQzOCAxNS42NTIzNDQgMTYuMzUxNTYzIDE0Ljg1MTU2MyAxNS40MDYyNSAxNC4yODEyNSBMIDE2LjEyNSAxMi40Njg3NSBMIDE0LjI4MTI1IDExLjcxODc1IEwgMTMuNTYyNSAxMy41MzEyNSBDIDEzLjAzMTI1IDEzLjM5ODQzOCAxMi40NzY1NjMgMTMuMzEyNSAxMS45MDYyNSAxMy4zMTI1IEMgMTEuMzM1OTM4IDEzLjMxMjUgMTAuNzgxMjUgMTMuMzk4NDM4IDEwLjI1IDEzLjUzMTI1IFogTSAxMS45MDYyNSAxNS4zMTI1IEMgMTQuNTcwMzEzIDE1LjMxMjUgMTYuNjg3NSAxNy40Mjk2ODggMTYuNjg3NSAyMC4wOTM3NSBDIDE2LjY4NzUgMjIuNzU3ODEzIDE0LjU3MDMxMyAyNC45MDYyNSAxMS45MDYyNSAyNC45MDYyNSBDIDkuMjQyMTg4IDI0LjkwNjI1IDcuMDkzNzUgMjIuNzU3ODEzIDcuMDkzNzUgMjAuMDkzNzUgQyA3LjA5Mzc1IDE3LjQyOTY4OCA5LjI0MjE4OCAxNS4zMTI1IDExLjkwNjI1IDE1LjMxMjUgWiAiPjwvcGF0aD48L2c+PC9zdmc+")}\ .GME_route, .GME_hide {background: url(https://geo.inge.org.uk/userscripts/gme_icons_0_8_0.png) no-repeat #eee;}\ .GME_route { background-position: 7px 3px;}\ .GME_route.gme-button-active { background-position: 5px 1px;}\ @@ -87,8 +87,8 @@ var gmeResources = { .gme-button-clear-labels { background-position: -69px 4px;}\ span.gme-distance-container { display: none; }\ span.gme-distance-container.show { display: inline-block; }\ - .GME_info { background-position: -537px 4px;}\ - .GME_info.gme-button-active {background-position: -540px 1px;}\ + .GME_info { background-size: 16px 16px; background-position: center;background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/PjxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDMyIDMyIiA+PHBhdGggc3R5bGU9ImZpbGw6IzAzMDEwNDsiIGQ9Ik0xMCwxNmMxLjEwNSwwLDIsMC44OTUsMiwydjhjMCwxLjEwNS0wLjg5NSwyLTIsMkg4djRoMTZ2LTRoLTEuOTkyYy0xLjEwMiwwLTItMC44OTUtMi0yTDIwLDEySDggdjRIMTB6Ii8+PGNpcmNsZSBzdHlsZT0iZmlsbDojMDMwMTA0OyIgY3g9IjE2IiBjeT0iNCIgcj0iNCIvPjwvc3ZnPg0K")}\ + .GME_info.gme-button-active {}\ #GME_loc, a.gme-button.leaflet-active {outline: none;}\ .leaflet-control-zoomwarning { top: 94px; }\ .leaflet-control-zoomwarning a { filter: progid:DXImageTransform.Microsoft.gradient(startColorStr="#BFC80000",EndColorStr="#BFC80000"); background-color:rgba(200,0,0,0.75); margin-left: -4px; background-position: -502px 2px;height:14px;width:14px; border-color: #b00; box-shadow: 0 0 8px rgba(0, 0, 0, 0.4); }\ From a2f3af8322e8b4cfbfe5f14cbd6d1c0404c09a34 Mon Sep 17 00:00:00 2001 From: Vilem Lipold Date: Sat, 4 Jan 2020 13:46:25 +0100 Subject: [PATCH 2/3] Better work with circles --- GeocacheCircles/Geocache_Circles.user.js | 195 +++++++++++++---------- GeocacheCircles/src/Geocache_Circles.js | 167 +++++++++++-------- 2 files changed, 208 insertions(+), 154 deletions(-) diff --git a/GeocacheCircles/Geocache_Circles.user.js b/GeocacheCircles/Geocache_Circles.user.js index 4b60076..27d3865 100644 --- a/GeocacheCircles/Geocache_Circles.user.js +++ b/GeocacheCircles/Geocache_Circles.user.js @@ -7,7 +7,7 @@ // @oujs:author JRI // @license MIT; http://www.opensource.org/licenses/mit-license.php // @copyright 2016-2017, James Inge (http://geo.inge.org.uk/) -// @version 0.0.4 +// @version 0.0.5 // @icon https://geo.inge.org.uk/userscripts/circleIcon48.png // @icon64 https://geo.inge.org.uk/userscripts/circleIcon64.png // @connect www.geocaching.com @@ -19,87 +19,114 @@ /*jshint esversion: 6, undef:true, unused:true */ /*global L, MapSettings, window, console */ -(function () { - "use strict"; - const version = "Geocache Circles v0.0.4"; - const loggedIn = document.getElementById("uxLoginStatus_divSignedIn"); - const template = document.getElementById("cacheDetailsTemplate"); - const script = document.createElement("script"); - const circleIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA6UlEQVQ4ja2TsY3DMAxFiUvvbOTaA0SVRhBEfooyBLjyON7FC3iVNNYVlwB3MQwH5/xW/A/8FEm0I+99E4K0IUjrvW/26jaKETeILZC0KqwqrELSCrElRtx2jaWUq0iaFFaBPKvawMwdM3eqNgB5VlgVSVMp5boBPMx3ibkfx/Hr9d05d5GYe4XdRdK0aVthVWLujyI+IPVPHIgtQJ6dc5cjgHPuAuQZYgsR/UwbklZVG47MT6naAEmr976hEKRVWGXm7l0AM3cKqyFIex5wOgLRySESfeAbiU4uEtEHVvl3nH8d06vePedvYUbM9ZMTrS4AAAAASUVORK5CYII="; - - function handleCircleRequest(e) { - /* Fetch coordinates from cache page */ - const req = new XMLHttpRequest(); - const gc = e.detail; - req.addEventListener("load", function (ignore) { - const r = req.responseText; - const k = r.indexOf("mapLatLng = {"); - - if (req.status < 400) { - try { - const {lat, lng, name} = JSON.parse(r.substring(k + 12, r.indexOf("}", k) + 1)); - - if (typeof lat !== "number" || typeof lng !== "number") { - // Missing data in JSON string - console.error("Geocache Circles: no cache coordinates retrieved."); - return; - } - - if (window.MapSettings && MapSettings.Map && window.L && window.L.Circle) { - const ll = new L.LatLng(lat, lng); - new L.Circle(ll, 161, {weight: 2}) - .addTo(MapSettings.Map) - .bindPopup(`

${name}
${ll.toUrl()}`); - } else { - console.error("Geocache Circles: couldn't find map interface."); - } - } catch (err) { - if (err instanceof SyntaxError) { - console.warn(`Geocache Circles: Received ${r.length} bytes, coords at ${k} but couldn't extract cache coordinates from data (are you still logged in?): +(function() { + "use strict"; + const version = "Geocache Circles v0.0.5"; + const loggedIn = document.getElementById("uxLoginStatus_divSignedIn"); + const template = document.getElementById("cacheDetailsTemplate"); + const script = document.createElement("script"); + const circleIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA6UlEQVQ4ja2TsY3DMAxFiUvvbOTaA0SVRhBEfooyBLjyON7FC3iVNNYVlwB3MQwH5/xW/A/8FEm0I+99E4K0IUjrvW/26jaKETeILZC0KqwqrELSCrElRtx2jaWUq0iaFFaBPKvawMwdM3eqNgB5VlgVSVMp5boBPMx3ibkfx/Hr9d05d5GYe4XdRdK0aVthVWLujyI+IPVPHIgtQJ6dc5cjgHPuAuQZYgsR/UwbklZVG47MT6naAEmr976hEKRVWGXm7l0AM3cKqyFIex5wOgLRySESfeAbiU4uEtEHVvl3nH8d06vePedvYUbM9ZMTrS4AAAAASUVORK5CYII="; + + //delete existing circle + function handleCircleRemove(e) { + const gc = e.detail; + if (window.MapSettings && MapSettings.Map && window.L && circleStorage[gc]) { + { + MapSettings.Map.removeLayer(circleStorage[gc]); + delete circleStorage[gc]; + } + } + } + + function handleCircleRequest(e) { + /* Fetch coordinates from cache page */ + const req = new XMLHttpRequest(); + const gc = e.detail; + + //if circle exists, delete it + if (circleStorage[gc] && window.MapSettings && MapSettings.Map && window.L && window.L.Circle) { + MapSettings.Map.removeLayer(circleStorage[gc]); + delete circleStorage[gc]; + return; + } + + req.addEventListener("load", function(ignore) { + const r = req.responseText; + const k = r.indexOf("mapLatLng = {"); + + + + if (req.status < 400) { + try { + const { lat, lng, name } = JSON.parse(r.substring(k + 12, r.indexOf("}", k) + 1)); + + if (typeof lat !== "number" || typeof lng !== "number") { + // Missing data in JSON string + console.error("Geocache Circles: no cache coordinates retrieved."); + return; + } + + if (window.MapSettings && MapSettings.Map && window.L && window.L.Circle) { + const ll = new L.LatLng(lat, lng); + var circle = new L.Circle(ll, 161, { weight: 2 }); + circle.addTo(MapSettings.Map) + .bindPopup(`

${name}
${ll.toUrl()}
+ OpenCache
+ Remove circle`); + circleStorage[gc] = circle; + } else { + console.error("Geocache Circles: couldn't find map interface."); + } + } catch (err) { + if (err instanceof SyntaxError) { + console.warn(`Geocache Circles: Received ${r.length} bytes, coords at ${k} but couldn't extract cache coordinates from data (are you still logged in?): ${err}`); - } else { - console.error(`Geocache Circles: couldn't add circle to ssmap: ${err}`); - } - } - } else { - console.warn(`Geocache Circles: error retrieving cache page to find coords for ${gc}: ${req.statusText}`); - } - }); - req.open("GET", `https://www.geocaching.com/geocache/${gc}`); - req.send(); - } - - // Don't run on frames or iframes - if (window.top !== window.self) { - return false; - } - - // Check feature support - if (!window.JSON || !window.XMLHttpRequest) { - console.warn(`${version} requires a browser with support for JSON and XMLHttpRequest`); - return false; - } - - if (loggedIn === null) { - // Warn if not logged in, as coords unavailable. Don't quit, as user might log in later in a different window, or login detection might have failed. - console.warn("Geocache Circles may not be able to locate caches as you don't seem to be logged in."); - } - - if (template) { - console.info(version); - - // Attach to cache info popup template - template.textContent = template.textContent.replace(//, `