UNPKG

devexpress-richedit

Version:

DevExpress Rich Text Editor is an advanced word-processing tool designed for working with rich text documents.

123 lines (122 loc) 3.47 kB
import { Errors } from '@devexpress/utils/lib/errors'; export class BaseElement { toList() { const result = [this.getTypeAsString()]; this.fillResult(result); return result; } ; static fillClassesPart(result, elem) { if (elem.classes.length || elem.styles.length) { const classStyleObject = {}; if (elem.classes.length) classStyleObject["class"] = elem.classes.join(", "); if (elem.styles.length) classStyleObject["style"] = elem.styles.join("; "); result.push(classStyleObject); } } static fillTextPart(result, elem) { if (elem.text.length) result.push(elem.text.join(" ")); } static fillNodesPart(result, elem) { if (elem.nodes.length) for (let node of elem.nodes) result.push(node.toList()); } } export class DivElement extends BaseElement { constructor() { super(...arguments); this.styles = []; this.classes = []; this.nodes = []; this.text = []; } getTypeAsString() { return "div"; } setText(text) { this.text.push(text); return this; } setStyle(styleStr) { this.styles.push(styleStr); return this; } setInlineBlockType() { return this.setStyle("display: inline-block"); } setClass(classStr) { this.classes.push(classStr); return this; } setNode(node) { this.nodes.push(node); return this; } fillResult(result) { BaseElement.fillClassesPart(result, this); BaseElement.fillTextPart(result, this); BaseElement.fillNodesPart(result, this); } setColor(color) { this.setStyle(`color: ${color}`); return this; } } export class SpanElement extends DivElement { getTypeAsString() { return "span"; } } export class LiElement extends DivElement { getTypeAsString() { return "li"; } } export class OlElement extends BaseElement { constructor() { super(...arguments); this.styles = []; this.classes = []; this.nodes = []; } getTypeAsString() { return "ol"; } setStyle(styleStr) { this.styles.push(styleStr); return this; } setClass(classStr) { this.classes.push(classStr); return this; } setNode(node) { this.nodes.push(node); return this; } fillResult(result) { if (!this.nodes.length) throw new Error(Errors.InternalException); BaseElement.fillClassesPart(result, this); BaseElement.fillNodesPart(result, this); } } export class TableElement extends OlElement { getTypeAsString() { return "table"; } } export class TrElement extends OlElement { getTypeAsString() { return "tr"; } } export class TdElement extends DivElement { getTypeAsString() { return "td"; } } export class ObjectElement extends BaseElement { getTypeAsString() { return "object"; } setObjectData(obj, config) { this.obj = obj; this.config = config; return this; } fillResult(result) { const objData = {}; objData["object"] = this.obj; objData["config"] = this.config; result.push(objData); } }