[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}&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