1 | 'use strict';
|
2 |
|
3 | exports.__esModule = true;
|
4 |
|
5 | var _postcss = require('postcss');
|
6 |
|
7 | var _postcss2 = _interopRequireDefault(_postcss);
|
8 |
|
9 | var _postcssValueParser = require('postcss-value-parser');
|
10 |
|
11 | var _postcssValueParser2 = _interopRequireDefault(_postcssValueParser);
|
12 |
|
13 | var _convert = require('./lib/convert');
|
14 |
|
15 | var _convert2 = _interopRequireDefault(_convert);
|
16 |
|
17 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
18 |
|
19 | function parseWord(node, opts, keepZeroUnit) {
|
20 | var pair = (0, _postcssValueParser.unit)(node.value);
|
21 | if (pair) {
|
22 | var num = Number(pair.number);
|
23 | var u = pair.unit.toLowerCase();
|
24 | if (num === 0) {
|
25 | node.value = keepZeroUnit || u === 'ms' || u === 's' || u === 'deg' || u === 'rad' || u === 'grad' || u === 'turn' ? 0 + u : 0;
|
26 | } else {
|
27 | node.value = (0, _convert2.default)(num, u, opts);
|
28 |
|
29 | if (typeof opts.precision === 'number' && u === 'px' && ~pair.number.indexOf('.')) {
|
30 | var precision = Math.pow(10, opts.precision);
|
31 | node.value = Math.round(parseFloat(node.value) * precision) / precision + u;
|
32 | }
|
33 | }
|
34 | }
|
35 | }
|
36 |
|
37 | function clampOpacity(node) {
|
38 | var pair = (0, _postcssValueParser.unit)(node.value);
|
39 | if (!pair) {
|
40 | return;
|
41 | }
|
42 | var num = Number(pair.number);
|
43 | if (num > 1) {
|
44 | node.value = 1 + pair.unit;
|
45 | } else if (num < 0) {
|
46 | node.value = 0 + pair.unit;
|
47 | }
|
48 | }
|
49 |
|
50 | function shouldStripPercent(_ref) {
|
51 | var value = _ref.value,
|
52 | prop = _ref.prop,
|
53 | parent = _ref.parent;
|
54 |
|
55 | return ~value.indexOf('%') && (prop === 'max-height' || prop === 'height') || parent.parent && parent.parent.name === 'keyframes' && prop === 'stroke-dasharray' || prop === 'stroke-dashoffset' || prop === 'stroke-width';
|
56 | }
|
57 |
|
58 | function transform(opts) {
|
59 | return function (decl) {
|
60 | var prop = decl.prop;
|
61 |
|
62 | if (~prop.indexOf('flex') || prop.indexOf('--') === 0) {
|
63 | return;
|
64 | }
|
65 |
|
66 | decl.value = (0, _postcssValueParser2.default)(decl.value).walk(function (node) {
|
67 | if (node.type === 'word') {
|
68 | parseWord(node, opts, shouldStripPercent(decl));
|
69 | if (prop === 'opacity' || prop === 'shape-image-threshold') {
|
70 | clampOpacity(node);
|
71 | }
|
72 | } else if (node.type === 'function') {
|
73 | if (node.value === 'calc' || node.value === 'hsl' || node.value === 'hsla') {
|
74 | (0, _postcssValueParser.walk)(node.nodes, function (n) {
|
75 | if (n.type === 'word') {
|
76 | parseWord(n, opts, true);
|
77 | }
|
78 | });
|
79 | return false;
|
80 | }
|
81 | if (node.value === 'url') {
|
82 | return false;
|
83 | }
|
84 | }
|
85 | }).toString();
|
86 | };
|
87 | }
|
88 |
|
89 | var plugin = 'postcss-convert-values';
|
90 |
|
91 | exports.default = _postcss2.default.plugin(plugin, function () {
|
92 | var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { precision: false };
|
93 |
|
94 | if (opts.length === undefined && opts.convertLength !== undefined) {
|
95 | console.warn(plugin + ': `convertLength` option is deprecated. Use `length`');
|
96 | opts.length = opts.convertLength;
|
97 | }
|
98 | if (opts.length === undefined && opts.convertTime !== undefined) {
|
99 | console.warn(plugin + ': `convertTime` option is deprecated. Use `time`');
|
100 | opts.time = opts.convertTime;
|
101 | }
|
102 | return function (css) {
|
103 | return css.walkDecls(transform(opts));
|
104 | };
|
105 | });
|
106 | module.exports = exports['default']; |
\ | No newline at end of file |