123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- (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;
- if (typeof obj !== 'object') {
- return obj;
- }
- 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 (value instanceof Array) {
- cloned[i] = value.map(function(i) {
- return clone(i, cloned);
- });
- } else if (i !== '_autoprefixerPrefix' && i !== '_autoprefixerValues') {
- cloned[i] = clone(value, cloned);
- }
- }
- return cloned;
- };
- 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, name;
- cloned = clone(node);
- for (name in overrides) {
- cloned[name] = overrides[name];
- }
- return cloned;
- };
- function Prefixer(_at_name, _at_prefixes, _at_all) {
- this.name = _at_name;
- this.prefixes = _at_prefixes;
- this.all = _at_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 added, 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);
- }
- added = [];
- for (_j = 0, _len1 = prefixes.length; _j < _len1; _j++) {
- prefix = prefixes[_j];
- 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);
|