1 Rakka.$previewHeader = null;
2 Rakka.$previewArea = null;
4 Rakka.editPage = function (pageName) {
5 var $area = Rakka.switchScreen();
7 Rakka.displayWaitingMessage("Loading... please wait.");
11 url : Rakka.baseURI + pageName + ".xml",
12 success: function (pageXml) {
13 Rakka.hideWaitingMessage();
15 var $page = $(pageXml).find("page");
16 var oldRevision = $page.attr("revision");
18 = $page.attr("isBinary") == "yes" ? "binary"
19 : $page.attr("type") == "text/x-rakka" ? "rakka"
20 : $page.attr("type") == "text/css" ? "css"
21 : $page.attr("redirect") != null ? "redirect"
25 = $page.attr("redirect") != null ? $page.attr("redirect")
26 : $page.find("textData").text()
28 var summary = $page.find("summary").text();
30 Rakka.displayPageEditor(pageName, oldRevision, defaultType, source, summary);
32 error : function (req) {
33 Rakka.hideWaitingMessage();
35 if (req.status == 404) {
36 Rakka.displayPageEditor(pageName, null, "rakka", null, "");
39 $area.text("Error: " + req.status + " " + req.statusText);
45 Rakka.newPage = function () {
46 Rakka.displayPageEditor("", null, "rakka", null, "");
49 Rakka.displayPageEditor = function (pageName, oldRevision, defaultType, source, summary) {
50 var $area = Rakka.switchScreen();
53 Rakka.$previewHeader = $( $.H1({}, "Preview") );
54 $area.append(Rakka.$previewHeader);
55 Rakka.$previewHeader.hide();
57 Rakka.$previewArea = $( $.DIV({className: "preview"}) );
58 $area.append(Rakka.$previewArea);
59 Rakka.$previewArea.hide();
61 $area.append($.H1({}, pageName == "" ? "Create page" : "Edit page"));
64 = $.INPUT({type : "text", value: pageName});
67 = $.INPUT({type : "radio",
69 checked: (defaultType == "rakka" ? "checked" : "")});
72 = $.INPUT({type : "radio",
74 checked: (defaultType == "css" ? "checked" : "")});
77 = $.INPUT({type : "radio",
79 checked: (defaultType == "binary" ? "checked" : "")});
82 = $.INPUT({type : "radio",
84 checked: (defaultType == "redirect" ? "checked" : "")});
87 = $.TEXTAREA({className: "summary"}, summary);
92 $.TD({}, fldSummary));
95 = $.TEXTAREA({className: "source"},
96 (defaultType == "rakka" && source != null ? source : ""));
99 = $.TEXTAREA({className: "source"},
100 (defaultType == "css" && source != null ? source : ""));
103 = $.INPUT({type: "file"});
106 = $.INPUT({type: "text", value: (defaultType == "redirect" ? source : "")});
115 = $.INPUT({type: "button", value: "Preview page"});
117 $(btnPreview).click(function () {
118 if (btnTypeRakka.checked) {
119 Rakka.previewRakkaPage(
120 fldPageName.value, fldRakkaSource.value);
122 else if (btnTypeBinary.checked) {
123 Rakka.previewBinaryPage(
124 fldPageName.value, fldUploadFile.value);
129 = $.INPUT({type: "button", value: "Submit page"});
131 $(btnSubmit).click(function () {
132 if (btnTypeRakka.checked) {
133 Rakka.submitTextPage(
139 fldRakkaSource.value);
141 else if (btnTypeCSS.checked) {
142 Rakka.submitTextPage(
150 else if (btnTypeBinary.checked) {
151 Rakka.submitBinaryPage(
156 fldUploadFile.value);
158 else if (btnTypeRedirect.checked) {
159 Rakka.submitRedirection(
168 = $.INPUT({type: "button", value: "Delete this page"});
170 $(btnDelete).click(function () {
171 if (window.confirm("Do you really want to delete this page?")) {
172 Rakka.deletePage(pageName);
176 var updateTRContent = function () {
177 if (btnTypeRakka.checked) {
179 $(trContent).find("th").text("Wiki source");
180 $(trContent).find("td").empty().append(fldRakkaSource);
181 $(btnPreview).show();
183 else if (btnTypeCSS.checked) {
185 $(trContent).find("th").text("CSS source");
186 $(trContent).find("td").empty().append(fldCSSSource);
187 $(btnPreview).hide();
189 else if (btnTypeBinary.checked) {
191 $(trContent).find("th").text("File");
192 $(trContent).find("td").empty().append(fldUploadFile);
193 $(btnPreview).show();
195 else if (btnTypeRedirect.checked) {
197 $(trContent).find("th").text("Destination Page");
198 $(trContent).find("td").empty().append(fldRedirect);
199 $(btnPreview).hide();
202 $(btnTypeRakka ).change(updateTRContent);
203 $(btnTypeCSS ).change(updateTRContent);
204 $(btnTypeBinary ).change(updateTRContent);
205 $(btnTypeRedirect).change(updateTRContent);
209 = $.TABLE({className: "pageEditor"},
212 $.TH({}, "Page name"),
213 $.TD({}, fldPageName)
216 $.TH({}, "Page type"),
250 $.TD({}, btnPreview, btnSubmit, btnDelete)
255 if (oldRevision == null || oldRevision == 0) {
260 $area.append(pageEditor);
263 Rakka.previewRakkaPage = function (pageName, source) {
264 Rakka.displayWaitingMessage("Loading... please wait.");
266 var url = Rakka.baseURI + "render/" + encodeURI(pageName);
270 contentType: "text/x-rakka",
273 success : function (resultDoc) {
274 Rakka.hideWaitingMessage();
275 Rakka.showPreview(resultDoc);
277 error : function (req) {
278 Rakka.hideWaitingMessage();
279 alert("Error: " + req.status + " " + req.statusText);
284 Rakka.previewBinaryPage = function (pageName, path) {
285 Rakka.displayWaitingMessage("Loading... please wait.");
287 /* Firefox でバイナリを送らうとすると 0x00 の位置で切れてしまふ。*/
288 var bin = Rakka.loadLocalBinaryFile(path);
289 var url = Rakka.baseURI + "render/" + encodeURI(pageName);
293 contentType: "application/x-rakka-base64-stream",
294 data : Rakka.encodeBase64(bin),
296 success : function (resultDoc) {
297 Rakka.hideWaitingMessage();
298 Rakka.showPreview(resultDoc);
300 error : function (req) {
301 Rakka.hideWaitingMessage();
302 alert("Error: " + req.status + " " + req.statusText);
307 Rakka.showPreview = function (doc) {
308 Rakka.$previewArea.empty();
310 Rakka.$previewHeader.show();
311 Rakka.$previewArea.show();
313 var root = doc.documentElement;
314 var child = root.firstChild;
316 if (child.nodeType == 1) {
318 Rakka.$previewArea.append(child.cloneNode(true));
320 } while (child = child.nextSibling);
323 Rakka.submitTextPage = function (pageName, oldRevision, givenPageName, mimeType, summary, text) {
324 var doc = document.implementation.createDocument(
325 "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
327 var page = doc.documentElement;
329 if (oldRevision != null) {
331 var updateInfo = doc.createElement("updateInfo");
332 updateInfo.setAttribute("oldRevision", oldRevision);
334 if (pageName != givenPageName) {
335 var move = doc.createElement("move");
336 move.setAttribute("from", pageName);
337 updateInfo.appendChild(move);
340 page.appendChild(updateInfo);
343 page.setAttribute("type", mimeType);
345 if (summary != null) {
346 var s = doc.createElement("summary");
348 doc.createTextNode(summary));
352 var textData = doc.createElement("textData");
353 textData.appendChild(
354 doc.createTextNode(text));
356 page.appendChild(textData);
358 Rakka.displayWaitingMessage("Submitting... please wait.");
360 var url = Rakka.baseURI + encodeURI(givenPageName);
364 contentType: "text/xml",
367 success : function () {
368 window.location.replace(url);
370 error : function (req) {
371 Rakka.hideWaitingMessage();
373 var $area = Rakka.switchScreen();
374 $area.text("Error: " + req.status + " " + req.statusText);
379 Rakka.submitBinaryPage = function (pageName, oldRevision, givenPageName, summary, path) {
380 var doc = document.implementation.createDocument(
381 "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
383 var page = doc.documentElement;
385 if (oldRevision != null) {
387 var updateInfo = doc.createElement("updateInfo");
388 updateInfo.setAttribute("oldRevision", oldRevision);
390 if (pageName != givenPageName) {
391 var move = doc.createElement("move");
392 move.setAttribute("from", pageName);
393 updateInfo.appendChild(move);
396 page.appendChild(updateInfo);
399 page.setAttribute("type", "");
401 if (summary != null) {
402 var s = doc.createElement("summary");
404 doc.createTextNode(summary));
408 var bin = Rakka.loadLocalBinaryFile(path);
409 var b64 = Rakka.encodeBase64(bin);
411 var binaryData = doc.createElement("binaryData");
412 binaryData.appendChild(
413 doc.createTextNode(b64));
415 page.appendChild(binaryData);
417 Rakka.displayWaitingMessage("Submitting... please wait.");
419 var url = Rakka.baseURI + encodeURI(givenPageName);
423 contentType: "text/xml",
426 success : function () {
427 window.location.replace(url);
429 error : function (req) {
430 Rakka.hideWaitingMessage();
432 var $area = Rakka.switchScreen();
433 $area.text("Error: " + req.status + " " + req.statusText);
438 Rakka.submitRedirection = function (pageName, oldRevision, givenPageName, destination) {
439 var doc = document.implementation.createDocument(
440 "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
442 var page = doc.documentElement;
444 if (oldRevision != null) {
446 var updateInfo = doc.createElement("updateInfo");
447 updateInfo.setAttribute("oldRevision", oldRevision);
449 if (pageName != givenPageName) {
450 var move = doc.createElement("move");
451 move.setAttribute("from", pageName);
452 updateInfo.appendChild(move);
455 page.appendChild(updateInfo);
458 page.setAttribute("redirect", destination);
460 Rakka.displayWaitingMessage("Submitting... please wait.");
462 var url = Rakka.baseURI + encodeURI(givenPageName);
466 contentType: "text/xml",
469 success : function () {
470 window.location.replace(url);
472 error : function (req) {
473 Rakka.hideWaitingMessage();
475 var $area = Rakka.switchScreen();
476 $area.text("Error: " + req.status + " " + req.statusText);
481 Rakka.deletePage = function (pageName) {
482 var url = Rakka.baseURI + encodeURI(pageName);
486 success : function () {
487 window.location.replace(url);
489 error : function (req) {
490 Rakka.hideWaitingMessage();
492 var $area = Rakka.switchScreen();
493 $area.text("Error: " + req.status + " " + req.statusText);