UNPKG

@churchapps/apphelper-markdown

Version:
42 lines (31 loc) 1.24 kB
import { EmojiNode, $isEmojiNode, $createEmojiNode } from './EmojiNode'; import materialIcons from '../../IconNamesList'; import type { TextMatchTransformer } from "@lexical/markdown"; import { TextNode, $isTextNode } from "lexical"; const EMOJI_NODE_MARKDOWN_REGEX_QUERY = /:[A-Za-z_]+:$/; export const EMOJI_NODE_MARKDOWN_REGEX = new RegExp(EMOJI_NODE_MARKDOWN_REGEX_QUERY); const replaceEmojiMarkdownWithNode = (textNode: TextNode) => { const emojiNode = $createEmojiNode( textNode.__text.replaceAll(':', '') ); textNode.replace(emojiNode); return emojiNode; }; export const EMOJI_NODE_MARKDOWN_TRANSFORM: TextMatchTransformer = { dependencies: [EmojiNode], export: (node, exportChildren, exportFormat) => { if (!($isEmojiNode(node) || $isTextNode(node))) { return null; } if (!materialIcons || !materialIcons.includes(node.getTextContent().replaceAll(':', ''))) { return null; } const linkContent = ':' + node.__text.replaceAll(':', '') + ':'; return linkContent; }, importRegExp: EMOJI_NODE_MARKDOWN_REGEX, regExp: EMOJI_NODE_MARKDOWN_REGEX, replace: replaceEmojiMarkdownWithNode, trigger: ":", type: "text-match" };