X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=js%2FeditPage.js;h=0eb211edaff0ee9a793f9ee0e3305e2b0fb96303;hb=02cf9c5f184e1ee977479fa43cadce79f8f93d09;hp=49b021b619c2231335bc3f7575104f58e129ff89;hpb=65c7f9f0643c7e8884e4a02567b77c169167c093;p=Rakka.git diff --git a/js/editPage.js b/js/editPage.js index 49b021b..0eb211e 100644 --- a/js/editPage.js +++ b/js/editPage.js @@ -1,99 +1,136 @@ Rakka.editPage = function (baseURI, pageName) { - var $body = $("div.body"); + var $area = Rakka.switchScreen(); - $body.text("Loading... please wait."); + Rakka.displayWaitingMessage("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); - }, + Rakka.hideWaitingMessage(); + + 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); - } - } - }); + Rakka.hideWaitingMessage(); + + 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 +139,103 @@ 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); + } + + Rakka.displayWaitingMessage("Submitting... please wait."); + + var url = baseURI + encodeURI(givenPageName); + $.ajax({ + type : "PUT", + url : url, + contentType: "text/xml", + data : doc, + processData: false, + success : function () { + window.location.replace(url); + }, + error : function (req) { + Rakka.hideWaitingMessage(); + + var $area = Rakka.switchScreen(); + $area.text("Error: " + req.status + " " + req.statusText); + } + }); };