diff --git a/source/Ox.UI/js/Core/Ox.Element.js b/source/Ox.UI/js/Core/Ox.Element.js
index cb41e786..9da44fba 100644
--- a/source/Ox.UI/js/Core/Ox.Element.js
+++ b/source/Ox.UI/js/Core/Ox.Element.js
@@ -90,6 +90,8 @@ Ox.Element = function(options, self) {
element: self.options
};
}
+ // array of callbacks bound to any event
+ self.eventCallbacks = [];
// create event handler
// (this can be passed as part of self)
if (!self.$eventHandler) {
@@ -97,23 +99,25 @@ Ox.Element = function(options, self) {
}
// create public object
- var that = new Ox.JQueryElement(
- $(self.options.element || '
')
- )
- .addClass('OxElement')
- .mousedown(mousedown);
+ var that = new Ox.JQueryElement($(self.options.element || '
'))
+ .addClass('OxElement')
+ .mousedown(mousedown);
setTooltip();
- function bind(action, event, callback) {
- self.$eventHandler[action]('ox_' + event, function(event, data) {
- callback.call(that, Ox.extend({
- _element: that.$element,
- _event: event
- }, data || {}));
+ 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_type = event.type.replace(/^ox_/, '');
+ callback.call(that, data || {}, event);
+ }
+
function mousedown(e) {
/*
better mouse events
@@ -158,14 +162,14 @@ Ox.Element = function(options, self) {
});
// trigger dragstart, set up drag events
that.triggerEvent('dragstart', e);
- $('*').bind({
+ $('*').on({
mouseenter: dragenter,
mouseleave: dragleave
});
clientX = e.clientX;
clientY = e.clientY;
Ox.UI.$window
- .unbind('mouseup', mouseup)
+ .off('mouseup', mouseup)
.mousemove(mousemove)
.one('mouseup', function(e) {
// stop checking for mouserepeat
@@ -173,9 +177,9 @@ Ox.Element = function(options, self) {
// stop checking for dragpause
clearTimeout(dragTimeout);
// stop checking for drag
- Ox.UI.$window.unbind('mousemove', mousemove);
+ Ox.UI.$window.off('mousemove', mousemove);
// stop checking for dragenter and dragleave
- $('*').unbind({
+ $('*').off({
mouseenter: dragenter,
mouseleave: dragleave
});
@@ -248,28 +252,28 @@ Ox.Element = function(options, self) {
that.$tooltip = Ox.Tooltip({
title: self.options.tooltip
});
- that.bind({
+ that.on({
mouseenter: mouseenter
- }).unbind({
+ }).off({
mousemove: mousemove
});
} else {
that.$tooltip = Ox.Tooltip({
animate: false
});
- that.bind({
+ that.on({
mousemove: mousemove
- }).unbind({
+ }).off({
mouseenter: mouseenter
});
}
- that.bind({
+ that.on({
mouseleave: mouseleave
});
} else {
if (that.$tooltip) {
that.$tooltip.remove();
- that.unbind({
+ that.off({
mouseenter: mouseenter,
mousemove: mousemove,
mouseleave: mouseleave
@@ -289,6 +293,7 @@ Ox.Element = function(options, self) {
/*@
bindEvent Binds a function to an event
+ (callback) -> This element
(event, callback) -> This element
({event: callback, ...}) -> This element
callback Callback function
@@ -297,9 +302,13 @@ Ox.Element = function(options, self) {
Event names can be namespaced, like 'click.foo'
@*/
that.bindEvent = function() {
- Ox.forEach(Ox.makeObject(arguments), function(callback, event) {
- bind('bind', event, callback);
- });
+ if (Ox.typeOf(arguments[0]) == 'function') {
+ self.eventCallbacks.push(arguments[0]);
+ } else {
+ Ox.forEach(Ox.makeObject(arguments), function(callback, event) {
+ bind(event, callback);
+ });
+ }
return that;
};
@@ -314,7 +323,7 @@ Ox.Element = function(options, self) {
@*/
that.bindEventOnce = function() {
Ox.forEach(Ox.makeObject(arguments), function(callback, event) {
- bind('one', event, callback);
+ bind(event, callback, true);
});
return that;
};
@@ -445,6 +454,7 @@ Ox.Element = function(options, self) {
@*/
that.triggerEvent = function() {
Ox.forEach(Ox.makeObject(arguments), function(data, event) {
+ var type = 'ox_' + event;
if ([
'mousedown', 'mouserepeat', 'anyclick', 'singleclick', 'doubleclick',
'dragstart', 'drag', 'dragenter', 'dragleave', 'dragpause', 'dragend',
@@ -458,7 +468,10 @@ Ox.Element = function(options, self) {
// 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('ox_' + event, data);
+ self.$eventHandler && self.$eventHandler.trigger(type, data);
+ self.eventCallbacks.forEach(function(callback) {
+ call(callback, data, {type: type});
+ });
});
return that;
};
@@ -468,22 +481,30 @@ Ox.Element = function(options, self) {
To unbind a specific handler, use namespaced events, like
bindEvent('click.foo', callback)
, and then
unbindEvent('click.foo')
.
- () ->