[REF] web: move async_when to utils

This commit is contained in:
Géry Debongnie
2016-06-17 13:24:54 +02:00
parent cfe13f79e6
commit cfe4b337af
7 changed files with 46 additions and 49 deletions
@@ -129,32 +129,6 @@ qweb.preprocess_node = function() {
_t('%d years ago');
}
$.async_when = function() {
var async = false;
var def = $.Deferred();
$.when.apply($, arguments).done(function() {
var args = arguments;
var action = function() {
def.resolve.apply(def, args);
};
if (async)
action();
else
setTimeout(action, 0);
}).fail(function() {
var args = arguments;
var action = function() {
def.reject.apply(def, args);
};
if (async)
action();
else
setTimeout(action, 0);
});
async = true;
return def;
};
return {
debug: debug,
qweb: qweb,
+1 -1
View File
@@ -816,7 +816,7 @@ var BufferedDataSet = DataSetStatic.extend({
});
this.set_ids(_.difference(this.ids, _.pluck(_.filter(this.cache, function (c) {return c.to_delete;}), 'id')));
this.trigger("dataset_changed", ids, callback, error_callback);
return $.async_when({result: true}).done(callback);
return utils.async_when({result: true}).done(callback);
},
reset_ids: function(ids, options) {
var self = this;
@@ -470,6 +470,31 @@ function toBoolElse (str, elseValues, trueValues, falseValues) {
return ret;
}
function async_when() {
var async = false;
var def = $.Deferred();
$.when.apply($, arguments).done(function() {
var args = arguments;
var action = function() {
def.resolve.apply(def, args);
};
if (async)
action();
else
setTimeout(action, 0);
}).fail(function() {
var args = arguments;
var action = function() {
def.reject.apply(def, args);
};
if (async)
action();
else
setTimeout(action, 0);
});
async = true;
return def;
}
return {
divmod: divmod,
@@ -501,6 +526,7 @@ return {
delay: delay,
swap: swap,
toBoolElse: toBoolElse,
async_when: async_when,
};
});
@@ -802,13 +802,13 @@ var FieldX2Many = AbstractManyField.extend({
this.viewmanager.on("switch_mode", self, function(n_mode) {
$.when(self.commit_value()).done(function() {
if (n_mode === "list") {
$.async_when().done(function() {
utils.async_when().done(function() {
self.reload_current_view();
});
}
});
});
$.async_when().done(function () {
utils.async_when().done(function () {
self.$el.addClass('o_view_manager_content');
self.alive(self.viewmanager.attachTo(self.$el));
});
+1 -1
View File
@@ -717,7 +717,7 @@ var FormView = View.extend(common.FieldManagerMixin, {
def.resolve();
});
} else {
$.async_when().done(function () {
utils.async_when().done(function () {
def.reject();
});
}
+2 -4
View File
@@ -1459,7 +1459,7 @@ ListView.Groups = Class.extend({
var fields = _.pluck(_.select(this.columns, function(x) {return x.tag == "field";}), 'name');
var options = { offset: current_min - 1, limit: view._limit, context: {bin_size: true} };
return $.async_when().then(function() {
return utils.async_when().then(function() {
return dataset.read_slice(fields, options).then(function (records) {
// FIXME: ignominious hacks, parents (aka form view) should not send two ListView#reload_content concurrently
if (self.records.length) {
@@ -1525,7 +1525,7 @@ ListView.Groups = Class.extend({
seq = to ? list.records.at(to - 1).get(seqname) : 0;
var defs = [];
var fct = function (dataset, id, seq) {
defs.push($.async_when().then(function () {
defs.push(utils.async_when().then(function () {
var attrs = {};
attrs[seqname] = seq;
return dataset.write(id, attrs, {internal_dataset_changed: true});
@@ -2047,5 +2047,3 @@ function for_ (id, field, node) {
return ListView;
});
+14 -15
View File
@@ -433,30 +433,30 @@ odoo.define_section('Widget.events', ['web.Widget', 'web.core'], function (test)
});
});
odoo.define_section('Widget.async', ['web.Widget'], function (test) {
test("alive(alive)", function (assert, Widget) {
odoo.define_section('Widget.async', ['web.Widget', 'web.utils'], function (test) {
test("alive(alive)", function (assert, Widget, utils) {
assert.expect(1);
var widget = new (Widget.extend({}));
return $.async_when(widget.start())
.then(function () { return widget.alive($.async_when()) })
return utils.async_when(widget.start())
.then(function () { return widget.alive(utils.async_when()) })
.then(function () { assert.ok(true); });
});
test("alive(dead)", function (assert, Widget) {
test("alive(dead)", function (assert, Widget, utils) {
assert.expect(1);
var widget = new (Widget.extend({}));
return $.Deferred(function (d) {
$.async_when(widget.start())
utils.async_when(widget.start())
.then(function () {
// destroy widget
widget.destroy();
var promise = $.async_when();
var promise = utils.async_when();
// leave time for alive() to do its stuff
promise.then(function () {
return $.async_when();
return utils.async_when();
}).then(function () {
assert.ok(true);
d.resolve();
@@ -470,26 +470,26 @@ odoo.define_section('Widget.async', ['web.Widget'], function (test) {
});
});
test("alive(alive, true)", function (assert, Widget) {
test("alive(alive, true)", function (assert, Widget, utils) {
assert.expect(1);
var widget = new (Widget.extend({}));
return $.async_when(widget.start())
.then(function () { return widget.alive($.async_when(), true) })
return utils.async_when(widget.start())
.then(function () { return widget.alive(utils.async_when(), true) })
.then(function () { assert.ok(true); });
});
test("alive(dead, true)", function (assert, Widget) {
test("alive(dead, true)", function (assert, Widget, utils) {
assert.expect(1);
var done = assert.async();
var widget = new (Widget.extend({}));
$.async_when(widget.start())
utils.async_when(widget.start())
.then(function () {
// destroy widget
widget.destroy();
console.log('destroyed');
return widget.alive($.async_when().done(function () { console.log('when'); }), true);
return widget.alive(utils.async_when().done(function () { console.log('when'); }), true);
}).then(function () {
console.log('unfailed')
assert.ok(false, "alive(p, true) should fail its promise");
@@ -630,4 +630,3 @@ odoo.define_section('server-formats', ['web.time'], function (test) {
});
});