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"
18 : $page.attr("redirect") != null ? "redirect"
22 = $page.attr("redirect") != null ? $page.attr("redirect")
23 : $page.find("textData").text()
25 Rakka.displayPageEditor(baseURI, pageName, oldRevision, defaultType, source);
27 error : function (req) {
28 Rakka.hideWaitingMessage();
30 if (req.status == 404) {
31 Rakka.displayPageEditor(baseURI, pageName, null, "rakka", null);
34 $area.text("Error: " + req.status + " " + req.statusText);
40 Rakka.newPage = function (baseURI) {
41 Rakka.displayPageEditor(baseURI, "", null, "rakka", null);
44 Rakka.displayPageEditor = function (baseURI, pageName, oldRevision, defaultType, source) {
45 var $area = Rakka.switchScreen();
48 $area.append($.H1({}, pageName == "" ? "Create page" : "Edit page"));
51 = $.INPUT({type : "text", value: pageName});
54 = $.INPUT({type : "radio",
56 checked: (defaultType == "rakka" ? "checked" : "")});
59 = $.INPUT({type : "radio",
61 checked: (defaultType == "css" ? "checked" : "")});
64 = $.INPUT({type : "radio",
66 checked: (defaultType == "binary" ? "checked" : "")});
69 = $.INPUT({type : "radio",
71 checked: (defaultType == "redirect" ? "checked" : "")});
74 = $.TEXTAREA({}, (defaultType == "rakka" && source != null ? source : ""));
77 = $.TEXTAREA({}, (defaultType == "css" && source != null ? source : ""));
80 = $.INPUT({type: "file"});
83 = $.INPUT({type: "text", value: (defaultType == "redirect" ? source : "")});
92 = $.INPUT({type: "button", value: "Preview page"});
94 $(btnPreview).click(function () {
95 throw new Error("FIXME: not implemented yet");
99 = $.INPUT({type: "button", value: "Submit page"});
101 $(btnSubmit).click(function () {
102 if (btnTypeRakka.checked) {
103 Rakka.submitTextPage(
109 fldRakkaSource.value);
111 else if (btnTypeCSS.checked) {
112 Rakka.submitTextPage(
120 else if (btnTypeBinary.checked) {
121 Rakka.submitBinaryPage(
126 fldUploadFile.value);
128 else if (btnTypeRedirect.checked) {
129 Rakka.submitRedirection(
139 = $.INPUT({type: "button", value: "Delete this page"});
141 $(btnDelete).click(function () {
142 throw new Error("FIXME: not implemented yet");
145 var updateTRContent = function () {
146 if (btnTypeRakka.checked) {
147 $(trContent).find("th").text("Wiki source");
148 $(trContent).find("td").empty().append(fldRakkaSource);
149 $(btnPreview).show();
151 else if (btnTypeCSS.checked) {
152 $(trContent).find("th").text("CSS source");
153 $(trContent).find("td").empty().append(fldCSSSource);
154 $(btnPreview).hide();
156 else if (btnTypeBinary.checked) {
157 $(trContent).find("th").text("File");
158 $(trContent).find("td").empty().append(fldUploadFile);
159 $(btnPreview).show();
161 else if (btnTypeRedirect.checked) {
162 $(trContent).find("th").text("Destination Page");
163 $(trContent).find("td").empty().append(fldRedirect);
164 $(btnPreview).hide();
167 $(btnTypeRakka ).change(updateTRContent);
168 $(btnTypeCSS ).change(updateTRContent);
169 $(btnTypeBinary ).change(updateTRContent);
170 $(btnTypeRedirect).change(updateTRContent);
174 = $.TABLE({className: "pageEditor"},
177 $.TH({}, "Page name"),
178 $.TD({}, fldPageName)
181 $.TH({}, "Page type"),
214 $.TD({}, btnPreview, btnSubmit, btnDelete)
219 if (oldRevision == null || oldRevision == 0) {
224 $area.append(pageEditor);
227 Rakka.submitTextPage = function (baseURI, pageName, oldRevision, givenPageName, mimeType, text) {
228 var doc = document.implementation.createDocument(
229 "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
231 var page = doc.documentElement;
233 if (oldRevision != null) {
235 var updateInfo = doc.createElement("updateInfo");
236 updateInfo.setAttribute("oldRevision", oldRevision);
238 if (pageName != givenPageName) {
239 var move = doc.createElement("move");
240 move.setAttribute("from", pageName);
241 updateInfo.appendChild(move);
244 page.appendChild(updateInfo);
247 page.setAttribute("type", mimeType);
249 var textData = doc.createElement("textData");
250 textData.appendChild(
251 doc.createTextNode(text));
253 page.appendChild(textData);
255 Rakka.displayWaitingMessage("Submitting... please wait.");
257 var url = baseURI + encodeURI(givenPageName);
261 contentType: "text/xml",
264 success : function () {
265 window.location.replace(url);
267 error : function (req) {
268 Rakka.hideWaitingMessage();
270 var $area = Rakka.switchScreen();
271 $area.text("Error: " + req.status + " " + req.statusText);
276 Rakka.submitRedirection = function (baseURI, pageName, oldRevision, givenPageName, destination) {
277 var doc = document.implementation.createDocument(
278 "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
280 var page = doc.documentElement;
282 if (oldRevision != null) {
284 var updateInfo = doc.createElement("updateInfo");
285 updateInfo.setAttribute("oldRevision", oldRevision);
287 if (pageName != givenPageName) {
288 var move = doc.createElement("move");
289 move.setAttribute("from", pageName);
290 updateInfo.appendChild(move);
293 page.appendChild(updateInfo);
296 page.setAttribute("redirect", destination);
298 Rakka.displayWaitingMessage("Submitting... please wait.");
300 var url = baseURI + encodeURI(givenPageName);
304 contentType: "text/xml",
307 success : function () {
308 window.location.replace(url);
310 error : function (req) {
311 Rakka.hideWaitingMessage();
313 var $area = Rakka.switchScreen();
314 $area.text("Error: " + req.status + " " + req.statusText);