devexpress-richedit
Version:
DevExpress Rich Text Editor is an advanced word-processing tool designed for working with rich text documents.
286 lines (285 loc) • 19.5 kB
JavaScript
import { ApiParametersChecker } from './api-utils/parameter-checker';
import { SectionColumnCountHistoryItem, SectionEqualWidthColumnsHistoryItem, SectionFooterOffsetHistoryItem, SectionHeaderOffsetHistoryItem, SectionLandscapeHistoryItem, SectionMarginBottomHistoryItem, SectionMarginLeftHistoryItem, SectionMarginRightHistoryItem, SectionMarginTopHistoryItem, SectionPageHeightHistoryItem, SectionPageWidthHistoryItem, SectionPaperKindHistoryItem } from '../../common/model/history/items/section-properties-history-items';
import { Constants } from '@devexpress/utils/lib/constants';
import { SearchUtils } from '@devexpress/utils/lib/utils/search';
import { PaperKind, PaperSizeConverter } from '../../common/model/section/paper-kind';
import { convertToIntervalApi } from './interval';
import { MarginsApi, SizeApi } from './size';
import { HeaderFooterTypeApi, SubDocumentApi } from './sub-document';
import { Size } from '@devexpress/utils/lib/geometry/size';
export class SectionApi {
constructor(processor, section) {
this._section = section;
this._processor = processor;
}
get index() {
return SearchUtils.normedInterpolationIndexOf(this._processor.modelManager.model.sections, s => s.startLogPosition.value, this._section.startLogPosition.value);
}
get interval() {
return convertToIntervalApi(this._section.interval);
}
get margins() {
const margins = this._section.sectionProperties.margins.clone();
return new MarginsApi(margins.left, margins.right, margins.top, margins.bottom);
}
set margins(margins) {
margins = ApiParametersChecker.check(margins, 1, false, [
ApiParametersChecker.objectDescriptor('margins', 'Margins', (val) => val)
]);
ApiParametersChecker.check(margins.left, 1, false, [
ApiParametersChecker.numberDescriptor('margins.left', (val) => val, 0, Constants.MAX_SAFE_INTEGER)
]);
ApiParametersChecker.check(margins.left, 1, false, [
ApiParametersChecker.numberDescriptor('margins.right', (val) => val, 0, Constants.MAX_SAFE_INTEGER)
]);
ApiParametersChecker.check(margins.left, 1, false, [
ApiParametersChecker.numberDescriptor('margins.top', (val) => val, 0, Constants.MAX_SAFE_INTEGER)
]);
ApiParametersChecker.check(margins.left, 1, false, [
ApiParametersChecker.numberDescriptor('margins.bottom', (val) => val, 0, Constants.MAX_SAFE_INTEGER)
]);
this._processor.beginUpdate();
this._processor.modelManager.history.addTransaction(history => {
history.addAndRedo(new SectionMarginLeftHistoryItem(this._processor.modelManager.modelManipulator, this._section.interval, margins.left));
history.addAndRedo(new SectionMarginRightHistoryItem(this._processor.modelManager.modelManipulator, this._section.interval, margins.right));
history.addAndRedo(new SectionMarginTopHistoryItem(this._processor.modelManager.modelManipulator, this._section.interval, margins.top));
history.addAndRedo(new SectionMarginBottomHistoryItem(this._processor.modelManager.modelManipulator, this._section.interval, margins.bottom));
});
this._processor.endUpdate();
}
get columnCount() {
return this._section.sectionProperties.columnCount;
}
set columnCount(columnCount) {
columnCount = ApiParametersChecker.check(columnCount, 1, false, [
ApiParametersChecker.numberDescriptor('columnCount', (val) => val, 1, 64)
]);
this._processor.modelManager.history.addTransaction(history => {
history.addAndRedo(new SectionColumnCountHistoryItem(this._processor.modelManager.modelManipulator, this._section.interval, columnCount));
history.addAndRedo(new SectionEqualWidthColumnsHistoryItem(this._processor.modelManager.modelManipulator, this._section.interval, true));
});
}
get pageSize() {
const size = this._section.sectionProperties.pageSize.clone();
return new SizeApi(size.width, size.height);
}
set pageSize(size) {
size = ApiParametersChecker.check(size, 1, false, [
ApiParametersChecker.objectDescriptor('size', 'Size', (val) => val)
]);
ApiParametersChecker.check(size.width, 1, false, [
ApiParametersChecker.numberDescriptor('size.width', (val) => val, 1, Constants.MAX_SAFE_INTEGER)
]);
ApiParametersChecker.check(size.height, 1, false, [
ApiParametersChecker.numberDescriptor('size.height', (val) => val, 1, Constants.MAX_SAFE_INTEGER)
]);
const sectionInterval = this._section.interval;
const secProps = this._section.sectionProperties;
const newLandscape = size.width > size.height;
const oldLandscape = secProps.landscape;
this._processor.modelManager.history.beginTransaction();
if (oldLandscape !== newLandscape)
this._processor.modelManager.history.addAndRedo(new SectionLandscapeHistoryItem(this._processor.modelManager.modelManipulator, sectionInterval, newLandscape));
if (secProps.pageWidth !== size.width || secProps.pageHeight != size.height)
this._processor.modelManager.history.addAndRedo(new SectionPaperKindHistoryItem(this._processor.modelManager.modelManipulator, sectionInterval, PaperSizeConverter.calculatePaperKind(new Size(size.width, size.height), PaperKind.Custom, 0, PaperKind.Letter)));
if (secProps.pageWidth !== size.width)
this._processor.modelManager.history.addAndRedo(new SectionPageWidthHistoryItem(this._processor.modelManager.modelManipulator, sectionInterval, size.width));
if (secProps.pageHeight !== size.height)
this._processor.modelManager.history.addAndRedo(new SectionPageHeightHistoryItem(this._processor.modelManager.modelManipulator, sectionInterval, size.height));
this._processor.modelManager.history.endTransaction();
}
get headerOffset() {
return this._section.sectionProperties.headerOffset;
}
set headerOffset(offset) {
offset = ApiParametersChecker.check(offset, 1, false, [
ApiParametersChecker.numberDescriptor('offset', (val) => val, 0, Constants.MAX_SAFE_INTEGER)
]);
this._processor.modelManager.history.addAndRedo(new SectionHeaderOffsetHistoryItem(this._processor.modelManager.modelManipulator, this._section.interval, offset));
}
get footerOffset() {
return this._section.sectionProperties.footerOffset;
}
set footerOffset(offset) {
offset = ApiParametersChecker.check(offset, 1, false, [
ApiParametersChecker.numberDescriptor('offset', (val) => val, 0, Constants.MAX_SAFE_INTEGER)
]);
this._processor.modelManager.history.addAndRedo(new SectionFooterOffsetHistoryItem(this._processor.modelManager.modelManipulator, this._section.interval, offset));
}
get paperSize() {
return this._section.sectionProperties.paperKind;
}
set paperSize(paperSize) {
const modelPaperKind = ApiParametersChecker.check(paperSize, 1, false, [
ApiParametersChecker.enumDescriptor('paperSize', (val) => val, PaperSizeApi, 'PaperSize')
]);
const modelManipulator = this._processor.modelManager.modelManipulator;
const history = this._processor.modelManager.history;
const sectionInterval = this._section.interval;
this._processor.modelManager.history.beginTransaction();
try {
history.addAndRedo(new SectionPaperKindHistoryItem(modelManipulator, sectionInterval, modelPaperKind));
if (modelPaperKind != PaperKind.Custom) {
const size = PaperSizeConverter.calculatePaperSize(modelPaperKind);
history.addAndRedo(new SectionPageWidthHistoryItem(modelManipulator, sectionInterval, size.width));
history.addAndRedo(new SectionPageHeightHistoryItem(modelManipulator, sectionInterval, size.height));
}
}
finally {
this._processor.modelManager.history.endTransaction();
}
}
get landscape() {
return this._section.sectionProperties.landscape;
}
set landscape(landscape) {
landscape = ApiParametersChecker.check(landscape, 1, false, [
ApiParametersChecker.booleanDescriptor('landscape', v => v)
]);
this._processor.modelManager.history.addAndRedo(new SectionLandscapeHistoryItem(this._processor.modelManager.modelManipulator, this._section.interval, landscape));
}
getHeader(type = HeaderFooterTypeApi.Primary, createIfNotExist = true) {
const hfType = ApiParametersChecker.check(type, 1, false, [
ApiParametersChecker.enumDescriptor('type', (val) => val, HeaderFooterTypeApi, 'HeaderFooterType')
]);
let sdInfo = this._section.headers.getObject(hfType);
if (!sdInfo && createIfNotExist) {
const sectionIndex = SearchUtils.normedInterpolationIndexOf(this._processor.modelManager.model.sections, s => s.startLogPosition.value, this._section.startLogPosition.value);
this._processor.modelManager.modelManipulator.header.insertHeaderFooter(sectionIndex, true, hfType);
sdInfo = this._section.headers.getObject(hfType);
}
return sdInfo ? new SubDocumentApi(this._processor, sdInfo.getSubDocument(this._processor.modelManager.model)) : null;
}
getFooter(type = HeaderFooterTypeApi.Primary, createIfNotExist = true) {
const hfType = ApiParametersChecker.check(type, 1, false, [
ApiParametersChecker.enumDescriptor('type', (val) => val, HeaderFooterTypeApi, 'HeaderFooterType')
]);
let sdInfo = this._section.footers.getObject(hfType);
if (!sdInfo && createIfNotExist) {
const sectionIndex = SearchUtils.normedInterpolationIndexOf(this._processor.modelManager.model.sections, s => s.startLogPosition.value, this._section.startLogPosition.value);
this._processor.modelManager.modelManipulator.header.insertHeaderFooter(sectionIndex, false, hfType);
sdInfo = this._section.footers.getObject(hfType);
}
return sdInfo ? new SubDocumentApi(this._processor, sdInfo.getSubDocument(this._processor.modelManager.model)) : null;
}
}
export var PaperSizeApi;
(function (PaperSizeApi) {
PaperSizeApi[PaperSizeApi["Custom"] = 0] = "Custom";
PaperSizeApi[PaperSizeApi["Letter"] = 1] = "Letter";
PaperSizeApi[PaperSizeApi["LetterSmall"] = 2] = "LetterSmall";
PaperSizeApi[PaperSizeApi["Tabloid"] = 3] = "Tabloid";
PaperSizeApi[PaperSizeApi["Ledger"] = 4] = "Ledger";
PaperSizeApi[PaperSizeApi["Legal"] = 5] = "Legal";
PaperSizeApi[PaperSizeApi["Statement"] = 6] = "Statement";
PaperSizeApi[PaperSizeApi["Executive"] = 7] = "Executive";
PaperSizeApi[PaperSizeApi["A3"] = 8] = "A3";
PaperSizeApi[PaperSizeApi["A4"] = 9] = "A4";
PaperSizeApi[PaperSizeApi["A4Small"] = 10] = "A4Small";
PaperSizeApi[PaperSizeApi["A5"] = 11] = "A5";
PaperSizeApi[PaperSizeApi["B4"] = 12] = "B4";
PaperSizeApi[PaperSizeApi["B5"] = 13] = "B5";
PaperSizeApi[PaperSizeApi["Folio"] = 14] = "Folio";
PaperSizeApi[PaperSizeApi["Quarto"] = 15] = "Quarto";
PaperSizeApi[PaperSizeApi["Standard10x14"] = 16] = "Standard10x14";
PaperSizeApi[PaperSizeApi["Standard11x17"] = 17] = "Standard11x17";
PaperSizeApi[PaperSizeApi["Note"] = 18] = "Note";
PaperSizeApi[PaperSizeApi["Number9Envelope"] = 19] = "Number9Envelope";
PaperSizeApi[PaperSizeApi["Number10Envelope"] = 20] = "Number10Envelope";
PaperSizeApi[PaperSizeApi["Number11Envelope"] = 21] = "Number11Envelope";
PaperSizeApi[PaperSizeApi["Number12Envelope"] = 22] = "Number12Envelope";
PaperSizeApi[PaperSizeApi["Number14Envelope"] = 23] = "Number14Envelope";
PaperSizeApi[PaperSizeApi["CSheet"] = 24] = "CSheet";
PaperSizeApi[PaperSizeApi["DSheet"] = 25] = "DSheet";
PaperSizeApi[PaperSizeApi["ESheet"] = 26] = "ESheet";
PaperSizeApi[PaperSizeApi["DLEnvelope"] = 27] = "DLEnvelope";
PaperSizeApi[PaperSizeApi["C5Envelope"] = 28] = "C5Envelope";
PaperSizeApi[PaperSizeApi["C3Envelope"] = 29] = "C3Envelope";
PaperSizeApi[PaperSizeApi["C4Envelope"] = 30] = "C4Envelope";
PaperSizeApi[PaperSizeApi["C6Envelope"] = 31] = "C6Envelope";
PaperSizeApi[PaperSizeApi["C65Envelope"] = 32] = "C65Envelope";
PaperSizeApi[PaperSizeApi["B4Envelope"] = 33] = "B4Envelope";
PaperSizeApi[PaperSizeApi["B5Envelope"] = 34] = "B5Envelope";
PaperSizeApi[PaperSizeApi["B6Envelope"] = 35] = "B6Envelope";
PaperSizeApi[PaperSizeApi["ItalyEnvelope"] = 36] = "ItalyEnvelope";
PaperSizeApi[PaperSizeApi["MonarchEnvelope"] = 37] = "MonarchEnvelope";
PaperSizeApi[PaperSizeApi["PersonalEnvelope"] = 38] = "PersonalEnvelope";
PaperSizeApi[PaperSizeApi["USStandardFanfold"] = 39] = "USStandardFanfold";
PaperSizeApi[PaperSizeApi["GermanStandardFanfold"] = 40] = "GermanStandardFanfold";
PaperSizeApi[PaperSizeApi["GermanLegalFanfold"] = 41] = "GermanLegalFanfold";
PaperSizeApi[PaperSizeApi["IsoB4"] = 42] = "IsoB4";
PaperSizeApi[PaperSizeApi["JapanesePostcard"] = 43] = "JapanesePostcard";
PaperSizeApi[PaperSizeApi["Standard9x11"] = 44] = "Standard9x11";
PaperSizeApi[PaperSizeApi["Standard10x11"] = 45] = "Standard10x11";
PaperSizeApi[PaperSizeApi["Standard15x11"] = 46] = "Standard15x11";
PaperSizeApi[PaperSizeApi["InviteEnvelope"] = 47] = "InviteEnvelope";
PaperSizeApi[PaperSizeApi["LetterExtra"] = 50] = "LetterExtra";
PaperSizeApi[PaperSizeApi["LegalExtra"] = 51] = "LegalExtra";
PaperSizeApi[PaperSizeApi["TabloidExtra"] = 52] = "TabloidExtra";
PaperSizeApi[PaperSizeApi["A4Extra"] = 53] = "A4Extra";
PaperSizeApi[PaperSizeApi["LetterTransverse"] = 54] = "LetterTransverse";
PaperSizeApi[PaperSizeApi["A4Transverse"] = 55] = "A4Transverse";
PaperSizeApi[PaperSizeApi["LetterExtraTransverse"] = 56] = "LetterExtraTransverse";
PaperSizeApi[PaperSizeApi["APlus"] = 57] = "APlus";
PaperSizeApi[PaperSizeApi["BPlus"] = 58] = "BPlus";
PaperSizeApi[PaperSizeApi["LetterPlus"] = 59] = "LetterPlus";
PaperSizeApi[PaperSizeApi["A4Plus"] = 60] = "A4Plus";
PaperSizeApi[PaperSizeApi["A5Transverse"] = 61] = "A5Transverse";
PaperSizeApi[PaperSizeApi["B5Transverse"] = 62] = "B5Transverse";
PaperSizeApi[PaperSizeApi["A3Extra"] = 63] = "A3Extra";
PaperSizeApi[PaperSizeApi["A5Extra"] = 64] = "A5Extra";
PaperSizeApi[PaperSizeApi["B5Extra"] = 65] = "B5Extra";
PaperSizeApi[PaperSizeApi["A2"] = 66] = "A2";
PaperSizeApi[PaperSizeApi["A3Transverse"] = 67] = "A3Transverse";
PaperSizeApi[PaperSizeApi["A3ExtraTransverse"] = 68] = "A3ExtraTransverse";
PaperSizeApi[PaperSizeApi["JapaneseDoublePostcard"] = 69] = "JapaneseDoublePostcard";
PaperSizeApi[PaperSizeApi["A6"] = 70] = "A6";
PaperSizeApi[PaperSizeApi["JapaneseEnvelopeKakuNumber2"] = 71] = "JapaneseEnvelopeKakuNumber2";
PaperSizeApi[PaperSizeApi["JapaneseEnvelopeKakuNumber3"] = 72] = "JapaneseEnvelopeKakuNumber3";
PaperSizeApi[PaperSizeApi["JapaneseEnvelopeChouNumber3"] = 73] = "JapaneseEnvelopeChouNumber3";
PaperSizeApi[PaperSizeApi["JapaneseEnvelopeChouNumber4"] = 74] = "JapaneseEnvelopeChouNumber4";
PaperSizeApi[PaperSizeApi["LetterRotated"] = 75] = "LetterRotated";
PaperSizeApi[PaperSizeApi["A3Rotated"] = 76] = "A3Rotated";
PaperSizeApi[PaperSizeApi["A4Rotated"] = 77] = "A4Rotated";
PaperSizeApi[PaperSizeApi["A5Rotated"] = 78] = "A5Rotated";
PaperSizeApi[PaperSizeApi["B4JisRotated"] = 79] = "B4JisRotated";
PaperSizeApi[PaperSizeApi["B5JisRotated"] = 80] = "B5JisRotated";
PaperSizeApi[PaperSizeApi["JapanesePostcardRotated"] = 81] = "JapanesePostcardRotated";
PaperSizeApi[PaperSizeApi["JapaneseDoublePostcardRotated"] = 82] = "JapaneseDoublePostcardRotated";
PaperSizeApi[PaperSizeApi["A6Rotated"] = 83] = "A6Rotated";
PaperSizeApi[PaperSizeApi["JapaneseEnvelopeKakuNumber2Rotated"] = 84] = "JapaneseEnvelopeKakuNumber2Rotated";
PaperSizeApi[PaperSizeApi["JapaneseEnvelopeKakuNumber3Rotated"] = 85] = "JapaneseEnvelopeKakuNumber3Rotated";
PaperSizeApi[PaperSizeApi["JapaneseEnvelopeChouNumber3Rotated"] = 86] = "JapaneseEnvelopeChouNumber3Rotated";
PaperSizeApi[PaperSizeApi["JapaneseEnvelopeChouNumber4Rotated"] = 87] = "JapaneseEnvelopeChouNumber4Rotated";
PaperSizeApi[PaperSizeApi["B6Jis"] = 88] = "B6Jis";
PaperSizeApi[PaperSizeApi["B6JisRotated"] = 89] = "B6JisRotated";
PaperSizeApi[PaperSizeApi["Standard12x11"] = 90] = "Standard12x11";
PaperSizeApi[PaperSizeApi["JapaneseEnvelopeYouNumber4"] = 91] = "JapaneseEnvelopeYouNumber4";
PaperSizeApi[PaperSizeApi["JapaneseEnvelopeYouNumber4Rotated"] = 92] = "JapaneseEnvelopeYouNumber4Rotated";
PaperSizeApi[PaperSizeApi["Prc16K"] = 93] = "Prc16K";
PaperSizeApi[PaperSizeApi["Prc32K"] = 94] = "Prc32K";
PaperSizeApi[PaperSizeApi["Prc32KBig"] = 95] = "Prc32KBig";
PaperSizeApi[PaperSizeApi["PrcEnvelopeNumber1"] = 96] = "PrcEnvelopeNumber1";
PaperSizeApi[PaperSizeApi["PrcEnvelopeNumber2"] = 97] = "PrcEnvelopeNumber2";
PaperSizeApi[PaperSizeApi["PrcEnvelopeNumber3"] = 98] = "PrcEnvelopeNumber3";
PaperSizeApi[PaperSizeApi["PrcEnvelopeNumber4"] = 99] = "PrcEnvelopeNumber4";
PaperSizeApi[PaperSizeApi["PrcEnvelopeNumber5"] = 100] = "PrcEnvelopeNumber5";
PaperSizeApi[PaperSizeApi["PrcEnvelopeNumber6"] = 101] = "PrcEnvelopeNumber6";
PaperSizeApi[PaperSizeApi["PrcEnvelopeNumber7"] = 102] = "PrcEnvelopeNumber7";
PaperSizeApi[PaperSizeApi["PrcEnvelopeNumber8"] = 103] = "PrcEnvelopeNumber8";
PaperSizeApi[PaperSizeApi["PrcEnvelopeNumber9"] = 104] = "PrcEnvelopeNumber9";
PaperSizeApi[PaperSizeApi["PrcEnvelopeNumber10"] = 105] = "PrcEnvelopeNumber10";
PaperSizeApi[PaperSizeApi["Prc16KRotated"] = 106] = "Prc16KRotated";
PaperSizeApi[PaperSizeApi["Prc32KRotated"] = 107] = "Prc32KRotated";
PaperSizeApi[PaperSizeApi["Prc32KBigRotated"] = 108] = "Prc32KBigRotated";
PaperSizeApi[PaperSizeApi["PrcEnvelopeNumber1Rotated"] = 109] = "PrcEnvelopeNumber1Rotated";
PaperSizeApi[PaperSizeApi["PrcEnvelopeNumber2Rotated"] = 110] = "PrcEnvelopeNumber2Rotated";
PaperSizeApi[PaperSizeApi["PrcEnvelopeNumber3Rotated"] = 111] = "PrcEnvelopeNumber3Rotated";
PaperSizeApi[PaperSizeApi["PrcEnvelopeNumber4Rotated"] = 112] = "PrcEnvelopeNumber4Rotated";
PaperSizeApi[PaperSizeApi["PrcEnvelopeNumber5Rotated"] = 113] = "PrcEnvelopeNumber5Rotated";
PaperSizeApi[PaperSizeApi["PrcEnvelopeNumber6Rotated"] = 114] = "PrcEnvelopeNumber6Rotated";
PaperSizeApi[PaperSizeApi["PrcEnvelopeNumber7Rotated"] = 115] = "PrcEnvelopeNumber7Rotated";
PaperSizeApi[PaperSizeApi["PrcEnvelopeNumber8Rotated"] = 116] = "PrcEnvelopeNumber8Rotated";
PaperSizeApi[PaperSizeApi["PrcEnvelopeNumber9Rotated"] = 117] = "PrcEnvelopeNumber9Rotated";
PaperSizeApi[PaperSizeApi["PrcEnvelopeNumber10Rotated"] = 118] = "PrcEnvelopeNumber10Rotated";
})(PaperSizeApi || (PaperSizeApi = {}));