UNPKG

devexpress-richedit

Version:

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

142 lines (141 loc) 5.54 kB
import { MaskedCharacterProperties } from '../character/character-properties'; import { MaskedParagraphProperties } from '../paragraph/paragraph-properties'; import { ListLevel, NumberingListReferenceLevel, OverrideListLevel } from './list-level'; import { ListLevelProperties } from './list-level-properties'; export class NumberingListBase { constructor(documentModel, levelCount) { this.innerId = -1; this.levels = []; this.deleted = false; this.documentModel = documentModel; this.initLevels(levelCount); } getId() { if (this.innerId === -1) this.innerId = this.generateNewId(); return this.innerId; } resetId() { this.innerId = -1; } initLevels(levelCount) { for (var i = 0; i < levelCount; i++) { var listLevel = this.createLevel(i); this.levels.push(listLevel); } } getLevelType(listLevelIndex) { if (this.isBulletListLevel(this.levels[listLevelIndex])) return NumberingType.Bullet; else if (!this.isHybridList()) return NumberingType.MultiLevel; else return NumberingType.Simple; } getListType() { if (!this.isHybridList()) return NumberingType.MultiLevel; if (this.isBulletListLevel(this.levels[0])) return NumberingType.Bullet; else return NumberingType.Simple; } equals(obj) { for (var i = 0, level; level = obj.levels[i]; i++) { if (!level.equals(this.levels[i])) return false; } return true; } externallyEquals(obj) { if (this.getListType() !== obj.getListType()) return false; var depth = this.getListType() == NumberingType.MultiLevel ? NumberingListBase.depth : 1; for (var i = 0; i < depth; i++) { if (!this.levels[i].externallyEquals(obj.levels[i])) return false; } return true; } copyFrom(obj) { this.innerId = obj.innerId; this.deleted = obj.deleted; this.copyLevelsFrom(obj.levels); } isHybridList() { for (var i = 0, listLevel; listLevel = this.levels[i]; i++) { if (listLevel.getListLevelProperties().templateCode !== 0) return true; } return false; } isBulletListLevel(level) { return level.getListLevelProperties().displayFormatString.length === 1; } } NumberingListBase.depth = 3; NumberingListBase.NoNumberingListIndex = -2; NumberingListBase.NumberingListNotSettedIndex = -1; export class AbstractNumberingList extends NumberingListBase { constructor(documentModel) { super(documentModel, 9); } generateNewId() { return this.documentModel.abstractNumberingListsIdProvider.getNextId(); } createLevel(_index) { const characterProperties = MaskedCharacterProperties.createDefault(this.documentModel); const paragraphProperties = MaskedParagraphProperties.createDefault(this.documentModel); return new ListLevel(this.documentModel, characterProperties, paragraphProperties, new ListLevelProperties()); } copyLevelsFrom(levels) { for (var i = 0, level; level = this.levels[i]; i++) { level.copyFrom(levels[i]); } } clone(model) { const result = new AbstractNumberingList(model); result.copyFrom(this); return result; } } export class NumberingList extends NumberingListBase { constructor(documentModel, abstractNumberingListIndex) { super(documentModel, 9); if (abstractNumberingListIndex < 0 || abstractNumberingListIndex >= documentModel.abstractNumberingLists.length) throw new Error("abstractNumberingListIndex should be positive and less than length of the abstractNumberingLists array"); this.abstractNumberingListIndex = abstractNumberingListIndex; } getAbstractNumberingList() { return this.documentModel.abstractNumberingLists[this.abstractNumberingListIndex]; } generateNewId() { return this.documentModel.numberingListsIdProvider.getNextId(); } createLevel(index) { return new NumberingListReferenceLevel(this, index); } copyLevelsFrom(levels) { for (var i = 0; i < this.levels.length; i++) { var sourceLevel = levels[i]; if (this.levels[i].constructor !== sourceLevel.constructor) { if (sourceLevel instanceof OverrideListLevel) this.levels[i] = new OverrideListLevel(this.documentModel, sourceLevel.getCharacterProperties(), sourceLevel.getParagraphProperties(), sourceLevel.getListLevelProperties()); else this.levels[i] = new NumberingListReferenceLevel(this, i); } this.levels[i].copyFrom(sourceLevel); } } clone(model) { const result = new NumberingList(model, this.abstractNumberingListIndex); result.copyFrom(this); return result; } } export var NumberingType; (function (NumberingType) { NumberingType[NumberingType["MultiLevel"] = 0] = "MultiLevel"; NumberingType[NumberingType["Simple"] = 1] = "Simple"; NumberingType[NumberingType["Bullet"] = 2] = "Bullet"; })(NumberingType || (NumberingType = {}));