devexpress-richedit
Version:
DevExpress Rich Text Editor is an advanced word-processing tool designed for working with rich text documents.
87 lines (86 loc) • 3.21 kB
JavaScript
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 {
modelPosition;
getVerticalOffset;
relativePosition;
_subDocument;
endOfLine;
pageIndex;
get subDocument() {
return this._subDocument = this._subDocument?.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 cursorPos = LayoutPosition.create(layout, this.subDocument, this.modelPosition, this.pageIndex, this.endOfLine);
return cursorPos ? new CanvasState(cursorPos, this.relativePosition, this.getVerticalOffset) : null;
}
}
export class ModelStateByPageInfo {
pageIndex;
getVerticalOffset;
relativePosition;
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;
}
}