]> gitweb @ CieloNegro.org - Rakka.git/blobdiff - js/editPage.js
misc changes
[Rakka.git] / js / editPage.js
index 5d782de880484ded293528371a31f042cb25d3a9..26b68ce7a7e4542c3411e2cbb5242255b4512580 100644 (file)
@@ -3,10 +3,6 @@
     var $previewHeader = null;
     var $previewArea   = null;
 
-    var isDirty = null;
-
-    var rePageName = /^[^ a-z.|#\[\]][^ .|#\[\]]*$/;
-
     Rakka.editPage = function (pageName) {
         var $area = Rakka.switchScreen();
 
                     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"
-                        : $page.attr("redirect") != null           ? "redirect"
-                        :                                            "unknown"
+                        = $page.attr("isBinary") == "yes"             ? "binary"
+                        : $page.attr("type")     == "text/x-rakka"    ? "rakka"
+                        : $page.attr("type")     == "text/css"        ? "css"
+                        : $page.attr("type")     == "text/javascript" ? "js"
+                        : $page.attr("redirect") != null              ? "redirect"
+                        :                                               "unknown"
                         ;
                     var lang        = $page.attr("lang");
                     var isLocked    = $page.attr("isLocked") == "yes";
@@ -38,8 +35,9 @@
                         return obj;
                     })();
                     var source
-                        = $page.attr("redirect") != null ? $page.attr("redirect")
-                        : $page.find("textData").text()
+                        = $page.attr("redirect") != null  ? $page.attr("redirect")
+                        : $page.attr("isBinary") == "yes" ? Rakka.decodeBase64($page.find("binaryData").text())
+                        :                                   $page.find("textData").text()
                         ;
                     var summary     = $page.find("summary").text();
 
@@ -79,6 +77,7 @@
 
         $area.append($.H1({}, pageName == "" ? "Create page" : "Edit page"));
 
+        var isDirty = null;
         var makeDirty = function () {
             isDirty = true;
         };
 
         $(btnTypeCSS).change(makeDirty);
 
+        var btnTypeJS
+            = $.INPUT({type   : "radio",
+                       name   : "type",
+                       checked: (defaultType == "js"       ? "checked" : "")});
+        $(btnTypeJS).change(makeDirty);
+
         var btnTypeBinary
             = $.INPUT({type   : "radio",
                        name   : "type",
 
         $(fldCSSSource).change(makeDirty);
 
-        var fldUploadFile
-            = $.INPUT({type: "file"});
+        var fldJSSource
+            = $.TEXTAREA({className: "source"},
+                         (defaultType == "js"    && source != null ? source : ""));
 
-        $(fldUploadFile).change(makeDirty);
+        $(fldJSSource).change(makeDirty);
+
+        var uploadFileBin
+            = (defaultType == "binary" && source != null ? source : "");
+        var fldUploadFile
+            = $.TEXTAREA({className: "hexDump", disabled: true}, Rakka.hexDump(uploadFileBin, 128));
+        var btnSelectFile
+            = $.INPUT({type: "button", value: "Select file..."});
+
+        $(btnSelectFile).click(function () {
+                                   var path = Rakka.selectFile("Select a binary file to upload", "open");
+                                   if (path != null) {
+                                       uploadFileBin = Rakka.loadLocalBinaryFile(path);
+                                       fldUploadFile.value = Rakka.hexDump(uploadFileBin, 128);
+                                       makeDirty();
+                                   }
+                               });
 
         var fldRedirect
             = $.INPUT({type: "text", value: (defaultType == "redirect" ? source : "")});
                     fldPageName.value, fldRakkaSource.value);
             }
             else if (btnTypeBinary.checked) {
-                if (fldUploadFile.value != "") {
+                if (uploadFileBin != "") {
                     previewBinaryPage(
-                        fldPageName.value, fldUploadFile.value);
+                        fldPageName.value, uploadFileBin);
                 }
             }
         });
                     fldSummary.value,
                     fldCSSSource.value);
             }
+            else if (btnTypeJS.checked) {
+                submitTextPage(
+                    pageName,
+                    oldRevision,
+                    fldPageName.value,
+                    chkIsLocked.checked,
+                    "text/javascript",
+                    $(selPageLang).val(),
+                    otherLangs,
+                    fldSummary.value,
+                    fldJSSource.value);
+            }
             else if (btnTypeBinary.checked) {
                 if (fldUploadFile.value != "") {
                     submitBinaryPage(
                         $(selPageLang).val(),
                         otherLangs,
                         fldSummary.value,
-                        fldUploadFile.value);
+                        uploadFileBin);
                 }
             }
             else if (btnTypeRedirect.checked) {
             }
         });
 
-        var btnCancel
-            = $.INPUT({type: "button", value: "Cancel editing"});
-
-        $(btnCancel).click(function () {
-            if (isDirty) {
-                if (window.confirm("Do you really want to discard changes?")) {
-                    Rakka.restoreScreen();
-                }
-            }
-            else {
-                Rakka.restoreScreen();
-            }
-        });
-
         var updateTRContent = function () {
             if (btnTypeRakka.checked) {
                 $(trPageLang).show();
                 $(trContent).find("td").empty().append(fldCSSSource);
                 $(btnPreview).hide();
             }
+            else if (btnTypeJS.checked) {
+                $(trPageLang).show();
+                $(trOtherLangs).show();
+                $(trSummary).show();
+                $(trContent).find("th").text("JavaScript source");
+                $(trContent).find("td").empty().append(fldJSSource);
+                $(btnPreview).hide();
+            }
             else if (btnTypeBinary.checked) {
                 $(trPageLang).show();
                 $(trOtherLangs).show();
                 $(trSummary).show();
                 $(trContent).find("th").text("File");
-                $(trContent).find("td").empty().append(fldUploadFile);
+                $(trContent).find("td").empty().append(fldUploadFile).append(btnSelectFile);
                 $(btnPreview).show();
             }
             else if (btnTypeRedirect.checked) {
         };
         $(btnTypeRakka   ).change(updateTRContent);
         $(btnTypeCSS     ).change(updateTRContent);
+        $(btnTypeJS      ).change(updateTRContent);
         $(btnTypeBinary  ).change(updateTRContent);
         $(btnTypeRedirect).change(updateTRContent);
         updateTRContent();
                                                           "Style sheet"
                                                          )
                                                  ),
+                                             $.LI({},
+                                                  $.LABEL({},
+                                                          btnTypeJS,
+                                                          "JavaScript"
+                                                         )
+                                                 ),
                                              $.LI({},
                                                   $.LABEL({},
                                                           btnTypeBinary,
                               trContent,
                               $.TR({},
                                    $.TH({}),
-                                   $.TD({}, btnPreview, btnSubmit, btnDelete, btnCancel)
+                                   $.TD({}, btnPreview, btnSubmit, btnDelete)
                                   )
                              )
                      );
 
         var validate = function () {
             var isValid = (function () {
-                if (fldPageName.value.match(rePageName) == null) {
+                if (fldPageName.value.match(Rakka.rePageName) == null) {
                     return false;
                 }
 
                 if (btnTypeRedirect.checked) {
-                    if (fldRedirect.value.match(rePageName) == null) {
+                    if (fldRedirect.value.match(Rakka.rePageName) == null) {
                         return false;
                     }
                 }
                 else {
                     for (var tag in otherLangs) {
-                        if (otherLangs[tag].match(rePageName) == null) {
+                        if (otherLangs[tag].match(Rakka.rePageName) == null) {
                             return false;
                         }
                     }
 
                     if (btnTypeBinary.checked) {
-                        if (fldUploadFile.value == "") {
+                        if (uploadFileBin == "") {
                             return false;
                         }
                     }
         $(fldPageName)
             .add(btnTypeRakka)
             .add(btnTypeCSS)
+            .add(btnTypeJS)
             .add(btnTypeBinary)
             .add(btnTypeRedirect)
             .add($(trOtherLangs).find("input"))
             .add(fldRedirect)
             .change(validate)
             .keyup(validate);
+        $(btnSelectFile).click(validate);
         validate();
 
         if (oldRevision == null || oldRevision == 0) {
         if (!Rakka.isLoggedIn() || Rakka.isGlobalLocked) {
             $(trIsLocked).hide();
         }
-
-        isDirty = false;
     };
 
     var previewRakkaPage = function (pageName, source) {
         });
     };
 
-    var previewBinaryPage = function (pageName, path) {
+    var previewBinaryPage = function (pageName, data) {
         Rakka.displayWaitingMessage("Loading... please wait.");
 
         /* Firefox でバイナリを送らうとすると 0x00 の位置で切れてしまふ。*/
-        var bin = Rakka.loadLocalBinaryFile(path);
         var url = Rakka.baseURI + "render/" + encodeURI(pageName);
         $.ajax({
             type       : "POST",
             url        : url,
             contentType: "application/x-rakka-base64-stream",
-            data       : Rakka.encodeBase64(bin),
+            data       : Rakka.encodeBase64(data),
             processData: false,
             success    : function (resultDoc) {
                 Rakka.hideWaitingMessage();
         });
     };
 
-    var submitBinaryPage = function (pageName, oldRevision, givenPageName, isLocked, lang, otherLangs, summary, path) {
+    var submitBinaryPage = function (pageName, oldRevision, givenPageName, isLocked, lang, otherLangs, summary, data) {
         var NS   = "http://cielonegro.org/schema/Rakka/Page/1.0";
         var doc  = document.implementation.createDocument(NS, "page", null);
         var page = doc.documentElement;
         }
         page.appendChild(oLang);
 
-        var bin = Rakka.loadLocalBinaryFile(path);
-        var b64 = Rakka.encodeBase64(bin);
-
+        var b64 = Rakka.encodeBase64(data);
         var binaryData = doc.createElementNS(NS, "binaryData");
         binaryData.appendChild(
             doc.createTextNode(b64));