123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- (function() {
- var Prefixes, Supports, Value, findCondition, findDecl, list, postcss, split, utils;
- Prefixes = require('./prefixes');
- Value = require('./value');
- utils = require('./utils');
- postcss = require('postcss');
- list = require('postcss/lib/list');
- split = /\(\s*([^\(\):]+)\s*:([^\)]+)/;
- findDecl = /\(\s*([^\(\):]+)\s*:\s*(.+)\s*\)/g;
- findCondition = /(not\s*)?\(\s*([^\(\):]+)\s*:\s*(.+?(?!\s*or\s*).+?)\s*\)*\s*\)\s*or\s*/gi;
- Supports = (function() {
- function Supports(_at_all) {
- this.all = _at_all;
- }
- Supports.prototype.virtual = function(prop, value) {
- var rule;
- rule = postcss.parse('a{}').first;
- rule.append({
- prop: prop,
- value: value,
- before: ''
- });
- return rule;
- };
- Supports.prototype.prefixed = function(prop, value) {
- var decl, prefixer, rule, _i, _j, _len, _len1, _ref, _ref1;
- rule = this.virtual(prop, value);
- prefixer = this.all.add[prop];
- if (prefixer != null) {
- if (typeof prefixer.process === "function") {
- prefixer.process(rule.first);
- }
- }
- _ref = rule.nodes;
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- decl = _ref[_i];
- _ref1 = this.all.values('add', prop);
- for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
- value = _ref1[_j];
- value.process(decl);
- }
- Value.save(this.all, decl);
- }
- return rule.nodes;
- };
- Supports.prototype.clean = function(params) {
- return params.replace(findCondition, (function(_this) {
- return function(all) {
- var check, checker, prop, unprefixed, value, _, _i, _len, _ref, _ref1, _ref2;
- if (all.slice(0, 3).toLowerCase() === 'not') {
- return all;
- }
- _ref = all.match(split), _ = _ref[0], prop = _ref[1], value = _ref[2];
- unprefixed = _this.all.unprefixed(prop);
- if ((_ref1 = _this.all.cleaner().remove[prop]) != null ? _ref1.remove : void 0) {
- check = new RegExp('(\\(|\\s)' + utils.escapeRegexp(unprefixed) + ':');
- if (check.test(params)) {
- return '';
- }
- }
- _ref2 = _this.all.cleaner().values('remove', unprefixed);
- for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
- checker = _ref2[_i];
- if (checker.check(value)) {
- return '';
- }
- }
- return all;
- };
- })(this)).replace(/\(\s*\((.*)\)\s*\)/g, '($1)');
- };
- Supports.prototype.process = function(rule) {
- rule.params = this.clean(rule.params);
- return rule.params = rule.params.replace(findDecl, (function(_this) {
- return function(all, prop, value) {
- var i, stringed;
- stringed = (function() {
- var _i, _len, _ref, _results;
- _ref = this.prefixed(prop, value);
- _results = [];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- i = _ref[_i];
- _results.push("(" + i.prop + ": " + i.value + ")");
- }
- return _results;
- }).call(_this);
- if (stringed.length === 1) {
- return stringed[0];
- } else {
- return '(' + stringed.join(' or ') + ')';
- }
- };
- })(this));
- };
- return Supports;
- })();
- module.exports = Supports;
- }).call(this);
|