Javascript based search system (using json to be dynamic)

This commit is contained in:
William Bouzourène 2025-03-24 21:36:25 +01:00
parent 76d09db5a9
commit 9cd17bd8e6
Signed by: bouzoure
SSH key fingerprint: SHA256:19MbXpLua4rUtk8tunMesD8KUKb91LXLHg8E/qTooww
2 changed files with 138 additions and 82 deletions

72
static/search.js Normal file
View file

@ -0,0 +1,72 @@
$(document).ready(function() {
$("#search").on("click", function() {
search();
});
$("#advanced").on("click", function() {
if ($(this).data("state") === "true") {
$(this).find("i").removeClass("bi-chevron-double-up");
$(this).find("i").addClass("bi-chevron-double-down");
$("#advanced-section").addClass("d-none");
$(this).data("state", "false");
} else {
$(this).find("i").removeClass("bi-chevron-double-down");
$(this).find("i").addClass("bi-chevron-double-up");
$("#advanced-section").removeClass("d-none");
$(this).data("state", "true");
}
});
var json = $("#search-json").val();
if (json.length > 0) {
var searchData = JSON.parse(json);
for (const [key, value] of Object.entries(searchData)) {
if (key === "advanced") {
if (value) {
$("#advanced").trigger("click");
}
continue;
}
if (key === "fields") {
// TODO: gérer les champs suppl.
continue
}
if (typeof value === "boolean" && value) {
console.log(key, value, typeof(value));
$("[data-search-field=" + key + "]").prop("checked", true);
} else {
$("[data-search-field=" + key + "]").val(value);
}
}
}
});
function search() {
var advancedSearch = ($("#advanced").data("state") === "true");
var searchData = {
advanced: advancedSearch
};
$("[data-search-field]").each(function() {
var advancedField = $(this).data("search-advanced");
if (!advancedSearch && advancedField) {
return;
}
var index = $(this).data("search-field");
var value = $(this).val();
if ($(this).attr("type") == "checkbox") {
value = $(this).prop("checked");
}
searchData[index] = value;
});
var json = JSON.stringify(searchData);
$("#search-json").val(json);
$("#search-form").submit();
}