BVB Source Codes

reactide Show processor.js Source code

Return Download reactide: download processor.js Source code - Download reactide Source code - Type:.js
  1. (function() {
  2.   var OLD_DIRECTION, Processor, SIZES, Value, utils, vendor;
  3.  
  4.   vendor = require('postcss/lib/vendor');
  5.  
  6.   Value = require('./value');
  7.  
  8.   utils = require('./utils');
  9.  
  10.   OLD_DIRECTION = /(^|[^-])(linear|radial)-gradient\(\s*(top|left|right|bottom)/i;
  11.  
  12.   SIZES = ['width', 'height', 'min-width', 'max-width', 'min-height', 'max-height', 'inline-size', 'min-inline-size', 'max-inline-size', 'block-size', 'min-block-size', 'max-block-size'];
  13.  
  14.   Processor = (function() {
  15.     function Processor(prefixes) {
  16.       this.prefixes = prefixes;
  17.     }
  18.  
  19.     Processor.prototype.add = function(css, result) {
  20.       var keyframes, resolution, supports, viewport;
  21.       resolution = this.prefixes.add['@resolution'];
  22.       keyframes = this.prefixes.add['@keyframes'];
  23.       viewport = this.prefixes.add['@viewport'];
  24.       supports = this.prefixes.add['@supports'];
  25.       css.walkAtRules((function(_this) {
  26.         return function(rule) {
  27.           if (rule.name === 'keyframes') {
  28.             if (!_this.disabled(rule)) {
  29.               return keyframes != null ? keyframes.process(rule) : void 0;
  30.             }
  31.           } else if (rule.name === 'viewport') {
  32.             if (!_this.disabled(rule)) {
  33.               return viewport != null ? viewport.process(rule) : void 0;
  34.             }
  35.           } else if (rule.name === 'supports') {
  36.             if (_this.prefixes.options.supports !== false && !_this.disabled(rule)) {
  37.               return supports.process(rule);
  38.             }
  39.           } else if (rule.name === 'media' && rule.params.indexOf('-resolution') !== -1) {
  40.             if (!_this.disabled(rule)) {
  41.               return resolution != null ? resolution.process(rule) : void 0;
  42.             }
  43.           }
  44.         };
  45.       })(this));
  46.       css.walkRules((function(_this) {
  47.         return function(rule) {
  48.           var j, len, ref, results, selector;
  49.           if (_this.disabled(rule)) {
  50.             return;
  51.           }
  52.           ref = _this.prefixes.add.selectors;
  53.           results = [];
  54.           for (j = 0, len = ref.length; j < len; j++) {
  55.             selector = ref[j];
  56.             results.push(selector.process(rule, result));
  57.           }
  58.           return results;
  59.         };
  60.       })(this));
  61.       css.walkDecls((function(_this) {
  62.         return function(decl) {
  63.           var display, prefixer;
  64.           if (_this.disabled(decl)) {
  65.             return;
  66.           }
  67.           if (decl.prop === 'display' && decl.value === 'box') {
  68.             result.warn('You should write display: flex by final spec ' + 'instead of display: box', {
  69.               node: decl
  70.             });
  71.             return;
  72.           }
  73.           if (decl.value.indexOf('linear-gradient') !== -1) {
  74.             if (OLD_DIRECTION.test(decl.value)) {
  75.               result.warn('Gradient has outdated direction syntax. ' + 'New syntax is like `to left` instead of `right`.', {
  76.                 node: decl
  77.               });
  78.             }
  79.           }
  80.           if (decl.prop === 'text-emphasis-position') {
  81.             if (decl.value === 'under' || decl.value === 'over') {
  82.               result.warn('You should use 2 values for text-emphasis-position ' + 'For example, `under left` instead of just `under`.', {
  83.                 node: decl
  84.               });
  85.             }
  86.           }
  87.           if (SIZES.indexOf(decl.prop) !== -1) {
  88.             if (decl.value.indexOf('fill-available') !== -1) {
  89.               result.warn('Replace fill-available to stretch, ' + 'because spec had been changed', {
  90.                 node: decl
  91.               });
  92.             } else if (decl.value.indexOf('fill') !== -1) {
  93.               result.warn('Replace fill to stretch, because spec had been changed', {
  94.                 node: decl
  95.               });
  96.             }
  97.           }
  98.           if (_this.prefixes.options.flexbox !== false) {
  99.             if (decl.prop === 'grid-row-end' && decl.value.indexOf('span') === -1) {
  100.               result.warn('IE supports only grid-row-end with span. ' + 'You should add grid: false option to Autoprefixer ' + 'and use some JS grid polyfill for full spec support', {
  101.                 node: decl
  102.               });
  103.             }
  104.             if (decl.prop === 'grid-row') {
  105.               if (decl.value.indexOf('/') !== -1 && decl.value.indexOf('span') === -1) {
  106.                 result.warn('IE supports only grid-row with / and span. ' + 'You should add grid: false option to Autoprefixer ' + 'and use some JS grid polyfill for full spec support', {
  107.                   node: decl
  108.                 });
  109.               }
  110.             }
  111.           }
  112.           if (decl.prop === 'transition' || decl.prop === 'transition-property') {
  113.             return _this.prefixes.transition.add(decl, result);
  114.           } else if (decl.prop === 'align-self') {
  115.             display = _this.displayType(decl);
  116.             if (display !== 'grid' && _this.prefixes.options.flexbox !== false) {
  117.               prefixer = _this.prefixes.add['align-self'];
  118.               if (prefixer && prefixer.prefixes) {
  119.                 prefixer.process(decl);
  120.               }
  121.             }
  122.             if (display !== 'flex' && _this.prefixes.options.grid !== false) {
  123.               prefixer = _this.prefixes.add['grid-row-align'];
  124.               if (prefixer && prefixer.prefixes) {
  125.                 return prefixer.process(decl);
  126.               }
  127.             }
  128.           } else {
  129.             prefixer = _this.prefixes.add[decl.prop];
  130.             if (prefixer && prefixer.prefixes) {
  131.               return prefixer.process(decl);
  132.             }
  133.           }
  134.         };
  135.       })(this));
  136.       return css.walkDecls((function(_this) {
  137.         return function(decl) {
  138.           var j, len, ref, unprefixed, value;
  139.           if (_this.disabled(decl)) {
  140.             return;
  141.           }
  142.           unprefixed = _this.prefixes.unprefixed(decl.prop);
  143.           ref = _this.prefixes.values('add', unprefixed);
  144.           for (j = 0, len = ref.length; j < len; j++) {
  145.             value = ref[j];
  146.             value.process(decl, result);
  147.           }
  148.           return Value.save(_this.prefixes, decl);
  149.         };
  150.       })(this));
  151.     };
  152.  
  153.     Processor.prototype.remove = function(css) {
  154.       var checker, j, len, ref, resolution;
  155.       resolution = this.prefixes.remove['@resolution'];
  156.       css.walkAtRules((function(_this) {
  157.         return function(rule, i) {
  158.           if (_this.prefixes.remove['@' + rule.name]) {
  159.             if (!_this.disabled(rule)) {
  160.               return rule.parent.removeChild(i);
  161.             }
  162.           } else if (rule.name === 'media' && rule.params.indexOf('-resolution') !== -1) {
  163.             return resolution != null ? resolution.clean(rule) : void 0;
  164.           }
  165.         };
  166.       })(this));
  167.       ref = this.prefixes.remove.selectors;
  168.       for (j = 0, len = ref.length; j < len; j++) {
  169.         checker = ref[j];
  170.         css.walkRules((function(_this) {
  171.           return function(rule, i) {
  172.             if (checker.check(rule)) {
  173.               if (!_this.disabled(rule)) {
  174.                 return rule.parent.removeChild(i);
  175.               }
  176.             }
  177.           };
  178.         })(this));
  179.       }
  180.       return css.walkDecls((function(_this) {
  181.         return function(decl, i) {
  182.           var k, len1, notHack, ref1, ref2, rule, unprefixed;
  183.           if (_this.disabled(decl)) {
  184.             return;
  185.           }
  186.           rule = decl.parent;
  187.           unprefixed = _this.prefixes.unprefixed(decl.prop);
  188.           if (decl.prop === 'transition' || decl.prop === 'transition-property') {
  189.             _this.prefixes.transition.remove(decl);
  190.           }
  191.           if ((ref1 = _this.prefixes.remove[decl.prop]) != null ? ref1.remove : void 0) {
  192.             notHack = _this.prefixes.group(decl).down(function(other) {
  193.               return _this.prefixes.normalize(other.prop) === unprefixed;
  194.             });
  195.             if (unprefixed === 'flex-flow') {
  196.               notHack = true;
  197.             }
  198.             if (notHack && !_this.withHackValue(decl)) {
  199.               if (decl.raw('before').indexOf("\n") > -1) {
  200.                 _this.reduceSpaces(decl);
  201.               }
  202.               rule.removeChild(i);
  203.               return;
  204.             }
  205.           }
  206.           ref2 = _this.prefixes.values('remove', unprefixed);
  207.           for (k = 0, len1 = ref2.length; k < len1; k++) {
  208.             checker = ref2[k];
  209.             if (checker.check(decl.value)) {
  210.               unprefixed = checker.unprefixed;
  211.               notHack = _this.prefixes.group(decl).down(function(other) {
  212.                 return other.value.indexOf(unprefixed) !== -1;
  213.               });
  214.               if (notHack) {
  215.                 rule.removeChild(i);
  216.                 return;
  217.               } else if (checker.clean) {
  218.                 checker.clean(decl);
  219.                 return;
  220.               }
  221.             }
  222.           }
  223.         };
  224.       })(this));
  225.     };
  226.  
  227.     Processor.prototype.withHackValue = function(decl) {
  228.       return decl.prop === '-webkit-background-clip' && decl.value === 'text';
  229.     };
  230.  
  231.     Processor.prototype.disabled = function(node) {
  232.       var other, status;
  233.       if (this.prefixes.options.grid === false && node.type === 'decl') {
  234.         if (node.prop === 'display' && node.value.indexOf('grid') !== -1) {
  235.           return true;
  236.         }
  237.         if (node.prop.indexOf('grid') !== -1 || node.prop === 'justify-items') {
  238.           return true;
  239.         }
  240.       }
  241.       if (this.prefixes.options.flexbox === false && node.type === 'decl') {
  242.         if (node.prop === 'display' && node.value.indexOf('flex') !== -1) {
  243.           return true;
  244.         }
  245.         other = ['order', 'justify-content', 'align-items', 'align-content'];
  246.         if (node.prop.indexOf('flex') !== -1 || other.indexOf(node.prop) !== -1) {
  247.           return true;
  248.         }
  249.       }
  250.       if (node._autoprefixerDisabled != null) {
  251.         return node._autoprefixerDisabled;
  252.       } else if (node.nodes) {
  253.         status = void 0;
  254.         node.each(function(i) {
  255.           if (i.type !== 'comment') {
  256.             return;
  257.           }
  258.           if (/(!\s*)?autoprefixer:\s*off/i.test(i.text)) {
  259.             status = false;
  260.             return false;
  261.           } else if (/(!\s*)?autoprefixer:\s*on/i.test(i.text)) {
  262.             status = true;
  263.             return false;
  264.           }
  265.         });
  266.         return node._autoprefixerDisabled = status != null ? !status : node.parent ? this.disabled(node.parent) : false;
  267.       } else if (node.parent) {
  268.         return node._autoprefixerDisabled = this.disabled(node.parent);
  269.       } else {
  270.         return false;
  271.       }
  272.     };
  273.  
  274.     Processor.prototype.reduceSpaces = function(decl) {
  275.       var diff, parts, prevMin, stop;
  276.       stop = false;
  277.       this.prefixes.group(decl).up(function(other) {
  278.         return stop = true;
  279.       });
  280.       if (stop) {
  281.         return;
  282.       }
  283.       parts = decl.raw('before').split("\n");
  284.       prevMin = parts[parts.length - 1].length;
  285.       diff = false;
  286.       return this.prefixes.group(decl).down(function(other) {
  287.         var last;
  288.         parts = other.raw('before').split("\n");
  289.         last = parts.length - 1;
  290.         if (parts[last].length > prevMin) {
  291.           if (diff === false) {
  292.             diff = parts[last].length - prevMin;
  293.           }
  294.           parts[last] = parts[last].slice(0, -diff);
  295.           return other.raws.before = parts.join("\n");
  296.         }
  297.       });
  298.     };
  299.  
  300.     Processor.prototype.displayType = function(decl) {
  301.       var i, j, len, ref;
  302.       ref = decl.parent.nodes;
  303.       for (j = 0, len = ref.length; j < len; j++) {
  304.         i = ref[j];
  305.         if (i.prop === 'display') {
  306.           if (i.value.indexOf('flex') !== -1) {
  307.             return 'flex';
  308.           } else if (i.value.indexOf('grid') !== -1) {
  309.             return 'grid';
  310.           }
  311.         }
  312.       }
  313.       return false;
  314.     };
  315.  
  316.     return Processor;
  317.  
  318.   })();
  319.  
  320.   module.exports = Processor;
  321.  
  322. }).call(this);
  323.  
downloadprocessor.js Source code - Download reactide Source code
Related Source Codes/Software:
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
postal - 2017-06-11
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top