Prevent possible race condition when purging autosave content
authorAlexander Ebert <ebert@woltlab.com>
Fri, 6 Feb 2015 13:43:14 +0000 (14:43 +0100)
committerAlexander Ebert <ebert@woltlab.com>
Fri, 6 Feb 2015 13:43:14 +0000 (14:43 +0100)
wcfsetup/install/files/js/3rdParty/redactor/plugins/wutil.js
wcfsetup/install/files/js/WCF.Message.js

index a4cee4264aa3dea10b20ceff32049be17eb24869..efc0066bb31dff340f67b94a06e828ae118d1ff0 100644 (file)
@@ -13,6 +13,7 @@ RedactorPlugins.wutil = function() {
        var $autosaveLastMessage = '';
        var $autosaveNotice = null;
        var $autosaveDidSave = false;
+       var $autosavePaused = false;
        var $autosaveSaveNoticePE = null;
        
        return {
@@ -327,6 +328,10 @@ RedactorPlugins.wutil = function() {
                                
                                if ($autosaveSaveNoticePE === null) {
                                        $autosaveSaveNoticePE = new WCF.PeriodicalExecuter((function(pe) {
+                                               if ($autosavePaused === true) {
+                                                       return;
+                                               }
+                                               
                                                if ($autosaveDidSave === false) {
                                                        pe.stop();
                                                        $autosaveSaveNoticePE = null;
@@ -603,6 +608,20 @@ RedactorPlugins.wutil = function() {
                        }
                },
                
+               /**
+                * Temporarily pauses autosave worker.
+                */
+               autosavePause: function() {
+                       $autosavePaused = true;
+               },
+               
+               /**
+                * Resumes autosave worker.
+                */
+               autosaveResume: function() {
+                       $autosavePaused = false;
+               },
+               
                /**
                 * Replaces one button with a new one.
                 * 
index bbd843b695894cdc1d94eced55507ec1b51d7cda..3a6f796c96d020f0c081c93d2eec4cca77d5f03f 100644 (file)
@@ -1110,6 +1110,7 @@ WCF.Message.QuickReply = Class.extend({
         */
        _success: function(data, textStatus, jqXHR) {
                if ($.browser.redactor) {
+                       this._messageField.redactor('wutil.autosavePause');
                        this._messageField.redactor('wutil.autosavePurge');
                }
                
@@ -1144,6 +1145,7 @@ WCF.Message.QuickReply = Class.extend({
                        
                        if ($.browser.redactor) {
                                this._messageField.redactor('wutil.reset');
+                               this._messageField.redactor('wutil.autosaveResume');
                        }
                        else {
                                this._messageField.val('');
@@ -1703,7 +1705,7 @@ WCF.Message.InlineEditor = Class.extend({
        },
        
        /**
-        * Destroies editor instance and removes it's DOM elements.
+        * Destroys editor instance and removes its DOM elements.
         */
        _destroyEditor: function() {
                var $container = this._container[this._activeElementID];
@@ -1711,6 +1713,7 @@ WCF.Message.InlineEditor = Class.extend({
                // destroy editor
                if ($.browser.redactor) {
                        var $target = $('#' + this._messageEditorIDPrefix + $container.data('objectID'));
+                       $target.redactor('wutil.autosavePause');
                        $target.redactor('wutil.autosavePurge');
                        $target.redactor('core.destroy');
                }