2026.camp.carte/js/index.js

64 lines
No EOL
1.9 KiB
JavaScript

import * as MAP from "./map.js"
import { PlaceDatabase } from "./places.js";
/** La carte */
/** La base de données de lieux @type {PlaceDatabase|null} */
let places = null
// CHARGEMENT
await Promise.all([
// Base de données des zones
PlaceDatabase.createDefault().then(db => places = db),
MAP.init()
]);
// Un petit point de debug
window.interhackPlaces = places;
await MAP.init_places(places)
// GESTION de la recherche
const search_form = document.getElementById("search-area")
search_form.elements["query"].addEventListener("change", () => search_form.requestSubmit())
search_form.elements["query"].addEventListener("input", () => search_form.requestSubmit())
window.addEventListener("hashchange", () => {
let place_id = decodeURIComponent(location.hash.substring(1))
if(place_id){
MAP.highlight(place_id)
} else {
MAP.unhighlight_all()
}
})
search_form.addEventListener("submit", e => {
e.preventDefault()
if(places){
let data = new FormData(search_form)
if(data.get("query")){
let resultElements = []
let search_results = places.search(data.get("query"))
for(let result_item of search_results){
let el = document.createElement("li")
let a = document.createElement("a")
el.append(a)
a.href = "#"+encodeURIComponent(result_item.ref)
a.textContent = result_item.feature.properties.name+" ("+result_item.ref+")"
resultElements.push(el)
}
if(resultElements.length > 0){
document.getElementById("search-result").replaceChildren(...resultElements)
} else {
document.getElementById("search-result").replaceChildren(document.createTextNode("Pas de resultat"))
}
} else {
document.getElementById("search-result").replaceChildren([])
}
}
})