|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- ! 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,
- 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
- }
- });
|