mirror of
https://github.com/thangisme/notes.git
synced 2024-09-27 08:15:56 -04:00
50 lines
1.3 KiB
JavaScript
50 lines
1.3 KiB
JavaScript
/* @flow */
|
|
"use strict"
|
|
|
|
const isStandardSyntaxValue = require("./isStandardSyntaxValue")
|
|
const isVariable = require("./isVariable")
|
|
const keywordSets = require("../reference/keywordSets")
|
|
const postcssValueParser = require("postcss-value-parser")
|
|
|
|
/**
|
|
* Get the list-style-type within a `list-style` shorthand property value.
|
|
*/
|
|
module.exports = function findListStyleType(value/*: string*/)/*: Array<Object>*/ {
|
|
const listStyleTypes = []
|
|
|
|
const valueNodes = postcssValueParser(value)
|
|
|
|
// Handle `inherit`, `initial` and etc
|
|
if (valueNodes.nodes.length === 1 && keywordSets.listStyleTypeKeywords.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.listStylePositionKeywords.has(valueLowerCase) || keywordSets.listStyleImageKeywords.has(valueLowerCase)) {
|
|
return
|
|
}
|
|
|
|
listStyleTypes.push(valueNode)
|
|
})
|
|
|
|
return listStyleTypes
|
|
}
|