Skip to content

Commit

Permalink
Support plugin-specific target mode
Browse files Browse the repository at this point in the history
  • Loading branch information
adamwathan committed Apr 29, 2020
1 parent e5288ff commit 371a79f
Show file tree
Hide file tree
Showing 37 changed files with 180 additions and 92 deletions.
1 change: 1 addition & 0 deletions __tests__/plugins/divideWidth.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import plugin from '../../src/plugins/divideWidth'

test('generating divide width utilities', () => {
const config = {
target: 'relaxed',
theme: {
divideWidth: {
default: '1px',
Expand Down
1 change: 1 addition & 0 deletions __tests__/plugins/space.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import plugin from '../../src/plugins/space'

test('generating space utilities', () => {
const config = {
target: 'relaxed',
theme: {
space: {
'0': '0',
Expand Down
16 changes: 0 additions & 16 deletions __tests__/sanity.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,22 +52,6 @@ it('generates the right CSS when using @import instead of @tailwind', () => {
})
})

it('generates the right CSS in IE11 mode', () => {
const inputPath = path.resolve(`${__dirname}/fixtures/tailwind-input.css`)
const input = fs.readFileSync(inputPath, 'utf8')

return postcss([tailwind({ ...config, target: 'ie11' })])
.process(input, { from: inputPath })
.then(result => {
const expected = fs.readFileSync(
path.resolve(`${__dirname}/fixtures/tailwind-output-ie11.css`),
'utf8'
)

expect(result.css).toBe(expected)
})
})

it('does not add any CSS if no Tailwind features are used', () => {
return postcss([tailwind()])
.process('.foo { color: blue; }', { from: undefined })
Expand Down
83 changes: 83 additions & 0 deletions __tests__/targetMode.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
import fs from 'fs'
import path from 'path'
import _ from 'lodash'
import postcss from 'postcss'
import tailwind from '../src/index'
import config from '../stubs/defaultConfig.stub.js'
import processPlugins from '../src/util/processPlugins'

function css(nodes) {
return postcss.root({ nodes }).toString()
}

it('generates the right CSS in IE11 mode', () => {
const inputPath = path.resolve(`${__dirname}/fixtures/tailwind-input.css`)
const input = fs.readFileSync(inputPath, 'utf8')

return postcss([tailwind({ ...config, target: 'ie11' })])
.process(input, { from: inputPath })
.then(result => {
const expected = fs.readFileSync(
path.resolve(`${__dirname}/fixtures/tailwind-output-ie11.css`),
'utf8'
)

expect(result.css).toBe(expected)
})
})

test('plugins can request the target for a specific plugin key', () => {
const { utilities } = processPlugins(
[
function({ addUtilities, target }) {
addUtilities({
'.testA': {
target: target('testPluginA'),
},
})
},
function({ addUtilities, target }) {
addUtilities({
'.testB': {
target: target('testPluginB'),
},
})
},
function({ addUtilities, target }) {
addUtilities({
'.testC': {
target: target('testPluginC'),
},
})
},
],
{
...config,
target: [
'ie11',
{
testPluginA: 'modern',
testPluginB: 'relaxed',
},
],
}
)

expect(css(utilities)).toMatchCss(`
@variants {
.testA {
target: modern
}
}
@variants {
.testB {
target: relaxed
}
}
@variants {
.testC {
target: ie11
}
}
`)
})
9 changes: 9 additions & 0 deletions __tests__/util/invokePlugin.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,15 @@ export default function(plugin, config) {

return getConfigValue(`variants.${path}`, defaultValue)
},
target: path => {
if (_.isString(config.target)) {
return config.target
}

const [defaultTarget, targetOverrides] = getConfigValue('target')

return _.get(targetOverrides, path, defaultTarget)
},
addUtilities(utilities, variants) {
addedUtilities.push([utilities, variants])
},
Expand Down
4 changes: 2 additions & 2 deletions src/plugins/backgroundColor.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ import flattenColorPalette from '../util/flattenColorPalette'
import withAlphaVariable from '../util/withAlphaVariable'

export default function() {
return function({ addUtilities, e, theme, variants, config }) {
if (config('target') === 'ie11') {
return function({ addUtilities, e, theme, variants, target }) {
if (target('backgroundColor') === 'ie11') {
const utilities = _.fromPairs(
_.map(flattenColorPalette(theme('backgroundColor')), (value, modifier) => {
return [`.${e(`bg-${modifier}`)}`, { 'background-color': value }]
Expand Down
6 changes: 3 additions & 3 deletions src/plugins/backgroundOpacity.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import createUtilityPlugin from '../util/createUtilityPlugin'

export default function() {
return function({ config, ...args }) {
if (config('target') === 'ie11') {
return function({ target, ...args }) {
if (target('backgroundOpacity') === 'ie11') {
return
}

createUtilityPlugin('backgroundOpacity', [['bg-opacity', ['--bg-opacity']]])({
config,
target,
...args,
})
}
Expand Down
4 changes: 2 additions & 2 deletions src/plugins/borderColor.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ import flattenColorPalette from '../util/flattenColorPalette'
import withAlphaVariable from '../util/withAlphaVariable'

export default function() {
return function({ addUtilities, e, theme, variants, config }) {
if (config('target') === 'ie11') {
return function({ addUtilities, e, theme, variants, target }) {
if (target('borderColor') === 'ie11') {
const colors = flattenColorPalette(theme('borderColor'))

const utilities = _.fromPairs(
Expand Down
6 changes: 3 additions & 3 deletions src/plugins/borderOpacity.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import createUtilityPlugin from '../util/createUtilityPlugin'

export default function() {
return function({ config, ...args }) {
if (config('target') === 'ie11') {
return function({ target, ...args }) {
if (target('borderOpacity') === 'ie11') {
return
}

createUtilityPlugin('borderOpacity', [['border-opacity', ['--border-opacity']]])({
config,
target,
...args,
})
}
Expand Down
4 changes: 2 additions & 2 deletions src/plugins/display.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
export default function() {
return function({ addUtilities, variants, config }) {
return function({ addUtilities, variants, target }) {
addUtilities(
{
'.block': {
Expand Down Expand Up @@ -44,7 +44,7 @@ export default function() {
'.table-row': {
display: 'table-row',
},
...(config('target') === 'ie11'
...(target('display') === 'ie11'
? {}
: {
'.flow-root': {
Expand Down
4 changes: 2 additions & 2 deletions src/plugins/divideColor.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ import flattenColorPalette from '../util/flattenColorPalette'
import withAlphaVariable from '../util/withAlphaVariable'

export default function() {
return function({ addUtilities, e, theme, variants, config }) {
return function({ addUtilities, e, theme, variants, target }) {
const colors = flattenColorPalette(theme('divideColor'))

if (config('target') === 'ie11') {
if (target('divideColor') === 'ie11') {
const utilities = _.fromPairs(
_.map(_.omit(colors, 'default'), (value, modifier) => {
return [
Expand Down
4 changes: 2 additions & 2 deletions src/plugins/divideOpacity.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import _ from 'lodash'

export default function() {
return function({ addUtilities, e, theme, variants, config }) {
if (config('target') === 'ie11') {
return function({ addUtilities, e, theme, variants, target }) {
if (target('divideOpacity') === 'ie11') {
return
}

Expand Down
4 changes: 2 additions & 2 deletions src/plugins/divideWidth.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import _ from 'lodash'

export default function() {
return function({ addUtilities, e, theme, variants, config }) {
if (config('target') === 'ie11') {
return function({ addUtilities, e, theme, variants, target }) {
if (target('divideWidth') === 'ie11') {
const generators = [
(size, modifier) => ({
[`.${e(`divide-y${modifier}`)} > :not(template) ~ :not(template)`]: {
Expand Down
6 changes: 3 additions & 3 deletions src/plugins/gap.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import createUtilityPlugin from '../util/createUtilityPlugin'

export default function() {
return function({ config, ...args }) {
if (config('target') === 'ie11') {
return function({ target, ...args }) {
if (target('gap') === 'ie11') {
return
}

createUtilityPlugin('gap', [
['gap', ['gridGap', 'gap']],
['col-gap', ['gridColumnGap', 'columnGap']],
['row-gap', ['gridRowGap', 'rowGap']],
])({ config, ...args })
])({ target, ...args })
}
}
4 changes: 2 additions & 2 deletions src/plugins/gridAutoFlow.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
export default function() {
return function({ addUtilities, variants, config }) {
if (config('target') === 'ie11') {
return function({ addUtilities, variants, target }) {
if (target('gridAutoFlow') === 'ie11') {
return
}

Expand Down
6 changes: 3 additions & 3 deletions src/plugins/gridColumn.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import createUtilityPlugin from '../util/createUtilityPlugin'

export default function() {
return function({ config, ...args }) {
if (config('target') === 'ie11') {
return function({ target, ...args }) {
if (target('gridColumn') === 'ie11') {
return
}

createUtilityPlugin('gridColumn', [['col', ['gridColumn']]])({ config, ...args })
createUtilityPlugin('gridColumn', [['col', ['gridColumn']]])({ target, ...args })
}
}
6 changes: 3 additions & 3 deletions src/plugins/gridColumnEnd.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import createUtilityPlugin from '../util/createUtilityPlugin'

export default function() {
return function({ config, ...args }) {
if (config('target') === 'ie11') {
return function({ target, ...args }) {
if (target('gridColumnEnd') === 'ie11') {
return
}

createUtilityPlugin('gridColumnEnd', [['col-end', ['gridColumnEnd']]])({ config, ...args })
createUtilityPlugin('gridColumnEnd', [['col-end', ['gridColumnEnd']]])({ target, ...args })
}
}
6 changes: 3 additions & 3 deletions src/plugins/gridColumnStart.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import createUtilityPlugin from '../util/createUtilityPlugin'

export default function() {
return function({ config, ...args }) {
if (config('target') === 'ie11') {
return function({ target, ...args }) {
if (target('gridColumnStart') === 'ie11') {
return
}

createUtilityPlugin('gridColumnStart', [['col-start', ['gridColumnStart']]])({
config,
target,
...args,
})
}
Expand Down
6 changes: 3 additions & 3 deletions src/plugins/gridRow.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import createUtilityPlugin from '../util/createUtilityPlugin'

export default function() {
return function({ config, ...args }) {
if (config('target') === 'ie11') {
return function({ target, ...args }) {
if (target('gridRow') === 'ie11') {
return
}

createUtilityPlugin('gridRow', [['row', ['gridRow']]])({ config, ...args })
createUtilityPlugin('gridRow', [['row', ['gridRow']]])({ target, ...args })
}
}
6 changes: 3 additions & 3 deletions src/plugins/gridRowEnd.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import createUtilityPlugin from '../util/createUtilityPlugin'

export default function() {
return function({ config, ...args }) {
if (config('target') === 'ie11') {
return function({ target, ...args }) {
if (target('gridRowEnd') === 'ie11') {
return
}

createUtilityPlugin('gridRowEnd', [['row-end', ['gridRowEnd']]])({ config, ...args })
createUtilityPlugin('gridRowEnd', [['row-end', ['gridRowEnd']]])({ target, ...args })
}
}
6 changes: 3 additions & 3 deletions src/plugins/gridRowStart.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import createUtilityPlugin from '../util/createUtilityPlugin'

export default function() {
return function({ config, ...args }) {
if (config('target') === 'ie11') {
return function({ target, ...args }) {
if (target('gridRowStart') === 'ie11') {
return
}

createUtilityPlugin('gridRowStart', [['row-start', ['gridRowStart']]])({ config, ...args })
createUtilityPlugin('gridRowStart', [['row-start', ['gridRowStart']]])({ target, ...args })
}
}
6 changes: 3 additions & 3 deletions src/plugins/gridTemplateColumns.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import createUtilityPlugin from '../util/createUtilityPlugin'

export default function() {
return function({ config, ...args }) {
if (config('target') === 'ie11') {
return function({ target, ...args }) {
if (target('gridTemplateColumns') === 'ie11') {
return
}

createUtilityPlugin('gridTemplateColumns', [['grid-cols', ['gridTemplateColumns']]])({
config,
target,
...args,
})
}
Expand Down
6 changes: 3 additions & 3 deletions src/plugins/gridTemplateRows.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import createUtilityPlugin from '../util/createUtilityPlugin'

export default function() {
return function({ config, ...args }) {
if (config('target') === 'ie11') {
return function({ target, ...args }) {
if (target('gridTemplateRows') === 'ie11') {
return
}

createUtilityPlugin('gridTemplateRows', [['grid-rows', ['gridTemplateRows']]])({
config,
target,
...args,
})
}
Expand Down
Loading

0 comments on commit 371a79f

Please sign in to comment.