关于 umbraco-monaco-markdown-editor-action
umbraco-monaco-markdown-editor-action 是用于扩展 Umbraco Markdown 编辑器的编码技能,可添加工具栏操作和快捷键,并提供操作清单及实现示例,包括打开模态框。
主要功能
- 01添加自定义工具栏按钮
- 02注册键盘快捷键
- 03插入自定义 Markdown 语法
- 04从编辑器操作打开模态框
适用场景
- 01添加插入链接的操作
- 02为自定义 Markdown 创建快捷键
- 03从编辑器工具栏打开对话框
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ umbraco/ umbraco-cms-backoffice-skills --skill umbraco-monaco-markdown-editor-action安装后在 Claude Code 中输入/umbraco-monaco-markdown-editor-action确认已加载。
详细介绍
Umbraco Monaco Markdown 编辑器操作
这是什么?
Monaco Markdown 编辑器操作可为 Umbraco 中的 Markdown 编辑器添加自定义工具栏按钮和键盘快捷键。它们让你可以通过插入链接、图片或自定义 Markdown 语法等功能,扩展编辑体验。操作会显示在编辑器工具栏中,也可以响应键盘快捷键。
文档
实现前始终获取最新文档:
- Foundation:https://docs.umbraco.com/umbraco-cms/extend-your-project/backoffice-extensions/foundation
- 扩展注册表:https://docs.umbraco.com/umbraco-cms/extend-your-project/backoffice-extensions/extending-overview/extension-registry
- Monaco 编辑器:https://docs.umbraco.com/umbraco-cms/extend-your-project/backoffice-extensions/extending-overview/extension-types
相关 Foundation 技能
-
模态框:从操作中打开模态对话框时使用
- 参考技能:
umbraco-modals
- 参考技能:
-
本地化:提供本地化标签时使用
- 参考技能:
umbraco-localization
- 参考技能:
工作流
- 获取文档——对以上 URL 使用 WebFetch
- 提出问题——需要什么功能?使用什么键盘快捷键?使用什么图标?
- 生成文件——根据最新文档创建清单和操作类
- 说明——展示创建的内容以及测试方法
最小示例
清单(manifests.ts)
export const manifests: Array<UmbExtensionManifest> = [
{
type: 'monacoMarkdownEditorAction',
alias: 'My.MonacoMarkdownEditorAction.Custom',
name: 'Custom Monaco Markdown Editor Action',
api: () => import('./my-markdown-action.js'),
meta: {
label: 'Insert Custom',
icon: 'icon-favorite',
},
},
];
操作实现(my-markdown-action.ts)
import { monaco } from '@umbraco-cms/backoffice/external/monaco-editor';
import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
import type { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
import type { UUIModalSidebarSize } from '@umbraco-cms/backoffice/external/uui';
export class MyMarkdownAction extends UmbControllerBase {
constructor(host: UmbControllerHost) {
super(host);
}
getUnique() {
return 'My.MonacoMarkdownEditorAction.Custom';
}
getLabel() {
return 'Insert Custom';
}
getKeybindings() {
// Ctrl/Cmd + Shift + C
return [monaco.KeyMod.CtrlCmd | monaco.KeyMod.Shift | monaco.KeyCode.KeyC];
}
async execute({ editor, overlaySize }: { editor: any; overlaySize: UUIModalSidebarSize }) {
if (!editor) throw new Error('Editor not found');
const selection = editor.getSelections()[0];
if (!selection) return;
const selectedValue = editor.getValueInRange(selection);
// Insert custom markdown
editor.monacoEditor?.executeEdits('', [
{ range: selection, text: `**${selectedValue || 'custom'}**` },
]);
editor.monacoEditor?.focus();
}
}
export { MyMarkdownAction as api };
带模态框的操作
import { monaco } from '@umbraco-cms/backoffice/external/monaco-editor';
import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal';
export class MyModalMarkdownAction extends UmbControllerBase {
getUnique() {
return 'My.MonacoMarkdownEditorAction.Modal';
}
getLabel() {
return 'Insert with Modal';
}
getKeybindings() {
return [monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyM];
}
async execute({ editor, overlaySize }) {
const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT);
if (!modalManager) throw new Error('Modal manager not found');
const selection = editor?.getSelections()[0];
if (!selection) return;
// Open a modal and use the result
const modalContext = modalManager.open(this, MY_CUSTOM_MODAL, {
modal: { size: overlaySize },
});
modalContext?.onSubmit().then((value) => {
if (!value) return;
editor.monacoEditor?.executeEdits('', [
{ range: selection, text: value.text },
]);
});
}
}
export { MyModalMarkdownAction as api };
接口参考
interface ManifestMonacoMarkdownEditorAction extends ManifestApi<any> {
type: 'monacoMarkdownEditorAction';
meta?: MetaMonacoMarkdownEditorAction;
}
interface MetaMonacoMarkdownEditorAction {
icon?: string | null;
label?: string | null; // Can use localization key like '#buttons_linkInsert'
}
常用按键绑定
// Single key
monaco.KeyCode.Enter
// Ctrl/Cmd combinations
monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyK // Ctrl+K or Cmd+K
monaco.KeyMod.CtrlCmd | monaco.KeyMod.Shift | monaco.KeyCode.KeyC // Ctrl+Shift+C
monaco.KeyMod.Alt | monaco.KeyCode.KeyI // Alt+I
就是这样!始终获取最新文档,保持示例简洁,并生成完整可运行的代码。
评论
支持 Markdown