CoolFace
Apppublic

AK-21/Graphite-Industrial-Intelligence

sourceHugging Faceupdated 3mo agoView on Hugging Face
0likes
value.js126 linesDownload Raw Back to lib
1let OldValue = require('./old-value')2let Prefixer = require('./prefixer')3let utils = require('./utils')4let vendor = require('./vendor')5 6class Value extends Prefixer {7  /**8   * Clone decl for each prefixed values9   */10  static save(prefixes, decl) {11    let prop = decl.prop12    let result = []13 14    for (let prefix in decl._autoprefixerValues) {15      let value = decl._autoprefixerValues[prefix]16 17      if (value === decl.value) {18        continue19      }20 21      let item22      let propPrefix = vendor.prefix(prop)23 24      if (propPrefix === '-pie-') {25        continue26      }27 28      if (propPrefix === prefix) {29        item = decl.value = value30        result.push(item)31        continue32      }33 34      let prefixed = prefixes.prefixed(prop, prefix)35      let rule = decl.parent36 37      if (!rule.every(i => i.prop !== prefixed)) {38        result.push(item)39        continue40      }41 42      let trimmed = value.replace(/\s+/, ' ')43      let already = rule.some(44        i => i.prop === decl.prop && i.value.replace(/\s+/, ' ') === trimmed45      )46 47      if (already) {48        result.push(item)49        continue50      }51 52      let cloned = this.clone(decl, { value })53      item = decl.parent.insertBefore(decl, cloned)54 55      result.push(item)56    }57 58    return result59  }60 61  /**62   * Save values with next prefixed token63   */64  add(decl, prefix) {65    if (!decl._autoprefixerValues) {66      decl._autoprefixerValues = {}67    }68    let value = decl._autoprefixerValues[prefix] || this.value(decl)69 70    let before71    do {72      before = value73      value = this.replace(value, prefix)74      if (value === false) return75    } while (value !== before)76 77    decl._autoprefixerValues[prefix] = value78  }79 80  /**81   * Is declaration need to be prefixed82   */83  check(decl) {84    let value = decl.value85    if (!value.includes(this.name)) {86      return false87    }88 89    return !!value.match(this.regexp())90  }91 92  /**93   * Return function to fast find prefixed value94   */95  old(prefix) {96    return new OldValue(this.name, prefix + this.name)97  }98 99  /**100   * Lazy regexp loading101   */102  regexp() {103    return this.regexpCache || (this.regexpCache = utils.regexp(this.name))104  }105 106  /**107   * Add prefix to values in string108   */109  replace(string, prefix) {110    return string.replace(this.regexp(), `$1${prefix}$2`)111  }112 113  /**114   * Get value with comments if it was not changed115   */116  value(decl) {117    if (decl.raws.value && decl.raws.value.value === decl.value) {118      return decl.raws.value.raw119    } else {120      return decl.value121    }122  }123}124 125module.exports = Value126