mirror of
https://github.com/liabru/matter-js.git
synced 2025-01-16 16:43:55 -05:00
109 lines
No EOL
3 KiB
JavaScript
109 lines
No EOL
3 KiB
JavaScript
/**
|
|
* See [Demo.js](https://github.com/liabru/matter-js/blob/master/demo/js/Demo.js)
|
|
* and [DemoMobile.js](https://github.com/liabru/matter-js/blob/master/demo/js/DemoMobile.js) for usage examples.
|
|
*
|
|
* @class Events
|
|
*/
|
|
|
|
var Events = {};
|
|
|
|
module.exports = Events;
|
|
|
|
var Common = require('./Common');
|
|
|
|
(function() {
|
|
|
|
/**
|
|
* Subscribes a callback function to the given object's `eventName`.
|
|
* @method on
|
|
* @param {} object
|
|
* @param {string} eventNames
|
|
* @param {function} callback
|
|
*/
|
|
Events.on = function(object, eventNames, callback) {
|
|
var names = eventNames.split(' '),
|
|
name;
|
|
|
|
for (var i = 0; i < names.length; i++) {
|
|
name = names[i];
|
|
object.events = object.events || {};
|
|
object.events[name] = object.events[name] || [];
|
|
object.events[name].push(callback);
|
|
}
|
|
|
|
return callback;
|
|
};
|
|
|
|
/**
|
|
* Removes the given event callback. If no callback, clears all callbacks in `eventNames`. If no `eventNames`, clears all events.
|
|
* @method off
|
|
* @param {} object
|
|
* @param {string} eventNames
|
|
* @param {function} callback
|
|
*/
|
|
Events.off = function(object, eventNames, callback) {
|
|
if (!eventNames) {
|
|
object.events = {};
|
|
return;
|
|
}
|
|
|
|
// handle Events.off(object, callback)
|
|
if (typeof eventNames === 'function') {
|
|
callback = eventNames;
|
|
eventNames = Common.keys(object.events).join(' ');
|
|
}
|
|
|
|
var names = eventNames.split(' ');
|
|
|
|
for (var i = 0; i < names.length; i++) {
|
|
var callbacks = object.events[names[i]],
|
|
newCallbacks = [];
|
|
|
|
if (callback) {
|
|
for (var j = 0; j < callbacks.length; j++) {
|
|
if (callbacks[j] !== callback)
|
|
newCallbacks.push(callbacks[j]);
|
|
}
|
|
}
|
|
|
|
object.events[names[i]] = newCallbacks;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Fires all the callbacks subscribed to the given object's `eventName`, in the order they subscribed, if any.
|
|
* @method trigger
|
|
* @param {} object
|
|
* @param {string} eventNames
|
|
* @param {} event
|
|
*/
|
|
Events.trigger = function(object, eventNames, event) {
|
|
var names,
|
|
name,
|
|
callbacks,
|
|
eventClone;
|
|
|
|
if (object.events) {
|
|
if (!event)
|
|
event = {};
|
|
|
|
names = eventNames.split(' ');
|
|
|
|
for (var i = 0; i < names.length; i++) {
|
|
name = names[i];
|
|
callbacks = object.events[name];
|
|
|
|
if (callbacks) {
|
|
eventClone = Common.clone(event, false);
|
|
eventClone.name = name;
|
|
eventClone.source = object;
|
|
|
|
for (var j = 0; j < callbacks.length; j++) {
|
|
callbacks[j].apply(object, [eventClone]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
})(); |