Ox.Element: use new event controller
This commit is contained in:
parent
32f85e42e4
commit
b5910f5f62
1 changed files with 5 additions and 65 deletions
|
@ -81,10 +81,6 @@ Ox.Element = function(options, self) {
|
|||
self.defaults = {};
|
||||
// allow for Ox.TestElement('<tagname>') or Ox.TestElement('cssSelector')
|
||||
self.options = Ox.isString(options) ? {element: options} : options || {};
|
||||
// the actual event handler
|
||||
self.$eventHandler = self.$eventHandler || $('<div>');
|
||||
// array of callbacks bound to any event
|
||||
self.eventCallbacks = self.eventCallbacks || [];
|
||||
// stack of callbacks bound to option updates
|
||||
self.updateCallbacks = self.updateCallbacks || [];
|
||||
|
||||
|
@ -95,20 +91,6 @@ Ox.Element = function(options, self) {
|
|||
|
||||
setTooltip();
|
||||
|
||||
function bind(event, callback, once) {
|
||||
self.$eventHandler[
|
||||
once ? 'one' : 'on'
|
||||
]('ox_' + event, function(event, data) {
|
||||
call(callback, data, event);
|
||||
});
|
||||
}
|
||||
|
||||
function call(callback, data, event) {
|
||||
event.ox_id = that.oxid;
|
||||
event.ox_type = event.type.replace(/^ox_/, '');
|
||||
callback.call(that, data || {}, event);
|
||||
}
|
||||
|
||||
function mousedown(e) {
|
||||
/*
|
||||
better mouse events
|
||||
|
@ -275,13 +257,7 @@ Ox.Element = function(options, self) {
|
|||
Event names can be namespaced, like `'click.foo'`
|
||||
@*/
|
||||
that.bindEvent = function() {
|
||||
if (Ox.typeOf(arguments[0]) == 'function') {
|
||||
self.eventCallbacks.push(arguments[0]);
|
||||
} else {
|
||||
Ox.forEach(Ox.makeObject(arguments), function(callback, event) {
|
||||
bind(event, callback);
|
||||
});
|
||||
}
|
||||
Ox.Event.bind.apply(null, [self].concat(Ox.slice(arguments)));
|
||||
return that;
|
||||
};
|
||||
|
||||
|
@ -295,9 +271,7 @@ Ox.Element = function(options, self) {
|
|||
Event names can be namespaced, like `'click.foo'`
|
||||
@*/
|
||||
that.bindEventOnce = function() {
|
||||
Ox.forEach(Ox.makeObject(arguments), function(callback, event) {
|
||||
bind(event, callback, true);
|
||||
});
|
||||
Ox.Event.bindOnce.apply(null, [self].concat(Ox.slice(arguments)));
|
||||
return that;
|
||||
};
|
||||
|
||||
|
@ -381,13 +355,11 @@ Ox.Element = function(options, self) {
|
|||
@*/
|
||||
that.remove = function(remove) {
|
||||
remove !== false && that.find('.OxElement').each(function() {
|
||||
var oxid = $(this).data('oxid'),
|
||||
element = Ox.UI.elements[oxid];
|
||||
var element = Ox.UI.elements[$(this).data('oxid')];
|
||||
element && element.remove(false);
|
||||
});
|
||||
Ox.Focus.remove(that.oxid);
|
||||
Ox.Keyboard.unbind(that.oxid);
|
||||
delete self.$eventHandler;
|
||||
delete Ox.UI.elements[that.oxid];
|
||||
that.$tooltip && that.$tooltip.remove();
|
||||
remove !== false && that.$element.remove();
|
||||
|
@ -428,27 +400,7 @@ Ox.Element = function(options, self) {
|
|||
data <object> Event data (key/value pairs)
|
||||
@*/
|
||||
that.triggerEvent = function() {
|
||||
Ox.forEach(Ox.makeObject(arguments), function(data, event) {
|
||||
var type = 'ox_' + event;
|
||||
// FIXME: remove this
|
||||
if ([
|
||||
'mousedown', 'mouserepeat', 'anyclick', 'singleclick', 'doubleclick',
|
||||
'dragstart', 'drag', 'dragenter', 'dragleave', 'dragpause', 'dragend',
|
||||
'draganddropstart', 'draganddrop', 'draganddropenter', 'draganddropleave', 'draganddropend',
|
||||
'playing', 'position', 'progress', 'request'
|
||||
].indexOf(event) == -1) {
|
||||
if (!/^pandora_/.test(event)) {
|
||||
Ox.Log('EVENT', that.oxid, self.options.id, 'trigger', event, data);
|
||||
}
|
||||
}
|
||||
// it is necessary to check if self.$eventHandler exists,
|
||||
// since, for example, when removing the element on click,
|
||||
// singleclick will fire after the removal of the event handler
|
||||
self.$eventHandler && self.$eventHandler.trigger(type, data);
|
||||
self.eventCallbacks.forEach(function(callback) {
|
||||
call(callback, data, {type: type});
|
||||
});
|
||||
});
|
||||
Ox.Event.trigger.apply(that, [self].concat(Ox.slice(arguments)));
|
||||
return that;
|
||||
};
|
||||
|
||||
|
@ -469,19 +421,7 @@ Ox.Element = function(options, self) {
|
|||
event <string> Event name
|
||||
@*/
|
||||
that.unbindEvent = function() {
|
||||
var callback = arguments[0];
|
||||
if (arguments.length == 0) {
|
||||
self.eventCallbacks = [];
|
||||
self.$eventHandler.off();
|
||||
} else if (Ox.typeOf(callback) == 'function') {
|
||||
self.eventCallbacks = self.eventCallbacks.filter(function(fn) {
|
||||
return fn !== callback;
|
||||
});
|
||||
} else {
|
||||
Ox.forEach(Ox.makeObject(arguments), function(callback, event) {
|
||||
self.$eventHandler.off('ox_' + event, callback);
|
||||
});
|
||||
}
|
||||
Ox.Event.unbind.apply(null, [self].concat(Ox.slice(arguments)));
|
||||
return that;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue