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 if (pageXml.documentElement.tagName == "page") {
20 var $page = $(pageXml).find("page");
21 var oldRevision = $page.attr("revision");
23 = $page.attr("isBinary") == "yes" ? "binary"
24 : $page.attr("type") == "text/x-rakka" ? "rakka"
25 : $page.attr("type") == "text/css" ? "css"
26 : $page.attr("redirect") != null ? "redirect"
29 var isLocked = $page.attr("isLocked") == "yes";
31 = $page.attr("redirect") != null ? $page.attr("redirect")
32 : $page.find("textData").text()
34 var summary = $page.find("summary").text();
36 displayPageEditor(pageName, oldRevision, defaultType, isLocked, source, summary);
39 displayPageEditor(pageName, null, "rakka", false, null, "");
42 error : function (req) {
43 Rakka.hideWaitingMessage();
45 if (req.status == 404) {
46 displayPageEditor(pageName, null, "rakka", false, null, "");
49 $area.text("Error: " + req.status + " " + req.statusText);
55 Rakka.newPage = function () {
56 displayPageEditor("", null, "rakka", false, null, "");
59 var displayPageEditor = function (pageName, oldRevision, defaultType, isLocked, source, summary) {
60 var $area = Rakka.switchScreen();
62 $previewHeader = $( $.H1({}, "Preview") );
63 $area.append($previewHeader);
64 $previewHeader.hide();
66 $previewArea = $( $.DIV({className: "preview"}) );
67 $area.append($previewArea);
70 $area.append($.H1({}, pageName == "" ? "Create page" : "Edit page"));
72 var makeDirty = function () {
77 = $.INPUT({type : "text", value: pageName});
79 $(fldPageName).change(makeDirty);
82 = $.INPUT({type : "checkbox",
83 checked : (isLocked ? "checked" : "")});
85 $(chkIsLocked).change(makeDirty);
89 $.TH({}, "Page lock"),
93 "Disallow anonymous users to edit or delete this page")));
96 = $.INPUT({type : "radio",
98 checked: (defaultType == "rakka" ? "checked" : "")});
100 $(btnTypeRakka).change(makeDirty);
103 = $.INPUT({type : "radio",
105 checked: (defaultType == "css" ? "checked" : "")});
107 $(btnTypeCSS).change(makeDirty);
110 = $.INPUT({type : "radio",
112 checked: (defaultType == "binary" ? "checked" : "")});
114 $(btnTypeBinary).change(makeDirty);
117 = $.INPUT({type : "radio",
119 checked: (defaultType == "redirect" ? "checked" : "")});
121 $(btnTypeRedirect).change(makeDirty);
124 = $.TEXTAREA({className: "summary"}, summary);
126 $(fldSummary).change(makeDirty);
131 $.TD({}, fldSummary));
134 = $.TEXTAREA({className: "source"},
135 (defaultType == "rakka" && source != null ? source : ""));
137 $(fldRakkaSource).change(makeDirty);
140 = $.TEXTAREA({className: "source"},
141 (defaultType == "css" && source != null ? source : ""));
143 $(fldCSSSource).change(makeDirty);
146 = $.INPUT({type: "file"});
148 $(fldUploadFile).change(makeDirty);
151 = $.INPUT({type: "text", value: (defaultType == "redirect" ? source : "")});
153 $(fldRedirect).change(makeDirty);
162 = $.INPUT({type: "button", value: "Preview page"});
164 $(btnPreview).click(function () {
165 if (btnTypeRakka.checked) {
167 fldPageName.value, fldRakkaSource.value);
169 else if (btnTypeBinary.checked) {
171 fldPageName.value, fldUploadFile.value);
176 = $.INPUT({type: "button", value: "Submit page"});
178 $(btnSubmit).click(function () {
179 if (btnTypeRakka.checked) {
187 fldRakkaSource.value);
189 else if (btnTypeCSS.checked) {
199 else if (btnTypeBinary.checked) {
206 fldUploadFile.value);
208 else if (btnTypeRedirect.checked) {
219 = $.INPUT({type: "button", value: "Delete this page"});
221 $(btnDelete).click(function () {
222 if (window.confirm("Do you really want to delete this page?")) {
223 deletePage(pageName);
228 = $.INPUT({type: "button", value: "Cancel editing"});
230 $(btnCancel).click(function () {
232 if (window.confirm("Do you really want to discard changes?")) {
233 Rakka.restoreScreen();
237 Rakka.restoreScreen();
241 var updateTRContent = function () {
242 if (btnTypeRakka.checked) {
244 $(trContent).find("th").text("Wiki source");
245 $(trContent).find("td").empty().append(fldRakkaSource);
246 $(btnPreview).show();
248 else if (btnTypeCSS.checked) {
250 $(trContent).find("th").text("CSS source");
251 $(trContent).find("td").empty().append(fldCSSSource);
252 $(btnPreview).hide();
254 else if (btnTypeBinary.checked) {
256 $(trContent).find("th").text("File");
257 $(trContent).find("td").empty().append(fldUploadFile);
258 $(btnPreview).show();
260 else if (btnTypeRedirect.checked) {
262 $(trContent).find("th").text("Destination Page");
263 $(trContent).find("td").empty().append(fldRedirect);
264 $(btnPreview).hide();
267 $(btnTypeRakka ).change(updateTRContent);
268 $(btnTypeCSS ).change(updateTRContent);
269 $(btnTypeBinary ).change(updateTRContent);
270 $(btnTypeRedirect).change(updateTRContent);
274 = $.TABLE({className: "pageEditor"},
277 $.TH({}, "Page name"),
278 $.TD({}, fldPageName)
282 $.TH({}, "Page type"),
316 $.TD({}, btnPreview, btnSubmit, btnDelete, btnCancel)
321 if (oldRevision == null || oldRevision == 0) {
326 $area.append(pageEditor);
328 if (!Rakka.isLoggedIn() || Rakka.isGlobalLocked) {
329 $(trIsLocked).hide();
335 var previewRakkaPage = function (pageName, source) {
336 Rakka.displayWaitingMessage("Loading... please wait.");
338 var url = Rakka.baseURI + "render/" + encodeURI(pageName);
342 contentType: "text/x-rakka",
345 success : function (resultDoc) {
346 Rakka.hideWaitingMessage();
347 showPreview(resultDoc);
349 error : function (req) {
350 Rakka.hideWaitingMessage();
351 alert("Error: " + req.status + " " + req.statusText);
356 var previewBinaryPage = function (pageName, path) {
357 Rakka.displayWaitingMessage("Loading... please wait.");
359 /* Firefox でバイナリを送らうとすると 0x00 の位置で切れてしまふ。*/
360 var bin = Rakka.loadLocalBinaryFile(path);
361 var url = Rakka.baseURI + "render/" + encodeURI(pageName);
365 contentType: "application/x-rakka-base64-stream",
366 data : Rakka.encodeBase64(bin),
368 success : function (resultDoc) {
369 Rakka.hideWaitingMessage();
370 showPreview(resultDoc);
372 error : function (req) {
373 Rakka.hideWaitingMessage();
374 alert("Error: " + req.status + " " + req.statusText);
379 var showPreview = function (doc) {
380 $previewArea.empty();
382 $previewHeader.show();
385 var root = doc.documentElement;
386 var child = root.firstChild;
388 if (child.nodeType == 1) {
390 $previewArea.append(child.cloneNode(true));
392 } while (child = child.nextSibling);
394 Rakka.scrollToTopLeft();
397 var submitTextPage = function (pageName, oldRevision, givenPageName, isLocked, mimeType, summary, text) {
398 var doc = document.implementation.createDocument(
399 "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
401 var page = doc.documentElement;
403 if (oldRevision != null) {
405 var updateInfo = doc.createElement("updateInfo");
406 updateInfo.setAttribute("oldRevision", oldRevision);
408 if (pageName != givenPageName) {
409 var move = doc.createElement("move");
410 move.setAttribute("from", pageName);
411 updateInfo.appendChild(move);
414 page.appendChild(updateInfo);
417 page.setAttribute("isLocked", isLocked ? "yes" : "no");
418 page.setAttribute("type", mimeType);
420 if (summary != null) {
421 var s = doc.createElement("summary");
423 doc.createTextNode(summary));
427 var textData = doc.createElement("textData");
428 textData.appendChild(
429 doc.createTextNode(text));
431 page.appendChild(textData);
433 Rakka.displayWaitingMessage("Submitting... please wait.");
435 var url = Rakka.baseURI + encodeURI(givenPageName);
439 contentType: "text/xml",
442 beforeSend : function (req) {
443 Rakka.setAuthorization(req);
445 success : function () {
446 window.location.replace(url);
448 error : function (req) {
449 Rakka.hideWaitingMessage();
451 var $area = Rakka.switchScreen();
452 $area.text("Error: " + req.status + " " + req.statusText);
457 var submitBinaryPage = function (pageName, oldRevision, givenPageName, isLocked, summary, path) {
458 var doc = document.implementation.createDocument(
459 "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
461 var page = doc.documentElement;
463 if (oldRevision != null) {
465 var updateInfo = doc.createElement("updateInfo");
466 updateInfo.setAttribute("oldRevision", oldRevision);
468 if (pageName != givenPageName) {
469 var move = doc.createElement("move");
470 move.setAttribute("from", pageName);
471 updateInfo.appendChild(move);
474 page.appendChild(updateInfo);
477 page.setAttribute("isLocked", isLocked ? "yes" : "no");
478 page.setAttribute("type", "");
480 if (summary != null) {
481 var s = doc.createElement("summary");
483 doc.createTextNode(summary));
487 var bin = Rakka.loadLocalBinaryFile(path);
488 var b64 = Rakka.encodeBase64(bin);
490 var binaryData = doc.createElement("binaryData");
491 binaryData.appendChild(
492 doc.createTextNode(b64));
494 page.appendChild(binaryData);
496 Rakka.displayWaitingMessage("Submitting... please wait.");
498 var url = Rakka.baseURI + encodeURI(givenPageName);
502 contentType: "text/xml",
505 beforeSend : function (req) {
506 Rakka.setAuthorization(req);
508 success : function () {
509 window.location.replace(url);
511 error : function (req) {
512 Rakka.hideWaitingMessage();
514 var $area = Rakka.switchScreen();
515 $area.text("Error: " + req.status + " " + req.statusText);
520 var submitRedirection = function (pageName, oldRevision, givenPageName, isLocked, destination) {
521 var doc = document.implementation.createDocument(
522 "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
524 var page = doc.documentElement;
526 if (oldRevision != null) {
528 var updateInfo = doc.createElement("updateInfo");
529 updateInfo.setAttribute("oldRevision", oldRevision);
531 if (pageName != givenPageName) {
532 var move = doc.createElement("move");
533 move.setAttribute("from", pageName);
534 updateInfo.appendChild(move);
537 page.appendChild(updateInfo);
540 page.setAttribute("isLocked", isLocked ? "yes" : "no");
541 page.setAttribute("redirect", destination);
543 Rakka.displayWaitingMessage("Submitting... please wait.");
545 var url = Rakka.baseURI + encodeURI(givenPageName);
549 contentType: "text/xml",
552 beforeSend : function (req) {
553 Rakka.setAuthorization(req);
555 success : function () {
556 window.location.replace(url);
558 error : function (req) {
559 Rakka.hideWaitingMessage();
561 var $area = Rakka.switchScreen();
562 $area.text("Error: " + req.status + " " + req.statusText);
567 var deletePage = function (pageName) {
568 var url = Rakka.baseURI + encodeURI(pageName);
572 beforeSend : function (req) {
573 Rakka.setAuthorization(req);
575 success : function () {
576 window.location.replace(url);
578 error : function (req) {
579 Rakka.hideWaitingMessage();
581 var $area = Rakka.switchScreen();
582 $area.text("Error: " + req.status + " " + req.statusText);