提问人:Pervaiz Abbas 提问时间:10/30/2023 更新时间:10/30/2023 访问量:48
自定义扩展,用于在组件中使用时相互覆盖其他功能的 tiptap 扩展
Custom Extension for tiptap extensions overiding each others functionality when use in on component
问:
问题是我正在使用一个 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,并且
答: 暂无答案
评论