react-event-injector
Version:
React way to addEventListener
61 lines (60 loc) • 2.15 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;
};
Object.defineProperty(exports, "__esModule", { value: true });
var flags_1 = require("./flags");
var eventListeners_1 = require("./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 (!flags_1.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;
};
function getEventNames(names) {
return Object
.keys(names)
.filter(function (name) { return name.indexOf('on') === 0; });
}
exports.getEventNames = getEventNames;
;
exports.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);
});
};
exports.attach = function (ref, events) {
exports.forEventsIn(events, function (name, cb, options, settings) { return eventListeners_1.addEventListener(ref, name, cb, asOption(__assign({}, settings, options))); });
};
exports.detach = function (ref, events) {
exports.forEventsIn(events, function (name, cb, options, settings) { return eventListeners_1.removeEventListener(ref, name, cb, asOption(__assign({}, settings, options))); });
};