UNPKG

medium-draft

Version:

A medium like rich text editor built upon draft-js with an emphasis on eliminating mouse usage by adding relevant keyboard shortcuts

157 lines (144 loc) 6.29 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.setRenderOptions = exports.options = exports.entityToHTML = exports.blockToHTML = exports.styleToHTML = undefined; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _draftConvert = require('draft-convert'); var _constants = require('./util/constants'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var styleToHTML = exports.styleToHTML = function styleToHTML(style) { switch (style) { case _constants.Inline.ITALIC: return _react2.default.createElement('em', { className: 'md-inline-' + style.toLowerCase() }); case _constants.Inline.BOLD: return _react2.default.createElement('strong', { className: 'md-inline-' + style.toLowerCase() }); case _constants.Inline.STRIKETHROUGH: return _react2.default.createElement('strike', { className: 'md-inline-' + style.toLowerCase() }); case _constants.Inline.UNDERLINE: return _react2.default.createElement('u', { className: 'md-inline-' + style.toLowerCase() }); case _constants.Inline.HIGHLIGHT: return _react2.default.createElement('span', { className: 'md-inline-' + style.toLowerCase() }); case _constants.Inline.CODE: return _react2.default.createElement('code', { className: 'md-inline-' + style.toLowerCase() }); default: return null; } }; var blockToHTML = exports.blockToHTML = function blockToHTML(block) { var blockType = block.type; var blockClass = blockType.toLowerCase(); switch (blockType) { case _constants.Block.H1: // eslint-disable-next-line jsx-a11y/heading-has-content return _react2.default.createElement('h1', { className: 'md-block-' + blockClass }); case _constants.Block.H2: // eslint-disable-next-line jsx-a11y/heading-has-content return _react2.default.createElement('h2', { className: 'md-block-' + blockClass }); case _constants.Block.H3: // eslint-disable-next-line jsx-a11y/heading-has-content return _react2.default.createElement('h3', { className: 'md-block-' + blockClass }); case _constants.Block.H4: // eslint-disable-next-line jsx-a11y/heading-has-content return _react2.default.createElement('h4', { className: 'md-block-' + blockClass }); case _constants.Block.H5: // eslint-disable-next-line jsx-a11y/heading-has-content return _react2.default.createElement('h5', { className: 'md-block-' + blockClass }); case _constants.Block.H6: // eslint-disable-next-line jsx-a11y/heading-has-content return _react2.default.createElement('h6', { className: 'md-block-' + blockClass }); case _constants.Block.BLOCKQUOTE_CAPTION: case _constants.Block.CAPTION: return { start: '<p class="md-block-' + blockClass + '"><caption>', end: '</caption></p>' }; case _constants.Block.IMAGE: { var imgData = block.data; var text = block.text; var extraClass = text.length > 0 ? ' md-block-image-has-caption' : ''; return { start: '<figure class="md-block-image' + extraClass + '"><img src="' + imgData.src + '" alt="' + block.text + '" /><figcaption class="md-block-image-caption">', end: '</figcaption></figure>' }; } case _constants.Block.ATOMIC: return { start: '<figure class="md-block-' + blockClass + '">', end: '</figure>' }; case _constants.Block.TODO: { var checked = block.data.checked || false; var inp = ''; var containerClass = ''; if (checked) { inp = '<input type=checkbox disabled checked="checked" />'; containerClass = 'md-block-todo-checked'; } else { inp = '<input type=checkbox disabled />'; containerClass = 'md-block-todo-unchecked'; } return { start: '<div class="md-block-' + blockType + ' ' + containerClass + '">' + inp + '<p>', end: '</p></div>' }; } case _constants.Block.BREAK: return _react2.default.createElement('hr', { className: 'md-block-' + blockType }); case _constants.Block.BLOCKQUOTE: return _react2.default.createElement('blockquote', { className: 'md-block-' + blockType }); case _constants.Block.OL: return { element: _react2.default.createElement('li', null), nest: _react2.default.createElement('ol', { className: 'md-block-' + blockType }) }; case _constants.Block.UL: return { element: _react2.default.createElement('li', null), nest: _react2.default.createElement('ul', { className: 'md-block-' + blockType }) }; case _constants.Block.UNSTYLED: if (block.text.length < 1) { return _react2.default.createElement( 'p', { className: 'md-block-' + blockType }, _react2.default.createElement('br', null) ); } return _react2.default.createElement('p', { className: 'md-block-' + blockType }); case _constants.Block.CODE: return { element: _react2.default.createElement('pre', { className: 'md-block-' + blockType }), nest: _react2.default.createElement('div', { className: 'md-block-code-container' }) }; default: return null; } }; var entityToHTML = exports.entityToHTML = function entityToHTML(entity, originalText) { if (entity.type === _constants.Entity.LINK) { return _react2.default.createElement('a', { className: 'md-inline-link', href: entity.data.url, target: '_blank', rel: 'noopener noreferrer' }); } return originalText; }; var options = exports.options = { styleToHTML: styleToHTML, blockToHTML: blockToHTML, entityToHTML: entityToHTML }; var setRenderOptions = exports.setRenderOptions = function setRenderOptions() { var htmlOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : options; return (0, _draftConvert.convertToHTML)(htmlOptions); }; exports.default = function (contentState) { var htmlOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : options; return (0, _draftConvert.convertToHTML)(htmlOptions)(contentState); };