CoolFace
Apppublic

AK-21/Graphite-Industrial-Intelligence

sourceHugging Faceupdated 3mo agoView on Hugging Face
0likes
resolution.js98 linesDownload Raw Back to lib
1let FractionJs = require('fraction.js')2 3let Prefixer = require('./prefixer')4let utils = require('./utils')5 6const REGEXP = /(min|max)-resolution\s*:\s*\d*\.?\d+(dppx|dpcm|dpi|x)/gi7const SPLIT = /(min|max)-resolution(\s*:\s*)(\d*\.?\d+)(dppx|dpcm|dpi|x)/i8 9class Resolution extends Prefixer {10  /**11   * Remove prefixed queries12   */13  clean(rule) {14    if (!this.bad) {15      this.bad = []16      for (let prefix of this.prefixes) {17        this.bad.push(this.prefixName(prefix, 'min'))18        this.bad.push(this.prefixName(prefix, 'max'))19      }20    }21 22    rule.params = utils.editList(rule.params, queries => {23      return queries.filter(query => this.bad.every(i => !query.includes(i)))24    })25  }26 27  /**28   * Return prefixed query name29   */30  prefixName(prefix, name) {31    if (prefix === '-moz-') {32      return name + '--moz-device-pixel-ratio'33    } else {34      return prefix + name + '-device-pixel-ratio'35    }36  }37 38  /**39   * Return prefixed query40   */41  prefixQuery(prefix, name, colon, value, units) {42    value = new FractionJs(value)43 44    // 1dpcm = 2.54dpi45    // 1dppx = 96dpi46    if (units === 'dpi') {47      value = value.div(96)48    } else if (units === 'dpcm') {49      value = value.mul(2.54).div(96)50    }51    value = value.simplify()52 53    if (prefix === '-o-') {54      value = value.n + '/' + value.d55    }56    return this.prefixName(prefix, name) + colon + value57  }58 59  /**60   * Add prefixed queries61   */62  process(rule) {63    let parent = this.parentPrefix(rule)64    let prefixes = parent ? [parent] : this.prefixes65 66    rule.params = utils.editList(rule.params, (origin, prefixed) => {67      for (let query of origin) {68        if (69          !query.includes('min-resolution') &&70          !query.includes('max-resolution')71        ) {72          prefixed.push(query)73          continue74        }75 76        for (let prefix of prefixes) {77          let processed = query.replace(REGEXP, str => {78            let parts = str.match(SPLIT)79            return this.prefixQuery(80              prefix,81              parts[1],82              parts[2],83              parts[3],84              parts[4]85            )86          })87          prefixed.push(processed)88        }89        prefixed.push(query)90      }91 92      return utils.uniq(prefixed)93    })94  }95}96 97module.exports = Resolution98