diff --git a/packages/ckeditor5-admonition/src/admonitionautoformat.ts b/packages/ckeditor5-admonition/src/admonitionautoformat.ts index 28172f5a1..ab0191e8c 100644 --- a/packages/ckeditor5-admonition/src/admonitionautoformat.ts +++ b/packages/ckeditor5-admonition/src/admonitionautoformat.ts @@ -1,6 +1,17 @@ import Plugin from "@ckeditor/ckeditor5-core/src/plugin"; import Autoformat from "@ckeditor/ckeditor5-autoformat/src/autoformat"; import blockAutoformatEditing from "@ckeditor/ckeditor5-autoformat/src/blockautoformatediting"; +import { AdmonitionType, admonitionTypes } from "./admonitioncommand"; + +function tryParseAdmonitionType(match: RegExpMatchArray) { + if (match.length !== 2) { + return; + } + + if ((admonitionTypes as readonly string[]).includes(match[1])) { + return match[1] as AdmonitionType; + } +} export default class AdmonitionAutoformat extends Plugin { static get requires() { @@ -13,8 +24,13 @@ export default class AdmonitionAutoformat extends Plugin { } const instance = (this as any); - blockAutoformatEditing(this.editor, instance, /^\!\!\[*\! (.+) $/, (match) => { - console.log("Got match ", match); + blockAutoformatEditing(this.editor, instance, /^\!\!\[*\! (.+) $/, ({ match }) => { + const type = tryParseAdmonitionType(match); + if (!type) { + return; + } + + this.editor.execute("admonition", { forceValue: type }); }); } } diff --git a/packages/ckeditor5-admonition/src/admonitioncommand.ts b/packages/ckeditor5-admonition/src/admonitioncommand.ts index 798aef5ba..dd78bdb6e 100644 --- a/packages/ckeditor5-admonition/src/admonitioncommand.ts +++ b/packages/ckeditor5-admonition/src/admonitioncommand.ts @@ -17,8 +17,8 @@ import type { DocumentFragment, Element, Position, Range, Schema, Writer } from * @extends module:core/command~Command */ -// TODO: Change me. -type AdmonitionType = string; +export const admonitionTypes = [ "note", "tip", "important", "caution", "warning" ] as const; +export type AdmonitionType = typeof admonitionTypes[number]; interface ExecuteOpts { /** @@ -118,7 +118,7 @@ export default class AdmonitionCommand extends Command { // In the current implementation, the admonition must be an immediate parent of a block element. const firstQuote = findQuote( firstBlock ); if (firstQuote?.is("element")) { - return firstQuote.getAttribute("type") as string; + return firstQuote.getAttribute("type") as AdmonitionType; } return false; diff --git a/packages/ckeditor5-admonition/src/admonitionui.ts b/packages/ckeditor5-admonition/src/admonitionui.ts index c81a37a28..6e5b779fe 100644 --- a/packages/ckeditor5-admonition/src/admonitionui.ts +++ b/packages/ckeditor5-admonition/src/admonitionui.ts @@ -13,26 +13,26 @@ import { addListToDropdown, createDropdown, ListDropdownButtonDefinition, SplitB import '../theme/blockquote.css'; import admonitionIcon from '../theme/icons/admonition.svg'; import { Collection } from '@ckeditor/ckeditor5-utils'; -import AdmonitionCommand from './admonitioncommand'; +import AdmonitionCommand, { AdmonitionType } from './admonitioncommand'; interface AdmonitionDefinition { title: string; } -export const ADMONITION_TYPES: Record = { - "note": { +export const ADMONITION_TYPES: Record = { + note: { title: "Note" }, - "tip": { + tip: { title: "Tip" }, - "important": { + important: { title: "Important" }, - "caution": { + caution: { title: "Caution" }, - "warning": { + warning: { title: "Warning" } };