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
JavaScript
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);
}
}