UNPKG

@accordproject/markdown-editor

Version:

A rich text editor that can read and write markdown text. Based on Slate.js.

104 lines (81 loc) 2.66 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireDefault(require("react")); var CONST = _interopRequireWildcard(require("../constants")); var _toolbarMethods = require("../FormattingToolbar/toolbarMethods"); /** * This is a plugin into the markdown editor to handle lists */ function List() { const name = 'list'; /** * @param {Event} event * @param {Editor} editor * @param {Function} next */ const onEnter = (event, editor, next) => { const value = editor.value; const startBlock = value.startBlock; event.preventDefault(); // Hitting enter on a blank list item will break out of the enclosing list if ((0, _toolbarMethods.isSelectionInput)(value, CONST.LIST_ITEM) && startBlock.text.length === 0) { editor.withoutNormalizing(() => { event.preventDefault(); editor.setBlocks(CONST.PARAGRAPH).unwrapBlock(CONST.LIST_ITEM).unwrapBlock((0, _toolbarMethods.currentList)(value).type); }); return false; } // Hitting enter on a non-empty list item will add a new list_item if ((0, _toolbarMethods.isSelectionInput)(value, CONST.LIST_ITEM) && startBlock.text.length !== 0) { editor.withoutNormalizing(() => { event.preventDefault(); editor.splitBlock().unwrapBlock(CONST.LIST_ITEM).wrapBlock(CONST.LIST_ITEM); }); return true; } return next(); }; /** * @param {Event} event * @param {Editor} editor * @param {Function} next */ const onKeyDown = (event, editor, next) => { switch (event.key) { case 'Enter': return onEnter(event, editor, next); default: return next(); } }; /** * @param {Object} props * @param {Editor} editor * @param {Function} next */ const renderBlock = (props, editor, next) => { const node = props.node, attributes = props.attributes, children = props.children; switch (node.type) { case CONST.OL_LIST: return _react.default.createElement("ol", attributes, children); case CONST.UL_LIST: return _react.default.createElement("ul", attributes, children); case CONST.LIST_ITEM: return _react.default.createElement("li", attributes, children); default: return next(); } }; return { name, onKeyDown, renderBlock }; } var _default = List; exports.default = _default;