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);
323 if (!Rakka.isLoggedIn() || Rakka.isGlobalLocked) {
324 $(trIsLocked).hide();
330 var previewRakkaPage = function (pageName, source) {
331 Rakka.displayWaitingMessage("Loading... please wait.");
333 var url = Rakka.baseURI + "render/" + encodeURI(pageName);
337 contentType: "text/x-rakka",
340 success : function (resultDoc) {
341 Rakka.hideWaitingMessage();
342 showPreview(resultDoc);
344 error : function (req) {
345 Rakka.hideWaitingMessage();
346 alert("Error: " + req.status + " " + req.statusText);
351 var previewBinaryPage = function (pageName, path) {
352 Rakka.displayWaitingMessage("Loading... please wait.");
354 /* Firefox でバイナリを送らうとすると 0x00 の位置で切れてしまふ。*/
355 var bin = Rakka.loadLocalBinaryFile(path);
356 var url = Rakka.baseURI + "render/" + encodeURI(pageName);
360 contentType: "application/x-rakka-base64-stream",
361 data : Rakka.encodeBase64(bin),
363 success : function (resultDoc) {
364 Rakka.hideWaitingMessage();
365 showPreview(resultDoc);
367 error : function (req) {
368 Rakka.hideWaitingMessage();
369 alert("Error: " + req.status + " " + req.statusText);
374 var showPreview = function (doc) {
375 $previewArea.empty();
377 $previewHeader.show();
380 var root = doc.documentElement;
381 var child = root.firstChild;
383 if (child.nodeType == 1) {
385 $previewArea.append(child.cloneNode(true));
387 } while (child = child.nextSibling);
389 Rakka.scrollToTopLeft();
392 var submitTextPage = function (pageName, oldRevision, givenPageName, isLocked, mimeType, summary, text) {
393 var doc = document.implementation.createDocument(
394 "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
396 var page = doc.documentElement;
398 if (oldRevision != null) {
400 var updateInfo = doc.createElement("updateInfo");
401 updateInfo.setAttribute("oldRevision", oldRevision);
403 if (pageName != givenPageName) {
404 var move = doc.createElement("move");
405 move.setAttribute("from", pageName);
406 updateInfo.appendChild(move);
409 page.appendChild(updateInfo);
412 page.setAttribute("isLocked", isLocked ? "yes" : "no");
413 page.setAttribute("type", mimeType);
415 if (summary != null) {
416 var s = doc.createElement("summary");
418 doc.createTextNode(summary));
422 var textData = doc.createElement("textData");
423 textData.appendChild(
424 doc.createTextNode(text));
426 page.appendChild(textData);
428 Rakka.displayWaitingMessage("Submitting... please wait.");
430 var url = Rakka.baseURI + encodeURI(givenPageName);
434 contentType: "text/xml",
437 beforeSend : function (req) {
438 Rakka.setAuthorization(req);
440 success : function () {
441 window.location.replace(url);
443 error : function (req) {
444 Rakka.hideWaitingMessage();
446 var $area = Rakka.switchScreen();
447 $area.text("Error: " + req.status + " " + req.statusText);
452 var submitBinaryPage = function (pageName, oldRevision, givenPageName, isLocked, summary, path) {
453 var doc = document.implementation.createDocument(
454 "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
456 var page = doc.documentElement;
458 if (oldRevision != null) {
460 var updateInfo = doc.createElement("updateInfo");
461 updateInfo.setAttribute("oldRevision", oldRevision);
463 if (pageName != givenPageName) {
464 var move = doc.createElement("move");
465 move.setAttribute("from", pageName);
466 updateInfo.appendChild(move);
469 page.appendChild(updateInfo);
472 page.setAttribute("isLocked", isLocked ? "yes" : "no");
473 page.setAttribute("type", "");
475 if (summary != null) {
476 var s = doc.createElement("summary");
478 doc.createTextNode(summary));
482 var bin = Rakka.loadLocalBinaryFile(path);
483 var b64 = Rakka.encodeBase64(bin);
485 var binaryData = doc.createElement("binaryData");
486 binaryData.appendChild(
487 doc.createTextNode(b64));
489 page.appendChild(binaryData);
491 Rakka.displayWaitingMessage("Submitting... please wait.");
493 var url = Rakka.baseURI + encodeURI(givenPageName);
497 contentType: "text/xml",
500 beforeSend : function (req) {
501 Rakka.setAuthorization(req);
503 success : function () {
504 window.location.replace(url);
506 error : function (req) {
507 Rakka.hideWaitingMessage();
509 var $area = Rakka.switchScreen();
510 $area.text("Error: " + req.status + " " + req.statusText);
515 var submitRedirection = function (pageName, oldRevision, givenPageName, isLocked, destination) {
516 var doc = document.implementation.createDocument(
517 "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
519 var page = doc.documentElement;
521 if (oldRevision != null) {
523 var updateInfo = doc.createElement("updateInfo");
524 updateInfo.setAttribute("oldRevision", oldRevision);
526 if (pageName != givenPageName) {
527 var move = doc.createElement("move");
528 move.setAttribute("from", pageName);
529 updateInfo.appendChild(move);
532 page.appendChild(updateInfo);
535 page.setAttribute("isLocked", isLocked ? "yes" : "no");
536 page.setAttribute("redirect", destination);
538 Rakka.displayWaitingMessage("Submitting... please wait.");
540 var url = Rakka.baseURI + encodeURI(givenPageName);
544 contentType: "text/xml",
547 beforeSend : function (req) {
548 Rakka.setAuthorization(req);
550 success : function () {
551 window.location.replace(url);
553 error : function (req) {
554 Rakka.hideWaitingMessage();
556 var $area = Rakka.switchScreen();
557 $area.text("Error: " + req.status + " " + req.statusText);
562 var deletePage = function (pageName) {
563 var url = Rakka.baseURI + encodeURI(pageName);
567 beforeSend : function (req) {
568 Rakka.setAuthorization(req);
570 success : function () {
571 window.location.replace(url);
573 error : function (req) {
574 Rakka.hideWaitingMessage();
576 var $area = Rakka.switchScreen();
577 $area.text("Error: " + req.status + " " + req.statusText);