diff options
Diffstat (limited to 'app/assets/javascripts/behaviors/markdown/marks/link.js')
-rw-r--r-- | app/assets/javascripts/behaviors/markdown/marks/link.js | 58 |
1 files changed, 42 insertions, 16 deletions
diff --git a/app/assets/javascripts/behaviors/markdown/marks/link.js b/app/assets/javascripts/behaviors/markdown/marks/link.js index b5e09017d83..977453fee01 100644 --- a/app/assets/javascripts/behaviors/markdown/marks/link.js +++ b/app/assets/javascripts/behaviors/markdown/marks/link.js @@ -1,21 +1,47 @@ -/* eslint-disable class-methods-use-this */ - -import { Link as BaseLink } from 'tiptap-extensions'; import { defaultMarkdownSerializer } from '~/lib/prosemirror_markdown_serializer'; // Transforms generated HTML back to GFM for Banzai::Filter::MarkdownFilter -export default class Link extends BaseLink { - get toMarkdown() { - return { - mixable: true, - open(state, mark, parent, index) { - const open = defaultMarkdownSerializer.marks.link.open(state, mark, parent, index); - return open === '<' ? '' : open; +export default () => ({ + name: 'link', + schema: { + attrs: { + href: { + default: null, + }, + target: { + default: null, + }, + }, + inclusive: false, + parseDOM: [ + { + tag: 'a[href]', + getAttrs: (dom) => ({ + href: dom.getAttribute('href'), + target: dom.getAttribute('target'), + }), }, - close(state, mark, parent, index) { - const close = defaultMarkdownSerializer.marks.link.close(state, mark, parent, index); - return close === '>' ? '' : close; + ], + toDOM: (node) => [ + 'a', + { + ...node.attrs, + // eslint-disable-next-line @gitlab/require-i18n-strings + rel: 'noopener noreferrer nofollow', + target: node.attrs.target, }, - }; - } -} + 0, + ], + }, + toMarkdown: { + mixable: true, + open(state, mark, parent, index) { + const open = defaultMarkdownSerializer.marks.link.open(state, mark, parent, index); + return open === '<' ? '' : open; + }, + close(state, mark, parent, index) { + const close = defaultMarkdownSerializer.marks.link.close(state, mark, parent, index); + return close === '>' ? '' : close; + }, + }, +}); |