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) 4 kB
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); } }