@miyauci/get-event-listeners
Version:
Ponyfill for getEventListeners
101 lines (100 loc) • 3.93 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.toKey = exports.toHandler = exports.isWindow = exports.isNodeLike = exports.defaultPassiveValue = exports.flatOptionsMore = exports.flatOptions = void 0;
// Copyright © 2023 Tomoki Miyauchi. All rights reserved. MIT license.
// This module is browser compatible.
const dntShim = __importStar(require("./_dnt.shims.js"));
const deps_js_1 = require("./deps.js");
/** To flatten {@linkcode options}.
* @see https://dom.spec.whatwg.org/#concept-flatten-options
*/
function flatOptions(options) {
if ((0, deps_js_1.isBoolean)(options))
return options;
return Boolean(options?.capture);
}
exports.flatOptions = flatOptions;
/** To flatten {@linkcode options} more.
* @see https://dom.spec.whatwg.org/#event-flatten-more
*/
function flatOptionsMore(options) {
const capture = flatOptions(options);
const { once = false, passive = null, signal = null } = (0, deps_js_1.isObject)(options)
? options
: {};
return { capture, once, passive, signal };
}
exports.flatOptionsMore = flatOptionsMore;
/** Return default passive value.
* @see https://dom.spec.whatwg.org/#default-passive-value
*/
function defaultPassiveValue(type, target) {
if (!touchOrUiEvents.has(type))
return false;
if (isWindow(target))
return true;
if (!isNodeLike(target))
return false;
// target is Document
if (!target.ownerDocument) {
return target === Reflect.get(dntShim.dntGlobalThis, "document");
}
return ("documentElement" in target.ownerDocument &&
target.ownerDocument.documentElement === target || // target is HTML document
"body" in target.ownerDocument &&
target.ownerDocument.body === target); // target is body
}
exports.defaultPassiveValue = defaultPassiveValue;
const touchOrUiEvents = /*@__PURE__*/ new Set([
"touchstart",
"touchmove",
"wheel",
"mousewheel",
]);
/** Whether the {@linkcode input} is {@linkcode NodeLike} or not. */
function isNodeLike(input) {
return "ownerDocument" in input && typeof input.ownerDocument === "object";
}
exports.isNodeLike = isNodeLike;
/** Whether the {@linkcode input} is {@linkcode Window} or not.
* This works universally.
*/
function isWindow(input) {
return globalThis.Window && input instanceof globalThis.Window;
}
exports.isWindow = isWindow;
/** {@linkcode listener} to Function.
* if {@linkcode listener} is function, return it; otherwise return bound `handleEvent`.
*/
function toHandler(listener) {
return (0, deps_js_1.isFunction)(listener) ? listener : listener.handleEvent.bind(listener);
}
exports.toHandler = toHandler;
/** Return {@linkcode listener} representation key. */
function toKey(listener) {
return (0, deps_js_1.compositeKey)(listener.callback, listener.type, listener.capture);
}
exports.toKey = toKey;