UNPKG

apeman-react-style

Version:
144 lines (117 loc) 14 kB
/** * apeman react package for style component. * @class ApStyle */ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _server = require('react-dom/server'); var _server2 = _interopRequireDefault(_server); var _iftype = require('iftype'); var _iftype2 = _interopRequireDefault(_iftype); var _os = require('os'); var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); var _style_constants = require('./styling/style_constants'); var _style_string = require('./styling/style_string'); var _style_string2 = _interopRequireDefault(_style_string); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** @lends ApStyle */ var ApStyle = _react2.default.createClass({ displayName: 'ApStyle', // -------------------- // Specifications // -------------------- statics: { stringifyStyle: function stringifyStyle(style) { if (!style) { return ''; } var isString = _iftype2.default.isString(style); return isString ? style : (0, _style_string2.default)(style); }, stringifyMediaStyle: function stringifyMediaStyle(style, width) { if (!style) { return ''; } return '@media (min-width: ' + width + 'px) { ' + ApStyle.stringifyStyle(style) + ' }'; }, styleContent: function styleContent(elm) { return _server2.default.renderToStaticMarkup(elm).replace(/<style.*?>/, '').replace(/<\/style.*?>/, ''); }, DEFAULT_HIGHLIGHT_COLOR: '#38E', DEFAULT_BACKGROUND_COLOR: '#FFF', DEFAULT_DANGER_COLOR: '#B31818', NORMAL_COLOR: '#555', INFO_COLOR: '#0C843A', WARN_COLOR: '#9C9C19', ERROR_COLOR: '#B31818', CAPTION_COLOR: '#999', CAPTION_BORDER_COLOR: '#F0F0F0', COVER_BACKGROUND: 'rgba(255,255,255,0.8)', COVER_COLOR: '#CCC', CONTENT_PADDING: 4, CONTENT_WIDTH: 480, ROW_HEIGHT: 32, CONTAINER_WIDTH: 1024, SMALL_MEDIA_BREAKPOINT: _style_constants.SMALL_MEDIA_BREAKPOINT, MEDIUM_MEDIA_BREAKPOINT: _style_constants.MEDIUM_MEDIA_BREAKPOINT, LARGE_MEDIA_BREAKPOINT: _style_constants.LARGE_MEDIA_BREAKPOINT }, propTypes: { data: _react.PropTypes.oneOfType([_react.PropTypes.string, _react.PropTypes.objectOf(_react.PropTypes.object)]), smallMediaData: _react.PropTypes.oneOfType([_react.PropTypes.string, _react.PropTypes.object]), mediumMediaData: _react.PropTypes.oneOfType([_react.PropTypes.string, _react.PropTypes.object]), largeMediaData: _react.PropTypes.oneOfType([_react.PropTypes.string, _react.PropTypes.object]), type: _react.PropTypes.string }, getDefaultProps: function getDefaultProps() { return { data: null, smallMediaData: null, mediumMediaData: null, largeMediaData: null, type: 'text/css' }; }, getInitialState: function getInitialState() { return {}; }, render: function render() { var s = this; var props = s.props; var styleString = s.getStyleString() || ''; var childrenString = s.getChildrenString() || ''; return _react2.default.createElement('style', { className: (0, _classnames2.default)('ap-style', props.className), id: props.id || null, type: props.type, dangerouslySetInnerHTML: { __html: styleString + childrenString } }); }, // -------------------- // Specifications // -------------------- getStyleString: function getStyleString() { var s = this; var props = s.props; var data = props.data, smallMediaData = props.smallMediaData, mediumMediaData = props.mediumMediaData, largeMediaData = props.largeMediaData; return [ApStyle.stringifyStyle(data), ApStyle.stringifyMediaStyle(smallMediaData, _style_constants.SMALL_MEDIA_BREAKPOINT), ApStyle.stringifyMediaStyle(mediumMediaData, _style_constants.MEDIUM_MEDIA_BREAKPOINT), ApStyle.stringifyMediaStyle(largeMediaData, _style_constants.LARGE_MEDIA_BREAKPOINT)].filter(Boolean).join(_os.EOL); }, getChildrenString: function getChildrenString() { var s = this; var children = s.props.children; if (!children) { return null; } return [].concat(children).map(function (child) { return child; }).join(_os.EOL); } }); exports.default = ApStyle; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwX3N0eWxlLmpzeCJdLCJuYW1lcyI6WyJBcFN0eWxlIiwiY3JlYXRlQ2xhc3MiLCJzdGF0aWNzIiwic3RyaW5naWZ5U3R5bGUiLCJzdHlsZSIsImlzU3RyaW5nIiwic3RyaW5naWZ5TWVkaWFTdHlsZSIsIndpZHRoIiwic3R5bGVDb250ZW50IiwiZWxtIiwicmVuZGVyVG9TdGF0aWNNYXJrdXAiLCJyZXBsYWNlIiwiREVGQVVMVF9ISUdITElHSFRfQ09MT1IiLCJERUZBVUxUX0JBQ0tHUk9VTkRfQ09MT1IiLCJERUZBVUxUX0RBTkdFUl9DT0xPUiIsIk5PUk1BTF9DT0xPUiIsIklORk9fQ09MT1IiLCJXQVJOX0NPTE9SIiwiRVJST1JfQ09MT1IiLCJDQVBUSU9OX0NPTE9SIiwiQ0FQVElPTl9CT1JERVJfQ09MT1IiLCJDT1ZFUl9CQUNLR1JPVU5EIiwiQ09WRVJfQ09MT1IiLCJDT05URU5UX1BBRERJTkciLCJDT05URU5UX1dJRFRIIiwiUk9XX0hFSUdIVCIsIkNPTlRBSU5FUl9XSURUSCIsIlNNQUxMX01FRElBX0JSRUFLUE9JTlQiLCJNRURJVU1fTUVESUFfQlJFQUtQT0lOVCIsIkxBUkdFX01FRElBX0JSRUFLUE9JTlQiLCJwcm9wVHlwZXMiLCJkYXRhIiwib25lT2ZUeXBlIiwic3RyaW5nIiwib2JqZWN0T2YiLCJvYmplY3QiLCJzbWFsbE1lZGlhRGF0YSIsIm1lZGl1bU1lZGlhRGF0YSIsImxhcmdlTWVkaWFEYXRhIiwidHlwZSIsImdldERlZmF1bHRQcm9wcyIsImdldEluaXRpYWxTdGF0ZSIsInJlbmRlciIsInMiLCJwcm9wcyIsInN0eWxlU3RyaW5nIiwiZ2V0U3R5bGVTdHJpbmciLCJjaGlsZHJlblN0cmluZyIsImdldENoaWxkcmVuU3RyaW5nIiwiY2xhc3NOYW1lIiwiaWQiLCJfX2h0bWwiLCJmaWx0ZXIiLCJCb29sZWFuIiwiam9pbiIsImNoaWxkcmVuIiwiY29uY2F0IiwibWFwIiwiY2hpbGQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OztB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Ii8qKlxuICogYXBlbWFuIHJlYWN0IHBhY2thZ2UgZm9yIHN0eWxlIGNvbXBvbmVudC5cbiAqIEBjbGFzcyBBcFN0eWxlXG4gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbmltcG9ydCBSZWFjdCwge1Byb3BUeXBlcyBhcyB0eXBlc30gZnJvbSAncmVhY3QnXG5pbXBvcnQgUmVhY3RET01TZXJ2ZXIgZnJvbSAncmVhY3QtZG9tL3NlcnZlcidcbmltcG9ydCBpZnR5cGUgZnJvbSAnaWZ0eXBlJ1xuaW1wb3J0IHtFT0x9IGZyb20gJ29zJ1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcydcbmltcG9ydCB7XG4gIFNNQUxMX01FRElBX0JSRUFLUE9JTlQsXG4gIE1FRElVTV9NRURJQV9CUkVBS1BPSU5ULFxuICBMQVJHRV9NRURJQV9CUkVBS1BPSU5UXG59IGZyb20gJy4vc3R5bGluZy9zdHlsZV9jb25zdGFudHMnXG5pbXBvcnQgc3R5bGVTdHJpbmcgZnJvbSAnLi9zdHlsaW5nL3N0eWxlX3N0cmluZydcblxuLyoqIEBsZW5kcyBBcFN0eWxlICovXG5jb25zdCBBcFN0eWxlID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFNwZWNpZmljYXRpb25zXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIHN0YXRpY3M6IHtcbiAgICBzdHJpbmdpZnlTdHlsZSAoc3R5bGUpIHtcbiAgICAgIGlmICghc3R5bGUpIHtcbiAgICAgICAgcmV0dXJuICcnXG4gICAgICB9XG4gICAgICBsZXQgaXNTdHJpbmcgPSBpZnR5cGUuaXNTdHJpbmcoc3R5bGUpXG4gICAgICByZXR1cm4gaXNTdHJpbmcgPyBzdHlsZSA6IHN0eWxlU3RyaW5nKHN0eWxlKVxuICAgIH0sXG4gICAgc3RyaW5naWZ5TWVkaWFTdHlsZSAoc3R5bGUsIHdpZHRoKSB7XG4gICAgICBpZiAoIXN0eWxlKSB7XG4gICAgICAgIHJldHVybiAnJ1xuICAgICAgfVxuICAgICAgcmV0dXJuIGBAbWVkaWEgKG1pbi13aWR0aDogJHt3aWR0aH1weCkgeyAke0FwU3R5bGUuc3RyaW5naWZ5U3R5bGUoc3R5bGUpfSB9YFxuICAgIH0sXG4gICAgc3R5bGVDb250ZW50IChlbG0pIHtcbiAgICAgIHJldHVybiBSZWFjdERPTVNlcnZlci5yZW5kZXJUb1N0YXRpY01hcmt1cChlbG0pXG4gICAgICAgIC5yZXBsYWNlKC88c3R5bGUuKj8+LywgJycpXG4gICAgICAgIC5yZXBsYWNlKC88XFwvc3R5bGUuKj8+LywgJycpXG4gICAgfSxcbiAgICBERUZBVUxUX0hJR0hMSUdIVF9DT0xPUjogJyMzOEUnLFxuICAgIERFRkFVTFRfQkFDS0dST1VORF9DT0xPUjogJyNGRkYnLFxuICAgIERFRkFVTFRfREFOR0VSX0NPTE9SOiAnI0IzMTgxOCcsXG4gICAgTk9STUFMX0NPTE9SOiAnIzU1NScsXG4gICAgSU5GT19DT0xPUjogJyMwQzg0M0EnLFxuICAgIFdBUk5fQ09MT1I6ICcjOUM5QzE5JyxcbiAgICBFUlJPUl9DT0xPUjogJyNCMzE4MTgnLFxuICAgIENBUFRJT05fQ09MT1I6ICcjOTk5JyxcbiAgICBDQVBUSU9OX0JPUkRFUl9DT0xPUjogJyNGMEYwRjAnLFxuICAgIENPVkVSX0JBQ0tHUk9VTkQ6ICdyZ2JhKDI1NSwyNTUsMjU1LDAuOCknLFxuICAgIENPVkVSX0NPTE9SOiAnI0NDQycsXG4gICAgQ09OVEVOVF9QQURESU5HOiA0LFxuICAgIENPTlRFTlRfV0lEVEg6IDQ4MCxcbiAgICBST1dfSEVJR0hUOiAzMixcbiAgICBDT05UQUlORVJfV0lEVEg6IDEwMjQsXG5cbiAgICBTTUFMTF9NRURJQV9CUkVBS1BPSU5ULFxuICAgIE1FRElVTV9NRURJQV9CUkVBS1BPSU5ULFxuICAgIExBUkdFX01FRElBX0JSRUFLUE9JTlRcbiAgfSxcbiAgcHJvcFR5cGVzOiB7XG4gICAgZGF0YTogdHlwZXMub25lT2ZUeXBlKFtcbiAgICAgIHR5cGVzLnN0cmluZyxcbiAgICAgIHR5cGVzLm9iamVjdE9mKHR5cGVzLm9iamVjdClcbiAgICBdKSxcbiAgICBzbWFsbE1lZGlhRGF0YTogdHlwZXMub25lT2ZUeXBlKFtcbiAgICAgIHR5cGVzLnN0cmluZyxcbiAgICAgIHR5cGVzLm9iamVjdFxuICAgIF0pLFxuICAgIG1lZGl1bU1lZGlhRGF0YTogdHlwZXMub25lT2ZUeXBlKFtcbiAgICAgIHR5cGVzLnN0cmluZyxcbiAgICAgIHR5cGVzLm9iamVjdFxuICAgIF0pLFxuICAgIGxhcmdlTWVkaWFEYXRhOiB0eXBlcy5vbmVPZlR5cGUoW1xuICAgICAgdHlwZXMuc3RyaW5nLFxuICAgICAgdHlwZXMub2JqZWN0XG4gICAgXSksXG4gICAgdHlwZTogdHlwZXMuc3RyaW5nXG4gIH0sXG4gIGdldERlZmF1bHRQcm9wcyAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IG51bGwsXG4gICAgICBzbWFsbE1lZGlhRGF0YTogbnVsbCxcbiAgICAgIG1lZGl1bU1lZGlhRGF0YTogbnVsbCxcbiAgICAgIGxhcmdlTWVkaWFEYXRhOiBudWxsLFxuICAgICAgdHlwZTogJ3RleHQvY3NzJ1xuICAgIH1cbiAgfSxcbiAgZ2V0SW5pdGlhbFN0YXRlICgpIHtcbiAgICByZXR1cm4ge31cbiAgfSxcbiAgcmVuZGVyICgpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGxldCB7IHByb3BzIH0gPSBzXG5cbiAgICBsZXQgc3R5bGVTdHJpbmcgPSBzLmdldFN0eWxlU3RyaW5nKCkgfHwgJydcbiAgICBsZXQgY2hpbGRyZW5TdHJpbmcgPSBzLmdldENoaWxkcmVuU3RyaW5nKCkgfHwgJydcbiAgICByZXR1cm4gKFxuICAgICAgPHN0eWxlIGNsYXNzTmFtZT17IGNsYXNzbmFtZXMoJ2FwLXN0eWxlJywgcHJvcHMuY2xhc3NOYW1lKSB9XG4gICAgICAgICAgICAgaWQ9eyBwcm9wcy5pZCB8fCBudWxsIH1cbiAgICAgICAgICAgICB0eXBlPXsgcHJvcHMudHlwZSB9XG4gICAgICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9eyB7X19odG1sOiBzdHlsZVN0cmluZyArIGNoaWxkcmVuU3RyaW5nfSB9Lz5cbiAgICApXG4gIH0sXG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gU3BlY2lmaWNhdGlvbnNcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgZ2V0U3R5bGVTdHJpbmcgKCkge1xuICAgIGNvbnN0IHMgPSB0aGlzXG4gICAgbGV0IHsgcHJvcHMgfSA9IHNcbiAgICBsZXQgeyBkYXRhLCBzbWFsbE1lZGlhRGF0YSwgbWVkaXVtTWVkaWFEYXRhLCBsYXJnZU1lZGlhRGF0YSB9ID0gcHJvcHNcbiAgICByZXR1cm4gW1xuICAgICAgQXBTdHlsZS5zdHJpbmdpZnlTdHlsZShkYXRhKSxcbiAgICAgIEFwU3R5bGUuc3RyaW5naWZ5TWVkaWFTdHlsZShzbWFsbE1lZGlhRGF0YSwgU01BTExfTUVESUFfQlJFQUtQT0lOVCksXG4gICAgICBBcFN0eWxlLnN0cmluZ2lmeU1lZGlhU3R5bGUobWVkaXVtTWVkaWFEYXRhLCBNRURJVU1fTUVESUFfQlJFQUtQT0lOVCksXG4gICAgICBBcFN0eWxlLnN0cmluZ2lmeU1lZGlhU3R5bGUobGFyZ2VNZWRpYURhdGEsIExBUkdFX01FRElBX0JSRUFLUE9JTlQpXG4gICAgXS5maWx0ZXIoQm9vbGVhbikuam9pbihFT0wpXG4gIH0sXG4gIGdldENoaWxkcmVuU3RyaW5nICgpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGxldCB7IGNoaWxkcmVuIH0gPSBzLnByb3BzXG4gICAgaWYgKCFjaGlsZHJlbikge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgcmV0dXJuIFtdLmNvbmNhdChjaGlsZHJlbikubWFwKChjaGlsZCkgPT4ge1xuICAgICAgcmV0dXJuIGNoaWxkXG4gICAgfSkuam9pbihFT0wpXG4gIH1cbn0pXG5cbmV4cG9ydCBkZWZhdWx0IEFwU3R5bGVcbiJdfQ==