summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/framework/utils.js
diff options
context:
space:
mode:
authorAaron Bohy <aab@odoo.com>2016-05-03 14:28:31 +0200
committerAaron Bohy <aab@odoo.com>2016-05-04 15:06:20 +0200
commitbefbdcb935353e965be82b3c6c6cfe048283d6e8 (patch)
tree1e954c6e57d32783fd2116725f40cf98be307d0c /addons/web/static/src/js/framework/utils.js
parent782a4466febda566f871ecf23000526893c2febd (diff)
[ADD] web: some deferred utils
Diffstat (limited to 'addons/web/static/src/js/framework/utils.js')
-rw-r--r--addons/web/static/src/js/framework/utils.js42
1 files changed, 42 insertions, 0 deletions
diff --git a/addons/web/static/src/js/framework/utils.js b/addons/web/static/src/js/framework/utils.js
index 8d8d8dab6ee..c19733989b5 100644
--- a/addons/web/static/src/js/framework/utils.js
+++ b/addons/web/static/src/js/framework/utils.js
@@ -416,6 +416,45 @@ var DropMisordered = Class.extend({
},
});
+var DropPrevious = Class.extend({
+ /**
+ * Registers a new deferred and rejects the previous one
+ * @param {$.Deferred} the new deferred
+ * @returns {$.Promise}
+ */
+ add: function (deferred) {
+ if (this.current_def) { this.current_def.reject(); }
+ var res = $.Deferred();
+ deferred.then(res.resolve, res.reject);
+ this.current_def = res;
+ return res.promise();
+ }
+});
+
+/**
+ * Rejects a deferred as soon as a reference deferred is either resolved or rejected
+ * @param {$.Deferred} [target_def] the deferred to potentially reject
+ * @param {$.Deferred} [reference_def] the reference target
+ * @returns {$.Deferred}
+ */
+function reject_after(target_def, reference_def) {
+ var res = $.Deferred();
+ target_def.then(res.resolve, res.reject);
+ reference_def.always(res.reject);
+ return res.promise();
+}
+
+/**
+ * Returns a deferred resolved after 'wait' milliseconds
+ * @param {int} [wait] the delay in ms
+ * @return {$.Deferred}
+ */
+function delay (wait) {
+ var def = $.Deferred();
+ setTimeout(def.resolve, wait);
+ return def;
+}
+
function swap(array, elem1, elem2) {
var i1 = array.indexOf(elem1);
var i2 = array.indexOf(elem2);
@@ -448,6 +487,9 @@ return {
assert: assert,
xor: xor,
DropMisordered: DropMisordered,
+ DropPrevious: DropPrevious,
+ reject_after: reject_after,
+ delay: delay,
swap: swap,
};