UNPKG

@atlaskit/adf-schema

Version:

Shared package that contains the ADF-schema (json) and ProseMirror node/mark specs

176 lines (174 loc) 6.45 kB
import { acNameToEmoji, acShortcutToEmoji } from '../../utils/confluence/emoji'; import { emoji as emojiFactory } from '../../next-schema/generated/nodeTypes'; import { uuid } from '../../utils/uuid'; /** * @name emoji_node */ export const emoji = emojiFactory({ parseDOM: [ // Handle copy/paste beautiful panel from renderer /> { tag: 'div.ak-editor-panel__icon span', ignore: true }, { tag: 'span[data-emoji-short-name]', getAttrs: domNode => { // eslint-disable-next-line @atlaskit/editor/no-as-casting const dom = domNode; return { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion shortName: dom.getAttribute('data-emoji-short-name') || // eslint-disable-next-line @typescript-eslint/no-non-null-assertion emoji.attrs.shortName.default, // eslint-disable-next-line @typescript-eslint/no-non-null-assertion id: dom.getAttribute('data-emoji-id') || emoji.attrs.id.default, // eslint-disable-next-line @typescript-eslint/no-non-null-assertion text: // eslint-disable-next-line @typescript-eslint/no-non-null-assertion dom.getAttribute('data-emoji-text') || emoji.attrs.text.default }; } }, // Handle copy/paste from old <ac:emoticon /> { tag: 'img[data-emoticon-name]', // eslint-disable-next-line @typescript-eslint/no-explicit-any getAttrs: dom => acNameToEmoji( // eslint-disable-next-line @typescript-eslint/no-explicit-any dom.getAttribute('data-emoticon-name')) }, // Handle copy/paste from old <ac:hipchat-emoticons /> { tag: 'img[data-hipchat-emoticon]', // eslint-disable-next-line @typescript-eslint/no-non-null-assertion getAttrs: dom => acShortcutToEmoji( // eslint-disable-next-line @typescript-eslint/no-non-null-assertion dom.getAttribute('data-hipchat-emoticon')) }, // Handle copy/paste from bitbucket's <img class="emoji" /> { tag: 'img.emoji[data-emoji-short-name]', getAttrs: domNode => { // eslint-disable-next-line @atlaskit/editor/no-as-casting const dom = domNode; return { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion shortName: dom.getAttribute('data-emoji-short-name') || // eslint-disable-next-line @typescript-eslint/no-non-null-assertion emoji.attrs.shortName.default, // eslint-disable-next-line @typescript-eslint/no-non-null-assertion id: dom.getAttribute('data-emoji-id') || emoji.attrs.id.default, // eslint-disable-next-line @typescript-eslint/no-non-null-assertion text: // eslint-disable-next-line @typescript-eslint/no-non-null-assertion dom.getAttribute('data-emoji-text') || emoji.attrs.text.default }; } }], toDOM(node) { const { shortName, id, text } = node.attrs; const attrs = { 'data-emoji-short-name': shortName, 'data-emoji-id': id, 'data-emoji-text': text, contenteditable: 'false' }; return ['span', attrs, text]; } }); export const emojiWithLocalId = emojiFactory({ parseDOM: [ // Handle copy/paste beautiful panel from renderer /> { tag: 'div.ak-editor-panel__icon span', ignore: true }, { tag: 'span[data-emoji-short-name]', getAttrs: domNode => { // eslint-disable-next-line @atlaskit/editor/no-as-casting const dom = domNode; return { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion shortName: dom.getAttribute('data-emoji-short-name') || // eslint-disable-next-line @typescript-eslint/no-non-null-assertion emoji.attrs.shortName.default, // eslint-disable-next-line @typescript-eslint/no-non-null-assertion id: dom.getAttribute('data-emoji-id') || emoji.attrs.id.default, // eslint-disable-next-line @typescript-eslint/no-non-null-assertion text: // eslint-disable-next-line @typescript-eslint/no-non-null-assertion dom.getAttribute('data-emoji-text') || emoji.attrs.text.default, localId: uuid.generate() }; } }, // Handle copy/paste from old <ac:emoticon /> { tag: 'img[data-emoticon-name]', getAttrs: dom => { // eslint-disable-next-line @typescript-eslint/no-explicit-any const attrs = acNameToEmoji( // eslint-disable-next-line @typescript-eslint/no-explicit-any dom.getAttribute('data-emoticon-name')); return { ...attrs, localId: uuid.generate() }; } }, // Handle copy/paste from old <ac:hipchat-emoticons /> { tag: 'img[data-hipchat-emoticon]', getAttrs: dom => { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const attrs = acShortcutToEmoji( // eslint-disable-next-line @typescript-eslint/no-non-null-assertion dom.getAttribute('data-hipchat-emoticon')); return { ...attrs, localId: uuid.generate() }; } }, // Handle copy/paste from bitbucket's <img class="emoji" /> { tag: 'img.emoji[data-emoji-short-name]', getAttrs: domNode => { // eslint-disable-next-line @atlaskit/editor/no-as-casting const dom = domNode; return { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion shortName: dom.getAttribute('data-emoji-short-name') || // eslint-disable-next-line @typescript-eslint/no-non-null-assertion emoji.attrs.shortName.default, // eslint-disable-next-line @typescript-eslint/no-non-null-assertion id: dom.getAttribute('data-emoji-id') || emoji.attrs.id.default, // eslint-disable-next-line @typescript-eslint/no-non-null-assertion text: // eslint-disable-next-line @typescript-eslint/no-non-null-assertion dom.getAttribute('data-emoji-text') || emoji.attrs.text.default, localId: uuid.generate() }; } }], toDOM(node) { var _node$attrs; const { shortName, id, text } = node.attrs; const attrs = { 'data-emoji-short-name': shortName, 'data-emoji-id': id, 'data-emoji-text': text, contenteditable: 'false', 'data-local-id': (node === null || node === void 0 ? void 0 : (_node$attrs = node.attrs) === null || _node$attrs === void 0 ? void 0 : _node$attrs.localId) || undefined }; return ['span', attrs, text]; } });