diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2015-02-22 16:28:26 +0200 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2015-02-22 16:30:06 +0200 |
commit | b22244d6d0dc8d3e4cf124eadb09cb09d9574f24 (patch) | |
tree | 0d38cd52c4c1ef39e8853ccf62331be6a8fedd8e | |
parent | 1e4cb26264f67b5fe8e3e55e17d1ad785c137f24 (diff) | |
download | aconf-b22244d6d0dc8d3e4cf124eadb09cb09d9574f24.tar.bz2 aconf-b22244d6d0dc8d3e4cf124eadb09cb09d9574f24.tar.xz |
web client: ignore navigation events when UI is blocked
eliminates race condition when sorting list elements by dragging from
an anchor
-rw-r--r-- | web/blocking.js | 20 | ||||
-rw-r--r-- | web/client.js | 28 | ||||
-rw-r--r-- | web/transaction.js | 10 |
3 files changed, 45 insertions, 13 deletions
diff --git a/web/blocking.js b/web/blocking.js new file mode 100644 index 0000000..d45992f --- /dev/null +++ b/web/blocking.js @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2012-2015 Kaarle Ritvanen + * See LICENSE file for license details + */ + +define(["jquery", "jquery-blockui"], function($) { + var enabled = false; + + return { + enable: function() { + $.blockUI(); + enabled = true; + }, + disable: function() { + $.unblockUI(); + enabled = false; + }, + isEnabled: function() { return enabled; } + }; +}); diff --git a/web/client.js b/web/client.js index 346e458..0dd510a 100644 --- a/web/client.js +++ b/web/client.js @@ -1,10 +1,11 @@ /* - * Copyright (c) 2012-2014 Kaarle Ritvanen + * Copyright (c) 2012-2015 Kaarle Ritvanen * See LICENSE file for license details */ define( [ + "aconf/blocking", "aconf/dom", "aconf/error", "aconf/navigation", @@ -17,11 +18,20 @@ define( "underscore", "aconf/layout/stacked", "aconf/layout/tabular", - "domReady", - "jquery-blockui" + "domReady" ], function( - dom, formatError, navi, pth, statusBar, txnMgr, type, Inline, $, _ + blocking, + dom, + formatError, + navi, + pth, + statusBar, + txnMgr, + type, + Inline, + $, + _ ) { return function() { $("#login").submit(function() { @@ -194,11 +204,11 @@ define( function clearState() { statusBar.reset(); render(); - $.unblockUI(); + blocking.disable(); } $("#commit").click(function() { - $.blockUI(); + blocking.enable(); txnMgr.commit().done(clearState).fail(function(xhr) { statusBar.setError( formatError("Commit failed", xhr), "txn" @@ -206,7 +216,7 @@ define( }) }); $("#revert").click(function() { - $.blockUI(); + blocking.enable(); txnMgr.abort(); clearState(); }); @@ -220,7 +230,9 @@ define( statusBar.reset(); $("#content").empty(); - $(window).bind("hashchange", render); + $(window).bind("hashchange", function() { + if (!blocking.isEnabled()) render(); + }); navi.setPath("/"); }).fail(function() { diff --git a/web/transaction.js b/web/transaction.js index 5c0488d..3d4a953 100644 --- a/web/transaction.js +++ b/web/transaction.js @@ -1,11 +1,11 @@ /* - * Copyright (c) 2012-2014 Kaarle Ritvanen + * Copyright (c) 2012-2015 Kaarle Ritvanen * See LICENSE file for license details */ define( - ["aconf/path", "aconf/type", "jquery", "underscore", "jquery-blockui"], - function(pth, type, $, _) { + ["aconf/blocking", "aconf/path", "aconf/type", "jquery", "underscore"], + function(blocking, pth, type, $, _) { return function(token, saveRequired) { var txnMgr = {}; @@ -39,7 +39,7 @@ define( } function exclusive(task) { - $.blockUI(); + blocking.enable(); var def = $.Deferred(); function resolve(txnValid) { def.resolve(txnValid); } @@ -55,7 +55,7 @@ define( tasks[0].always(function() { exclusive(task).done(resolve).fail(reject); }); - else task().always($.unblockUI).done(resolve).fail(reject); + else task().always(blocking.disable).done(resolve).fail(reject); return def; } |