关于 umbraco-tiptap-extension
为开发者提供在 Umbraco 富文本编辑器中创建 Tiptap 扩展的指导。内容涵盖扩展清单、API 类,以及自定义节点、标记和编辑器功能,并以最新文档为实现依据。
主要功能
- 01指导编写扩展清单和 API 类
- 02提供自定义节点与标记的模式
- 03通过属性编辑器数据配置
- 04支持自定义样式
- 05参考最新 Umbraco 和 Tiptap 文档
适用场景
- 01为编辑器添加自定义区块
- 02创建自定义文本格式
- 03构建可配置的编辑器扩展
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ umbraco/ umbraco-cms-backoffice-skills --skill umbraco-tiptap-extension安装后在 Claude Code 中输入/umbraco-tiptap-extension确认已加载。
详细介绍
Umbraco Tiptap 扩展
这是什么?
Tiptap 扩展为 Umbraco 的富文本编辑器(基于 Tiptap 构建)添加功能。扩展可以添加新的节点类型(例如自定义区块)、标记(例如自定义格式),或其他编辑器功能。扩展 API 提供了底层 Tiptap 扩展,并将其注册到编辑器中。
文档
实现前务必获取最新文档:
- 扩展类型:https://docs.umbraco.com/umbraco-cms/extend-your-project/backoffice-extensions/extending-overview/extension-types
- 富文本编辑器:https://docs.umbraco.com/umbraco-cms/model-your-content/property-editors/built-in-umbraco-property-editors/rich-text-editor
- Tiptap 文档:https://tiptap.dev/docs/editor/extensions/overview
- Foundation:https://docs.umbraco.com/umbraco-cms/extend-your-project/backoffice-extensions/foundation
相关技能
-
Tiptap 工具栏扩展:用于添加工具栏按钮
- 参考技能:
umbraco-tiptap-toolbar-extension
- 参考技能:
-
Tiptap 状态栏扩展:用于添加状态栏元素
- 参考技能:
umbraco-tiptap-statusbar-extension
- 参考技能:
工作流
- 获取文档 - 使用 WebFetch 访问上述 URL
- 提问 - 需要什么功能?节点、标记还是扩展?是否需要自定义样式?
- 生成文件 - 根据最新文档创建 manifest 和 API 类
- 说明 - 展示创建的内容以及测试方法
最小示例
Manifest (manifests.ts)
import type { ManifestTiptapExtension } from '@umbraco-cms/backoffice/extension-registry';
const manifest: ManifestTiptapExtension = {
type: 'tiptapExtension',
alias: 'My.TiptapExtension.Highlight',
name: 'Highlight Extension',
api: () => import('./highlight.tiptap-api.js'),
meta: {
icon: 'icon-marker',
label: 'Highlight',
group: 'formatting',
},
};
export const manifests = [manifest];
扩展 API (highlight.tiptap-api.ts)
import { UmbTiptapExtensionApiBase } from '@umbraco-cms/backoffice/tiptap';
import type { UmbTiptapExtensionArgs } from '@umbraco-cms/backoffice/tiptap';
import Highlight from '@tiptap/extension-highlight';
export default class HighlightTiptapExtensionApi extends UmbTiptapExtensionApiBase {
getTiptapExtensions(args?: UmbTiptapExtensionArgs) {
return [
Highlight.configure({
multicolor: true,
}),
];
}
}
自定义节点扩展
import { UmbTiptapExtensionApiBase } from '@umbraco-cms/backoffice/tiptap';
import { Node } from '@tiptap/core';
export default class CalloutTiptapExtensionApi extends UmbTiptapExtensionApiBase {
getTiptapExtensions() {
const CalloutNode = Node.create({
name: 'callout',
group: 'block',
content: 'block+',
addAttributes() {
return {
type: {
default: 'info',
},
};
},
parseHTML() {
return [{ tag: 'div[data-callout]' }];
},
renderHTML({ HTMLAttributes }) {
return ['div', { 'data-callout': '', ...HTMLAttributes }, 0];
},
});
return [CalloutNode];
}
}
自定义标记扩展
import { UmbTiptapExtensionApiBase } from '@umbraco-cms/backoffice/tiptap';
import { Mark } from '@tiptap/core';
export default class CustomMarkTiptapExtensionApi extends UmbTiptapExtensionApiBase {
getTiptapExtensions() {
const CustomMark = Mark.create({
name: 'customHighlight',
addAttributes() {
return {
color: {
default: 'yellow',
},
};
},
parseHTML() {
return [{ tag: 'mark' }];
},
renderHTML({ HTMLAttributes }) {
return ['mark', { style: `background-color: ${HTMLAttributes.color}` }, 0];
},
});
return [CustomMark];
}
}
带自定义样式的扩展
import { UmbTiptapExtensionApiBase } from '@umbraco-cms/backoffice/tiptap';
import { css } from '@umbraco-cms/backoffice/external/lit';
import Highlight from '@tiptap/extension-highlight';
export default class StyledHighlightApi extends UmbTiptapExtensionApiBase {
getTiptapExtensions() {
return [Highlight];
}
// Custom styles for the editor
getStyles() {
return css`
mark {
background-color: yellow;
padding: 0.1em 0.2em;
border-radius: 2px;
}
`;
}
}
使用属性编辑器中的配置
import { UmbTiptapExtensionApiBase } from '@umbraco-cms/backoffice/tiptap';
import type { UmbTiptapExtensionArgs } from '@umbraco-cms/backoffice/tiptap';
import Highlight from '@tiptap/extension-highlight';
export default class ConfigurableHighlightApi extends UmbTiptapExtensionApiBase {
getTiptapExtensions(args?: UmbTiptapExtensionArgs) {
// Access data type configuration
const multicolor = args?.configuration?.getValueByAlias('multicolor') ?? false;
return [
Highlight.configure({
multicolor,
}),
];
}
}
元属性
| 属性 | 描述 |
|---|---|
icon | 配置 UI 中显示的图标 |
label | 显示名称 |
group | 用于组织扩展的分组 |
description | 可选描述 |
常见扩展分组
formatting- 文本格式(粗体、斜体等)structure- 结构元素(标题、列表等)media- 媒体元素(图片、嵌入内容等)misc- 其他功能
就是这样!务必获取最新文档,保持示例简洁,并生成完整可运行的代码。
评论
支持 Markdown