X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=js%2FeditPage.js;h=5d782de880484ded293528371a31f042cb25d3a9;hb=5ab256be8bbbb1f4a012b41ac1cc3f9b29aa7d57;hp=e390a1949ec67a7cf8c7e2b8f8b698887409f82e;hpb=f1016753ef45a4c25745ccb6e81e5acbc085cc42;p=Rakka.git diff --git a/js/editPage.js b/js/editPage.js index e390a19..5d782de 100644 --- a/js/editPage.js +++ b/js/editPage.js @@ -5,11 +5,13 @@ var isDirty = null; + var rePageName = /^[^ a-z.|#\[\]][^ .|#\[\]]*$/; + Rakka.editPage = function (pageName) { var $area = Rakka.switchScreen(); Rakka.displayWaitingMessage("Loading... please wait."); - + // XML 版のページを取得する。 $.ajax({ url : Rakka.baseURI + pageName + ".xml", @@ -40,7 +42,7 @@ : $page.find("textData").text() ; var summary = $page.find("summary").text(); - + displayPageEditor(pageName, oldRevision, defaultType, lang, isLocked, otherLangs, source, summary); } else { @@ -49,7 +51,7 @@ }, error : function (req) { Rakka.hideWaitingMessage(); - + if (req.status == 404) { displayPageEditor(pageName, null, "rakka", null, false, {}, null, ""); } @@ -80,7 +82,7 @@ var makeDirty = function () { isDirty = true; }; - + var fldPageName = $.INPUT({type : "text", value: pageName}); @@ -99,7 +101,7 @@ $.LABEL({}, chkIsLocked, "Disallow anonymous users to edit or delete this page"))); - + var btnTypeRakka = $.INPUT({type : "radio", name : "type", @@ -133,7 +135,7 @@ $.OPTION({value: ""}, "(unspecified)"), (function () { var options = []; - + $.each(Rakka.getSystemConfig().languages, function (tag, name) { options.push( $.OPTION({value: tag}, name)); @@ -179,7 +181,7 @@ var lang = $(selLang).val(); var pageName = $(this).val(); - + if (pageName == "") { delete otherLangs[lang]; } @@ -227,28 +229,30 @@ $(fldRedirect).change(makeDirty); var trContent - = $.TR({}, + = $.TR({}, $.TH({}), $.TD({}) ); var btnPreview = $.INPUT({type: "button", value: "Preview page"}); - + $(btnPreview).click(function () { if (btnTypeRakka.checked) { previewRakkaPage( fldPageName.value, fldRakkaSource.value); } else if (btnTypeBinary.checked) { - previewBinaryPage( - fldPageName.value, fldUploadFile.value); + if (fldUploadFile.value != "") { + previewBinaryPage( + fldPageName.value, fldUploadFile.value); + } } }); var btnSubmit = $.INPUT({type: "button", value: "Submit page"}); - + $(btnSubmit).click(function () { if (btnTypeRakka.checked) { submitTextPage( @@ -275,15 +279,17 @@ fldCSSSource.value); } else if (btnTypeBinary.checked) { - submitBinaryPage( - pageName, - oldRevision, - fldPageName.value, - chkIsLocked.checked, - $(selPageLang).val(), - otherLangs, - fldSummary.value, - fldUploadFile.value); + if (fldUploadFile.value != "") { + submitBinaryPage( + pageName, + oldRevision, + fldPageName.value, + chkIsLocked.checked, + $(selPageLang).val(), + otherLangs, + fldSummary.value, + fldUploadFile.value); + } } else if (btnTypeRedirect.checked) { submitRedirection( @@ -297,7 +303,7 @@ var btnDelete = $.INPUT({type: "button", value: "Delete this page"}); - + $(btnDelete).click(function () { if (window.confirm("Do you really want to delete this page?")) { deletePage(pageName); @@ -408,6 +414,48 @@ ) ); + var validate = function () { + var isValid = (function () { + if (fldPageName.value.match(rePageName) == null) { + return false; + } + + if (btnTypeRedirect.checked) { + if (fldRedirect.value.match(rePageName) == null) { + return false; + } + } + else { + for (var tag in otherLangs) { + if (otherLangs[tag].match(rePageName) == null) { + return false; + } + } + + if (btnTypeBinary.checked) { + if (fldUploadFile.value == "") { + return false; + } + } + } + + return true; + })(); + + $(btnSubmit).attr({disabled: (isValid ? "" : "disabled")}); + }; + $(fldPageName) + .add(btnTypeRakka) + .add(btnTypeCSS) + .add(btnTypeBinary) + .add(btnTypeRedirect) + .add($(trOtherLangs).find("input")) + .add(fldUploadFile) + .add(fldRedirect) + .change(validate) + .keyup(validate); + validate(); + if (oldRevision == null || oldRevision == 0) { // 削除不可 $(btnDelete).hide(); @@ -424,7 +472,7 @@ var previewRakkaPage = function (pageName, source) { Rakka.displayWaitingMessage("Loading... please wait."); - + var url = Rakka.baseURI + "render/" + encodeURI(pageName); $.ajax({ type : "POST", @@ -468,10 +516,10 @@ var showPreview = function (doc) { $previewArea.empty(); - + $previewHeader.show(); $previewArea.show(); - + var root = doc.documentElement; var child = root.firstChild; do { @@ -484,19 +532,19 @@ Rakka.scrollToTopLeft(); }; - var submitTextPage = function (pageName, oldRevision, givenPageName, isLocked, mimeType, lang, otherLangs, summary, text) { - var doc = document.implementation.createDocument( - "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null); - - var page = doc.documentElement; + var submitTextPage + = function (pageName, oldRevision, givenPageName, isLocked, mimeType, lang, otherLangs, summary, text) { + var NS = "http://cielonegro.org/schema/Rakka/Page/1.0"; + var doc = document.implementation.createDocument(NS, "page", null); + var page = doc.documentElement; if (oldRevision != null) { // ページ書換時 - var updateInfo = doc.createElement("updateInfo"); + var updateInfo = doc.createElementNS(NS, "updateInfo"); updateInfo.setAttribute("oldRevision", oldRevision); if (pageName != givenPageName) { - var move = doc.createElement("move"); + var move = doc.createElementNS(NS, "move"); move.setAttribute("from", pageName); updateInfo.appendChild(move); } @@ -512,22 +560,22 @@ } if (summary != null && summary != "") { - var s = doc.createElement("summary"); + var s = doc.createElementNS(NS, "summary"); s.appendChild( doc.createTextNode(summary)); page.appendChild(s); } - var oLang = doc.createElement("otherLang"); + var oLang = doc.createElementNS(NS, "otherLang"); for (var tag in otherLangs) { - var link = doc.createElement("link"); + var link = doc.createElementNS(NS, "link"); link.setAttribute("lang", tag); link.setAttribute("page", otherLangs[tag]); oLang.appendChild(link); } page.appendChild(oLang); - var textData = doc.createElement("textData"); + var textData = doc.createElementNS(NS, "textData"); textData.appendChild( doc.createTextNode(text)); @@ -550,7 +598,7 @@ }, error : function (req) { Rakka.hideWaitingMessage(); - + var $area = Rakka.switchScreen(); $area.text("Error: " + req.status + " " + req.statusText); } @@ -558,18 +606,17 @@ }; var submitBinaryPage = function (pageName, oldRevision, givenPageName, isLocked, lang, otherLangs, summary, path) { - var doc = document.implementation.createDocument( - "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null); - + var NS = "http://cielonegro.org/schema/Rakka/Page/1.0"; + var doc = document.implementation.createDocument(NS, "page", null); var page = doc.documentElement; if (oldRevision != null) { // ページ書換時 - var updateInfo = doc.createElement("updateInfo"); + var updateInfo = doc.createElementNS(NS, "updateInfo"); updateInfo.setAttribute("oldRevision", oldRevision); if (pageName != givenPageName) { - var move = doc.createElement("move"); + var move = doc.createElementNS(NS, "move"); move.setAttribute("from", pageName); updateInfo.appendChild(move); } @@ -585,15 +632,15 @@ } if (summary != null) { - var s = doc.createElement("summary"); + var s = doc.createElementNS(NS, "summary"); s.appendChild( doc.createTextNode(summary)); page.appendChild(s); } - var oLang = doc.createElement("otherLang"); + var oLang = doc.createElementNS(NS, "otherLang"); for (var tag in otherLangs) { - var link = doc.createElement("link"); + var link = doc.createElementNS(NS, "link"); link.setAttribute("lang", tag); link.setAttribute("page", otherLangs[tag]); oLang.appendChild(link); @@ -603,7 +650,7 @@ var bin = Rakka.loadLocalBinaryFile(path); var b64 = Rakka.encodeBase64(bin); - var binaryData = doc.createElement("binaryData"); + var binaryData = doc.createElementNS(NS, "binaryData"); binaryData.appendChild( doc.createTextNode(b64)); @@ -626,7 +673,7 @@ }, error : function (req) { Rakka.hideWaitingMessage(); - + var $area = Rakka.switchScreen(); $area.text("Error: " + req.status + " " + req.statusText); } @@ -634,18 +681,17 @@ }; var submitRedirection = function (pageName, oldRevision, givenPageName, isLocked, destination) { - var doc = document.implementation.createDocument( - "http://cielonegro.org/schema/Rakka/Page/1.0", "page", null); - + var NS = "http://cielonegro.org/schema/Rakka/Page/1.0"; + var doc = document.implementation.createDocument(NS, "page", null); var page = doc.documentElement; if (oldRevision != null) { // ページ書換時 - var updateInfo = doc.createElement("updateInfo"); + var updateInfo = doc.createElementNS(NS, "updateInfo"); updateInfo.setAttribute("oldRevision", oldRevision); if (pageName != givenPageName) { - var move = doc.createElement("move"); + var move = doc.createElementNS(NS, "move"); move.setAttribute("from", pageName); updateInfo.appendChild(move); } @@ -673,7 +719,7 @@ }, error : function (req) { Rakka.hideWaitingMessage(); - + var $area = Rakka.switchScreen(); $area.text("Error: " + req.status + " " + req.statusText); } @@ -693,7 +739,7 @@ }, error : function (req) { Rakka.hideWaitingMessage(); - + var $area = Rakka.switchScreen(); $area.text("Error: " + req.status + " " + req.statusText); }