aboutsummaryrefslogtreecommitdiff
path: root/node_modules/cssnano/node_modules/autoprefixer/lib/prefixer.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/cssnano/node_modules/autoprefixer/lib/prefixer.js')
-rw-r--r--node_modules/cssnano/node_modules/autoprefixer/lib/prefixer.js121
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);