Spaces:
Paused
Paused
| import generate from 'css-tree/generator'; | |
| import { calculate, calculateForAST } from './core/index.js'; | |
| import { compare, equals, greaterThan, lessThan } from './util/compare.js'; | |
| import { min, max } from './util/filter.js'; | |
| import { sortAsc, sortDesc } from './util/sort.js'; | |
| class NotAllowedError extends Error { | |
| constructor() { | |
| super('Manipulating a Specificity instance is not allowed. Instead, create a new Specificity()'); | |
| } | |
| } | |
| class Specificity { | |
| constructor(value, selector = null) { | |
| this.value = value; | |
| this.selector = selector; | |
| } | |
| get a() { | |
| return this.value.a; | |
| } | |
| set a(val) { | |
| throw new NotAllowedError(); | |
| } | |
| get b() { | |
| return this.value.b; | |
| } | |
| set b(val) { | |
| throw new NotAllowedError(); | |
| } | |
| get c() { | |
| return this.value.c; | |
| } | |
| set c(val) { | |
| throw new NotAllowedError(); | |
| } | |
| selectorString() { | |
| // this.selector already is a String | |
| if (typeof this.selector === 'string' || this.selector instanceof String) { | |
| return this.selector; | |
| } | |
| // this.selector is a Selector as parsed by CSSTree | |
| if (this.selector instanceof Object) { | |
| if (this.selector.type === 'Selector') { | |
| return generate(this.selector); | |
| } | |
| } | |
| // this.selector is something else … | |
| return ''; | |
| } | |
| toObject() { | |
| return this.value; | |
| } | |
| toArray() { | |
| return [this.value.a, this.value.b, this.value.c]; | |
| } | |
| toString() { | |
| return `(${this.value.a},${this.value.b},${this.value.c})`; | |
| } | |
| toJSON() { | |
| return { | |
| selector: this.selectorString(), | |
| asObject: this.toObject(), | |
| asArray: this.toArray(), | |
| asString: this.toString(), | |
| }; | |
| } | |
| isEqualTo(otherSpecificity) { | |
| return equals(this, otherSpecificity); | |
| } | |
| isGreaterThan(otherSpecificity) { | |
| return greaterThan(this, otherSpecificity); | |
| } | |
| isLessThan(otherSpecificity) { | |
| return lessThan(this, otherSpecificity); | |
| } | |
| static calculate(selector) { | |
| return calculate(selector); | |
| } | |
| static calculateForAST(selector) { | |
| return calculateForAST(selector); | |
| } | |
| static compare(s1, s2) { | |
| return compare(s1, s2); | |
| } | |
| static equals(s1, s2) { | |
| return equals(s1, s2); | |
| } | |
| static lessThan(s1, s2) { | |
| return lessThan(s1, s2); | |
| } | |
| static greaterThan(s1, s2) { | |
| return greaterThan(s1, s2); | |
| } | |
| static min(...specificities) { | |
| return min(...specificities); | |
| } | |
| static max(...specificities) { | |
| return max(...specificities); | |
| } | |
| static sortAsc(...specificities) { | |
| return sortAsc(...specificities); | |
| } | |
| static sortDesc(...specificities) { | |
| return sortDesc(...specificities); | |
| } | |
| } | |
| export default Specificity; | |