Edit style: warn before losing changes in code areas
This commit is contained in:
parent
b4173d68f6
commit
0fe98e374c
33
edit.js
33
edit.js
|
@ -25,6 +25,8 @@ function setupCodeMirror(textarea) {
|
||||||
lint: CodeMirror.lint.css,
|
lint: CodeMirror.lint.css,
|
||||||
smartIndent: (typeof localStorage["smart-indent"] == "undefined") || localStorage["smart-indent"] == "true"
|
smartIndent: (typeof localStorage["smart-indent"] == "undefined") || localStorage["smart-indent"] == "true"
|
||||||
});
|
});
|
||||||
|
cm.lastChange = cm.changeGeneration();
|
||||||
|
cm.on("change", indicateCodeChange);
|
||||||
editors.push(cm);
|
editors.push(cm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,9 +35,29 @@ function makeDirty() {
|
||||||
}
|
}
|
||||||
|
|
||||||
window.onbeforeunload = function() {
|
window.onbeforeunload = function() {
|
||||||
return dirty ? t('styleChangesNotSaved') : null;
|
return dirty || isCodeDirty() ? t('styleChangesNotSaved') : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function isCodeDirty() {
|
||||||
|
for(var i=0; i < editors.length; i++) {
|
||||||
|
if (!editors[i].isClean(editors[i].lastChange)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function indicateCodeChange(cm) {
|
||||||
|
var clean = cm.isClean(cm.lastChange);
|
||||||
|
if (clean != cm.lastClean) {
|
||||||
|
cm.lastClean = clean;
|
||||||
|
var label = cm.getTextArea().previousElementSibling;
|
||||||
|
if (label) {
|
||||||
|
label.textContent = label.textContent.replace(/\*?$/, clean ? '' : '*');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
function addAppliesTo(list, name, value) {
|
function addAppliesTo(list, name, value) {
|
||||||
var showingEverything = list.querySelector(".applies-to-everything") != null;
|
var showingEverything = list.querySelector(".applies-to-everything") != null;
|
||||||
// blow away "Everything" if it's there
|
// blow away "Everything" if it's there
|
||||||
|
@ -204,7 +226,7 @@ function validate() {
|
||||||
|
|
||||||
function save() {
|
function save() {
|
||||||
// save the contents of the CodeMirror editors back into the textareas
|
// save the contents of the CodeMirror editors back into the textareas
|
||||||
for(var i=0; i < editors.length; i++) {
|
for (var i=0; i < editors.length; i++) {
|
||||||
editors[i].save();
|
editors[i].save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -269,6 +291,13 @@ function getMeta(e) {
|
||||||
|
|
||||||
function saveComplete(style) {
|
function saveComplete(style) {
|
||||||
dirty = false;
|
dirty = false;
|
||||||
|
|
||||||
|
for(var i=0; i < editors.length; i++) {
|
||||||
|
var cm = editors[i];
|
||||||
|
cm.lastChange = cm.changeGeneration(true);
|
||||||
|
indicateCodeChange(cm);
|
||||||
|
}
|
||||||
|
|
||||||
// Go from new style URL to edit style URL
|
// Go from new style URL to edit style URL
|
||||||
if (location.href.indexOf("id=") == -1) {
|
if (location.href.indexOf("id=") == -1) {
|
||||||
// give the code above a moment before we kill the page
|
// give the code above a moment before we kill the page
|
||||||
|
|
Loading…
Reference in New Issue
Block a user