mdui.editor
Version:
Material Design 样式的富文本编辑器
200 lines (199 loc) • 4.78 kB
TypeScript
import { JQ } from 'mdui.jq/es/JQ';
import 'mdui.jq/es/methods/addClass';
import 'mdui.jq/es/methods/append';
import 'mdui.jq/es/methods/attr';
import 'mdui.jq/es/methods/children';
import 'mdui.jq/es/methods/first';
import 'mdui.jq/es/methods/html';
import 'mdui.jq/es/methods/is';
import 'mdui.jq/es/methods/last';
import 'mdui.jq/es/methods/off';
import 'mdui.jq/es/methods/on';
import 'mdui.jq/es/methods/removeClass';
import 'mdui.jq/es/methods/text';
import Selector from 'mdui.jq/es/types/Selector';
import Command from './command/index';
import Menus from './menus/index';
import Selection from './selection/index';
/**
* 菜单项
*/
declare type MENUS = 'bold' | 'italic' | 'head' | 'code' | 'ol' | 'ul' | 'link' | 'image' | 'clear_drafts' | ' ' | '|';
/**
* 标签白名单
*/
declare type TAGS_WHITELIST = 'p' | 'strong' | 'b' | 'em' | 'i' | 'h2' | 'pre' | 'code' | 'ol' | 'ul' | 'li' | 'a' | 'img' | 'figure' | 'figcaption';
/**
* 配置参数
*/
declare type OPTIONS = {
/**
* 编辑器内容变化时的回调函数
*/
onchange?: (editor: Editor) => void;
/**
* 舍弃草稿后的回调
*/
onClearDrafts?: () => void;
/**
* onchange 回调的延迟,单位为毫秒
*/
onchangeTimeout?: number;
/**
* 编辑器的占位文本
*/
placeholder?: string;
/**
* 工具栏按钮,`|` 表示纵向分割线,空格表示将两侧的内容挤向两边
*/
menus?: MENUS[];
/**
* 标签白名单,不在白名单中的标签都将被过滤
*/
tagsWhiteList?: TAGS_WHITELIST[];
/**
* 是否自动实时保存编辑器内容到 localStorage
*/
autoSave?: boolean;
/**
* 保存编辑器内容到 localstorage 中的键名,仅 autoSave 为 true 时有效
*/
autoSaveKey?: string;
/**
* 图片上传服务器的链接
*/
imageUploadUrl?: string;
/**
* 允许上传的图片的最大体积,设置为 0 表示不限制
*/
imageUploadMaxSize?: number;
/**
* 允许上传的图片的后缀
*/
imageUploadSuffix?: string[];
/**
* 图片上传的键名,用于服务端获取图片
*/
imageUploadName?: string;
/**
* 上传接口的响应值必须符合该格式。若不符合,可以使用该函数进行转换
*/
imageUploadResponseTransform?: ((response: any) => {
code: number;
message?: string;
data: {
url: string;
};
}) | false;
};
/**
* 编辑器
*/
declare class Editor {
/**
* 配置参数
*/
options: OPTIONS;
/**
* 工具栏元素
*/
$toolbar: JQ;
/**
* 内容区域元素
*/
$container: JQ;
/**
* 命令实例
*/
command: Command;
/**
* 选区实例
*/
selection: Selection;
/**
* 菜单实例
*/
menus: Menus;
/**
* 输入内容时执行的函数
*/
change: (() => void) | null;
/**
* 初始化编辑器
* @param toolbar 工具栏的 CSS 选择器、或 DOM 元素、或 JQ 对象
* @param container 编辑器内容的 CSS 选择器、或 DOM 元素、或 JQ 对象
* @param options 配置参数
*/
constructor(toolbar: Selector | HTMLElement | HTMLElement[], container: Selector | HTMLElement | HTMLElement[], options?: OPTIONS);
/**
* 初始化选区,将光标定位到内容尾部
* @param newLine 是否在内容后面添加一个空行
*/
initSelection(newLine?: boolean): void;
/**
* 获取编辑器 html
*/
getHTML(): string;
/**
* 设置编辑器 html
* @param html
*/
setHTML(html: string): void;
/**
* 获取编辑器纯文本内容
*/
getText(): string;
/**
* 设置编辑器纯文本内容
* @param text
*/
setText(text: string): void;
/**
* 清空编辑器内容
*/
clear(): void;
/**
* 聚焦到输入框
*/
focus(): void;
/**
* 绑定事件
* @private
*/
private bindEvent;
/**
* 更新 placeholder 显示状态
*/
private updatePlaceholder;
/**
* 绑定 onchange 事件
* @private
*/
private bindChange;
/**
* 实时保存选区
*/
private saveRangeRealTime;
/**
* 粘贴文字、图片事件
*/
private pasteHandler;
/**
* 按删除键时的处理
*/
private deleteHandler;
/**
* 在 $container 上点击的处理
* @private
*/
private containerClickHandler;
/**
* 拖拽事件
*/
private dragHandler;
/**
* Ctrl + Z 处理
*/
private undoHandler;
}
export default Editor;