autoprefixer 6.7.7 → 7.1.1
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.
- package/AUTHORS +1 -0
- package/CHANGELOG.md +23 -0
- package/README.md +9 -15
- package/data/prefixes.js +551 -517
- package/lib/at-rule.js +55 -38
- package/lib/autoprefixer.js +89 -63
- package/lib/brackets.js +59 -39
- package/lib/browsers.js +102 -65
- package/lib/declaration.js +212 -121
- package/lib/hacks/align-content.js +65 -38
- package/lib/hacks/align-items.js +62 -38
- package/lib/hacks/align-self.js +63 -36
- package/lib/hacks/appearance.js +42 -0
- package/lib/hacks/background-size.js +29 -20
- package/lib/hacks/block-logical.js +36 -21
- package/lib/hacks/border-image.js +26 -16
- package/lib/hacks/border-radius.js +60 -39
- package/lib/hacks/break-props.js +69 -44
- package/lib/hacks/cross-fade.js +40 -37
- package/lib/hacks/display-flex.js +81 -31
- package/lib/hacks/display-grid.js +29 -19
- package/lib/hacks/filter-value.js +66 -45
- package/lib/hacks/filter.js +26 -17
- package/lib/hacks/flex-basis.js +60 -30
- package/lib/hacks/flex-direction.js +85 -53
- package/lib/hacks/flex-flow.js +67 -49
- package/lib/hacks/flex-grow.js +45 -26
- package/lib/hacks/flex-shrink.js +60 -30
- package/lib/hacks/flex-spec.js +18 -8
- package/lib/hacks/flex-values.js +39 -20
- package/lib/hacks/flex-wrap.js +29 -20
- package/lib/hacks/flex.js +68 -43
- package/lib/hacks/fullscreen.js +31 -21
- package/lib/hacks/gradient.js +462 -302
- package/lib/hacks/grid-column-align.js +55 -0
- package/lib/hacks/grid-end.js +53 -28
- package/lib/hacks/grid-row-align.js +39 -19
- package/lib/hacks/grid-start.js +80 -48
- package/lib/hacks/grid-template.js +91 -55
- package/lib/hacks/image-rendering.js +63 -33
- package/lib/hacks/image-set.js +28 -20
- package/lib/hacks/inline-logical.js +32 -17
- package/lib/hacks/intrinsic.js +73 -0
- package/lib/hacks/justify-content.js +69 -42
- package/lib/hacks/mask-border.js +36 -21
- package/lib/hacks/order.js +58 -35
- package/lib/hacks/pixelated.js +44 -30
- package/lib/hacks/placeholder.js +40 -25
- package/lib/hacks/text-emphasis-position.js +27 -20
- package/lib/hacks/transform-decl.js +94 -52
- package/lib/hacks/writing-mode.js +37 -27
- package/lib/info.js +117 -78
- package/lib/old-selector.js +84 -58
- package/lib/old-value.js +22 -20
- package/lib/prefixer.js +164 -95
- package/lib/prefixes.js +446 -351
- package/lib/processor.js +394 -278
- package/lib/resolution.js +135 -75
- package/lib/selector.js +145 -84
- package/lib/supports.js +330 -210
- package/lib/transition.js +396 -243
- package/lib/utils.js +84 -48
- package/lib/value.js +118 -80
- package/package.json +53 -13
- package/lib/hacks/justify-items.js +0 -31
- package/lib/hacks/stretch.js +0 -45
package/lib/info.js
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
var browserslist, capitalize, names, prefix;
|
|
1
|
+
'use strict';
|
|
3
2
|
|
|
4
|
-
|
|
3
|
+
var browserslist = require('browserslist');
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
function capitalize(str) {
|
|
7
6
|
return str.slice(0, 1).toUpperCase() + str.slice(1);
|
|
8
|
-
|
|
7
|
+
}
|
|
9
8
|
|
|
10
|
-
|
|
9
|
+
var names = {
|
|
11
10
|
ie: 'IE',
|
|
12
11
|
ie_mob: 'IE Mobile',
|
|
13
12
|
ios_saf: 'iOS',
|
|
@@ -16,98 +15,138 @@
|
|
|
16
15
|
and_chr: 'Chrome for Android',
|
|
17
16
|
and_ff: 'Firefox for Android',
|
|
18
17
|
and_uc: 'UC for Android'
|
|
19
|
-
|
|
18
|
+
};
|
|
20
19
|
|
|
21
|
-
|
|
22
|
-
var out;
|
|
23
|
-
out
|
|
24
|
-
|
|
25
|
-
return i.replace(/^-(.*)-$/g, '$1');
|
|
20
|
+
var prefix = function prefix(name, prefixes) {
|
|
21
|
+
var out = ' ' + name + ': ';
|
|
22
|
+
out += prefixes.map(function (i) {
|
|
23
|
+
return i.replace(/^-(.*)-$/g, '$1');
|
|
26
24
|
}).join(', ');
|
|
27
|
-
out +=
|
|
25
|
+
out += '\n';
|
|
28
26
|
return out;
|
|
29
|
-
|
|
27
|
+
};
|
|
30
28
|
|
|
31
|
-
|
|
32
|
-
var atrules, browser, coverage, data, j, k, l, len, len1, len2, list, name, out, props, ref, ref1, ref2, ref3, ref4, ref5, round, selector, selectors, string, value, values, version, versions;
|
|
29
|
+
module.exports = function (prefixes) {
|
|
33
30
|
if (prefixes.browsers.selected.length === 0) {
|
|
34
|
-
|
|
31
|
+
return 'No browsers selected';
|
|
35
32
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
for (
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
33
|
+
|
|
34
|
+
var versions = {};
|
|
35
|
+
for (var _iterator = prefixes.browsers.selected, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
|
|
36
|
+
var _ref;
|
|
37
|
+
|
|
38
|
+
if (_isArray) {
|
|
39
|
+
if (_i >= _iterator.length) break;
|
|
40
|
+
_ref = _iterator[_i++];
|
|
41
|
+
} else {
|
|
42
|
+
_i = _iterator.next();
|
|
43
|
+
if (_i.done) break;
|
|
44
|
+
_ref = _i.value;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
var browser = _ref;
|
|
48
|
+
|
|
49
|
+
var _browser$split = browser.split(' '),
|
|
50
|
+
name = _browser$split[0],
|
|
51
|
+
version = _browser$split[1];
|
|
52
|
+
|
|
53
|
+
name = names[name] || capitalize(name);
|
|
54
|
+
if (versions[name]) {
|
|
55
|
+
versions[name].push(version);
|
|
56
|
+
} else {
|
|
57
|
+
versions[name] = [version];
|
|
58
|
+
}
|
|
47
59
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
60
|
+
|
|
61
|
+
var out = 'Browsers:\n';
|
|
62
|
+
for (var _browser in versions) {
|
|
63
|
+
var list = versions[_browser];
|
|
64
|
+
list = list.sort(function (a, b) {
|
|
65
|
+
return parseFloat(b) - parseFloat(a);
|
|
66
|
+
});
|
|
67
|
+
out += ' ' + _browser + ': ' + list.join(', ') + '\n';
|
|
55
68
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
69
|
+
|
|
70
|
+
var coverage = browserslist.coverage(prefixes.browsers.selected);
|
|
71
|
+
var round = Math.round(coverage * 100) / 100.0;
|
|
72
|
+
out += '\nThese browsers account for ' + round + '% of all users globally\n';
|
|
73
|
+
|
|
74
|
+
var atrules = '';
|
|
75
|
+
for (var name in prefixes.add) {
|
|
76
|
+
var data = prefixes.add[name];
|
|
77
|
+
if (name[0] === '@' && data.prefixes) {
|
|
78
|
+
atrules += prefix(name, data.prefixes);
|
|
79
|
+
}
|
|
66
80
|
}
|
|
67
81
|
if (atrules !== '') {
|
|
68
|
-
|
|
82
|
+
out += '\nAt-Rules:\n' + atrules;
|
|
69
83
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
for (
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
84
|
+
|
|
85
|
+
var selectors = '';
|
|
86
|
+
for (var _iterator2 = prefixes.add.selectors, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
|
|
87
|
+
var _ref2;
|
|
88
|
+
|
|
89
|
+
if (_isArray2) {
|
|
90
|
+
if (_i2 >= _iterator2.length) break;
|
|
91
|
+
_ref2 = _iterator2[_i2++];
|
|
92
|
+
} else {
|
|
93
|
+
_i2 = _iterator2.next();
|
|
94
|
+
if (_i2.done) break;
|
|
95
|
+
_ref2 = _i2.value;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
var selector = _ref2;
|
|
99
|
+
|
|
100
|
+
if (selector.prefixes) {
|
|
101
|
+
selectors += prefix(selector.name, selector.prefixes);
|
|
102
|
+
}
|
|
77
103
|
}
|
|
78
104
|
if (selectors !== '') {
|
|
79
|
-
|
|
105
|
+
out += '\nSelectors:\n' + selectors;
|
|
80
106
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
for (
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
107
|
+
|
|
108
|
+
var values = '';
|
|
109
|
+
var props = '';
|
|
110
|
+
for (var _name in prefixes.add) {
|
|
111
|
+
var _data = prefixes.add[_name];
|
|
112
|
+
if (_name[0] !== '@' && _data.prefixes) {
|
|
113
|
+
props += prefix(_name, _data.prefixes);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if (!_data.values) {
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
for (var _iterator3 = _data.values, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
|
|
120
|
+
var _ref3;
|
|
121
|
+
|
|
122
|
+
if (_isArray3) {
|
|
123
|
+
if (_i3 >= _iterator3.length) break;
|
|
124
|
+
_ref3 = _iterator3[_i3++];
|
|
125
|
+
} else {
|
|
126
|
+
_i3 = _iterator3.next();
|
|
127
|
+
if (_i3.done) break;
|
|
128
|
+
_ref3 = _i3.value;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
var value = _ref3;
|
|
132
|
+
|
|
133
|
+
var string = prefix(value.name, value.prefixes);
|
|
134
|
+
if (values.indexOf(string) === -1) {
|
|
135
|
+
values += string;
|
|
136
|
+
}
|
|
98
137
|
}
|
|
99
|
-
}
|
|
100
138
|
}
|
|
139
|
+
|
|
101
140
|
if (props !== '') {
|
|
102
|
-
|
|
141
|
+
out += '\nProperties:\n' + props;
|
|
103
142
|
}
|
|
104
143
|
if (values !== '') {
|
|
105
|
-
|
|
144
|
+
out += '\nValues:\n' + values;
|
|
106
145
|
}
|
|
146
|
+
|
|
107
147
|
if (atrules === '' && selectors === '' && props === '' && values === '') {
|
|
108
|
-
|
|
148
|
+
out += '\nAwesome! Your browsers don\'t require any vendor prefixes.' + '\nNow you can remove Autoprefixer from build steps.';
|
|
109
149
|
}
|
|
110
|
-
return out;
|
|
111
|
-
};
|
|
112
150
|
|
|
113
|
-
|
|
151
|
+
return out;
|
|
152
|
+
};
|
package/lib/old-selector.js
CHANGED
|
@@ -1,68 +1,94 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
4
|
+
|
|
5
|
+
var OldSelector = function () {
|
|
6
|
+
function OldSelector(selector, prefix) {
|
|
7
|
+
_classCallCheck(this, OldSelector);
|
|
8
|
+
|
|
9
|
+
this.prefix = prefix;
|
|
10
|
+
this.prefixed = selector.prefixed(this.prefix);
|
|
11
|
+
this.regexp = selector.regexp(this.prefix);
|
|
12
|
+
|
|
13
|
+
this.prefixeds = selector.possible().map(function (x) {
|
|
14
|
+
return [selector.prefixed(x), selector.regexp(x)];
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
this.unprefixed = selector.name;
|
|
18
|
+
this.nameRegexp = selector.regexp();
|
|
18
19
|
}
|
|
19
20
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
21
|
+
/**
|
|
22
|
+
* Is rule a hack without unprefixed version bottom
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
OldSelector.prototype.isHack = function isHack(rule) {
|
|
27
|
+
var index = rule.parent.index(rule) + 1;
|
|
28
|
+
var rules = rule.parent.nodes;
|
|
29
|
+
|
|
30
|
+
while (index < rules.length) {
|
|
31
|
+
var before = rules[index].selector;
|
|
32
|
+
if (!before) {
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (before.indexOf(this.unprefixed) !== -1 && before.match(this.nameRegexp)) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
var some = false;
|
|
41
|
+
for (var _iterator = this.prefixeds, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
|
|
42
|
+
var _ref2;
|
|
43
|
+
|
|
44
|
+
if (_isArray) {
|
|
45
|
+
if (_i >= _iterator.length) break;
|
|
46
|
+
_ref2 = _iterator[_i++];
|
|
47
|
+
} else {
|
|
48
|
+
_i = _iterator.next();
|
|
49
|
+
if (_i.done) break;
|
|
50
|
+
_ref2 = _i.value;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
var _ref = _ref2;
|
|
54
|
+
var string = _ref[0];
|
|
55
|
+
var regexp = _ref[1];
|
|
56
|
+
|
|
57
|
+
if (before.indexOf(string) !== -1 && before.match(regexp)) {
|
|
58
|
+
some = true;
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (!some) {
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
index += 1;
|
|
28
68
|
}
|
|
29
|
-
|
|
30
|
-
|
|
69
|
+
|
|
70
|
+
return true;
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Does rule contain an unnecessary prefixed selector
|
|
75
|
+
*/
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
OldSelector.prototype.check = function check(rule) {
|
|
79
|
+
if (rule.selector.indexOf(this.prefixed) === -1) {
|
|
80
|
+
return false;
|
|
31
81
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
for (i = 0, len = ref.length; i < len; i++) {
|
|
35
|
-
ref1 = ref[i], string = ref1[0], regexp = ref1[1];
|
|
36
|
-
if (before.indexOf(string) !== -1 && before.match(regexp)) {
|
|
37
|
-
some = true;
|
|
38
|
-
break;
|
|
39
|
-
}
|
|
82
|
+
if (!rule.selector.match(this.regexp)) {
|
|
83
|
+
return false;
|
|
40
84
|
}
|
|
41
|
-
if (
|
|
42
|
-
|
|
85
|
+
if (this.isHack(rule)) {
|
|
86
|
+
return false;
|
|
43
87
|
}
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
return true;
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
OldSelector.prototype.check = function(rule) {
|
|
50
|
-
if (rule.selector.indexOf(this.prefixed) === -1) {
|
|
51
|
-
return false;
|
|
52
|
-
}
|
|
53
|
-
if (!rule.selector.match(this.regexp)) {
|
|
54
|
-
return false;
|
|
55
|
-
}
|
|
56
|
-
if (this.isHack(rule)) {
|
|
57
|
-
return false;
|
|
58
|
-
}
|
|
59
|
-
return true;
|
|
88
|
+
return true;
|
|
60
89
|
};
|
|
61
90
|
|
|
62
91
|
return OldSelector;
|
|
92
|
+
}();
|
|
63
93
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
module.exports = OldSelector;
|
|
67
|
-
|
|
68
|
-
}).call(this);
|
|
94
|
+
module.exports = OldSelector;
|
package/lib/old-value.js
CHANGED
|
@@ -1,30 +1,32 @@
|
|
|
1
|
-
|
|
2
|
-
var OldValue, utils;
|
|
1
|
+
'use strict';
|
|
3
2
|
|
|
4
|
-
|
|
3
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
var utils = require('./utils');
|
|
6
|
+
|
|
7
|
+
var OldValue = function () {
|
|
7
8
|
function OldValue(unprefixed, prefixed, string, regexp) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
_classCallCheck(this, OldValue);
|
|
10
|
+
|
|
11
|
+
this.unprefixed = unprefixed;
|
|
12
|
+
this.prefixed = prefixed;
|
|
13
|
+
this.string = string || prefixed;
|
|
14
|
+
this.regexp = regexp || utils.regexp(prefixed);
|
|
14
15
|
}
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Check, that value contain old value
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
OldValue.prototype.check = function check(value) {
|
|
23
|
+
if (value.indexOf(this.string) !== -1) {
|
|
24
|
+
return !!value.match(this.regexp);
|
|
25
|
+
}
|
|
20
26
|
return false;
|
|
21
|
-
}
|
|
22
27
|
};
|
|
23
28
|
|
|
24
29
|
return OldValue;
|
|
30
|
+
}();
|
|
25
31
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
module.exports = OldValue;
|
|
29
|
-
|
|
30
|
-
}).call(this);
|
|
32
|
+
module.exports = OldValue;
|