home · contact · privacy
On edit, disable undesired links, buttons even in top bar.
authorChristian Heller <c.heller@plomlompom.de>
Sun, 27 Apr 2025 15:44:24 +0000 (17:44 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Sun, 27 Apr 2025 15:44:24 +0000 (17:44 +0200)
src/templates/_base.tmpl
src/templates/_macros.tmpl
src/templates/edit_structured.tmpl

index 49a7bc94a49a47f90ae4d7e9aeb116bae76ba5a8..45fe9f87299c3e76d2b9957b4b1ad5d7fde31d67 100644 (file)
@@ -34,7 +34,7 @@ table.alternating > tbody > tr:nth-child(even) {
 td {
     vertical-align: top;
 }
-div.bad, td.bad, tr.bad, span.bad {
+div.bad, td.bad, tr.bad, span.bad, input[type="submit"].bad {
     {{macros.css_bg_red()}}
 }
 {% block css %}{% endblock %}
@@ -44,13 +44,17 @@ div.bad, td.bad, tr.bad, span.bad {
 
 <div id="header">
 <form action="{{path}}" method="POST">
+<span class="disable_on_change">
 ledger <a href="/ledger_structured">structured</a>
 / <a href="/ledger_raw">raw</a>
 · <a href="/balance">balance</a>
-· <input type="submit" name="file_load" value="reload" />
+<span class="disable_on_change">
+· <input type="submit"name="file_load" value="reload" />
+</span>
 {% if tainted %}
-    · <span class="bad">unsaved changes:<input type="submit" name="file_save" value="save"></span>
+    · <span class="bad">unsaved changes:</span><input type="submit" class="bad" name="file_save" value="save">
 {% endif %}
+</span>
 </form>
 </div>
 
index dd6fbf7d8ee035ddaff15f536012b0087e841567..158675762a6525a7cede0036e31229d70103e74d 100644 (file)
@@ -105,20 +105,22 @@ function taint() {
     Array.from(document.getElementsByClassName('enable_on_change')).forEach((el) => {
         el.disabled = false;
     });
-    // deactivate "disable_on_change" links
+    // deactivate "disable_on_change" span contents
     Array.from(document.getElementsByClassName('disable_on_change')).forEach((el) => {
-        if (el.tagName == 'SPAN') {
-            let links_text = '';
-            Array.from(el.childNodes).forEach((node) => {
-                links_text += node.textContent + ' ';
-            });
-            el.innerHTML = '';
-            const del = document.createElement('del');
-            el.appendChild(del);
-            del.textContent = links_text;
-        } else if (el.type == 'button') {
-            el.disabled = true;
-        }
+        old_nodes = Array.from(el.childNodes);
+        el.innerHTML = '';
+        old_nodes.forEach((node) => {
+            if (node.tagName == 'INPUT') {
+                node.disabled = true;
+                el.appendChild(node);
+            } else if (node.tagName == 'A') {
+                const del = document.createElement('del');
+                del.textContent = node.textContent;
+                el.appendChild(del);
+            } else {
+                el.appendChild(node);
+            };
+        });
     });
     // remove oninput handlers no longer needed (since we only ever go one way)
     Array.from(document.querySelectorAll('*')
index ee16e0875bbc6d39e4de78909ad68612812a5b03..ec677e45166995b2d0a95337c9d3da584c1ddd33 100644 (file)
@@ -254,14 +254,16 @@ window.onload = update_form;
 
 {% block content %}
 {{macros.edit_bar(block,'structured','raw')}}
-<input type="button" onclick="mirror()" value="mirror" class="disable_on_change">
-<input type="button" onclick="fill_sink()" value="fill sink" class="disable_on_change">
+<span class="disable_on_change">
+<input type="button" onclick="mirror()" value="mirror">
+<input type="button" onclick="fill_sink()" value="fill sink">
 |
-<input type="button" onclick="replace()" value="replace string" class="disable_on_change">
+<input type="button" onclick="replace()" value="replace string">
 from
 <input id="replace_from" />
 to
 <input id="replace_to" />
+</span>
 <hr />
 <table id="booking_lines" class="alternating">
 </table>