From 08dbebd6035c670a719b075ecc0037850649b570 Mon Sep 17 00:00:00 2001 From: Nico de Haen Date: Fri, 29 Aug 2025 22:30:09 +0200 Subject: [PATCH 1/5] Extend map with some addons - an overlay to show the position of each contact - an overlay to show the position of each POI - a selector to switch to different map tile services --- .prettierrc | 4 + index.html | 170 +++++---------- index.js | 561 ++++++++++++++++++++++++++++++++++++++----------- manifest.toml | 1 + mapServices.js | 18 ++ style.css | 335 +++++++++++++++++++++++++++++ 6 files changed, 847 insertions(+), 242 deletions(-) create mode 100644 .prettierrc create mode 100644 mapServices.js create mode 100644 style.css diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..5a938ce --- /dev/null +++ b/.prettierrc @@ -0,0 +1,4 @@ +{ + "tabWidth": 4, + "useTabs": false +} diff --git a/index.html b/index.html index b1a01e1..ba67cd1 100644 --- a/index.html +++ b/index.html @@ -1,126 +1,50 @@ - - - - - - - - - - -
- - - + + + + + + + + + + +
+ + + + + +
+

Contacts

+
+
No contacts yet
+
+
+ +
+

Points of Interest

+
+
No POIs yet
+
+
+ + + diff --git a/index.js b/index.js index 0357499..32e2952 100644 --- a/index.js +++ b/index.js @@ -1,97 +1,387 @@ - // set up map -var map = L.map('map', { - doubleClickZoom: true, - zoomControl: false, // added manually below - tapHold: true - }); -if (localStorage.getItem('map.lat') === null) { +var map = L.map("map", { + doubleClickZoom: true, + zoomControl: false, // added manually below + tapHold: true, +}); +if (localStorage.getItem("map.lat") === null) { map.setView([30, -30], 3); } else { - map.setView([localStorage.getItem('map.lat'), localStorage.getItem('map.lng')], localStorage.getItem('map.zoom')); + map.setView( + [localStorage.getItem("map.lat"), localStorage.getItem("map.lng")], + localStorage.getItem("map.zoom") + ); +} +map.attributionControl.setPrefix(""); +L.control.scale({ position: "bottomleft" }).addTo(map); +L.control.zoom({ position: "topright" }).addTo(map); + +if (/wv/.test(navigator.userAgent) && /Android/.test(navigator.userAgent)) { + document.body.classList.add('android-webview'); +} + +var select = document.createElement("select"); +select.id = "mapTileServiceSelector"; + +for (var serviceKey in mapServices) { + var option = document.createElement("option"); + option.value = serviceKey; + option.textContent = serviceKey; + select.appendChild(option); } -map.attributionControl.setPrefix(''); -L.control.scale({position: 'bottomleft'}).addTo(map); -L.control.zoom({position: 'topright'}).addTo(map); -L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { - maxZoom: 19, - attribution: "© OpenStreetMap" +document.body.appendChild(select); + +var tileLayer = null; +var annotationLayer = null; + +function addMapService(map, serviceKey) { + localStorage.setItem("map.tileService", serviceKey); + console.log("Switching tile service to:", serviceKey); + const service = mapServices[serviceKey]; + if (!service) return; + + if (tileLayer && map.hasLayer(tileLayer)) { + map.removeLayer(tileLayer); + } + if (annotationLayer && map.hasLayer(annotationLayer)) { + map.removeLayer(annotationLayer); + } + const subdomains = service.subdomains || []; + + tileLayer = L.tileLayer(service.url, { + maxZoom: service.options.maxZoom, + attribution: service.options.attribution, + tms: service.options.tms || false, + subdomains: subdomains, //service.subdomains.join(',') }).addTo(map); -var pinIcon = L.icon({ - iconUrl: 'images/pin-icon.png', - iconRetinaUrl: 'images/pin-icon-2x.png', - iconSize: [12, 29], // size of the icon - iconAnchor: [6, 29], // point of the icon which will correspond to marker's location - popupAnchor: [0, -29] // point from which the popup should open relative to the iconAnchor + if (service.annotationLayer) { + const annotationLayersubdomains = + service.annotationLayer.subdomains || []; + annotationLayer = L.tileLayer(service.annotationLayer.url, { + maxZoom: service.annotationLayer.options.maxZoom, + tms: service.annotationLayer.options.tms || false, + subdomains: annotationLayersubdomains, //service.subdomains.join(',') + }).addTo(map); + } +} + +select.addEventListener("change", function () { + const selectedService = this.value; + console.log("Selected tile service:", selectedService); + addMapService(map, selectedService); +}); + +let tileServiceKey = defaultServiceKey; +if (localStorage.getItem("map.tileService") !== null) { + tileServiceKey = localStorage.getItem("map.tileService"); + console.log("Restoring tile service:", tileServiceKey); +} else { + console.log("Using default tile service:", defaultServiceKey); +} + +select.value = tileServiceKey; +select.dispatchEvent(new Event("change")); + + +const pinIcon = L.icon({ + iconUrl: "images/pin-icon.png", + iconRetinaUrl: "images/pin-icon-2x.png", + iconSize: [12, 29], // size of the icon + iconAnchor: [6, 29], // point of the icon which will correspond to marker's location + popupAnchor: [0, -29], // point from which the popup should open relative to the iconAnchor +}); + +// Overlay management +let contactOverlayVisible = false; +let poiOverlayVisible = false; +const contactsData = new Map(); // Store contact data for the overlay +const poiData = new Map(); // Store POI data for the overlay +// DOM elements +const contactOverlay = document.getElementById("contactsOverlay"); +const poiOverlay = document.getElementById("poiOverlay"); +const toggleBtn = document.getElementById("toggleOverlay"); +const poiToggleBtn = document.getElementById("togglePoiOverlay"); + +function initOverlay() { + contactOverlay.style.display = "none"; + poiOverlay.style.display = "none"; + toggleBtn.textContent = "👤"; + poiToggleBtn.style.display = "none"; // Hidden by default + console.log(tracks); + + toggleBtn.addEventListener("click", function () { + contactOverlayVisible = !contactOverlayVisible; + if (contactOverlayVisible) { + poiOverlayVisible = false; + } + showHideOverlays(); + }); + + poiToggleBtn.addEventListener("click", function () { + poiOverlayVisible = !poiOverlayVisible; + if (poiOverlayVisible) { + contactOverlayVisible = false; + } + showHideOverlays(); + }); + + function showHideOverlays() { + contactOverlay.style.display = contactOverlayVisible ? "block" : "none"; + poiOverlay.style.display = poiOverlayVisible ? "block" : "none"; + } +} + +// Update the contacts overlay +function updateContactsOverlay() { + const contactsList = document.getElementById("contactsList"); + + if (contactsData.size === 0) { + contactsList.innerHTML = + '
No contacts shared their location yet
'; + return; + } + + if (contactsData.size > 1) { + toggleBtn.textContent = "👥"; + } + + let html = ""; + contactsData.forEach((contact, contactId) => { + const timeAgo = formatTimeAgo(contact.lastTimestamp); + html += ` +
+
+
${htmlentities(contact.name)}
+
${timeAgo}
+ +
+ `; + }); + + contactsList.innerHTML = html; +} + +// Update the POI overlay +function updatePoiOverlay() { + const poiList = document.getElementById("poiList"); + + if (poiData.size === 0) { + poiList.innerHTML = '
No POIs yet
'; + poiToggleBtn.style.display = "none"; + return; + } + + // Show POI toggle button if there are POIs + poiToggleBtn.style.display = "block"; + + let html = ""; + poiData.forEach((poi, poiId) => { + const timeAgo = formatTimeAgo(poi.timestamp); + html += ` +
+
+
${htmlentities( + poi.label || poi.name + )}
+
${timeAgo}
+ +
+ `; + }); + + poiList.innerHTML = html; +} + +// Format timestamp to relative time (e.g., "2h ago", "30m ago", "3d ago") +function formatTimeAgo(timestamp) { + if (!timestamp) return ""; + + const now = Math.floor(Date.now() / 1000); + const diff = now - timestamp; + + if (diff < 60) { + return "now"; + } else if (diff < 3600) { + const minutes = Math.floor(diff / 60); + return minutes + "m ago"; + } else if (diff < 86400) { + const hours = Math.floor(diff / 3600); + return hours + "h ago"; + } else { + const days = Math.floor(diff / 86400); + return days + "d ago"; + } +} + +// Function to zoom to a specific contact's last position +function zoomToContact(contactId) { + const contact = contactsData.get(contactId); + if (contact && contact.lastPosition) { + zoomToPosition(contact.lastPosition); + } else { + console.log("Contact not found or no position"); + } +} + +// Function to zoom to a specific POI +function zoomToPoi(poiId) { + console.log("poiData contents:", poiData); + const poi = poiData.get(poiId); + console.log("Found poi:", poi); + if (poi && poi.position) { + zoomToPosition(poi.position); + } else { + console.log("POI not found or no position"); + } +} + +function zoomToPosition(position) { + map.setView(position, 15, { animate: true, duration: 1.2 }); +} + +// Initialize overlay when DOM is ready +document.addEventListener("DOMContentLoaded", function () { + initOverlay(); + updateContactsOverlay(); + updatePoiOverlay(); }); var tracks = {}; var initDone = false; +/** + * @type {Payload} + * Example payload: + * { + * action: "pos", + * lat: 47.994828, + * lng: 7.849881, + * timestamp: 1712928222, + * contactId: 123, // can be used as a unique ID to differ tracks etc + * name: "Alice", + * color: "#ff8080", + * independent: false, // false: current or past position of contact, true: a POI + * label: "" // used for POI only + * } + */ +window.webxdc + .setUpdateListener((update) => { + const payload = update.payload; + + if (payload.action === "pos") { + if (payload.independent) { + // Store POI data for overlay + const poiId = + "poi_" + + Date.now() + + "_" + + Math.random().toString(36).substr(2, 9); + const poiDataObj = { + name: payload.name, + label: payload.label, + color: payload.color, + position: [payload.lat, payload.lng], + timestamp: payload.timestamp, + }; + console.log("Adding POI with ID:", poiId, "Data:", poiDataObj); + poiData.set(poiId, poiDataObj); + // Update POI overlay + updatePoiOverlay(); -// set up webxdc - -window.webxdc.setUpdateListener((update) => { - const payload = update.payload; - if (payload.action === 'pos') { - if (payload.independent) { - var marker = L.marker([payload.lat, payload.lng], { - icon: pinIcon + const marker = L.marker([payload.lat, payload.lng], { + icon: pinIcon, }).addTo(map); - if (payload.label) { - marker.bindTooltip(shortLabelHtml(payload.label), { - permanent: true, - interactive: true, - direction: 'bottom', - offset: [0, -17], - className: 'poi-tooltip' - }).openTooltip(); - } - marker.on('click', function () { - if (!marker.getPopup()) { - marker.bindPopup(popupHtml(payload), { closeButton: false }).openPopup(); + if (payload.label) { + marker + .bindTooltip(shortLabelHtml(payload.label), { + permanent: true, + interactive: true, + direction: "bottom", + offset: [0, -17], + className: "poi-tooltip", + }) + .openTooltip(); } - }); - } else { - if (!tracks[payload.contactId]) { - tracks[payload.contactId] = { - lines: [[]], - payload: payload, - lastTimestamp: payload.timestamp, - marker: null, - polyline: null - }; + marker.on("click", function () { + if (!marker.getPopup()) { + marker + .bindPopup(popupHtml(payload), { + closeButton: false, + }) + .openPopup(); + } + }); } else { - tracks[payload.contactId].payload = payload; - } + // Update contacts data for overlay + if (!contactsData.has(payload.contactId)) { + contactsData.set(payload.contactId, { + name: payload.name, + color: payload.color, + lastPosition: [payload.lat, payload.lng], + lastTimestamp: payload.timestamp, + }); + } else { + const contact = contactsData.get(payload.contactId); + contact.name = payload.name; + contact.color = payload.color; + contact.lastPosition = [payload.lat, payload.lng]; + contact.lastTimestamp = payload.timestamp; + } - var lastLine = tracks[payload.contactId].lines.length - 1; - if ((payload.timestamp - tracks[payload.contactId].lastTimestamp) > 5 * 60) { - // larger time difference: start new line and connect with previous point on track - if (tracks[payload.contactId].lines[lastLine].length == 1) { - tracks[payload.contactId].lines[lastLine].push(tracks[payload.contactId].lines[lastLine][0]); + // Update overlay + updateContactsOverlay(); + + if (!tracks[payload.contactId]) { + tracks[payload.contactId] = { + lines: [[]], + payload: payload, + lastTimestamp: payload.timestamp, + marker: null, + polyline: null, + }; + } else { + tracks[payload.contactId].payload = payload; } - tracks[payload.contactId].lines.push([]); - lastLine++; - } - tracks[payload.contactId].lines[lastLine].push([payload.lat, payload.lng]); - tracks[payload.contactId].lastTimestamp = payload.timestamp; - if (initDone) { - updateTrack(payload.contactId); + let lastLine = tracks[payload.contactId].lines.length - 1; + if ( + payload.timestamp - + tracks[payload.contactId].lastTimestamp > + 5 * 60 + ) { + // larger time difference: start new line and connect with previous point on track + if (tracks[payload.contactId].lines[lastLine].length == 1) { + tracks[payload.contactId].lines[lastLine].push( + tracks[payload.contactId].lines[lastLine][0] + ); + } + tracks[payload.contactId].lines.push([]); + lastLine++; + } + + tracks[payload.contactId].lines[lastLine].push([ + payload.lat, + payload.lng, + ]); + tracks[payload.contactId].lastTimestamp = payload.timestamp; + if (initDone) { + updateTrack(payload.contactId); + } } } - } -}).then(() => { - updateTracks(); - initDone = true; -}); - - + }) + .then(() => { + updateTracks(); + initDone = true; + }); // contact's tracks @@ -101,42 +391,55 @@ function updateTrack(contactId) { if (track.polyline) { map.removeLayer(track.polyline); } - track.polyline = L.polyline(track.lines, {color: track.payload.color, weight: 4}).addTo(map); + track.polyline = L.polyline(track.lines, { + color: track.payload.color, + weight: 4, + }).addTo(map); - var content = '' + shortLabelHtml(track.payload.name) + ''; + var content = + '' + + shortLabelHtml(track.payload.name) + + ""; const age = Math.floor(Date.now() / 1000) - track.payload.timestamp; - if (age > 60*60) { - content += '
' + Math.floor(age/60/60) + 'h ago'; - } else if (age > 30*60) { + if (age > 60 * 60) { + content += + '
' + + Math.floor(age / 60 / 60) + + "h ago"; + } else if (age > 30 * 60) { content += '
½h ago'; - } else if (age > 15*60) { + } else if (age > 15 * 60) { content += '
¼h ago'; } else { content += '
'; } const lastLine = track.lines.length - 1; - const lastLatLng = track.lines[lastLine][ track.lines[lastLine].length-1 ]; + const lastLatLng = track.lines[lastLine][track.lines[lastLine].length - 1]; if (track.marker) { map.removeLayer(track.marker); } track.marker = L.marker(lastLatLng, { - icon: pinIcon, - opacity: 0 - }).addTo(map); + icon: pinIcon, + opacity: 0, + }).addTo(map); var tooltip = L.tooltip({ - content: content, - permanent: true, - interactive: true, - direction: 'bottom', - offset: [0, -28], - className: 'ppl-tooltip' - }); + content: content, + permanent: true, + interactive: true, + direction: "bottom", + offset: [0, -28], + className: "ppl-tooltip", + }); track.marker.bindTooltip(tooltip).openTooltip(); track.marker.unbindPopup(); - track.marker.on('click', function () { + track.marker.on("click", function () { if (!track.marker.getPopup()) { - track.marker.bindPopup(popupHtml(track.payload), { closeButton: false }).openPopup(); + track.marker + .bindPopup(popupHtml(track.payload), { closeButton: false }) + .openPopup(); } }); } @@ -149,8 +452,7 @@ function updateTracks() { setInterval(() => { updateTracks(); // update is needed for the relative time shown -}, 60*1000); - +}, 60 * 1000); // share a dedicated location @@ -158,73 +460,94 @@ var popup; var popupLatlng; function onSend() { - const elem = document.getElementById('textToSend'); - const value = elem.value.trim(); + const elem = document.getElementById("textToSend"); + const value = elem.value.trim(); if (value != "") { popup.close(); - webxdc.sendUpdate({ + webxdc.sendUpdate( + { payload: { - action: 'pos', + action: "pos", independent: true, timestamp: Math.floor(Date.now() / 1000), lat: popupLatlng.lat, lng: popupLatlng.lng, label: elem.value, name: webxdc.selfName, - color: '#888' + color: "#888", }, - }, 'POI added to map at ' + popupLatlng.lat.toFixed(4) + '/' + popupLatlng.lng.toFixed(4) + ' with text: ' + value); + }, + "POI added to map at " + + popupLatlng.lat.toFixed(4) + + "/" + + popupLatlng.lng.toFixed(4) + + " with text: " + + value + ); } else { - elem.placeholder = elem.placeholder == 'Label' ? "Enter label" : "Label"; // just some cheap visual feedback + elem.placeholder = + elem.placeholder == "Label" ? "Enter label" : "Label"; // just some cheap visual feedback } } function onMapLongClick(e) { popupLatlng = e.latlng; - popup = L.popup({closeButton: false, keepInView: true}) + popup = L.popup({ closeButton: false, keepInView: true }) .setLatLng(popupLatlng) - .setContent('


') + .setContent( + '


' + ) .openOn(map); } -map.on('contextmenu', onMapLongClick); - - +map.on("contextmenu", onMapLongClick); // handle position and zoom function onMapMoveOrZoom(e) { - localStorage.setItem('map.lat', map.getCenter().lat); - localStorage.setItem('map.lng', map.getCenter().lng); - localStorage.setItem('map.zoom', map.getZoom()); + localStorage.setItem("map.lat", map.getCenter().lat); + localStorage.setItem("map.lng", map.getCenter().lng); + localStorage.setItem("map.zoom", map.getZoom()); } -map.on('moveend', onMapMoveOrZoom); -map.on('zoomend', onMapMoveOrZoom); - - +map.on("moveend", onMapMoveOrZoom); +map.on("zoomend", onMapMoveOrZoom); // tools function htmlentities(rawStr) { - return rawStr.replace(/[\u00A0-\u9999<>\&]/g, ((i) => `&#${i.charCodeAt(0)};`)); + return rawStr.replace( + /[\u00A0-\u9999<>\&]/g, + (i) => `&#${i.charCodeAt(0)};` + ); } function shortLabelHtml(label) { if (label.length > 9) { label = htmlentities(label.substring(0, 8).trim()) + ".."; } else if (label.length <= 4) { - const padding = ' '.repeat((7-label.length)/2); + const padding = " ".repeat((7 - label.length) / 2); label = padding + htmlentities(label) + padding; } return label; } function popupHtml(payload) { - return '
' + htmlentities(payload.name) + '
' - + '
' + htmlentities(payload.label) + '
' - + '
' - + payload.lat.toFixed(4) + '°/' + payload.lng.toFixed(4) + '°
' - + htmlentities(new Date(payload.timestamp*1000).toLocaleString()) - + '
'; + return ( + '
' + + htmlentities(payload.name) + + "
" + + "
" + + htmlentities(payload.label) + + "
" + + "
" + + payload.lat.toFixed(4) + + "°/" + + payload.lng.toFixed(4) + + "°
" + + htmlentities(new Date(payload.timestamp * 1000).toLocaleString()) + + "
" + ); } diff --git a/manifest.toml b/manifest.toml index 5d74bf3..81a7c4e 100644 --- a/manifest.toml +++ b/manifest.toml @@ -1,3 +1,4 @@ name = "Maps" source_code_url = "https://github.com/deltachat/maps" request_internet_access = true +request_integration = 'map' diff --git a/mapServices.js b/mapServices.js new file mode 100644 index 0000000..c1b6f8a --- /dev/null +++ b/mapServices.js @@ -0,0 +1,18 @@ +const defaultServiceKey = 'OpenStreetMap'; +const mapServices = { + 'OpenStreetMap': { + url: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png', + options: { + maxZoom: 19, + attribution: '© OpenStreetMap' + } + }, + 'opentopomap': { + url: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', + subdomains: ['a', 'b', 'c'], + options: { + maxZoom: 18, + attribution: '© opentopomap' + } + } +}; diff --git a/style.css b/style.css new file mode 100644 index 0000000..6939fde --- /dev/null +++ b/style.css @@ -0,0 +1,335 @@ +body { + padding: 0; + margin: 0; +} + +html, body, #map { + height: 100%; + width: 100vw; +} + +#map { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.poi-tooltip { + font-weight: bold; + font-size: 15px; + color: #ff3b30; + text-shadow: 1px 1px 1px #fff, -1px -1px 1px #fff, 1px -1px 1px #fff, -1px 1px 1px #fff; + background: transparent; + box-shadow: none; + border: none; +} +.ppl-tooltip { + text-align: right; + font-size: 15px; + color: white; + text-shadow: none; + background: transparent; + box-shadow: none; + border: none; +} +.ppl-name { + padding: 0 5px; + font-weight: bold; + border: 1px solid white; + border-radius: 10px; +} +.ppl-time { + text-shadow: 1px 1px 1px #fff, -1px -1px 1px #fff, 1px -1px 1px #fff, -1px 1px 1px #fff !important; + position: relative; + color: #333; + font-size: 12px; + top: -7px; +} +.ppl-online { + height: 10px; width: 10px; + border: 1px solid white; + border-radius: 50%; + display: inline-block; + position: relative; right: -4px; top: -14px; + background-color: #34c759; +} +.poi-tooltip::before, .ppl-tooltip::before { + border: none; +} + +.leaflet-control-scale-line { + text-shadow: 1px 1px 1px #fff, -1px -1px 1px #fff, 1px -1px 1px #fff, -1px 1px 1px #fff; + background: rgba(255, 255, 255, 0.4); +} + +.leaflet-control-attribution { + text-shadow: 1px 1px 1px #fff, -1px -1px 1px #fff, 1px -1px 1px #fff, -1px 1px 1px #fff !important; + background: transparent !important; + padding: 2px 6px; +} + +.leaflet-top { + top: 45%; + background: transparent !important; +} +.leaflet-control-zoom { + border: 0 !important; +} +.leaflet-control-zoom-in, .leaflet-control-zoom-out { + color: #333 !important; + font-size: 30px !important; +} +.leaflet-bar a { + border-radius: 50% !important; + background: rgba(255, 255, 255, 0.8); + padding: 10px; + margin: 10px; +} + +.formx { + text-align: center; +} +.formx input, .formx button { + text-align: center; + font-size: 16px; + border: 1px solid #BBB; + border-radius: 8px; +} +.formx button { + margin-top: 4px; + + background-color: transparent; +} + +/*** map tile selector ***/ + +#mapTileServiceSelector { + position: absolute; + bottom: 26px; + right: 10px; + width: 150px; + height: auto; + padding: 10px; + font-size: 14px; + border: 1px solid #ccc; + border-radius: 4px; + background-color: white; + z-index: 1000; +} + +.android-webview #mapTileServiceSelector { + width: 190px !important; +} + +#mapTileServiceSelector option { + padding: 10 px; + background-color: #f9f9f9; + color: #333; +} +#mapTileServiceSelector:focus, +#mapTileServiceSelector:active { + border-color: #999; s + outline: none; +} + +/*** overlays ***/ + +.overlay { + display: none; + position: absolute; + top: 20px; + left: 80px; + background: rgba(255, 255, 255, 0.95); + border-radius: 10px; + padding: 15px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.55); + max-width: 300px; + max-height: 400px; + overflow-y: auto; + z-index: 1000; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; +} + +.overlay h3 { + margin: 0 0 15px 0; + font-size: 16px; + color: #333; + text-align: center; + border-bottom: 2px solid #007AFF; + padding-bottom: 8px; +} + +.contact-item { + display: flex; + align-items: center; + margin-bottom: 5px; + padding: 8px; + cursor: pointer; + border-radius: 24px; +} + +.contact-item:hover { + background: rgba(104, 98, 98, 0.1); +} + +.contact-color { + width: 16px; + height: 16px; + border-radius: 50%; + margin-right: 10px; + border: 2px solid #fff; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); + margin-left: 6px; +} + +.contact-name { + flex: 1; + font-size: 14px; + color: #333; + font-weight: 500; +} + +.contact-time { + font-size: 12px; + color: #666; + margin: 0 8px; + white-space: nowrap; +} + +.item-button { + background: #60a1574a; + color: white; + border: none; + border-radius: 50%; + font-size: 12px; + cursor: pointer; + transition: background-color 0.2s; + margin-left: 5px; + height: 32px; + width: 32px; +} + +.item-button:hover { + background: #60a1578b; +} + +.no-items { + text-align: center; + color: #666; + font-style: italic; + padding: 20px; +} + +.toggle-overlay { + position: absolute; + top: 20px; + left: 40px; + background: rgba(255, 255, 255, 0.9); + border: none; + border-radius: 50%; + -webkit-border-radius: 50%; + width: 50px; + height: 50px; + min-width: 50px; + min-height: 50px; + max-width: 50px; + max-height: 50px; + font-size: 18px; + cursor: pointer; + z-index: 1001; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.55); + transition: all 0.2s; + /* Ensure proper centering and circular shape in webviews */ + box-sizing: border-box; + -webkit-box-sizing: border-box; + -webkit-appearance: none; + -webkit-tap-highlight-color: transparent; + /* Force hardware acceleration for better rendering */ + -webkit-transform: translateX(-50%) translateZ(0); + transform: translateX(-50%) translateZ(0); + /* Center the emoji content */ + display: flex; + align-items: center; + justify-content: center; + line-height: 1; + /* Prevent text wrapping and ensure circular shape */ + white-space: nowrap; + overflow: hidden; +} + +.toggle-overlay:hover { + background: rgba(255, 255, 255, 1); + transform: scale(1.05); + -webkit-transform: translateX(-50%) scale(1.05) translateZ(0); +} + +/* Additional webview compatibility for Android (to make icons look the same)*/ +@media screen and (-webkit-min-device-pixel-ratio: 0) { + .toggle-overlay { + /* Force subpixel rendering */ + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + /* Ensure proper touch handling */ + -webkit-touch-callout: none; + -webkit-user-select: none; + user-select: none; + /* High-DPI display compatibility */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + /* Ensure consistent sizing */ + -webkit-text-size-adjust: 100%; + text-size-adjust: 100%; + } +} + +/* Additional media queries for different screen densities */ +@media screen and (-webkit-min-device-pixel-ratio: 2) { + .toggle-overlay { + /* Ensure crisp rendering on high-DPI displays */ + image-rendering: -webkit-optimize-contrast; + image-rendering: optimize-contrast; + } +} + +.overlay-hidden .overlay { + display: none; +} + +/* POI overlay specific styles */ +.poi-toggle { + top: 80px; + left: 40px; +} + +.poi-toggle:hover { + -webkit-transform: translateX(-50%) scale(1.05) translateZ(0); + transform: translateX(-50%) scale(1.05) translateZ(0); +} + +.poi-overlay { + top: 80px; +} + +.toggle-button:hover { + background: #f0f0f0; +} + +.toggle-button.active { + background: #007bff; + border-color: #0056b3; + color: white; +} + +.toggle-button svg { + width: 24px; + height: 24px; + /* Ensure icon is perfectly centered */ + display: block; + margin: auto; +} From 8681b0152f08d8998d5bfd0917997be736485f9e Mon Sep 17 00:00:00 2001 From: Nico de Haen Date: Mon, 8 Sep 2025 13:40:52 +0200 Subject: [PATCH 2/5] Use maps:// protocol on desktop --- index.js | 7 ++-- manifest.toml | 1 - mapServices.js | 94 +++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 97 insertions(+), 5 deletions(-) diff --git a/index.js b/index.js index 32e2952..b705353 100644 --- a/index.js +++ b/index.js @@ -49,8 +49,9 @@ function addMapService(map, serviceKey) { map.removeLayer(annotationLayer); } const subdomains = service.subdomains || []; - - tileLayer = L.tileLayer(service.url, { + // desktop does not allow electron to access internet directly + const protocol = navigator.userAgent.includes('Electron') ? 'maps:' : 'https:'; + tileLayer = L.tileLayer(service.url.replace('https:', protocol), { maxZoom: service.options.maxZoom, attribution: service.options.attribution, tms: service.options.tms || false, @@ -60,7 +61,7 @@ function addMapService(map, serviceKey) { if (service.annotationLayer) { const annotationLayersubdomains = service.annotationLayer.subdomains || []; - annotationLayer = L.tileLayer(service.annotationLayer.url, { + annotationLayer = L.tileLayer(service.annotationLayer.url.replace('https:', protocol), { maxZoom: service.annotationLayer.options.maxZoom, tms: service.annotationLayer.options.tms || false, subdomains: annotationLayersubdomains, //service.subdomains.join(',') diff --git a/manifest.toml b/manifest.toml index 81a7c4e..298f0b1 100644 --- a/manifest.toml +++ b/manifest.toml @@ -1,4 +1,3 @@ name = "Maps" source_code_url = "https://github.com/deltachat/maps" -request_internet_access = true request_integration = 'map' diff --git a/mapServices.js b/mapServices.js index c1b6f8a..de039ab 100644 --- a/mapServices.js +++ b/mapServices.js @@ -1,4 +1,4 @@ -const defaultServiceKey = 'OpenStreetMap'; +const defaultServiceKey = 'OSmap.de'; const mapServices = { 'OpenStreetMap': { url: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png', @@ -7,6 +7,22 @@ const mapServices = { attribution: '© OpenStreetMap' } }, + 'OSmap.de': { + url: 'https://{s}.tile.openstreetmap.de/{z}/{x}/{y}.png', + subdomains: ['a', 'b', 'c', 'd'], + options: { + maxZoom: 18, + attribution: '© OSmap.de' + } + }, + 'OSmap.fr': { + url: 'https://{s}.tile.openstreetmap.fr/osmfr/{z}/{x}/{y}.png', + subdomains: ['a', 'b', 'c'], + options: { + maxZoom: 18, + attribution: '© OSmap.fr' + } + }, 'opentopomap': { url: 'https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', subdomains: ['a', 'b', 'c'], @@ -14,5 +30,81 @@ const mapServices = { maxZoom: 18, attribution: '© opentopomap' } + }, + '高德地图': { + url: 'https://webrd0{s}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}', + subdomains: '1234', + options: { + maxZoom: 18, + attribution: '© 高德地图' + } + }, + '高德路况': { + url: 'https://webrd0{s}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}', + subdomains: '1234', + options: { + maxZoom: 18, + attribution: '© 高德路况' + }, + annotationLayer: { + url: 'https://tm.amap.com/trafficengine/mapabc/traffictile?v=1.0&=&=&t=1&t=1&x={x}&y={y}&z={z}', + options: { + maxZoom: 18 + } + } + }, + '高德卫星': { + url: 'https://webst0{s}.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}', + subdomains: '1234', + options: { + maxZoom: 18, + attribution: '© 高德卫星' + }, + annotationLayer: { + url: 'https://webst0{s}.is.autonavi.com/appmaptile?style=8&x={x}&y={y}&z={z}', + subdomains: '1234', + options: { + maxZoom: 18 + } + } + }, + '腾讯地图': { + url: 'https://rt{s}.map.gtimg.com/tile?z={z}&x={x}&y={y}&type=vector&styleid=1', + subdomains: '012', + options: { + maxZoom: 18, + tms: true, + attribution: '© 腾讯地图' + } + }, + '天地图': { + url: 'https://t{s}.tianditu.gov.cn/vec_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec_w&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=75f0434f240669f4a2df6359275146d2', + subdomains: '01234567',//['0', '1', '2', '3', '4', '5', '6', '7'], + options: { + maxZoom: 18, + attribution: '© 天地图' + }, + annotationLayer: { + url: 'https://t{s}.tianditu.gov.cn/cva_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cva&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=75f0434f240669f4a2df6359275146d2', + subdomains: '01234567', + options: { + maxZoom: 18 + } + } + }, + '天地图卫星': { + url: 'https://t{s}.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=75f0434f240669f4a2df6359275146d2', + subdomains: '01234567', + options: { + maxZoom: 18, + attribution: '© 天地图' + }, + annotationLayer: { + url: 'https://t{s}.tianditu.gov.cn/cva_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cva&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=75f0434f240669f4a2df6359275146d2', + subdomains: '01234567', + options: { + maxZoom: 18 + } + } } }; From 31d9795c712bbc79463552ba28a5009d2fb7bb66 Mon Sep 17 00:00:00 2001 From: Nico de Haen Date: Mon, 8 Sep 2025 14:08:18 +0200 Subject: [PATCH 3/5] Put new feature behind a settings icon --- images/settings.svg | 1 + index.html | 26 ++++++++++ index.js | 84 +++++++++++++++++++++++++++--- style.css | 122 +++++++++++++++++++++++++++++++++----------- 4 files changed, 195 insertions(+), 38 deletions(-) create mode 100644 images/settings.svg diff --git a/images/settings.svg b/images/settings.svg new file mode 100644 index 0000000..817c782 --- /dev/null +++ b/images/settings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/index.html b/index.html index ba67cd1..3a4fca3 100644 --- a/index.html +++ b/index.html @@ -44,6 +44,32 @@

Points of Interest

No POIs yet
+ + + +
+

Settings

+
+
+ + +
+
+ + +
+
+ + +
+
+
diff --git a/index.js b/index.js index b705353..7470954 100644 --- a/index.js +++ b/index.js @@ -21,8 +21,7 @@ if (/wv/.test(navigator.userAgent) && /Android/.test(navigator.userAgent)) { document.body.classList.add('android-webview'); } -var select = document.createElement("select"); -select.id = "mapTileServiceSelector"; +var select = document.getElementById("mapTileServiceSelector"); for (var serviceKey in mapServices) { var option = document.createElement("option"); @@ -31,8 +30,6 @@ for (var serviceKey in mapServices) { select.appendChild(option); } -document.body.appendChild(select); - var tileLayer = null; var annotationLayer = null; @@ -98,25 +95,62 @@ const pinIcon = L.icon({ // Overlay management let contactOverlayVisible = false; let poiOverlayVisible = false; +let settingsOverlayVisible = false; const contactsData = new Map(); // Store contact data for the overlay const poiData = new Map(); // Store POI data for the overlay + +// Settings management +let showContactToggle = false; +let showPoiToggle = false; + // DOM elements const contactOverlay = document.getElementById("contactsOverlay"); const poiOverlay = document.getElementById("poiOverlay"); +const settingsOverlay = document.getElementById("settingsOverlay"); const toggleBtn = document.getElementById("toggleOverlay"); const poiToggleBtn = document.getElementById("togglePoiOverlay"); +const settingsBtn = document.getElementById("settingsButton"); +const showContactToggleCheckbox = document.getElementById("showContactToggle"); +const showPoiToggleCheckbox = document.getElementById("showPoiToggle"); + +// Load settings from localStorage +function loadSettings() { + showContactToggle = localStorage.getItem("showContactToggle") === "true"; + showPoiToggle = localStorage.getItem("showPoiToggle") === "true"; + + showContactToggleCheckbox.checked = showContactToggle; + showPoiToggleCheckbox.checked = showPoiToggle; + + updateToggleVisibility(); +} + +// Save settings to localStorage +function saveSettings() { + localStorage.setItem("showContactToggle", showContactToggle.toString()); + localStorage.setItem("showPoiToggle", showPoiToggle.toString()); +} + +// Update toggle button visibility based on settings +function updateToggleVisibility() { + toggleBtn.style.display = showContactToggle ? "block" : "none"; + poiToggleBtn.style.display = showPoiToggle ? "block" : "none"; +} function initOverlay() { contactOverlay.style.display = "none"; poiOverlay.style.display = "none"; + settingsOverlay.style.display = "none"; toggleBtn.textContent = "👤"; - poiToggleBtn.style.display = "none"; // Hidden by default + + // Load settings and update visibility + loadSettings(); console.log(tracks); toggleBtn.addEventListener("click", function () { contactOverlayVisible = !contactOverlayVisible; if (contactOverlayVisible) { poiOverlayVisible = false; + settingsOverlayVisible = false; } showHideOverlays(); }); @@ -125,13 +159,37 @@ function initOverlay() { poiOverlayVisible = !poiOverlayVisible; if (poiOverlayVisible) { contactOverlayVisible = false; + settingsOverlayVisible = false; } showHideOverlays(); }); + settingsBtn.addEventListener("click", function () { + settingsOverlayVisible = !settingsOverlayVisible; + if (settingsOverlayVisible) { + contactOverlayVisible = false; + poiOverlayVisible = false; + } + showHideOverlays(); + }); + + // Settings checkbox event listeners + showContactToggleCheckbox.addEventListener("change", function () { + showContactToggle = this.checked; + saveSettings(); + updateToggleVisibility(); + }); + + showPoiToggleCheckbox.addEventListener("change", function () { + showPoiToggle = this.checked; + saveSettings(); + updateToggleVisibility(); + }); + function showHideOverlays() { contactOverlay.style.display = contactOverlayVisible ? "block" : "none"; poiOverlay.style.display = poiOverlayVisible ? "block" : "none"; + settingsOverlay.style.display = settingsOverlayVisible ? "block" : "none"; } } @@ -142,6 +200,10 @@ function updateContactsOverlay() { if (contactsData.size === 0) { contactsList.innerHTML = '
No contacts shared their location yet
'; + // Only hide contact toggle if setting is disabled, otherwise respect the setting + if (!showContactToggle) { + toggleBtn.style.display = "none"; + } return; } @@ -149,6 +211,9 @@ function updateContactsOverlay() { toggleBtn.textContent = "👥"; } + // Show contact toggle button if there are contacts AND setting is enabled + toggleBtn.style.display = showContactToggle ? "block" : "none"; + let html = ""; contactsData.forEach((contact, contactId) => { const timeAgo = formatTimeAgo(contact.lastTimestamp); @@ -173,12 +238,15 @@ function updatePoiOverlay() { if (poiData.size === 0) { poiList.innerHTML = '
No POIs yet
'; - poiToggleBtn.style.display = "none"; + // Only hide POI toggle if setting is disabled, otherwise respect the setting + if (!showPoiToggle) { + poiToggleBtn.style.display = "none"; + } return; } - // Show POI toggle button if there are POIs - poiToggleBtn.style.display = "block"; + // Show POI toggle button if there are POIs AND setting is enabled + poiToggleBtn.style.display = showPoiToggle ? "block" : "none"; let html = ""; poiData.forEach((poi, poiId) => { diff --git a/style.css b/style.css index 6939fde..2fc917f 100644 --- a/style.css +++ b/style.css @@ -107,36 +107,6 @@ html, body, #map { background-color: transparent; } -/*** map tile selector ***/ - -#mapTileServiceSelector { - position: absolute; - bottom: 26px; - right: 10px; - width: 150px; - height: auto; - padding: 10px; - font-size: 14px; - border: 1px solid #ccc; - border-radius: 4px; - background-color: white; - z-index: 1000; -} - -.android-webview #mapTileServiceSelector { - width: 190px !important; -} - -#mapTileServiceSelector option { - padding: 10 px; - background-color: #f9f9f9; - color: #333; -} -#mapTileServiceSelector:focus, -#mapTileServiceSelector:active { - border-color: #999; s - outline: none; -} /*** overlays ***/ @@ -333,3 +303,95 @@ html, body, #map { display: block; margin: auto; } + +/* Settings button */ +.settings-button { + position: absolute; + top: 20px; + right: 20px; + background: rgba(255, 255, 255, 0.9); + border: none; + border-radius: 50%; + width: 50px; + height: 50px; + font-size: 18px; + cursor: pointer; + z-index: 1001; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.55); + transition: all 0.2s; + display: flex; + align-items: center; + justify-content: center; + line-height: 1; + white-space: nowrap; + overflow: hidden; +} + +.settings-button:hover { + background: rgba(255, 255, 255, 1); + transform: scale(1.05); +} + +.settings-button img { + width: 24px; + height: 24px; + display: block; + margin: auto; +} + +/* Settings overlay */ +.settings-overlay { + top: 20px; + right: 90px; + left: auto; + max-width: 280px; +} + +.settings-content { + display: flex; + flex-direction: column; + gap: 15px; +} + +.setting-item { + display: flex; + align-items: center; + justify-content: space-between; + padding: 8px 0; + border-bottom: 1px solid #eee; +} + +.setting-item:last-child { + border-bottom: none; +} + +.setting-item label { + font-size: 14px; + color: #333; + font-weight: 500; + cursor: pointer; + flex: 1; + padding-right: 5px; +} + +.setting-item input[type="checkbox"] { + width: 18px; + height: 18px; + cursor: pointer; + accent-color: #007AFF; +} + +.setting-item select { + width: 120px; + padding: 4px 8px; + font-size: 12px; + border: 1px solid #ccc; + border-radius: 4px; + background-color: white; + cursor: pointer; +} + +.setting-item select:focus { + border-color: #007AFF; + outline: none; +} From 6979984555039375e051b88150869c9892a58b4f Mon Sep 17 00:00:00 2001 From: Nico de Haen Date: Tue, 16 Sep 2025 22:51:31 +0200 Subject: [PATCH 4/5] Hide map service selector for desktop --- create-xdc.sh | 2 +- index.js | 149 +++++++++++++++++++++++++++++-------------------- mapServices.js | 2 +- 3 files changed, 89 insertions(+), 64 deletions(-) diff --git a/create-xdc.sh b/create-xdc.sh index f06d683..268c86c 100755 --- a/create-xdc.sh +++ b/create-xdc.sh @@ -14,7 +14,7 @@ case "$1" in esac rm "$PACKAGE_NAME.xdc" 2> /dev/null -zip -9 --recurse-paths "$PACKAGE_NAME.xdc" * --exclude LICENSE README.md webxdc.js webxdc.d.ts icon.png "*screenshot*" "*marker-*png" "*-src*" "*.map" "*.sh" "*.xdc" *.DS_Store +zip -9 --recurse-paths "$PACKAGE_NAME.xdc" * --exclude LICENSE README.md webxdc.js webxdc.d.ts "*screenshot*" "*marker-*png" "*-src*" "*.map" "*.sh" "*.xdc" *.DS_Store echo "success, archive contents:" unzip -l "$PACKAGE_NAME.xdc" diff --git a/index.js b/index.js index 7470954..f989b3b 100644 --- a/index.js +++ b/index.js @@ -1,4 +1,7 @@ -// set up map +// on desktop we can't use multiple map services as long as +// https://github.com/deltachat/deltachat-desktop/pull/5455 is not merged + +const enableMultiMapServices = !navigator.userAgent.includes("Electron"); var map = L.map("map", { doubleClickZoom: true, @@ -18,72 +21,85 @@ L.control.scale({ position: "bottomleft" }).addTo(map); L.control.zoom({ position: "topright" }).addTo(map); if (/wv/.test(navigator.userAgent) && /Android/.test(navigator.userAgent)) { - document.body.classList.add('android-webview'); + document.body.classList.add("android-webview"); } -var select = document.getElementById("mapTileServiceSelector"); - -for (var serviceKey in mapServices) { - var option = document.createElement("option"); - option.value = serviceKey; - option.textContent = serviceKey; - select.appendChild(option); -} +if (enableMultiMapServices) { + var select = document.getElementById("mapTileServiceSelector"); -var tileLayer = null; -var annotationLayer = null; + for (var serviceKey in mapServices) { + var option = document.createElement("option"); + option.value = serviceKey; + option.textContent = serviceKey; + select.appendChild(option); + } -function addMapService(map, serviceKey) { - localStorage.setItem("map.tileService", serviceKey); - console.log("Switching tile service to:", serviceKey); - const service = mapServices[serviceKey]; - if (!service) return; + var tileLayer = null; + var annotationLayer = null; - if (tileLayer && map.hasLayer(tileLayer)) { - map.removeLayer(tileLayer); - } - if (annotationLayer && map.hasLayer(annotationLayer)) { - map.removeLayer(annotationLayer); - } - const subdomains = service.subdomains || []; - // desktop does not allow electron to access internet directly - const protocol = navigator.userAgent.includes('Electron') ? 'maps:' : 'https:'; - tileLayer = L.tileLayer(service.url.replace('https:', protocol), { - maxZoom: service.options.maxZoom, - attribution: service.options.attribution, - tms: service.options.tms || false, - subdomains: subdomains, //service.subdomains.join(',') - }).addTo(map); + function addMapService(map, serviceKey) { + localStorage.setItem("map.tileService", serviceKey); + console.log("Switching tile service to:", serviceKey); + const service = mapServices[serviceKey]; + if (!service) return; - if (service.annotationLayer) { - const annotationLayersubdomains = - service.annotationLayer.subdomains || []; - annotationLayer = L.tileLayer(service.annotationLayer.url.replace('https:', protocol), { - maxZoom: service.annotationLayer.options.maxZoom, - tms: service.annotationLayer.options.tms || false, - subdomains: annotationLayersubdomains, //service.subdomains.join(',') + if (tileLayer && map.hasLayer(tileLayer)) { + map.removeLayer(tileLayer); + } + if (annotationLayer && map.hasLayer(annotationLayer)) { + map.removeLayer(annotationLayer); + } + const subdomains = service.subdomains || []; + // desktop does not allow electron to access internet directly + const protocol = navigator.userAgent.includes("Electron") + ? "maps:" + : "https:"; + tileLayer = L.tileLayer(service.url.replace("https:", protocol), { + maxZoom: service.options.maxZoom, + attribution: service.options.attribution, + tms: service.options.tms || false, + subdomains: subdomains, //service.subdomains.join(',') }).addTo(map); + + if (service.annotationLayer) { + const annotationLayersubdomains = + service.annotationLayer.subdomains || []; + annotationLayer = L.tileLayer( + service.annotationLayer.url.replace("https:", protocol), + { + maxZoom: service.annotationLayer.options.maxZoom, + tms: service.annotationLayer.options.tms || false, + subdomains: annotationLayersubdomains, //service.subdomains.join(',') + } + ).addTo(map); + } } -} -select.addEventListener("change", function () { - const selectedService = this.value; - console.log("Selected tile service:", selectedService); - addMapService(map, selectedService); -}); + select.addEventListener("change", function () { + const selectedService = this.value; + console.log("Selected tile service:", selectedService); + addMapService(map, selectedService); + }); + + let tileServiceKey = defaultServiceKey; + if (localStorage.getItem("map.tileService") !== null) { + tileServiceKey = localStorage.getItem("map.tileService"); + console.log("Restoring tile service:", tileServiceKey); + } else { + console.log("Using default tile service:", defaultServiceKey); + } -let tileServiceKey = defaultServiceKey; -if (localStorage.getItem("map.tileService") !== null) { - tileServiceKey = localStorage.getItem("map.tileService"); - console.log("Restoring tile service:", tileServiceKey); + select.value = tileServiceKey; + select.dispatchEvent(new Event("change")); } else { - console.log("Using default tile service:", defaultServiceKey); + document.getElementById("mapTileServiceSelector").parentElement.style.display = "none"; + L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { + maxZoom: 19, + attribution: '© OpenStreetMap', + tms: false, + }).addTo(map); } -select.value = tileServiceKey; -select.dispatchEvent(new Event("change")); - - const pinIcon = L.icon({ iconUrl: "images/pin-icon.png", iconRetinaUrl: "images/pin-icon-2x.png", @@ -117,10 +133,10 @@ const showPoiToggleCheckbox = document.getElementById("showPoiToggle"); function loadSettings() { showContactToggle = localStorage.getItem("showContactToggle") === "true"; showPoiToggle = localStorage.getItem("showPoiToggle") === "true"; - + showContactToggleCheckbox.checked = showContactToggle; showPoiToggleCheckbox.checked = showPoiToggle; - + updateToggleVisibility(); } @@ -141,7 +157,7 @@ function initOverlay() { poiOverlay.style.display = "none"; settingsOverlay.style.display = "none"; toggleBtn.textContent = "👤"; - + // Load settings and update visibility loadSettings(); console.log(tracks); @@ -185,12 +201,13 @@ function initOverlay() { saveSettings(); updateToggleVisibility(); }); +} - function showHideOverlays() { - contactOverlay.style.display = contactOverlayVisible ? "block" : "none"; - poiOverlay.style.display = poiOverlayVisible ? "block" : "none"; - settingsOverlay.style.display = settingsOverlayVisible ? "block" : "none"; - } +// Global function to show/hide overlays +function showHideOverlays() { + contactOverlay.style.display = contactOverlayVisible ? "block" : "none"; + poiOverlay.style.display = poiOverlayVisible ? "block" : "none"; + settingsOverlay.style.display = settingsOverlayVisible ? "block" : "none"; } // Update the contacts overlay @@ -582,6 +599,14 @@ function onMapMoveOrZoom(e) { map.on("moveend", onMapMoveOrZoom); map.on("zoomend", onMapMoveOrZoom); +// Close overlays when clicking on the map +map.on("click", function () { + contactOverlayVisible = false; + poiOverlayVisible = false; + settingsOverlayVisible = false; + showHideOverlays(); +}); + // tools function htmlentities(rawStr) { diff --git a/mapServices.js b/mapServices.js index de039ab..c5b725c 100644 --- a/mapServices.js +++ b/mapServices.js @@ -1,4 +1,4 @@ -const defaultServiceKey = 'OSmap.de'; +const defaultServiceKey = 'OpenStreetMap'; const mapServices = { 'OpenStreetMap': { url: 'https://tile.openstreetmap.org/{z}/{x}/{y}.png', From 4577cb223f187ad7a9e9682475f54bd96776d8f9 Mon Sep 17 00:00:00 2001 From: Nico de Haen Date: Fri, 24 Oct 2025 09:55:46 +0200 Subject: [PATCH 5/5] Unhide map selector again - reduce services list - add new icon - refactor var => const/let --- icon.png | Bin 9496 -> 148273 bytes index.js | 318 +++++++++++++++++++++++-------------------------- mapServices.js | 68 ----------- 3 files changed, 152 insertions(+), 234 deletions(-) diff --git a/icon.png b/icon.png index 85861e7f8fd9d0e8dc7f02917481c7196b94a323..44adc27bc0943d04ce76bc254ea9850e4a81fb8e 100644 GIT binary patch literal 148273 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%0DyH{dmC=$;kaF6ftx)Y043c1bzB|H|6BT*rWIG~ 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 1) { - toggleBtn.textContent = "👥"; + toggleBtn.textContent = '👥'; } // Show contact toggle button if there are contacts AND setting is enabled - toggleBtn.style.display = showContactToggle ? "block" : "none"; + toggleBtn.style.display = showContactToggle ? 'block' : 'none'; - let html = ""; + let html = ''; contactsData.forEach((contact, contactId) => { const timeAgo = formatTimeAgo(contact.lastTimestamp); html += ` @@ -251,21 +237,21 @@ function updateContactsOverlay() { // Update the POI overlay function updatePoiOverlay() { - const poiList = document.getElementById("poiList"); + const poiList = document.getElementById('poiList'); if (poiData.size === 0) { poiList.innerHTML = '
No POIs yet
'; // Only hide POI toggle if setting is disabled, otherwise respect the setting if (!showPoiToggle) { - poiToggleBtn.style.display = "none"; + poiToggleBtn.style.display = 'none'; } return; } // Show POI toggle button if there are POIs AND setting is enabled - poiToggleBtn.style.display = showPoiToggle ? "block" : "none"; + poiToggleBtn.style.display = showPoiToggle ? 'block' : 'none'; - let html = ""; + let html = ''; poiData.forEach((poi, poiId) => { const timeAgo = formatTimeAgo(poi.timestamp); html += ` @@ -287,22 +273,22 @@ function updatePoiOverlay() { // Format timestamp to relative time (e.g., "2h ago", "30m ago", "3d ago") function formatTimeAgo(timestamp) { - if (!timestamp) return ""; + if (!timestamp) return ''; const now = Math.floor(Date.now() / 1000); const diff = now - timestamp; if (diff < 60) { - return "now"; + return 'now'; } else if (diff < 3600) { const minutes = Math.floor(diff / 60); - return minutes + "m ago"; + return minutes + 'm ago'; } else if (diff < 86400) { const hours = Math.floor(diff / 3600); - return hours + "h ago"; + return hours + 'h ago'; } else { const days = Math.floor(diff / 86400); - return days + "d ago"; + return days + 'd ago'; } } @@ -312,19 +298,19 @@ function zoomToContact(contactId) { if (contact && contact.lastPosition) { zoomToPosition(contact.lastPosition); } else { - console.log("Contact not found or no position"); + console.log('Contact not found or no position'); } } // Function to zoom to a specific POI function zoomToPoi(poiId) { - console.log("poiData contents:", poiData); + console.log('poiData contents:', poiData); const poi = poiData.get(poiId); - console.log("Found poi:", poi); + console.log('Found poi:', poi); if (poi && poi.position) { zoomToPosition(poi.position); } else { - console.log("POI not found or no position"); + console.log('POI not found or no position'); } } @@ -333,14 +319,14 @@ function zoomToPosition(position) { } // Initialize overlay when DOM is ready -document.addEventListener("DOMContentLoaded", function () { +document.addEventListener('DOMContentLoaded', function () { initOverlay(); updateContactsOverlay(); updatePoiOverlay(); }); -var tracks = {}; -var initDone = false; +const tracks = {}; +let initDone = false; /** * @type {Payload} @@ -361,13 +347,13 @@ window.webxdc .setUpdateListener((update) => { const payload = update.payload; - if (payload.action === "pos") { + if (payload.action === 'pos') { if (payload.independent) { // Store POI data for overlay const poiId = - "poi_" + + 'poi_' + Date.now() + - "_" + + '_' + Math.random().toString(36).substr(2, 9); const poiDataObj = { name: payload.name, @@ -376,7 +362,7 @@ window.webxdc position: [payload.lat, payload.lng], timestamp: payload.timestamp, }; - console.log("Adding POI with ID:", poiId, "Data:", poiDataObj); + console.log('Adding POI with ID:', poiId, 'Data:', poiDataObj); poiData.set(poiId, poiDataObj); // Update POI overlay @@ -390,13 +376,13 @@ window.webxdc .bindTooltip(shortLabelHtml(payload.label), { permanent: true, interactive: true, - direction: "bottom", + direction: 'bottom', offset: [0, -17], - className: "poi-tooltip", + className: 'poi-tooltip', }) .openTooltip(); } - marker.on("click", function () { + marker.on('click', function () { if (!marker.getPopup()) { marker .bindPopup(popupHtml(payload), { @@ -472,7 +458,7 @@ window.webxdc // contact's tracks function updateTrack(contactId) { - var track = tracks[contactId]; + const track = tracks[contactId]; if (track.polyline) { map.removeLayer(track.polyline); @@ -482,7 +468,7 @@ function updateTrack(contactId) { weight: 4, }).addTo(map); - var content = + const content = '' + @@ -511,17 +497,17 @@ function updateTrack(contactId) { icon: pinIcon, opacity: 0, }).addTo(map); - var tooltip = L.tooltip({ + const tooltip = L.tooltip({ content: content, permanent: true, interactive: true, - direction: "bottom", + direction: 'bottom', offset: [0, -28], - className: "ppl-tooltip", + className: 'ppl-tooltip', }); track.marker.bindTooltip(tooltip).openTooltip(); track.marker.unbindPopup(); - track.marker.on("click", function () { + track.marker.on('click', function () { if (!track.marker.getPopup()) { track.marker .bindPopup(popupHtml(track.payload), { closeButton: false }) @@ -542,37 +528,37 @@ setInterval(() => { // share a dedicated location -var popup; -var popupLatlng; +let popup; +let popupLatlng; function onSend() { - const elem = document.getElementById("textToSend"); + const elem = document.getElementById('textToSend'); const value = elem.value.trim(); - if (value != "") { + if (value != '') { popup.close(); webxdc.sendUpdate( { payload: { - action: "pos", + action: 'pos', independent: true, timestamp: Math.floor(Date.now() / 1000), lat: popupLatlng.lat, lng: popupLatlng.lng, label: elem.value, name: webxdc.selfName, - color: "#888", + color: '#888', }, }, - "POI added to map at " + + 'POI added to map at ' + popupLatlng.lat.toFixed(4) + - "/" + + '/' + popupLatlng.lng.toFixed(4) + - " with text: " + + ' with text: ' + value ); } else { elem.placeholder = - elem.placeholder == "Label" ? "Enter label" : "Label"; // just some cheap visual feedback + elem.placeholder == 'Label' ? 'Enter label' : 'Label'; // just some cheap visual feedback } } @@ -586,21 +572,21 @@ function onMapLongClick(e) { .openOn(map); } -map.on("contextmenu", onMapLongClick); +map.on('contextmenu', onMapLongClick); // handle position and zoom function onMapMoveOrZoom(e) { - localStorage.setItem("map.lat", map.getCenter().lat); - localStorage.setItem("map.lng", map.getCenter().lng); - localStorage.setItem("map.zoom", map.getZoom()); + localStorage.setItem('map.lat', map.getCenter().lat); + localStorage.setItem('map.lng', map.getCenter().lng); + localStorage.setItem('map.zoom', map.getZoom()); } -map.on("moveend", onMapMoveOrZoom); -map.on("zoomend", onMapMoveOrZoom); +map.on('moveend', onMapMoveOrZoom); +map.on('zoomend', onMapMoveOrZoom); // Close overlays when clicking on the map -map.on("click", function () { +map.on('click', function () { contactOverlayVisible = false; poiOverlayVisible = false; settingsOverlayVisible = false; @@ -618,9 +604,9 @@ function htmlentities(rawStr) { function shortLabelHtml(label) { if (label.length > 9) { - label = htmlentities(label.substring(0, 8).trim()) + ".."; + label = htmlentities(label.substring(0, 8).trim()) + '..'; } else if (label.length <= 4) { - const padding = " ".repeat((7 - label.length) / 2); + const padding = ' '.repeat((7 - label.length) / 2); label = padding + htmlentities(label) + padding; } return label; @@ -632,16 +618,16 @@ function popupHtml(payload) { payload.color + '">' + htmlentities(payload.name) + - "" + - "
" + + '
' + + '
' + htmlentities(payload.label) + - "
" + - "
" + + '
' + + '
' + payload.lat.toFixed(4) + - "°/" + + '°/' + payload.lng.toFixed(4) + - "°
" + + '°
' + htmlentities(new Date(payload.timestamp * 1000).toLocaleString()) + - "
" + '
' ); } diff --git a/mapServices.js b/mapServices.js index c5b725c..1266620 100644 --- a/mapServices.js +++ b/mapServices.js @@ -38,73 +38,5 @@ const mapServices = { maxZoom: 18, attribution: '© 高德地图' } - }, - '高德路况': { - url: 'https://webrd0{s}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}', - subdomains: '1234', - options: { - maxZoom: 18, - attribution: '© 高德路况' - }, - annotationLayer: { - url: 'https://tm.amap.com/trafficengine/mapabc/traffictile?v=1.0&=&=&t=1&t=1&x={x}&y={y}&z={z}', - options: { - maxZoom: 18 - } - } - }, - '高德卫星': { - url: 'https://webst0{s}.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}', - subdomains: '1234', - options: { - maxZoom: 18, - attribution: '© 高德卫星' - }, - annotationLayer: { - url: 'https://webst0{s}.is.autonavi.com/appmaptile?style=8&x={x}&y={y}&z={z}', - subdomains: '1234', - options: { - maxZoom: 18 - } - } - }, - '腾讯地图': { - url: 'https://rt{s}.map.gtimg.com/tile?z={z}&x={x}&y={y}&type=vector&styleid=1', - subdomains: '012', - options: { - maxZoom: 18, - tms: true, - attribution: '© 腾讯地图' - } - }, - '天地图': { - url: 'https://t{s}.tianditu.gov.cn/vec_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec_w&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=75f0434f240669f4a2df6359275146d2', - subdomains: '01234567',//['0', '1', '2', '3', '4', '5', '6', '7'], - options: { - maxZoom: 18, - attribution: '© 天地图' - }, - annotationLayer: { - url: 'https://t{s}.tianditu.gov.cn/cva_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cva&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=75f0434f240669f4a2df6359275146d2', - subdomains: '01234567', - options: { - maxZoom: 18 - } - } - }, - '天地图卫星': { - url: 'https://t{s}.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=75f0434f240669f4a2df6359275146d2', - subdomains: '01234567', - options: { - maxZoom: 18, - attribution: '© 天地图' - }, - annotationLayer: { - url: 'https://t{s}.tianditu.gov.cn/cva_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=cva&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=75f0434f240669f4a2df6359275146d2', - subdomains: '01234567', - options: { - maxZoom: 18 - } - } } };