From f4917a35f0370be4061057523fe737672e80e585 Mon Sep 17 00:00:00 2001
From: Jan-Hendrik Willms <tleilax+studip@gmail.com>
Date: Thu, 29 Aug 2024 07:20:00 +0000
Subject: [PATCH] disable security handler when regularly saving a wiki page,
 fixes #4543

Closes #4543

Merge request studip/studip!3338
---
 app/views/course/wiki/edit.php           |  5 ++++-
 resources/assets/javascripts/lib/wiki.js | 13 ++++++++-----
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/app/views/course/wiki/edit.php b/app/views/course/wiki/edit.php
index df126a48a2f..583049638af 100644
--- a/app/views/course/wiki/edit.php
+++ b/app/views/course/wiki/edit.php
@@ -33,7 +33,10 @@
         </div>
 
         <div data-dialog-button="">
-            <button class="button" :title="isChanged ? '<?= _('Den aktuellen Stand speichern.') ?>' : '<?= _('Der aktuelle Stand wurde bereits gespeichert.') ?>'">
+            <button class="button"
+                    :title="isChanged ? '<?= _('Den aktuellen Stand speichern.') ?>' : '<?= _('Der aktuelle Stand wurde bereits gespeichert.') ?>'"
+                    @click="toggleSecurityHandler(false)"
+            >
                 <?= _('Speichern') ?>
             </button>
             <?= \Studip\LinkButton::create(_('Verlassen'), $controller->leave_editing($page))?>
diff --git a/resources/assets/javascripts/lib/wiki.js b/resources/assets/javascripts/lib/wiki.js
index 4f68fc945c2..58ff027e80d 100644
--- a/resources/assets/javascripts/lib/wiki.js
+++ b/resources/assets/javascripts/lib/wiki.js
@@ -77,6 +77,13 @@ const Wiki = {
                                 this.editor.editing.view.focus();
                             });
                         },
+                        toggleSecurityHandler(state = true) {
+                            if (state) {
+                                window.addEventListener('beforeunload', this.securityHandler);
+                            } else {
+                                window.removeEventListener('beforeunload', this.securityHandler);
+                            }
+                        },
                         securityHandler(event) {
                             event.preventDefault();
                             event.returnValue = true;
@@ -105,11 +112,7 @@ const Wiki = {
                     },
                     watch: {
                         isChanged(current) {
-                            if (current) {
-                                window.addEventListener('beforeunload', this.securityHandler);
-                            } else {
-                                window.removeEventListener('beforeunload', this.securityHandler);
-                            }
+                            this.toggleSecurityHandler(current);
                         }
                     },
                     components: { WikiEditorOnlineUsers }
-- 
GitLab