diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2014-01-31 10:01:07 +0200 |
---|---|---|
committer | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2014-02-01 01:43:45 +0200 |
commit | 34ad0e78940d915d9875001f2b396b2c99221a8b (patch) | |
tree | 80253732cc4274a5a7089c300549a109634dc651 /web | |
parent | 6e2f40eae43871d8dfb706b869685889e37099a5 (diff) | |
download | aconf-34ad0e78940d915d9875001f2b396b2c99221a8b.tar.bz2 aconf-34ad0e78940d915d9875001f2b396b2c99221a8b.tar.xz |
web client: function for running exclusive task within transaction
Diffstat (limited to 'web')
-rw-r--r-- | web/client.js | 50 |
1 files changed, 29 insertions, 21 deletions
diff --git a/web/client.js b/web/client.js index 7f7daf2..255bc01 100644 --- a/web/client.js +++ b/web/client.js @@ -113,6 +113,28 @@ $(function() { function objRequest(path, options) { return request("/config" + path, options); } + + function exclusive(task) { + $.blockUI(); + + var def = $.Deferred(); + function resolve(txnValid) { def.resolve(txnValid); } + function reject() { def.reject(); } + + var tasks = _.filter( + _.pluck(_.values(invalid), 1), function(d) { + return d && d.state() == "pending"; + } + ); + + if (tasks.length) + tasks[0].always(function() { + exclusive(task).done(resolve).fail(reject); + }); + else task().always($.unblockUI).done(resolve).fail(reject); + + return def; + } function query(path) { var def = $.Deferred(); @@ -331,22 +353,8 @@ $(function() { }; data.delete = function(name) { - var def = $.Deferred(); - function resolve(txnValid) { def.resolve(txnValid); } - function reject() { def.reject(); } - - var tasks = _.filter( - _.pluck(_.values(invalid), 1), function(d) { - return d && d.state() == "pending"; - } - ); - - if (tasks.length) - tasks[0].always(function() { - data.delete(name).done(resolve).fail(reject); - }); - - else { + return exclusive(function() { + var def = $.Deferred(); var length = data.data.length; data.set(name, null).done(function(txnValid) { @@ -381,13 +389,13 @@ $(function() { ); } } - resolve(txnValid); + def.resolve(txnValid); - }).fail(reject); - } + }).fail(function() { def.reject(); }); - return def; - }; + return def; + }); + } data.invoke = function(name) { return objRequest(join(path, name), {type: "POST"}); |