OSDN Git Service

BugTrack/2468 Show alert message for leaving page action on edit-preview
authorumorigu <umorigu@gmail.com>
Fri, 27 Apr 2018 20:47:24 +0000 (05:47 +0900)
committerumorigu <umorigu@gmail.com>
Fri, 27 Apr 2018 20:47:24 +0000 (05:47 +0900)
lib/html.php
skin/main.js

index d172889..141a97d 100644 (file)
@@ -47,7 +47,7 @@ function catbody($title, $page, $body)
 
        $_page  = isset($vars['page']) ? $vars['page'] : '';
        $r_page = pagename_urlencode($_page);
-
+       $is_edit_preview = isset($vars['preview']);
        // Canonical URL
        $canonical_url = get_page_uri($_page, PKWK_URI_ABSOLUTE);
 
@@ -187,7 +187,7 @@ function catbody($title, $page, $body)
                }
        }
        // Embed Scripting data
-       $html_scripting_data = get_html_scripting_data($_page);
+       $html_scripting_data = get_html_scripting_data($_page, $is_edit_preview);
 
        // Compat: 'HTML convert time' without time about MenuBar and skin
        $taketime = elapsedtime();
@@ -217,8 +217,11 @@ function _decorate_Nth_word($matches)
 
 /**
  * Get data used by JavaScript modules
+ *
+ * @param $page page name
+ * @param $in_editing true if preview in editing
  */
-function get_html_scripting_data($page)
+function get_html_scripting_data($page, $in_editing)
 {
        global $ticket_link_sites, $plugin;
        global $external_link_cushion_page, $external_link_cushion;
@@ -256,6 +259,11 @@ EOS;
        $page_name_data = <<<EOS
 <input type="hidden" class="page-name" value="$h_page_name" />
 EOS;
+       // Page is editing (preview)
+       $in_editing_value = ($plugin === 'edit' && $in_editing) ? 'true' : 'false';
+       $page_edit_data = <<<EOS
+<input type="hidden" class="page-in-edit" value="$in_editing_value" />
+EOS;
        // AutoTicketLink
        $filtered_ticket_link_sites = array();
        foreach ($ticket_link_sites as $s) {
@@ -293,6 +301,7 @@ EOS;
 $site_props
 $plugin_prop
 $page_name_data
+$page_edit_data
 $ticketlink_data
 $external_link_cushion_data
 $topicpath_data
index 6c45340..1386f54 100644 (file)
@@ -253,6 +253,11 @@ window.addEventListener && window.addEventListener('DOMContentLoaded', function(
     var textArea = editForm.querySelector('textarea[name="msg"]');
     if (!textArea) return;
     originalText = textArea.value;
+    var isPreview = false;
+    var inEditE = document.querySelector('#pukiwiki-site-properties .page-in-edit');
+    if (inEditE && inEditE.value) {
+      isPreview = (inEditE.value === 'true');
+    }
     var cancelForm = document.querySelector('.edit_form form._plugin_edit_cancel');
     var submited = false;
     editForm.addEventListener('submit', function() {
@@ -281,7 +286,9 @@ window.addEventListener && window.addEventListener('DOMContentLoaded', function(
     window.addEventListener('beforeunload', function(e) {
       if (canceled) return;
       if (submited) return;
-      if (trim(textArea.value) === trim(originalText)) return;
+      if (!isPreview) {
+        if (trim(textArea.value) === trim(originalText)) return;
+      }
       var message = 'Data you have entered will not be saved.';
       if (unloadBeforeMsgE && unloadBeforeMsgE.value) {
         message = unloadBeforeMsgE.value;