devexpress-richedit
Version:
DevExpress Rich Text Editor is an advanced word-processing tool designed for working with rich text documents.
85 lines (84 loc) • 3.82 kB
JavaScript
import { LayoutPositionCreatorConflictFlags, LayoutPositionMainSubDocumentCreator, LayoutPositionOtherSubDocumentCreator } from '../layout-engine/layout-position-creator';
import { DocumentLayoutDetailsLevel } from '../layout/document-layout-details-level';
import { LayoutPosition } from '../layout/layout-position';
import { CanvasState } from './canvas-states';
export var RelativePosition;
(function (RelativePosition) {
RelativePosition[RelativePosition["Top"] = 0] = "Top";
RelativePosition[RelativePosition["Bottom"] = 1] = "Bottom";
RelativePosition[RelativePosition["Inside"] = 2] = "Inside";
})(RelativePosition || (RelativePosition = {}));
export class ScrollState {
byModelPosition(selection) {
return this.byModelPositionCore(selection.activeSubDocument, selection.endOfLine, selection.pageIndex);
}
byModelPositionCore(subDocument, endOfLine, pageIndex) {
return (new ModelStateByModelPosition(subDocument, endOfLine, pageIndex));
}
get byScrollInfo() {
return (new ModelStateByPageInfo());
}
get nothing() { return new ModelStateEmpty(); }
}
export class ModelStateByModelPosition {
get subDocument() {
var _a;
return this._subDocument = (_a = this._subDocument) === null || _a === void 0 ? void 0 : _a.getActualSubDocument();
}
constructor(subDocument, endOfLine, pageIndex) {
this._subDocument = subDocument;
this.endOfLine = endOfLine;
this.pageIndex = pageIndex;
}
getModelPosition() {
return this.modelPosition;
}
setModelPosition(modelPosition) {
this.modelPosition = modelPosition;
return this;
}
useCurrentPosition(selection) {
return this.setModelPosition(selection.anchorPosition);
}
setVerticalOffset(getVerticalOffset) {
this.getVerticalOffset = getVerticalOffset;
return this;
}
useStdOffset() {
return this.setVerticalOffset(() => 0);
}
setRelativePosition(relativePosition) {
this.relativePosition = relativePosition;
return this;
}
useStdRelativePosition() {
return this.setRelativePosition(RelativePosition.Inside);
}
getCanvasState(layout) {
const modelPos = this.modelPosition;
const cursorPos = this.subDocument.isMain()
? new LayoutPositionMainSubDocumentCreator(layout, this.subDocument, modelPos, DocumentLayoutDetailsLevel.Character)
.create(new LayoutPositionCreatorConflictFlags().setDefault(this.endOfLine), new LayoutPositionCreatorConflictFlags().setDefault(false))
: new LayoutPositionOtherSubDocumentCreator(layout, this.subDocument, modelPos, this.pageIndex, DocumentLayoutDetailsLevel.Character)
.create(new LayoutPositionCreatorConflictFlags().setDefault(this.endOfLine), new LayoutPositionCreatorConflictFlags().setDefault(false));
return cursorPos ? new CanvasState(cursorPos, this.relativePosition, this.getVerticalOffset) : null;
}
}
export class ModelStateByPageInfo {
setPageInfo(scrollTopInfo) {
this.getVerticalOffset = () => scrollTopInfo.topPositionRelativePage;
this.pageIndex = scrollTopInfo.pageIndex;
this.relativePosition = RelativePosition.Top;
return this;
}
getCanvasState(layout) {
return layout.isFullyFormatted || layout.isPageValid(this.pageIndex + 1) ?
new CanvasState(new LayoutPosition(DocumentLayoutDetailsLevel.Page).initByIndexes(this.pageIndex).applyObjectsAsMainSubDocument(layout, -1), this.relativePosition, this.getVerticalOffset) :
null;
}
}
export class ModelStateEmpty {
getCanvasState(_layout) {
return null;
}
}