devexpress-richedit
Version:
DevExpress Rich Text Editor is an advanced word-processing tool designed for working with rich text documents.
27 lines (26 loc) • 1.87 kB
JavaScript
import { InsertTextManipulatorParams } from '../../../common/model/manipulators/text-manipulator/insert-text-manipulator-params';
import { RunType } from '../../../common/model/runs/run-type';
import { SubDocumentPosition } from '../../../common/model/sub-document';
import { InputPositionBase } from '../../../common/selection/input-position-base';
import { SelectionIntervalsInfo } from '../../../common/selection/selection-intervals-info';
import { IntervalAlgorithms } from '@devexpress/utils/lib/intervals/algorithms';
import { BoundaryInterval } from '@devexpress/utils/lib/intervals/boundary';
import { FixedInterval } from '@devexpress/utils/lib/intervals/fixed';
import { ListUtils } from '@devexpress/utils/lib/utils/list';
export function insertTextThroughApi(position, text, subDocument, processor, options) {
if (!text.length)
return new FixedInterval(position, 0);
const inputPos = options?.inputPosition ?? new InputPositionBase().setIntervals(SelectionIntervalsInfo.fromPosition(subDocument, position));
const wrapIntoBeginUpdate = options?.wrapIntoBeginUpdate ?? true;
if (wrapIntoBeginUpdate)
processor.beginUpdate();
processor.modelManager.history.beginTransaction();
const subDocPos = new SubDocumentPosition(subDocument, position);
const insertTextParams = new InsertTextManipulatorParams(subDocPos, inputPos.charPropsBundle, RunType.TextRun, text);
const resultIntervals = processor.modelManager.modelManipulator.text.insertTextWithParagraphs(insertTextParams, inputPos);
processor.modelManager.history.endTransaction();
if (wrapIntoBeginUpdate)
processor.endUpdate();
const mergedIntervals = IntervalAlgorithms.getMergedIntervals(resultIntervals, true);
return new BoundaryInterval(mergedIntervals[0].start, ListUtils.last(mergedIntervals).end);
}