-
-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathindex.js
35 lines (33 loc) · 967 Bytes
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
function hasAlready(parent, selector) {
return parent.some(i => {
return i.type === 'rule' && i.selectors.includes(selector)
})
}
module.exports = (opts = {}) => {
let pseudoClass = opts.oldFocus ? ':focus' : ':focus-visible'
return {
postcssPlugin: 'postcss-focus',
Rule: rule => {
if (rule.selector.includes(':hover')) {
let focuses = []
for (let selector of rule.selectors) {
if (selector.includes(':hover')) {
let replaced = selector.replace(/:hover/g, pseudoClass)
if (!hasAlready(rule.parent, replaced)) {
focuses.push(replaced)
}
}
}
if (focuses.length) {
if (opts.splitRules === false) {
rule.selectors = rule.selectors.concat(focuses)
} else {
let clone = rule.cloneAfter()
clone.selectors = focuses
}
}
}
}
}
}
module.exports.postcss = true