diff -r 000000000000 -r bca7a7e058a3 src/pyams_skin/resources/js/ext/tinymce/dev/plugins/autosave/plugin.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/pyams_skin/resources/js/ext/tinymce/dev/plugins/autosave/plugin.js Thu Feb 13 11:43:31 2020 +0100 @@ -0,0 +1,165 @@ +/** + * plugin.js + * + * Copyright, Moxiecode Systems AB + * Released under LGPL License. + * + * License: http://www.tinymce.com/license + * Contributing: http://www.tinymce.com/contributing + */ + +/*global tinymce:true */ + +// Internal unload handler will be called before the page is unloaded +// Needs to be outside the plugin since it would otherwise keep +// a reference to editor in closue scope +/*eslint no-func-assign:0 */ +tinymce._beforeUnloadHandler = function() { + var msg; + + tinymce.each(tinymce.editors, function(editor) { + // Store a draft for each editor instance + if (editor.plugins.autosave) { + editor.plugins.autosave.storeDraft(); + } + + // Setup a return message if the editor is dirty + if (!msg && editor.isDirty() && editor.getParam("autosave_ask_before_unload", true)) { + msg = editor.translate("You have unsaved changes are you sure you want to navigate away?"); + } + }); + + return msg; +}; + +tinymce.PluginManager.add('autosave', function(editor) { + var settings = editor.settings, LocalStorage = tinymce.util.LocalStorage, prefix, started; + + prefix = settings.autosave_prefix || 'tinymce-autosave-{path}{query}-{id}-'; + prefix = prefix.replace(/\{path\}/g, document.location.pathname); + prefix = prefix.replace(/\{query\}/g, document.location.search); + prefix = prefix.replace(/\{id\}/g, editor.id); + + function parseTime(time, defaultTime) { + var multipels = { + s: 1000, + m: 60000 + }; + + time = /^(\d+)([ms]?)$/.exec('' + (time || defaultTime)); + + return (time[2] ? multipels[time[2]] : 1) * parseInt(time, 10); + } + + function hasDraft() { + var time = parseInt(LocalStorage.getItem(prefix + "time"), 10) || 0; + + if (new Date().getTime() - time > settings.autosave_retention) { + removeDraft(false); + return false; + } + + return true; + } + + function removeDraft(fire) { + LocalStorage.removeItem(prefix + "draft"); + LocalStorage.removeItem(prefix + "time"); + + if (fire !== false) { + editor.fire('RemoveDraft'); + } + } + + function storeDraft() { + if (!isEmpty() && editor.isDirty()) { + LocalStorage.setItem(prefix + "draft", editor.getContent({format: 'raw', no_events: true})); + LocalStorage.setItem(prefix + "time", new Date().getTime()); + editor.fire('StoreDraft'); + } + } + + function restoreDraft() { + if (hasDraft()) { + editor.setContent(LocalStorage.getItem(prefix + "draft"), {format: 'raw'}); + editor.fire('RestoreDraft'); + } + } + + function startStoreDraft() { + if (!started) { + setInterval(function() { + if (!editor.removed) { + storeDraft(); + } + }, settings.autosave_interval); + + started = true; + } + } + + settings.autosave_interval = parseTime(settings.autosave_interval, '30s'); + settings.autosave_retention = parseTime(settings.autosave_retention, '20m'); + + function postRender() { + var self = this; + + self.disabled(!hasDraft()); + + editor.on('StoreDraft RestoreDraft RemoveDraft', function() { + self.disabled(!hasDraft()); + }); + + startStoreDraft(); + } + + function restoreLastDraft() { + editor.undoManager.beforeChange(); + restoreDraft(); + removeDraft(); + editor.undoManager.add(); + } + + editor.addButton('restoredraft', { + title: 'Restore last draft', + onclick: restoreLastDraft, + onPostRender: postRender + }); + + editor.addMenuItem('restoredraft', { + text: 'Restore last draft', + onclick: restoreLastDraft, + onPostRender: postRender, + context: 'file' + }); + + function isEmpty(html) { + var forcedRootBlockName = editor.settings.forced_root_block; + + html = tinymce.trim(typeof html == "undefined" ? editor.getBody().innerHTML : html); + + return html === '' || new RegExp( + '^<' + forcedRootBlockName + '[^>]*>((\u00a0| |[ \t]|]*>)+?|)<\/' + forcedRootBlockName + '>|
$', 'i' + ).test(html); + } + + if (editor.settings.autosave_restore_when_empty !== false) { + editor.on('init', function() { + if (hasDraft() && isEmpty()) { + restoreDraft(); + } + }); + + editor.on('saveContent', function() { + removeDraft(); + }); + } + + window.onbeforeunload = tinymce._beforeUnloadHandler; + + this.hasDraft = hasDraft; + this.storeDraft = storeDraft; + this.restoreDraft = restoreDraft; + this.removeDraft = removeDraft; + this.isEmpty = isEmpty; +}); \ No newline at end of file