(function() { var Browsers, Prefixer, utils, vendor; Browsers = require('./browsers'); vendor = require('postcss/lib/vendor'); utils = require('./utils'); Prefixer = (function() { Prefixer.hack = function(klass) { var name, _i, _len, _ref, _results; this.hacks || (this.hacks = {}); _ref = klass.names; _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { name = _ref[_i]; _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; cloned = node.clone(overrides); delete cloned._autoprefixerPrefix; delete cloned._autoprefixerValues; return cloned; }; function Prefixer(name, prefixes, all) { this.name = name; this.prefixes = prefixes; this.all = all; } 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 ? 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 parent, prefix, prefixes, _i, _j, _len, _len1, _ref; if (!this.check(node)) { return; } parent = this.parentPrefix(node); prefixes = []; _ref = this.prefixes; for (_i = 0, _len = _ref.length; _i < _len; _i++) { prefix = _ref[_i]; if (parent && parent !== utils.removeNote(prefix)) { continue; } prefixes.push(prefix); } for (_j = 0, _len1 = prefixes.length; _j < _len1; _j++) { prefix = prefixes[_j]; this.add(node, prefix, prefixes); } return prefixes; }; Prefixer.prototype.clone = function(node, overrides) { return Prefixer.clone(node, overrides); }; return Prefixer; })(); module.exports = Prefixer; }).call(this);