@wangeditor-next/code-highlight
Version:
wangEditor code-highlight module
225 lines (224 loc) • 7.36 kB
TypeScript
/**
* @description config interface
* @author wangfupeng
*/
import { ImageElement } from 'packages/basic-modules/src/modules/image/custom-types';
import { VideoElement } from 'packages/video-module/src/module/custom-types';
import { Descendant, Node, NodeEntry, Range } from 'slate';
import { IDomEditor } from '../editor/interface';
import { IMenuGroup } from '../menus/interface';
import { IUploadConfig } from '../upload';
import { DOMElement } from '../utils/dom';
interface IHoverbarConf {
[key: string]: {
match?: (editor: IDomEditor, n: Node) => boolean;
menuKeys: string[];
};
}
export type AlertType = 'success' | 'info' | 'warning' | 'error';
/**
* EditorEvents 包含所有编辑器的生命周期事件。
*
* @property {string} CREATED - 编辑器创建后触发,用于初始化操作。
* @property {string} DESTROYED - 编辑器销毁时触发,用于清理操作。
* @property {string} CHANGE - 编辑器内容发生变化时触发,通常用于监听输入或变动。
* @property {string} SCROLL - 编辑器滚动时触发,用于同步滚动状态或执行相关操作。
* @property {string} FULLSCREEN - 编辑器进入全屏时触发,通常用于调整布局或容器尺寸。
* @property {string} UNFULLSCREEN - 编辑器退出全屏时触发,恢复原始布局状态。
*/
export declare const EditorEvents: {
readonly CREATED: "created";
readonly DESTROYED: "destroyed";
readonly CHANGE: "change";
readonly SCROLL: "scroll";
readonly FULLSCREEN: "fullscreen";
readonly UNFULLSCREEN: "unFullScreen";
};
export type EditorEventType = typeof EditorEvents[keyof typeof EditorEvents];
export interface ISingleMenuConfig {
[key: string]: any;
iconSvg?: string;
}
interface IColorConfig {
colors: string[];
}
interface IFontSizeItem {
name: string;
value: string;
}
interface IFontSizeConfig {
fontSizeList: (string | IFontSizeItem)[];
}
interface IFontFamilyItem {
name: string;
value: string;
}
interface IFontFamilyConfig {
fontFamilyList: (string | IFontFamilyItem)[];
}
interface ILineHeightConfig {
lineHeightList: string[];
}
interface IImageMenuBaseConfig {
checkImage?: (src: string, alt: string, url: string) => boolean | undefined | string;
parseImageSrc?: (src: string) => string;
}
interface IInsertImageConfig extends IImageMenuBaseConfig {
onInsertedImage?: (imageNode: ImageElement | null) => void;
}
interface IEditImageConfig extends IImageMenuBaseConfig {
onUpdatedImage?: (imageNode: ImageElement | null) => void;
}
interface IEmotionConfig {
emotions: string[];
}
interface IInsertTableConfig {
minWidth: number;
tableHeader: {
selected: boolean;
};
tableFullWidth: {
selected: boolean;
};
}
interface ILinkConfig {
checkLink: (text: string, url: string) => string | boolean | undefined;
parseLinkUrl: (url: string) => string;
}
interface IInsertVideoConfig {
onInsertedVideo: (videoNode: VideoElement) => NodeEntry | Range;
checkVideo: (src: string, poster: string) => string | boolean | undefined;
parseVideoSrc: (url: string) => string;
}
export interface IUploadVideoConfig extends IUploadConfig {
}
export interface IUploadImageConfig extends IUploadConfig {
base64LimitSize: number;
}
interface ICodeLangConfig {
codeLangs: {
text: string;
value: string;
}[];
}
export interface IMenuConfig {
bold: ISingleMenuConfig;
underline: ISingleMenuConfig;
italic: ISingleMenuConfig;
through: ISingleMenuConfig;
code: ISingleMenuConfig;
sub: ISingleMenuConfig;
sup: ISingleMenuConfig;
clearStyle: ISingleMenuConfig;
color: IColorConfig;
bgColor: IColorConfig;
fontSize: IFontSizeConfig;
fontFamily: IFontFamilyConfig;
indent: ISingleMenuConfig;
delIndent: ISingleMenuConfig;
justifyLeft: ISingleMenuConfig;
justifyRight: ISingleMenuConfig;
justifyCenter: ISingleMenuConfig;
justifyJustify: ISingleMenuConfig;
lineHeight: ILineHeightConfig;
insertImage: IInsertImageConfig;
deleteImage: ISingleMenuConfig;
editImage: IEditImageConfig;
viewImageLink: ISingleMenuConfig;
imageWidth30: ISingleMenuConfig;
imageWidth50: ISingleMenuConfig;
imageWidth100: ISingleMenuConfig;
editorImageSizeMenu: ISingleMenuConfig;
divider: ISingleMenuConfig;
emotion: IEmotionConfig;
insertLink: ILinkConfig;
editLink: ILinkConfig;
unLink: ISingleMenuConfig;
viewLink: ISingleMenuConfig;
codeBlock: ISingleMenuConfig;
blockquote: ISingleMenuConfig;
headerSelect: ISingleMenuConfig;
header1: ISingleMenuConfig;
header2: ISingleMenuConfig;
header3: ISingleMenuConfig;
header4: ISingleMenuConfig;
header5: ISingleMenuConfig;
header6: ISingleMenuConfig;
todo: ISingleMenuConfig;
formatPainter: ISingleMenuConfig;
redo: ISingleMenuConfig;
undo: ISingleMenuConfig;
fullScreen: ISingleMenuConfig;
enter: ISingleMenuConfig;
bulletedList: ISingleMenuConfig;
numberedList: ISingleMenuConfig;
insertTable: ISingleMenuConfig;
deleteTable: ISingleMenuConfig;
insertTableRow: IInsertTableConfig;
deleteTableRow: ISingleMenuConfig;
insertTableCol: ISingleMenuConfig;
deleteTableCol: ISingleMenuConfig;
tableHeader: ISingleMenuConfig;
tableFullWidth: ISingleMenuConfig;
mergeTableCell: ISingleMenuConfig;
splitTableCell: ISingleMenuConfig;
setTableProperty: ISingleMenuConfig;
setTableCellProperty: ISingleMenuConfig;
insertVideo: IInsertVideoConfig;
uploadVideo: IUploadVideoConfig;
editVideoSize: ISingleMenuConfig;
editVideoSrc: ISingleMenuConfig;
uploadImage: IUploadImageConfig;
codeSelectLang: ICodeLangConfig;
}
/**
* editor config
*/
export interface IEditorConfig {
customAlert: (info: string, type: AlertType) => void;
onCreated?: (editor: IDomEditor) => void;
onChange?: (editor: IDomEditor) => void;
onDestroyed?: (editor: IDomEditor) => void;
onMaxLength?: (editor: IDomEditor) => void;
onFocus?: (editor: IDomEditor) => void;
onBlur?: (editor: IDomEditor) => void;
/**
* 自定义粘贴。返回 true 则继续粘贴,返回 false 则自行实现粘贴,阻止默认粘贴
*/
customPaste?: (editor: IDomEditor, e: ClipboardEvent) => boolean;
/**
* 自定义复制。拦截 event 添加或修改 clipboardData 数据
*/
customCopy?: (editor: IDomEditor, e: ClipboardEvent) => void;
scroll: boolean;
placeholder?: string;
readOnly: boolean;
autoFocus: boolean;
decorate?: (nodeEntry: NodeEntry) => Range[];
maxLength?: number;
MENU_CONF?: Partial<IMenuConfig>;
hoverbarKeys?: IHoverbarConf;
EXTEND_CONF?: any;
skipCacheTypes?: string[];
}
/**
* toolbar config
*/
export interface IToolbarConfig {
toolbarKeys: Array<string | IMenuGroup>;
insertKeys: {
index: number;
keys: string | Array<string | IMenuGroup>;
};
excludeKeys: Array<string>;
modalAppendToBody: boolean;
}
type PluginFnType = <T extends IDomEditor>(editor: T) => T;
export interface ICreateOption {
selector: string | DOMElement;
config: Partial<IEditorConfig>;
content?: Descendant[];
html?: string;
plugins: PluginFnType[];
}
export {};