|
2 | 2 |
|
3 | 3 | var interpolateSelectors = require('./interpolateSelectors');
|
4 | 4 |
|
5 |
| -var KEBAB_REGEX = /[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g; |
6 |
| -var KEBAB_MATCHER = function(match) { return '-' + match.toLowerCase(); }; |
| 5 | +var KEBAB_REGEX = /[A-Z]/g; |
7 | 6 |
|
8 |
| -function kebabCase(str) { |
9 |
| - return str.replace(KEBAB_REGEX, KEBAB_MATCHER); |
10 |
| -} |
| 7 | +function onDecls (selector, decls) { |
| 8 | + var selectors = selector.split(','); |
| 9 | + var str = '', strDecls = ''; |
| 10 | + var prop, value; |
11 | 11 |
|
12 |
| -exports.toCss = function toCss (pojso) { |
13 |
| - var str = ''; |
| 12 | + for (prop in decls) { |
| 13 | + value = decls[prop]; |
14 | 14 |
|
15 |
| - for (var selector in pojso) { |
16 |
| - var values = pojso[selector]; |
| 15 | + if (value instanceof Object) { |
| 16 | + var selectorsInterpolated = interpolateSelectors(selectors, prop); |
| 17 | + str += onDecls(selectorsInterpolated, value); |
| 18 | + } else { |
| 19 | + prop = prop.replace(KEBAB_REGEX, '-$&').toLowerCase(); |
| 20 | + strDecls += prop + ':' + value + ';'; |
| 21 | + } |
| 22 | + } |
17 | 23 |
|
18 |
| - // Atrule: @media, @keyframe, ... |
| 24 | + return str + selector + '{' + strDecls + '}'; |
| 25 | +} |
| 26 | + |
| 27 | +function onStyles (styles) { |
| 28 | + var str = '', selector; |
| 29 | + |
| 30 | + for (selector in styles) { |
19 | 31 | if (selector[0] === '@') {
|
20 |
| - str += selector + '{' + toCss(values) + '}'; |
| 32 | + str += selector + '{' + onStyles(styles[selector]) + '}'; |
21 | 33 | } else {
|
22 |
| - var selectors = selector.split(','); |
23 |
| - var declarations = ''; |
24 |
| - |
25 |
| - for (var prop in values) { |
26 |
| - var value = values[prop]; |
27 |
| - |
28 |
| - switch (typeof value) { |
29 |
| - case 'string': |
30 |
| - case 'number': |
31 |
| - prop = kebabCase(prop); |
32 |
| - declarations += prop + ':' + value + ';'; |
33 |
| - break; |
34 |
| - case 'object': { |
35 |
| - var selectorsInterpolated = interpolateSelectors(selectors, prop); |
36 |
| - var obj = {}; |
37 |
| - obj[selectorsInterpolated] = value; |
38 |
| - str += toCss(obj); |
39 |
| - break; |
40 |
| - } |
41 |
| - } |
42 |
| - } |
43 |
| - str += selectors + '{' + declarations + '}'; |
| 34 | + str += onDecls(selector, styles[selector]); |
44 | 35 | }
|
45 | 36 | }
|
46 | 37 |
|
47 | 38 | return str;
|
48 |
| -}; |
| 39 | +} |
| 40 | + |
| 41 | +exports.onDecls = onDecls; |
| 42 | +exports.onStyles = onStyles; |
0 commit comments