@churchapps/apphelper-markdown
Version:
ChurchApps markdown/lexical editor components
29 lines (28 loc) • 1.13 kB
JavaScript
import { EmojiNode, $isEmojiNode, $createEmojiNode } from "./EmojiNode";
import materialIcons from "../../IconNamesList";
import { $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) => {
const emojiNode = $createEmojiNode(textNode.__text.replaceAll(":", ""));
textNode.replace(emojiNode);
return emojiNode;
};
export const EMOJI_NODE_MARKDOWN_TRANSFORM = {
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"
};