All files / app/assets/javascripts/content_editor/extensions table.js

100% Statements 13/13
100% Branches 7/7
100% Functions 5/5
100% Lines 12/12

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 44              62x 62x 31x   28x 102x 1x             1x   1x     101x           1611x     2x           31x      
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);
  },
});