112 lines
3.8 KiB
JavaScript
112 lines
3.8 KiB
JavaScript
/* eslint-disable no-param-reassign */
|
|
import { Core } from './core';
|
|
import { Util } from './util';
|
|
export var Event;
|
|
(function (Event) {
|
|
function on(elem, events, selector, data, handler) {
|
|
Private.on(elem, events, selector, data, handler);
|
|
return elem;
|
|
}
|
|
Event.on = on;
|
|
function once(elem, events, selector, data, handler) {
|
|
Private.on(elem, events, selector, data, handler, true);
|
|
return elem;
|
|
}
|
|
Event.once = once;
|
|
function off(elem, events, selector, handler) {
|
|
Private.off(elem, events, selector, handler);
|
|
return elem;
|
|
}
|
|
Event.off = off;
|
|
function trigger(elem, event, args,
|
|
/**
|
|
* When onlyHandlers is `true`
|
|
* - Will not call `.event()` on the element it is triggered on. This means
|
|
* `.trigger('submit', [], true)` on a form will not call `.submit()` on
|
|
* the form.
|
|
* - Events will not bubble up the DOM hierarchy; if they are not handled
|
|
* by the target element directly, they do nothing.
|
|
*/
|
|
onlyHandlers) {
|
|
Core.trigger(event, args, elem, onlyHandlers);
|
|
return elem;
|
|
}
|
|
Event.trigger = trigger;
|
|
})(Event || (Event = {}));
|
|
var Private;
|
|
(function (Private) {
|
|
function on(elem, types, selector, data, fn, once) {
|
|
// Types can be a map of types/handlers
|
|
if (typeof types === 'object') {
|
|
// ( types-Object, selector, data )
|
|
if (typeof selector !== 'string') {
|
|
// ( types-Object, data )
|
|
data = data || selector;
|
|
selector = undefined;
|
|
}
|
|
Object.keys(types).forEach((type) => on(elem, type, selector, data, types[type], once));
|
|
return;
|
|
}
|
|
if (data == null && fn == null) {
|
|
// ( types, fn )
|
|
fn = selector;
|
|
data = selector = undefined;
|
|
}
|
|
else if (fn == null) {
|
|
if (typeof selector === 'string') {
|
|
// ( types, selector, fn )
|
|
fn = data;
|
|
data = undefined;
|
|
}
|
|
else {
|
|
// ( types, data, fn )
|
|
fn = data;
|
|
data = selector;
|
|
selector = undefined;
|
|
}
|
|
}
|
|
if (fn === false) {
|
|
fn = Util.returnFalse;
|
|
}
|
|
else if (!fn) {
|
|
return;
|
|
}
|
|
if (once) {
|
|
const originHandler = fn;
|
|
fn = function (event, ...args) {
|
|
// Can use an empty set, since event contains the info
|
|
Private.off(elem, event);
|
|
return originHandler.call(this, event, ...args);
|
|
};
|
|
// Use same guid so caller can remove using origFn
|
|
Util.setHandlerId(fn, Util.ensureHandlerId(originHandler));
|
|
}
|
|
Core.on(elem, types, fn, data, selector);
|
|
}
|
|
Private.on = on;
|
|
function off(elem, events, selector, fn) {
|
|
const evt = events;
|
|
if (evt && evt.preventDefault != null && evt.handleObj != null) {
|
|
const obj = evt.handleObj;
|
|
off(evt.delegateTarget, obj.namespace ? `${obj.originType}.${obj.namespace}` : obj.originType, obj.selector, obj.handler);
|
|
return;
|
|
}
|
|
if (typeof events === 'object') {
|
|
// ( types-object [, selector] )
|
|
const types = events;
|
|
Object.keys(types).forEach((type) => off(elem, type, selector, types[type]));
|
|
return;
|
|
}
|
|
if (selector === false || typeof selector === 'function') {
|
|
// ( types [, fn] )
|
|
fn = selector;
|
|
selector = undefined;
|
|
}
|
|
if (fn === false) {
|
|
fn = Util.returnFalse;
|
|
}
|
|
Core.off(elem, events, fn, selector);
|
|
}
|
|
Private.off = off;
|
|
})(Private || (Private = {}));
|
|
//# sourceMappingURL=main.js.map
|