81 lines
2.1 KiB
JavaScript
81 lines
2.1 KiB
JavaScript
'use strict';
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports['default'] = toCss;
|
|
|
|
var _toCssValue = require('./toCssValue');
|
|
|
|
var _toCssValue2 = _interopRequireDefault(_toCssValue);
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
|
|
|
/**
|
|
* Indent a string.
|
|
* http://jsperf.com/array-join-vs-for
|
|
*/
|
|
function indentStr(str, indent) {
|
|
var result = '';
|
|
for (var index = 0; index < indent; index++) {
|
|
result += ' ';
|
|
}return result + str;
|
|
}
|
|
|
|
/**
|
|
* Converts a Rule to CSS string.
|
|
*/
|
|
|
|
function toCss(selector, style) {
|
|
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
|
|
var result = '';
|
|
|
|
if (!style) return result;
|
|
|
|
var _options$indent = options.indent,
|
|
indent = _options$indent === undefined ? 0 : _options$indent;
|
|
var fallbacks = style.fallbacks;
|
|
|
|
|
|
indent++;
|
|
|
|
// Apply fallbacks first.
|
|
if (fallbacks) {
|
|
// Array syntax {fallbacks: [{prop: value}]}
|
|
if (Array.isArray(fallbacks)) {
|
|
for (var index = 0; index < fallbacks.length; index++) {
|
|
var fallback = fallbacks[index];
|
|
for (var prop in fallback) {
|
|
var value = fallback[prop];
|
|
if (value != null) {
|
|
result += '\n' + indentStr(prop + ': ' + (0, _toCssValue2['default'])(value) + ';', indent);
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
// Object syntax {fallbacks: {prop: value}}
|
|
for (var _prop in fallbacks) {
|
|
var _value = fallbacks[_prop];
|
|
if (_value != null) {
|
|
result += '\n' + indentStr(_prop + ': ' + (0, _toCssValue2['default'])(_value) + ';', indent);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
for (var _prop2 in style) {
|
|
var _value2 = style[_prop2];
|
|
if (_value2 != null && _prop2 !== 'fallbacks') {
|
|
result += '\n' + indentStr(_prop2 + ': ' + (0, _toCssValue2['default'])(_value2) + ';', indent);
|
|
}
|
|
}
|
|
|
|
// Allow empty style in this case, because properties will be added dynamically.
|
|
if (!result && !options.allowEmpty) return result;
|
|
|
|
indent--;
|
|
result = indentStr(selector + ' {' + result + '\n', indent) + indentStr('}', indent);
|
|
|
|
return result;
|
|
} |