From a0a13628fcbb17a61e9cac222cbfe46457a4ae0c Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Fri, 13 Jan 2023 12:41:18 +0400 Subject: [PATCH] Make use of HTMLGeneratorBuildOptions --- src/code_manager/model/HtmlGenerator.ts | 13 ++++++++++--- src/editor/config/config.ts | 6 ++++-- src/editor/index.ts | 2 +- src/editor/model/Editor.ts | 3 ++- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/code_manager/model/HtmlGenerator.ts b/src/code_manager/model/HtmlGenerator.ts index 38cd30fd7..bee317723 100644 --- a/src/code_manager/model/HtmlGenerator.ts +++ b/src/code_manager/model/HtmlGenerator.ts @@ -2,14 +2,21 @@ import { Model } from '../../common'; import Component from '../../dom_components/model/Component'; import EditorModel from '../../editor/model/Editor'; -type HTMLGeneratorBuildOptions = { - em?: EditorModel; +export type HTMLGeneratorBuildOptions = { + /** + * Remove unnecessary IDs (eg. those created automatically). + */ cleanId?: boolean; + + /** + * You can pass an object of custom attributes to replace with the current ones + * or you can even pass a function to generate attributes dynamically. + */ attributes?: Record | ((component: Component, attr: Record) => Record); }; export default class HTMLGenerator extends Model { - build(model: Component, opts: HTMLGeneratorBuildOptions = {}) { + build(model: Component, opts: HTMLGeneratorBuildOptions & { em?: EditorModel } = {}) { const { em, ...restOpts } = opts; const htmlOpts = restOpts; diff --git a/src/editor/config/config.ts b/src/editor/config/config.ts index 6fcbf7fae..b722804ee 100644 --- a/src/editor/config/config.ts +++ b/src/editor/config/config.ts @@ -19,6 +19,7 @@ import { TraitManagerConfig } from '../../trait_manager/config/config'; import { CommandsConfig } from '../../commands/config/config'; import { StyleManagerConfig } from '../../style_manager/config/config'; import { DomComponentsConfig } from '../../dom_components/config/config'; +import { HTMLGeneratorBuildOptions } from '../../code_manager/model/HtmlGenerator'; type AnyObject = Record; @@ -225,12 +226,13 @@ export interface EditorConfig { */ multipleSelection?: boolean; - // TODO /** * Pass default available options wherever `editor.getHtml()` is called. * @default {} */ - optsHtml?: Record; + optsHtml?: HTMLGeneratorBuildOptions; + + // TODO /** * Pass default available options wherever `editor.getCss()` is called * @default {} diff --git a/src/editor/index.ts b/src/editor/index.ts index 6a5b15dcb..658a4c50e 100644 --- a/src/editor/index.ts +++ b/src/editor/index.ts @@ -218,7 +218,7 @@ export default class EditorModule implements IBaseModule { * @param {Boolean} [opts.cleanId=false] Remove unnecessary IDs (eg. those created automatically) * @returns {string} HTML string */ - getHtml(opts?: { component?: Component; cleanId?: boolean }) { + getHtml(opts?: EditorModelParam<'getHtml', 0>) { return this.em.getHtml(opts); } diff --git a/src/editor/model/Editor.ts b/src/editor/model/Editor.ts index 343cd77c2..9172b27c3 100644 --- a/src/editor/model/Editor.ts +++ b/src/editor/model/Editor.ts @@ -34,6 +34,7 @@ import RichTextEditorModule from '../../rich_text_editor'; import CommandsModule from '../../commands'; import StyleManager from '../../style_manager'; import CssRule from '../../css_composer/model/CssRule'; +import { HTMLGeneratorBuildOptions } from '../../code_manager/model/HtmlGenerator'; export interface ProjectData { [key: string]: any; @@ -768,7 +769,7 @@ export default class EditorModel extends Model { * @returns {string} HTML string * @public */ - getHtml(opts: { component?: Component; cleanId?: boolean } = {}): string { + getHtml(opts: { component?: Component } & HTMLGeneratorBuildOptions = {}): string { const { config } = this; const { optsHtml } = config; const js = config.jsInHtml ? this.getJs(opts) : '';