lisn.js
Version:
Simply handle user gestures and actions. Includes widgets.
1 lines • 39.7 kB
Source Map (JSON)
{"version":3,"file":"dom-watcher.cjs","names":["MC","_interopRequireWildcard","require","MH","_dom","_domAlter","_domEvents","_log","_misc","_text","_validation","_callback","_xMap","_debug","_interopRequireDefault","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_defineProperty","_toPropertyKey","value","enumerable","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","DOMWatcher","create","config","getConfig","CONSTRUCTOR_KEY","reuse","_instances$get","myConfig","configStrKey","objToStrKey","omitKeys","_root","root","getBody","instance","instances","sGet","constructor","key","illegalConstructorError","logger","debug","Logger","name","logAtCreation","buffer","newXMap","_target","_categoryBitmask","_attributes","newSet","_addedTo","_removedFrom","allCallbacks","newMap","timer","mutationHandler","records","debug9","length","record","target","targetOf","recType","type","isElement","S_CHILD_LIST","child","addedNodes","operation","ADDED_BIT","removedNodes","REMOVED_BIT","S_ATTRIBUTES","attributeName","add","ATTRIBUTE_BIT","sizeOf","setTimer","size","values","shouldSkipOperation","debug10","processOperation","clear","observers","_observer","newMutationObserver","_isActive","createCallback","handler","options","_allCallbacks$get","remove","debug5","callback","wrapCallback","onRemove","deleteHandler","_options","setupOnMutation","userOptions","_config$_root","getOptions","waitForElement","isRemoved","activateObserver","skipInitial","_selector","childQueue","takeRecords","element","querySelectorAll","matches","initOperation","parentOf","bufferedOperation","diffOperation","getDiffOperation","invokeCallback","deleteKey","activeCategories","entry","deactivateObserver","categoryBitmask","selector","currentTargets","contains","push","lengthOf","mutationType","debug3","observe","subtree","_subtree","disconnect","_config$_root2","requestToSkip","getIgnoreMove","removedFrom","addedTo","requestFrom","from","requestTo","to","clearIgnoreMove","ignoreMove","onMutation","offMutation","_allCallbacks$get2","exports","SYMBOL","_config$root","_config$subtree","CATEGORIES_BITS","DOM_CATEGORIES_SPACE","bit","S_ADDED","S_REMOVED","S_ATTRIBUTE","_options$selector","_options$target","categories","validateStrList","cat","bitmask","isString","usageError","operationA","operationB","attributes","attr","currentTarget","invoke","catch","logError"],"sources":["../../../src/ts/watchers/dom-watcher.ts"],"sourcesContent":["/**\n * @module Watchers/DOMWatcher\n */\n\nimport * as MC from \"@lisn/globals/minification-constants\";\nimport * as MH from \"@lisn/globals/minification-helpers\";\n\nimport {\n MutationCategory,\n CommaSeparatedStr,\n AtLeastOne,\n} from \"@lisn/globals/types\";\n\nimport { DOM_CATEGORIES_SPACE } from \"@lisn/utils/dom\";\nimport {\n getIgnoreMove,\n clearIgnoreMove,\n ignoreMove,\n} from \"@lisn/utils/dom-alter\";\nimport { waitForElement } from \"@lisn/utils/dom-events\";\nimport { logError } from \"@lisn/utils/log\";\nimport { omitKeys } from \"@lisn/utils/misc\";\nimport { objToStrKey } from \"@lisn/utils/text\";\nimport { validateStrList } from \"@lisn/utils/validation\";\n\nimport {\n CallbackHandler,\n Callback,\n wrapCallback,\n} from \"@lisn/modules/callback\";\nimport { newXMap } from \"@lisn/modules/x-map\";\n\nimport debug from \"@lisn/debug/debug\";\n\n/**\n * {@link DOMWatcher} listens for changes do the DOM tree. It's built on top of\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver | MutationObserver}.\n *\n * It manages registered callbacks globally and reuses MutationObservers for\n * more efficient performance.\n *\n * Each instance of DOMWatcher manages up to two MutationObservers: one\n * for `childList` changes and one for attribute changes, and it disconnects\n * them when there are no active callbacks for the relevant type.\n *\n * `characterData` and changes to base\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/Node | Node}s\n * (non-{@link https://developer.mozilla.org/en-US/docs/Web/API/Element | Element})\n * are not supported.\n */\nexport class DOMWatcher {\n /**\n * Call the given handler whenever there's a matching mutation within this\n * DOMWatcher's {@link DOMWatcherConfig.root | root}.\n *\n * If {@link OnMutationOptions.skipInitial | options.skipInitial} is `false`\n * (default), _and_ {@link OnMutationOptions.selector | options.selector} is\n * given, _and_ {@link OnMutationOptions.categories | options.categories}\n * includes \"added\", the handler is also called (almost) immediately with all\n * existing elements matching the selector under this DOMWatcher's\n * {@link DOMWatcherConfig.root | root}.\n *\n * **IMPORTANT:** The same handler can _not_ be added multiple times, even if\n * the options differ. If the handler has already been added, it is removed\n * and re-added with the current options.\n *\n * @throws {@link Errors.LisnUsageError | LisnUsageError}\n * If the options are not valid.\n */\n readonly onMutation: (\n handler: OnMutationHandler,\n options?: OnMutationOptions,\n ) => Promise<void>;\n\n /**\n * Removes a previously added handler.\n */\n readonly offMutation: (handler: OnMutationHandler) => void;\n\n /**\n * Ignore an upcoming moving/adding/removing of an element.\n *\n * The operation must complete within the next cycle, by the time\n * MutationObserver calls us.\n *\n * Use this to prevent this instance of DOMWatcher from calling any callbacks\n * that listen for relevant changes as a result of this operation, to prevent\n * loops for example.\n *\n * **IMPORTANT:**\n *\n * Ignoring moving of an element from a parent _inside_ this DOMWatcher's\n * root to another parent that's _outside_ the root, will work as expected,\n * even though the \"adding to the new parent\" mutation will not be observed.\n * This is because the element's current parent at the time of the mutation\n * callback can be examined.\n *\n * However if you want to ignore moving of an element _from a parent outside\n * this DOMWatcher's root_ you need to specify from: null since the \"removal\n * from the old parent\" mutation would not be observed and there's no way to\n * examine it's previous parent at the time the \"adding to the new parent\"\n * mutation is observed.\n *\n * For this reason, setting `options.from` to be an element that's not under\n * the root is internally treated the same as `options.from: null`.\n */\n readonly ignoreMove: (target: Element, options: MoveOptions) => void;\n\n /**\n * Creates a new instance of DOMWatcher with the given\n * {@link DOMWatcherConfig}. It does not save it for future reuse.\n */\n static create(config?: DOMWatcherConfig) {\n return new DOMWatcher(getConfig(config), CONSTRUCTOR_KEY);\n }\n\n /**\n * Returns an existing instance of DOMWatcher with the given\n * {@link DOMWatcherConfig}, or creates a new one.\n *\n * **NOTE:** It saves it for future reuse, so don't use this for temporary\n * short-lived watchers.\n */\n static reuse(config?: DOMWatcherConfig) {\n const myConfig = getConfig(config);\n const configStrKey = objToStrKey(omitKeys(myConfig, { _root: null }));\n\n const root = myConfig._root === MH.getBody() ? null : myConfig._root;\n let instance = instances.get(root)?.get(configStrKey);\n if (!instance) {\n instance = new DOMWatcher(myConfig, CONSTRUCTOR_KEY);\n instances.sGet(root).set(configStrKey, instance);\n }\n\n return instance;\n }\n\n private constructor(\n config: DOMWatcherConfigInternal,\n key: typeof CONSTRUCTOR_KEY,\n ) {\n if (key !== CONSTRUCTOR_KEY) {\n throw MH.illegalConstructorError(\"DOMWatcher.create\");\n }\n\n const logger = debug\n ? new debug.Logger({ name: \"DOMWatcher\", logAtCreation: config })\n : null;\n\n const buffer = newXMap<Element, MutationOperationInternal>((t) => ({\n _target: t,\n _categoryBitmask: 0,\n _attributes: MH.newSet(),\n _addedTo: null,\n _removedFrom: null,\n }));\n\n const allCallbacks = MH.newMap<\n OnMutationHandler,\n {\n _callback: OnMutationCallback;\n _options: OnMutationOptionsInternal;\n }\n >();\n\n // ----------\n\n let timer: ReturnType<typeof setTimeout> | null = null;\n const mutationHandler = (records: MutationRecord[]) => {\n debug: logger?.debug9(`Got ${records.length} new records`, records);\n\n for (const record of records) {\n const target = MH.targetOf(record);\n const recType = record.type;\n\n /* istanbul ignore next */\n if (!MH.isElement(target)) {\n continue;\n }\n\n if (recType === MC.S_CHILD_LIST) {\n for (const child of record.addedNodes) {\n if (MH.isElement(child)) {\n const operation = buffer.sGet(child);\n operation._addedTo = target;\n operation._categoryBitmask |= ADDED_BIT;\n }\n }\n\n for (const child of record.removedNodes) {\n if (MH.isElement(child)) {\n const operation = buffer.sGet(child);\n operation._removedFrom = target;\n operation._categoryBitmask |= REMOVED_BIT;\n }\n }\n\n //\n } else if (recType === MC.S_ATTRIBUTES && record.attributeName) {\n const operation = buffer.sGet(target);\n operation._attributes.add(record.attributeName);\n operation._categoryBitmask |= ATTRIBUTE_BIT;\n }\n }\n\n // Schedule flushing of the buffer asynchronously so that we can combine\n // the records from the two MutationObservers.\n if (!timer && MH.sizeOf(buffer)) {\n timer = MH.setTimer(() => {\n debug: logger?.debug9(`Processing ${buffer.size} operations`);\n for (const operation of buffer.values()) {\n if (shouldSkipOperation(operation)) {\n debug: logger?.debug10(\"Skipping operation\", operation);\n } else {\n processOperation(operation);\n }\n }\n\n buffer.clear();\n timer = null;\n }, 0);\n }\n };\n\n const observers: Record<MutationType, MyObserver> = {\n [MC.S_CHILD_LIST]: {\n _observer: MH.newMutationObserver(mutationHandler),\n _isActive: false,\n },\n [MC.S_ATTRIBUTES]: {\n _observer: MH.newMutationObserver(mutationHandler),\n _isActive: false,\n },\n };\n\n // ----------\n\n const createCallback = (\n handler: OnMutationHandler,\n options: OnMutationOptionsInternal,\n ): OnMutationCallback => {\n MH.remove(allCallbacks.get(handler)?._callback);\n\n debug: logger?.debug5(\"Adding/updating handler\", options);\n const callback = wrapCallback(handler);\n callback.onRemove(() => deleteHandler(handler));\n\n allCallbacks.set(handler, { _callback: callback, _options: options });\n return callback;\n };\n\n // ----------\n\n const setupOnMutation = async (\n handler: OnMutationHandler,\n userOptions: OnMutationOptions | undefined,\n ) => {\n const options = getOptions(userOptions ?? {});\n const callback = createCallback(handler, options);\n\n let root = config._root ?? MH.getBody();\n if (!root) {\n root = await waitForElement(MH.getBody);\n } else {\n // So that the call is always async\n await null;\n }\n\n if (callback.isRemoved()) {\n return;\n }\n\n if (options._categoryBitmask & (ADDED_BIT | REMOVED_BIT)) {\n activateObserver(root, MC.S_CHILD_LIST);\n }\n\n if (options._categoryBitmask & ATTRIBUTE_BIT) {\n activateObserver(root, MC.S_ATTRIBUTES);\n }\n\n if (\n userOptions?.skipInitial ||\n !options._selector ||\n !(options._categoryBitmask & ADDED_BIT)\n ) {\n return;\n }\n\n // As some of the matching elements that currently exist in the root may\n // have just been added and therefore in the MutationObserver's queue, to\n // avoid calling the handler with those entries twice, we empty its queue\n // now and process it (which would also invoke the newly added callback).\n // Then we skip any elements returned in querySelectorAll that were in\n // the queue.\n\n const childQueue = observers[MC.S_CHILD_LIST]._observer.takeRecords();\n mutationHandler(childQueue);\n\n for (const element of [\n ...MH.querySelectorAll(root, options._selector),\n ...(root.matches(options._selector) ? [root] : []),\n ]) {\n const initOperation: MutationOperationInternal = {\n _target: element,\n _categoryBitmask: ADDED_BIT,\n _attributes: MH.newSet(),\n _addedTo: MH.parentOf(element),\n _removedFrom: null,\n };\n\n const bufferedOperation = buffer.get(element);\n const diffOperation = getDiffOperation(\n initOperation,\n bufferedOperation,\n );\n\n if (diffOperation) {\n if (shouldSkipOperation(diffOperation)) {\n debug: logger?.debug10(\"Skipping operation\", diffOperation);\n } else {\n debug: logger?.debug5(\"Calling initially with\", diffOperation);\n await invokeCallback(callback, diffOperation);\n }\n }\n }\n };\n\n // ----------\n\n const deleteHandler = (handler: OnMutationHandler) => {\n MH.deleteKey(allCallbacks, handler);\n\n let activeCategories = 0;\n for (const entry of allCallbacks.values()) {\n activeCategories |= entry._options._categoryBitmask;\n }\n\n if (!(activeCategories & (ADDED_BIT | REMOVED_BIT))) {\n deactivateObserver(MC.S_CHILD_LIST);\n }\n\n if (!(activeCategories & ATTRIBUTE_BIT)) {\n deactivateObserver(MC.S_ATTRIBUTES);\n }\n };\n\n // ----------\n\n const processOperation = (operation: MutationOperationInternal) => {\n debug: logger?.debug10(\"Processing operation\", operation);\n\n for (const entry of allCallbacks.values()) {\n const categoryBitmask = entry._options._categoryBitmask;\n const target = entry._options._target;\n const selector = entry._options._selector;\n\n if (!(operation._categoryBitmask & categoryBitmask)) {\n debug: logger?.debug10(`Category does not match: ${categoryBitmask}`);\n continue;\n }\n\n const currentTargets = [];\n if (target) {\n if (!operation._target.contains(target)) {\n debug: logger?.debug10(\"Target does not match\", target);\n continue;\n }\n\n currentTargets.push(target);\n }\n\n if (selector) {\n const matches = [...MH.querySelectorAll(operation._target, selector)];\n\n if (operation._target.matches(selector)) {\n matches.push(operation._target);\n }\n\n if (!MH.lengthOf(matches)) {\n debug: logger?.debug10(`Selector does not match: ${selector}`);\n continue;\n }\n\n currentTargets.push(...matches);\n }\n\n invokeCallback(entry._callback, operation, currentTargets);\n }\n };\n\n // ----------\n\n const activateObserver = (root: Element, mutationType: MutationType) => {\n if (!observers[mutationType]._isActive) {\n debug: logger?.debug3(\n `Activating mutation observer for '${mutationType}'`,\n );\n observers[mutationType]._observer.observe(root, {\n [mutationType]: true,\n subtree: config._subtree,\n });\n observers[mutationType]._isActive = true;\n }\n };\n\n // ----------\n\n const deactivateObserver = (mutationType: MutationType) => {\n if (observers[mutationType]._isActive) {\n debug: logger?.debug3(\n `Disconnecting mutation observer for '${mutationType}'`,\n );\n observers[mutationType]._observer.disconnect();\n observers[mutationType]._isActive = false;\n }\n };\n\n // ----------\n\n const shouldSkipOperation = (\n operation: MutationOperationInternal,\n ): boolean => {\n const target = operation._target;\n const requestToSkip = getIgnoreMove(target);\n if (!requestToSkip) {\n return false;\n }\n\n const removedFrom = operation._removedFrom;\n const addedTo = MH.parentOf(target);\n const requestFrom = requestToSkip.from;\n const requestTo = requestToSkip.to;\n\n const root = config._root ?? MH.getBody();\n // If \"from\" is currently outside our root, we may not have seen a\n // removal operation.\n if (\n (removedFrom === requestFrom || !root.contains(requestFrom)) &&\n addedTo === requestTo\n ) {\n clearIgnoreMove(target);\n return true;\n }\n\n return false;\n };\n\n // ----------\n\n this.ignoreMove = ignoreMove;\n\n // ----------\n\n this.onMutation = setupOnMutation;\n\n // ----------\n\n this.offMutation = (handler) => {\n debug: logger?.debug5(\"Removing handler\");\n MH.remove(allCallbacks.get(handler)?._callback);\n };\n }\n}\n\n/**\n * @interface\n */\nexport type DOMWatcherConfig = {\n /**\n * The root element to observe for changes.\n *\n * It cannot be overridden on a per-callback basis.\n *\n * @defaultValue document.body\n */\n root?: Element | null;\n\n /**\n * Whether to observe root's subtree for changes or just direct descendants.\n *\n * It cannot be overridden on a per-callback basis.\n *\n * @defaultValue true\n */\n subtree?: boolean;\n};\n\n/**\n * @interface\n */\nexport type OnMutationOptions = {\n /**\n * If this is given, then the handler would only be called for operations\n * where the target is _either_ the given element or an ancestor of it, i.e.\n * it {@link https://developer.mozilla.org/en-US/docs/Web/API/Node/contains | Node:contains} it.\n *\n * @defaultValue undefined\n */\n target?: Element;\n\n /**\n * If this is given, then the handler would only be called for operations\n * where the target matches the given selector _or contains an element\n * matching the given selector_.\n *\n * @defaultValue undefined\n */\n selector?: string;\n\n /**\n * Specifies a list of {@link MutationCategory}s to target for.\n *\n * If not given, then the handler is called for any of the supported\n * mutations.\n *\n * It can be a comma-separated list of category names or an array of such\n * names.\n *\n * @defaultValue undefined\n */\n categories?: CommaSeparatedStr<MutationCategory> | MutationCategory[];\n\n /**\n * Do not call the handler until there's a future matching mutation.\n *\n * By default, if `selector` is given, and `categories` includes `added`, we\n * call the handler (almost) immediately with all elements matching selector\n * relative to this DOMWatcher's root.\n *\n * The initial operation will contain just the element and\n * `addedTo: <current parent>`.\n *\n * @defaultValue false\n */\n skipInitial?: boolean;\n};\n\nexport type MoveOptions = AtLeastOne<{\n /**\n * If to is missing or null, it's a removal operation.\n */\n to: Element | null;\n\n /**\n * If from is missing or null, it's an insertion operation.\n */\n from: Element | null;\n}>;\n\nexport type MutationOperation = {\n /**\n * The target that was changed.\n */\n target: Element;\n\n /**\n * The target that the callback was interested in.\n *\n * If `selector` is given as part of {@link OnMutationOptions}, then\n * `currentTarget` will point to the target that matched the selector\n * starting at the operation's `target` as the root. If the operation's\n * `target` contains more than one element matching selector, the callback\n * will be called once for _each_ matching child.\n *\n * If `target` is given as part of {@link OnMutationOptions}, then\n * `currentTarget` will be that element.\n */\n currentTarget: Element;\n\n /**\n * The list of attributes that were changed in this round.\n */\n attributes: Set<string>;\n\n /**\n * The element that the target was added to, i.e. it's new parent. It is null\n * if the target was not moved to a new element _during this round_. It does\n * not mean that this is its current parent.\n */\n addedTo: Element | null;\n\n /**\n * The element that the target was removed from, i.e. it's old parent. It is\n * null if the target was not removed from a previous element _during this\n * round_. It does not mean it did not previously have a parent, but that its\n * removal was not observed.\n */\n removedFrom: Element | null;\n};\n\n/**\n * The handler is invoked with one argument:\n *\n * - a {@link MutationOperation} for a set of mutations related to a particular\n * element\n *\n * The handler could be invoked multiple times in each \"round\" (cycle of event\n * loop) if there are mutation operations for more than one element that match\n * the supplied {@link OnMutationOptions}.\n */\nexport type OnMutationHandlerArgs = [MutationOperation];\nexport type OnMutationCallback = Callback<OnMutationHandlerArgs>;\nexport type OnMutationHandler =\n | CallbackHandler<OnMutationHandlerArgs>\n | OnMutationCallback;\n\n// ----------------------------------------\n\ntype DOMWatcherConfigInternal = {\n _root: Element | null;\n _subtree: boolean;\n};\n\ntype OnMutationOptionsInternal = {\n _target: Element | null;\n _selector: string;\n _categoryBitmask: number;\n};\n\ntype MyObserver = {\n _observer: MutationObserver;\n _isActive: boolean;\n};\n\ntype MutationType = \"childList\" | \"attributes\";\n\ntype MutationOperationInternal = {\n _target: Element;\n _attributes: Set<string>;\n _addedTo: Element | null;\n _removedFrom: Element | null;\n _categoryBitmask: number;\n};\n\nconst CONSTRUCTOR_KEY: unique symbol = MC.SYMBOL() as typeof CONSTRUCTOR_KEY;\nconst instances = newXMap<Element | null, Map<string, DOMWatcher>>(() =>\n MH.newMap(),\n);\n\nconst getConfig = (\n config: DOMWatcherConfig | undefined,\n): DOMWatcherConfigInternal => {\n return {\n _root: config?.root ?? null,\n _subtree: config?.subtree ?? true,\n };\n};\n\nconst CATEGORIES_BITS = DOM_CATEGORIES_SPACE.bit;\nconst ADDED_BIT = CATEGORIES_BITS[MC.S_ADDED];\nconst REMOVED_BIT = CATEGORIES_BITS[MC.S_REMOVED];\nconst ATTRIBUTE_BIT = CATEGORIES_BITS[MC.S_ATTRIBUTE];\n\n// ----------------------------------------\n\nconst getOptions = (options: OnMutationOptions): OnMutationOptionsInternal => {\n let categoryBitmask = 0;\n const categories = validateStrList(\n \"categories\",\n options.categories,\n DOM_CATEGORIES_SPACE.has,\n );\n\n if (categories) {\n for (const cat of categories) {\n categoryBitmask |= CATEGORIES_BITS[cat];\n }\n } else {\n categoryBitmask = DOM_CATEGORIES_SPACE.bitmask; // default: all\n }\n\n const selector = options.selector ?? \"\";\n if (!MH.isString(selector)) {\n throw MH.usageError(\"'selector' must be a string\");\n }\n\n return {\n _categoryBitmask: categoryBitmask,\n _target: options.target ?? null,\n _selector: selector,\n };\n};\n\nconst getDiffOperation = (\n operationA: MutationOperationInternal,\n operationB: MutationOperationInternal | undefined,\n): MutationOperationInternal | null => {\n if (!operationB || operationA._target !== operationB._target) {\n return operationA;\n }\n\n const attributes = MH.newSet<string>();\n for (const attr of operationA._attributes) {\n if (!operationB._attributes.has(attr)) {\n attributes.add(attr);\n }\n }\n\n const categoryBitmask =\n operationA._categoryBitmask ^ operationB._categoryBitmask;\n\n const addedTo =\n operationA._addedTo === operationB._addedTo ? null : operationA._addedTo;\n\n const removedFrom =\n operationA._removedFrom === operationB._removedFrom\n ? null\n : operationA._removedFrom;\n\n if (!MH.sizeOf(attributes) && !categoryBitmask && !addedTo && !removedFrom) {\n return null;\n }\n\n return {\n _target: operationA._target,\n _categoryBitmask: categoryBitmask,\n _attributes: attributes,\n _addedTo: addedTo,\n _removedFrom: removedFrom,\n };\n};\n\nconst invokeCallback = (\n callback: OnMutationCallback,\n operation: MutationOperationInternal,\n currentTargets: Element[] = [],\n) => {\n if (!MH.lengthOf(currentTargets)) {\n currentTargets = [operation._target];\n }\n\n for (const currentTarget of currentTargets) {\n callback\n .invoke({\n target: operation._target,\n currentTarget,\n attributes: operation._attributes,\n addedTo: operation._addedTo,\n removedFrom: operation._removedFrom,\n })\n .catch(logError);\n }\n};\n"],"mappings":"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","ignoreList":[]}