+(function () {
+
+ var $previewHeader = null;
+ var $previewArea = null;
+
+ Rakka.editPage = function (pageName) {
+ var $area = Rakka.switchScreen();
+
+ Rakka.displayWaitingMessage("Loading... please wait.");
+
+ // XML 版のページを取得する。
+ $.ajax({
+ url : Rakka.baseURI + pageName + ".xml",
+ success: function (pageXml) {
+ Rakka.hideWaitingMessage();
+
+ if (pageXml.documentElement.tagName == "page") {
+ 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"
+ ;
+ var lang = $page.attr("lang");
+ var isLocked = $page.attr("isLocked") == "yes";
+ var otherLangs = (function () {
+ var obj = {};
+ $page.find("otherLang > link").each(function () {
+ obj[this.getAttribute("lang")] = this.getAttribute("page");
+ });
+ return obj;
+ })();
+ var source
+ = $page.attr("redirect") != null ? $page.attr("redirect")
+ : $page.find("textData").text()
+ ;
+ var summary = $page.find("summary").text();
+
+ displayPageEditor(pageName, oldRevision, defaultType, lang, isLocked, otherLangs, source, summary);
+ }
+ else {
+ displayPageEditor(pageName, null, "rakka", null, false, {}, null, "");
+ }
+ },
+ error : function (req) {
+ Rakka.hideWaitingMessage();
+
+ if (req.status == 404) {
+ displayPageEditor(pageName, null, "rakka", null, false, {}, null, "");
+ }
+ else {
+ $area.text("Error: " + req.status + " " + req.statusText);
+ }
+ }
+ });
+ };
+
+ Rakka.newPage = function () {
+ displayPageEditor("", null, "rakka", null, false, {}, null, "");
+ };
+
+ var displayPageEditor = function (pageName, oldRevision, defaultType, lang, isLocked, otherLangs, source, summary) {
+ var $area = Rakka.switchScreen();
+
+ $previewHeader = $( $.H1({}, "Preview") );
+ $area.append($previewHeader);
+ $previewHeader.hide();
+
+ $previewArea = $( $.DIV({className: "preview"}) );
+ $area.append($previewArea);
+ $previewArea.hide();
+
+ $area.append($.H1({}, pageName == "" ? "Create page" : "Edit page"));
+
+ var isDirty = null;
+ var makeDirty = function () {
+ isDirty = true;
+ };
+
+ var fldPageName
+ = $.INPUT({type : "text", value: pageName});
+
+ $(fldPageName).change(makeDirty);
+
+ var chkIsLocked
+ = $.INPUT({type : "checkbox",
+ checked : (isLocked ? "checked" : "")});
+
+ $(chkIsLocked).change(makeDirty);
+
+ var trIsLocked
+ = $.TR({},
+ $.TH({}, "Page lock"),
+ $.TD({},
+ $.LABEL({},
+ chkIsLocked,
+ "Disallow anonymous users to edit or delete this page")));
+
+ 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 selPageLang
+ = $.SELECT({},
+ $.OPTION({value: ""}, "(unspecified)"),
+ (function () {
+ var options = [];
+
+ $.each(Rakka.getSystemConfig().languages, function (tag, name) {
+ options.push(
+ $.OPTION({value: tag}, name));
+ });
+
+ return options;
+ })());
+
+ $(selPageLang).change(makeDirty);
+
+ if (lang == null || lang == "") {
+ $(selPageLang).val($("html").attr("xml:lang"));
+ }
+ else {
+ $(selPageLang).val(lang);
+ }
+
+ var trPageLang
+ = $.TR({},
+ $.TH({}, "Page language"),
+ $.TD({}, selPageLang));
+
+ var trOtherLangs = (function () {
+ var options = [];
+
+ $.each(Rakka.getSystemConfig().languages, function (tag, name) {
+ options.push(
+ $.OPTION({value: tag}, name));
+ });
+
+ var selLang = $.SELECT({}, options);
+ var fldLink = $.INPUT({type: "text", className: "smallField"});
+
+ $(selLang).change(function () {
+ var pageName = otherLangs[$(selLang).val()];
+ $(fldLink).val(
+ pageName == null ? "" : pageName
+ );
+ }).trigger("change");
+
+ var onLinkChanged = function () {
+ isDirty = true;
+
+ var lang = $(selLang).val();
+ var pageName = $(this).val();
+
+ if (pageName == "") {
+ delete otherLangs[lang];
+ }
+ else {
+ otherLangs[lang] = pageName;
+ }
+ };
+ $(fldLink).change(onLinkChanged).keyup(onLinkChanged);
+
+ return $.TR({},
+ $.TH({}, "Language links"),
+ $.TD({}, selLang, fldLink));
+ })();
+
+ var fldSummary
+ = $.TEXTAREA({className: "summary"}, summary);
+
+ $(fldSummary).change(makeDirty);
+
+ var trSummary
+ = $.TR({},
+ $.TH({}, "Summary"),
+ $.TD({}, fldSummary));
+
+ var fldRakkaSource
+ = $.TEXTAREA({className: "source"},
+ (defaultType == "rakka" && source != null ? source : ""));
+
+ $(fldRakkaSource).change(makeDirty);
+
+ var fldCSSSource
+ = $.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({}),
+ $.TD({})
+ );
+
+ var btnPreview
+ = $.INPUT({type: "button", value: "Preview page"});
+
+ $(btnPreview).click(function () {
+ if (btnTypeRakka.checked) {
+ previewRakkaPage(
+ fldPageName.value, fldRakkaSource.value);
+ }
+ else if (btnTypeBinary.checked) {
+ if (fldUploadFile.value != "") {
+ previewBinaryPage(
+ fldPageName.value, fldUploadFile.value);
+ }
+ }
+ });
+
+ var btnSubmit
+ = $.INPUT({type: "button", value: "Submit page"});
+
+ $(btnSubmit).click(function () {
+ if (btnTypeRakka.checked) {
+ submitTextPage(
+ pageName,
+ oldRevision,
+ fldPageName.value,
+ chkIsLocked.checked,
+ "text/x-rakka",
+ $(selPageLang).val(),
+ otherLangs,
+ fldSummary.value,
+ fldRakkaSource.value);
+ }
+ else if (btnTypeCSS.checked) {
+ submitTextPage(
+ pageName,
+ oldRevision,
+ fldPageName.value,
+ chkIsLocked.checked,
+ "text/css",
+ $(selPageLang).val(),
+ otherLangs,
+ fldSummary.value,
+ fldCSSSource.value);
+ }
+ else if (btnTypeBinary.checked) {
+ if (fldUploadFile.value != "") {
+ submitBinaryPage(
+ pageName,
+ oldRevision,
+ fldPageName.value,
+ chkIsLocked.checked,
+ $(selPageLang).val(),
+ otherLangs,
+ fldSummary.value,
+ fldUploadFile.value);
+ }
+ }
+ else if (btnTypeRedirect.checked) {
+ submitRedirection(
+ pageName,
+ oldRevision,
+ fldPageName.value,
+ chkIsLocked.checked,
+ fldRedirect.value);
+ }
+ });
+
+ 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);
+ }
+ });
+
+ 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();
+ }