| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- 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;
|