.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / autoprefixer / lib / hacks / grid-shorthand.js
1 'use strict';
2
3 var parser = require('postcss-value-parser');
4
5 function convert(value) {
6     if (value && value.length === 2 && value[0] === 'span' && parseInt(value[1], 10) > 0) {
7         return [false, parseInt(value[1], 10)];
8     }
9
10     if (value && value.length === 1 && parseInt(value[0], 10) > 0) {
11         return [parseInt(value[0], 10), false];
12     }
13
14     return [false, false];
15 }
16
17 function translate(values, startIndex, endIndex) {
18     var startValue = values[startIndex];
19     var endValue = values[endIndex];
20
21     if (!startValue) {
22         return [false, false];
23     }
24
25     var _convert = convert(startValue),
26         start = _convert[0],
27         spanStart = _convert[1];
28
29     var _convert2 = convert(endValue),
30         end = _convert2[0],
31         spanEnd = _convert2[1];
32
33     if (start && !endValue) {
34         return [start, false];
35     }
36
37     if (spanStart && end) {
38         return [end - spanStart, spanStart];
39     }
40
41     if (start && spanEnd) {
42         return [start, spanEnd];
43     }
44
45     if (start && end) {
46         return [start, end - start];
47     }
48
49     return [false, false];
50 }
51
52 function parse(decl) {
53     var node = parser(decl.value);
54
55     var values = [];
56     var current = 0;
57     values[current] = [];
58
59     for (var _iterator = node.nodes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
60         var _ref;
61
62         if (_isArray) {
63             if (_i >= _iterator.length) break;
64             _ref = _iterator[_i++];
65         } else {
66             _i = _iterator.next();
67             if (_i.done) break;
68             _ref = _i.value;
69         }
70
71         var i = _ref;
72
73         if (i.type === 'div') {
74             current += 1;
75             values[current] = [];
76         } else if (i.type === 'word') {
77             values[current].push(i.value);
78         }
79     }
80
81     return values;
82 }
83
84 function parseTemplateShortcut(decl) {
85     var node = parser(decl.value, { loose: true });
86
87     var values = [];
88     var current = 0;
89     values[current] = [];
90
91     for (var _iterator2 = node.nodes, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
92         var _ref2;
93
94         if (_isArray2) {
95             if (_i2 >= _iterator2.length) break;
96             _ref2 = _iterator2[_i2++];
97         } else {
98             _i2 = _iterator2.next();
99             if (_i2.done) break;
100             _ref2 = _i2.value;
101         }
102
103         var i = _ref2;
104
105         if (i.type === 'div') {
106             current += 1;
107             values[current] = [];
108         } else {
109             values[current].push(parser.stringify(i));
110         }
111     }
112
113     return values;
114 }
115
116 function walkRepeat(node) {
117     var fixed = [];
118     for (var _iterator3 = node.nodes, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
119         var _ref3;
120
121         if (_isArray3) {
122             if (_i3 >= _iterator3.length) break;
123             _ref3 = _iterator3[_i3++];
124         } else {
125             _i3 = _iterator3.next();
126             if (_i3.done) break;
127             _ref3 = _i3.value;
128         }
129
130         var i = _ref3;
131
132         if (i.nodes) {
133             walkRepeat(i);
134         }
135         fixed.push(i);
136         if (i.type === 'function' && i.value === 'repeat') {
137             var first = i.nodes.shift();
138             if (first) {
139                 var count = first.value;
140                 i.nodes.shift();
141                 i.value = '';
142                 fixed.push({ type: 'word', value: '[' + count + ']' });
143             }
144         }
145     }
146     node.nodes = fixed;
147 }
148
149 function changeRepeat(value) {
150     var ast = parser(value);
151     walkRepeat(ast);
152     return ast.toString();
153 }
154
155 module.exports = {
156     parse: parse,
157     translate: translate,
158     changeRepeat: changeRepeat,
159     parseTemplateShortcut: parseTemplateShortcut
160 };