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 lang = $page.attr("lang");
30 var isLocked = $page.attr("isLocked") == "yes";
32 = $page.attr("redirect") != null ? $page.attr("redirect")
33 : $page.find("textData").text()
35 var summary = $page.find("summary").text();
37 displayPageEditor(pageName, oldRevision, defaultType, lang, isLocked, source, summary);
40 displayPageEditor(pageName, null, "rakka", null, false, null, "");
43 error : function (req) {
44 Rakka.hideWaitingMessage();
46 if (req.status == 404) {
47 displayPageEditor(pageName, null, "rakka", null, false, null, "");
50 $area.text("Error: " + req.status + " " + req.statusText);
56 Rakka.newPage = function () {
57 displayPageEditor("", null, "rakka", null, false, null, "");
60 var displayPageEditor = function (pageName, oldRevision, defaultType, lang, isLocked, source, summary) {
61 var $area = Rakka.switchScreen();
63 $previewHeader = $( $.H1({}, "Preview") );
64 $area.append($previewHeader);
65 $previewHeader.hide();
67 $previewArea = $( $.DIV({className: "preview"}) );
68 $area.append($previewArea);
71 $area.append($.H1({}, pageName == "" ? "Create page" : "Edit page"));
73 var makeDirty = function () {
78 = $.INPUT({type : "text", value: pageName});
80 $(fldPageName).change(makeDirty);
83 = $.INPUT({type : "checkbox",
84 checked : (isLocked ? "checked" : "")});
86 $(chkIsLocked).change(makeDirty);
90 $.TH({}, "Page lock"),
94 "Disallow anonymous users to edit or delete this page")));
97 = $.INPUT({type : "radio",
99 checked: (defaultType == "rakka" ? "checked" : "")});
101 $(btnTypeRakka).change(makeDirty);
104 = $.INPUT({type : "radio",
106 checked: (defaultType == "css" ? "checked" : "")});
108 $(btnTypeCSS).change(makeDirty);
111 = $.INPUT({type : "radio",
113 checked: (defaultType == "binary" ? "checked" : "")});
115 $(btnTypeBinary).change(makeDirty);
118 = $.INPUT({type : "radio",
120 checked: (defaultType == "redirect" ? "checked" : "")});
122 $(btnTypeRedirect).change(makeDirty);
126 $.OPTION({value: ""}, "(unspecified)"),
130 $.each(Rakka.getSystemConfig().languages, function (tag, name) {
132 $.OPTION({value: tag}, name));
138 $(selPageLang).change(makeDirty);
140 if (lang == null || lang == "") {
141 $(selPageLang).val($("html").attr("xml:lang"));
144 $(selPageLang).val(lang);
149 $.TH({}, "Page language"),
150 $.TD({}, selPageLang));
153 = $.TEXTAREA({className: "summary"}, summary);
155 $(fldSummary).change(makeDirty);
160 $.TD({}, fldSummary));
163 = $.TEXTAREA({className: "source"},
164 (defaultType == "rakka" && source != null ? source : ""));
166 $(fldRakkaSource).change(makeDirty);
169 = $.TEXTAREA({className: "source"},
170 (defaultType == "css" && source != null ? source : ""));
172 $(fldCSSSource).change(makeDirty);
175 = $.INPUT({type: "file"});
177 $(fldUploadFile).change(makeDirty);
180 = $.INPUT({type: "text", value: (defaultType == "redirect" ? source : "")});
182 $(fldRedirect).change(makeDirty);
191 = $.INPUT({type: "button", value: "Preview page"});
193 $(btnPreview).click(function () {
194 if (btnTypeRakka.checked) {
196 fldPageName.value, fldRakkaSource.value);
198 else if (btnTypeBinary.checked) {
200 fldPageName.value, fldUploadFile.value);
205 = $.INPUT({type: "button", value: "Submit page"});
207 $(btnSubmit).click(function () {
208 if (btnTypeRakka.checked) {
215 $(selPageLang).val(),
217 fldRakkaSource.value);
219 else if (btnTypeCSS.checked) {
226 $(selPageLang).val(),
230 else if (btnTypeBinary.checked) {
236 $(selPageLang).val(),
238 fldUploadFile.value);
240 else if (btnTypeRedirect.checked) {
251 = $.INPUT({type: "button", value: "Delete this page"});
253 $(btnDelete).click(function () {
254 if (window.confirm("Do you really want to delete this page?")) {
255 deletePage(pageName);
260 = $.INPUT({type: "button", value: "Cancel editing"});
262 $(btnCancel).click(function () {
264 if (window.confirm("Do you really want to discard changes?")) {
265 Rakka.restoreScreen();
269 Rakka.restoreScreen();
273 var updateTRContent = function () {
274 if (btnTypeRakka.checked) {
275 $(trPageLang).show();
277 $(trContent).find("th").text("Wiki source");
278 $(trContent).find("td").empty().append(fldRakkaSource);
279 $(btnPreview).show();
281 else if (btnTypeCSS.checked) {
282 $(trPageLang).show();
284 $(trContent).find("th").text("CSS source");
285 $(trContent).find("td").empty().append(fldCSSSource);
286 $(btnPreview).hide();
288 else if (btnTypeBinary.checked) {
289 $(trPageLang).show();
291 $(trContent).find("th").text("File");
292 $(trContent).find("td").empty().append(fldUploadFile);
293 $(btnPreview).show();
295 else if (btnTypeRedirect.checked) {
296 $(trPageLang).hide();
298 $(trContent).find("th").text("Destination Page");
299 $(trContent).find("td").empty().append(fldRedirect);
300 $(btnPreview).hide();
303 $(btnTypeRakka ).change(updateTRContent);
304 $(btnTypeCSS ).change(updateTRContent);
305 $(btnTypeBinary ).change(updateTRContent);
306 $(btnTypeRedirect).change(updateTRContent);
310 = $.TABLE({className: "pageEditor"},
313 $.TH({}, "Page name"),
314 $.TD({}, fldPageName)
318 $.TH({}, "Page type"),
353 $.TD({}, btnPreview, btnSubmit, btnDelete, btnCancel)
358 if (oldRevision == null || oldRevision == 0) {
363 $area.append(pageEditor);
365 if (!Rakka.isLoggedIn() || Rakka.isGlobalLocked) {
366 $(trIsLocked).hide();
372 var previewRakkaPage = function (pageName, source) {
373 Rakka.displayWaitingMessage("Loading... please wait.");
375 var url = Rakka.baseURI + "render/" + encodeURI(pageName);
379 contentType: "text/x-rakka",
382 success : function (resultDoc) {
383 Rakka.hideWaitingMessage();
384 showPreview(resultDoc);
386 error : function (req) {
387 Rakka.hideWaitingMessage();
388 alert("Error: " + req.status + " " + req.statusText);
393 var previewBinaryPage = function (pageName, path) {
394 Rakka.displayWaitingMessage("Loading... please wait.");
396 /* Firefox でバイナリを送らうとすると 0x00 の位置で切れてしまふ。*/
397 var bin = Rakka.loadLocalBinaryFile(path);
398 var url = Rakka.baseURI + "render/" + encodeURI(pageName);
402 contentType: "application/x-rakka-base64-stream",
403 data : Rakka.encodeBase64(bin),
405 success : function (resultDoc) {
406 Rakka.hideWaitingMessage();
407 showPreview(resultDoc);
409 error : function (req) {
410 Rakka.hideWaitingMessage();
411 alert("Error: " + req.status + " " + req.statusText);
416 var showPreview = function (doc) {
417 $previewArea.empty();
419 $previewHeader.show();
422 var root = doc.documentElement;
423 var child = root.firstChild;
425 if (child.nodeType == 1) {
427 $previewArea.append(child.cloneNode(true));
429 } while (child = child.nextSibling);
431 Rakka.scrollToTopLeft();
434 var submitTextPage = function (pageName, oldRevision, givenPageName, isLocked, mimeType, lang, summary, text) {
435 var doc = document.implementation.createDocument(
436 "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
438 var page = doc.documentElement;
440 if (oldRevision != null) {
442 var updateInfo = doc.createElement("updateInfo");
443 updateInfo.setAttribute("oldRevision", oldRevision);
445 if (pageName != givenPageName) {
446 var move = doc.createElement("move");
447 move.setAttribute("from", pageName);
448 updateInfo.appendChild(move);
451 page.appendChild(updateInfo);
454 page.setAttribute("isLocked", isLocked ? "yes" : "no");
455 page.setAttribute("type", mimeType);
457 if (lang != null && lang != "") {
458 page.setAttribute("lang", lang);
461 if (summary != null && summary != "") {
462 var s = doc.createElement("summary");
464 doc.createTextNode(summary));
468 var textData = doc.createElement("textData");
469 textData.appendChild(
470 doc.createTextNode(text));
472 page.appendChild(textData);
474 Rakka.displayWaitingMessage("Submitting... please wait.");
476 var url = Rakka.baseURI + encodeURI(givenPageName);
480 contentType: "text/xml",
483 beforeSend : function (req) {
484 Rakka.setAuthorization(req);
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);
498 var submitBinaryPage = function (pageName, oldRevision, givenPageName, isLocked, lang, summary, path) {
499 var doc = document.implementation.createDocument(
500 "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
502 var page = doc.documentElement;
504 if (oldRevision != null) {
506 var updateInfo = doc.createElement("updateInfo");
507 updateInfo.setAttribute("oldRevision", oldRevision);
509 if (pageName != givenPageName) {
510 var move = doc.createElement("move");
511 move.setAttribute("from", pageName);
512 updateInfo.appendChild(move);
515 page.appendChild(updateInfo);
518 page.setAttribute("isLocked", isLocked ? "yes" : "no");
519 page.setAttribute("type", "");
521 if (lang != null && lang != "") {
522 page.setAttribute("lang", lang);
525 if (summary != null) {
526 var s = doc.createElement("summary");
528 doc.createTextNode(summary));
532 var bin = Rakka.loadLocalBinaryFile(path);
533 var b64 = Rakka.encodeBase64(bin);
535 var binaryData = doc.createElement("binaryData");
536 binaryData.appendChild(
537 doc.createTextNode(b64));
539 page.appendChild(binaryData);
541 Rakka.displayWaitingMessage("Submitting... please wait.");
543 var url = Rakka.baseURI + encodeURI(givenPageName);
547 contentType: "text/xml",
550 beforeSend : function (req) {
551 Rakka.setAuthorization(req);
553 success : function () {
554 window.location.replace(url);
556 error : function (req) {
557 Rakka.hideWaitingMessage();
559 var $area = Rakka.switchScreen();
560 $area.text("Error: " + req.status + " " + req.statusText);
565 var submitRedirection = function (pageName, oldRevision, givenPageName, isLocked, destination) {
566 var doc = document.implementation.createDocument(
567 "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
569 var page = doc.documentElement;
571 if (oldRevision != null) {
573 var updateInfo = doc.createElement("updateInfo");
574 updateInfo.setAttribute("oldRevision", oldRevision);
576 if (pageName != givenPageName) {
577 var move = doc.createElement("move");
578 move.setAttribute("from", pageName);
579 updateInfo.appendChild(move);
582 page.appendChild(updateInfo);
585 page.setAttribute("isLocked", isLocked ? "yes" : "no");
586 page.setAttribute("redirect", destination);
588 Rakka.displayWaitingMessage("Submitting... please wait.");
590 var url = Rakka.baseURI + encodeURI(givenPageName);
594 contentType: "text/xml",
597 beforeSend : function (req) {
598 Rakka.setAuthorization(req);
600 success : function () {
601 window.location.replace(url);
603 error : function (req) {
604 Rakka.hideWaitingMessage();
606 var $area = Rakka.switchScreen();
607 $area.text("Error: " + req.status + " " + req.statusText);
612 var deletePage = function (pageName) {
613 var url = Rakka.baseURI + encodeURI(pageName);
617 beforeSend : function (req) {
618 Rakka.setAuthorization(req);
620 success : function () {
621 window.location.replace(url);
623 error : function (req) {
624 Rakka.hideWaitingMessage();
626 var $area = Rakka.switchScreen();
627 $area.text("Error: " + req.status + " " + req.statusText);