From 34ad0e78940d915d9875001f2b396b2c99221a8b Mon Sep 17 00:00:00 2001 From: Kaarle Ritvanen Date: Fri, 31 Jan 2014 10:01:07 +0200 Subject: web client: function for running exclusive task within transaction --- web/client.js | 50 +++++++++++++++++++++++++++++--------------------- 1 file 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"}); -- cgit v1.2.3