blob: 791b89f7e0cd6e1e26793cd27a6f1a6e5b742562 [file] [log] [blame]
/* @flow */
"use strict";
const getUnitFromValueNode = require("./getUnitFromValueNode");
const isStandardSyntaxValue = require("./isStandardSyntaxValue");
const isVariable = require("./isVariable");
const keywordSets = require("../reference/keywordSets");
const postcssValueParser = require("postcss-value-parser");
/**
* Get the font-families within a `font` shorthand property value.
*/
module.exports = function findAnimationName(
value /*: string*/
) /*: Array<Object>*/ {
const animationNames = [];
const valueNodes = postcssValueParser(value);
// Handle `inherit`, `initial` and etc
if (
valueNodes.nodes.length === 1 &&
keywordSets.basicKeywords.has(valueNodes.nodes[0].value.toLowerCase())
) {
return [valueNodes.nodes[0]];
}
valueNodes.walk(valueNode => {
if (valueNode.type === "function") {
return false;
}
if (valueNode.type !== "word") {
return;
}
const valueLowerCase = valueNode.value.toLowerCase();
// Ignore non standard syntax
if (!isStandardSyntaxValue(valueLowerCase)) {
return;
}
// Ignore variables
if (isVariable(valueLowerCase)) {
return;
}
// Ignore keywords for other font parts
if (keywordSets.animationShorthandKeywords.has(valueLowerCase)) {
return;
}
// Ignore numbers with units
const unit = getUnitFromValueNode(valueNode);
if (unit || unit === "") {
return;
}
animationNames.push(valueNode);
});
return animationNames;
};