(options)
| 985 | // :: callback based event handler plugin generator |
| 986 | // ----------------------------------------------------------------------- |
| 987 | function make_callback_plugin(options) { |
| 988 | var factory_settings = $.extend({ |
| 989 | init: $.noop, |
| 990 | destroy: $.noop, |
| 991 | name: 'event' |
| 992 | }, options); |
| 993 | return function(callback, options) { |
| 994 | var trigger = arguments.length === 0; |
| 995 | var unbind = arguments[0] === "unbind"; |
| 996 | if (!trigger && !unbind && !is_function(callback)) { |
| 997 | throw new Error('Invalid argument, it need to a function or string ' + |
| 998 | '"unbind" or no arguments.'); |
| 999 | } |
| 1000 | if (unbind) { |
| 1001 | callback = is_function(arguments[1]) ? arguments[1] : null; |
| 1002 | } |
| 1003 | var data_name = 'callbacks_' + factory_settings.name; |
| 1004 | return this.each(function() { |
| 1005 | var $this = $(this); |
| 1006 | var callbacks; |
| 1007 | function handler(arg) { |
| 1008 | callbacks.fireWith($this, [arg]); |
| 1009 | } |
| 1010 | if (trigger || unbind) { |
| 1011 | callbacks = $this.data(data_name); |
| 1012 | if (trigger) { |
| 1013 | callbacks && callbacks.fire(); |
| 1014 | } else { |
| 1015 | if (callback && callbacks) { |
| 1016 | callbacks.remove(callback); |
| 1017 | if (!callbacks.has()) { |
| 1018 | callbacks = null; |
| 1019 | } |
| 1020 | } else { |
| 1021 | callbacks = null; |
| 1022 | } |
| 1023 | if (!callbacks) { |
| 1024 | $this.removeData(data_name); |
| 1025 | factory_settings.destroy.call(this, handler, options); |
| 1026 | } |
| 1027 | } |
| 1028 | } else if ($this.data(data_name)) { |
| 1029 | $(this).data(data_name).add(callback); |
| 1030 | } else { |
| 1031 | callbacks = $.Callbacks(); |
| 1032 | callbacks.add(callback); |
| 1033 | $this.data(data_name, callbacks); |
| 1034 | factory_settings.init.call(this, handler, options); |
| 1035 | } |
| 1036 | }); |
| 1037 | }; |
| 1038 | } |
| 1039 | // ----------------------------------------------------------------------- |
| 1040 | // :: Cross-browser resize element plugin using sentinel iframe or |
| 1041 | // :: resizeObserver |
no test coverage detected
searching dependent graphs…