devexpress-richedit
Version:
DevExpress Rich Text Editor is an advanced word-processing tool designed for working with rich text documents.
123 lines (122 loc) • 4 kB
JavaScript
import { Errors } from '@devexpress/utils/lib/errors';
import { SubDocumentInfoType } from './enums';
import { HeaderFooterType } from './section/enums';
import { NoteType } from './footnotes/footnote';
export class SubDocumentInfoBase {
subDocumentId;
isMain = true;
isHeaderFooter = false;
isFooter = false;
isHeader = false;
isNote = false;
isFootNote = false;
isEndNote = false;
isTextBox = false;
isComment = false;
isReferenced = true;
constructor(subDocumentId) {
this.subDocumentId = subDocumentId;
}
getEndPosition(documentModel) {
return documentModel.subDocuments[this.subDocumentId].getLastChunk().getEndPosition();
}
getSubDocument(documentModel) {
return documentModel.subDocuments[this.subDocumentId];
}
static create(type, subDocumentId, parentSubDocumentId) {
switch (type) {
case SubDocumentInfoType.Main:
return new MainSubDocumentInfo();
case SubDocumentInfoType.Header:
return new HeaderSubDocumentInfo(subDocumentId);
case SubDocumentInfoType.Footer:
return new FooterSubDocumentInfo(subDocumentId);
case SubDocumentInfoType.TextBox:
return new TextBoxSubDocumentInfoBase(subDocumentId, parentSubDocumentId);
case SubDocumentInfoType.FootNote:
return new FootNoteSubDocumentInfo(subDocumentId);
case SubDocumentInfoType.EndNote:
return new EndNoteSubDocumentInfo(subDocumentId);
}
throw new Error(Errors.NotImplemented);
}
}
export class TextBoxSubDocumentInfoBase extends SubDocumentInfoBase {
isMain = false;
isTextBox = true;
parentSubDocumentId;
constructor(subDocumentId, parentSubDocumentId) {
super(subDocumentId);
this.parentSubDocumentId = parentSubDocumentId;
}
getType() {
return SubDocumentInfoType.TextBox;
}
clone() {
return new TextBoxSubDocumentInfoBase(this.subDocumentId, this.parentSubDocumentId);
}
}
export class NoteSubDocumentInfo extends SubDocumentInfoBase {
isMain = false;
isNote = true;
noteType = NoteType.Normal;
}
export class FootNoteSubDocumentInfo extends NoteSubDocumentInfo {
isMain = false;
isFootNote = true;
getType() {
return SubDocumentInfoType.FootNote;
}
clone() {
return new FootNoteSubDocumentInfo(this.subDocumentId);
}
}
export class EndNoteSubDocumentInfo extends NoteSubDocumentInfo {
isMain = false;
isEndNote = true;
getType() {
return SubDocumentInfoType.EndNote;
}
clone() {
return new EndNoteSubDocumentInfo(this.subDocumentId);
}
}
export class MainSubDocumentInfo extends SubDocumentInfoBase {
constructor() {
super(0);
}
getType() {
return SubDocumentInfoType.Main;
}
getEndPosition(documentModel) {
var sections = documentModel.sections;
var lastSection = sections[sections.length - 1];
return lastSection.startLogPosition.value + lastSection.getLength();
}
clone() {
return new MainSubDocumentInfo();
}
}
export class HeaderFooterSubDocumentInfoBase extends SubDocumentInfoBase {
headerFooterType = HeaderFooterType.Odd;
isMain = false;
isHeaderFooter = true;
}
export class HeaderSubDocumentInfo extends HeaderFooterSubDocumentInfoBase {
getType() {
return SubDocumentInfoType.Header;
}
isHeader = true;
clone() {
return new HeaderSubDocumentInfo(this.subDocumentId);
}
}
export class FooterSubDocumentInfo extends HeaderFooterSubDocumentInfoBase {
getType() {
return SubDocumentInfoType.Footer;
}
isFooter = true;
clone() {
return new FooterSubDocumentInfo(this.subDocumentId);
}
}