123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- (function() {
- var Browsers, Declaration, Prefixer, utils, vendor,
- extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
- hasProp = {}.hasOwnProperty;
-
- Prefixer = require('./prefixer');
-
- Browsers = require('./browsers');
-
- vendor = require('postcss/lib/vendor');
-
- utils = require('./utils');
-
- Declaration = (function(superClass) {
- extend(Declaration, superClass);
-
- function Declaration() {
- return Declaration.__super__.constructor.apply(this, arguments);
- }
-
- Declaration.prototype.check = function(decl) {
- return true;
- };
-
- Declaration.prototype.prefixed = function(prop, prefix) {
- return prefix + prop;
- };
-
- Declaration.prototype.normalize = function(prop) {
- return prop;
- };
-
- Declaration.prototype.otherPrefixes = function(value, prefix) {
- var j, len, other, ref;
- ref = Browsers.prefixes();
- for (j = 0, len = ref.length; j < len; j++) {
- other = ref[j];
- if (other === prefix) {
- continue;
- }
- if (value.indexOf(other) !== -1) {
- return true;
- }
- }
- return false;
- };
-
- Declaration.prototype.set = function(decl, prefix) {
- decl.prop = this.prefixed(decl.prop, prefix);
- return decl;
- };
-
- Declaration.prototype.needCascade = function(decl) {
- return decl._autoprefixerCascade || (decl._autoprefixerCascade = this.all.options.cascade !== false && decl.style('before').indexOf('\n') !== -1);
- };
-
- Declaration.prototype.maxPrefixed = function(prefixes, decl) {
- var j, len, max, prefix;
- if (decl._autoprefixerMax) {
- return decl._autoprefixerMax;
- }
- max = 0;
- for (j = 0, len = prefixes.length; j < len; j++) {
- prefix = prefixes[j];
- prefix = utils.removeNote(prefix);
- if (prefix.length > max) {
- max = prefix.length;
- }
- }
- return decl._autoprefixerMax = max;
- };
-
- Declaration.prototype.calcBefore = function(prefixes, decl, prefix) {
- var before, diff, i, j, max, ref;
- if (prefix == null) {
- prefix = '';
- }
- before = decl.style('before');
- max = this.maxPrefixed(prefixes, decl);
- diff = max - utils.removeNote(prefix).length;
- for (i = j = 0, ref = diff; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {
- before += ' ';
- }
- return before;
- };
-
- Declaration.prototype.restoreBefore = function(decl) {
- var lines, min;
- lines = decl.style('before').split("\n");
- min = lines[lines.length - 1];
- this.all.group(decl).up(function(prefixed) {
- var array, last;
- array = prefixed.style('before').split("\n");
- last = array[array.length - 1];
- if (last.length < min.length) {
- return min = last;
- }
- });
- lines[lines.length - 1] = min;
- return decl.before = lines.join("\n");
- };
-
- Declaration.prototype.insert = function(decl, prefix, prefixes) {
- var cloned;
- cloned = this.set(this.clone(decl), prefix);
- if (!cloned) {
- return;
- }
- if (this.needCascade(decl)) {
- cloned.before = this.calcBefore(prefixes, decl, prefix);
- }
- return decl.parent.insertBefore(decl, cloned);
- };
-
- Declaration.prototype.add = function(decl, prefix, prefixes) {
- var already, prefixed;
- prefixed = this.prefixed(decl.prop, prefix);
- already = this.all.group(decl).up(function(i) {
- return i.prop === prefixed;
- });
- already || (already = this.all.group(decl).down(function(i) {
- return i.prop === prefixed;
- }));
- if (already || this.otherPrefixes(decl.value, prefix)) {
- return;
- }
- return this.insert(decl, prefix, prefixes);
- };
-
- Declaration.prototype.process = function(decl) {
- var prefixes;
- if (this.needCascade(decl)) {
- prefixes = Declaration.__super__.process.apply(this, arguments);
- if (prefixes != null ? prefixes.length : void 0) {
- this.restoreBefore(decl);
- return decl.before = this.calcBefore(prefixes, decl);
- }
- } else {
- return Declaration.__super__.process.apply(this, arguments);
- }
- };
-
- Declaration.prototype.old = function(prop, prefix) {
- return [this.prefixed(prop, prefix)];
- };
-
- return Declaration;
-
- })(Prefixer);
-
- module.exports = Declaration;
-
- }).call(this);
|