-Rakka.editPage = function (baseURI, pageName) {
+Rakka.$previewHeader = null;
+Rakka.$previewArea = null;
+
+Rakka.editPage = function (pageName) {
var $area = Rakka.switchScreen();
Rakka.displayWaitingMessage("Loading... please wait.");
// XML 版のページを取得する。
$.ajax({
- url : baseURI + pageName + ".xml",
+ url : Rakka.baseURI + pageName + ".xml",
success: function (pageXml) {
Rakka.hideWaitingMessage();
= $page.attr("redirect") != null ? $page.attr("redirect")
: $page.find("textData").text()
;
- Rakka.displayPageEditor(baseURI, pageName, oldRevision, defaultType, source);
+ var summary = $page.find("summary").text();
+
+ Rakka.displayPageEditor(pageName, oldRevision, defaultType, source, summary);
},
error : function (req) {
Rakka.hideWaitingMessage();
if (req.status == 404) {
- Rakka.displayPageEditor(baseURI, pageName, null, "rakka", null);
+ Rakka.displayPageEditor(pageName, null, "rakka", null, "");
}
else {
$area.text("Error: " + req.status + " " + req.statusText);
});
};
-Rakka.newPage = function (baseURI) {
- Rakka.displayPageEditor(baseURI, "", null, "rakka", null);
+Rakka.newPage = function () {
+ Rakka.displayPageEditor("", null, "rakka", null, "");
};
-Rakka.displayPageEditor = function (baseURI, pageName, oldRevision, defaultType, source) {
+Rakka.displayPageEditor = function (pageName, oldRevision, defaultType, source, summary) {
var $area = Rakka.switchScreen();
$area.empty();
- $area.append($.H1({}, pageName == "" ? "Create page" : "Edit page"));
+ Rakka.$previewHeader = $( $.H1({}, "Preview") );
+ $area.append(Rakka.$previewHeader);
+ Rakka.$previewHeader.hide();
+ Rakka.$previewArea = $( $.DIV({className: "preview"}) );
+ $area.append(Rakka.$previewArea);
+ Rakka.$previewArea.hide();
+
+ $area.append($.H1({}, pageName == "" ? "Create page" : "Edit page"));
+
var fldPageName
= $.INPUT({type : "text", value: pageName});
name : "type",
checked: (defaultType == "redirect" ? "checked" : "")});
+ var fldSummary
+ = $.TEXTAREA({className: "summary"}, summary);
+
+ var trSummary
+ = $.TR({},
+ $.TH({}, "Summary"),
+ $.TD({}, fldSummary));
+
var fldRakkaSource
- = $.TEXTAREA({}, (defaultType == "rakka" && source != null ? source : ""));
+ = $.TEXTAREA({className: "source"},
+ (defaultType == "rakka" && source != null ? source : ""));
var fldCSSSource
- = $.TEXTAREA({}, (defaultType == "css" && source != null ? source : ""));
+ = $.TEXTAREA({className: "source"},
+ (defaultType == "css" && source != null ? source : ""));
var fldUploadFile
= $.INPUT({type: "file"});
= $.INPUT({type: "button", value: "Preview page"});
$(btnPreview).click(function () {
- throw new Error("FIXME: not implemented yet");
+ if (btnTypeRakka.checked) {
+ Rakka.previewRakkaPage(
+ fldPageName.value, fldRakkaSource.value);
+ }
+ else if (btnTypeBinary.checked) {
+ Rakka.previewBinaryPage(
+ fldPageName.value, fldUploadFile.value);
+ }
});
var btnSubmit
$(btnSubmit).click(function () {
if (btnTypeRakka.checked) {
Rakka.submitTextPage(
- baseURI,
pageName,
oldRevision,
fldPageName.value,
"text/x-rakka",
+ fldSummary.value,
fldRakkaSource.value);
}
else if (btnTypeCSS.checked) {
Rakka.submitTextPage(
- baseURI,
pageName,
oldRevision,
fldPageName.value,
"text/css",
+ fldSummary.value,
fldCSSSource.value);
}
else if (btnTypeBinary.checked) {
Rakka.submitBinaryPage(
- baseURI,
pageName,
oldRevision,
fldPageName.value,
+ fldSummary.value,
fldUploadFile.value);
}
else if (btnTypeRedirect.checked) {
Rakka.submitRedirection(
- baseURI,
pageName,
oldRevision,
fldPageName.value,
= $.INPUT({type: "button", value: "Delete this page"});
$(btnDelete).click(function () {
- throw new Error("FIXME: not implemented yet");
+ if (window.confirm("Do you really want to delete this page?")) {
+ Rakka.deletePage(pageName);
+ }
});
var updateTRContent = function () {
if (btnTypeRakka.checked) {
+ $(trSummary).show();
$(trContent).find("th").text("Wiki source");
$(trContent).find("td").empty().append(fldRakkaSource);
$(btnPreview).show();
}
else if (btnTypeCSS.checked) {
+ $(trSummary).show();
$(trContent).find("th").text("CSS source");
$(trContent).find("td").empty().append(fldCSSSource);
$(btnPreview).hide();
}
else if (btnTypeBinary.checked) {
+ $(trSummary).show();
$(trContent).find("th").text("File");
$(trContent).find("td").empty().append(fldUploadFile);
$(btnPreview).show();
}
else if (btnTypeRedirect.checked) {
+ $(trSummary).hide();
$(trContent).find("th").text("Destination Page");
$(trContent).find("td").empty().append(fldRedirect);
$(btnPreview).hide();
)
)
),
+ trSummary,
trContent,
$.TR({},
$.TH({}),
$area.append(pageEditor);
};
-Rakka.submitTextPage = function (baseURI, pageName, oldRevision, givenPageName, mimeType, text) {
+Rakka.previewRakkaPage = function (pageName, source) {
+ Rakka.displayWaitingMessage("Loading... please wait.");
+
+ var url = Rakka.baseURI + "render/" + encodeURI(pageName);
+ $.ajax({
+ type : "POST",
+ url : url,
+ contentType: "text/x-rakka",
+ data : source,
+ processData: false,
+ success : function (resultDoc) {
+ Rakka.hideWaitingMessage();
+ Rakka.showPreview(resultDoc);
+ },
+ error : function (req) {
+ Rakka.hideWaitingMessage();
+ alert("Error: " + req.status + " " + req.statusText);
+ }
+ });
+};
+
+Rakka.previewBinaryPage = function (pageName, path) {
+ 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),
+ processData: false,
+ success : function (resultDoc) {
+ Rakka.hideWaitingMessage();
+ Rakka.showPreview(resultDoc);
+ },
+ error : function (req) {
+ Rakka.hideWaitingMessage();
+ alert("Error: " + req.status + " " + req.statusText);
+ }
+ });
+};
+
+Rakka.showPreview = function (doc) {
+ Rakka.$previewArea.empty();
+
+ Rakka.$previewHeader.show();
+ Rakka.$previewArea.show();
+
+ var root = doc.documentElement;
+ var child = root.firstChild;
+ do {
+ if (child.nodeType == 1) {
+ // 要素だったので複製
+ Rakka.$previewArea.append(child.cloneNode(true));
+ }
+ } while (child = child.nextSibling);
+};
+
+Rakka.submitTextPage = function (pageName, oldRevision, givenPageName, mimeType, summary, text) {
var doc = document.implementation.createDocument(
"http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
page.setAttribute("type", mimeType);
+ if (summary != null) {
+ var s = doc.createElement("summary");
+ s.appendChild(
+ doc.createTextNode(summary));
+ page.appendChild(s);
+ }
+
var textData = doc.createElement("textData");
textData.appendChild(
doc.createTextNode(text));
Rakka.displayWaitingMessage("Submitting... please wait.");
- var url = baseURI + encodeURI(givenPageName);
+ var url = Rakka.baseURI + encodeURI(givenPageName);
$.ajax({
type : "PUT",
url : url,
});
};
-Rakka.submitRedirection = function (baseURI, pageName, oldRevision, givenPageName, destination) {
+Rakka.submitBinaryPage = function (pageName, oldRevision, givenPageName, summary, path) {
+ 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);
+ }
+
+ page.setAttribute("type", "");
+
+ if (summary != null) {
+ var s = doc.createElement("summary");
+ s.appendChild(
+ doc.createTextNode(summary));
+ page.appendChild(s);
+ }
+
+ var bin = Rakka.loadLocalBinaryFile(path);
+ var b64 = Rakka.encodeBase64(bin);
+
+ var binaryData = doc.createElement("binaryData");
+ binaryData.appendChild(
+ doc.createTextNode(b64));
+
+ page.appendChild(binaryData);
+
+ Rakka.displayWaitingMessage("Submitting... please wait.");
+
+ var url = Rakka.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);
+ }
+ });
+};
+
+Rakka.submitRedirection = function (pageName, oldRevision, givenPageName, destination) {
var doc = document.implementation.createDocument(
"http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
Rakka.displayWaitingMessage("Submitting... please wait.");
- var url = baseURI + encodeURI(givenPageName);
+ var url = Rakka.baseURI + encodeURI(givenPageName);
$.ajax({
type : "PUT",
url : url,
$area.text("Error: " + req.status + " " + req.statusText);
}
});
-};
\ No newline at end of file
+};
+
+Rakka.deletePage = function (pageName) {
+ var url = Rakka.baseURI + encodeURI(pageName);
+ $.ajax({
+ type : "DELETE",
+ url : url,
+ success : function () {
+ window.location.replace(url);
+ },
+ error : function (req) {
+ Rakka.hideWaitingMessage();
+
+ var $area = Rakka.switchScreen();
+ $area.text("Error: " + req.status + " " + req.statusText);
+ }
+ });
+};