Rakka.$previewHeader = null;
Rakka.$previewArea = null;
+Rakka.isDirty = null;
+
Rakka.editPage = function (pageName) {
var $area = Rakka.switchScreen();
= $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);
};
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();
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({}),
oldRevision,
fldPageName.value,
"text/x-rakka",
+ fldSummary.value,
fldRakkaSource.value);
}
else if (btnTypeCSS.checked) {
oldRevision,
fldPageName.value,
"text/css",
+ fldSummary.value,
fldCSSSource.value);
}
else if (btnTypeBinary.checked) {
pageName,
oldRevision,
fldPageName.value,
+ fldSummary.value,
fldUploadFile.value);
}
else if (btnTypeRedirect.checked) {
}
});
+ 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();
)
)
),
+ trSummary,
trContent,
$.TR({},
$.TH({}),
- $.TD({}, btnPreview, btnSubmit, btnDelete)
+ $.TD({}, btnPreview, btnSubmit, btnDelete, btnCancel)
)
)
);
}
$area.append(pageEditor);
+
+ Rakka.isDirty = false;
};
Rakka.previewRakkaPage = function (pageName, source) {
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);
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));
});
};
-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);
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);