react-event-injector
Version:
React way to addEventListener
58 lines (57 loc) • 2.02 kB
JavaScript
var __assign = (this && this.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
import { isPassiveSupported } from "./flags";
import { addEventListener, removeEventListener } from "./eventListeners";
;
var EMPTY = {};
var WITH_CAPTURE = { capture: true };
var FLAG_PC = { capture: true, passive: true };
var FLAG_P = { passive: true };
var FLAG_C = { capture: true, passive: false };
var asOption = function (_a) {
var passive = _a.passive, capture = _a.capture;
if (!isPassiveSupported) {
return !!capture;
}
if (!passive && !capture) {
return false;
}
if (passive && capture) {
return FLAG_PC;
}
if (passive) {
return FLAG_P;
}
if (passive === false) {
return FLAG_C;
}
return true;
};
export function getEventNames(names) {
return Object
.keys(names)
.filter(function (name) { return name.indexOf('on') === 0; });
}
;
export var forEventsIn = function (events, cb) {
events.forEach(function (event) {
var name = event.name;
var lowerName = name.toLowerCase();
var capture = lowerName.substr(-7) === 'capture';
var eventName = lowerName.substring(2);
eventName = capture ? eventName.substring(0, eventName.length - 7) : eventName;
cb(eventName, event.cb, capture ? WITH_CAPTURE : {}, event.options === true ? WITH_CAPTURE : event.options || EMPTY);
});
};
export var attach = function (ref, events) {
forEventsIn(events, function (name, cb, options, settings) { return addEventListener(ref, name, cb, asOption(__assign({}, settings, options))); });
};
export var detach = function (ref, events) {
forEventsIn(events, function (name, cb, options, settings) { return removeEventListener(ref, name, cb, asOption(__assign({}, settings, options))); });
};