github.com/ngocphuongnb/tetua@v0.0.7-alpha/packages/editor/src/extensions/index.ts (about)

     1  import Table from '@tiptap/extension-table';
     2  import StarterKit from '@tiptap/starter-kit';
     3  import QuickEdit from './quick-edit';
     4  import Highlight from '@tiptap/extension-highlight';
     5  import Typography from '@tiptap/extension-typography';
     6  import Document from '@tiptap/extension-document';
     7  import TableRow from '@tiptap/extension-table-row';
     8  import TableCell from '@tiptap/extension-table-cell';
     9  import TableHeader from '@tiptap/extension-table-header';
    10  import TextAlign from '@tiptap/extension-text-align';
    11  import TaskList from '@tiptap/extension-task-list';
    12  import TaskItem from '@tiptap/extension-task-item';
    13  import Placeholder from '@tiptap/extension-placeholder';
    14  import { Iframe } from './iframe';
    15  import { Link } from './link';
    16  // import { ExtendedImage } from './image';
    17  import { CodeBlock } from './codeblock';
    18  import { TetuaEditorProps } from '..';
    19  import { getImageExtension } from './image';
    20  import { Extensions } from '@tiptap/core';
    21  
    22  export function getExtensions(props: TetuaEditorProps) {
    23    const extensions: Extensions =  [
    24      Highlight,
    25      Typography,
    26      getImageExtension({
    27        uploadHandler: props.uploadHandler,
    28      }),
    29      Iframe,
    30      TableRow,
    31      TableCell,
    32      TableHeader,
    33      TextAlign,
    34      TaskList,
    35      CodeBlock,
    36      QuickEdit.configure(),
    37      TaskItem.configure({
    38        nested: true,
    39      }),
    40      Link.configure({
    41        autolink: false,
    42        openOnClick: false,
    43        linkOnPaste: false,
    44      }),
    45      StarterKit.configure({
    46        codeBlock: false,
    47        document: false,
    48      }),
    49      Table.configure({
    50        resizable: true,
    51      }),
    52      Placeholder.configure({
    53        placeholder: ({ node }) => {
    54          if (!props.disableTitle) {
    55            if (node.type.name === 'heading') {
    56              if (node.attrs.level == 1) {
    57                return 'Enter the name';
    58              }
    59  
    60              return 'Heading content';
    61            }
    62          }
    63  
    64          return 'Start typing something...';
    65        },
    66      })
    67    ];
    68  
    69    if (!props.disableTitle) {
    70      extensions.push(Document.extend({
    71        content: 'heading block*',
    72      }));
    73    } else {
    74      extensions.push(Document);
    75    }
    76  
    77    return extensions;
    78  }
    79