Refactor duplication to use generateVariantFunction

This commit is contained in:
Adam Wathan 2018-06-22 12:43:24 -04:00
parent d77bc055ee
commit 64cda2f44b
3 changed files with 21 additions and 28 deletions

View file

@ -1,22 +1,13 @@
import _ from 'lodash'
import postcss from 'postcss'
import buildSelectorVariant from '../util/buildSelectorVariant'
import generateVariantFunction from '../util/generateVariantFunction'
import processPlugins from '../util/processPlugins'
function buildPseudoClassVariant(selector, pseudoClass, separator) {
return `${buildSelectorVariant(selector, pseudoClass, separator)}:${pseudoClass}`
}
function generatePseudoClassVariant(pseudoClass) {
return (container, config) => {
const cloned = container.clone()
cloned.walkRules(rule => {
rule.selector = buildPseudoClassVariant(rule.selector, pseudoClass, config.options.separator)
})
container.before(cloned.nodes)
}
return generateVariantFunction(({ className, separator }) => {
return `.${pseudoClass}${separator}${className}:${pseudoClass}`
})
}
const defaultVariantGenerators = {

View file

@ -0,0 +1,16 @@
import escapeClassName from './escapeClassName'
export default function generateVariantFunction(generator) {
return (container, config) => {
const cloned = container.clone()
cloned.walkRules(rule => {
rule.selector = generator({
className: rule.selector.slice(1),
separator: escapeClassName(config.options.separator),
})
})
container.before(cloned.nodes)
}
}

View file

@ -2,6 +2,7 @@ import _ from 'lodash'
import postcss from 'postcss'
import Node from 'postcss/lib/node'
import escapeClassName from '../util/escapeClassName'
import generateVariantFunction from '../util/generateVariantFunction'
import parseObjectStyles from '../util/parseObjectStyles'
import prefixSelector from '../util/prefixSelector'
import wrapWithVariants from '../util/wrapWithVariants'
@ -14,21 +15,6 @@ function parseStyles(styles) {
return _.flatMap(styles, style => (style instanceof Node ? style : parseObjectStyles(style)))
}
function generateVariantFunction(generator) {
return (container, config) => {
const cloned = container.clone()
cloned.walkRules(rule => {
rule.selector = generator({
className: rule.selector.slice(1),
separator: escapeClassName(config.options.separator),
})
})
container.before(cloned.nodes)
}
}
export default function(config) {
const pluginComponents = []
const pluginUtilities = []