autoprefixer 6.7.6 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/AUTHORS +1 -0
  2. package/CHANGELOG.md +23 -0
  3. package/README.md +10 -16
  4. package/data/prefixes.js +551 -517
  5. package/lib/at-rule.js +55 -38
  6. package/lib/autoprefixer.js +89 -63
  7. package/lib/brackets.js +59 -39
  8. package/lib/browsers.js +102 -65
  9. package/lib/declaration.js +212 -121
  10. package/lib/hacks/align-content.js +65 -38
  11. package/lib/hacks/align-items.js +62 -38
  12. package/lib/hacks/align-self.js +63 -36
  13. package/lib/hacks/appearance.js +42 -0
  14. package/lib/hacks/background-size.js +29 -20
  15. package/lib/hacks/block-logical.js +36 -21
  16. package/lib/hacks/border-image.js +26 -16
  17. package/lib/hacks/border-radius.js +60 -39
  18. package/lib/hacks/break-props.js +69 -44
  19. package/lib/hacks/cross-fade.js +40 -37
  20. package/lib/hacks/display-flex.js +81 -31
  21. package/lib/hacks/display-grid.js +29 -19
  22. package/lib/hacks/filter-value.js +66 -45
  23. package/lib/hacks/filter.js +26 -17
  24. package/lib/hacks/flex-basis.js +60 -30
  25. package/lib/hacks/flex-direction.js +85 -53
  26. package/lib/hacks/flex-flow.js +67 -49
  27. package/lib/hacks/flex-grow.js +45 -26
  28. package/lib/hacks/flex-shrink.js +60 -30
  29. package/lib/hacks/flex-spec.js +18 -8
  30. package/lib/hacks/flex-values.js +39 -20
  31. package/lib/hacks/flex-wrap.js +29 -20
  32. package/lib/hacks/flex.js +68 -43
  33. package/lib/hacks/fullscreen.js +31 -21
  34. package/lib/hacks/gradient.js +462 -302
  35. package/lib/hacks/grid-column-align.js +55 -0
  36. package/lib/hacks/grid-end.js +53 -28
  37. package/lib/hacks/grid-row-align.js +39 -19
  38. package/lib/hacks/grid-start.js +80 -48
  39. package/lib/hacks/grid-template.js +91 -55
  40. package/lib/hacks/image-rendering.js +63 -33
  41. package/lib/hacks/image-set.js +28 -20
  42. package/lib/hacks/inline-logical.js +32 -17
  43. package/lib/hacks/intrinsic.js +66 -0
  44. package/lib/hacks/justify-content.js +69 -42
  45. package/lib/hacks/mask-border.js +36 -21
  46. package/lib/hacks/order.js +58 -35
  47. package/lib/hacks/pixelated.js +44 -30
  48. package/lib/hacks/placeholder.js +40 -25
  49. package/lib/hacks/text-emphasis-position.js +27 -20
  50. package/lib/hacks/transform-decl.js +94 -52
  51. package/lib/hacks/writing-mode.js +37 -27
  52. package/lib/info.js +117 -78
  53. package/lib/old-selector.js +84 -58
  54. package/lib/old-value.js +22 -20
  55. package/lib/prefixer.js +164 -95
  56. package/lib/prefixes.js +446 -351
  57. package/lib/processor.js +394 -278
  58. package/lib/resolution.js +135 -75
  59. package/lib/selector.js +145 -84
  60. package/lib/supports.js +330 -210
  61. package/lib/transition.js +396 -243
  62. package/lib/utils.js +84 -48
  63. package/lib/value.js +118 -80
  64. package/package.json +54 -14
  65. package/lib/hacks/justify-items.js +0 -31
  66. package/lib/hacks/stretch.js +0 -45
package/lib/processor.js CHANGED
@@ -1,322 +1,438 @@
1
- (function() {
2
- var OLD_DIRECTION, Processor, SIZES, Value, utils, vendor;
1
+ 'use strict';
3
2
 
4
- vendor = require('postcss/lib/vendor');
3
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
5
4
 
6
- Value = require('./value');
5
+ var Value = require('./value');
7
6
 
8
- utils = require('./utils');
7
+ var OLD_DIRECTION = /(^|[^-])(linear|radial)-gradient\(\s*(top|left|right|bottom)/i;
9
8
 
10
- OLD_DIRECTION = /(^|[^-])(linear|radial)-gradient\(\s*(top|left|right|bottom)/i;
9
+ var 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'];
11
10
 
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() {
11
+ var Processor = function () {
15
12
  function Processor(prefixes) {
16
- this.prefixes = prefixes;
13
+ _classCallCheck(this, Processor);
14
+
15
+ this.prefixes = prefixes;
17
16
  }
18
17
 
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;
18
+ /**
19
+ * Add necessary prefixes
20
+ */
21
+
22
+
23
+ Processor.prototype.add = function add(css, result) {
24
+ var _this = this;
25
+
26
+ // At-rules
27
+ var resolution = this.prefixes.add['@resolution'];
28
+ var keyframes = this.prefixes.add['@keyframes'];
29
+ var viewport = this.prefixes.add['@viewport'];
30
+ var supports = this.prefixes.add['@supports'];
31
+
32
+ css.walkAtRules(function (rule) {
33
+ if (rule.name === 'keyframes') {
34
+ if (!_this.disabled(rule)) {
35
+ return keyframes && keyframes.process(rule);
36
+ }
37
+ } else if (rule.name === 'viewport') {
38
+ if (!_this.disabled(rule)) {
39
+ return viewport && viewport.process(rule);
40
+ }
41
+ } else if (rule.name === 'supports') {
42
+ if (_this.prefixes.options.supports !== false && !_this.disabled(rule)) {
43
+ return supports.process(rule);
44
+ }
45
+ } else if (rule.name === 'media' && rule.params.indexOf('-resolution') !== -1) {
46
+ if (!_this.disabled(rule)) {
47
+ return resolution && resolution.process(rule);
48
+ }
42
49
  }
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
50
+
51
+ return undefined;
52
+ });
53
+
54
+ // Selectors
55
+ css.walkRules(function (rule) {
56
+ if (_this.disabled(rule)) return undefined;
57
+
58
+ return _this.prefixes.add.selectors.map(function (selector) {
59
+ return selector.process(rule, result);
70
60
  });
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
- });
61
+ });
62
+
63
+ css.walkDecls(function (decl) {
64
+ if (_this.disabledDecl(decl)) return undefined;
65
+
66
+ if (decl.prop === 'display' && decl.value === 'box') {
67
+ result.warn('You should write display: flex by final spec ' + 'instead of display: box', { node: decl });
68
+ return undefined;
85
69
  }
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
- });
70
+ if (decl.value.indexOf('linear-gradient') !== -1) {
71
+ if (OLD_DIRECTION.test(decl.value)) {
72
+ result.warn('Gradient has outdated direction syntax. ' + 'New syntax is like `to left` instead of `right`.', { node: decl });
73
+ }
96
74
  }
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
- });
75
+ if (decl.prop === 'text-emphasis-position') {
76
+ if (decl.value === 'under' || decl.value === 'over') {
77
+ result.warn('You should use 2 values for text-emphasis-position ' + 'For example, `under left` instead of just `under`.', { node: decl });
78
+ }
103
79
  }
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
- }
80
+
81
+ if (SIZES.indexOf(decl.prop) !== -1) {
82
+ if (decl.value.indexOf('fill-available') !== -1) {
83
+ result.warn('Replace fill-available to stretch, ' + 'because spec had been changed', { node: decl });
84
+ } else if (decl.value.indexOf('fill') !== -1) {
85
+ result.warn('Replace fill to stretch, because spec had been changed', { node: decl });
86
+ }
110
87
  }
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
- }
88
+
89
+ if (_this.prefixes.options.flexbox !== false) {
90
+ if (decl.prop === 'grid-row-end' && decl.value.indexOf('span') === -1) {
91
+ 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', { node: decl });
92
+ }
93
+ if (decl.prop === 'grid-row') {
94
+ if (decl.value.indexOf('/') !== -1 && decl.value.indexOf('span') === -1) {
95
+ 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', { node: decl });
96
+ }
97
+ }
121
98
  }
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
- }
99
+
100
+ var prefixer = void 0;
101
+
102
+ if (decl.prop === 'transition' || decl.prop === 'transition-property') {
103
+ // Transition
104
+ return _this.prefixes.transition.add(decl, result);
105
+ } else if (decl.prop === 'align-self') {
106
+ // align-self flexbox or grid
107
+ var display = _this.displayType(decl);
108
+ if (display !== 'grid' && _this.prefixes.options.flexbox !== false) {
109
+ prefixer = _this.prefixes.add['align-self'];
110
+ if (prefixer && prefixer.prefixes) {
111
+ prefixer.process(decl);
112
+ }
113
+ }
114
+ if (display !== 'flex' && _this.prefixes.options.grid !== false) {
115
+ prefixer = _this.prefixes.add['grid-row-align'];
116
+ if (prefixer && prefixer.prefixes) {
117
+ return prefixer.process(decl);
118
+ }
119
+ }
120
+ } else if (decl.prop === 'justify-self') {
121
+ // justify-self flexbox or grid
122
+ var _display = _this.displayType(decl);
123
+ if (_display !== 'flex' && _this.prefixes.options.grid !== false) {
124
+ prefixer = _this.prefixes.add['grid-column-align'];
125
+ if (prefixer && prefixer.prefixes) {
126
+ return prefixer.process(decl);
127
+ }
128
+ }
129
+ } else {
130
+ // Properties
131
+ prefixer = _this.prefixes.add[decl.prop];
132
+ if (prefixer && prefixer.prefixes) {
133
+ return prefixer.process(decl);
134
+ }
127
135
  }
128
- } else {
129
- prefixer = _this.prefixes.add[decl.prop];
130
- if (prefixer && prefixer.prefixes) {
131
- return prefixer.process(decl);
136
+
137
+ return undefined;
138
+ });
139
+
140
+ // Values
141
+ return css.walkDecls(function (decl) {
142
+ if (_this.disabledValue(decl)) return;
143
+
144
+ var unprefixed = _this.prefixes.unprefixed(decl.prop);
145
+ for (var _iterator = _this.prefixes.values('add', unprefixed), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
146
+ var _ref;
147
+
148
+ if (_isArray) {
149
+ if (_i >= _iterator.length) break;
150
+ _ref = _iterator[_i++];
151
+ } else {
152
+ _i = _iterator.next();
153
+ if (_i.done) break;
154
+ _ref = _i.value;
155
+ }
156
+
157
+ var value = _ref;
158
+
159
+ value.process(decl, result);
132
160
  }
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));
161
+ Value.save(_this.prefixes, decl);
162
+ });
151
163
  };
152
164
 
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);
165
+ /**
166
+ * Remove unnecessary pefixes
167
+ */
168
+
169
+
170
+ Processor.prototype.remove = function remove(css) {
171
+ var _this2 = this;
172
+
173
+ // At-rules
174
+ var resolution = this.prefixes.remove['@resolution'];
175
+
176
+ css.walkAtRules(function (rule, i) {
177
+ if (_this2.prefixes.remove['@' + rule.name]) {
178
+ if (!_this2.disabled(rule)) {
179
+ rule.parent.removeChild(i);
180
+ }
181
+ } else if (rule.name === 'media' && rule.params.indexOf('-resolution') !== -1 && resolution) {
182
+ resolution.clean(rule);
161
183
  }
162
- } else if (rule.name === 'media' && rule.params.indexOf('-resolution') !== -1) {
163
- return resolution != null ? resolution.clean(rule) : void 0;
164
- }
184
+ });
185
+
186
+ // Selectors
187
+
188
+ var _loop = function _loop(checker) {
189
+ css.walkRules(function (rule, i) {
190
+ if (checker.check(rule)) {
191
+ if (!_this2.disabled(rule)) {
192
+ rule.parent.removeChild(i);
193
+ }
194
+ }
195
+ });
165
196
  };
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
- }
197
+
198
+ for (var _iterator2 = this.prefixes.remove.selectors, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
199
+ var _ref2;
200
+
201
+ if (_isArray2) {
202
+ if (_i2 >= _iterator2.length) break;
203
+ _ref2 = _iterator2[_i2++];
204
+ } else {
205
+ _i2 = _iterator2.next();
206
+ if (_i2.done) break;
207
+ _ref2 = _i2.value;
176
208
  }
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;
209
+
210
+ var checker = _ref2;
211
+
212
+ _loop(checker);
213
+ }
214
+
215
+ return css.walkDecls(function (decl, i) {
216
+ if (_this2.disabled(decl)) return;
217
+
218
+ var rule = decl.parent;
219
+ var unprefixed = _this2.prefixes.unprefixed(decl.prop);
220
+
221
+ // Transition
222
+ if (decl.prop === 'transition' || decl.prop === 'transition-property') {
223
+ _this2.prefixes.transition.remove(decl);
197
224
  }
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;
225
+
226
+ // Properties
227
+ if (_this2.prefixes.remove[decl.prop] && _this2.prefixes.remove[decl.prop].remove) {
228
+ var notHack = _this2.prefixes.group(decl).down(function (other) {
229
+ return _this2.prefixes.normalize(other.prop) === unprefixed;
230
+ });
231
+
232
+ if (unprefixed === 'flex-flow') {
233
+ notHack = true;
234
+ }
235
+
236
+ if (notHack && !_this2.withHackValue(decl)) {
237
+ if (decl.raw('before').indexOf('\n') > -1) {
238
+ _this2.reduceSpaces(decl);
239
+ }
240
+ rule.removeChild(i);
241
+ return;
242
+ }
204
243
  }
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
- }
244
+
245
+ // Values
246
+ for (var _iterator3 = _this2.prefixes.values('remove', unprefixed), _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
247
+ var _ref3;
248
+
249
+ if (_isArray3) {
250
+ if (_i3 >= _iterator3.length) break;
251
+ _ref3 = _iterator3[_i3++];
252
+ } else {
253
+ _i3 = _iterator3.next();
254
+ if (_i3.done) break;
255
+ _ref3 = _i3.value;
256
+ }
257
+
258
+ var checker = _ref3;
259
+
260
+ if (checker.check(decl.value)) {
261
+ unprefixed = checker.unprefixed;
262
+ var _notHack = _this2.prefixes.group(decl).down(function (other) {
263
+ return other.value.indexOf(unprefixed) !== -1;
264
+ });
265
+
266
+ if (_notHack) {
267
+ rule.removeChild(i);
268
+ return;
269
+ } else if (checker.clean) {
270
+ checker.clean(decl);
271
+ return;
272
+ }
273
+ }
221
274
  }
222
- }
223
- };
224
- })(this));
275
+ });
225
276
  };
226
277
 
227
- Processor.prototype.withHackValue = function(decl) {
228
- return decl.prop === '-webkit-background-clip' && decl.value === 'text';
278
+ /**
279
+ * Some rare old values, which is not in standard
280
+ */
281
+
282
+
283
+ Processor.prototype.withHackValue = function withHackValue(decl) {
284
+ return decl.prop === '-webkit-background-clip' && decl.value === 'text';
229
285
  };
230
286
 
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;
287
+ /**
288
+ * Check for grid/flexbox options.
289
+ */
290
+
291
+
292
+ Processor.prototype.disabledValue = function disabledValue(node) {
293
+ if (this.prefixes.options.grid === false && node.type === 'decl') {
294
+ if (node.prop === 'display' && node.value.indexOf('grid') !== -1) {
295
+ return true;
296
+ }
236
297
  }
237
- if (node.prop.indexOf('grid') !== -1 || node.prop === 'justify-items') {
238
- return true;
298
+ if (this.prefixes.options.flexbox === false && node.type === 'decl') {
299
+ if (node.prop === 'display' && node.value.indexOf('flex') !== -1) {
300
+ return true;
301
+ }
239
302
  }
240
- }
241
- if (this.prefixes.options.flexbox === false && node.type === 'decl') {
242
- if (node.prop === 'display' && node.value.indexOf('flex') !== -1) {
243
- return true;
303
+
304
+ return this.disabled(node);
305
+ };
306
+
307
+ /**
308
+ * Check for grid/flexbox options.
309
+ */
310
+
311
+
312
+ Processor.prototype.disabledDecl = function disabledDecl(node) {
313
+ if (this.prefixes.options.grid === false && node.type === 'decl') {
314
+ if (node.prop.indexOf('grid') !== -1 || node.prop === 'justify-items') {
315
+ return true;
316
+ }
244
317
  }
245
- other = ['order', 'justify-content', 'align-items', 'align-content'];
246
- if (node.prop.indexOf('flex') !== -1 || other.indexOf(node.prop) !== -1) {
247
- return true;
318
+ if (this.prefixes.options.flexbox === false && node.type === 'decl') {
319
+ var other = ['order', 'justify-content', 'align-items', 'align-content'];
320
+ if (node.prop.indexOf('flex') !== -1 || other.indexOf(node.prop) !== -1) {
321
+ return true;
322
+ }
248
323
  }
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
- }
324
+
325
+ return this.disabled(node);
272
326
  };
273
327
 
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");
328
+ /**
329
+ * Check for control comment and global options
330
+ */
331
+
332
+
333
+ Processor.prototype.disabled = function disabled(node) {
334
+ if (node._autoprefixerDisabled !== undefined) {
335
+ return node._autoprefixerDisabled;
336
+ } else if (node.nodes) {
337
+ var status = undefined;
338
+ node.each(function (i) {
339
+ if (i.type !== 'comment') {
340
+ return undefined;
341
+ }
342
+ if (/(!\s*)?autoprefixer:\s*off/i.test(i.text)) {
343
+ status = false;
344
+ return false;
345
+ } else if (/(!\s*)?autoprefixer:\s*on/i.test(i.text)) {
346
+ status = true;
347
+ return false;
348
+ }
349
+ return undefined;
350
+ });
351
+
352
+ var result = false;
353
+ if (status !== undefined) {
354
+ result = !status;
355
+ } else if (node.parent) {
356
+ result = this.disabled(node.parent);
357
+ }
358
+
359
+ node._autoprefixerDisabled = result;
360
+ return node._autoprefixerDisabled;
361
+ } else if (node.parent) {
362
+ node._autoprefixerDisabled = this.disabled(node.parent);
363
+ return node._autoprefixerDisabled;
364
+ } else {
365
+ // unknown state
366
+ return false;
296
367
  }
297
- });
298
368
  };
299
369
 
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
- }
370
+ /**
371
+ * Normalize spaces in cascade declaration group
372
+ */
373
+
374
+
375
+ Processor.prototype.reduceSpaces = function reduceSpaces(decl) {
376
+ var stop = false;
377
+ this.prefixes.group(decl).up(function () {
378
+ stop = true;
379
+ return true;
380
+ });
381
+ if (stop) {
382
+ return;
311
383
  }
312
- }
313
- return false;
384
+
385
+ var parts = decl.raw('before').split('\n');
386
+ var prevMin = parts[parts.length - 1].length;
387
+ var diff = false;
388
+
389
+ this.prefixes.group(decl).down(function (other) {
390
+ parts = other.raw('before').split('\n');
391
+ var last = parts.length - 1;
392
+
393
+ if (parts[last].length > prevMin) {
394
+ if (diff === false) {
395
+ diff = parts[last].length - prevMin;
396
+ }
397
+
398
+ parts[last] = parts[last].slice(0, -diff);
399
+ other.raws.before = parts.join('\n');
400
+ }
401
+ });
314
402
  };
315
403
 
316
- return Processor;
404
+ /**
405
+ * Is it flebox or grid rule
406
+ */
407
+
408
+
409
+ Processor.prototype.displayType = function displayType(decl) {
410
+ for (var _iterator4 = decl.parent.nodes, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {
411
+ var _ref4;
412
+
413
+ if (_isArray4) {
414
+ if (_i4 >= _iterator4.length) break;
415
+ _ref4 = _iterator4[_i4++];
416
+ } else {
417
+ _i4 = _iterator4.next();
418
+ if (_i4.done) break;
419
+ _ref4 = _i4.value;
420
+ }
317
421
 
318
- })();
422
+ var i = _ref4;
319
423
 
320
- module.exports = Processor;
424
+ if (i.prop === 'display') {
425
+ if (i.value.indexOf('flex') !== -1) {
426
+ return 'flex';
427
+ } else if (i.value.indexOf('grid') !== -1) {
428
+ return 'grid';
429
+ }
430
+ }
431
+ }
432
+ return false;
433
+ };
434
+
435
+ return Processor;
436
+ }();
321
437
 
322
- }).call(this);
438
+ module.exports = Processor;