Search/templates/map.html

156 lines
6.6 KiB
HTML
Raw Permalink Normal View History

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
2024-08-28 19:31:27 +00:00
{{ if .IsThemeDark }}
<meta name="darkreader-lock">
{{ end }}
<title>{{ .Query }} - Ocásek</title>
<link rel="stylesheet" href="/static/css/style.css">
<link rel="stylesheet" href="/static/css/{{.Theme}}.css">
2024-06-12 12:26:50 +00:00
<link rel="search" type="application/opensearchdescription+xml" title="Ocásek" href="/opensearch.xml">
2024-05-16 07:46:04 +00:00
<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 {
2024-05-21 19:22:36 +00:00
height: calc(100% - 100px);
width: 100%;
2024-05-21 19:22:36 +00:00
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="./">Ocásek</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>
2024-08-21 21:23:08 +00:00
<div class="autocomplete">
<ul>
</ul>
</div>
<input type="submit" class="hide" name="t" value="map" />
</div>
2024-05-21 19:22:36 +00:00
<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">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">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">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">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">Maps</button>
</div>
<div class="search-container-results-btn">
2024-05-28 05:22:02 +00:00
<button id="sub-search-wrapper-ico" class="material-icons-round clickable" name="t" value="file">share</button>
<button name="t" value="file" class="clickable">Torrents</button>
2024-05-21 19:22:36 +00:00
</div>
</div>
</form>
2024-05-21 19:22:36 +00:00
{{ if .Found }}
<div id="map"></div>
{{ else }}
<div id="map"></div>
<div class="message">No results found for "{{ .Query }}". Please try another search.</div>
{{ end }}
{{ if .Found }}
<script>
document.addEventListener('DOMContentLoaded', function () {
var map = L.map('map').setView([{{ .Latitude }}, {{ .Longitude }}], 13); // Set view to found coordinates
2024-05-21 19:22:36 +00:00
// Base layers
var streets = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 19,
attribution: '© OpenStreetMap contributors'
});
2024-05-21 19:22:36 +00:00
var satellite = L.tileLayer('https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png', {
maxZoom: 19,
attribution: '© OpenStreetMap contributors'
});
2024-05-21 19:22:36 +00:00
var esriSat = L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{x}/{y}', {
maxZoom: 19,
attribution: 'Tiles © Esri'
});
2024-05-16 07:46:04 +00:00
2024-05-21 19:22:36 +00:00
var topo = L.tileLayer('https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', {
maxZoom: 17,
attribution: '© OpenTopoMap contributors'
});
var baseMaps = {
"Streets": streets,
"Satellite": satellite,
"Esri Satellite": esriSat,
"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 = '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("You are within " + radius + " meters from this point").openPopup();
L.circle(e.latlng, radius).addTo(map);
}
function onLocationError(e) {
alert(e.message);
}
2024-05-21 19:22:36 +00:00
map.on('locationfound', onLocationFound);
map.on('locationerror', onLocationError);
});
</script>
{{ end }}
</body>
</html>