Add support for passing a function as the prefix

This commit is contained in:
Emil Tholin 2018-01-28 21:18:52 +01:00 • committed by Adam Wathan
parent cd2f855eee
commit 357c87376e
2 changed files with 28 additions and 1 deletions

View file

@ -16,3 +16,27 @@ test('it prefixes classes with the provided prefix', () => {
expect(result.css).toEqual(expected)
expect(result.warnings().length).toBe(0)
})
test('it handles a function as the prefix', () => {
const input = postcss.parse(`
.foo { color: red; }
.apple, .pear { color: green; }
`)
const expected = `
.tw-foo { color: red; }
.apple, .pear { color: green; }
`
const prefixFunc = selector => {
if (selector === '.foo') {
return 'tw-'
}
return ''
}
const result = applyClassPrefix(input, prefixFunc).toResult()
expect(result.css).toEqual(expected)
expect(result.warnings().length).toBe(0)
})

View file

@ -1,6 +1,9 @@
export default function(css, prefix) {
const prefixIsFunc = typeof prefix === 'function'
css.walkRules(rule => {
rule.selectors = rule.selectors.map(selector => `.${prefix}${selector.slice(1)}`)
rule.selectors = rule.selectors.map(
selector => `.${prefixIsFunc ? prefix(selector) : prefix}${selector.slice(1)}`
)
})
return css
}