1 Rakka.$previewHeader = null;
2 Rakka.$previewArea = null;
6 Rakka.editPage = function (pageName) {
7 var $area = Rakka.switchScreen();
9 Rakka.displayWaitingMessage("Loading... please wait.");
13 url : Rakka.baseURI + pageName + ".xml",
14 success: function (pageXml) {
15 Rakka.hideWaitingMessage();
17 var $page = $(pageXml).find("page");
18 var oldRevision = $page.attr("revision");
20 = $page.attr("isBinary") == "yes" ? "binary"
21 : $page.attr("type") == "text/x-rakka" ? "rakka"
22 : $page.attr("type") == "text/css" ? "css"
23 : $page.attr("redirect") != null ? "redirect"
27 = $page.attr("redirect") != null ? $page.attr("redirect")
28 : $page.find("textData").text()
30 var summary = $page.find("summary").text();
32 Rakka.displayPageEditor(pageName, oldRevision, defaultType, source, summary);
34 error : function (req) {
35 Rakka.hideWaitingMessage();
37 if (req.status == 404) {
38 Rakka.displayPageEditor(pageName, null, "rakka", null, "");
41 $area.text("Error: " + req.status + " " + req.statusText);
47 Rakka.newPage = function () {
48 Rakka.displayPageEditor("", null, "rakka", null, "");
51 Rakka.displayPageEditor = function (pageName, oldRevision, defaultType, source, summary) {
52 var $area = Rakka.switchScreen();
55 Rakka.$previewHeader = $( $.H1({}, "Preview") );
56 $area.append(Rakka.$previewHeader);
57 Rakka.$previewHeader.hide();
59 Rakka.$previewArea = $( $.DIV({className: "preview"}) );
60 $area.append(Rakka.$previewArea);
61 Rakka.$previewArea.hide();
63 $area.append($.H1({}, pageName == "" ? "Create page" : "Edit page"));
65 var makeDirty = function () {
70 = $.INPUT({type : "text", value: pageName});
72 $(fldPageName).change(makeDirty);
75 = $.INPUT({type : "radio",
77 checked: (defaultType == "rakka" ? "checked" : "")});
79 $(btnTypeRakka).change(makeDirty);
82 = $.INPUT({type : "radio",
84 checked: (defaultType == "css" ? "checked" : "")});
86 $(btnTypeCSS).change(makeDirty);
89 = $.INPUT({type : "radio",
91 checked: (defaultType == "binary" ? "checked" : "")});
93 $(btnTypeBinary).change(makeDirty);
96 = $.INPUT({type : "radio",
98 checked: (defaultType == "redirect" ? "checked" : "")});
100 $(btnTypeRedirect).change(makeDirty);
103 = $.TEXTAREA({className: "summary"}, summary);
105 $(fldSummary).change(makeDirty);
110 $.TD({}, fldSummary));
113 = $.TEXTAREA({className: "source"},
114 (defaultType == "rakka" && source != null ? source : ""));
116 $(fldRakkaSource).change(makeDirty);
119 = $.TEXTAREA({className: "source"},
120 (defaultType == "css" && source != null ? source : ""));
122 $(fldCSSSource).change(makeDirty);
125 = $.INPUT({type: "file"});
127 $(fldUploadFile).change(makeDirty);
130 = $.INPUT({type: "text", value: (defaultType == "redirect" ? source : "")});
132 $(fldRedirect).change(makeDirty);
141 = $.INPUT({type: "button", value: "Preview page"});
143 $(btnPreview).click(function () {
144 if (btnTypeRakka.checked) {
145 Rakka.previewRakkaPage(
146 fldPageName.value, fldRakkaSource.value);
148 else if (btnTypeBinary.checked) {
149 Rakka.previewBinaryPage(
150 fldPageName.value, fldUploadFile.value);
155 = $.INPUT({type: "button", value: "Submit page"});
157 $(btnSubmit).click(function () {
158 if (btnTypeRakka.checked) {
159 Rakka.submitTextPage(
165 fldRakkaSource.value);
167 else if (btnTypeCSS.checked) {
168 Rakka.submitTextPage(
176 else if (btnTypeBinary.checked) {
177 Rakka.submitBinaryPage(
182 fldUploadFile.value);
184 else if (btnTypeRedirect.checked) {
185 Rakka.submitRedirection(
194 = $.INPUT({type: "button", value: "Delete this page"});
196 $(btnDelete).click(function () {
197 if (window.confirm("Do you really want to delete this page?")) {
198 Rakka.deletePage(pageName);
203 = $.INPUT({type: "button", value: "Cancel editing"});
205 $(btnCancel).click(function () {
207 if (window.confirm("Do you really want to discard changes?")) {
208 Rakka.restoreScreen();
212 Rakka.restoreScreen();
216 var updateTRContent = function () {
217 if (btnTypeRakka.checked) {
219 $(trContent).find("th").text("Wiki source");
220 $(trContent).find("td").empty().append(fldRakkaSource);
221 $(btnPreview).show();
223 else if (btnTypeCSS.checked) {
225 $(trContent).find("th").text("CSS source");
226 $(trContent).find("td").empty().append(fldCSSSource);
227 $(btnPreview).hide();
229 else if (btnTypeBinary.checked) {
231 $(trContent).find("th").text("File");
232 $(trContent).find("td").empty().append(fldUploadFile);
233 $(btnPreview).show();
235 else if (btnTypeRedirect.checked) {
237 $(trContent).find("th").text("Destination Page");
238 $(trContent).find("td").empty().append(fldRedirect);
239 $(btnPreview).hide();
242 $(btnTypeRakka ).change(updateTRContent);
243 $(btnTypeCSS ).change(updateTRContent);
244 $(btnTypeBinary ).change(updateTRContent);
245 $(btnTypeRedirect).change(updateTRContent);
249 = $.TABLE({className: "pageEditor"},
252 $.TH({}, "Page name"),
253 $.TD({}, fldPageName)
256 $.TH({}, "Page type"),
290 $.TD({}, btnPreview, btnSubmit, btnDelete, btnCancel)
295 if (oldRevision == null || oldRevision == 0) {
300 $area.append(pageEditor);
302 Rakka.isDirty = false;
305 Rakka.previewRakkaPage = function (pageName, source) {
306 Rakka.displayWaitingMessage("Loading... please wait.");
308 var url = Rakka.baseURI + "render/" + encodeURI(pageName);
312 contentType: "text/x-rakka",
315 success : function (resultDoc) {
316 Rakka.hideWaitingMessage();
317 Rakka.showPreview(resultDoc);
319 error : function (req) {
320 Rakka.hideWaitingMessage();
321 alert("Error: " + req.status + " " + req.statusText);
326 Rakka.previewBinaryPage = function (pageName, path) {
327 Rakka.displayWaitingMessage("Loading... please wait.");
329 /* Firefox でバイナリを送らうとすると 0x00 の位置で切れてしまふ。*/
330 var bin = Rakka.loadLocalBinaryFile(path);
331 var url = Rakka.baseURI + "render/" + encodeURI(pageName);
335 contentType: "application/x-rakka-base64-stream",
336 data : Rakka.encodeBase64(bin),
338 success : function (resultDoc) {
339 Rakka.hideWaitingMessage();
340 Rakka.showPreview(resultDoc);
342 error : function (req) {
343 Rakka.hideWaitingMessage();
344 alert("Error: " + req.status + " " + req.statusText);
349 Rakka.showPreview = function (doc) {
350 Rakka.$previewArea.empty();
352 Rakka.$previewHeader.show();
353 Rakka.$previewArea.show();
355 var root = doc.documentElement;
356 var child = root.firstChild;
358 if (child.nodeType == 1) {
360 Rakka.$previewArea.append(child.cloneNode(true));
362 } while (child = child.nextSibling);
364 Rakka.scrollToTopLeft();
367 Rakka.submitTextPage = function (pageName, oldRevision, givenPageName, mimeType, summary, text) {
368 var doc = document.implementation.createDocument(
369 "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
371 var page = doc.documentElement;
373 if (oldRevision != null) {
375 var updateInfo = doc.createElement("updateInfo");
376 updateInfo.setAttribute("oldRevision", oldRevision);
378 if (pageName != givenPageName) {
379 var move = doc.createElement("move");
380 move.setAttribute("from", pageName);
381 updateInfo.appendChild(move);
384 page.appendChild(updateInfo);
387 page.setAttribute("type", mimeType);
389 if (summary != null) {
390 var s = doc.createElement("summary");
392 doc.createTextNode(summary));
396 var textData = doc.createElement("textData");
397 textData.appendChild(
398 doc.createTextNode(text));
400 page.appendChild(textData);
402 Rakka.displayWaitingMessage("Submitting... please wait.");
404 var url = Rakka.baseURI + encodeURI(givenPageName);
408 contentType: "text/xml",
411 success : function () {
412 window.location.replace(url);
414 error : function (req) {
415 Rakka.hideWaitingMessage();
417 var $area = Rakka.switchScreen();
418 $area.text("Error: " + req.status + " " + req.statusText);
423 Rakka.submitBinaryPage = function (pageName, oldRevision, givenPageName, summary, path) {
424 var doc = document.implementation.createDocument(
425 "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
427 var page = doc.documentElement;
429 if (oldRevision != null) {
431 var updateInfo = doc.createElement("updateInfo");
432 updateInfo.setAttribute("oldRevision", oldRevision);
434 if (pageName != givenPageName) {
435 var move = doc.createElement("move");
436 move.setAttribute("from", pageName);
437 updateInfo.appendChild(move);
440 page.appendChild(updateInfo);
443 page.setAttribute("type", "");
445 if (summary != null) {
446 var s = doc.createElement("summary");
448 doc.createTextNode(summary));
452 var bin = Rakka.loadLocalBinaryFile(path);
453 var b64 = Rakka.encodeBase64(bin);
455 var binaryData = doc.createElement("binaryData");
456 binaryData.appendChild(
457 doc.createTextNode(b64));
459 page.appendChild(binaryData);
461 Rakka.displayWaitingMessage("Submitting... please wait.");
463 var url = Rakka.baseURI + encodeURI(givenPageName);
467 contentType: "text/xml",
470 success : function () {
471 window.location.replace(url);
473 error : function (req) {
474 Rakka.hideWaitingMessage();
476 var $area = Rakka.switchScreen();
477 $area.text("Error: " + req.status + " " + req.statusText);
482 Rakka.submitRedirection = function (pageName, oldRevision, givenPageName, destination) {
483 var doc = document.implementation.createDocument(
484 "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
486 var page = doc.documentElement;
488 if (oldRevision != null) {
490 var updateInfo = doc.createElement("updateInfo");
491 updateInfo.setAttribute("oldRevision", oldRevision);
493 if (pageName != givenPageName) {
494 var move = doc.createElement("move");
495 move.setAttribute("from", pageName);
496 updateInfo.appendChild(move);
499 page.appendChild(updateInfo);
502 page.setAttribute("redirect", destination);
504 Rakka.displayWaitingMessage("Submitting... please wait.");
506 var url = Rakka.baseURI + encodeURI(givenPageName);
510 contentType: "text/xml",
513 success : function () {
514 window.location.replace(url);
516 error : function (req) {
517 Rakka.hideWaitingMessage();
519 var $area = Rakka.switchScreen();
520 $area.text("Error: " + req.status + " " + req.statusText);
525 Rakka.deletePage = function (pageName) {
526 var url = Rakka.baseURI + encodeURI(pageName);
530 success : function () {
531 window.location.replace(url);
533 error : function (req) {
534 Rakka.hideWaitingMessage();
536 var $area = Rakka.switchScreen();
537 $area.text("Error: " + req.status + " " + req.statusText);