123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
-
- !function (root, factory) {
- if (typeof module === 'object' && module.exports)
- module.exports = factory();
- else
- root.onfire = factory();
- }(typeof window !== 'undefined' ? window : this, function () {
- var __onfireEvents = {},
- __cnt = 0, // evnet counter
- string_str = 'string',
- function_str = 'function',
- hasOwnKey = Function.call.bind(Object.hasOwnProperty),
- slice = Function.call.bind(Array.prototype.slice);
-
- function _bind(eventName, callback, is_one, context) {
- if (typeof eventName !== string_str || typeof callback !== function_str) {
- throw new Error('args: '+string_str+', '+function_str+'');
- }
- if (! hasOwnKey(__onfireEvents, eventName)) {
- __onfireEvents[eventName] = {};
- }
- __onfireEvents[eventName][++__cnt] = [callback, is_one, context];
-
- return [eventName, __cnt];
- }
- function _each(obj, callback) {
- for (var key in obj) {
- if (hasOwnKey(obj, key)) callback(key, obj[key]);
- }
- }
- function on(eventName, callback, context) {
- return _bind(eventName, callback, 0, context);
- }
-
- function one(eventName, callback, context) {
- return _bind(eventName, callback, 1, context);
- }
- function _fire_func(eventName, args) {
- if (hasOwnKey(__onfireEvents, eventName)) {
- _each(__onfireEvents[eventName], function(key, item) {
- item[0].apply(item[2], args);
- if (item[1]) delete __onfireEvents[eventName][key];
- });
- }
- }
-
- function fire(eventName) {
- var args = slice(arguments, 1);
- setTimeout(function () {
- _fire_func(eventName, args);
- });
- }
-
- function fireSync(eventName) {
- _fire_func(eventName, slice(arguments, 1));
- }
-
- function un(event) {
- var eventName, key, r = false, type = typeof event;
- if (type === string_str) {
- if (hasOwnKey(__onfireEvents, event)) {
- delete __onfireEvents[event];
- return true;
- }
- return false;
- }
- else if (type === 'object') {
- eventName = event[0];
- key = event[1];
- if (hasOwnKey(__onfireEvents, eventName) && hasOwnKey(__onfireEvents[eventName], key)) {
- delete __onfireEvents[eventName][key];
- return true;
- }
- return false;
- }
- else if (type === function_str) {
- _each(__onfireEvents, function(key_1, item_1) {
- _each(item_1, function(key_2, item_2) {
- if (item_2[0] === event) {
- delete __onfireEvents[key_1][key_2];
- r = true;
- }
- });
- });
- return r;
- }
- return true;
- }
- function clear() {
- __onfireEvents = {};
- }
- return {
- on: on,
- one: one,
- un: un,
- fire: fire,
- fireSync: fireSync,
- clear: clear
- };
- });
|