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"
29 = $page.attr("redirect") != null ? $page.attr("redirect")
30 : $page.find("textData").text()
32 var summary = $page.find("summary").text();
34 displayPageEditor(pageName, oldRevision, defaultType, source, summary);
36 error : function (req) {
37 Rakka.hideWaitingMessage();
39 if (req.status == 404) {
40 displayPageEditor(pageName, null, "rakka", null, "");
43 $area.text("Error: " + req.status + " " + req.statusText);
49 Rakka.newPage = function () {
50 displayPageEditor("", null, "rakka", null, "");
53 var displayPageEditor = function (pageName, oldRevision, defaultType, source, summary) {
54 var $area = Rakka.switchScreen();
56 $previewHeader = $( $.H1({}, "Preview") );
57 $area.append($previewHeader);
58 $previewHeader.hide();
60 $previewArea = $( $.DIV({className: "preview"}) );
61 $area.append($previewArea);
64 $area.append($.H1({}, pageName == "" ? "Create page" : "Edit page"));
66 var makeDirty = function () {
71 = $.INPUT({type : "text", value: pageName});
73 $(fldPageName).change(makeDirty);
76 = $.INPUT({type : "radio",
78 checked: (defaultType == "rakka" ? "checked" : "")});
80 $(btnTypeRakka).change(makeDirty);
83 = $.INPUT({type : "radio",
85 checked: (defaultType == "css" ? "checked" : "")});
87 $(btnTypeCSS).change(makeDirty);
90 = $.INPUT({type : "radio",
92 checked: (defaultType == "binary" ? "checked" : "")});
94 $(btnTypeBinary).change(makeDirty);
97 = $.INPUT({type : "radio",
99 checked: (defaultType == "redirect" ? "checked" : "")});
101 $(btnTypeRedirect).change(makeDirty);
104 = $.TEXTAREA({className: "summary"}, summary);
106 $(fldSummary).change(makeDirty);
111 $.TD({}, fldSummary));
114 = $.TEXTAREA({className: "source"},
115 (defaultType == "rakka" && source != null ? source : ""));
117 $(fldRakkaSource).change(makeDirty);
120 = $.TEXTAREA({className: "source"},
121 (defaultType == "css" && source != null ? source : ""));
123 $(fldCSSSource).change(makeDirty);
126 = $.INPUT({type: "file"});
128 $(fldUploadFile).change(makeDirty);
131 = $.INPUT({type: "text", value: (defaultType == "redirect" ? source : "")});
133 $(fldRedirect).change(makeDirty);
142 = $.INPUT({type: "button", value: "Preview page"});
144 $(btnPreview).click(function () {
145 if (btnTypeRakka.checked) {
147 fldPageName.value, fldRakkaSource.value);
149 else if (btnTypeBinary.checked) {
151 fldPageName.value, fldUploadFile.value);
156 = $.INPUT({type: "button", value: "Submit page"});
158 $(btnSubmit).click(function () {
159 if (btnTypeRakka.checked) {
166 fldRakkaSource.value);
168 else if (btnTypeCSS.checked) {
177 else if (btnTypeBinary.checked) {
183 fldUploadFile.value);
185 else if (btnTypeRedirect.checked) {
195 = $.INPUT({type: "button", value: "Delete this page"});
197 $(btnDelete).click(function () {
198 if (window.confirm("Do you really want to delete this page?")) {
199 deletePage(pageName);
204 = $.INPUT({type: "button", value: "Cancel editing"});
206 $(btnCancel).click(function () {
208 if (window.confirm("Do you really want to discard changes?")) {
209 Rakka.restoreScreen();
213 Rakka.restoreScreen();
217 var updateTRContent = function () {
218 if (btnTypeRakka.checked) {
220 $(trContent).find("th").text("Wiki source");
221 $(trContent).find("td").empty().append(fldRakkaSource);
222 $(btnPreview).show();
224 else if (btnTypeCSS.checked) {
226 $(trContent).find("th").text("CSS source");
227 $(trContent).find("td").empty().append(fldCSSSource);
228 $(btnPreview).hide();
230 else if (btnTypeBinary.checked) {
232 $(trContent).find("th").text("File");
233 $(trContent).find("td").empty().append(fldUploadFile);
234 $(btnPreview).show();
236 else if (btnTypeRedirect.checked) {
238 $(trContent).find("th").text("Destination Page");
239 $(trContent).find("td").empty().append(fldRedirect);
240 $(btnPreview).hide();
243 $(btnTypeRakka ).change(updateTRContent);
244 $(btnTypeCSS ).change(updateTRContent);
245 $(btnTypeBinary ).change(updateTRContent);
246 $(btnTypeRedirect).change(updateTRContent);
250 = $.TABLE({className: "pageEditor"},
253 $.TH({}, "Page name"),
254 $.TD({}, fldPageName)
257 $.TH({}, "Page type"),
291 $.TD({}, btnPreview, btnSubmit, btnDelete, btnCancel)
296 if (oldRevision == null || oldRevision == 0) {
301 $area.append(pageEditor);
306 var previewRakkaPage = function (pageName, source) {
307 Rakka.displayWaitingMessage("Loading... please wait.");
309 var url = Rakka.baseURI + "render/" + encodeURI(pageName);
313 contentType: "text/x-rakka",
316 success : function (resultDoc) {
317 Rakka.hideWaitingMessage();
318 showPreview(resultDoc);
320 error : function (req) {
321 Rakka.hideWaitingMessage();
322 alert("Error: " + req.status + " " + req.statusText);
327 var previewBinaryPage = function (pageName, path) {
328 Rakka.displayWaitingMessage("Loading... please wait.");
330 /* Firefox でバイナリを送らうとすると 0x00 の位置で切れてしまふ。*/
331 var bin = Rakka.loadLocalBinaryFile(path);
332 var url = Rakka.baseURI + "render/" + encodeURI(pageName);
336 contentType: "application/x-rakka-base64-stream",
337 data : Rakka.encodeBase64(bin),
339 success : function (resultDoc) {
340 Rakka.hideWaitingMessage();
341 showPreview(resultDoc);
343 error : function (req) {
344 Rakka.hideWaitingMessage();
345 alert("Error: " + req.status + " " + req.statusText);
350 var showPreview = function (doc) {
351 $previewArea.empty();
353 $previewHeader.show();
356 var root = doc.documentElement;
357 var child = root.firstChild;
359 if (child.nodeType == 1) {
361 $previewArea.append(child.cloneNode(true));
363 } while (child = child.nextSibling);
365 Rakka.scrollToTopLeft();
368 var submitTextPage = function (pageName, oldRevision, givenPageName, mimeType, summary, text) {
369 var doc = document.implementation.createDocument(
370 "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
372 var page = doc.documentElement;
374 if (oldRevision != null) {
376 var updateInfo = doc.createElement("updateInfo");
377 updateInfo.setAttribute("oldRevision", oldRevision);
379 if (pageName != givenPageName) {
380 var move = doc.createElement("move");
381 move.setAttribute("from", pageName);
382 updateInfo.appendChild(move);
385 page.appendChild(updateInfo);
388 page.setAttribute("type", mimeType);
390 if (summary != null) {
391 var s = doc.createElement("summary");
393 doc.createTextNode(summary));
397 var textData = doc.createElement("textData");
398 textData.appendChild(
399 doc.createTextNode(text));
401 page.appendChild(textData);
403 Rakka.displayWaitingMessage("Submitting... please wait.");
405 var url = Rakka.baseURI + encodeURI(givenPageName);
409 contentType: "text/xml",
412 beforeSend : function (req) {
413 Rakka.setAuthorization(req);
415 success : function () {
416 window.location.replace(url);
418 error : function (req) {
419 Rakka.hideWaitingMessage();
421 var $area = Rakka.switchScreen();
422 $area.text("Error: " + req.status + " " + req.statusText);
427 var submitBinaryPage = function (pageName, oldRevision, givenPageName, summary, path) {
428 var doc = document.implementation.createDocument(
429 "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
431 var page = doc.documentElement;
433 if (oldRevision != null) {
435 var updateInfo = doc.createElement("updateInfo");
436 updateInfo.setAttribute("oldRevision", oldRevision);
438 if (pageName != givenPageName) {
439 var move = doc.createElement("move");
440 move.setAttribute("from", pageName);
441 updateInfo.appendChild(move);
444 page.appendChild(updateInfo);
447 page.setAttribute("type", "");
449 if (summary != null) {
450 var s = doc.createElement("summary");
452 doc.createTextNode(summary));
456 var bin = Rakka.loadLocalBinaryFile(path);
457 var b64 = Rakka.encodeBase64(bin);
459 var binaryData = doc.createElement("binaryData");
460 binaryData.appendChild(
461 doc.createTextNode(b64));
463 page.appendChild(binaryData);
465 Rakka.displayWaitingMessage("Submitting... please wait.");
467 var url = Rakka.baseURI + encodeURI(givenPageName);
471 contentType: "text/xml",
474 beforeSend : function (req) {
475 Rakka.setAuthorization(req);
477 success : function () {
478 window.location.replace(url);
480 error : function (req) {
481 Rakka.hideWaitingMessage();
483 var $area = Rakka.switchScreen();
484 $area.text("Error: " + req.status + " " + req.statusText);
489 var submitRedirection = function (pageName, oldRevision, givenPageName, destination) {
490 var doc = document.implementation.createDocument(
491 "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
493 var page = doc.documentElement;
495 if (oldRevision != null) {
497 var updateInfo = doc.createElement("updateInfo");
498 updateInfo.setAttribute("oldRevision", oldRevision);
500 if (pageName != givenPageName) {
501 var move = doc.createElement("move");
502 move.setAttribute("from", pageName);
503 updateInfo.appendChild(move);
506 page.appendChild(updateInfo);
509 page.setAttribute("redirect", destination);
511 Rakka.displayWaitingMessage("Submitting... please wait.");
513 var url = Rakka.baseURI + encodeURI(givenPageName);
517 contentType: "text/xml",
520 beforeSend : function (req) {
521 Rakka.setAuthorization(req);
523 success : function () {
524 window.location.replace(url);
526 error : function (req) {
527 Rakka.hideWaitingMessage();
529 var $area = Rakka.switchScreen();
530 $area.text("Error: " + req.status + " " + req.statusText);
535 var deletePage = function (pageName) {
536 var url = Rakka.baseURI + encodeURI(pageName);
540 beforeSend : function (req) {
541 Rakka.setAuthorization(req);
543 success : function () {
544 window.location.replace(url);
546 error : function (req) {
547 Rakka.hideWaitingMessage();
549 var $area = Rakka.switchScreen();
550 $area.text("Error: " + req.status + " " + req.statusText);