1 | class 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 |
|
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 |
|
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 |
|
67 | module.exports = OldSelector
|