From e4176cee859a58a2986f4c3093318f47ade29356 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Aleksander=20=C5=81ukasz?= Date: Wed, 23 Jul 2014 10:22:37 +0200 Subject: [PATCH] Prevent a race condition between "Replacing text" label and the save dialog, probably fixes #3484 Finishing the "Replacing text" label fade out after the save dialog (or any other dialog) is made visible causes the BlockUI plugin to erase its internal data necessary for restoring the dialog's html markup to its original position and, as a result, to remove it from DOM tree when dialog gets hidden. This makes it impossible to show this dialog again. Such a case could occur when text operation executed in the source editor took a little bit longer. This change fixes that by disabling the save button until the label fades out. --- redakcja/static/js/button_scripts.js | 32 ++++++++++++++++------------ 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/redakcja/static/js/button_scripts.js b/redakcja/static/js/button_scripts.js index 6e729157..37f37a7d 100644 --- a/redakcja/static/js/button_scripts.js +++ b/redakcja/static/js/button_scripts.js @@ -307,22 +307,26 @@ ScriptletCenter.prototype.callInteractive = function(opts) { $.blockUI({message: $progress, showOverlay: false}); + $('#save-button').attr('disabled', true); var input = self.XMLEditorSelectedText(opts.context); - self.scriptlets[opts.action](opts.context, opts.extra, input, 0, 0, function(output, move_forward, move_up){ - /*if(timer) - clearTimeout(timer); - else */ - if (input != output) { - self.XMLEditorReplaceSelectedText(opts.context, output) - } - if (move_forward || move_up) { - try { - self.XMLEditorMoveCursorForward(opts.context, move_forward, move_up) + window.setTimeout(function() { + self.scriptlets[opts.action](opts.context, opts.extra, input, 0, 0, function(output, move_forward, move_up){ + /*if(timer) + clearTimeout(timer); + else */ + if (input != output) { + self.XMLEditorReplaceSelectedText(opts.context, output) } - catch(e) {} - } - $.unblockUI(); // done - }); + if (move_forward || move_up) { + try { + self.XMLEditorMoveCursorForward(opts.context, move_forward, move_up) + } + catch(e) {} + } + $.unblockUI({onUnblock: function() { $('#save-button').attr('disabled', null)}}); // done + }); + }, 0); + } ScriptletCenter.prototype.XMLEditorSelectedText = function(editor) { -- 2.20.1