diff options
Diffstat (limited to 'node_modules/cssnano/node_modules/autoprefixer/lib/prefixer.js')
| -rw-r--r-- | node_modules/cssnano/node_modules/autoprefixer/lib/prefixer.js | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/node_modules/cssnano/node_modules/autoprefixer/lib/prefixer.js b/node_modules/cssnano/node_modules/autoprefixer/lib/prefixer.js new file mode 100644 index 00000000..852cbef8 --- /dev/null +++ b/node_modules/cssnano/node_modules/autoprefixer/lib/prefixer.js @@ -0,0 +1,121 @@ +(function() { + var Browsers, Prefixer, clone, utils, vendor, + hasProp = {}.hasOwnProperty; + + Browsers = require('./browsers'); + + utils = require('./utils'); + + vendor = require('postcss/lib/vendor'); + + clone = function(obj, parent) { + var cloned, i, value; + cloned = new obj.constructor(); + for (i in obj) { + if (!hasProp.call(obj, i)) continue; + value = obj[i]; + if (i === 'parent' && typeof value === 'object') { + if (parent) { + cloned[i] = parent; + } + } else if (i === 'source') { + cloned[i] = value; + } else if (i === null) { + cloned[i] = value; + } else if (value instanceof Array) { + cloned[i] = value.map(function(i) { + return clone(i, cloned); + }); + } else if (i !== '_autoprefixerPrefix' && i !== '_autoprefixerValues') { + if (typeof value === 'object' && value !== null) { + value = clone(value, cloned); + } + cloned[i] = value; + } + } + return cloned; + }; + + Prefixer = (function() { + Prefixer.hack = function(klass) { + var j, len, name, ref, results; + this.hacks || (this.hacks = {}); + ref = klass.names; + results = []; + for (j = 0, len = ref.length; j < len; j++) { + name = ref[j]; + results.push(this.hacks[name] = klass); + } + return results; + }; + + Prefixer.load = function(name, prefixes, all) { + var klass, ref; + klass = (ref = this.hacks) != null ? ref[name] : void 0; + if (klass) { + return new klass(name, prefixes, all); + } else { + return new this(name, prefixes, all); + } + }; + + Prefixer.clone = function(node, overrides) { + var cloned, name; + cloned = clone(node); + for (name in overrides) { + cloned[name] = overrides[name]; + } + return cloned; + }; + + function Prefixer(name1, prefixes1, all1) { + this.name = name1; + this.prefixes = prefixes1; + this.all = all1; + } + + Prefixer.prototype.parentPrefix = function(node) { + var prefix; + prefix = node._autoprefixerPrefix != null ? node._autoprefixerPrefix : node.type === 'decl' && node.prop[0] === '-' ? vendor.prefix(node.prop) : node.type === 'root' ? false : node.type === 'rule' && node.selector.indexOf(':-') !== -1 && /:(-\w+-)/.test(node.selector) ? node.selector.match(/:(-\w+-)/)[1] : node.type === 'atrule' && node.name[0] === '-' ? vendor.prefix(node.name) : this.parentPrefix(node.parent); + if (Browsers.prefixes().indexOf(prefix) === -1) { + prefix = false; + } + return node._autoprefixerPrefix = prefix; + }; + + Prefixer.prototype.process = function(node) { + var added, j, k, len, len1, parent, prefix, prefixes, ref; + if (!this.check(node)) { + return; + } + parent = this.parentPrefix(node); + prefixes = []; + ref = this.prefixes; + for (j = 0, len = ref.length; j < len; j++) { + prefix = ref[j]; + if (parent && parent !== utils.removeNote(prefix)) { + continue; + } + prefixes.push(prefix); + } + added = []; + for (k = 0, len1 = prefixes.length; k < len1; k++) { + prefix = prefixes[k]; + if (this.add(node, prefix, added.concat([prefix]))) { + added.push(prefix); + } + } + return added; + }; + + Prefixer.prototype.clone = function(node, overrides) { + return Prefixer.clone(node, overrides); + }; + + return Prefixer; + + })(); + + module.exports = Prefixer; + +}).call(this); |
