Skip to content

Commit 798d2cc

Browse files
authored
Merge pull request tailwindlabs#235 from dumconstantin/master
[0.3] Make a configurable separator (default ':')
2 parents b696cbc + 013f845 commit 798d2cc

8 files changed

+48
-30
lines changed

__tests__/focusableAtRule.test.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import postcss from 'postcss'
22
import plugin from '../src/lib/substituteFocusableAtRules'
3+
import config from '../defaultConfig.stub.js'
34

4-
function run(input, opts = () => {}) {
5+
const separator = config.options.separator
6+
7+
function run(input, opts = () => config) {
58
return postcss([plugin(opts)]).process(input)
69
}
710

@@ -16,8 +19,8 @@ test('it adds a focusable variant to each nested class definition', () => {
1619
const output = `
1720
.banana { color: yellow; }
1821
.chocolate { color: brown; }
19-
.focus\\:banana:focus { color: yellow; }
20-
.focus\\:chocolate:focus { color: brown; }
22+
.focus${separator}banana:focus { color: yellow; }
23+
.focus${separator}chocolate:focus { color: brown; }
2124
`
2225

2326
return run(input).then(result => {

__tests__/hoverableAtRule.test.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import postcss from 'postcss'
22
import plugin from '../src/lib/substituteHoverableAtRules'
3+
import config from '../defaultConfig.stub.js'
34

4-
function run(input, opts = () => {}) {
5+
const separator = config.options.separator
6+
7+
function run(input, opts = () => config) {
58
return postcss([plugin(opts)]).process(input)
69
}
710

@@ -16,8 +19,8 @@ test('it adds a hoverable variant to each nested class definition', () => {
1619
const output = `
1720
.banana { color: yellow; }
1821
.chocolate { color: brown; }
19-
.hover\\:banana:hover { color: yellow; }
20-
.hover\\:chocolate:hover { color: brown; }
22+
.hover${separator}banana:hover { color: yellow; }
23+
.hover${separator}chocolate:hover { color: brown; }
2124
`
2225

2326
return run(input).then(result => {

__tests__/variantsAtRule.test.js

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import postcss from 'postcss'
22
import plugin from '../src/lib/substituteVariantsAtRules'
3+
import config from '../defaultConfig.stub.js'
34

4-
function run(input, opts = () => {}) {
5+
const separator = config.options.separator
6+
7+
function run(input, opts = () => config) {
58
return postcss([plugin(opts)]).process(input)
69
}
710

@@ -16,8 +19,8 @@ test('it can generate hover variants', () => {
1619
const output = `
1720
.banana { color: yellow; }
1821
.chocolate { color: brown; }
19-
.hover\\:banana:hover { color: yellow; }
20-
.hover\\:chocolate:hover { color: brown; }
22+
.hover${separator}banana:hover { color: yellow; }
23+
.hover${separator}chocolate:hover { color: brown; }
2124
`
2225

2326
return run(input).then(result => {
@@ -37,8 +40,8 @@ test('it can generate focus variants', () => {
3740
const output = `
3841
.banana { color: yellow; }
3942
.chocolate { color: brown; }
40-
.focus\\:banana:focus { color: yellow; }
41-
.focus\\:chocolate:focus { color: brown; }
43+
.focus${separator}banana:focus { color: yellow; }
44+
.focus${separator}chocolate:focus { color: brown; }
4245
`
4346

4447
return run(input).then(result => {
@@ -58,10 +61,10 @@ test('it can generate hover and focus variants', () => {
5861
const output = `
5962
.banana { color: yellow; }
6063
.chocolate { color: brown; }
61-
.focus\\:banana:focus { color: yellow; }
62-
.focus\\:chocolate:focus { color: brown; }
63-
.hover\\:banana:hover { color: yellow; }
64-
.hover\\:chocolate:hover { color: brown; }
64+
.focus${separator}banana:focus { color: yellow; }
65+
.focus${separator}chocolate:focus { color: brown; }
66+
.hover${separator}banana:hover { color: yellow; }
67+
.hover${separator}chocolate:hover { color: brown; }
6568
`
6669

6770
return run(input).then(result => {
@@ -82,10 +85,10 @@ test('it wraps the output in a responsive at-rule if responsive is included as a
8285
@responsive {
8386
.banana { color: yellow; }
8487
.chocolate { color: brown; }
85-
.focus\\:banana:focus { color: yellow; }
86-
.focus\\:chocolate:focus { color: brown; }
87-
.hover\\:banana:hover { color: yellow; }
88-
.hover\\:chocolate:hover { color: brown; }
88+
.focus${separator}banana:focus { color: yellow; }
89+
.focus${separator}chocolate:focus { color: brown; }
90+
.hover${separator}banana:hover { color: yellow; }
91+
.hover${separator}chocolate:hover { color: brown; }
8992
}
9093
`
9194

defaultConfig.stub.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -828,6 +828,7 @@ module.exports = {
828828

829829
options: {
830830
prefix: '',
831+
separator: '\\:',
831832
important: false,
832833
},
833834

src/lib/substituteFocusableAtRules.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
export default function() {
1+
export default function(config) {
22
return function(css) {
3+
const separator = config().options.separator
34
css.walkAtRules('focusable', atRule => {
45
const clonedRule = atRule.clone()
56

67
clonedRule.walkRules(rule => {
78
// Might be wise to error if the rule has multiple selectors,
89
// or weird compound selectors like .bg-blue>p>h1
9-
rule.selector = `.focus\\:${rule.selector.slice(1)}:focus`
10+
rule.selector = `.focus${separator}${rule.selector.slice(1)}:focus`
1011
})
1112

1213
atRule.before(atRule.clone().nodes)

src/lib/substituteHoverableAtRules.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
export default function() {
1+
export default function(config) {
22
return function(css) {
3+
const separator = config().options.separator
34
css.walkAtRules('hoverable', atRule => {
45
const clonedRule = atRule.clone()
56

67
clonedRule.walkRules(rule => {
78
// Might be wise to error if the rule has multiple selectors,
89
// or weird compound selectors like .bg-blue>p>h1
9-
rule.selector = `.hover\\:${rule.selector.slice(1)}:hover`
10+
rule.selector = `.hover${separator}${rule.selector.slice(1)}:hover`
1011
})
1112

1213
atRule.before(atRule.clone().nodes)

src/lib/substituteResponsiveAtRules.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import buildMediaQuery from '../util/buildMediaQuery'
66
export default function(config) {
77
return function(css) {
88
const screens = config().screens
9+
const separator = config().options.separator
910
const responsiveRules = []
1011
let finalRules = []
1112

@@ -25,7 +26,10 @@ export default function(config) {
2526
mediaQuery.append(
2627
responsiveRules.map(rule => {
2728
const cloned = rule.clone()
28-
cloned.selectors = _.map(rule.selectors, selector => `.${screen}\\:${selector.slice(1)}`)
29+
cloned.selectors = _.map(
30+
rule.selectors,
31+
selector => `.${screen}${separator}${selector.slice(1)}`
32+
)
2933
return cloned
3034
})
3135
)

src/lib/substituteVariantsAtRules.js

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,29 @@ import _ from 'lodash'
22
import postcss from 'postcss'
33

44
const variantGenerators = {
5-
hover: container => {
5+
hover: (separator, container) => {
66
const cloned = container.clone()
77

88
cloned.walkRules(rule => {
9-
rule.selector = `.hover\\:${rule.selector.slice(1)}:hover`
9+
rule.selector = `.hover${separator}${rule.selector.slice(1)}:hover`
1010
})
1111

1212
return cloned.nodes
1313
},
14-
focus: container => {
14+
focus: (separator, container) => {
1515
const cloned = container.clone()
1616

1717
cloned.walkRules(rule => {
18-
rule.selector = `.focus\\:${rule.selector.slice(1)}:focus`
18+
rule.selector = `.focus${separator}${rule.selector.slice(1)}:focus`
1919
})
2020

2121
return cloned.nodes
2222
},
2323
}
2424

25-
export default function() {
25+
export default function(config) {
26+
const separator = config().options.separator
27+
2628
return function(css) {
2729
css.walkAtRules('variants', atRule => {
2830
const variants = postcss.list.comma(atRule.params)
@@ -37,7 +39,7 @@ export default function() {
3739

3840
_.forEach(['focus', 'hover'], variant => {
3941
if (variants.includes(variant)) {
40-
atRule.before(variantGenerators[variant](atRule))
42+
atRule.before(variantGenerators[variant](separator, atRule))
4143
}
4244
})
4345

0 commit comments

Comments
 (0)