kitchensink
Version:
Dispatch's awesome components and style guide
92 lines (67 loc) • 2.93 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
var _cssRuleSetToString = require('../css-rule-set-to-string');
var _cssRuleSetToString2 = _interopRequireDefault(_cssRuleSetToString);
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var Style = _react2.default.createClass({
displayName: 'Style',
propTypes: {
radiumConfig: _react.PropTypes.object,
rules: _react.PropTypes.object,
scopeSelector: _react.PropTypes.string
},
contextTypes: {
_radiumConfig: _react.PropTypes.object
},
getDefaultProps: function getDefaultProps() {
return {
scopeSelector: ''
};
},
_buildStyles: function _buildStyles(styles) {
var _this = this;
var userAgent = this.props.radiumConfig && this.props.radiumConfig.userAgent || this.context && this.context._radiumConfig && this.context._radiumConfig.userAgent;
var scopeSelector = this.props.scopeSelector;
var rootRules = Object.keys(styles).reduce(function (accumulator, selector) {
if (_typeof(styles[selector]) !== 'object') {
accumulator[selector] = styles[selector];
}
return accumulator;
}, {});
var rootStyles = Object.keys(rootRules).length ? (0, _cssRuleSetToString2.default)(scopeSelector || '', rootRules, userAgent) : '';
return rootStyles + Object.keys(styles).reduce(function (accumulator, selector) {
var rules = styles[selector];
if (selector === 'mediaQueries') {
accumulator += _this._buildMediaQueryString(rules);
} else if (_typeof(styles[selector]) === 'object') {
var completeSelector = scopeSelector ? selector.split(',').map(function (part) {
return scopeSelector + ' ' + part.trim();
}).join(',') : selector;
accumulator += (0, _cssRuleSetToString2.default)(completeSelector, rules, userAgent);
}
return accumulator;
}, '');
},
_buildMediaQueryString: function _buildMediaQueryString(stylesByMediaQuery) {
var _this2 = this;
var mediaQueryString = '';
Object.keys(stylesByMediaQuery).forEach(function (query) {
mediaQueryString += '@media ' + query + '{' + _this2._buildStyles(stylesByMediaQuery[query]) + '}';
});
return mediaQueryString;
},
render: function render() {
if (!this.props.rules) {
return null;
}
var styles = this._buildStyles(this.props.rules);
return _react2.default.createElement('style', { dangerouslySetInnerHTML: { __html: styles } });
}
});
exports.default = Style;
module.exports = exports['default'];