var $previewHeader = null;
var $previewArea = null;
- var isDirty = null;
-
- var rePageName = /^[^ a-z.|#\[\]][^ .|#\[\]]*$/;
-
Rakka.editPage = function (pageName) {
var $area = Rakka.switchScreen();
var $page = $(pageXml).find("page");
var oldRevision = $page.attr("revision");
var defaultType
- = $page.attr("isBinary") == "yes" ? "binary"
- : $page.attr("type") == "text/x-rakka" ? "rakka"
- : $page.attr("type") == "text/css" ? "css"
- : $page.attr("redirect") != null ? "redirect"
- : "unknown"
+ = $page.attr("isBinary") == "yes" ? "binary"
+ : $page.attr("type") == "text/x-rakka" ? "rakka"
+ : $page.attr("type") == "text/css" ? "css"
+ : $page.attr("type") == "text/javascript" ? "js"
+ : $page.attr("redirect") != null ? "redirect"
+ : "unknown"
;
var lang = $page.attr("lang");
var isLocked = $page.attr("isLocked") == "yes";
return obj;
})();
var source
- = $page.attr("redirect") != null ? $page.attr("redirect")
- : $page.find("textData").text()
+ = $page.attr("redirect") != null ? $page.attr("redirect")
+ : $page.attr("isBinary") == "yes" ? Rakka.decodeBase64($page.find("binaryData").text())
+ : $page.find("textData").text()
;
var summary = $page.find("summary").text();
$area.append($.H1({}, pageName == "" ? "Create page" : "Edit page"));
+ var isDirty = null;
var makeDirty = function () {
isDirty = true;
};
$(btnTypeCSS).change(makeDirty);
+ var btnTypeJS
+ = $.INPUT({type : "radio",
+ name : "type",
+ checked: (defaultType == "js" ? "checked" : "")});
+ $(btnTypeJS).change(makeDirty);
+
var btnTypeBinary
= $.INPUT({type : "radio",
name : "type",
$(fldCSSSource).change(makeDirty);
- var fldUploadFile
- = $.INPUT({type: "file"});
+ var fldJSSource
+ = $.TEXTAREA({className: "source"},
+ (defaultType == "js" && source != null ? source : ""));
- $(fldUploadFile).change(makeDirty);
+ $(fldJSSource).change(makeDirty);
+
+ var uploadFileBin
+ = (defaultType == "binary" && source != null ? source : "");
+ var fldUploadFile
+ = $.TEXTAREA({className: "hexDump", disabled: true}, Rakka.hexDump(uploadFileBin, 128));
+ var btnSelectFile
+ = $.INPUT({type: "button", value: "Select file..."});
+
+ $(btnSelectFile).click(function () {
+ var file = Rakka.selectFile("Select a binary file to upload", "open");
+ if (file != null) {
+ uploadFileBin = Rakka.loadLocalBinaryFile(file);
+ fldUploadFile.value = Rakka.hexDump(uploadFileBin, 128);
+ makeDirty();
+ }
+ });
var fldRedirect
= $.INPUT({type: "text", value: (defaultType == "redirect" ? source : "")});
fldPageName.value, fldRakkaSource.value);
}
else if (btnTypeBinary.checked) {
- if (fldUploadFile.value != "") {
+ if (uploadFileBin != "") {
previewBinaryPage(
- fldPageName.value, fldUploadFile.value);
+ fldPageName.value, uploadFileBin);
}
}
});
fldSummary.value,
fldCSSSource.value);
}
+ else if (btnTypeJS.checked) {
+ submitTextPage(
+ pageName,
+ oldRevision,
+ fldPageName.value,
+ chkIsLocked.checked,
+ "text/javascript",
+ $(selPageLang).val(),
+ otherLangs,
+ fldSummary.value,
+ fldJSSource.value);
+ }
else if (btnTypeBinary.checked) {
if (fldUploadFile.value != "") {
submitBinaryPage(
$(selPageLang).val(),
otherLangs,
fldSummary.value,
- fldUploadFile.value);
+ uploadFileBin);
}
}
else if (btnTypeRedirect.checked) {
}
});
- var btnCancel
- = $.INPUT({type: "button", value: "Cancel editing"});
-
- $(btnCancel).click(function () {
- if (isDirty) {
- if (window.confirm("Do you really want to discard changes?")) {
- Rakka.restoreScreen();
- }
- }
- else {
- Rakka.restoreScreen();
- }
- });
-
var updateTRContent = function () {
if (btnTypeRakka.checked) {
$(trPageLang).show();
$(trContent).find("td").empty().append(fldCSSSource);
$(btnPreview).hide();
}
+ else if (btnTypeJS.checked) {
+ $(trPageLang).show();
+ $(trOtherLangs).show();
+ $(trSummary).show();
+ $(trContent).find("th").text("JavaScript source");
+ $(trContent).find("td").empty().append(fldJSSource);
+ $(btnPreview).hide();
+ }
else if (btnTypeBinary.checked) {
$(trPageLang).show();
$(trOtherLangs).show();
$(trSummary).show();
$(trContent).find("th").text("File");
- $(trContent).find("td").empty().append(fldUploadFile);
+ $(trContent).find("td").empty().append(fldUploadFile).append(btnSelectFile);
$(btnPreview).show();
}
else if (btnTypeRedirect.checked) {
};
$(btnTypeRakka ).change(updateTRContent);
$(btnTypeCSS ).change(updateTRContent);
+ $(btnTypeJS ).change(updateTRContent);
$(btnTypeBinary ).change(updateTRContent);
$(btnTypeRedirect).change(updateTRContent);
updateTRContent();
"Style sheet"
)
),
+ $.LI({},
+ $.LABEL({},
+ btnTypeJS,
+ "JavaScript"
+ )
+ ),
$.LI({},
$.LABEL({},
btnTypeBinary,
trContent,
$.TR({},
$.TH({}),
- $.TD({}, btnPreview, btnSubmit, btnDelete, btnCancel)
+ $.TD({}, btnPreview, btnSubmit, btnDelete)
)
)
);
var validate = function () {
var isValid = (function () {
- if (fldPageName.value.match(rePageName) == null) {
+ if (fldPageName.value.match(Rakka.rePageName) == null) {
return false;
}
if (btnTypeRedirect.checked) {
- if (fldRedirect.value.match(rePageName) == null) {
+ if (fldRedirect.value.match(Rakka.rePageName) == null) {
return false;
}
}
else {
for (var tag in otherLangs) {
- if (otherLangs[tag].match(rePageName) == null) {
+ if (otherLangs[tag].match(Rakka.rePageName) == null) {
return false;
}
}
if (btnTypeBinary.checked) {
- if (fldUploadFile.value == "") {
+ if (uploadFileBin == "") {
return false;
}
}
$(fldPageName)
.add(btnTypeRakka)
.add(btnTypeCSS)
+ .add(btnTypeJS)
.add(btnTypeBinary)
.add(btnTypeRedirect)
.add($(trOtherLangs).find("input"))
.add(fldRedirect)
.change(validate)
.keyup(validate);
+ $(btnSelectFile).click(validate);
validate();
if (oldRevision == null || oldRevision == 0) {
if (!Rakka.isLoggedIn() || Rakka.isGlobalLocked) {
$(trIsLocked).hide();
}
-
- isDirty = false;
};
var previewRakkaPage = function (pageName, source) {
});
};
- var previewBinaryPage = function (pageName, path) {
+ var previewBinaryPage = function (pageName, data) {
Rakka.displayWaitingMessage("Loading... please wait.");
/* Firefox でバイナリを送らうとすると 0x00 の位置で切れてしまふ。*/
- var bin = Rakka.loadLocalBinaryFile(path);
var url = Rakka.baseURI + "render/" + encodeURI(pageName);
$.ajax({
type : "POST",
url : url,
contentType: "application/x-rakka-base64-stream",
- data : Rakka.encodeBase64(bin),
+ data : Rakka.encodeBase64(data),
processData: false,
success : function (resultDoc) {
Rakka.hideWaitingMessage();
});
};
- var submitBinaryPage = function (pageName, oldRevision, givenPageName, isLocked, lang, otherLangs, summary, path) {
+ var submitBinaryPage = function (pageName, oldRevision, givenPageName, isLocked, lang, otherLangs, summary, data) {
var NS = "http://cielonegro.org/schema/Rakka/Page/1.0";
var doc = document.implementation.createDocument(NS, "page", null);
var page = doc.documentElement;
}
page.appendChild(oLang);
- var bin = Rakka.loadLocalBinaryFile(path);
- var b64 = Rakka.encodeBase64(bin);
-
+ var b64 = Rakka.encodeBase64(data);
var binaryData = doc.createElementNS(NS, "binaryData");
binaryData.appendChild(
doc.createTextNode(b64));