summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/content_editor/extensions/table.js
blob: de8170eff93f00f34363069c330c21d35a901da3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import { Table } from '@tiptap/extension-table';
import { debounce } from 'lodash';
import { VARIANT_WARNING } from '~/alert';
import { __ } from '~/locale';
import { getMarkdownSource } from '../services/markdown_sourcemap';
import { shouldRenderHTMLTable } from '../services/serialization_helpers';

let alertShown = false;
const onUpdate = debounce((editor) => {
  if (alertShown) return;

  editor.state.doc.descendants((node) => {
    if (node.type.name === 'table' && node.attrs.isMarkdown && shouldRenderHTMLTable(node)) {
      editor.emit('alert', {
        message: __(
          'The content editor may change the markdown formatting style of the document, which may not match your original markdown style.',
        ),
        variant: VARIANT_WARNING,
      });

      alertShown = true;

      return false;
    }

    return true;
  });
}, 1000);

export default Table.extend({
  addAttributes() {
    return {
      isMarkdown: {
        default: null,
        parseHTML: (element) => Boolean(getMarkdownSource(element)),
      },
    };
  },

  onUpdate({ editor }) {
    onUpdate(editor);
  },
});