import * as CodeMirror from 'codemirror'; import { Position } from 'codemirror'; import { Addon } from '../core'; import { cm_t } from '../core/type'; import { FolderFunc } from './fold'; import './read-link'; /********************************************************************************** */ /** * Before folding HTML, check its security and avoid XSS attack! Returns true if safe. */ export declare type CheckerFunc = (html: string, pos: Position, cm: cm_t) => boolean; export declare var defaultChecker: CheckerFunc; /********************************************************************************** */ /** * Something like `jQuery("
xxxx
")`, but serves for HyperMD's FoldHTML. You may returns `null` to stop folding. * * @param html only have one root element */ export declare type RendererFunc = (html: string, pos: Position, cm: cm_t) => HTMLElement; /** * Create HTMLElement from HTML string and do special process with HyperMD.ReadLink */ export declare var defaultRenderer: RendererFunc; /********************************************************************************** */ /** * Detect if a token is a beginning of HTML, and fold it! * * @see FolderFunc in ./fold.ts */ export declare const HTMLFolder: FolderFunc; /********************************************************************************** */ export interface Options extends Addon.AddonOptions { /** Before folding HTML, check it to avoid XSS attack! Returns `true` if safe. */ checker: CheckerFunc; /** A RendererFunc accepts HTML string (which has only one root node), renders it and returns the root element node */ renderer: RendererFunc; /** There MUST be a stub icon after rendered HTML. You may decide its content. */ stubText: string; /** If the rendered element's tagName matches this, user can NOT break it by clicking it */ isolatedTagName: RegExp; } export declare const defaultOption: Options; export declare const suggestedOption: Partial; export declare type OptionValueType = Partial | CheckerFunc; declare global { namespace HyperMD { interface EditorConfiguration { /** * Options for HTMLFolder * * **NOTE**: to switch this feature off, please modify `hmdFold.html` instead. * * You may provide a CheckerFunc to check if a HTML is safe to render. */ hmdFoldHTML?: OptionValueType; } } } /********************************************************************************** */ export declare class FoldHTML implements Addon.Addon, Options { cm: cm_t; renderer: RendererFunc; isolatedTagName: RegExp; stubText: string; checker: CheckerFunc; constructor(cm: cm_t); /** * Render HTML, insert into editor and return the marker */ renderAndInsert(html: string, from: CodeMirror.Position, to: CodeMirror.Position, inlineMode?: boolean): CodeMirror.TextMarker; makeStub(): HTMLSpanElement; } /** ADDON GETTER (Singleton Pattern): a editor can have only one FoldHTML instance */ export declare const getAddon: (cm: CodeMirror.Editor) => FoldHTML; declare global { namespace HyperMD { interface HelperCollection { FoldHTML?: FoldHTML; } } }