Skip to content

Commit

Permalink
Make solution more proper and easier to reason about
Browse files Browse the repository at this point in the history
  • Loading branch information
fanich37 committed Oct 13, 2019
1 parent d3099c6 commit 820c3de
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 57 deletions.
47 changes: 16 additions & 31 deletions lib/selector.js
@@ -1,4 +1,4 @@
let list = require('postcss').list
let { list } = require('postcss')

let OldSelector = require('./old-selector')
let Prefixer = require('./prefixer')
Expand Down Expand Up @@ -55,42 +55,27 @@ class Selector extends Prefixer {
*/
prefixeds (rule) {
if (rule._autoprefixerPrefixeds) {
return rule._autoprefixerPrefixeds
if (rule._autoprefixerPrefixeds[this.name]) {
return rule._autoprefixerPrefixeds
}
} else {
rule._autoprefixerPrefixeds = {}
}

let prefixeds = {}

if (rule.selector.includes(',')) {
let separatedRule = list.comma(rule.selector)

this.all.add.selectors.forEach(selector => {
let name = selector.name
let selToProc = separatedRule.filter(el => el.includes(name))

if (selToProc.length) {
let possible = selector.possible()
prefixeds[name] = {}

possible.forEach(prefix => {
if (selToProc.length > 1) {
prefixeds[name][prefix] = selToProc
.map(sel => selector.replace(sel, prefix))
.join(', ')
} else {
prefixeds[name][prefix] = selector.replace(selToProc[0], prefix)
}
})
}
})
} else {
prefixeds[this.name] = {}

for (let prefix of this.possible()) {
prefixeds[this.name][prefix] = this.replace(rule.selector, prefix)
for (let prefix of this.possible()) {
if (rule.selector.includes(',')) {
let ruleParts = list.comma(rule.selector)
let toProcess = ruleParts.filter(el => el.includes(this.name))
prefixeds[prefix] = toProcess
.map(el => this.replace(el, prefix))
.join(', ')
} else {
prefixeds[prefix] = this.replace(rule.selector, prefix)
}
}

rule._autoprefixerPrefixeds = prefixeds
rule._autoprefixerPrefixeds[this.name] = prefixeds
return rule._autoprefixerPrefixeds
}

Expand Down
32 changes: 6 additions & 26 deletions test/selector.test.js
@@ -1,32 +1,10 @@
let agents = require('caniuse-lite').agents
let parse = require('postcss').parse

let Browsers = require('../lib/browsers')
let Prefixes = require('../lib/prefixes')
let Selector = require('../lib/selector')

let data = {
browsers: agents,
prefixes: {
'::selection': {
selector: true,
browsers: ['firefox 21', 'firefox 20 old', 'chrome 30', 'ie 6']
},
':read-only': {
selector: true,
browsers: ['ie 7', 'firefox 20']
}
}
}

let fill = new Prefixes(
data.prefixes,
new Browsers(data.browsers, ['firefox 21', 'ie 7'])
)

let selector
beforeEach(() => {
selector = new Selector('::selection', ['-moz-', '-ms-'], fill)
selector = new Selector('::selection', ['-moz-', '-ms-'])
})

describe('prefixed()', () => {
Expand Down Expand Up @@ -60,10 +38,12 @@ describe('check()', () => {
})

describe('prefixeds()', () => {
it('returns all available prefixed selectors for grouping rule', () => {
it('grouping rule gets correct _autoprefixerPrefixeds property', () => {
let css = parse('.c::selection, .d:read-only {}')
let rSel = new Selector(':read-only', ['-moz-'], fill)
expect(rSel.prefixeds(css.first)).toEqual({
let rSel = new Selector(':read-only', ['-moz-'])
selector.prefixeds(css.first)
rSel.prefixeds(css.first)
expect(css.first._autoprefixerPrefixeds).toEqual({
'::selection': {
'-webkit-': '.c::-webkit-selection',
'-moz-': '.c::-moz-selection',
Expand Down

0 comments on commit 820c3de

Please sign in to comment.