UNPKG

@textbus/platform-browser

Version:

Textbus is a rich text editor and framework that is highly customizable and extensible to achieve rich wysiwyg effects.

91 lines (90 loc) 2.86 kB
import { Attribute, Component, ContentType, Formatter, FormatValue, Slot, Textbus } from '@textbus/core'; import { ViewOptions } from './browser-module'; /** * 插槽解析器 */ export interface SlotParser { /** * 将指定 DOM 节点解析为插槽数据 * @param childSlot 储存数据的插槽 * @param slotRootElement 插槽的根节点 * @param slotContentHostElement 插槽的内容节点 * * 注意:当不传入内容节点时,Textbus 会把根节点当成内容节点 */ <T extends Slot>(childSlot: T, slotRootElement: Element, slotContentHostElement?: Element): T; } /** * 组件加载器 */ export interface ComponentLoader { /** 识别组件的匹配方法 */ match(element: Element, returnableContentTypes: ContentType[]): boolean; /** 读取组件内容的方法 */ read(element: Element, textbus: Textbus, slotParser: SlotParser): Component | Slot | void; } export interface FormatLoaderReadResult<T = FormatValue> { formatter: Formatter<T>; value: T; } /** * 格式加载器 */ export interface FormatLoader<T = FormatValue> { /** * 匹配一个 DOM 节点是否是某个格式节点 * @param element */ match(element: Element): boolean; /** * 读取匹配到的节点,并返回读取后的信息 * @param element */ read(element: Element): FormatLoaderReadResult<T>; } export interface AttributeLoaderReadResult<T = FormatValue> { attribute: Attribute<T>; value: T; } /** * 属性加载器 */ export interface AttributeLoader<T = FormatValue> { /** * 匹配一个 DOM 节点是否是某个属性节点 * @param element */ match(element: Element): boolean; /** * 读取匹配到的节点,并返回读取后的信息 * @param element */ read(element: Element): AttributeLoaderReadResult<T>; } /** * 用于解析 HTML,并把 HTML 内容转换为 Textbus 可以支持的组件或插槽数据 */ export declare class Parser { private textbus; static parseHTML(html: string): HTMLElement; componentLoaders: ComponentLoader[]; formatLoaders: FormatLoader<any>[]; attributeLoaders: AttributeLoader<any>[]; constructor(options: ViewOptions, textbus: Textbus); /** * 使用指定的组件加载器解析一段 HTML 字符串或 DOM 元素 * @param html * @param rootComponentLoader */ parseDoc(html: string | HTMLElement, rootComponentLoader: ComponentLoader): void | Slot | Component<import("@textbus/core").State>; /** * 将一段 HTML 或 DOM 元素解析到指定插槽 * @param html * @param rootSlot */ parse(html: string | HTMLElement, rootSlot: Slot): Slot; private readComponent; private readText; private readFormats; private readSlot; private applyFormats; }