1 Rakka.$previewHeader = null;
2 Rakka.$previewArea = null;
4 Rakka.editPage = function (pageName) {
5 var $area = Rakka.switchScreen();
7 Rakka.displayWaitingMessage("Loading... please wait.");
11 url : Rakka.baseURI + pageName + ".xml",
12 success: function (pageXml) {
13 Rakka.hideWaitingMessage();
15 var $page = $(pageXml).find("page");
16 var oldRevision = $page.attr("revision");
18 = $page.attr("isBinary") == "yes" ? "binary"
19 : $page.attr("type") == "text/x-rakka" ? "rakka"
20 : $page.attr("type") == "text/css" ? "css"
21 : $page.attr("redirect") != null ? "redirect"
25 = $page.attr("redirect") != null ? $page.attr("redirect")
26 : $page.find("textData").text()
28 Rakka.displayPageEditor(pageName, oldRevision, defaultType, source);
30 error : function (req) {
31 Rakka.hideWaitingMessage();
33 if (req.status == 404) {
34 Rakka.displayPageEditor(pageName, null, "rakka", null);
37 $area.text("Error: " + req.status + " " + req.statusText);
43 Rakka.newPage = function () {
44 Rakka.displayPageEditor("", null, "rakka", null);
47 Rakka.displayPageEditor = function (pageName, oldRevision, defaultType, source) {
48 var $area = Rakka.switchScreen();
51 Rakka.$previewHeader = $( $.H1({}, "Preview") );
52 $area.append(Rakka.$previewHeader);
53 Rakka.$previewHeader.hide();
55 Rakka.$previewArea = $( $.DIV({className: "preview"}) );
56 $area.append(Rakka.$previewArea);
57 Rakka.$previewArea.hide();
59 $area.append($.H1({}, pageName == "" ? "Create page" : "Edit page"));
62 = $.INPUT({type : "text", value: pageName});
65 = $.INPUT({type : "radio",
67 checked: (defaultType == "rakka" ? "checked" : "")});
70 = $.INPUT({type : "radio",
72 checked: (defaultType == "css" ? "checked" : "")});
75 = $.INPUT({type : "radio",
77 checked: (defaultType == "binary" ? "checked" : "")});
80 = $.INPUT({type : "radio",
82 checked: (defaultType == "redirect" ? "checked" : "")});
85 = $.TEXTAREA({}, (defaultType == "rakka" && source != null ? source : ""));
88 = $.TEXTAREA({}, (defaultType == "css" && source != null ? source : ""));
91 = $.INPUT({type: "file"});
94 = $.INPUT({type: "text", value: (defaultType == "redirect" ? source : "")});
103 = $.INPUT({type: "button", value: "Preview page"});
105 $(btnPreview).click(function () {
106 if (btnTypeRakka.checked) {
107 Rakka.previewRakkaPage(
108 fldPageName.value, fldRakkaSource.value);
110 else if (btnTypeBinary.checked) {
111 Rakka.previewBinaryPage(
112 fldPageName.value, fldUploadFile.value);
117 = $.INPUT({type: "button", value: "Submit page"});
119 $(btnSubmit).click(function () {
120 if (btnTypeRakka.checked) {
121 Rakka.submitTextPage(
126 fldRakkaSource.value);
128 else if (btnTypeCSS.checked) {
129 Rakka.submitTextPage(
136 else if (btnTypeBinary.checked) {
137 Rakka.submitBinaryPage(
141 fldUploadFile.value);
143 else if (btnTypeRedirect.checked) {
144 Rakka.submitRedirection(
153 = $.INPUT({type: "button", value: "Delete this page"});
155 $(btnDelete).click(function () {
156 if (window.confirm("Do you really want to delete this page?")) {
157 Rakka.deletePage(pageName);
161 var updateTRContent = function () {
162 if (btnTypeRakka.checked) {
163 $(trContent).find("th").text("Wiki source");
164 $(trContent).find("td").empty().append(fldRakkaSource);
165 $(btnPreview).show();
167 else if (btnTypeCSS.checked) {
168 $(trContent).find("th").text("CSS source");
169 $(trContent).find("td").empty().append(fldCSSSource);
170 $(btnPreview).hide();
172 else if (btnTypeBinary.checked) {
173 $(trContent).find("th").text("File");
174 $(trContent).find("td").empty().append(fldUploadFile);
175 $(btnPreview).show();
177 else if (btnTypeRedirect.checked) {
178 $(trContent).find("th").text("Destination Page");
179 $(trContent).find("td").empty().append(fldRedirect);
180 $(btnPreview).hide();
183 $(btnTypeRakka ).change(updateTRContent);
184 $(btnTypeCSS ).change(updateTRContent);
185 $(btnTypeBinary ).change(updateTRContent);
186 $(btnTypeRedirect).change(updateTRContent);
190 = $.TABLE({className: "pageEditor"},
193 $.TH({}, "Page name"),
194 $.TD({}, fldPageName)
197 $.TH({}, "Page type"),
230 $.TD({}, btnPreview, btnSubmit, btnDelete)
235 if (oldRevision == null || oldRevision == 0) {
240 $area.append(pageEditor);
243 Rakka.previewRakkaPage = function (pageName, source) {
244 Rakka.displayWaitingMessage("Loading... please wait.");
246 var url = Rakka.baseURI + "render/" + encodeURI(pageName);
250 contentType: "text/x-rakka",
253 success : function (resultDoc) {
254 Rakka.hideWaitingMessage();
255 Rakka.showPreview(resultDoc);
257 error : function (req) {
258 Rakka.hideWaitingMessage();
259 alert("Error: " + req.status + " " + req.statusText);
264 Rakka.previewBinaryPage = function (pageName, path) {
265 Rakka.displayWaitingMessage("Loading... please wait.");
267 /* Firefox でバイナリを送らうとすると 0x00 の位置で切れてしまふ。*/
268 var bin = Rakka.loadLocalBinaryFile(path);
269 var url = Rakka.baseURI + "render/" + encodeURI(pageName);
273 contentType: "application/x-rakka-base64-stream",
274 data : Rakka.encodeBase64(bin),
276 success : function (resultDoc) {
277 Rakka.hideWaitingMessage();
278 Rakka.showPreview(resultDoc);
280 error : function (req) {
281 Rakka.hideWaitingMessage();
282 alert("Error: " + req.status + " " + req.statusText);
287 Rakka.showPreview = function (doc) {
288 Rakka.$previewArea.empty();
290 Rakka.$previewHeader.show();
291 Rakka.$previewArea.show();
293 var root = doc.documentElement;
294 var child = root.firstChild;
296 if (child.nodeType == 1) {
298 Rakka.$previewArea.append(child.cloneNode(true));
300 } while (child = child.nextSibling);
303 Rakka.submitTextPage = function (pageName, oldRevision, givenPageName, mimeType, text) {
304 var doc = document.implementation.createDocument(
305 "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
307 var page = doc.documentElement;
309 if (oldRevision != null) {
311 var updateInfo = doc.createElement("updateInfo");
312 updateInfo.setAttribute("oldRevision", oldRevision);
314 if (pageName != givenPageName) {
315 var move = doc.createElement("move");
316 move.setAttribute("from", pageName);
317 updateInfo.appendChild(move);
320 page.appendChild(updateInfo);
323 page.setAttribute("type", mimeType);
325 var textData = doc.createElement("textData");
326 textData.appendChild(
327 doc.createTextNode(text));
329 page.appendChild(textData);
331 Rakka.displayWaitingMessage("Submitting... please wait.");
333 var url = Rakka.baseURI + encodeURI(givenPageName);
337 contentType: "text/xml",
340 success : function () {
341 window.location.replace(url);
343 error : function (req) {
344 Rakka.hideWaitingMessage();
346 var $area = Rakka.switchScreen();
347 $area.text("Error: " + req.status + " " + req.statusText);
352 Rakka.submitBinaryPage = function (pageName, oldRevision, givenPageName, path) {
353 var doc = document.implementation.createDocument(
354 "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
356 var page = doc.documentElement;
358 if (oldRevision != null) {
360 var updateInfo = doc.createElement("updateInfo");
361 updateInfo.setAttribute("oldRevision", oldRevision);
363 if (pageName != givenPageName) {
364 var move = doc.createElement("move");
365 move.setAttribute("from", pageName);
366 updateInfo.appendChild(move);
369 page.appendChild(updateInfo);
372 page.setAttribute("type", "");
374 var bin = Rakka.loadLocalBinaryFile(path);
375 var b64 = Rakka.encodeBase64(bin);
377 var binaryData = doc.createElement("binaryData");
378 binaryData.appendChild(
379 doc.createTextNode(b64));
381 page.appendChild(binaryData);
383 Rakka.displayWaitingMessage("Submitting... please wait.");
385 var url = Rakka.baseURI + encodeURI(givenPageName);
389 contentType: "text/xml",
392 success : function () {
393 window.location.replace(url);
395 error : function (req) {
396 Rakka.hideWaitingMessage();
398 var $area = Rakka.switchScreen();
399 $area.text("Error: " + req.status + " " + req.statusText);
404 Rakka.submitRedirection = function (pageName, oldRevision, givenPageName, destination) {
405 var doc = document.implementation.createDocument(
406 "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null);
408 var page = doc.documentElement;
410 if (oldRevision != null) {
412 var updateInfo = doc.createElement("updateInfo");
413 updateInfo.setAttribute("oldRevision", oldRevision);
415 if (pageName != givenPageName) {
416 var move = doc.createElement("move");
417 move.setAttribute("from", pageName);
418 updateInfo.appendChild(move);
421 page.appendChild(updateInfo);
424 page.setAttribute("redirect", destination);
426 Rakka.displayWaitingMessage("Submitting... please wait.");
428 var url = Rakka.baseURI + encodeURI(givenPageName);
432 contentType: "text/xml",
435 success : function () {
436 window.location.replace(url);
438 error : function (req) {
439 Rakka.hideWaitingMessage();
441 var $area = Rakka.switchScreen();
442 $area.text("Error: " + req.status + " " + req.statusText);
447 Rakka.deletePage = function (pageName) {
448 var url = Rakka.baseURI + encodeURI(pageName);
452 success : function () {
453 window.location.replace(url);
455 error : function (req) {
456 Rakka.hideWaitingMessage();
458 var $area = Rakka.switchScreen();
459 $area.text("Error: " + req.status + " " + req.statusText);