Browse Source

Merge pull request #326 from nuss-justin/feature/keep-text

Save comment/issue drafts in sessionStorage.
无闻 10 years ago
parent
commit
5ed5912ef5
1 changed files with 59 additions and 1 deletions
  1. 59 1
      public/js/app.js

+ 59 - 1
public/js/app.js

@@ -520,6 +520,50 @@ function initIssue() {
         });
     }());
 
+    // store unsend text in session storage.
+    (function() {
+        var $textArea = $("#issue-content,#issue-reply-content");
+        var current = "";
+
+        if ($textArea == null || !('sessionStorage' in window)) {
+            return;
+        }
+
+        var path = location.pathname.split("/");
+        var key = "issue-" + path[1] + "-" + path[2] + "-";
+
+        if (/\/issues\/\d+$/.test(location.pathname)) {
+            key = key + path[4];
+        } else {
+            key = key + "new";
+        }
+
+        if ($textArea.val() !== undefined && $textArea.val() !== "") {
+            sessionStorage.setItem(key, $textArea.val());
+        } else {
+            $textArea.val(sessionStorage.getItem(key) || "");
+
+            if ($textArea.attr("id") == "issue-reply-content") {
+                var $closeBtn = $('#issue-close-btn');
+                var $openBtn = $('#issue-open-btn');
+    
+                if ($textArea.val().length) {
+                    $closeBtn.val($closeBtn.data("text"));
+                    $openBtn.val($openBtn.data("text"));
+                } else {
+                    $closeBtn.val($closeBtn.data("origin"));
+                    $openBtn.val($openBtn.data("origin"));
+                }
+            }
+        }
+
+        $textArea.on("keyup", function() {
+            if ($textArea.val() !== current) {
+                sessionStorage.setItem(key, current = $textArea.val());
+            }
+        });
+    }());
+
     // Preview for images.
     (function() {
         var $hoverElement = $("<div></div>");
@@ -659,8 +703,22 @@ function initIssue() {
                     $button.text("An error encoured!")
 
                     return;
-                }                   
+                }
+
+                if (!('sessionStorage' in window)) {
+                    return;
+                }
+
+                var path = location.pathname.split("/");
+                var key = "issue-" + path[1] + "-" + path[2] + "-";
+
+                if (/\/issues\/\d+$/.test(location.pathname)) {
+                    key = key + path[4];
+                } else {
+                    key = key + "new";
+                }
 
+                sessionStorage.removeItem(key);
                 window.location.href = response.data;
             });