<script>
const autoCompletejs = new autoComplete({
data: {
src: async function () {
document.querySelector("#{{autocomplete_selector}}");
const source = await fetch("{{ asset('json/autocomplete_vos_lieux.json') }}");
return await source.json();
},
key: ["name"],
},
sort: function (a, b) {
if (a.match < b.match) {
return -1;
}
if (a.match > b.match) {
return 1;
}
return 0;
},
query: {
manipulate: function (query) {
return query.replace("@pizza", "burger");
},
},
trigger: {
event: ["input", "focusin", "focusout"],
condition: function (query) {
return !!query.replace(/ /g, "").length && query !== "hamburger";
},
},
{% if autocomplete_selector == 'inputVille' %}
placeHolder: "",
{% else %}
placeHolder: "Je saisis ma commune",
{% endif %}
selector: "#{{autocomplete_selector}}",
debounce: 0,
searchEngine: "loose",
highlight: true,
maxResults: 5,
resultsList: {
render: true,
container: function (source) {
source.setAttribute("id", "autoComplete_list");
},
element: "ul",
destination: document.querySelector("#{{autocomplete_selector}}"),
position: "afterend",
},
resultItem: {
content: function (data, source) {
source.innerHTML = data.match;
},
element: "li",
},
noResults: function () {
const result = document.createElement("li");
result.setAttribute("class", "no_result");
result.setAttribute("tabindex", "1");
result.innerHTML = "Aucun territoire trouvé";
document.querySelector("#autoComplete_list").appendChild(result);
},
onSelection: function (feedback) {
document.querySelector("#{{autocomplete_selector}}").blur();
document.querySelector("#{{autocomplete_selector}}").value = feedback.selection.value.name;
document.querySelector("#{{autocomplete_selector}}").setAttribute("placeholder", "Je saisis ma commune");
},
});
["focus", "blur"].forEach(function (eventType) {
const resultsList = document.querySelector("#autoComplete_list");
document.querySelector("#{{autocomplete_selector}}").addEventListener(eventType, function () {
if (eventType === "blur") {
resultsList.style.display = "none";
} else if (eventType === "focus") {
resultsList.style.display = "block";
}
});
});
</script>