[TikiWiki-commits] [Git][tikiwiki/tiki][master] [NEW] Warn users about unsaved changes in tracker fields (when adding or...

Benoit Grégoire (@benoitg) via TikiWiki-cvs <[email protected]>
Newsgroups gmane.comp.cms.tiki.cvs
Message-ID <691780ff3997a_2a17e3dfc8422f@gitlab-sidekiq-low-urgency-cpu-bound-v2-59ccd46784-fxnn8.mail>

Benoit Grégoire pushed to branch master at Tiki Wiki CMS Groupware / Tiki


Commits:
df67502d by Merci Jacob at 2025-11-14T19:12:43+00:00
[NEW] Warn users about unsaved changes in tracker fields (when adding or editing items) before leaving the page
---
* register a separate bootstrap modal handleer and avoid object addition to the window namespace

* [NEW] Warn users about unsaved changes in tracker fields (when adding or editing items) before leaving the page

See merge request tikiwiki/tiki!9004

- - - - -


5 changed files:

- lib/core/Services/Tracker/Controller.php
- path_js_importmap_generator.php
- + src/js/jquery-tiki/tracker-fields/all.dirtyCheck.js
- templates/tracker/insert_item.tpl
- templates/tracker/update_item.tpl


Changes:

=====================================
lib/core/Services/Tracker/Controller.php
=====================================
@@ -1071,6 +1071,8 @@ class Services_Tracker_Controller
             TikiLib::lib('header')->add_jq_onready($js);
         }
 
+        TikiLib::lib('header')->add_js_module('import "@jquery-tiki/tracker-fields/dirtyCheck";');
+
         $itemId = 0;
         $util = new Services_Utilities();
         if (! empty($fields) && $util->isActionPost()) {
@@ -1338,6 +1340,8 @@ class Services_Tracker_Controller
             TikiLib::lib('header')->add_jq_onready($js);
         }
 
+        TikiLib::lib('header')->add_js_module('import "@jquery-tiki/tracker-fields/dirtyCheck";');
+
         if ($_SERVER['REQUEST_METHOD'] == 'POST') {
             $access->preventRedirect(true);
             //fetch the processed fields and the changes made in the form. Put them in the 'fields' variable


=====================================
path_js_importmap_generator.php
=====================================
@@ -76,6 +76,7 @@ function generateJsImportmapScripts(bool $useBaseUrl = false)
                 "@jquery-tiki/timeago" => $tikiUrl . JS_ASSETS_PATH . "/jquery-tiki/timeago.js",
                 "@jquery-tiki/tracker-fields/emailFolder" => $tikiUrl . JS_ASSETS_PATH . "/jquery-tiki/tracker-fields/emailFolder.js",
                 "@jquery-tiki/tracker-fields/files" => $tikiUrl . JS_ASSETS_PATH . "/jquery-tiki/tracker-fields/files.js",
+                "@jquery-tiki/tracker-fields/dirtyCheck" => $tikiUrl . JS_ASSETS_PATH . "/jquery-tiki/tracker-fields/all.dirtyCheck.js",
                 "@tiki-modules/sentryBrowser" => $tikiUrl . JS_ASSETS_PATH . "/tiki-sentry-browser.js",
                 "@mermaidPack" => $tikiUrl . JS_ASSETS_PATH . "/tiki-mermaid.js",
                 "@tiki-glightbox" => $tikiUrl . JS_ASSETS_PATH . "/tiki-glightbox.js",


=====================================
src/js/jquery-tiki/tracker-fields/all.dirtyCheck.js
=====================================
@@ -0,0 +1,34 @@
+let isSubmitting = false;
+
+$(".item-submit-btn").on("click", () => {
+    isSubmitting = true;
+});
+
+const registeredListeners = [];
+
+$("input, select, textarea").each((_, element) => {
+    if (element.getAttribute("name")?.match(/^ins_(\d+)(\[\])?$/)) {
+        const initialValue = $(element).val();
+
+        const listener = (event) => {
+            const currentValue = $(element).val();
+            if (JSON.stringify(currentValue) !== JSON.stringify(initialValue) && !isSubmitting) {
+                event.preventDefault();
+            }
+        };
+
+        window.addEventListener("beforeunload", listener);
+
+        registeredListeners.push(listener);
+    }
+});
+
+$(".modal").on("hidden.bs.modal", function () {
+    cleanUpDirtyCheck();
+});
+
+function cleanUpDirtyCheck() {
+    registeredListeners.forEach((listener) => {
+        window.removeEventListener("beforeunload", listener);
+    });
+}


=====================================
templates/tracker/insert_item.tpl
=====================================
@@ -43,7 +43,7 @@
                 <input type="hidden" name="redirect" value="{$redirect|escape}">
                 <input
                     type="submit"
-                    class="btn btn-primary"
+                    class="btn btn-primary item-submit-btn"
                     onclick="needToConfirm=false;"
                     value="{tr}Create{/tr}"
                 >


=====================================
templates/tracker/update_item.tpl
=====================================
@@ -28,7 +28,7 @@
                 <input type="hidden" name="redirect" value="{$redirect|escape}">
                 <input type="hidden" name="conflictoverride" value="{$conflictoverride|escape}">
                 <input type="hidden" name="skipRefresh" value="{$skipRefresh|escape}">
-                <input type="submit" class="btn btn-primary" value="{$button_label}" onclick="needToConfirm=false;">
+                <input type="submit" class="btn btn-primary item-submit-btn" value="{$button_label}" onclick="needToConfirm=false;">
             </div>
         </form>
     {else}
@@ -65,7 +65,7 @@
                 <input type="hidden" name="redirect" value="{$redirect|escape}">
                 <input type="hidden" name="conflictoverride" value="{$conflictoverride|escape}">
                 <input type="hidden" name="skipRefresh" value="{$skipRefresh|escape}">
-                <input type="submit" class="btn btn-primary" value="{$button_label}" onclick="needToConfirm=false;">
+                <input type="submit" class="btn btn-primary item-submit-btn" value="{$button_label}" onclick="needToConfirm=false;">
                 {if $can_remove and $prefs.tracker_legacy_insert eq 'y'}
                     <a class="btn btn-danger" href="tiki-view_tracker.php?trackerId={$trackerId|escape}&amp;remove={$itemId|escape}" title="Delete" role="button">
                         {tr}Delete{/tr}



View it on GitLab: https://gitlab.com/tikiwiki/tiki/-/commit/df67502dd8fde16fa4fe57f90a7f10f54857d202

-- 
View it on GitLab: https://gitlab.com/tikiwiki/tiki/-/commit/df67502dd8fde16fa4fe57f90a7f10f54857d202
You're receiving this email because of your account on gitlab.com.

_______________________________________________
TikiWiki-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tikiwiki-cvs
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.