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);
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);
+ }
+ });
};