3 var $previewHeader = null;
4 var $previewArea = null;
8 Rakka.editPage = function (pageName) {
9 var $area = Rakka.switchScreen();
11 Rakka.displayWaitingMessage("Loading... please wait.");
15 url : Rakka.baseURI + pageName + ".xml",
16 success: function (pageXml) {
17 Rakka.hideWaitingMessage();
19 var $page = $(pageXml).find("page");
20 var oldRevision = $page.attr("revision");
22 = $page.attr("isBinary") == "yes" ? "binary"
23 : $page.attr("type") == "text/x-rakka" ? "rakka"
24 : $page.attr("type") == "text/css" ? "css"
25 : $page.attr("redirect") != null ? "redirect"
28 var isLocked = $page.attr("isLocked") == "yes";
30 = $page.attr("redirect") != null ? $page.attr("redirect")
31 : $page.find("textData").text()
33 var summary = $page.find("summary").text();
35 displayPageEditor(pageName, oldRevision, defaultType, isLocked, source, summary);
37 error : function (req) {
38 Rakka.hideWaitingMessage();
40 if (req.status == 404) {
41 displayPageEditor(pageName, null, "rakka", false, null, "");
44 $area.text("Error: " + req.status + " " + req.statusText);
50 Rakka.newPage = function () {
51 displayPageEditor("", null, "rakka", false, null, "");
54 var displayPageEditor = function (pageName, oldRevision, defaultType, isLocked, source, summary) {
55 var $area = Rakka.switchScreen();
57 $previewHeader = $( $.H1({}, "Preview") );
58 $area.append($previewHeader);
59 $previewHeader.hide();
61 $previewArea = $( $.DIV({className: "preview"}) );
62 $area.append($previewArea);
65 $area.append($.H1({}, pageName == "" ? "Create page" : "Edit page"));
67 var makeDirty = function () {
72 = $.INPUT({type : "text", value: pageName});
74 $(fldPageName).change(makeDirty);
77 = $.INPUT({type : "checkbox",
78 checked: (isLocked ? "checked" : "")});
80 $(chkIsLocked).change(makeDirty);
84 $.TH({}, "Page lock"),
88 "Disallow anonymous users to edit or delete this page")));
91 = $.INPUT({type : "radio",
93 checked: (defaultType == "rakka" ? "checked" : "")});
95 $(btnTypeRakka).change(makeDirty);
98 = $.INPUT({type : "radio",
100 checked: (defaultType == "css" ? "checked" : "")});
102 $(btnTypeCSS).change(makeDirty);
105 = $.INPUT({type : "radio",
107 checked: (defaultType == "binary" ? "checked" : "")});
109 $(btnTypeBinary).change(makeDirty);
112 = $.INPUT({type : "radio",
114 checked: (defaultType == "redirect" ? "checked" : "")});
116 $(btnTypeRedirect).change(makeDirty);
119 = $.TEXTAREA({className: "summary"}, summary);
121 $(fldSummary).change(makeDirty);
126 $.TD({}, fldSummary));
129 = $.TEXTAREA({className: "source"},
130 (defaultType == "rakka" && source != null ? source : ""));
132 $(fldRakkaSource).change(makeDirty);
135 = $.TEXTAREA({className: "source"},
136 (defaultType == "css" && source != null ? source : ""));
138 $(fldCSSSource).change(makeDirty);
141 = $.INPUT({type: "file"});
143 $(fldUploadFile).change(makeDirty);
146 = $.INPUT({type: "text", value: (defaultType == "redirect" ? source : "")});
148 $(fldRedirect).change(makeDirty);
157 = $.INPUT({type: "button", value: "Preview page"});
159 $(btnPreview).click(function () {
160 if (btnTypeRakka.checked) {
162 fldPageName.value, fldRakkaSource.value);
164 else if (btnTypeBinary.checked) {
166 fldPageName.value, fldUploadFile.value);
171 = $.INPUT({type: "button", value: "Submit page"});
173 $(btnSubmit).click(function () {
174 if (btnTypeRakka.checked) {
182 fldRakkaSource.value);
184 else if (btnTypeCSS.checked) {
194 else if (btnTypeBinary.checked) {
201 fldUploadFile.value);
203 else if (btnTypeRedirect.checked) {
214 = $.INPUT({type: "button", value: "Delete this page"});
216 $(btnDelete).click(function () {
217 if (window.confirm("Do you really want to delete this page?")) {
218 deletePage(pageName);
223 = $.INPUT({type: "button", value: "Cancel editing"});
225 $(btnCancel).click(function () {
227 if (window.confirm("Do you really want to discard changes?")) {
228 Rakka.restoreScreen();
232 Rakka.restoreScreen();
236 var updateTRContent = function () {
237 if (btnTypeRakka.checked) {
239 $(trContent).find("th").text("Wiki source");
240 $(trContent).find("td").empty().append(fldRakkaSource);
241 $(btnPreview).show();
243 else if (btnTypeCSS.checked) {
245 $(trContent).find("th").text("CSS source");
246 $(trContent).find("td").empty().append(fldCSSSource);
247 $(btnPreview).hide();
249 else if (btnTypeBinary.checked) {
251 $(trContent).find("th").text("File");
252 $(trContent).find("td").empty().append(fldUploadFile);
253 $(btnPreview).show();
255 else if (btnTypeRedirect.checked) {
257 $(trContent).find("th").text("Destination Page");
258 $(trContent).find("td").empty().append(fldRedirect);
259 $(btnPreview).hide();
262 $(btnTypeRakka ).change(updateTRContent);
263 $(btnTypeCSS ).change(updateTRContent);
264 $(btnTypeBinary ).change(updateTRContent);
265 $(btnTypeRedirect).change(updateTRContent);
269 = $.TABLE({className: "pageEditor"},
272 $.TH({}, "Page name"),
273 $.TD({}, fldPageName)
277 $.TH({}, "Page type"),
311 $.TD({}, btnPreview, btnSubmit, btnDelete, btnCancel)
316 if (oldRevision == null || oldRevision == 0) {
321 $area.append(pageEditor);
326 var previewRakkaPage = function (pageName, source) {
327 Rakka.displayWaitingMessage("Loading... please wait.");
329 var url = Rakka.baseURI + "render/" + encodeURI(pageName);
333 contentType: "text/x-rakka",
336 success : function (resultDoc) {
337 Rakka.hideWaitingMessage();
338 showPreview(resultDoc);
340 error : function (req) {
341 Rakka.hideWaitingMessage();
342 alert("Error: " + req.status + " " + req.statusText);
347 var previewBinaryPage = function (pageName, path) {
348 Rakka.displayWaitingMessage("Loading... please wait.");
350 /* Firefox でバイナリを送らうとすると 0x00 の位置で切れてしまふ。*/
351 var bin = Rakka.loadLocalBinaryFile(path);
352 var url = Rakka.baseURI + "render/" + encodeURI(pageName);
356 contentType: "application/x-rakka-base64-stream",
357 data : Rakka.encodeBase64(bin),
359 success : function (resultDoc) {
360 Rakka.hideWaitingMessage();
361 showPreview(resultDoc);
363 error : function (req) {
364 Rakka.hideWaitingMessage();
365 alert("Error: " + req.status + " " + req.statusText);
370 var showPreview = function (doc) {
371 $previewArea.empty();
373 $previewHeader.show();
376 var root = doc.documentElement;
377 var child = root.firstChild;
379 if (child.nodeType == 1) {
381 $previewArea.append(child.cloneNode(true));
383 } while (child = child.nextSibling);
385 Rakka.scrollToTopLeft();
388 var submitTextPage = function (pageName, oldRevision, givenPageName, isLocked, mimeType, summary, text) {
389 var doc = document.implementation.createDocument(
390 "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
392 var page = doc.documentElement;
394 if (oldRevision != null) {
396 var updateInfo = doc.createElement("updateInfo");
397 updateInfo.setAttribute("oldRevision", oldRevision);
399 if (pageName != givenPageName) {
400 var move = doc.createElement("move");
401 move.setAttribute("from", pageName);
402 updateInfo.appendChild(move);
405 page.appendChild(updateInfo);
408 page.setAttribute("isLocked", isLocked ? "yes" : "no");
409 page.setAttribute("type", mimeType);
411 if (summary != null) {
412 var s = doc.createElement("summary");
414 doc.createTextNode(summary));
418 var textData = doc.createElement("textData");
419 textData.appendChild(
420 doc.createTextNode(text));
422 page.appendChild(textData);
424 Rakka.displayWaitingMessage("Submitting... please wait.");
426 var url = Rakka.baseURI + encodeURI(givenPageName);
430 contentType: "text/xml",
433 beforeSend : function (req) {
434 Rakka.setAuthorization(req);
436 success : function () {
437 window.location.replace(url);
439 error : function (req) {
440 Rakka.hideWaitingMessage();
442 var $area = Rakka.switchScreen();
443 $area.text("Error: " + req.status + " " + req.statusText);
448 var submitBinaryPage = function (pageName, oldRevision, givenPageName, isLocked, summary, path) {
449 var doc = document.implementation.createDocument(
450 "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
452 var page = doc.documentElement;
454 if (oldRevision != null) {
456 var updateInfo = doc.createElement("updateInfo");
457 updateInfo.setAttribute("oldRevision", oldRevision);
459 if (pageName != givenPageName) {
460 var move = doc.createElement("move");
461 move.setAttribute("from", pageName);
462 updateInfo.appendChild(move);
465 page.appendChild(updateInfo);
468 page.setAttribute("isLocked", isLocked ? "yes" : "no");
469 page.setAttribute("type", "");
471 if (summary != null) {
472 var s = doc.createElement("summary");
474 doc.createTextNode(summary));
478 var bin = Rakka.loadLocalBinaryFile(path);
479 var b64 = Rakka.encodeBase64(bin);
481 var binaryData = doc.createElement("binaryData");
482 binaryData.appendChild(
483 doc.createTextNode(b64));
485 page.appendChild(binaryData);
487 Rakka.displayWaitingMessage("Submitting... please wait.");
489 var url = Rakka.baseURI + encodeURI(givenPageName);
493 contentType: "text/xml",
496 beforeSend : function (req) {
497 Rakka.setAuthorization(req);
499 success : function () {
500 window.location.replace(url);
502 error : function (req) {
503 Rakka.hideWaitingMessage();
505 var $area = Rakka.switchScreen();
506 $area.text("Error: " + req.status + " " + req.statusText);
511 var submitRedirection = function (pageName, oldRevision, givenPageName, isLocked, destination) {
512 var doc = document.implementation.createDocument(
513 "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
515 var page = doc.documentElement;
517 if (oldRevision != null) {
519 var updateInfo = doc.createElement("updateInfo");
520 updateInfo.setAttribute("oldRevision", oldRevision);
522 if (pageName != givenPageName) {
523 var move = doc.createElement("move");
524 move.setAttribute("from", pageName);
525 updateInfo.appendChild(move);
528 page.appendChild(updateInfo);
531 page.setAttribute("isLocked", isLocked ? "yes" : "no");
532 page.setAttribute("redirect", destination);
534 Rakka.displayWaitingMessage("Submitting... please wait.");
536 var url = Rakka.baseURI + encodeURI(givenPageName);
540 contentType: "text/xml",
543 beforeSend : function (req) {
544 Rakka.setAuthorization(req);
546 success : function () {
547 window.location.replace(url);
549 error : function (req) {
550 Rakka.hideWaitingMessage();
552 var $area = Rakka.switchScreen();
553 $area.text("Error: " + req.status + " " + req.statusText);
558 var deletePage = function (pageName) {
559 var url = Rakka.baseURI + encodeURI(pageName);
563 beforeSend : function (req) {
564 Rakka.setAuthorization(req);
566 success : function () {
567 window.location.replace(url);
569 error : function (req) {
570 Rakka.hideWaitingMessage();
572 var $area = Rakka.switchScreen();
573 $area.text("Error: " + req.status + " " + req.statusText);