1 Rakka.editPage = function (baseURI, pageName) {
2 var $area = Rakka.switchScreen();
4 Rakka.displayWaitingMessage("Loading... please wait.");
8 url : baseURI + pageName + ".xml",
9 success: function (pageXml) {
10 Rakka.hideWaitingMessage();
12 var $page = $(pageXml).find("page");
13 var oldRevision = $page.attr("revision");
15 = $page.attr("isBinary") == "yes" ? "binary"
16 : $page.attr("type") == "text/x-rakka" ? "rakka"
17 : $page.attr("type") == "text/css" ? "css"
20 var source = $page.find("textData").text();
21 Rakka.displayPageEditor(baseURI, pageName, oldRevision, defaultType, source);
23 error : function (req) {
24 Rakka.hideWaitingMessage();
26 if (req.status == 404) {
27 Rakka.displayPageEditor(baseURI, pageName, null, "rakka", null);
30 $area.text("Error: " + req.status + " " + req.statusText);
36 Rakka.newPage = function (baseURI) {
37 Rakka.displayPageEditor(baseURI, "", null, "rakka", null);
40 Rakka.displayPageEditor = function (baseURI, pageName, oldRevision, defaultType, source) {
41 var $area = Rakka.switchScreen();
44 $area.append($.H1({}, pageName == "" ? "Create page" : "Edit page"));
47 = $.INPUT({type : "text", value: pageName});
50 = $.INPUT({type : "radio",
52 checked: (defaultType == "rakka" ? "checked" : "")});
55 = $.INPUT({type : "radio",
57 checked: (defaultType == "css" ? "checked" : "")});
60 = $.INPUT({type : "radio",
62 checked: (defaultType == "binary" ? "checked" : "")});
66 = $.TEXTAREA({}, (defaultType == "rakka" && source != null ? source : ""));
69 = $.TEXTAREA({}, (defaultType == "css" && source != null ? source : ""));
72 = $.INPUT({type: "file"});
81 = $.INPUT({type: "button", value: "Preview page"});
83 $(btnPreview).click(function () {
84 throw new Error("FIXME: not implemented yet");
88 = $.INPUT({type: "button", value: "Submit page"});
90 $(btnSubmit).click(function () {
91 if (btnTypeRakka.checked) {
98 fldRakkaSource.value);
100 else if (btnTypeCSS.checked) {
101 Rakka.submitTextPage(
109 else if (btnTypeBinary.checked) {
110 Rakka.submitBinaryPage(
115 fldUploadFile.value);
120 = $.INPUT({type: "button", value: "Delete this page"});
122 $(btnDelete).click(function () {
123 throw new Error("FIXME: not implemented yet");
126 var updateTRContent = function () {
127 if (btnTypeRakka.checked) {
128 $(trContent).find("th").text("Wiki source");
129 $(trContent).find("td").empty().append(fldRakkaSource);
131 else if (btnTypeCSS.checked) {
132 $(trContent).find("th").text("CSS source");
133 $(trContent).find("td").empty().append(fldCSSSource);
135 else if (btnTypeBinary.checked) {
136 $(trContent).find("th").text("File");
137 $(trContent).find("td").empty().append(fldUploadFile);
140 $(btnTypeRakka ).change(updateTRContent);
141 $(btnTypeCSS ).change(updateTRContent);
142 $(btnTypeBinary).change(updateTRContent);
146 = $.TABLE({className: "pageEditor"},
149 $.TH({}, "Page name"),
150 $.TD({}, fldPageName)
153 $.TH({}, "Page type"),
180 $.TD({}, btnPreview, btnSubmit, btnDelete)
185 if (oldRevision == null || oldRevision == 0) {
190 $area.append(pageEditor);
193 Rakka.submitTextPage = function (baseURI, pageName, oldRevision, givenPageName, mimeType, text) {
194 var doc = document.implementation.createDocument(
195 "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
197 var page = doc.documentElement;
199 if (oldRevision != null) {
201 var updateInfo = doc.createElement("updateInfo");
202 updateInfo.setAttribute("oldRevision", oldRevision);
204 if (pageName != givenPageName) {
205 var move = doc.createElement("move");
206 move.setAttribute("from", pageName);
207 updateInfo.appendChild(move);
210 page.appendChild(updateInfo);
217 page.setAttribute("type", mimeType);
219 var textData = doc.createElement("textData");
220 textData.appendChild(
221 doc.createTextNode(text));
223 page.appendChild(textData);
226 Rakka.displayWaitingMessage("Submitting... please wait.");
228 var url = baseURI + encodeURI(givenPageName);
232 contentType: "text/xml",
235 success : function () {
236 window.location.replace(url);
238 error : function (req) {
239 Rakka.hideWaitingMessage();
241 var $area = Rakka.switchScreen();
242 $area.text("Error: " + req.status + " " + req.statusText);