UNPKG

1.39 kBJavaScriptView Raw
1class OldSelector {
2 constructor(selector, prefix) {
3 this.prefix = prefix
4 this.prefixed = selector.prefixed(this.prefix)
5 this.regexp = selector.regexp(this.prefix)
6
7 this.prefixeds = selector
8 .possible()
9 .map(x => [selector.prefixed(x), selector.regexp(x)])
10
11 this.unprefixed = selector.name
12 this.nameRegexp = selector.regexp()
13 }
14
15 /**
16 * Is rule a hack without unprefixed version bottom
17 */
18 isHack(rule) {
19 let index = rule.parent.index(rule) + 1
20 let rules = rule.parent.nodes
21
22 while (index < rules.length) {
23 let before = rules[index].selector
24 if (!before) {
25 return true
26 }
27
28 if (before.includes(this.unprefixed) && before.match(this.nameRegexp)) {
29 return false
30 }
31
32 let some = false
33 for (let [string, regexp] of this.prefixeds) {
34 if (before.includes(string) && before.match(regexp)) {
35 some = true
36 break
37 }
38 }
39
40 if (!some) {
41 return true
42 }
43
44 index += 1
45 }
46
47 return true
48 }
49
50 /**
51 * Does rule contain an unnecessary prefixed selector
52 */
53 check(rule) {
54 if (!rule.selector.includes(this.prefixed)) {
55 return false
56 }
57 if (!rule.selector.match(this.regexp)) {
58 return false
59 }
60 if (this.isHack(rule)) {
61 return false
62 }
63 return true
64 }
65}
66
67module.exports = OldSelector