<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> {{ if .IsThemeDark }} <meta name="darkreader-lock"> {{ end }} <title>{{ translate "site_name" }} - {{ .Query }}</title> <link rel="stylesheet" href="/static/css/style.css"> <link rel="stylesheet" href="/static/css/{{.Theme}}.css"> <link rel="search" type="application/opensearchdescription+xml" title="{{ translate "site_name" }}" href="/opensearch.xml"> <script src="https://cdn.jsdelivr.net/npm/leaflet@1.9.4/dist/leaflet.js"></script> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.9.4/dist/leaflet.css" /> <style> body, html { height: 100%; margin: 0; padding: 0; overflow: hidden; } #map { height: calc(100% - 100px); width: 100%; top: 100px; } </style> </head> <body> <form action="/search" id="prev-next-form" class="results-search-container" method="GET" autocomplete="off"> <h1 class="logomobile"><a class="no-decoration" href="./">{{ translate "site_name" }}</a></h1> <div class="wrapper-results"> <input type="text" name="q" value="{{ .Query }}" id="search-input"/> <button id="search-wrapper-ico" class="material-icons-round" name="t" value="map">search</button> <div class="autocomplete"> <ul> </ul> </div> <input type="submit" class="hide" name="t" value="map" /> </div> <div class="sub-search-button-wrapper"> <div class="search-container-results-btn"> <button id="sub-search-wrapper-ico" class="material-icons-round clickable" name="t" value="text">search</button> <button name="t" value="text" class="clickable">{{ translate "web" }}</button> </div> <div class="search-container-results-btn"> <button id="sub-search-wrapper-ico" class="material-icons-round clickable" name="t" value="image">image</button> <button name="t" value="image" class="clickable">{{ translate "images" }}</button> </div> <div class="search-container-results-btn"> <button id="sub-search-wrapper-ico" class="material-icons-round clickable" name="t" value="video">movie</button> <button name="t" value="video" class="clickable">{{ translate "videos" }}</button> </div> <div class="search-container-results-btn"> <button id="sub-search-wrapper-ico" class="material-icons-round clickable" name="t" value="forum">forum</button> <button name="t" value="forum" class="clickable">{{ translate "forums" }}</button> </div> <div class="search-container-results-btn"> <button id="sub-search-wrapper-ico" class="material-icons-round clickable search-active" name="t" value="map">map</button> <button name="t" value="map" class="clickable search-active">{{ translate "maps" }}</button> </div> <div class="search-container-results-btn"> <button id="sub-search-wrapper-ico" class="material-icons-round clickable" name="t" value="file">share</button> <button name="t" value="file" class="clickable">{{ translate "torrents" }}</button> </div> </div> </form> {{ if .Found }} <div id="map"></div> {{ else }} <div id="map"></div> <div class="message">{{ translate "no_results" .Query }}</div> {{ end }} {{ if .Found }} <script> document.addEventListener('DOMContentLoaded', function () { var map = L.map('map').setView([{{ .Latitude }}, {{ .Longitude }}], 13); // Set view to found coordinates // Base layers var streets = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 19, attribution: '© OpenStreetMap contributors' }); var satellite = L.tileLayer('https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png', { maxZoom: 19, attribution: '© OpenStreetMap contributors' }); var esriSat = L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{x}/{y}', { maxZoom: 19, attribution: 'Tiles © Esri' }); var topo = L.tileLayer('https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', { maxZoom: 17, attribution: '© OpenTopoMap contributors' }); var baseMaps = { "{{ translate "streets" }}": streets, "{{ translate "satellite" }}": satellite, "{{ translate "esri_satellite" }}": esriSat, "{{ translate "topographic" }}": topo }; streets.addTo(map); // Add default layer // Layer control L.control.layers(baseMaps).addTo(map); // Marker with passed coordinates L.marker([{{ .Latitude }}, {{ .Longitude }}]).addTo(map) .bindPopup('{{ .Query }}'); // Add scale control L.control.scale().addTo(map); // Add custom control for geolocation L.Control.geolocate = L.Control.extend({ onAdd: function(map) { var div = L.DomUtil.create('div', 'leaflet-control-locate'); div.title = '{{ translate "locate_me" }}'; L.DomEvent.on(div, 'click', function() { map.locate({setView: true, maxZoom: 16}); }); return div; } }); L.control.geolocate = function(opts) { return new L.Control.geolocate(opts); } L.control.geolocate({ position: 'topright' }).addTo(map); // Geolocation function function onLocationFound(e) { var radius = e.accuracy / 2; L.marker(e.latlng).addTo(map) .bindPopup("{{ translate "you_are_within" }}" + radius + " {{ translate "meters_from_point" }}").openPopup(); L.circle(e.latlng, radius).addTo(map); } function onLocationError(e) { alert(e.message); } map.on('locationfound', onLocationFound); map.on('locationerror', onLocationError); }); </script> {{ end }} </body> </html>