animejs
Version:
JavaScript animation engine
117 lines (108 loc) • 3.71 kB
JavaScript
/**
* Anime.js - core - CJS
* @version v4.3.6
* @license MIT
* @copyright 2026 - Julian Garnier
*/
;
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;