[DIE] callbackenabled
bzr revid: al@openerp.com-20121018155837-lr90ldzrnwd06ueu
This commit is contained in:
parent
c4104503d6
commit
75735ea1c5
|
@ -430,71 +430,17 @@ instance.web.CallbackEnabledMixin = _.extend({}, instance.web.PropertiesMixin, {
|
||||||
init: function() {
|
init: function() {
|
||||||
instance.web.PropertiesMixin.init.call(this);
|
instance.web.PropertiesMixin.init.call(this);
|
||||||
var self = this;
|
var self = this;
|
||||||
var callback_maker = function(obj, name, method) {
|
|
||||||
var callback = function() {
|
|
||||||
var args = Array.prototype.slice.call(arguments);
|
|
||||||
self.trigger.apply(self, [name].concat(args));
|
|
||||||
var r;
|
|
||||||
for(var i = 0; i < callback.callback_chain.length; i++) {
|
|
||||||
var c = callback.callback_chain[i];
|
|
||||||
if(c.unique) {
|
|
||||||
callback.callback_chain.splice(i, 1);
|
|
||||||
i -= 1;
|
|
||||||
}
|
|
||||||
var result = c.callback.apply(c.self, c.args.concat(args));
|
|
||||||
if (c.callback === method) {
|
|
||||||
// return the result of the original method
|
|
||||||
r = result;
|
|
||||||
}
|
|
||||||
// TODO special value to stop the chain
|
|
||||||
// instance.web.callback_stop
|
|
||||||
}
|
|
||||||
return r;
|
|
||||||
};
|
|
||||||
callback.callback_chain = [];
|
|
||||||
callback.add = function(f) {
|
|
||||||
if(typeof(f) == 'function') {
|
|
||||||
f = { callback: f, args: Array.prototype.slice.call(arguments, 1) };
|
|
||||||
}
|
|
||||||
f.self = f.self || null;
|
|
||||||
f.args = f.args || [];
|
|
||||||
f.unique = !!f.unique;
|
|
||||||
if(f.position == 'last') {
|
|
||||||
callback.callback_chain.push(f);
|
|
||||||
} else {
|
|
||||||
callback.callback_chain.unshift(f);
|
|
||||||
}
|
|
||||||
return callback;
|
|
||||||
};
|
|
||||||
callback.add_first = function(f) {
|
|
||||||
return callback.add.apply(null,arguments);
|
|
||||||
};
|
|
||||||
callback.add_last = function(f) {
|
|
||||||
return callback.add({
|
|
||||||
callback: f,
|
|
||||||
args: Array.prototype.slice.call(arguments, 1),
|
|
||||||
position: "last"
|
|
||||||
});
|
|
||||||
};
|
|
||||||
callback.remove = function(f) {
|
|
||||||
callback.callback_chain = _.difference(callback.callback_chain, _.filter(callback.callback_chain, function(el) {
|
|
||||||
return el.callback === f;
|
|
||||||
}));
|
|
||||||
return callback;
|
|
||||||
};
|
|
||||||
|
|
||||||
return callback.add({
|
|
||||||
callback: method,
|
|
||||||
self:obj,
|
|
||||||
args:Array.prototype.slice.call(arguments, 3)
|
|
||||||
});
|
|
||||||
};
|
|
||||||
// Transform on_/do_* methods into callbacks
|
// Transform on_/do_* methods into callbacks
|
||||||
|
var callback_maker = function(fn) {
|
||||||
|
return function() {
|
||||||
|
return fn.apply(self, arguments);
|
||||||
|
}
|
||||||
|
};
|
||||||
for (var name in this) {
|
for (var name in this) {
|
||||||
if(typeof(this[name]) == "function") {
|
if(typeof(this[name]) == "function") {
|
||||||
this[name].debug_name = name;
|
|
||||||
if((/^on_|^do_/).test(name)) {
|
if((/^on_|^do_/).test(name)) {
|
||||||
this[name] = callback_maker(this, name, this[name]);
|
console.log("Proxyfy,",name);
|
||||||
|
this[name] = callback_maker(this[name]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue