just-event.js
Version:
Modern, lightweight event utility with jQuery-like API.
1 lines • 27.5 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../node_modules/is-what/dist/getType.js","../../node_modules/is-what/dist/isArray.js","../../node_modules/is-what/dist/isString.js","../../node_modules/is-what/dist/isFunction.js","../../node_modules/is-what/dist/isType.js","../../node_modules/is-what/dist/isInstanceOf.js","../../src/utils/index.js","../../node_modules/uuid/dist/esm-browser/stringify.js","../../node_modules/uuid/dist/esm-browser/rng.js","../../node_modules/uuid/dist/esm-browser/native.js","../../node_modules/uuid/dist/esm-browser/v4.js","../../src/event.js","../../src/index.js"],"sourcesContent":["/** Returns the object type of the given payload */\nexport function getType(payload) {\n return Object.prototype.toString.call(payload).slice(8, -1);\n}\n","import { getType } from './getType.js';\n/** Returns whether the payload is an array */\nexport function isArray(payload) {\n return getType(payload) === 'Array';\n}\n","import { getType } from './getType.js';\n/** Returns whether the payload is a string */\nexport function isString(payload) {\n return getType(payload) === 'String';\n}\n","/** Returns whether the payload is a function (regular or async) */\nexport function isFunction(payload) {\n return typeof payload === 'function';\n}\n","import { getType } from './getType.js';\n/**\n * Does a generic check to check that the given payload is of a given type. In cases like Number, it\n * will return true for NaN as NaN is a Number (thanks javascript!); It will, however, differentiate\n * between object and null\n *\n * @throws {TypeError} Will throw type error if type is an invalid type\n */\nexport function isType(payload, type) {\n if (!(type instanceof Function)) {\n throw new TypeError('Type must be a function');\n }\n if (!Object.prototype.hasOwnProperty.call(type, 'prototype')) {\n throw new TypeError('Type is not a class');\n }\n // Classes usually have names (as functions usually have names)\n const name = type.name;\n return getType(payload) === name || Boolean(payload && payload.constructor === type);\n}\n","import { getType } from './getType.js';\nimport { isType } from './isType.js';\nexport function isInstanceOf(value, classOrClassName) {\n if (typeof classOrClassName === 'function') {\n for (let p = value; p; p = Object.getPrototypeOf(p)) {\n if (isType(p, classOrClassName)) {\n return true;\n }\n }\n return false;\n }\n else {\n for (let p = value; p; p = Object.getPrototypeOf(p)) {\n if (getType(p) === classOrClassName) {\n return true;\n }\n }\n return false;\n }\n}\n","import { isArray, isInstanceOf, isString } from \"is-what\"\r\n\r\nexport default {\r\n // 处理传入的参数\r\n normalizeElements(selector) {\r\n if (isString(selector)) {\r\n return Array.from(document.querySelectorAll(selector))\r\n }\r\n\r\n if (this.isDomElement(selector)) {\r\n return [selector]\r\n }\r\n\r\n // 如果本身传递的就是Nodelist\r\n if (isInstanceOf(selector, \"NodeList\") || isArray(selector)) {\r\n return Array.from(selector).filter(this.isDomElement)\r\n }\r\n\r\n // 无效输入:返回空数组\r\n console.warn(\"Invalid selector:\", selector)\r\n return []\r\n },\r\n\r\n // 特殊的对象\r\n isDomElement(el) {\r\n return (\r\n isInstanceOf(el, \"HTMLElement\") ||\r\n isInstanceOf(el, \"Document\") ||\r\n isInstanceOf(el, \"Window\")\r\n )\r\n },\r\n\r\n closestUntil(el, selector, stopElm) {\r\n if (!el || !selector) return null\r\n\r\n while (el) {\r\n if (el.matches(selector)) return el\r\n if (el === stopElm || el === document.body) break\r\n el = el.parentElement\r\n }\r\n\r\n return null\r\n },\r\n}\r\n","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;\n","import { isFunction, isString, isUndefined } from \"is-what\"\r\nimport Utils from \"./utils\"\r\nimport { v4 as uuidv4 } from \"uuid\"\r\n\r\n// 用于存储所有事件监听器\r\nconst listenersMap = new Map()\r\n\r\nexport default class {\r\n // 命名空间分隔符\r\n #namespaceSeparator = \".\"\r\n\r\n // 事件名称保存的key值\r\n #eventNameKey = \"__eventName\"\r\n\r\n constructor(selector) {\r\n // 获取目标元素,可以是单个 DOM 元素或多个元素\r\n this.elements = Utils.normalizeElements(selector)\r\n }\r\n\r\n // 为元素和事件生成唯一键\r\n #getEventKey(el, eventName) {\r\n if (!el.__eventListenerUUID) {\r\n // 如果元素没有关联 UUID,则生成一个\r\n el.__eventListenerUUID = uuidv4()\r\n }\r\n return `${eventName}__${el.__eventListenerUUID}` // 唯一键格式:事件名 + UUID\r\n }\r\n\r\n // 获取事件类型\r\n #getRealEventType(eventName) {\r\n // click.app1、click 都只得到真正的事件类型 click\r\n return eventName.split(this.#namespaceSeparator)[0]\r\n }\r\n\r\n // 获取事件数组\r\n #getEvents(eventName) {\r\n return !isString(eventName) ? [] : eventName.trim().split(/\\s+/)\r\n }\r\n\r\n // 验证参数是否传递了类型为函数的listener\r\n #resolveArgs(selectorOrListener, listener) {\r\n const isDelegated = isString(selectorOrListener)\r\n listener = isDelegated ? listener : selectorOrListener\r\n\r\n if (!isFunction(listener)) return null\r\n\r\n return { isDelegated, listener }\r\n }\r\n\r\n // 清理事件\r\n #clean(el, eventName, eventKey, listeners) {\r\n for (const listener of listeners) {\r\n el.removeEventListener(this.#getRealEventType(eventName), listener)\r\n }\r\n listenersMap.delete(eventKey)\r\n }\r\n\r\n // 为事件绑定监听器,支持委托\r\n on(eventNames, selectorOrListener, listener) {\r\n const resolved = this.#resolveArgs(selectorOrListener, listener)\r\n if (!resolved) return this\r\n\r\n const { isDelegated } = resolved\r\n listener = resolved.listener\r\n\r\n for (const eventName of this.#getEvents(eventNames)) {\r\n for (const el of this.elements) {\r\n const eventKey = this.#getEventKey(el, eventName)\r\n\r\n const handler = (event) => {\r\n // 保持和JQuery相同的行为\r\n event.delegateTarget = el\r\n\r\n if (isDelegated) {\r\n const matchedTarget = Utils.closestUntil(\r\n event.target,\r\n selectorOrListener,\r\n el,\r\n )\r\n\r\n if (!matchedTarget) return\r\n\r\n // 保持和JQuery相同的行为\r\n Object.defineProperty(event, \"currentTarget\", {\r\n value: matchedTarget,\r\n })\r\n }\r\n\r\n // 保持和jQuery的行为相同,让trigger方法支持命名空间\r\n const triggerEventName = event[this.#eventNameKey]\r\n if (triggerEventName && !eventKey.startsWith(triggerEventName)) return\r\n\r\n listener.call(event.currentTarget, event)\r\n }\r\n\r\n if (!listenersMap.has(eventKey)) listenersMap.set(eventKey, [])\r\n listenersMap.get(eventKey).push(handler) // 缓存监听器\r\n\r\n el.addEventListener(this.#getRealEventType(eventName), handler) // 绑定事件\r\n }\r\n }\r\n\r\n return this\r\n }\r\n\r\n // 绑定一次性事件监听器\r\n one(eventNames, selectorOrListener, listener) {\r\n const resolved = this.#resolveArgs(selectorOrListener, listener)\r\n if (!resolved) return this\r\n\r\n const { isDelegated } = resolved\r\n listener = resolved.listener\r\n\r\n for (const eventName of this.#getEvents(eventNames)) {\r\n const onceHandler = (event) => {\r\n this.off(eventName) // 移除事件\r\n listener.call(event.currentTarget, event)\r\n }\r\n\r\n if (isDelegated) {\r\n this.on(eventName, selectorOrListener, onceHandler)\r\n } else {\r\n this.on(eventName, onceHandler)\r\n }\r\n }\r\n return this\r\n }\r\n\r\n // 移除事件监听器\r\n off(eventNames) {\r\n for (const eventName of this.#getEvents(eventNames)) {\r\n for (const el of this.elements) {\r\n // 传入的事件key\r\n const inputEventKey = this.#getEventKey(el, eventName) // 带命名空间的前缀\r\n\r\n if (eventName.startsWith(this.#namespaceSeparator)) {\r\n // 遍历事件映射,找出所有匹配命名空间的 key\r\n for (const [eventKey, listeners] of listenersMap) {\r\n eventKey.endsWith(inputEventKey) &&\r\n this.#clean(\r\n el,\r\n eventKey.replace(inputEventKey, \"\"), //直接得到没有命名空间的事件名\r\n eventKey,\r\n listeners,\r\n )\r\n }\r\n } else {\r\n // 事件+命名空间\r\n if (eventName.includes(this.#namespaceSeparator)) {\r\n const listeners = listenersMap.get(inputEventKey)\r\n listeners && this.#clean(el, eventName, inputEventKey, listeners)\r\n } else {\r\n // 只包含事件\r\n for (const [eventKey, listeners] of listenersMap) {\r\n eventKey.startsWith(eventName) &&\r\n this.#clean(el, eventName, eventKey, listeners)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return this\r\n }\r\n\r\n // 触发自定义事件,支持命名空间\r\n trigger(eventNames, detail = null) {\r\n for (const eventName of this.#getEvents(eventNames)) {\r\n const realEventName = this.#getRealEventType(eventName)\r\n for (const el of this.elements) {\r\n // 命名空间触发,如 click.app1\r\n if (eventName.includes(this.#namespaceSeparator)) {\r\n for (const [eventKey] of listenersMap) {\r\n if (eventKey.startsWith(eventName)) {\r\n const namespaceEvent = new CustomEvent(realEventName, {\r\n bubbles: true,\r\n detail,\r\n })\r\n\r\n // 记录该属性在on方法中根据此属性判断是否调用\r\n Object.defineProperty(namespaceEvent, this.#eventNameKey, {\r\n value: eventName,\r\n writable: false, // 不可写\r\n configurable: false, // 不可删除或重新定义\r\n enumerable: true, // 可枚举(可选)\r\n })\r\n // 让让支持冒泡,并传递当前的命名空间\r\n el.dispatchEvent(namespaceEvent)\r\n }\r\n }\r\n } else {\r\n // 仅事件类型触发,如 click,走原生 dispatch\r\n el.dispatchEvent(\r\n new CustomEvent(eventName, { bubbles: true, detail }),\r\n )\r\n }\r\n }\r\n }\r\n\r\n return this\r\n }\r\n}\r\n","import Event from \"./event.js\"\r\n\r\nconst $ = (selector) => {\r\n return new Event(selector)\r\n}\r\n\r\nconst on = (selector, ...args) => {\r\n return $(selector).on(...args)\r\n}\r\n\r\nconst one = (selector, ...args) => {\r\n return $(selector).one(...args)\r\n}\r\n\r\nconst off = (selector, ...args) => {\r\n return $(selector).off(...args)\r\n}\r\n\r\nconst trigger = (selector, ...args) => {\r\n return $(selector).trigger(...args)\r\n}\r\n\r\nexport { on, one, off, trigger }\r\n\r\nexport default $\r\n"],"names":["normalizeElements","selector","isString","Array","from","document","querySelectorAll","isDomElement","isInstanceOf","isArray","filter","console","warn","el","closestUntil","stopElm","matches","body","parentElement","listenersMap","Map","_namespaceSeparator","_classPrivateFieldLooseKey","_eventNameKey","_getEventKey","_getRealEventType","_getEvents","_resolveArgs","_clean","constructor","Object","defineProperty","value","_clean2","_resolveArgs2","_getEvents2","_getRealEventType2","_getEventKey2","writable","elements","Utils","on","eventNames","selectorOrListener","listener","resolved","_classPrivateFieldLooseBase","isDelegated","eventName","eventKey","handler","event","delegateTarget","matchedTarget","target","triggerEventName","startsWith","call","currentTarget","has","set","get","push","addEventListener","one","onceHandler","off","inputEventKey","listeners","endsWith","replace","includes","trigger","detail","realEventName","namespaceEvent","CustomEvent","bubbles","configurable","enumerable","dispatchEvent","__eventListenerUUID","uuidv4","split","trim","isFunction","removeEventListener","delete","$","Event","args"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,7,8,9,10]}