map improvements + added forums search

This commit is contained in:
partisan 2024-05-21 21:22:36 +02:00
parent c848c72aea
commit 8da387f8e9
12 changed files with 424 additions and 65 deletions

View file

@ -15,18 +15,9 @@
overflow: hidden;
}
#map {
height: 100%;
height: calc(100% - 100px);
width: 100%;
}
.no-decoration {
padding: 1px;
border-radius: 5px;
left: 20px;
}
/* Reposition the Leaflet control container */
.leaflet-top.leaflet-left {
top: 70px; /* Adjust this value based on your logo's height */
left: 10px;
top: 100px;
}
</style>
</head>
@ -38,28 +29,118 @@
<button id="search-wrapper-ico" class="material-icons-round" name="t" value="map">search</button>
<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">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">
<button id="sub-search-wrapper-ico" class="material-icons-round clickable" name="t" value="torrent">share</button>
<button name="t" value="torrent" class="clickable">Torrents</button>
</div>
</div>
</form>
<div id="map"></div>
<script>
var map = L.map('map').setView([50.0755, 14.4378], 13); // Default to Prague, Czech Republic
{{ 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
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 19,
attribution: '© OpenStreetMap contributors'
}).addTo(map);
// Base layers
var streets = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 19,
attribution: '© OpenStreetMap contributors'
});
// Use the passed coordinates to update the map
var latitude = {{ .Latitude }};
var longitude = {{ .Longitude }};
var satellite = L.tileLayer('https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png', {
maxZoom: 19,
attribution: '© OpenStreetMap contributors'
});
L.marker([latitude, longitude]).addTo(map)
.bindPopup('{{ .Query }}')
var esriSat = L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{x}/{y}', {
maxZoom: 19,
attribution: 'Tiles © Esri'
});
function updateMap(latitude, longitude) {
map.setView([latitude, longitude], 13); // Set view to new coordinates
}
var topo = L.tileLayer('https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', {
maxZoom: 17,
attribution: '© OpenTopoMap contributors'
});
updateMap(latitude, longitude); // Update the map view to the new location
</script>
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);
}
map.on('locationfound', onLocationFound);
map.on('locationerror', onLocationError);
});
</script>
{{ end }}
</body>
</html>