]> gitweb @ CieloNegro.org - Rakka.git/blobdiff - js/editPage.js
Wrote more...
[Rakka.git] / js / editPage.js
index 49b021b619c2231335bc3f7575104f58e129ff89..e14b383eebe13197ae5f591e5db4db336bbdeaeb 100644 (file)
 Rakka.editPage = function (baseURI, pageName) {
-    var $body = $("div.body");
-
-    $body.text("Loading... please wait.");
+    var $area = Rakka.switchScreen();
+    $area.text("Loading... please wait.");
     
     // XML 版のページを取得する。
     $.ajax({
         url    : baseURI + pageName + ".xml",
         success: function (pageXml) {
-                     var $page         = $(pageXml).find("page");
-                     var oldRevision   = $page.attr("revision");
-                     var defaultType   = $page.attr("isBinary") == "yes"          ? "binary"
-                                       : $page.attr("type")     == "text/x-rakka" ? "rakka"
-                                       : $page.attr("type")     == "text/css"     ? "css"
-                                       :                                            "unknown"
-                                       ;
-                     var source        = $page.find("textData").text();
-                     Rakka.displayPageEditor($body, pageName, oldRevision, defaultType, source);
-                 },
+            var $page       = $(pageXml).find("page");
+            var oldRevision = $page.attr("revision");
+            var defaultType
+                = $page.attr("isBinary") == "yes"          ? "binary"
+                : $page.attr("type")     == "text/x-rakka" ? "rakka"
+                : $page.attr("type")     == "text/css"     ? "css"
+                :                                            "unknown"
+                ;
+            var source = $page.find("textData").text();
+            Rakka.displayPageEditor(baseURI, pageName, oldRevision, defaultType, source);
+        },
         error  : function (req) {
-                     if (req.status == 404) {
-                         Rakka.displayPageEditor($body, pageName, null, "rakka", null);
-                     }
-                     else {
-                         $body.text("Error: " + req.status + " " + req.statusText);
-                     }
-                 }
-        });
+            if (req.status == 404) {
+                Rakka.displayPageEditor(baseURI, pageName, null, "rakka", null);
+            }
+            else {
+                $area.text("Error: " + req.status + " " + req.statusText);
+            }
+        }
+    });
 };
 
-Rakka.displayPageEditor = function ($place, pageName, oldRevision, defaultType, source) {
-    $place.empty();
+Rakka.displayPageEditor = function (baseURI, pageName, oldRevision, defaultType, source) {
+    var $area = Rakka.switchScreen();
+    $area.empty();
 
-    $place.append($.H1({}, "Edit page"));
+    $area.append($.H1({}, "Edit page"));
 
     var fldPageName
-      = $.INPUT({type : "text", value: pageName});
+        = $.INPUT({type : "text", value: pageName});
 
     var btnTypeRakka
-      = $.INPUT({type   : "radio",
-                 name   : "type",
-                 checked: (defaultType == "rakka"  ? "checked" : "")});
+        = $.INPUT({type   : "radio",
+                   name   : "type",
+                   checked: (defaultType == "rakka"  ? "checked" : "")});
 
     var btnTypeCSS
-      = $.INPUT({type   : "radio",
-                 name   : "type",
-                 checked: (defaultType == "css"    ? "checked" : "")});
+        = $.INPUT({type   : "radio",
+                   name   : "type",
+                   checked: (defaultType == "css"    ? "checked" : "")});
 
     var btnTypeBinary
-      = $.INPUT({type   : "radio",
-                 name   : "type",
-                 checked: (defaultType == "binary" ? "checked" : "")});
+        = $.INPUT({type   : "radio",
+                   name   : "type",
+                   checked: (defaultType == "binary" ? "checked" : "")});
     
 
     var fldRakkaSource
-      = $.TEXTAREA({}, (defaultType == "rakka" && source != null ? source : ""));
+        = $.TEXTAREA({}, (defaultType == "rakka" && source != null ? source : ""));
 
     var fldCSSSource
-      = $.TEXTAREA({}, (defaultType == "css"   && source != null ? source : ""));
+        = $.TEXTAREA({}, (defaultType == "css"   && source != null ? source : ""));
 
     var fldUploadFile
-      = $.INPUT({type: "file"});
+        = $.INPUT({type: "file"});
 
     var trContent
-      = $.TR({}, 
-          $.TH({}),
-          $.TD({})
-        );
+        = $.TR({}, 
+               $.TH({}),
+               $.TD({})
+              );
 
     var btnPreview
-      = $.INPUT({type: "button", value: "Preview page"});
+        = $.INPUT({type: "button", value: "Preview page"});
+    
+    $(btnPreview).click(function () {
+        throw new Error("FIXME: not implemented yet");
+    });
 
     var btnSubmit
-      = $.INPUT({type: "button", value: "Submit page"});
+        = $.INPUT({type: "button", value: "Submit page"});
+    
+    $(btnSubmit).click(function () {
+        if (btnTypeRakka.checked) {
+            Rakka.submitTextPage(
+                baseURI,
+                pageName,
+                oldRevision,
+                fldPageName.value,
+                "text/x-rakka",
+                fldRakkaSource.value);
+        }
+        else if (btnTypeCSS.checked) {
+            Rakka.submitTextPage(
+                baseURI,
+                pageName,
+                oldRevision,
+                fldPageName.value,
+                "text/css",
+                fldCSSSource.value);
+        }
+        else if (btnTypeBinary.checked) {
+            Rakka.submitBinaryPage(
+                baseURI,
+                pageName,
+                oldRevision,
+                fldPageName.value,
+                fldUploadFile.value);
+        }
+    });
 
     var btnDelete
-      = $.INPUT({type: "button", value: "Delete this page"});
+        = $.INPUT({type: "button", value: "Delete this page"});
     
+    $(btnDelete).click(function () {
+        throw new Error("FIXME: not implemented yet");
+    });
+
     var updateTRContent = function () {
         if (btnTypeRakka.checked) {
             $(trContent).find("th").text("Wiki source");
             $(trContent).find("td").empty().append(fldRakkaSource);
-            $(trContent).show();
         }
         else if (btnTypeCSS.checked) {
             $(trContent).find("th").text("CSS source");
             $(trContent).find("td").empty().append(fldCSSSource);
-            $(trContent).show();
         }
         else if (btnTypeBinary.checked) {
             $(trContent).find("th").text("File");
             $(trContent).find("td").empty().append(fldUploadFile);
-            $(trContent).show();
-        }
-        else {
-            $(trContent).hide();
         }
     };
     $(btnTypeRakka ).change(updateTRContent);
@@ -102,49 +134,91 @@ Rakka.displayPageEditor = function ($place, pageName, oldRevision, defaultType,
     updateTRContent();
 
     var pageEditor
-      = $.TABLE({className: "pageEditor"},
-          $.TBODY({},
-            $.TR({},
-              $.TH({}, "Page name"),
-              $.TD({}, fldPageName)
-            ),
-            $.TR({},
-              $.TH({}, "Page type"),
-              $.TD({},
-                $.UL({},
-                  $.LI({},
-                    $.LABEL({},
-                      btnTypeRakka,
-                      "Wiki page"
-                    )
-                  ),
-                  $.LI({},
-                    $.LABEL({},
-                      btnTypeCSS,
-                      "Style sheet"
-                    )
-                  ),
-                  $.LI({},
-                    $.LABEL({},
-                      btnTypeBinary,
-                      "Binary file"
-                    )
-                  )
-                )
-              )
-            ),
-            trContent,
-            $.TR({},
-              $.TH({}),
-              $.TD({}, btnPreview, btnSubmit, btnDelete)
-            )
-          )
-        );
+        = $.TABLE({className: "pageEditor"},
+                  $.TBODY({},
+                          $.TR({},
+                               $.TH({}, "Page name"),
+                               $.TD({}, fldPageName)
+                              ),
+                          $.TR({},
+                               $.TH({}, "Page type"),
+                               $.TD({},
+                                    $.UL({},
+                                         $.LI({},
+                                              $.LABEL({},
+                                                      btnTypeRakka,
+                                                      "Wiki page"
+                                                     )
+                                             ),
+                                         $.LI({},
+                                              $.LABEL({},
+                                                      btnTypeCSS,
+                                                      "Style sheet"
+                                                     )
+                                             ),
+                                         $.LI({},
+                                              $.LABEL({},
+                                                      btnTypeBinary,
+                                                      "Binary file"
+                                                     )
+                                             )
+                                        )
+                                   )
+                              ),
+                          trContent,
+                          $.TR({},
+                               $.TH({}),
+                               $.TD({}, btnPreview, btnSubmit, btnDelete)
+                              )
+                         )
+                 );
 
     if (oldRevision == null || oldRevision == 0) {
         // 削除不可
         $(btnDelete).hide();
     }
 
-    $place.append(pageEditor);
+    $area.append(pageEditor);
+};
+
+Rakka.submitTextPage = function (baseURI, pageName, oldRevision, givenPageName, mimeType, text) {
+    var doc = document.implementation.createDocument(
+        "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
+
+    var page = doc.documentElement;
+
+    if (oldRevision != null) {
+        // ページ書換時
+        var updateInfo = doc.createElement("updateInfo");
+        updateInfo.setAttribute("oldRevision", oldRevision);
+
+        if (pageName != givenPageName) {
+            var move = doc.createElement("move");
+            move.setAttribute("from", pageName);
+            updateInfo.appendChild(move);
+        }
+
+        page.appendChild(updateInfo);
+    }
+
+    if (0) {
+        // redirection
+    }
+    else {
+        page.setAttribute("type", mimeType);
+
+        var textData = doc.createElement("textData");
+        textData.appendChild(
+            doc.createTextNode(text));
+
+        page.appendChild(textData);
+    }
+
+    $.ajax({
+        type       : "PUT",
+        url        : baseURI + encodeURI(givenPageName),
+        contentType: "text/xml",
+        data       : doc,
+        processData: false
+    });
 };