First Working version. I can add table

This commit is contained in:
2025-05-10 16:55:52 +02:00
parent b708ef2c46
commit 2daff83e67
157 changed files with 17282 additions and 12 deletions

View File

@@ -0,0 +1,98 @@
// ===============================================================
// SEND INPUT BEFORE AJAX
// ===============================================================
// Select all elements with id starting with 'navItem-' within the #sidebar div
var navItems = document.querySelectorAll('[name="sidebar"] [id^="navItem-"]');
navItems.forEach(function (navItem) {
navItem.addEventListener("htmx:confirm", function (event) {
event.preventDefault();
// Get the page id
var layout_id = navItem.getAttribute("hx-target");
var pageDiv = document.querySelector(layout_id);
var current_page = pageDiv.querySelector('[name="current_page"]');
var current_page_id = current_page.id;
if (pageDiv) {
var elementsWithId = current_page.querySelectorAll("[id]");
var elementsInfo = [];
elementsWithId.forEach(function (element) {
// Skip elements with id starting with 'datagrid-'
if (element.id.startsWith("datagrid-")) {
return;
}
let value = "";
let method = "";
switch (element.tagName) {
case "INPUT":
if (element.type === "checkbox") {
value = element.checked; // For checkboxes
method = "checked";
} else if (element.type === "radio") {
value = element.checked;
method = "checked";
} else if (element.type === "file") {
value = element.files.length > 0 ? Array.from(element.files).map((file) => file.name) : []; // Array of file names
method = "files";
} else {
value = element.value; // For other input types
method = "value";
}
break;
case "TEXTAREA":
value = element.value; // For textareas
method = "value";
break;
case "SELECT":
value = element.multiple
? Array.from(element.selectedOptions).map((option) => option.value) // Multiple selections
: element.value; // Single selection
method = "value";
break;
default:
if (element.isContentEditable) {
value = element.innerText.trim(); // For contenteditable elements
method = "innerText";
} else {
value = element.textContent; // For other elements
method = "textContent";
}
break;
}
elementsInfo.push({
id: element.id,
type: element.tagName.toLowerCase(), // Element type in lowercase
value: value,
method: method,
});
});
var result = {
dl_id: layout_id.replace("#page_", ""),
page_id: current_page_id,
state: elementsInfo,
};
// Post the elementInfo to the specified URL
fetch("/pages/store_state", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(result),
})
.then((response) => {
event.detail.issueRequest(true);
})
.catch((error) => {
console.error("Error:", error); // Handle errors if any occur
event.detail.issueRequest(true);
});
}
});
});