X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=js%2FeditPage.js;h=960ce4eb5f6f8fdba41b9c9837d0c1fc0a732a02;hb=b51bb0c6d9385938eab21c70ed7ea631883260d0;hp=a8869fb91b6b01552be1b2341873e92475c24654;hpb=d128bc12ae9f763c37941122bf2e163517810bba;p=Rakka.git diff --git a/js/editPage.js b/js/editPage.js index a8869fb..960ce4e 100644 --- a/js/editPage.js +++ b/js/editPage.js @@ -1,6 +1,8 @@ Rakka.$previewHeader = null; Rakka.$previewArea = null; +Rakka.isDirty = null; + Rakka.editPage = function (pageName) { var $area = Rakka.switchScreen(); @@ -25,13 +27,15 @@ Rakka.editPage = function (pageName) { = $page.attr("redirect") != null ? $page.attr("redirect") : $page.find("textData").text() ; - Rakka.displayPageEditor(pageName, oldRevision, defaultType, source); + var summary = $page.find("summary").text(); + + Rakka.displayPageEditor(pageName, oldRevision, defaultType, source, summary); }, error : function (req) { Rakka.hideWaitingMessage(); if (req.status == 404) { - Rakka.displayPageEditor(pageName, null, "rakka", null); + Rakka.displayPageEditor(pageName, null, "rakka", null, ""); } else { $area.text("Error: " + req.status + " " + req.statusText); @@ -41,10 +45,10 @@ Rakka.editPage = function (pageName) { }; Rakka.newPage = function () { - Rakka.displayPageEditor("", null, "rakka", null); + Rakka.displayPageEditor("", null, "rakka", null, ""); }; -Rakka.displayPageEditor = function (pageName, oldRevision, defaultType, source) { +Rakka.displayPageEditor = function (pageName, oldRevision, defaultType, source, summary) { var $area = Rakka.switchScreen(); $area.empty(); @@ -57,42 +61,76 @@ Rakka.displayPageEditor = function (pageName, oldRevision, defaultType, source) Rakka.$previewArea.hide(); $area.append($.H1({}, pageName == "" ? "Create page" : "Edit page")); + + var makeDirty = function () { + Rakka.isDirty = true; + }; var fldPageName = $.INPUT({type : "text", value: pageName}); + $(fldPageName).change(makeDirty); + var btnTypeRakka = $.INPUT({type : "radio", name : "type", checked: (defaultType == "rakka" ? "checked" : "")}); + $(btnTypeRakka).change(makeDirty); + var btnTypeCSS = $.INPUT({type : "radio", name : "type", checked: (defaultType == "css" ? "checked" : "")}); + $(btnTypeCSS).change(makeDirty); + var btnTypeBinary = $.INPUT({type : "radio", name : "type", checked: (defaultType == "binary" ? "checked" : "")}); + $(btnTypeBinary).change(makeDirty); + var btnTypeRedirect = $.INPUT({type : "radio", name : "type", checked: (defaultType == "redirect" ? "checked" : "")}); + $(btnTypeRedirect).change(makeDirty); + + var fldSummary + = $.TEXTAREA({className: "summary"}, summary); + + $(fldSummary).change(makeDirty); + + var trSummary + = $.TR({}, + $.TH({}, "Summary"), + $.TD({}, fldSummary)); + var fldRakkaSource - = $.TEXTAREA({}, (defaultType == "rakka" && source != null ? source : "")); + = $.TEXTAREA({className: "source"}, + (defaultType == "rakka" && source != null ? source : "")); + + $(fldRakkaSource).change(makeDirty); var fldCSSSource - = $.TEXTAREA({}, (defaultType == "css" && source != null ? source : "")); + = $.TEXTAREA({className: "source"}, + (defaultType == "css" && source != null ? source : "")); + + $(fldCSSSource).change(makeDirty); var fldUploadFile = $.INPUT({type: "file"}); + $(fldUploadFile).change(makeDirty); + var fldRedirect = $.INPUT({type: "text", value: (defaultType == "redirect" ? source : "")}); + $(fldRedirect).change(makeDirty); + var trContent = $.TR({}, $.TH({}), @@ -123,6 +161,7 @@ Rakka.displayPageEditor = function (pageName, oldRevision, defaultType, source) oldRevision, fldPageName.value, "text/x-rakka", + fldSummary.value, fldRakkaSource.value); } else if (btnTypeCSS.checked) { @@ -131,6 +170,7 @@ Rakka.displayPageEditor = function (pageName, oldRevision, defaultType, source) oldRevision, fldPageName.value, "text/css", + fldSummary.value, fldCSSSource.value); } else if (btnTypeBinary.checked) { @@ -138,6 +178,7 @@ Rakka.displayPageEditor = function (pageName, oldRevision, defaultType, source) pageName, oldRevision, fldPageName.value, + fldSummary.value, fldUploadFile.value); } else if (btnTypeRedirect.checked) { @@ -153,26 +194,46 @@ Rakka.displayPageEditor = function (pageName, oldRevision, defaultType, source) = $.INPUT({type: "button", value: "Delete this page"}); $(btnDelete).click(function () { - throw new Error("FIXME: not implemented yet"); + if (window.confirm("Do you really want to delete this page?")) { + Rakka.deletePage(pageName); + } + }); + + var btnCancel + = $.INPUT({type: "button", value: "Cancel editing"}); + + $(btnCancel).click(function () { + if (Rakka.isDirty) { + if (window.confirm("Do you really want to discard changes?")) { + Rakka.restoreScreen(); + } + } + else { + Rakka.restoreScreen(); + } }); var updateTRContent = function () { if (btnTypeRakka.checked) { + $(trSummary).show(); $(trContent).find("th").text("Wiki source"); $(trContent).find("td").empty().append(fldRakkaSource); $(btnPreview).show(); } else if (btnTypeCSS.checked) { + $(trSummary).show(); $(trContent).find("th").text("CSS source"); $(trContent).find("td").empty().append(fldCSSSource); $(btnPreview).hide(); } else if (btnTypeBinary.checked) { + $(trSummary).show(); $(trContent).find("th").text("File"); $(trContent).find("td").empty().append(fldUploadFile); $(btnPreview).show(); } else if (btnTypeRedirect.checked) { + $(trSummary).hide(); $(trContent).find("th").text("Destination Page"); $(trContent).find("td").empty().append(fldRedirect); $(btnPreview).hide(); @@ -222,10 +283,11 @@ Rakka.displayPageEditor = function (pageName, oldRevision, defaultType, source) ) ) ), + trSummary, trContent, $.TR({}, $.TH({}), - $.TD({}, btnPreview, btnSubmit, btnDelete) + $.TD({}, btnPreview, btnSubmit, btnDelete, btnCancel) ) ) ); @@ -236,6 +298,8 @@ Rakka.displayPageEditor = function (pageName, oldRevision, defaultType, source) } $area.append(pageEditor); + + Rakka.isDirty = false; }; Rakka.previewRakkaPage = function (pageName, source) { @@ -296,9 +360,11 @@ Rakka.showPreview = function (doc) { Rakka.$previewArea.append(child.cloneNode(true)); } } while (child = child.nextSibling); + + Rakka.scrollToTopLeft(); }; -Rakka.submitTextPage = function (pageName, oldRevision, givenPageName, mimeType, text) { +Rakka.submitTextPage = function (pageName, oldRevision, givenPageName, mimeType, summary, text) { var doc = document.implementation.createDocument( "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null); @@ -320,6 +386,13 @@ Rakka.submitTextPage = function (pageName, oldRevision, givenPageName, mimeType, page.setAttribute("type", mimeType); + if (summary != null) { + var s = doc.createElement("summary"); + s.appendChild( + doc.createTextNode(summary)); + page.appendChild(s); + } + var textData = doc.createElement("textData"); textData.appendChild( doc.createTextNode(text)); @@ -347,7 +420,7 @@ Rakka.submitTextPage = function (pageName, oldRevision, givenPageName, mimeType, }); }; -Rakka.submitBinaryPage = function (pageName, oldRevision, givenPageName, path) { +Rakka.submitBinaryPage = function (pageName, oldRevision, givenPageName, summary, path) { var doc = document.implementation.createDocument( "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null); @@ -369,6 +442,13 @@ Rakka.submitBinaryPage = function (pageName, oldRevision, givenPageName, path) { page.setAttribute("type", ""); + if (summary != null) { + var s = doc.createElement("summary"); + s.appendChild( + doc.createTextNode(summary)); + page.appendChild(s); + } + var bin = Rakka.loadLocalBinaryFile(path); var b64 = Rakka.encodeBase64(bin); @@ -440,4 +520,21 @@ Rakka.submitRedirection = function (pageName, oldRevision, givenPageName, destin $area.text("Error: " + req.status + " " + req.statusText); } }); -}; \ No newline at end of file +}; + +Rakka.deletePage = function (pageName) { + var url = Rakka.baseURI + encodeURI(pageName); + $.ajax({ + type : "DELETE", + url : url, + success : function () { + window.location.replace(url); + }, + error : function (req) { + Rakka.hideWaitingMessage(); + + var $area = Rakka.switchScreen(); + $area.text("Error: " + req.status + " " + req.statusText); + } + }); +};