3
0
Fork 0
This repository has been archived on 2024-11-14. You can view files and clone it, but cannot push or open issues or pull requests.
ThemeParkPlus-Panel/public/assets/development/plugins/autosave.js

106 lines
2.4 KiB
JavaScript
Raw Normal View History

2021-06-27 19:01:43 +00:00
/**
* SCEditor AutoSave Plugin
* http://www.sceditor.com/
*
* Copyright (C) 2017, Sam Clarke (samclarke.com)
*
* SCEditor is licensed under the MIT license:
* http://www.opensource.org/licenses/mit-license.php
*
* @author Sam Clarke
*/
(function (sceditor) {
'use strict';
var defaultKey = 'sce-autodraft-' + location.pathname + location.search;
function clear(key) {
localStorage.removeItem(key || defaultKey);
}
sceditor.plugins.autosave = function () {
var base = this;
var editor;
var storageKey = defaultKey;
// 86400000 = 24 hrs (24 * 60 * 60 * 1000)
var expires = 86400000;
var saveHandler = function (value) {
localStorage.setItem(storageKey, JSON.stringify(value));
};
var loadHandler = function () {
return JSON.parse(localStorage.getItem(storageKey));
};
function gc() {
for (var i = 0; i < localStorage.length; i++) {
var key = localStorage.key(i);
if (/^sce\-autodraft\-/.test(key)) {
var item = JSON.parse(localStorage.getItem(storageKey));
if (item && item.time < Date.now() - expires) {
clear(key);
}
}
}
}
base.init = function () {
editor = this;
var opts = editor.opts && editor.opts.autosave || {};
saveHandler = opts.save || saveHandler;
loadHandler = opts.load || loadHandler;
storageKey = opts.storageKey || storageKey;
expires = opts.expires || expires;
gc();
};
base.signalReady = function () {
// Add submit event listener to clear autosave
var parent = editor.getContentAreaContainer();
while (parent) {
if (/form/i.test(parent.nodeName)) {
parent.addEventListener(
'submit', clear.bind(null, storageKey), true
);
break;
}
parent = parent.parentNode;
}
var state = loadHandler();
if (state) {
editor.sourceMode(state.sourceMode);
editor.val(state.value, false);
editor.focus();
if (state.sourceMode) {
editor.sourceEditorCaret(state.caret);
} else {
editor.getRangeHelper().restoreRange();
}
}
saveHandler({
caret: this.sourceEditorCaret(),
sourceMode: this.sourceMode(),
value: editor.val(null, false),
time: Date.now()
});
};
base.signalValuechangedEvent = function (e) {
saveHandler({
caret: this.sourceEditorCaret(),
sourceMode: this.sourceMode(),
value: e.detail.rawValue,
time: Date.now()
});
};
};
sceditor.plugins.autosave.clear = clear;
}(sceditor));