Your IP : 216.73.217.68


Current Path : /home/wuectly/www/03cbe/
Upload File :
Current File : /home/wuectly/www/03cbe/autosave.tar

index.html000060400000000054152456304650006546 0ustar00<html><body bgcolor="#FFFFFF"></body></html>config.php000060400000002615152456304650006534 0ustar00<?php
/**
 * @package     JCE
 * @subpackage  Editor
 *
 * @copyright   Copyright (c) 2009-2024 Ryan Demmer. All rights reserved
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

\defined('_JEXEC') or die;

class WFAutosavePluginConfig
{
    public static function getConfig(&$settings)
    {
        $wf = WFApplication::getInstance();    
    
        $ask_before_unload = $wf->getParam('autosave.ask_before_unload');
        $retention = $wf->getParam('autosave.retention');
        $interval = $wf->getParam('autosave.interval');

        // add "m" to the retention value if it is not empty
        if ($retention) {
            $retention = (int) $retention;

            if ($retention > 0) {
                $retention .= 'm';
            } else {
                $retention = '';
            }
        }

        // add "s" to the interval value if it is not empty
        if ($interval) {
            $interval = (int) $interval;
            if ($interval > 0) {
                $interval .= 's';
            } else {
                $interval = '';
            }   
        }

        if ($ask_before_unload) {
            $settings['autosave_ask_before_unload'] = true;
        }

        if ($retention) {
            $settings['autosave_retention'] = $retention;
        }

        if ($interval) {
            $settings['autosave_interval'] = $interval;
        }
    }
}
autosave.xml000060400000002252152456304650007124 0ustar00<?xml version="1.0" ?>
<extension version="3.4" type="plugin" group="jce" method="upgrade">
	<name>WF_AUTOSAVE_TITLE</name>
	<version>2.9.99.2</version>
	<creationDate>22-04-2026</creationDate>
	<author>Moxiecode / Ryan Demmer</author>
	<authorEmail>info@joomlacontenteditor.net</authorEmail>
	<authorUrl>https://www.joomlacontenteditor.net/</authorUrl>
	<copyright>Ryan Demmer</copyright>
	<license>GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html</license>
	<description>WF_AUTOSAVE_DESC</description>
	<icon>autosave</icon>
	<files></files>
	<languages></languages>

	<fields name="autosave">
        <fieldset name="config">
            <field name="ask_before_unload" type="yesno" default="0" label="WF_AUTOSAVE_ASK_BEFORE_UNLOAD" description="WF_AUTOSAVE_ASK_BEFORE_UNLOAD_DESC">
				<option value="0">JNO</option>
				<option value="1">JYES</option>
			</field>
			<field name="retention" type="text" default="20" label="WF_AUTOSAVE_RETENTION" description="WF_AUTOSAVE_RETENTION_DESC" />
			<field name="interval" type="text" default="30" label="WF_AUTOSAVE_INTERVAL" description="WF_AUTOSAVE_INTERVAL_DESC" />
		</fieldset>
	</fields>

	<help></help>
</extension>
 plugin.min.js000060400000004213152456332760007173 0ustar00tinymce._beforeUnloadHandler=function(){var e;return tinymce.each(tinymce.editors,function(t){t.plugins.autosave&&t.plugins.autosave.storeDraft(),!e&&t.isDirty()&&t.getParam("autosave_ask_before_unload",!0)&&(e=t.translate("You have unsaved changes are you sure you want to navigate away?"))}),e},tinymce.PluginManager.add("autosave",function(e){function t(e,t){var n={s:1e3,m:6e4};return e=/^(\d+)([ms]?)$/.exec(""+(e||t)),(e[2]?n[e[2]]:1)*parseInt(e,10)}function n(){var e=parseInt(p.getItem(u+"time"),10)||0;return!((new Date).getTime()-e>f.autosave_retention)||(r(!1),!1)}function r(t){p.removeItem(u+"draft"),p.removeItem(u+"time"),t!==!1&&e.fire("RemoveDraft")}function i(){!c()&&e.isDirty()&&(p.setItem(u+"draft",e.getContent({format:"raw",no_events:!0})),p.setItem(u+"time",(new Date).getTime()),e.fire("StoreDraft"))}function o(){n()&&(e.setContent(p.getItem(u+"draft"),{format:"raw"}),e.fire("RestoreDraft"))}function a(){d||(setInterval(function(){e.removed||i()},f.autosave_interval),d=!0)}function s(){var t=this;t.disabled(!n()),e.on("StoreDraft RestoreDraft RemoveDraft",function(){t.disabled(!n())}),a()}function l(){e.undoManager.beforeChange(),o(),r(),e.undoManager.add()}function c(t){var n=e.settings.forced_root_block;return t=tinymce.trim("undefined"==typeof t?e.getBody().innerHTML:t),""===t||new RegExp("^<"+n+"[^>]*>((\xa0|&nbsp;|[ \t]|<br[^>]*>)+?|)</"+n+">|<br>$","i").test(t)}var u,d,f=e.settings,p=tinymce.util.LocalStorage;u=f.autosave_prefix||"tinymce-autosave-{path}{query}-{id}-",u=u.replace(/\{path\}/g,document.location.pathname),u=u.replace(/\{query\}/g,document.location.search),u=u.replace(/\{id\}/g,e.id),f.autosave_interval=t(f.autosave_interval,"30s"),f.autosave_retention=t(f.autosave_retention,"20m"),e.addButton("restoredraft",{title:"Restore last draft",onclick:l,onPostRender:s}),e.addMenuItem("restoredraft",{text:"Restore last draft",onclick:l,onPostRender:s,context:"file"}),e.settings.autosave_restore_when_empty!==!1&&(e.on("init",function(){n()&&c()&&o()}),e.on("saveContent",function(){r()})),window.onbeforeunload=tinymce._beforeUnloadHandler,this.hasDraft=n,this.storeDraft=i,this.restoreDraft=o,this.removeDraft=r,this.isEmpty=c});plugin.js000060400000010553152463312410006401 0ustar00/* jce - 2.9.99.2 | 2026-04-22 | https://www.joomlacontenteditor.net | Source: https://github.com/widgetfactory/jce | Copyright (C) 2006 - 2026 Ryan Demmer. All rights reserved | GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html */
!function(tinymce) {
    var Dispatcher = tinymce.util.Dispatcher, Storage = window.localStorage;
    Storage && (tinymce.onBeforeUnload.add(function(tinymce, e) {
        var msg;
        tinymce.each(tinymce.editors, function(editor) {
            editor.plugins.autosave && editor.plugins.autosave.storeDraft(), !msg && editor.isDirty() && editor.getParam("autosave_ask_before_unload") && (msg = editor.translate("You have unsaved changes are you sure you want to navigate away?"), 
            "undefined" != typeof Joomla) && Joomla.loadingLayer && Joomla.loadingLayer("hide");
        }), msg && (e.preventDefault(), e.returnValue = msg);
    }), tinymce.PluginManager.add("autosave", function(ed) {
        var prefix, started, self = this, settings = ed.settings;
        function parseTime(time, defaultTime) {
            return ((time = /^(\d+)([ms]?)$/.exec("" + (time || defaultTime)))[2] ? {
                s: 1e3,
                m: 6e4
            }[time[2]] : 1) * parseInt(time, 10);
        }
        function hasDraft() {
            var time = parseInt(Storage.getItem(prefix + "time"), 10) || 0;
            if (!(new Date().getTime() - time > settings.autosave_retention)) return 1;
            removeDraft(!1);
        }
        function removeDraft(fire) {
            var content = Storage.getItem(prefix + "draft");
            Storage.removeItem(prefix + "draft"), Storage.removeItem(prefix + "time"), 
            !1 !== fire && content && self.onRemoveDraft.dispatch(self, {
                content: content
            });
        }
        function storeDraft() {
            var content, expires;
            !isEmpty() && ed.isDirty() && (content = ed.getContent({
                format: "raw",
                no_events: !0
            }), expires = new Date().getTime(), Storage.setItem(prefix + "draft", content), 
            Storage.setItem(prefix + "time", expires), self.onStoreDraft.dispatch(self, {
                expires: expires,
                content: content
            }));
        }
        function restoreDraft() {
            var content;
            hasDraft() && (content = Storage.getItem(prefix + "draft"), ed.setContent(content, {
                format: "raw"
            }), self.onRestoreDraft.dispatch(self, {
                content: content
            }));
        }
        function isEmpty(html) {
            var forcedRootBlockName = ed.settings.forced_root_block;
            return "" === (html = tinymce.trim(void 0 === html ? ed.getBody().innerHTML : html)) || new RegExp("^<" + forcedRootBlockName + "[^>]*>((\xa0|&nbsp;|[ \t]|<br[^>]*>)+?|)</" + forcedRootBlockName + ">|<br>$", "i").test(html);
        }
        self.onStoreDraft = new Dispatcher(self), self.onRestoreDraft = new Dispatcher(self), 
        self.onRemoveDraft = new Dispatcher(self), prefix = (prefix = (prefix = (prefix = settings.autosave_prefix || "tinymce-autosave-{path}{query}-{id}-").replace(/\{path\}/g, document.location.pathname)).replace(/\{query\}/g, document.location.search)).replace(/\{id\}/g, ed.id), 
        settings.autosave_interval = parseTime(settings.autosave_interval, "30s"), 
        settings.autosave_retention = parseTime(settings.autosave_retention, "20m"), 
        ed.addButton("autosave", {
            title: "autosave.restore_content",
            onclick: function() {
                ed.undoManager.beforeChange(), restoreDraft(), removeDraft(), ed.undoManager.add(), 
                ed.nodeChanged();
            }
        }), ed.onNodeChange.add(function() {
            var controlManager = ed.controlManager;
            controlManager.get("autosave") && controlManager.setDisabled("autosave", !hasDraft());
        }), ed.onInit.add(function() {
            !ed.controlManager.get("autosave") || started || (setInterval(function() {
                ed.removed || storeDraft();
            }, settings.autosave_interval), started = !0);
        }), !1 !== ed.settings.autosave_restore_when_empty && (ed.onInit.add(function() {
            hasDraft() && isEmpty() && restoreDraft();
        }), ed.onSaveContent.add(function() {
            removeDraft();
        })), self.storeDraft = storeDraft;
    }));
}(tinymce);