persistent forms now only leaks ther required event handler and not the functions it uses internally.

This commit is contained in:
Erik Brakkee 2024-08-13 11:32:26 +02:00
parent 30a49217e4
commit 0ac1b0e1e4

View File

@ -1,4 +1,7 @@
function setCookie(name, value, days) {
saveFormToCookieEvent = (() => {
function setCookie(name, value, days) {
let expires = ""; let expires = "";
if (days) { if (days) {
const date = new Date(); const date = new Date();
@ -6,20 +9,20 @@ function setCookie(name, value, days) {
expires = "; expires=" + date.toUTCString(); expires = "; expires=" + date.toUTCString();
} }
document.cookie = name + "=" + encodeURIComponent(value) + expires + "; path=/"; document.cookie = name + "=" + encodeURIComponent(value) + expires + "; path=/";
} }
function getCookie(name) { function getCookie(name) {
const nameEQ = name + "="; const nameEQ = name + "=";
const ca = document.cookie.split(';'); const ca = document.cookie.split(';');
for(let i=0; i < ca.length; i++) { for (let i = 0; i < ca.length; i++) {
let c = ca[i]; let c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length); while (c.charAt(0) == ' ') c = c.substring(1, c.length);
if (c.indexOf(nameEQ) == 0) return decodeURIComponent(c.substring(nameEQ.length,c.length)); if (c.indexOf(nameEQ) == 0) return decodeURIComponent(c.substring(nameEQ.length, c.length));
} }
return null; return null;
} }
function saveFormToCookie(form) { function saveFormToCookie(form) {
const formData = new FormData(form); const formData = new FormData(form);
for (let element of form.elements) { for (let element of form.elements) {
if (element.id) { if (element.id) {
@ -40,15 +43,15 @@ function saveFormToCookie(form) {
} }
} }
} }
} }
function saveFormToCookieEvent(evt) { let saveFormToCookieEvent = function(evt) {
//console.log("save form to cookie: " + evt.target) //console.log("save form to cookie: " + evt.target)
form = evt.target form = evt.target
saveFormToCookie(form) saveFormToCookie(form)
} }
function loadFormFromCookie(form) { function loadFormFromCookie(form) {
//console.log("Load form from cookie") //console.log("Load form from cookie")
if (!form) { if (!form) {
return return
@ -83,41 +86,28 @@ function loadFormFromCookie(form) {
if (updated) { if (updated) {
htmx.trigger(form, 'formdataloaded') htmx.trigger(form, 'formdataloaded')
} }
} }
function getPersistentForms() { function getPersistentForms() {
return document.getElementsByClassName("persistent-form"); return document.getElementsByClassName("persistent-form");
} }
function loadFormsFromCookie() { function loadFormsFromCookie() {
let forms = getPersistentForms(); let forms = getPersistentForms();
for (let i = 0; i < forms.length; i++) { for (let i = 0; i < forms.length; i++) {
loadFormFromCookie(forms[i]) loadFormFromCookie(forms[i])
} }
}
// Most likely not needed.
/*
( () => {
let forms = getPersistentForms()
for (let i = 0; i < forms.length; i++) {
forms[i].addEventListener('change', function() {
saveFormToCookie(form)
})
} }
})()
*/
htmx.on('htmx:load', function(event) { htmx.on('htmx:load', function (event) {
//console.log("htmx:load") //console.log("htmx:load")
loadFormsFromCookie(); loadFormsFromCookie();
}); });
htmx.on('htmx:afterSettle', function(event) { htmx.on('htmx:afterSettle', function (event) {
//console.log("htmx:afterSettle") //console.log("htmx:afterSettle")
loadFormsFromCookie(); loadFormsFromCookie();
}); });
// when hx-boost=false return saveFormToCookieEvent
// Load form data from cookie on page load })()
//document.addEventListener('DOMContentLoaded', loadFormFromCookie);