]> gitweb @ CieloNegro.org - Rakka.git/commitdiff
improved the page editor
authorpho <pho@cielonegro.org>
Fri, 11 Jan 2008 05:23:11 +0000 (14:23 +0900)
committerpho <pho@cielonegro.org>
Fri, 11 Jan 2008 05:23:11 +0000 (14:23 +0900)
darcs-hash:20080111052311-62b54-597ae1a24d8782acd342bb720eb17907d96d0ef6.gz

js/editPage.js
js/screen.js

index 766d2e92383348749c008cff4c2ba4eee043c1ad..960ce4eb5f6f8fdba41b9c9837d0c1fc0a732a02 100644 (file)
@@ -1,6 +1,8 @@
 Rakka.$previewHeader = null;
 Rakka.$previewArea   = null;
 
+Rakka.isDirty = null;
+
 Rakka.editPage = function (pageName) {
     var $area = Rakka.switchScreen();
 
@@ -59,33 +61,49 @@ Rakka.displayPageEditor = function (pageName, oldRevision, defaultType, source,
     Rakka.$previewArea.hide();
 
     $area.append($.H1({}, pageName == "" ? "Create page" : "Edit page"));
+
+    var makeDirty = function () {
+        Rakka.isDirty = true;
+    };
     
     var fldPageName
         = $.INPUT({type : "text", value: pageName});
 
+    $(fldPageName).change(makeDirty);
+
     var btnTypeRakka
         = $.INPUT({type   : "radio",
                    name   : "type",
                    checked: (defaultType == "rakka"    ? "checked" : "")});
 
+    $(btnTypeRakka).change(makeDirty);
+
     var btnTypeCSS
         = $.INPUT({type   : "radio",
                    name   : "type",
                    checked: (defaultType == "css"      ? "checked" : "")});
 
+    $(btnTypeCSS).change(makeDirty);
+
     var btnTypeBinary
         = $.INPUT({type   : "radio",
                    name   : "type",
                    checked: (defaultType == "binary"   ? "checked" : "")});
 
+    $(btnTypeBinary).change(makeDirty);
+
     var btnTypeRedirect
         = $.INPUT({type   : "radio",
                    name   : "type",
                    checked: (defaultType == "redirect" ? "checked" : "")});
 
+    $(btnTypeRedirect).change(makeDirty);
+
     var fldSummary
         = $.TEXTAREA({className: "summary"}, summary);
 
+    $(fldSummary).change(makeDirty);
+
     var trSummary
         = $.TR({},
                $.TH({}, "Summary"),
@@ -95,16 +113,24 @@ Rakka.displayPageEditor = function (pageName, oldRevision, defaultType, source,
         = $.TEXTAREA({className: "source"},
                      (defaultType == "rakka" && source != null ? source : ""));
 
+    $(fldRakkaSource).change(makeDirty);
+
     var fldCSSSource
         = $.TEXTAREA({className: "source"},
                      (defaultType == "css"   && source != null ? source : ""));
 
+    $(fldCSSSource).change(makeDirty);
+
     var fldUploadFile
         = $.INPUT({type: "file"});
 
+    $(fldUploadFile).change(makeDirty);
+
     var fldRedirect
         = $.INPUT({type: "text", value: (defaultType == "redirect" ? source : "")});
 
+    $(fldRedirect).change(makeDirty);
+
     var trContent
         = $.TR({}, 
                $.TH({}),
@@ -173,6 +199,20 @@ Rakka.displayPageEditor = function (pageName, oldRevision, defaultType, source,
         }
     });
 
+    var btnCancel
+        = $.INPUT({type: "button", value: "Cancel editing"});
+
+    $(btnCancel).click(function () {
+        if (Rakka.isDirty) {
+            if (window.confirm("Do you really want to discard changes?")) {
+                Rakka.restoreScreen();
+            }
+        }
+        else {
+            Rakka.restoreScreen();
+        }
+    });
+
     var updateTRContent = function () {
         if (btnTypeRakka.checked) {
             $(trSummary).show();
@@ -247,7 +287,7 @@ Rakka.displayPageEditor = function (pageName, oldRevision, defaultType, source,
                           trContent,
                           $.TR({},
                                $.TH({}),
-                               $.TD({}, btnPreview, btnSubmit, btnDelete)
+                               $.TD({}, btnPreview, btnSubmit, btnDelete, btnCancel)
                               )
                          )
                  );
@@ -258,6 +298,8 @@ Rakka.displayPageEditor = function (pageName, oldRevision, defaultType, source,
     }
 
     $area.append(pageEditor);
+
+    Rakka.isDirty = false;
 };
 
 Rakka.previewRakkaPage = function (pageName, source) {
@@ -318,6 +360,8 @@ Rakka.showPreview = function (doc) {
             Rakka.$previewArea.append(child.cloneNode(true));
         }
     } while (child = child.nextSibling);
+
+    Rakka.scrollToTopLeft();
 };
 
 Rakka.submitTextPage = function (pageName, oldRevision, givenPageName, mimeType, summary, text) {
index c30d0abeab9e869814483b71036e24f8324d6462..9fc50e76e93f518c84b13e91164de7ca213c7de6 100644 (file)
         return switchedArea;
     };
 
+    Rakka.scrollToTopLeft = function () {
+        $("div.center").each(function () {
+            this.scrollTop  = 0;
+            this.scrollLeft = 0;
+        });
+    };
+
     var waitingMessageBoard = null;
 
     Rakka.displayWaitingMessage = function (msg) {