twreporter-react
Version:
React-Redux site for The Reporter Foundation in Taiwan
95 lines (71 loc) • 2.81 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
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;
return Object.keys(styles).reduce(function (accumulator, selector) {
var scopeSelector = _this.props.scopeSelector;
var rules = styles[selector];
if (selector === 'mediaQueries') {
accumulator += _this._buildMediaQueryString(rules);
} else {
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 contextMediaQueries = this._getContextMediaQueries();
var mediaQueryString = '';
Object.keys(stylesByMediaQuery).forEach(function (query) {
var completeQuery = contextMediaQueries[query] ? contextMediaQueries[query] : query;
mediaQueryString += '@media ' + completeQuery + '{' + _this2._buildStyles(stylesByMediaQuery[query]) + '}';
});
return mediaQueryString;
},
_getContextMediaQueries: function _getContextMediaQueries() {
var _this3 = this;
var contextMediaQueries = {};
if (this.context && this.context.mediaQueries) {
Object.keys(this.context.mediaQueries).forEach(function (query) {
contextMediaQueries[query] = _this3.context.mediaQueries[query].media;
});
}
return contextMediaQueries;
},
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'];