自定义扩展,用于在组件中使用时相互覆盖其他功能的 tiptap 扩展

Custom Extension for tiptap extensions overiding each others functionality when use in on component

提问人:Pervaiz Abbas 提问时间:10/30/2023 更新时间:10/30/2023 访问量:48

问:

问题是我正在使用一个 tiptap 编辑器,我有一个浮动菜单,其中我有不同的扩展名,并且标题扩展和对齐扩展存在问题,因为标题扩展覆盖了对齐功能并将标题强加在对齐之上。假设我将文本向右或居中对齐,如果我想在其上应用标题,它会覆盖当前对齐方式,并强制 TipTap 将其对齐方式设置为默认值,然后在其上应用标题。就像如果我的文本居中对齐并且我想在其上应用标题,则它的对齐方式将返回 defaulf(left),然后在其上应用标题。目前,我已经创建了一个自定义扩展来处理这个问题,该扩展还将获得对齐参数以及级别,并且在应用标题功能后,它也会应用对齐,以便我们可以保留当前的对齐方式。所以我正在努力,我只是无法弄清楚它几乎完成的方式。下面是自定义扩展代码

import Heading from '@tiptap/extension-heading';
// import TextAlign  from '@tiptap/extension-text-align';

const MyHeadingExtension = Heading.extend({
  addOptions() {
    return {
      ...this.parent?.(),
      alignments: ['left', 'center', 'right'],
      defaultAlignment: 'left',
    };
  },
  addCommands() {
    return {
      aligntoggleHeading: (attributes, alignment) => ({ commands }) => {
        if (!this.options.levels.includes(attributes.level)) {
          return false;
        }

        console.log('alignment', alignment);

        if (alignment === 'left') {
          console.log('alignment2', alignment);
          return commands.toggleNode(this.name, 'paragraph', attributes);
        }

        console.log('alignment3', alignment);
        return commands.toggleNode(this.name, 'paragraph', attributes)
          .setNode(alignment).run();
        //   .setTextAlign(alignment)
        //   .run();
      },
    };
  },
});
export default MyHeadingExtension;

在这里,如果我删除setNode(alignment),则该功能有效,但是为了设置对齐方式,我需要以排序方式返回这两个函数,以便它们按顺序执行

case 'Heading 1':
          this.editor.chain().focus().aligntoggleHeading({ level: 1 }, 'center').run();
          break;

我希望扩展首先在标题上工作,并在标题后调整对齐方式,但 setNode 不起作用。该扩展应仅适用于 textalign right 或 center,并且

javascript vue.js tiptap 散文镜像

评论


答: 暂无答案