summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2014-01-31 10:01:07 +0200
committerKaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>2014-02-01 01:43:45 +0200
commit34ad0e78940d915d9875001f2b396b2c99221a8b (patch)
tree80253732cc4274a5a7089c300549a109634dc651
parent6e2f40eae43871d8dfb706b869685889e37099a5 (diff)
downloadaconf-34ad0e78940d915d9875001f2b396b2c99221a8b.tar.bz2
aconf-34ad0e78940d915d9875001f2b396b2c99221a8b.tar.xz
web client: function for running exclusive task within transaction
-rw-r--r--web/client.js50
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"});