devexpress-richedit
Version:
DevExpress Rich Text Editor is an advanced word-processing tool designed for working with rich text documents.
73 lines (72 loc) • 5.5 kB
JavaScript
import { ApiParametersChecker } from '../api-utils/parameter-checker';
import { ColorHelper } from '../../../common/model/color/color';
import { AnchorInfo } from '../../../common/model/floating-objects/anchor-info';
import { RelativeHeightType, RelativeWidthType } from '../../../common/model/floating-objects/enums';
import { AnchorTextBoxSize } from '../../../common/model/floating-objects/sizes';
import { TextBoxProperties } from '../../../common/model/floating-objects/text-box-properties';
import { InlinePictureInfo } from '../../../common/model/manipulators/picture-manipulator/insert-picture-manipulator-params';
import { ImageLoadingOptions } from '../../../common/model/manipulators/picture-manipulator/loader/image-loading-options';
import { NonVisualDrawingObjectInfo } from '../../../common/model/manipulators/picture-manipulator/non-visual-drawing-object-info';
import { BaseTextBoxInfo } from '../../../common/model/manipulators/text-box-manipulator';
import { RunType } from '../../../common/model/runs/run-type';
import { Shape } from '../../../common/model/shapes/shape';
import { SubDocumentPosition } from '../../../common/model/sub-document';
import { InputPositionBase } from '../../../common/selection/input-position-base';
import { SelectionIntervalsInfo } from '../../../common/selection/selection-intervals-info';
import { UnitConverter } from '@devexpress/utils/lib/class/unit-converter';
import { Margins } from '@devexpress/utils/lib/geometry/margins';
import { Size } from '@devexpress/utils/lib/geometry/size';
import { ColorUtils } from '@devexpress/utils/lib/utils/color';
import { IntervalApi } from '../interval';
import { PictureApi } from '../picture';
import { TextBoxApi } from '../text-box';
import { DrawingObjectCollectionBase } from './drawing-object-collection-base';
export class PictureCollection extends DrawingObjectCollectionBase {
create(position, base64, size, callback = () => { }) {
position = ApiParametersChecker.check(position, 1, false, [
ApiParametersChecker.numberDescriptor('start', (v) => v, 0, this._subDocument.getDocumentEndPosition() - 1)
]);
base64 = ApiParametersChecker.check(base64, 2, false, [
ApiParametersChecker.stringDescriptor('base64', (v) => v, false)
]);
const coreSize = ApiParametersChecker.check(size, 3, false, [
ApiParametersChecker.objectDescriptor('size', 'SizeApi', (v) => new Size(v.width, v.height))
]);
const origSize = new Size(coreSize.width, coreSize.height);
const cacheInfo = this._processor.modelManager.model.cache.imageCache.createUnloadedByBase64OrUrl(base64, origSize);
const inputPos = new InputPositionBase().setIntervals(SelectionIntervalsInfo.fromPosition(this._subDocument, position));
this._processor.modelManager.modelManipulator.picture.insertInlinePictureViaHistory(new SubDocumentPosition(this._subDocument, position), inputPos.charPropsBundle, InlinePictureInfo.defaultInfo(cacheInfo), new ImageLoadingOptions(false, coreSize, () => callback(new IntervalApi(position, 1))));
}
get _runTypes() {
return [RunType.AnchoredPictureRun, RunType.InlinePictureRun];
}
_getItem(coreItem) {
return new PictureApi(this._processor.modelManager, this._subDocument, coreItem.run, coreItem.position);
}
}
export class TextBoxCollection extends DrawingObjectCollectionBase {
create(position) {
position = ApiParametersChecker.check(position, 1, false, [
ApiParametersChecker.numberDescriptor('start', (v) => v, 0, this._subDocument.getDocumentEndPosition())
]);
const topBottomMargin = UnitConverter.inchesToTwips(0.05);
const leftRightMargin = UnitConverter.inchesToTwips(0.1);
const absoluteSize = new Size(UnitConverter.inchesToTwips(2), UnitConverter.inchesToTwips(0.3));
const relativeSize = new Size(AnchorTextBoxSize.RELATIVE_COEFF * 0.40, AnchorTextBoxSize.RELATIVE_COEFF * 0.2);
let size = new AnchorTextBoxSize(false, 0, absoluteSize, relativeSize, RelativeWidthType.Page, RelativeHeightType.Page, false, false);
let contentMargins = new Margins(leftRightMargin, leftRightMargin, topBottomMargin, topBottomMargin);
let textBoxProperties = new TextBoxProperties(contentMargins);
const anchorInfo = new AnchorInfo();
anchorInfo.zOrder = this._processor.modelManager.modelManipulator.floatingObject.zOrder.getNewZOrder(this._subDocument);
const inputPos = new InputPositionBase().setIntervals(SelectionIntervalsInfo.fromPosition(this._subDocument, position));
this._processor.modelManager.modelManipulator.textBox.insertAnchoredTextBoxViaHistory(new SubDocumentPosition(this._subDocument, position), inputPos.charPropsBundle, new BaseTextBoxInfo(null, size, new Shape(ColorUtils.fromString(ColorUtils.colorNames.white), ColorHelper.BLACK_COLOR, UnitConverter.pointsToTwips(3.0 / 4)), anchorInfo, textBoxProperties, new NonVisualDrawingObjectInfo()));
const textBoxRun = this._subDocument.getRunByPosition(position);
return new TextBoxApi(this._processor.modelManager, this._subDocument, textBoxRun, position);
}
get _runTypes() {
return [RunType.AnchoredTextBoxRun];
}
_getItem(coreItem) {
return new TextBoxApi(this._processor.modelManager, this._subDocument, coreItem.run, coreItem.position);
}
}