mirror of
				https://github.com/zadam/trilium.git
				synced 2025-11-04 13:39:01 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			42 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { Autoformat, blockAutoformatEditing, Plugin } from "ckeditor5";
 | 
						|
import { AdmonitionType, ADMONITION_TYPES } from "./admonitioncommand.js";
 | 
						|
 | 
						|
function tryParseAdmonitionType(match: RegExpMatchArray) {
 | 
						|
	if (match.length !== 2) {
 | 
						|
		return;
 | 
						|
	}
 | 
						|
 | 
						|
	if ((ADMONITION_TYPES as readonly string[]).includes(match[1])) {
 | 
						|
		return match[1] as AdmonitionType;
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
export default class AdmonitionAutoformat extends Plugin {
 | 
						|
 | 
						|
	static get requires() {
 | 
						|
		return [ Autoformat ];
 | 
						|
	}
 | 
						|
 | 
						|
	afterInit() {
 | 
						|
		if (!this.editor.commands.get("admonition")) {
 | 
						|
			return;
 | 
						|
		}
 | 
						|
 | 
						|
		const instance = (this as any);
 | 
						|
		blockAutoformatEditing(this.editor, instance, /^\!\!\[*\! (.+) $/, ({ match }) => {
 | 
						|
			const type = tryParseAdmonitionType(match);
 | 
						|
 | 
						|
			if (type) {
 | 
						|
				// User has entered the admonition type, so we insert as-is.
 | 
						|
				this.editor.execute("admonition", { forceValue: type });
 | 
						|
			} else {
 | 
						|
				// User has not entered a valid type, assume it's part of the text of the admonition.
 | 
						|
				this.editor.execute("admonition");
 | 
						|
				if (match.length > 1) {
 | 
						|
					this.editor.execute("insertText", { text: (match[1] ?? "") + " " });
 | 
						|
				}
 | 
						|
			}
 | 
						|
		});
 | 
						|
	}
 | 
						|
}
 |