UNPKG

animejs

Version:

JavaScript animation engine

137 lines (129 loc) 3.73 kB
/** * Anime.js - core - CJS * @version v4.3.6 * @license MIT * @copyright 2026 - Julian Garnier */ 'use strict'; var globals = require('./globals.cjs'); var consts = require('./consts.cjs'); var helpers = require('./helpers.cjs'); /** * @import { * DOMTarget, * DOMTargetsParam, * JSTargetsArray, * TargetsParam, * JSTargetsParam, * TargetsArray, * DOMTargetsArray, * } from '../types/index.js' */ /** * @param {DOMTargetsParam|TargetsParam} v * @return {NodeList|HTMLCollection} */ function getNodeList(v) { const n = helpers.isStr(v) ? globals.scope.root.querySelectorAll(v) : v; if (n instanceof NodeList || n instanceof HTMLCollection) return n; } /** * @overload * @param {DOMTargetsParam} targets * @return {DOMTargetsArray} * * @overload * @param {JSTargetsParam} targets * @return {JSTargetsArray} * * @overload * @param {TargetsParam} targets * @return {TargetsArray} * * @param {DOMTargetsParam|JSTargetsParam|TargetsParam} targets */ function parseTargets(targets) { if (helpers.isNil(targets)) return /** @type {TargetsArray} */([]); if (!consts.isBrowser) return /** @type {JSTargetsArray} */(helpers.isArr(targets) && targets.flat(Infinity) || [targets]); if (helpers.isArr(targets)) { const flattened = targets.flat(Infinity); /** @type {TargetsArray} */ const parsed = []; for (let i = 0, l = flattened.length; i < l; i++) { const item = flattened[i]; if (!helpers.isNil(item)) { const nodeList = getNodeList(item); if (nodeList) { for (let j = 0, jl = nodeList.length; j < jl; j++) { const subItem = nodeList[j]; if (!helpers.isNil(subItem)) { let isDuplicate = false; for (let k = 0, kl = parsed.length; k < kl; k++) { if (parsed[k] === subItem) { isDuplicate = true; break; } } if (!isDuplicate) { parsed.push(subItem); } } } } else { let isDuplicate = false; for (let j = 0, jl = parsed.length; j < jl; j++) { if (parsed[j] === item) { isDuplicate = true; break; } } if (!isDuplicate) { parsed.push(item); } } } } return parsed; } const nodeList = getNodeList(targets); if (nodeList) return /** @type {DOMTargetsArray} */(Array.from(nodeList)); return /** @type {TargetsArray} */([targets]); } /** * @overload * @param {DOMTargetsParam} targets * @return {DOMTargetsArray} * * @overload * @param {JSTargetsParam} targets * @return {JSTargetsArray} * * @overload * @param {TargetsParam} targets * @return {TargetsArray} * * @param {DOMTargetsParam|JSTargetsParam|TargetsParam} targets */ function registerTargets(targets) { const parsedTargetsArray = parseTargets(targets); const parsedTargetsLength = parsedTargetsArray.length; if (parsedTargetsLength) { for (let i = 0; i < parsedTargetsLength; i++) { const target = parsedTargetsArray[i]; if (!target[consts.isRegisteredTargetSymbol]) { target[consts.isRegisteredTargetSymbol] = true; const isSvgType = helpers.isSvg(target); const isDom = /** @type {DOMTarget} */(target).nodeType || isSvgType; if (isDom) { target[consts.isDomSymbol] = true; target[consts.isSvgSymbol] = isSvgType; target[consts.transformsSymbol] = {}; } } } } return parsedTargetsArray; } exports.getNodeList = getNodeList; exports.parseTargets = parseTargets; exports.registerTargets = registerTargets;