UNPKG

animejs

Version:

JavaScript animation engine

117 lines (108 loc) 3.71 kB
/** * Anime.js - core - CJS * @version v4.3.6 * @license MIT * @copyright 2026 - Julian Garnier */ 'use strict'; var consts = require('./consts.cjs'); var helpers = require('./helpers.cjs'); /** * @import { * JSAnimation, * } from '../animation/animation.js' */ /** * @import { * Target, * DOMTarget, * Renderable, * Tween, * } from '../types/index.js' */ const propertyNamesCache = {}; /** * @param {String} propertyName * @param {Target} target * @param {tweenTypes} tweenType * @return {String} */ const sanitizePropertyName = (propertyName, target, tweenType) => { if (tweenType === consts.tweenTypes.TRANSFORM) { const t = consts.shortTransforms.get(propertyName); return t ? t : propertyName; } else if ( tweenType === consts.tweenTypes.CSS || // Handle special cases where properties like "strokeDashoffset" needs to be set as "stroke-dashoffset" // but properties like "baseFrequency" should stay in lowerCamelCase (tweenType === consts.tweenTypes.ATTRIBUTE && (helpers.isSvg(target) && propertyName in /** @type {DOMTarget} */(target).style)) ) { const cachedPropertyName = propertyNamesCache[propertyName]; if (cachedPropertyName) { return cachedPropertyName; } else { const lowerCaseName = propertyName ? helpers.toLowerCase(propertyName) : propertyName; propertyNamesCache[propertyName] = lowerCaseName; return lowerCaseName; } } else { return propertyName; } }; /** * @template {Renderable} T * @param {T} renderable * @return {T} */ const cleanInlineStyles = renderable => { // Allow cleanInlineStyles() to be called on timelines if (renderable._hasChildren) { helpers.forEachChildren(renderable, cleanInlineStyles, true); } else { const animation = /** @type {JSAnimation} */(renderable); animation.pause(); helpers.forEachChildren(animation, (/** @type {Tween} */tween) => { const tweenProperty = tween.property; const tweenTarget = tween.target; if (tweenTarget[consts.isDomSymbol]) { const targetStyle = /** @type {DOMTarget} */(tweenTarget).style; const originalInlinedValue = tween._inlineValue; const tweenHadNoInlineValue = helpers.isNil(originalInlinedValue) || originalInlinedValue === consts.emptyString; if (tween._tweenType === consts.tweenTypes.TRANSFORM) { const cachedTransforms = tweenTarget[consts.transformsSymbol]; if (tweenHadNoInlineValue) { delete cachedTransforms[tweenProperty]; } else { cachedTransforms[tweenProperty] = originalInlinedValue; } if (tween._renderTransforms) { if (!Object.keys(cachedTransforms).length) { targetStyle.removeProperty('transform'); } else { let str = consts.emptyString; for (let key in cachedTransforms) { str += consts.transformsFragmentStrings[key] + cachedTransforms[key] + ') '; } targetStyle.transform = str; } } } else { if (tweenHadNoInlineValue) { targetStyle.removeProperty(helpers.toLowerCase(tweenProperty)); } else { targetStyle[tweenProperty] = originalInlinedValue; } } if (animation._tail === tween) { animation.targets.forEach(t => { if (t.getAttribute && t.getAttribute('style') === consts.emptyString) { t.removeAttribute('style'); } }); } } }); } return renderable; }; exports.cleanInlineStyles = cleanInlineStyles; exports.sanitizePropertyName = sanitizePropertyName;