UNPKG

spectacle

Version:

ReactJS Powered Presentation Framework

198 lines (141 loc) 6.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.mdastConfigDefault = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _react = require("react"); var _react2 = _interopRequireDefault(_react); var _mdast = require("mdast"); var _mdast2 = _interopRequireDefault(_mdast); var _mdastReact = require("mdast-react"); var _mdastReact2 = _interopRequireDefault(_mdastReact); var _lodash = require("lodash"); var _blockQuote = require("./block-quote"); var _blockQuote2 = _interopRequireDefault(_blockQuote); var _codePane = require("./code-pane"); var _codePane2 = _interopRequireDefault(_codePane); var _code = require("./code"); var _code2 = _interopRequireDefault(_code); var _heading = require("./heading"); var _heading2 = _interopRequireDefault(_heading); var _image = require("./image"); var _image2 = _interopRequireDefault(_image); var _link = require("./link"); var _link2 = _interopRequireDefault(_link); var _list = require("./list"); var _list2 = _interopRequireDefault(_list); var _listItem = require("./list-item"); var _listItem2 = _interopRequireDefault(_listItem); var _quote = require("./quote"); var _quote2 = _interopRequireDefault(_quote); var _s = require("./s"); var _s2 = _interopRequireDefault(_s); var _text = require("./text"); var _text2 = _interopRequireDefault(_text); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // We can't pass props into mdast-react directly, so we have to "bind" them // to spectacle components (ex. headings, strong/em/del) var spectacleComponent = function spectacleComponent(component) { var boundProps = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; return _react2.default.createClass({ propTypes: function propTypes() { return { children: _react.PropTypes.children }; }, render: function render() { var props = _extends({}, this.props, boundProps); return _react2.default.createElement(component, _extends({}, props), this.props.children); } }); }; // Spectacle requires a <Quote> inside a <BlockQuote> var CombinedBlockQuote = function (_Component) { _inherits(CombinedBlockQuote, _Component); function CombinedBlockQuote() { _classCallCheck(this, CombinedBlockQuote); return _possibleConstructorReturn(this, Object.getPrototypeOf(CombinedBlockQuote).apply(this, arguments)); } _createClass(CombinedBlockQuote, [{ key: "render", value: function render() { return _react2.default.createElement( _blockQuote2.default, null, _react2.default.createElement( _quote2.default, null, this.props.children ) ); } }]); return CombinedBlockQuote; }(_react.Component); CombinedBlockQuote.propTypes = { children: _react.PropTypes.object }; // We export the default config so people can extend it themselves var mdastConfigDefault = exports.mdastConfigDefault = { commonmark: true, paragraphBlockquotes: false, mdastReactComponents: { a: _link2.default, blockquote: CombinedBlockQuote, code: _codePane2.default, del: spectacleComponent(_s2.default, { type: "strikethrough" }), em: spectacleComponent(_s2.default, { type: "italic" }), h1: spectacleComponent(_heading2.default, { size: 1 }), h2: spectacleComponent(_heading2.default, { size: 2 }), h3: spectacleComponent(_heading2.default, { size: 3 }), h4: spectacleComponent(_heading2.default, { size: 4 }), h5: spectacleComponent(_heading2.default, { size: 5 }), h6: spectacleComponent(_heading2.default, { size: 6 }), img: _image2.default, inlineCode: _code2.default, li: _listItem2.default, p: _text2.default, strong: spectacleComponent(_s2.default, { type: "bold" }), ul: _list2.default } }; var Markdown = function (_React$Component) { _inherits(Markdown, _React$Component); function Markdown() { _classCallCheck(this, Markdown); return _possibleConstructorReturn(this, Object.getPrototypeOf(Markdown).apply(this, arguments)); } _createClass(Markdown, [{ key: "render", value: function render() { var _props = this.props; var source = _props.source; var children = _props.children; var mdastConfig = _props.mdastConfig; var content = (0, _lodash.isUndefined)(source) || source === "" ? children : source; return _react2.default.createElement( "div", { style: this.props.style }, (0, _mdast2.default)().use(_mdastReact2.default, mdastConfig).process(content) ); } }]); return Markdown; }(_react2.default.Component); exports.default = Markdown; Markdown.propTypes = { style: _react.PropTypes.object, children: _react.PropTypes.node, source: _react.PropTypes.string, mdastConfig: _react.PropTypes.object }; Markdown.defaultProps = { style: {}, source: "", mdastConfig: mdastConfigDefault };