UNPKG

apeman-react-head

Version:
189 lines (172 loc) 17.7 kB
/** * apeman react package for head component. * @class ApHead */ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _stringcase = require('stringcase'); var _stringcase2 = _interopRequireDefault(_stringcase); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** @lends ApHead */ var ApHead = _react2.default.createClass({ displayName: 'ApHead', // -------------------- // Specs // -------------------- propTypes: { /** CharSet */ charset: _react.PropTypes.string, /** Document Title */ title: _react.PropTypes.string, /** Favicon */ icon: _react.PropTypes.string, /** Meta data */ meta: _react.PropTypes.oneOfType([_react.PropTypes.arrayOf(_react.PropTypes.object), _react.PropTypes.object]), /** Micro data settings */ itemProps: _react.PropTypes.oneOfType([_react.PropTypes.arrayOf(_react.PropTypes.object), _react.PropTypes.object]), /** CSS file urls */ css: _react.PropTypes.array, /** JS file urls */ js: _react.PropTypes.array, /** Version string */ version: _react.PropTypes.string, /** Querystring key for version */ versionKey: _react.PropTypes.string, /** Global variables */ globals: _react.PropTypes.object, /** View port settings */ viewport: _react.PropTypes.object }, mixins: [], statics: { renderCharset: function renderCharset(charset) { if (!charset) { return null; } return _react2.default.createElement('meta', { className: 'ap-head-meta', charSet: charset }); }, renderTitle: function renderTitle(title) { if (!title) { return null; } return _react2.default.createElement( 'title', { className: 'ap-head-title' }, title ); }, renderIcon: function renderIcon(url, query) { if (!url) { return null; } return _react2.default.createElement('link', { rel: 'icon', href: ApHead._addQuery(url, query) }); }, renderMetaValues: function renderMetaValues(values) { if (!values) { return null; } return [].concat(values).map(function (values, i) { return Object.keys(values).map(function (name, j) { return _react2.default.createElement('meta', { name: name, content: values[name], key: 'meta-' + i + '-' + j }); }); }).reduce(function (a, b) { return [].concat(a, b); }, []); }, renderItemProps: function renderItemProps(values) { if (!values) { return null; } return [].concat(values).map(function (values, i) { return Object.keys(values).map(function (name, j) { return _react2.default.createElement('meta', { itemProp: name, content: values[name], key: 'item-prop' + i + '-' + j }); }); }).reduce(function (a, b) { return [].concat(a, b); }, []); }, renderCss: function renderCss(urls, query) { if (!urls) { return null; } return [].concat(urls).map(function (url, i) { return _react2.default.createElement('link', { rel: 'stylesheet', type: 'text/css', key: 'css-' + i + '-' + url, href: ApHead._addQuery(url, query) }); }); }, renderJs: function renderJs(urls, query) { if (!urls) { return null; } return [].concat(urls).map(function (url, i) { return _react2.default.createElement('script', { type: 'text/javascript', key: 'js-' + i + '-' + url, src: ApHead._addQuery(url, query) }); }); }, renderGlobals: function renderGlobals(values) { var _stringify = function _stringify(data) { return data ? JSON.stringify(data || {}) : "null"; }; return Object.keys(values || {}).map(function (key, i) { return _react2.default.createElement('script', { type: 'text/javascript', key: 'global-' + i + '-' + key, dangerouslySetInnerHTML: { __html: 'window.' + key + '=' + _stringify(values[key]) } }); }); }, renderViewPort: function renderViewPort(values) { var content = Object.keys(values || {}).map(function (key) { return [_stringcase2.default.spinalcase(key), values[key]].join('='); }).join(','); return _react2.default.createElement('meta', { name: 'viewport', content: content }); }, _addQuery: function _addQuery(url, query) { var joiner = /\?/.test(url) ? '&' : '?'; return [url, query].join(joiner); } }, getInitialState: function getInitialState() { return {}; }, getDefaultProps: function getDefaultProps() { return { version: 'unknown', versionKey: 'v', viewport: { width: 'device-width', initialScale: '1.0' } }; }, render: function render() { var s = this; var props = s.props; var query = [props.versionKey, props.version].join('='); return _react2.default.createElement( 'head', { className: 'ap-head' }, ApHead.renderCharset(props.charset), ApHead.renderTitle(props.title), ApHead.renderMetaValues(props.meta), ApHead.renderItemProps(props.itemProps), ApHead.renderIcon(props.icon, query), ApHead.renderJs(props.js, query), ApHead.renderCss(props.css, query), ApHead.renderGlobals(props.globals), ApHead.renderViewPort(props.viewport), props.children ); } }); exports.default = ApHead; //# sourceMappingURL=data:application/json;base64,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O0FBQ1IsUUFBTSxJQUFJLElBQVY7QUFEUSxRQUVGLEtBRkUsR0FFUSxDQUZSLENBRUYsS0FGRTs7O0FBSVIsUUFBSSxRQUFRLENBQUUsTUFBTSxVQUFSLEVBQW9CLE1BQU0sT0FBMUIsRUFBb0MsSUFBcEMsQ0FBeUMsR0FBekMsQ0FBWjtBQUNBLFdBQ0U7QUFBQTtNQUFBLEVBQU0sV0FBVSxTQUFoQjtNQUNJLE9BQU8sYUFBUCxDQUFxQixNQUFNLE9BQTNCLENBREo7TUFFSSxPQUFPLFdBQVAsQ0FBbUIsTUFBTSxLQUF6QixDQUZKO01BR0ksT0FBTyxnQkFBUCxDQUF3QixNQUFNLElBQTlCLENBSEo7TUFJSSxPQUFPLGVBQVAsQ0FBdUIsTUFBTSxTQUE3QixDQUpKO01BS0ksT0FBTyxVQUFQLENBQWtCLE1BQU0sSUFBeEIsRUFBOEIsS0FBOUIsQ0FMSjtNQU1JLE9BQU8sUUFBUCxDQUFnQixNQUFNLEVBQXRCLEVBQTBCLEtBQTFCLENBTko7TUFPSSxPQUFPLFNBQVAsQ0FBaUIsTUFBTSxHQUF2QixFQUE0QixLQUE1QixDQVBKO01BUUksT0FBTyxhQUFQLENBQXFCLE1BQU0sT0FBM0IsQ0FSSjtNQVNJLE9BQU8sY0FBUCxDQUFzQixNQUFNLFFBQTVCLENBVEo7TUFVSSxNQUFNO0FBVlYsS0FERjtBQWNEO0FBcks4QixDQUFsQixDQUFmOztrQkF3S2UsTSIsImZpbGUiOiJhcF9oZWFkLmpzIiwic291cmNlUm9vdCI6Ii9Vc2Vycy9va3VuaXNoaW5pc2hpL1Byb2plY3RzL2FwZW1hbi1wcm9qZWN0cy9hcGVtYW4tcmVhY3QtaGVhZC9saWIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGFwZW1hbiByZWFjdCBwYWNrYWdlIGZvciBoZWFkIGNvbXBvbmVudC5cbiAqIEBjbGFzcyBBcEhlYWRcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuaW1wb3J0IFJlYWN0LCB7UHJvcFR5cGVzIGFzIHR5cGVzfSBmcm9tICdyZWFjdCdcbmltcG9ydCBzdHJpbmdjYXNlIGZyb20gJ3N0cmluZ2Nhc2UnXG5cbi8qKiBAbGVuZHMgQXBIZWFkICovXG5jb25zdCBBcEhlYWQgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFNwZWNzXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHJvcFR5cGVzOiB7XG4gICAgLyoqIENoYXJTZXQgKi9cbiAgICBjaGFyc2V0OiB0eXBlcy5zdHJpbmcsXG4gICAgLyoqIERvY3VtZW50IFRpdGxlICovXG4gICAgdGl0bGU6IHR5cGVzLnN0cmluZyxcbiAgICAvKiogRmF2aWNvbiAqL1xuICAgIGljb246IHR5cGVzLnN0cmluZyxcbiAgICAvKiogTWV0YSBkYXRhICovXG4gICAgbWV0YTogdHlwZXMub25lT2ZUeXBlKFtcbiAgICAgIHR5cGVzLmFycmF5T2YodHlwZXMub2JqZWN0KSxcbiAgICAgIHR5cGVzLm9iamVjdFxuICAgIF0pLFxuICAgIC8qKiBNaWNybyBkYXRhIHNldHRpbmdzICovXG4gICAgaXRlbVByb3BzOiB0eXBlcy5vbmVPZlR5cGUoW1xuICAgICAgdHlwZXMuYXJyYXlPZih0eXBlcy5vYmplY3QpLFxuICAgICAgdHlwZXMub2JqZWN0XG4gICAgXSksXG4gICAgLyoqIENTUyBmaWxlIHVybHMgKi9cbiAgICBjc3M6IHR5cGVzLmFycmF5LFxuICAgIC8qKiBKUyBmaWxlIHVybHMgKi9cbiAgICBqczogdHlwZXMuYXJyYXksXG4gICAgLyoqIFZlcnNpb24gc3RyaW5nICovXG4gICAgdmVyc2lvbjogdHlwZXMuc3RyaW5nLFxuICAgIC8qKiBRdWVyeXN0cmluZyBrZXkgZm9yIHZlcnNpb24gKi9cbiAgICB2ZXJzaW9uS2V5OiB0eXBlcy5zdHJpbmcsXG4gICAgLyoqIEdsb2JhbCB2YXJpYWJsZXMgKi9cbiAgICBnbG9iYWxzOiB0eXBlcy5vYmplY3QsXG4gICAgLyoqIFZpZXcgcG9ydCBzZXR0aW5ncyAqL1xuICAgIHZpZXdwb3J0OiB0eXBlcy5vYmplY3RcbiAgfSxcblxuICBtaXhpbnM6IFtdLFxuXG4gIHN0YXRpY3M6IHtcbiAgICByZW5kZXJDaGFyc2V0IChjaGFyc2V0KSB7XG4gICAgICBpZiAoIWNoYXJzZXQpIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxtZXRhIGNsYXNzTmFtZT1cImFwLWhlYWQtbWV0YVwiIGNoYXJTZXQ9e2NoYXJzZXR9Lz5cbiAgICAgIClcbiAgICB9LFxuICAgIHJlbmRlclRpdGxlICh0aXRsZSkge1xuICAgICAgaWYgKCF0aXRsZSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHRpdGxlIGNsYXNzTmFtZT1cImFwLWhlYWQtdGl0bGVcIj57dGl0bGV9PC90aXRsZT5cbiAgICAgIClcbiAgICB9LFxuICAgIHJlbmRlckljb24gKHVybCwgcXVlcnkpIHtcbiAgICAgIGlmICghdXJsKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8bGluayByZWw9XCJpY29uXCIgaHJlZj17IEFwSGVhZC5fYWRkUXVlcnkodXJsLCBxdWVyeSkgfS8+XG4gICAgICApXG4gICAgfSxcbiAgICByZW5kZXJNZXRhVmFsdWVzICh2YWx1ZXMpIHtcbiAgICAgIGlmICghdmFsdWVzKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgICByZXR1cm4gW10uY29uY2F0KHZhbHVlcykubWFwKCh2YWx1ZXMsIGkpID0+XG4gICAgICAgIE9iamVjdC5rZXlzKHZhbHVlcykubWFwKChuYW1lLCBqKSA9PlxuICAgICAgICAgIDxtZXRhIG5hbWU9eyBuYW1lIH1cbiAgICAgICAgICAgICAgICBjb250ZW50PXsgdmFsdWVzW25hbWVdIH1cbiAgICAgICAgICAgICAgICBrZXk9eyBgbWV0YS0ke2l9LSR7an1gIH0vPlxuICAgICAgICApXG4gICAgICApLnJlZHVjZSgoYSwgYikgPT4gW10uY29uY2F0KGEsIGIpLCBbXSlcbiAgICB9LFxuICAgIHJlbmRlckl0ZW1Qcm9wcyAodmFsdWVzKSB7XG4gICAgICBpZiAoIXZhbHVlcykge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgICAgcmV0dXJuIFtdLmNvbmNhdCh2YWx1ZXMpLm1hcCgodmFsdWVzLCBpKSA9PlxuICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZXMpLm1hcCgobmFtZSwgaikgPT5cbiAgICAgICAgICA8bWV0YSBpdGVtUHJvcD17IG5hbWUgfVxuICAgICAgICAgICAgICAgIGNvbnRlbnQ9eyB2YWx1ZXNbbmFtZV0gfVxuICAgICAgICAgICAgICAgIGtleT17IGBpdGVtLXByb3Ake2l9LSR7an1gIH0vPlxuICAgICAgICApXG4gICAgICApLnJlZHVjZSgoYSwgYikgPT4gW10uY29uY2F0KGEsIGIpLCBbXSlcbiAgICB9LFxuICAgIHJlbmRlckNzcyAodXJscywgcXVlcnkpIHtcbiAgICAgIGlmICghdXJscykge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgICAgcmV0dXJuIFtdLmNvbmNhdCh1cmxzKS5tYXAoKHVybCwgaSkgPT5cbiAgICAgICAgPGxpbmsgcmVsPVwic3R5bGVzaGVldFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0L2Nzc1wiXG4gICAgICAgICAgICAgIGtleT17IGBjc3MtJHtpfS0ke3VybH1gIH1cbiAgICAgICAgICAgICAgaHJlZj17IEFwSGVhZC5fYWRkUXVlcnkodXJsLCBxdWVyeSkgfS8+XG4gICAgICApXG4gICAgfSxcbiAgICByZW5kZXJKcyAodXJscywgcXVlcnkpIHtcbiAgICAgIGlmICghdXJscykge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgICAgcmV0dXJuIFtdLmNvbmNhdCh1cmxzKS5tYXAoKHVybCwgaSkgPT5cbiAgICAgICAgPHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCJcbiAgICAgICAgICAgICAgICBrZXk9eyBganMtJHtpfS0ke3VybH1gIH1cbiAgICAgICAgICAgICAgICBzcmM9eyBBcEhlYWQuX2FkZFF1ZXJ5KHVybCxxdWVyeSl9Pjwvc2NyaXB0PlxuICAgICAgKVxuICAgIH0sXG4gICAgcmVuZGVyR2xvYmFscyAodmFsdWVzKSB7XG4gICAgICBsZXQgX3N0cmluZ2lmeSA9IChkYXRhKSA9PiBkYXRhID8gSlNPTi5zdHJpbmdpZnkoZGF0YSB8fCB7fSkgOiBcIm51bGxcIlxuXG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModmFsdWVzIHx8IHt9KS5tYXAoKGtleSwgaSkgPT5cbiAgICAgICAgPHNjcmlwdCB0eXBlPVwidGV4dC9qYXZhc2NyaXB0XCJcbiAgICAgICAgICAgICAgICBrZXk9eyBgZ2xvYmFsLSR7aX0tJHtrZXl9YCB9XG4gICAgICAgICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e1xuICAgICAgICAgICAgICAgICAgICB7X19odG1sOiBgd2luZG93LiR7a2V5fT0ke19zdHJpbmdpZnkodmFsdWVzW2tleV0pfWB9XG4gICAgICAgICAgICAgICAgICAgIH0+PC9zY3JpcHQ+XG4gICAgICApXG4gICAgfSxcbiAgICByZW5kZXJWaWV3UG9ydCAodmFsdWVzKSB7XG4gICAgICBsZXQgY29udGVudCA9IE9iamVjdC5rZXlzKHZhbHVlcyB8fCB7fSkubWFwKChrZXkpID0+XG4gICAgICAgIFsgc3RyaW5nY2FzZS5zcGluYWxjYXNlKGtleSksIHZhbHVlc1sga2V5IF0gXS5qb2luKCc9JylcbiAgICAgICkuam9pbignLCcpXG4gICAgICByZXR1cm4gPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD17IGNvbnRlbnQgfS8+XG4gICAgfSxcbiAgICBfYWRkUXVlcnkgKHVybCwgcXVlcnkpIHtcbiAgICAgIGxldCBqb2luZXIgPSAvXFw/Ly50ZXN0KHVybCkgPyAnJicgOiAnPydcbiAgICAgIHJldHVybiBbIHVybCwgcXVlcnkgXS5qb2luKGpvaW5lcilcbiAgICB9XG4gIH0sXG5cbiAgZ2V0SW5pdGlhbFN0YXRlICgpIHtcbiAgICByZXR1cm4ge31cbiAgfSxcblxuICBnZXREZWZhdWx0UHJvcHMgKCkge1xuICAgIHJldHVybiB7XG4gICAgICB2ZXJzaW9uOiAndW5rbm93bicsXG4gICAgICB2ZXJzaW9uS2V5OiAndicsXG4gICAgICB2aWV3cG9ydDoge1xuICAgICAgICB3aWR0aDogJ2RldmljZS13aWR0aCcsXG4gICAgICAgIGluaXRpYWxTY2FsZTogJzEuMCdcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcmVuZGVyICgpIHtcbiAgICBjb25zdCBzID0gdGhpc1xuICAgIGxldCB7IHByb3BzIH0gPSBzXG5cbiAgICBsZXQgcXVlcnkgPSBbIHByb3BzLnZlcnNpb25LZXksIHByb3BzLnZlcnNpb24gXS5qb2luKCc9JylcbiAgICByZXR1cm4gKFxuICAgICAgPGhlYWQgY2xhc3NOYW1lPVwiYXAtaGVhZFwiPlxuICAgICAgICB7IEFwSGVhZC5yZW5kZXJDaGFyc2V0KHByb3BzLmNoYXJzZXQpIH1cbiAgICAgICAgeyBBcEhlYWQucmVuZGVyVGl0bGUocHJvcHMudGl0bGUpIH1cbiAgICAgICAgeyBBcEhlYWQucmVuZGVyTWV0YVZhbHVlcyhwcm9wcy5tZXRhKSB9XG4gICAgICAgIHsgQXBIZWFkLnJlbmRlckl0ZW1Qcm9wcyhwcm9wcy5pdGVtUHJvcHMpIH1cbiAgICAgICAgeyBBcEhlYWQucmVuZGVySWNvbihwcm9wcy5pY29uLCBxdWVyeSkgfVxuICAgICAgICB7IEFwSGVhZC5yZW5kZXJKcyhwcm9wcy5qcywgcXVlcnkpIH1cbiAgICAgICAgeyBBcEhlYWQucmVuZGVyQ3NzKHByb3BzLmNzcywgcXVlcnkpIH1cbiAgICAgICAgeyBBcEhlYWQucmVuZGVyR2xvYmFscyhwcm9wcy5nbG9iYWxzKSB9XG4gICAgICAgIHsgQXBIZWFkLnJlbmRlclZpZXdQb3J0KHByb3BzLnZpZXdwb3J0KSB9XG4gICAgICAgIHsgcHJvcHMuY2hpbGRyZW4gfVxuICAgICAgPC9oZWFkPlxuICAgIClcbiAgfVxufSlcblxuZXhwb3J0IGRlZmF1bHQgQXBIZWFkXG4iXX0=