From 64cda2f44b7360f4460086820c15cf0828894388 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Fri, 22 Jun 2018 12:43:24 -0400 Subject: [PATCH] Refactor duplication to use generateVariantFunction --- src/lib/substituteVariantsAtRules.js | 17 ++++------------- src/util/generateVariantFunction.js | 16 ++++++++++++++++ src/util/processPlugins.js | 16 +--------------- 3 files changed, 21 insertions(+), 28 deletions(-) create mode 100644 src/util/generateVariantFunction.js diff --git a/src/lib/substituteVariantsAtRules.js b/src/lib/substituteVariantsAtRules.js index 33f1f944b..2d12d1b86 100644 --- a/src/lib/substituteVariantsAtRules.js +++ b/src/lib/substituteVariantsAtRules.js @@ -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 = { diff --git a/src/util/generateVariantFunction.js b/src/util/generateVariantFunction.js new file mode 100644 index 000000000..dff63acfe --- /dev/null +++ b/src/util/generateVariantFunction.js @@ -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) + } +} diff --git a/src/util/processPlugins.js b/src/util/processPlugins.js index c8665f8c9..bc7dd6bdb 100644 --- a/src/util/processPlugins.js +++ b/src/util/processPlugins.js @@ -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 = []