UNPKG

plotly-icons

Version:
151 lines (114 loc) 4.56 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _set = require('babel-runtime/core-js/set'); var _set2 = _interopRequireDefault(_set); var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray'); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of'); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require('babel-runtime/helpers/inherits'); var _inherits3 = _interopRequireDefault(_inherits2); exports.defaultHead = defaultHead; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _sideEffect = require('./side-effect'); var _sideEffect2 = _interopRequireDefault(_sideEffect); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var Head = function (_React$Component) { (0, _inherits3.default)(Head, _React$Component); function Head() { (0, _classCallCheck3.default)(this, Head); return (0, _possibleConstructorReturn3.default)(this, (Head.__proto__ || (0, _getPrototypeOf2.default)(Head)).apply(this, arguments)); } (0, _createClass3.default)(Head, [{ key: 'render', value: function render() { return null; } }]); return Head; }(_react2.default.Component); Head.contextTypes = { headManager: _propTypes2.default.object }; function defaultHead() { return [_react2.default.createElement('meta', { charSet: 'utf-8', className: 'next-head' })]; } function reduceComponents(components) { var _components$map$map$r; return (_components$map$map$r = components.map(function (c) { return c.props.children; }).map(function (children) { return _react2.default.Children.toArray(children); }).reduce(function (a, b) { return a.concat(b); }, []).reduce(function (a, b) { if (_react2.default.Fragment && b.type === _react2.default.Fragment) { return a.concat(_react2.default.Children.toArray(b.props.children)); } return a.concat(b); }, []).reverse()).concat.apply(_components$map$map$r, (0, _toConsumableArray3.default)(defaultHead())).filter(function (c) { return !!c; }).filter(unique()).reverse().map(function (c) { var className = (c.props && c.props.className ? c.props.className + ' ' : '') + 'next-head'; return _react2.default.cloneElement(c, { className: className }); }); } function mapOnServer(head) { return head; } function onStateChange(head) { if (this.context && this.context.headManager) { this.context.headManager.updateHead(head); } } var METATYPES = ['name', 'httpEquiv', 'charSet', 'itemProp', 'property']; // returns a function for filtering head child elements // which shouldn't be duplicated, like <title/>. function unique() { var keys = new _set2.default(); var tags = new _set2.default(); var metaTypes = new _set2.default(); var metaCategories = {}; return function (h) { if (h.key && h.key.indexOf('.$') === 0) { if (keys.has(h.key)) return false; keys.add(h.key); } switch (h.type) { case 'title': case 'base': if (tags.has(h.type)) return false; tags.add(h.type); break; case 'meta': for (var i = 0, len = METATYPES.length; i < len; i++) { var metatype = METATYPES[i]; if (!h.props.hasOwnProperty(metatype)) continue; if (metatype === 'charSet') { if (metaTypes.has(metatype)) return false; metaTypes.add(metatype); } else { var category = h.props[metatype]; var categories = metaCategories[metatype] || new _set2.default(); if (categories.has(category)) return false; categories.add(category); metaCategories[metatype] = categories; } } break; } return true; }; } exports.default = (0, _sideEffect2.default)(reduceComponents, onStateChange, mapOnServer)(Head);