pref-matrix

Web interface to coordinate preferences
git clone https://git.instinctive.eu/pref-matrix.git
Log | Files | Refs | README | LICENSE

commit ea19ba0f58b20f540ff31aeedaa165ec4e8a40d8
parent 6547f507b2b7bbc377a34b9b56660f2335397a39
Author: Natasha Kerensikova <natgh@instinctive.eu>
Date:   Sun, 28 Jan 2024 10:33:04 +0000

Sample assets support topics
Diffstat:
Msample-assets/edit.html | 26++++++++++++++++++--------
Msample-assets/spa.html | 23++++++++++++++++-------
Msample-assets/view.html | 21+++++++++++++++------
3 files changed, 49 insertions(+), 21 deletions(-)

diff --git a/sample-assets/edit.html b/sample-assets/edit.html @@ -3,7 +3,7 @@ <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width"> - <title>Plannification JDR</title> + <title>Planification JDR</title> <link rel="stylesheet" type="text/css" href="style.css" /> <script> var val_class=["val0","val1","val2","val3","val4","val5"]; @@ -26,8 +26,17 @@ window.onerror = function(msg, url, line) { item.scrollIntoView(); } +function pathname_to_topic(str) { + var components = str.split("/"); + var fileName = components[components.length - 1]; + var lastDotIndex = fileName.lastIndexOf("-"); + return lastDotIndex !== -1 ? fileName.substring(0, lastDotIndex) : ""; +} + +var topic=pathname_to_topic(window.location.pathname); + async function send(){ - var req_body = "sub=" + encodeURIComponent(subject); + var req_body = (topic ? "topic=" + encodeURIComponent(topic) + "&" : "") + "sub=" + encodeURIComponent(subject); for (const [key, value] of outbox) { req_body += "&" + encodeURIComponent(key) + "=" + encodeURIComponent(value); } @@ -147,8 +156,9 @@ function activate_subject(){ } async function reload_data(){ + document.getElementById("back-link").href = (topic ? topic + "-" : "") + "view.html"; document.getElementById("reload-spinner").style = "display:inline"; - const response = await fetch("all.json", { cache: "no-cache" }); + const response = await fetch((topic || "all") + ".json", { cache: "no-cache" }); all_data = await response.json(); var holder = document.getElementById("pref-table-body"); @@ -168,7 +178,7 @@ async function reload_data(){ holder.appendChild(new_table_line(name)); } - subject = localStorage.getItem("subject"); + subject = localStorage.getItem("subject" + (topic ? "-" + topic : "")); activate_subject(); document.getElementById("reload-spinner").style = "display:none"; @@ -180,7 +190,7 @@ async function create_subject(){ method: "POST", cache: "no-store", headers: { "Content-Type": "application/x-www-form-urlencoded" }, - body: "name=" + encodeURIComponent(subject), + body: (topic ? "topic=" + encodeURIComponent(topic) + "&" : "") + "name=" + encodeURIComponent(subject), }); document.getElementById("create-spinner").style = "display:none"; @@ -192,7 +202,7 @@ async function create_subject(){ function set_subject(){ subject = document.getElementById("set-subject").value; - localStorage.setItem("subject", subject); + localStorage.setItem("subject" + (topic ? "-" + topic : ""), subject); activate_subject(); return false; } @@ -204,9 +214,9 @@ function reset_subject(){ </script> </head> <body onload="reload_data()"> - <h1>Plannification JDR</h1> + <h1>Planification JDR</h1> <p> - <a href="view.html">Retour à la vue d'ensemble</a> + <a href="view.html" id="back-link">Retour à la vue d'ensemble</a> <input name="test" value="Recharger" type="button" onclick="reload_data()"> <img id="reload-spinner" class="spinner" src="spinner.svg" style="display: none"> </p> diff --git a/sample-assets/spa.html b/sample-assets/spa.html @@ -27,12 +27,22 @@ window.onerror = function(msg, url, line) { item.scrollIntoView(); } +function pathname_to_topic(str) { + var components = str.split("/"); + var fileName = components[components.length - 1]; + var lastDotIndex = fileName.lastIndexOf('.'); + var basename = lastDotIndex !== -1 ? fileName.substring(0, lastDotIndex) : fileName; + return basename; +} + +var topic=pathname_to_topic(window.location.pathname); + /************************************/ /* Asynchronous Push of Preferences */ /************************************/ async function send(){ - var req_body = "sub=" + encodeURIComponent(send_subject); + var req_body = "topic=" + encodeURIComponent(topic) + "&sub=" + encodeURIComponent(send_subject); sent = outbox.get(send_subject); outbox.delete(send_subject); @@ -40,14 +50,12 @@ async function send(){ req_body += "&" + encodeURIComponent(key) + "=" + encodeURIComponent(value); } - console.log("Start fetch"); const response = await fetch("do/set-pref", { method: "POST", cache: "no-store", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: req_body, }); - console.log("End of fetch"); var to = base_timeout; @@ -230,6 +238,7 @@ function redisplay() { document.getElementById("overview-table").style = ""; document.getElementById("subject-name-label").style = "display:inline"; + document.getElementById("create-subject").style = ""; document.getElementById("create-subject-name").type = "text"; document.getElementById("create-subject-name").value = ""; @@ -264,7 +273,7 @@ function redisplay() { async function reload_data(){ document.getElementById("reload-spinner").style = "display:inline"; - const response = await fetch("all.json", { cache: "no-cache" }); + const response = await fetch(topic + ".json", { cache: "no-cache" }); all_data = await response.json(); redisplay(); @@ -279,8 +288,8 @@ async function create_subject(){ method: "POST", cache: "no-store", headers: { "Content-Type": "application/x-www-form-urlencoded" }, - body: "name=" + encodeURIComponent(name), - }); + body: "topic=" + encodeURIComponent(topic) + "&name=" + encodeURIComponent(name), + }) ; document.getElementById("create-subject-name").value = ""; document.getElementById("create-spinner").style = "display:none"; @@ -309,7 +318,7 @@ function close_change_form(){ function open_change_form(){ document.getElementById("new-subject").value = ""; document.getElementById("change-subject-form").style = "display:block"; - document.getElementById("close-subject").style = "display:inline"; + document.getElementById("close-subject").style = subject && "display:inline" || "display:none"; document.getElementById("cur-subject").style = "display:none"; document.getElementById("new-subject").style = "display:inline"; document.getElementById("open-subject").style = "display:none"; diff --git a/sample-assets/view.html b/sample-assets/view.html @@ -3,7 +3,7 @@ <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width"> - <title>Plannification JDR</title> + <title>Planification JDR</title> <link rel="stylesheet" type="text/css" href="style.css" /> <script> var val_class=["val0","val1","val2","val3","val4","val5"]; @@ -17,6 +17,15 @@ window.onerror = function(msg, url, line) { item.scrollIntoView(); } +function pathname_to_topic(str) { + var components = str.split("/"); + var fileName = components[components.length - 1]; + var lastDotIndex = fileName.lastIndexOf("-"); + return lastDotIndex !== -1 ? fileName.substring(0, lastDotIndex) : ""; +} + +var topic=pathname_to_topic(window.location.pathname); + function append_cell(line, type, cl, text) { var elt = document.createElement(type); elt.className = cl; @@ -35,8 +44,8 @@ function set_table(data) { for (const name in data[1]) { var elt = document.createElement("th"); var link = document.createElement("a"); - link.href = "edit.html"; - link.onclick = function() { localStorage.setItem("subject", name); }; + link.href = (topic ? topic + "-" : "") + "edit.html"; + link.onclick = function() { localStorage.setItem("subject" + (topic ? "-" + topic : ""), name); }; link.appendChild(document.createTextNode(name)); elt.appendChild(link); line.appendChild(elt); @@ -56,7 +65,7 @@ function set_table(data) { async function reload_table(){ document.getElementById("reload-spinner").style = "display:inline"; - const response = await fetch("all.json", { cache: "no-cache" }); + const response = await fetch((topic || "all") + ".json", { cache: "no-cache" }); const data = await response.json(); set_table(data); document.getElementById("reload-spinner").style = "display:none"; @@ -68,7 +77,7 @@ async function create_subject(name){ method: "POST", cache: "no-store", headers: { "Content-Type": "application/x-www-form-urlencoded" }, - body: "name=" + encodeURIComponent(name), + body: (topic ? "topic=" + encodeURIComponent(topic) + "&" : "") + "name=" + encodeURIComponent(name), }); if (response.ok) { reload_table(); @@ -86,7 +95,7 @@ function new_subject(){ </script> </head> <body onload="reload_table()"> - <h1>Plannification JDR</h1> + <h1>Planification JDR</h1> <p>Bienvenue sur la page d'organisation des soirés JdR. Cette page présente la vue d'ensemble des préférences. Les préférences peuvent être changées colonne par colonne, en suivant le lien en en-tête de la table. Une nouvelle colonne peut être créée au moyen du formulaire ci-dessous.</p> <form onsubmit="return new_subject()"> <p>Nouveau pseudo :