Add autosave/restore for subpages too
This commit is contained in:
@@ -17,6 +17,8 @@
|
|||||||
NoDefinitionsFor: []
|
NoDefinitionsFor: []
|
||||||
};
|
};
|
||||||
var ActiveOptions = {};
|
var ActiveOptions = {};
|
||||||
|
var autoSaveTimer = null;
|
||||||
|
var storageKey = 'gollum_autorecover_' + window.location;
|
||||||
|
|
||||||
function isRTL(s){
|
function isRTL(s){
|
||||||
var ltrChars = 'A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02B8\u0300-\u0590\u0800-\u1FFF'+'\u2C00-\uFB1C\uFDFE-\uFE6F\uFEFD-\uFFFF',
|
var ltrChars = 'A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02B8\u0300-\u0590\u0800-\u1FFF'+'\u2C00-\uFB1C\uFDFE-\uFE6F\uFEFD-\uFFFF',
|
||||||
@@ -32,6 +34,27 @@
|
|||||||
window.ace_editor.renderer.updateFull();
|
window.ace_editor.renderer.updateFull();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function autoSaveHandler() {
|
||||||
|
// Autosave
|
||||||
|
if (autoSaveTimer) {
|
||||||
|
// Reset the timer because we just changed the text
|
||||||
|
clearTimeout(autoSaveTimer);
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#gollum-saved-msg').text('Saving...');
|
||||||
|
|
||||||
|
// Wait 2 seconds, then actualy save the text to local storage
|
||||||
|
autoSaveTimer = setTimeout(function() {
|
||||||
|
localStorage.setItem(storageKey, window.ace_editor.getSession().getValue());
|
||||||
|
// Save any subpage editor text that might exist
|
||||||
|
$('#gollum-editor-header, #gollum-editor-footer, #gollum-editor-sidebar').each(function(_, el) {
|
||||||
|
var spStorageKey = storageKey + el.id.replace('gollum-editor-', '_');
|
||||||
|
localStorage.setItem(spStorageKey, el.value);
|
||||||
|
});
|
||||||
|
$('#gollum-saved-msg').text('Saved recovery text');
|
||||||
|
}, 2000);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* $.GollumEditor
|
* $.GollumEditor
|
||||||
*
|
*
|
||||||
@@ -51,20 +74,24 @@
|
|||||||
}).insertAfter(textarea);
|
}).insertAfter(textarea);
|
||||||
textarea.css('display', 'none');
|
textarea.css('display', 'none');
|
||||||
|
|
||||||
var autoSaveTimer = null;
|
|
||||||
|
|
||||||
// NOTE: This requires the page to have only one 'gollum-editor-body'.
|
// NOTE: This requires the page to have only one 'gollum-editor-body'.
|
||||||
var editor = ace.edit(editDiv[0], {rtlText: true});
|
var editor = ace.edit(editDiv[0], {rtlText: true});
|
||||||
window.ace_editor = editor;
|
window.ace_editor = editor;
|
||||||
|
|
||||||
// Check to see if we have any autosaved text and show a message to
|
// Check to see if we have any autosaved text and show a message to
|
||||||
// restore it if present.
|
// restore it if present.
|
||||||
var storageKey = 'gollum_autorecover_' + window.location;
|
|
||||||
var savedText = localStorage.getItem(storageKey);
|
var savedText = localStorage.getItem(storageKey);
|
||||||
|
|
||||||
if (savedText) {
|
if (savedText) {
|
||||||
$('#gollum-autorecover-button').click(function(e) {
|
$('#gollum-autorecover-button').click(function(e) {
|
||||||
editor.getSession().setValue(savedText);
|
editor.getSession().setValue(savedText);
|
||||||
|
// Restore subpage editor values too, if they exist
|
||||||
|
['header', 'footer', 'sidebar'].forEach(function(i) {
|
||||||
|
var sbSavedText = localStorage.getItem(storageKey + '_' + i);
|
||||||
|
if (sbSavedText) {
|
||||||
|
$('#gollum-editor-' + i).val(sbSavedText);
|
||||||
|
}
|
||||||
|
});
|
||||||
$('#gollum-autorecover-msg')[0].hidden = true;
|
$('#gollum-autorecover-msg')[0].hidden = true;
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
});
|
});
|
||||||
@@ -80,22 +107,13 @@
|
|||||||
|
|
||||||
editor.getSession().on('change', function(){
|
editor.getSession().on('change', function(){
|
||||||
textarea.val(editor.getSession().getValue());
|
textarea.val(editor.getSession().getValue());
|
||||||
|
autoSaveHandler();
|
||||||
// Autosave
|
|
||||||
if (autoSaveTimer) {
|
|
||||||
// Reset the timer because we just changed the text
|
|
||||||
clearTimeout(autoSaveTimer);
|
|
||||||
}
|
|
||||||
|
|
||||||
$('#gollum-saved-msg').text('Saving...');
|
|
||||||
|
|
||||||
// Wait 2 seconds, then actualy save the text to local storage
|
|
||||||
autoSaveTimer = setTimeout(function() {
|
|
||||||
localStorage.setItem(storageKey, editor.getSession().getValue());
|
|
||||||
$('#gollum-saved-msg').text('Saved recovery text');
|
|
||||||
}, 2000);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Autosave for the header, footer and sidebar
|
||||||
|
$('#gollum-editor-header, #gollum-editor-footer, #gollum-editor-sidebar')
|
||||||
|
.on('change keyup paste', autoSaveHandler);
|
||||||
|
|
||||||
if (isRTL(editor.getSession().getLine(0))) {
|
if (isRTL(editor.getSession().getLine(0))) {
|
||||||
switchRtl(true);
|
switchRtl(true);
|
||||||
}
|
}
|
||||||
@@ -148,6 +166,10 @@
|
|||||||
$("#gollum-editor-submit, #gollum-editor-cancel").click(function() {
|
$("#gollum-editor-submit, #gollum-editor-cancel").click(function() {
|
||||||
var storageKey = 'gollum_autorecover_' + window.location;
|
var storageKey = 'gollum_autorecover_' + window.location;
|
||||||
localStorage.removeItem(storageKey);
|
localStorage.removeItem(storageKey);
|
||||||
|
// Clear subpage editor values too, if they exist
|
||||||
|
['header', 'footer', 'sidebar'].forEach(function(i) {
|
||||||
|
localStorage.removeItem(storageKey + '_' + i);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
debug('GollumEditor loading');
|
debug('GollumEditor loading');
|
||||||
|
|||||||
Reference in New Issue
Block a user