12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- class OldSelector {
- constructor(selector, prefix) {
- this.prefix = prefix
- this.prefixed = selector.prefixed(this.prefix)
- this.regexp = selector.regexp(this.prefix)
- this.prefixeds = selector
- .possible()
- .map(x => [selector.prefixed(x), selector.regexp(x)])
- this.unprefixed = selector.name
- this.nameRegexp = selector.regexp()
- }
- /**
- * Does rule contain an unnecessary prefixed selector
- */
- check(rule) {
- if (!rule.selector.includes(this.prefixed)) {
- return false
- }
- if (!rule.selector.match(this.regexp)) {
- return false
- }
- if (this.isHack(rule)) {
- return false
- }
- return true
- }
- /**
- * Is rule a hack without unprefixed version bottom
- */
- isHack(rule) {
- let index = rule.parent.index(rule) + 1
- let rules = rule.parent.nodes
- while (index < rules.length) {
- let before = rules[index].selector
- if (!before) {
- return true
- }
- if (before.includes(this.unprefixed) && before.match(this.nameRegexp)) {
- return false
- }
- let some = false
- for (let [string, regexp] of this.prefixeds) {
- if (before.includes(string) && before.match(regexp)) {
- some = true
- break
- }
- }
- if (!some) {
- return true
- }
- index += 1
- }
- return true
- }
- }
- module.exports = OldSelector
|