@hailin-zheng/editor-core 1.0.49 → 1.0.52

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-cjs.js","sources":["../src/src/med_editor/framework/element-event-define.ts","../src/src/med_editor/framework/notify.ts","../src/src/med_editor/framework/render-define.ts","../src/src/med_editor/framework/common-util.ts","../src/src/med_editor/framework/element-trace-tracking.ts","../src/src/med_editor/framework/event-subject.ts","../src/src/med_editor/framework/element-define.ts","../src/src/med_editor/framework/element-props.ts","../src/src/med_editor/framework/impl/comments/comments-container-impl.ts","../src/src/med_editor/framework/impl/data-element/data-decorate-impl.ts","../src/src/med_editor/framework/impl/data-element/data-element-base-impl.ts","../src/src/med_editor/framework/impl/document/doc-impl.ts","../src/src/med_editor/framework/impl/document/doc-body-impl.ts","../src/src/med_editor/framework/impl/document/doc-footer-impl.ts","../src/src/med_editor/framework/impl/document/doc-header-impl.ts","../src/src/med_editor/framework/impl/paragraph/p-impl.ts","../src/src/med_editor/framework/impl/symbol/p-symbol-impl.ts","../src/src/med_editor/framework/impl/table/table-cell-impl.ts","../src/src/med_editor/framework/impl/table/table-row-impl.ts","../src/src/med_editor/framework/impl/table/table-util.ts","../src/src/med_editor/framework/impl/table/table-impl.ts","../src/src/med_editor/framework/impl/text/text-impl.ts","../src/src/med_editor/framework/element-serialize.ts","../src/src/med_editor/framework/impl/text/track-run-impl.ts","../src/src/med_editor/framework/element-util.ts","../src/src/med_editor/framework/impl/document/doc-container-impl.ts","../src/src/med_editor/framework/document-selection.ts","../src/src/med_editor/framework/impl/checkbox/checkbox-impl.ts","../src/src/med_editor/framework/impl/comments/comment-content-impl.ts","../src/src/med_editor/framework/impl/comments/comments-util.ts","../src/src/med_editor/framework/impl/comments/comment-element-impl.ts","../src/src/med_editor/framework/impl/comments/validate-msg-impl.ts","../src/src/med_editor/framework/impl/data-element/data-element-barcode.ts","../src/src/med_editor/framework/impl/data-element/data-element-check-impl.ts","../src/src/med_editor/framework/impl/data-element/data-element-date-impl.ts","../src/src/med_editor/framework/impl/data-element/data-element-group-impl.ts","../src/src/med_editor/framework/impl/data-element/data-element-image-impl.ts","../src/src/med_editor/framework/impl/data-element/data-element-list-impl.ts","../src/src/med_editor/framework/impl/data-element/data-element-text-impl.ts","../src/src/med_editor/framework/impl/decorate/fill-null-space-imple.ts","../src/src/med_editor/framework/impl/document/doc-body-part-impl.ts","../src/src/med_editor/framework/impl/media-formula/menstrual-history.ts","../src/src/med_editor/framework/impl/picture/image-impl.ts","../src/src/med_editor/framework/impl/radio/radio-impl.ts","../src/src/med_editor/framework/impl/symbol/br-symbol-impl.ts","../src/src/med_editor/framework/impl/table/table-split-cell-patch.ts","../src/src/med_editor/framework/impl/table/table-split-cell.ts","../src/src/med_editor/doc-ruler.ts","../src/src/med_editor/framework/render-context.ts","../src/src/med_editor/framework/document-textline-mode.ts","../src/src/med_editor/framework/element-measure.ts","../src/src/med_editor/framework/range-util.ts","../src/src/med_editor/framework/element-paint.ts","../src/src/med_editor/framework/element-render-cut.ts","../src/src/med_editor/framework/selection-overlays.ts","../src/src/med_editor/framework/document-paint.ts","../src/src/med_editor/framework/impl/paragraph/p-line-impl.ts","../src/src/med_editor/framework/element-reader.ts","../src/src/med_editor/framework/document-event.ts","../src/src/med_editor/framework/document-input-cursor.ts","../src/src/med_editor/framework/document-change.ts","../src/src/med_editor/framework/document-print.ts","../src/src/med_editor/framework/document-template.ts","../src/src/med_editor/framework/document-eval-func.ts","../src/src/med_editor/framework/document-images-loader.ts","../src/src/med_editor/framework/document-context.ts","../src/src/med_editor/framework/document-comment.ts","../src/src/med_editor/framework/document-segmenter.ts","../src/src/med_editor/framework/element-trace-manage.ts","../src/src/med_editor/texteditor.ts","../src/src/med_editor/framework/document-combine.ts","../src/src/med_editor/framework/document-print-offscreen.ts","../src/src/med_editor/framework/element-type-handler.ts"],"sourcesContent":["import { Element, LeafElement, Rect } from \"./element-define\";\nimport { nanoid } from \"nanoid\";\nimport { LeafRenderObject, RenderObject } from \"./render-define\";\nimport { EditorContext } from \"./document-context\";\nimport { TrackRunTypeEnum } from \"./impl/text/track-run-impl\";\n\nexport type EventStage = 'All' | 'Capture' | 'Bubbling';\nexport type EventTypes = 'ElementMousedown' | 'ElementMousemove' | 'ElementClick' | 'ElementDblClick' | 'ElementMouseEnter'\n | 'ElementMouseLeave' | 'BackspaceKey' | 'DeleteKey' | 'ElementShown' | 'ElementContextMenu' | 'GotCursor' | 'LostCursor' | 'ElementKeyDown' | 'ElementDrop' |\n 'ElementTabKey' | 'GetTrackTips';\n\nexport type HitRegion = 'header' | 'body' | 'footer' | 'review';\n\nexport interface HitEventInfo {\n relativeRect: Rect,\n absoluteRect: Rect,\n offset: number,\n render: LeafRenderObject,\n element: LeafElement,\n shadowRenderIndex: number,\n hitDocIndex: number,\n startRegion?: HitRegion\n}\n\n/**\n * 元素事件\n */\nexport class ElementEvent {\n constructor(public ctx: EditorContext) { }\n /**\n * 事件源头对象\n */\n source!: Element;\n sourceOffset!: number;\n sourceRender!: RenderObject;\n /**\n * 当前所在的对象\n */\n currentElement!: Element;\n currentRenderObjectX!: number;\n currentRenderObjectY!: number;\n //是否取消向上冒泡\n isCancel!: boolean;\n globalX!: number;\n globalY!: number;\n pageX!: number;\n pageY!: number;\n shift!: boolean;\n ctrl!: boolean;\n buttons!: number;\n get selectionState(){\n return this.ctx.selectionState;\n }\n}\n\nexport interface MenuListener {\n [listener: string]: <T extends Event>(evt: T) => void;\n}\nexport class ContentMenuItem {\n icon!: string;\n caption!: string;\n eventObj!: MenuListener;\n subItems?: Array<ContentMenuItem> = [];\n}\n/**\n * 鼠标操作的事件\n */\nexport class MouseElementEvent extends ElementEvent { }\n\nexport class MousedownElementEvent extends ElementEvent { }\nexport class KeyboradElementEvent extends ElementEvent {\n key!: string;\n sourceEvent!: KeyboardEvent;\n}\nexport class GotCursorEvent extends ElementEvent { }\nexport class LostCursorEvent extends ElementEvent { }\nexport interface ITrackTips {\n trackRunType: TrackRunTypeEnum;\n name: string;\n date: string;\n content: string;\n}\nexport class GetTrackTipsEvent extends ElementEvent {\n trackTips!: ITrackTips;\n}\nexport class ContextMenuElementEvent extends ElementEvent {\n menus: Array<ContentMenuItem> = [];\n}\nexport class DropElementEvent extends ElementEvent {\n dragElement!: Element;\n}\n\nexport interface EventProps<T extends ElementEvent = ElementEvent> { id: string, eventName: string, listener: (evt: T) => void, useCapture: boolean }\nexport class EventMap {\n private map: WeakMap<Element, Array<EventProps<any>>> = new WeakMap();\n\n add<T extends ElementEvent>(element: Element, eventName: EventTypes, listener: (evt: T) => void, useCapture: boolean): string {\n const events = this.map.get(element);\n const eventId = nanoid(8);\n const eventProps: EventProps<T> = { id: eventId, eventName, listener, useCapture };\n if (!events) {\n this.map.set(element, [eventProps]);\n } else {\n events.push(eventProps);\n }\n return eventId;\n }\n\n remove(element: Element, eventId: string): void {\n const events = this.map.get(element);\n if (events) {\n const listenerIndex = events.findIndex(item => item.id === eventId);\n if (listenerIndex >= 0) {\n events.splice(listenerIndex, 1);\n }\n }\n }\n\n removeByType(element: Element, eventName: EventTypes): void {\n const events = this.map.get(element);\n if (events) {\n const filterEvents = events.filter(item => item.eventName === eventName);\n filterEvents.forEach(item => { this.remove(element, item.id) });\n }\n }\n\n clear(element: Element): void {\n //const events = this.map.get(element);\n this.map.delete(element);\n }\n\n get(element: Element, eventName: string, useCapture = false): Array<(evt: ElementEvent) => void> {\n const events = this.map.get(element);\n if (events) {\n const listener = events.filter(item => item.eventName === eventName && item.useCapture === useCapture).map(item => item.listener);\n return listener;\n }\n return [];\n\n }\n}","const EDITOR_REACTIVE = '__editor_reactive';\nconst ITERATOR_KEY = Symbol('iterator-key')\nexport const reactiveMap = new WeakMap<object, object>();\nexport const targetMaps = new WeakMap<object, Map<propType, Set<notifyCallback>>>();\ntype propType = string | number | symbol;\ninterface notifyCallback {\n (target: object, p: propType, oldValue: any, newValue: any): string | undefined | void;\n}\n\n\nconst activeFns: Array<notifyCallback> = [];\nfunction track(target: object, p: propType) {\n const activeFn = activeFns[activeFns.length - 1];\n if (!activeFn) {\n return;\n }\n let targetMap = targetMaps.get(target)\n if (!targetMap) {\n targetMaps.set(target, (targetMap = new Map()))\n }\n let effectFns = targetMap.get(p);\n if (!effectFns) {\n targetMap.set(p, (effectFns = new Set()))\n }\n effectFns.add(activeFn)\n}\n\nfunction trigger(target: object, p: propType, oldValue: any, newValue: any): void {\n //不需要触发\n if (p.toString().startsWith('__')) {\n return;\n }\n const targetMap = targetMaps.get(target);\n if (!targetMap) {\n return;\n }\n const effectFns = targetMap.get(p);\n const iteratorFns = targetMap.get(ITERATOR_KEY);\n const fns = new Set<notifyCallback>();\n effectFns && effectFns.forEach(item => fns.add(item));\n iteratorFns && iteratorFns.forEach(item => fns.add(item));\n const activeFn = activeFns[activeFns.length - 1];\n //防止死循环,过滤正在运行的副作用\n if (activeFn) {\n fns.delete(activeFn)\n }\n fns.forEach(fn => {\n fn(target, p, oldValue, newValue)\n });\n}\n\nexport function watchChanged<T extends object>(source: T, cb: notifyCallback): T {\n if ((<any>source)[EDITOR_REACTIVE]) {\n addToTrack((<any>source)['raw'], source, cb);\n return source;\n }\n if (isDate(source)) {\n return source;\n }\n const existProxy = reactiveMap.get(source);\n if (existProxy) {\n return existProxy as T;\n }\n const proxy = new Proxy(source, {\n get(target, p, receiver) {\n if (p === 'raw') {\n return target;\n }\n if (p === EDITOR_REACTIVE) {\n return true;\n }\n const res = Reflect.get(target, p, receiver)\n if (typeof res === 'object' && res) {\n return watchChanged(res, cb);\n }\n return res;\n },\n set(target, p, newValue, receiver) {\n //console.log('设置' + p.toString())\n const oldValue = (<any>target)[p];\n const res = Reflect.set(target, p, newValue, receiver);\n if ((<any>receiver).raw === target) {\n if (oldValue !== newValue && (oldValue === oldValue || newValue === newValue)) {\n trigger(target, p, oldValue, newValue);\n }\n }\n return res;\n }\n })\n addToTrack(source, proxy, cb);\n return proxy;\n}\n\nfunction addToTrack(source: object, proxy: object, cb: notifyCallback): void {\n activeFns.push(cb);\n track(source, ITERATOR_KEY);\n activeFns.pop();\n reactiveMap.set(source, proxy);\n}\n\n\nexport function setNotifyChangedCallback(target: object, p: propType, cb: notifyCallback): void {\n let trackTarget: any = target;\n if ((<any>target)[EDITOR_REACTIVE]) {\n trackTarget = (<any>target)['raw'];\n }\n activeFns.push(cb)\n track(trackTarget, p);\n activeFns.pop()\n}\n\nexport const isDate = (val: unknown): val is Date => val instanceof Date\n\nexport const objectToString = Object.prototype.toString\nexport const toTypeString = (value: unknown): string =>\n objectToString.call(value)\n\nexport const toRawType = (value: unknown): string => {\n return toTypeString(value).slice(8, -1)\n}\n","import { Rect, Element, MarginProps, PaddingProps, Position, ViewOptions } from './element-define'\nimport { RenderContextType } from './render-context';\nimport { EditorContext } from \"./document-context\";\n\n/**\n * 定义组件的UI形式的渲染\n */\nexport abstract class RenderObject<T extends Element = Element> {\n margin!: MarginProps;\n padding!: PaddingProps;\n rect: Rect = new Rect();\n parent!: BranchRenderObject;\n /**\n * 可点击性,例如:null-text 占位符元素不具备可点击能力\n */\n disableClick!: boolean;\n constructor(public element: T) {\n this.margin = new MarginProps();\n this.padding = new PaddingProps();\n }\n abstract clone(): RenderObject;\n pagePaintCompleted(e: Omit<IRenderData, 'nextRender'>): void { }\n destroy(): void {\n //this.parent = null;\n //this.margin = null;\n //this.padding = null;\n //this.rect = null;\n //this.element = null;\n }\n\n /**\n * 获取内容区域框体\n * @param render \n * @returns \n */\n getInnerRect(): Rect {\n const { padding } = this;\n const rect = new Rect();\n rect.x = padding.left;\n rect.y = padding.top;\n rect.maxWidth = this.rect.maxWidth - padding.left - padding.right;\n if (this.rect.maxHeight) {\n rect.maxHeight = this.rect.maxHeight - padding.top - padding.bottom;\n }\n return rect;\n }\n\n getInnerMaxWidth(): number {\n if (!this.rect.maxWidth) {\n throw new Error('this.rect.maxWidth is null')\n }\n const { padding, margin } = this;\n return this.rect.maxWidth - padding.left - padding.right - margin.left - margin.right;\n }\n\n /**\n * 根据内框内容高度,更新外框框体高度\n * @param innerRect\n */\n updateRenderHeight(innerRect: Rect | number): void {\n const innerHeight = typeof innerRect === 'number' ? innerRect : (<Rect>innerRect).height;\n const { padding, margin } = this;\n //外层容器高度等于内容高度+外边距+内边距\n this.rect.height = innerHeight + padding.top + padding.bottom;\n }\n\n getIndex(): number {\n if (this.parent) {\n return this.parent.getChildIndex(this);\n } else {\n return 0;\n }\n }\n abstract render(e: IRenderData): void;\n}\n\n/**\n * 叶子节点渲染元素\n */\nexport abstract class LeafRenderObject<T extends Element = Element> extends RenderObject<T> {\n constructor(element: T | null) {\n super(element as T);\n }\n}\n\n/**\n * 枝干节点渲染元素\n */\nexport abstract class BranchRenderObject<T extends Element = Element> extends RenderObject<T> {\n constructor(element: T | null) {\n super(element as T);\n }\n private children: Array<RenderObject> = [];\n getItems(): Array<RenderObject> {\n return this.children;\n }\n\n addChild(...items: Array<RenderObject>): void {\n for (let i = 0; i < items.length; i++) {\n const item = items[i];\n item.parent = this;\n this.children.push(item);\n }\n }\n\n insertChild(item: RenderObject, index: number): void {\n this.children.splice(index, 0, item);\n item.parent = this;\n }\n\n removeChild(child: RenderObject): void {\n const index = this.children.indexOf(child);\n if (index < 0) {\n throw new Error('为查找到当前元素');\n }\n if (child.parent === this) {\n //child.parent = null;\n }\n this.children.splice(index, 1);\n }\n\n removeChildByIndex(index: number): void {\n const child = this.children[index];\n if (child) {\n this.children.splice(index, 1);\n //child.parent = null;\n } else {\n throw new Error('为查找到当前元素');\n }\n }\n\n clear(): void {\n const items = [...this.children];\n for (let i = items.length - 1; i >= 0; i--) {\n this.removeChildByIndex(i);\n }\n }\n get length() {\n return this.children.length;\n }\n\n\n getChild<T extends RenderObject = RenderObject>(index: number): T {\n return this.children[index] as T;\n }\n\n getChildIndex(child: RenderObject): number {\n return this.children.indexOf(child);\n }\n\n\n\n destroy(): void {\n super.destroy();\n const len = this.length;\n for (let i = len - 1; i >= 0; i--) {\n const child = this.getChild(i);\n child.destroy();\n //this.removeChild(child);\n }\n this.children.length = 0;\n //this.chilren = null;\n }\n}\n\nexport interface IRenderData {\n render: RenderContextType,\n position: Position,\n docCtx: EditorContext,\n nextRender: () => void\n}\n/**\n * 块级渲染元素\n */\nexport abstract class BlockContentRenderObject<T extends Element = Element> extends BranchRenderObject<T> {\n setRenderWidth(maxWidth: number): void {\n this.rect.maxWidth = maxWidth;\n this.rect.width = maxWidth;\n }\n}\n\nexport abstract class InlineGroupRenderObject<T extends Element = Element> extends BranchRenderObject<T> {\n}\n\n/**\n * 包含块级渲染元素的容器元素,例如body、table-cell等\n */\nexport abstract class BlockContainerRenderObject<T extends Element = Element> extends BranchRenderObject<T> {\n setRenderWidth(maxWidth: number): void {\n this.rect.maxWidth = maxWidth;\n this.rect.width = maxWidth;\n }\n}\n\n/**\n * 多级 ‘BlockLineRectRenderObject’ 包裹元素,例如 p、table\n */\nexport abstract class MuiltBlockLineRenderObject<T extends Element = Element> extends BlockContentRenderObject<T> { }\n\n/**\n * 容器-子内容为多个行内块级元素,例如table-row\n */\nexport abstract class InlineBlockContainer extends MuiltBlockLineRenderObject { }\n\n/**\n * 服务于table-cell\n * 可被多级拆分的元素\n */\nexport abstract class InlineMuiltBlockLineRenderObject extends MuiltBlockLineRenderObject { }\n\n/**\n * 最小不可分割单位的块级行框,例如 p-line\n * 一行不可存在于两个页面中,块级行框不能分布在两个页面中\n */\nexport abstract class BlockLineRectRenderObject extends BlockContentRenderObject { }\n\n\nexport type BorderType = 'left' | 'right' | 'top' | 'bottom' | 'left-middle' | 'right-middle' | 'top-middle' | 'bottom-middle' | 'none' | 'left-top' | 'left-bottom' | 'right-top' | 'right-bottom';\nexport type CursorType = 'text' | 'row-resize' | 'col-resize' | 'none' | 'default' | 'move' | 'pointer' | 'w-resize' | 's-resize' | 'se-resize' | 'ne-resize';\nexport enum RenderObjectType {\n Branch = 0,\n Leaf = 1\n}\n\nexport interface IMeasureRenderStruct<T> {\n rect: Rect,\n render: T\n}\n","import moment from \"moment\";\nimport { Rect } from \"./element-define\";\nimport { BorderType } from \"./render-define\";\ninterface Position {\n x: number;\n y: number;\n}\n\nexport class CommonUtil {\n\n /**\n * 判断坐标是否在矩形框内\n * @param rect \n * @param position \n * @returns \n */\n static isInsideRectByPosition(rect: Omit<Rect, 'maxWidth'|'maxHeight'>, position: Position): boolean {\n return position.x >= rect.x\n &&\n position.x <= rect.x + rect.width\n &&\n position.y >= rect.y\n &&\n position.y <= rect.y + rect.height;\n }\n\n static isInsideRectByRect(rect: Rect, position: Rect): boolean {\n return position.x >= rect.x\n &&\n position.x <= rect.x + rect.width\n &&\n position.y >= rect.y\n &&\n position.y <= rect.y + rect.height\n &&\n position.y + position.height <= rect.y + rect.height\n &&\n position.x + position.width <= rect.x + rect.width;\n }\n\n /**\n * 判断坐标是否在矩形的边框上\n * @param rect \n * @param borderWidth \n * @param position \n */\n static isInRectBorder(rect: Rect, borderWidth: number, position: Position): { borderType: BorderType } {\n const leftBorderRect: Rect = { x: 0, y: 0, width: borderWidth, height: rect.height, maxWidth: 0, maxHeight: 0 };\n const rightBorderRect: Rect = { x: rect.width - borderWidth, y: 0, width: borderWidth, height: rect.height, maxWidth: 0, maxHeight: 0 };\n const topBorderRect: Rect = { x: 0, y: 0, width: rect.width, height: borderWidth, maxWidth: 0, maxHeight: 0 };\n const bottomBorderRect: Rect = { x: 0, y: rect.height - borderWidth, width: rect.width, height: borderWidth, maxWidth: 0, maxHeight: 0 };\n let borderType: BorderType = 'none';\n if (this.isInsideRectByPosition(leftBorderRect, position)) {\n borderType = 'left';\n } else if (this.isInsideRectByPosition(rightBorderRect, position)) {\n borderType = 'right';\n } else if (this.isInsideRectByPosition(topBorderRect, position)) {\n borderType = 'top';\n } else if (this.isInsideRectByPosition(bottomBorderRect, position)) {\n borderType = 'bottom';\n }\n return { borderType };\n }\n\n /**\n * 判断坐标是否在图片的缩放操作点上\n */\n static isInPictureResizePoint(rect: Rect, pos: Position, r: number): { borderType: BorderType } | null {\n const { width, height } = rect;\n const x = 0;\n const y = 0;\n const points: Array<{ x: number, y: number, type: BorderType }> = [{ x, y, type: 'left-top' }, { x: x + width, y, type: 'right-top' }, { x: x + (Math.floor(width / 2)), y: y, type: 'top-middle' }, { x, y: y + Math.floor(height / 2), type: 'left-middle' }, { x, y: y + height, type: 'left-bottom' }, { x: width, y: Math.floor(height / 2), type: 'right-middle' }, { x: x + width, y: y + height, type: 'right-bottom' }, { x: x + (Math.floor(width / 2)), y: y + height, type: 'bottom-middle' }];\n for (let i = 0; i < points.length; i++) {\n const point = points[i];\n const { x: px, y: py } = point;\n if (((px - pos.x) * (px - pos.x) + (py - pos.y) * (py - pos.y)) < r * r) {\n return { borderType: point.type };\n }\n }\n return null;\n }\n\n\n /**\n * 整形符合连线要求\n * @param points \n * @param width \n * @param strokeColor \n */\n static resharpPoints(points: Array<Position>): Array<Position> {\n let prevPoint: Position = points[0];\n const array: Array<Position> = [];\n array.push(prevPoint);\n for (let i = 1; i < points.length; i++) {\n const currPoint = points[i];\n //不在同一水平线\n if (currPoint.y !== prevPoint.y && currPoint.x !== prevPoint.x) {\n array.push({ x: currPoint.x, y: prevPoint.y });\n }\n array.push(currPoint);\n prevPoint = currPoint;\n }\n return array;\n }\n\n static getOffsetX(node: HTMLElement): number {\n if (!node.parentElement) {\n throw new Error('node.parentElement is null')\n }\n const parent = node.parentElement.getBoundingClientRect().left;\n const curr = node.getBoundingClientRect().left;\n return curr - parent;\n }\n\n static randomColor() {\n let str = \"#\";\n for (let i = 0; i < 6; i++) {\n str += Math.floor(Math.random() * 16).toString(16);\n }\n return str;\n }\n\n /**\n * 判断一个数值是否在另一个数值的增益区间中\n * @param val \n * @param offset \n * @param compareValue \n * @returns \n */\n static ApproxmateValueInRange(val: number, offset: number, compareValue: number): boolean {\n return (val - offset) <= compareValue && (val + offset) >= compareValue;\n }\n\n\n static getEmptyValue<T>(val: T, emptyVal: T): T {\n if (!val) {\n return emptyVal;\n }\n return val;\n }\n\n /**\n * 移除并集\n * @param array \n * @param deleteItems \n * @returns \n */\n static removeUnionSet<T>(array: Array<T>, deleteItems: Array<T>): Array<T> {\n const arraySet = new Set(array);\n for (let i = 0; i < deleteItems.length; i++) {\n const item = deleteItems[i];\n if (arraySet.has(item)) {\n arraySet.delete(item)\n }\n }\n return Array.from(arraySet);\n }\n\n static nullToString(val: any): string {\n if (val === null || val === undefined) {\n return '';\n }\n return val;\n }\n\n static formatDate(date: Date, format: string): string {\n return moment(date).format(format);\n }\n\n static formatNow(format: string): string {\n return this.formatDate(new Date(), format);\n }\n\n static parseText(text: string, data: object): string {\n const reg = /\\{(.*?)\\}/g;\n let result = text;\n let match;\n while (match = reg.exec(text)) {\n const key = match[1];\n const value = data[key];\n result = result.replace(match[0], value);\n }\n return result;\n }\n\n //获取和当前日期相差的秒数\n static getNowDiffSeconds(date: Date | string): number {\n date = typeof date === 'string' ? new Date(date) : date;\n const now = new Date();\n const diff = now.getTime() - date.getTime();\n return diff / 1000;\n }\n\n //验证当前字符串是否为日期格式\n static isDate(str: string): boolean {\n const reg = /^\\d{4}-\\d{2}-\\d{2}$/;\n return reg.test(str);\n }\n\n\n\n static cloneValue(val: any): any {\n if (typeof val === 'object' && val) {\n return JSON.parse(JSON.stringify(val));\n }\n return val;\n }\n\n\n static isConstructor(f:any):boolean {\n try {\n new f();\n } catch (err) {\n // verify err is the expected error and then\n return false;\n }\n return true;\n }\n\n}\n","import { CommonUtil } from \"./common-util\";\nimport { BranchElement, Element, LeafElement, ViewOptions } from \"./element-define\";\nimport { ElementUtil } from \"./element-util\";\n\n/**\n * 元素痕迹跟踪\n */\ntype DeltaType = 'insert' | 'delete' | 'format' | 'delText' | 'insText';\n\n/**\n * 插入元素\n */\nexport type InsertOpsDelta = {\n insert: Element\n}\n\n\n/**\n * 删除元素\n */\nexport type DeleteEleOpsDelta = {\n delete: Element;\n}\n/**\n * 文本输入\n */\nexport type InsertTextOpsDelta = {\n insText: {\n index: number;\n length: number;\n }\n content: string;\n}\n\n/**\n * 文本删除\n */\nexport type DeleteTextOpsDelta = {\n delText: {\n index: number;\n length: number;\n },\n content: string;\n}\n/**\n * 属性变更记录前后值\n */\nexport type diffPropType = {\n [PropName: string]: {\n oldValue: any,\n newValue: any\n }\n};\n/**\n * 设置属性\n */\nexport type FormatOpsDelta = {\n format: diffPropType;\n}\n\n\ntype opsTypes = InsertTextOpsDelta | InsertOpsDelta | DeleteTextOpsDelta | FormatOpsDelta | DeleteEleOpsDelta;\ntype opsModel<T = opsTypes> = { index: number, parentIndex: number; prevIndex: number, ele: Element, ops: T };\nexport type opsTrackModel<T = opsTypes> = Omit<opsModel<T>, 'ele'>;\nexport const docOpsMap: Map<Element, Array<opsModel>> = new Map();\nlet traceTrackingFlag: boolean = true;\n\nexport function setTraceTrackingFlag(flag: boolean): void {\n traceTrackingFlag = flag;\n}\n\n/**\n * 抑制变更的追踪修改\n * 在某些情况下不需要进行修改的跟踪,例如:在初始化加载文档时,为了提高效率,增加底层开关\n */\nexport function suppressTracking<T>(cb: () => T): T {\n const tmp = traceTrackingFlag;\n traceTrackingFlag = false;\n try {\n return cb();\n } catch (e) {\n throw e;\n } finally {\n traceTrackingFlag = tmp;\n }\n}\n\n\nfunction getDocCtx(ele: Element): { doc: Element, options: ViewOptions } | null {\n if (!traceTrackingFlag) {\n return null;\n }\n //当前元素的上级还没有添加到dom中,此时只需要处理上级即可\n const doc = ElementUtil.getParent(ele, (item) => item.type === 'doc') as any;\n if (!doc) {\n return null;\n }\n const options = doc['viewOptions'] as ViewOptions;\n if (!options || !options.enableTrackHistory) {\n return null;\n }\n return {\n doc,\n options: doc['viewOptions']\n };\n}\n\nexport function insertEle(ele: Element): void {\n if (ele.type === 'psym') {\n return;\n }\n const options = getDocCtx(ele);\n if (!options) {\n return;\n }\n // const serializeObj = getEleSerializeFunc(ele, options);\n // if (!serializeObj) {\n // return;\n // }\n appendToOps(options.doc, ele, {\n insert: ele.clone(true)\n })\n}\n\n\nexport function removeEle(ele: Element): void {\n if (ele.type === 'psym') {\n return;\n }\n const options = getDocCtx(ele);\n if (!options) {\n return;\n }\n appendToOps(options.doc, ele, {\n delete: ele.clone(true),\n })\n}\n\nfunction appendToOps(doc: Element, ele: Element, ops: opsTypes): void {\n let array = docOpsMap.get(doc);\n if (!array) {\n docOpsMap.set(doc, array = [])\n }\n const prevEle = ElementUtil.getPrevSiblingElement(ele);\n array.push({\n index: ElementUtil.getControlIndex(ele, true),\n parentIndex: ElementUtil.getControlIndex(ele.parent, true),\n prevIndex: prevEle ? ElementUtil.getControlIndex(prevEle, true) : -1,\n ele,\n ops\n })\n}\n\nexport function inputText(ele: Element, startIndex: number, input: string): void {\n const options = getDocCtx(ele);\n if (!options) {\n return;\n }\n if (!input) {\n return;\n }\n appendToOps(options.doc, ele, {\n insText: {\n index: startIndex,\n length: input.length\n },\n content: input\n })\n}\n\nexport function removeText(ele: Element, index: number, length: number, content: string): void {\n const options = getDocCtx(ele);\n if (!options) {\n return;\n }\n if (!length) {\n return;\n }\n appendToOps(options.doc, ele, {\n delText: {\n index,\n length\n },\n content\n })\n}\n\n/**\n * 记录元素格式化\n * @param ele |\n * @param props\n * @returns\n */\nexport function formatEle(ele: Element, props: object): void {\n const options = getDocCtx(ele);\n if (!options) {\n return;\n }\n const updateKeys = Object.keys(props);\n if (!updateKeys.length) {\n return;\n }\n appendToOps(options.doc, ele, {\n format: getExactDiffProps(ele.props, props)\n })\n}\n\n/**\n * 记录更新元素属性,通过代理获取\n * @param ele\n * @param p\n * @param oldValue\n * @param newValue\n */\nexport function logUpdateEleProps(ele: Element, p: string | symbol | number, oldValue: any, newValue: any): void {\n const options = getDocCtx(ele);\n if (!options) {\n return;\n }\n appendToOps(options.doc, ele, {\n format: {\n [p]: {\n oldValue,\n newValue\n }\n }\n })\n}\n\nfunction getExactDiffProps(oldProps: object, newProps: object): diffPropType {\n const obj: diffPropType = {};\n Object.keys(newProps).forEach(key => obj[key] = {\n oldValue: CommonUtil.cloneValue(oldProps[key]),\n newValue: CommonUtil.cloneValue(newProps[key])\n })\n return obj;\n}\n\n\nexport function generatePatch(doc: Element): Array<opsTrackModel> {\n const insertOpsMap: Map<Element, opsModel> = new Map();\n const formatOpsMap: Map<Element, opsModel<FormatOpsDelta>> = new Map();\n const patchs: Array<opsTrackModel> = [];\n const ops = docOpsMap.get(doc);\n if (!ops || !ops.length) {\n return [];\n }\n const delOpsMap = getDeleteEleOps(ops);\n for (let i = 0; i < ops.length; i++) {\n const op = ops[i]\n const ele = op.ele;\n //修改样式\n if ('format' in op.ops) {\n //修改插入或者删除的不做处理\n if (insertOpsMap.has(ele) || delOpsMap.has(ele)) {\n continue;\n }\n //合并操作属性\n let prevFormatOp: opsModel<FormatOpsDelta> | undefined;\n if ((prevFormatOp = formatOpsMap.get(ele))) {\n mergeDiffProps(prevFormatOp.ops.format, op.ops.format);\n continue;\n }\n formatOpsMap.set(ele, op as opsModel<FormatOpsDelta>)\n }\n patchs.push({ index: op.index, parentIndex: op.parentIndex, prevIndex: op.prevIndex, ops: op.ops });\n }\n //清空\n ops.length = 0;\n return patchs;\n}\n\n/**\n * 清除变更的数据\n */\nexport function clearTraces(doc: Element): void {\n docOpsMap.delete(doc);\n}\n\n/**\n * 获取删除元素的操作\n * 在生成修改的批操作时,需要先获取删除的元素,因为元素被删除后,所有的其他操作都不需要被记录了\n */\nfunction getDeleteEleOps(ops: Array<opsModel>): Map<Element, opsModel> {\n const delOpsMap: Map<Element, opsModel> = new Map();\n for (let i = 0; i < ops.length; i++) {\n const op = ops[i]\n const index = op.index;\n const ele = op.ele;\n //修改的元素后面被删除,那么该处理作废\n if ('delete' in op.ops) {\n delOpsMap.set(ele, op)\n }\n\n }\n return delOpsMap;\n}\n\nfunction removeArrayItem<T>(arr: Array<T>, item: T): void {\n const index = arr.indexOf(item);\n if (index >= 0) {\n arr.splice(index, 1);\n }\n}\n\n/**\n * 同一批次的修改,修改了同一属性,需要合并多个同一属性的多个修改\n * 举例:table的cols宽度修改\n * @param prevFormat\n * @param currFormat\n */\nfunction mergeDiffProps(prevFormat: diffPropType, currFormat: diffPropType): void {\n Object.keys(currFormat).forEach(key => {\n if (key in prevFormat) {\n prevFormat[key].newValue = currFormat[key].newValue;\n } else {\n prevFormat[key] = currFormat[key];\n }\n })\n}\n\n\n","//订阅者 Subscription\n//发布者(事件源) EventSource\n\ntype EventHandler<T = void> = (data: T) => void;\n\n/**\n * 订阅者\n */\nexport abstract class Subscription<T=any> {\n protected closed: boolean = false;\n\n abstract invoke(data: T): void;\n\n abstract unsubscribe(): void;\n}\n\nexport abstract class EventSourceCore<T> {\n protected closed: boolean = false;\n private subs: Array<Subscription> = [];\n\n next(data?: T): void {\n const subs=[...this.subs];\n subs.forEach((sub) => {\n sub.invoke(data);\n })\n }\n\n protected addSub(sub: Subscription): void {\n this.subs.push(sub);\n }\n\n protected removeSub(sub: Subscription): void {\n const index = this.subs.indexOf(sub);\n if (index >= 0) {\n this.subs.splice(index, 1);\n }\n }\n\n unsubscribe(): void {\n this.subs.length = 0;\n this.closed = true;\n }\n\n}\n\n/**\n * DOM事件处理\n */\nexport class DOMEventSource<T extends Event> extends EventSourceCore<T> {\n constructor(public dom: Node, public type: string) {\n super();\n const cb: EventListener = (e) => {\n this.next(e as T);\n };\n dom.addEventListener(type, cb);\n }\n\n subscribe(listener: (evt:T)=>void): Subscription {\n const sub = new DOMSubscription(listener, () => {\n this.removeSub(sub);\n });\n this.addSub(sub);\n return sub;\n }\n}\n\nexport class DOMSubscription<T> extends Subscription<T> {\n constructor(public listener: (evt:T)=>void, public cancel: () => void) {\n super();\n }\n\n invoke(data: any): void {\n if (this.closed) {\n return;\n }\n this.listener(data);\n }\n\n unsubscribe(): void {\n this.closed = true;\n this.cancel();\n }\n}\n\n\nexport class Subject<T> extends EventSourceCore<T>{\n subscribe(listener:(data:T)=>void):Subscription{\n const sub = new SubjectSubscription(listener, () => {\n this.removeSub(sub);\n });\n this.addSub(sub);\n return sub;\n }\n}\n\nexport class SubjectSubscription extends Subscription{\n constructor(public listener:(data:any)=>void, public cancel: () => void) {\n super();\n }\n\n invoke(data: any): void {\n if (this.closed) {\n return;\n }\n this.listener(data);\n }\n\n unsubscribe(): void {\n this.closed = true;\n this.cancel();\n }\n}\n\n\nexport function fromEvent<T extends Event>(dom:Node,type:string):DOMEventSource<T>{\n return new DOMEventSource<T>(dom,type);\n}","import {ElementEvent, EventMap, EventTypes} from \"./element-event-define\";\nimport {watchChanged} from \"./notify\";\nimport {RenderContextType} from \"./render-context\";\nimport {CursorType, LeafRenderObject, RenderObject} from \"./render-define\";\nimport * as History from './element-trace-tracking';\nimport {Subject, Subscription} from \"./event-subject\";\nimport {CommonUtil} from \"./common-util\";\n\nexport class Rect {\n x = 0;\n y = 0;\n width = 0;\n height = 0;\n maxHeight: number = 0;\n maxWidth: number = 0;\n}\n\nexport interface SerializeProps {\n type: string,\n props?: any,\n children?: Array<SerializeProps>;\n complete?: boolean;\n}\n\n/**\n * 刷新类型\n * 刷新外观,不需要进行测量,直接进入绘制\n * 刷新内容,需要重新测量,再绘制\n */\nexport type RefreshType = 'appearance' | 'content';\n\n/**\n * 修改标志\n */\nexport enum ModifyFlag {\n //被修改\n Modify = 0,\n //无修改\n None = 1,\n //子项被修改\n Track = 2\n}\n\nexport interface OnChangeEventProps {\n data: any\n}\n\nexport type ElementHandler<E extends ElementEvent = ElementEvent> = (e: E) => void;\n\ninterface RegisterTypeHandlerProps<T extends Element> {\n elementType: any,\n eventName: EventTypes,\n handler: ElementHandler,\n useCapture: boolean,\n ctx: ElementEvent['ctx']\n}\n\n/**\n * 类型事件处理\n */\nexport const elementTypeEventHandler: Array<RegisterTypeHandlerProps<Element>> = [];\n\nexport function invokeTypeHandler(ele: Element, eventName: EventTypes, e: ElementEvent, useCapture: boolean = false): void {\n const predicate = (ele: Element, th: RegisterTypeHandlerProps<Element>): boolean => {\n if (CommonUtil.isConstructor(th.elementType)) {\n return ele instanceof th.elementType;\n } else {\n return th.elementType(e);\n\n }\n };\n for (const th of elementTypeEventHandler) {\n if (predicate(ele, th) && th.eventName === eventName && th.useCapture === useCapture && th.ctx === e.ctx) {\n th.handler(e);\n }\n }\n}\n\n/**\n * 定义组件的数据,配置\n */\nexport abstract class Element<P extends object = any> {\n modifyFlag: ModifyFlag = ModifyFlag.Modify;\n isMouseenter!: boolean;\n private _eventMap: EventMap | null;\n private _refreshEvent: Subject<void> = new Subject();\n protected _onChangeEvent: Subject<void> = new Subject();\n private observers: WeakMap<Element, Array<Subscription>> = new WeakMap();\n paintRenders: Array<RenderObject> = [];\n measureRender!: RenderObject | null;\n focusable!: boolean;\n isFocused!: boolean;\n /**\n * 修饰元素不能复制、序列化、删除(需要手动删除)\n */\n isDecorate!: boolean;\n /**\n * 可点击性,例如:null-text 占位符元素不具备可点击能力\n * 2.编辑页眉页脚的能力\n */\n disableClick!: boolean;\n //是否被释放\n disposed!: boolean;\n //是否测量完毕\n loaded!: boolean;\n private _parent!: BranchElement | null;\n get parent(): BranchElement {\n return this._parent as BranchElement;\n }\n\n set parent(val: BranchElement) {\n this._parent = val;\n }\n\n private _props!: P;\n public get props(): P {\n return this._props;\n }\n\n public set props(value: P) {\n this.pubOnChange('self');\n this._props = watchChanged(value, (target, p, oldValue, newValue) => {\n this.notifyChanged(p, oldValue, newValue)\n })\n //this._props = value;\n }\n\n private notifyChanged(p: string | number | symbol, oldValue: any, newValue: any): void {\n History.logUpdateEleProps(this, p, oldValue, newValue);\n this.pubOnChange('self')\n }\n\n //元素是否禁止复制,例如批注元素\n //forbidCopy: boolean;\n constructor(public type: string) {\n this._eventMap = new EventMap();\n this.addEvent('ElementMouseEnter', (evt) => {\n this.isMouseenter = true\n });\n this.addEvent('ElementMouseLeave', (evt) => {\n this.isMouseenter = false\n });\n }\n\n abstract createRenderObject(options: ViewOptions, renderCtx: RenderContextType): RenderObject | null;\n\n abstract serialize(viewOptions: ViewOptions): SerializeProps | null;\n\n abstract clone(data: boolean): Element;\n\n abstract getChildLength(): number;\n\n abstract getSelfLength(pure: boolean): number;\n\n destroy(): void {\n this._eventMap?.clear(this);\n this.paintRenders.length = 0;\n this._parent = null;\n this.measureRender = null;\n this.unsubscribe(this);\n this.disposed = true;\n }\n\n addEvent<T extends ElementEvent>(event: EventTypes, handle: (evt: T) => void, useCapture = false): string {\n if (!this._eventMap) {\n throw new Error('eventMap is null')\n }\n return this._eventMap?.add(this, event, handle, useCapture);\n }\n\n removeEvent(eventId: string): void {\n if (!this._eventMap) {\n throw new Error('eventMap is null')\n }\n this._eventMap.remove(this, eventId);\n }\n\n removeEventByType(eventType: EventTypes): void {\n if (!this._eventMap) {\n throw new Error('eventMap is null')\n }\n this._eventMap.removeByType(this, eventType);\n }\n\n invokeEvent(event: EventTypes, evt: ElementEvent, userCapture = false): void {\n if (!this._eventMap) {\n throw new Error('eventMap is null')\n }\n //触发类型事件\n invokeTypeHandler(this, event, evt, userCapture);\n const listeners = this._eventMap.get(this, event, userCapture);\n listeners.forEach(item => item(evt));\n }\n\n beginMeasure(): void {\n this.paintRenders.length = 0;\n }\n\n endMeasure(): void {\n }\n\n\n getIndex(): number {\n if (this.parent) {\n return this.parent.getChildIndex(this);\n } else {\n return 0;\n }\n }\n\n get refreshSubject(): Subject<void> {\n return this._refreshEvent;\n }\n\n get onChangeSubject(): Subject<void> {\n return this._onChangeEvent;\n }\n\n refreshView(): void {\n this._refreshEvent.next();\n }\n\n abstract pubOnChange(selfChange: pubChangeType): void\n\n unsubscribe(element: Element): void {\n const subs = this.observers.get(element);\n if (subs) {\n subs.forEach(sub => {\n sub.unsubscribe()\n });\n this.observers.delete(element);\n }\n }\n\n addsubscribe(element: Element, ...sub: Array<Subscription>): void {\n let subs = this.observers.get(element);\n if (!subs) {\n subs = [];\n this.observers.set(element, subs);\n }\n subs.push(...sub);\n }\n\n /**\n * 移除当前节点\n */\n remove(): void {\n if (this.parent) {\n this.parent.removeChild(this);\n }\n }\n}\n\n\n/**\n * 最小节点元素\n */\nexport abstract class LeafElement<P extends object = any> extends Element<P> {\n cursorType: CursorType = 'text';\n\n getChildLength(): number {\n return 1;\n }\n\n destroy(): void {\n super.destroy();\n }\n\n getSelfLength(pure: boolean): number {\n return 1;\n }\n\n pubOnChange(selfChange: pubChangeType): void {\n if (this.modifyFlag === ModifyFlag.None) {\n this.refreshView();\n }\n if (this.modifyFlag === ModifyFlag.Track && selfChange === 'tracker') {\n return;\n }\n if (this.modifyFlag === ModifyFlag.Modify) {\n return;\n }\n if (selfChange === 'tracker') {\n if (this.modifyFlag === ModifyFlag.None) {\n this.modifyFlag = ModifyFlag.Track;\n }\n } else {\n this.modifyFlag = ModifyFlag.Modify;\n }\n this._onChangeEvent.next();\n }\n}\n\n\n/**\n * 枝干节点,包含若干个枝干或者叶子节点\n */\nexport abstract class BranchElement<P extends object = any> extends Element<P> {\n private chilren: Array<Element> = [];\n\n constructor(type: string) {\n super(type);\n }\n\n addChild(child: Element, index = -1): void {\n if (this.disposed === true) {\n console.error('当前元素已被释放,不能再添加子元素', this)\n throw new Error('当前元素已被释放,不能再添加子元素');\n }\n if (index === -1) {\n index = this.length;\n }\n child.parent = this;\n this.chilren.splice(index, 0, child);\n History.insertEle(child);\n const refSub = child.refreshSubject.subscribe((data) => {\n this.refreshSubject.next(data);\n });\n const onChangeSub = child.onChangeSubject.subscribe((data) => {\n this.pubOnChange('tracker');\n });\n this.addsubscribe(child, refSub, onChangeSub);\n this.pubOnChange('self');\n }\n\n removeChild(child: Element): void {\n const index = this.chilren.indexOf(child);\n if (index < 0) {\n throw new Error('为查找到当前元素');\n }\n History.removeEle(child);\n this.disposeChild(child);\n this.chilren.splice(index, 1);\n }\n\n removeChildByIndex(index: number): void {\n const child = this.chilren[index];\n if (child) {\n this.chilren.splice(index, 1);\n this.disposeChild(child);\n } else {\n throw new Error('为查找到当前元素');\n }\n }\n\n disposeChild(child: Element): void {\n this.unsubscribe(child);\n if (child.parent === this) {\n (<any>child).parent = null;\n }\n this.pubOnChange('self');\n }\n\n clearItems(): void {\n const items = [...this.chilren];\n for (let i = items.length - 1; i >= 0; i--) {\n this.removeChildByIndex(i);\n }\n }\n\n destroy(): void {\n super.destroy();\n const items = [...this.chilren];\n for (let i = items.length - 1; i >= 0; i--) {\n const child = items[i];\n child.destroy();\n this.removeChild(child);\n }\n }\n\n get length() {\n return this.chilren.length;\n }\n\n find(predicate: (item: Element, index: number) => boolean): Element | undefined {\n return this.chilren.find(predicate);\n }\n\n getChild<T extends Element = Element>(index: number): T {\n return this.chilren[index] as T;\n }\n\n getChildIndex(child: Element): number {\n return this.chilren.indexOf(child);\n }\n\n getChildLength(): number {\n //return this.chilren.reduce((prev, curr) => prev + 1 + curr.getChildLength(), 0);\n return this.chilren.reduce((prev, curr) => {\n if (curr instanceof BranchElement) {\n return prev + 1 + curr.getChildLength();\n } else if (curr instanceof LeafElement) {\n return prev + curr.getChildLength();\n } else {\n return 0\n }\n }, 0)\n }\n\n getSelfLength(pure: boolean): number {\n return 1 + this.chilren.reduce((prev, curr) => {\n return prev + curr.getSelfLength(pure);\n }, 0);\n }\n\n\n treeFilter(predicate: (item: Element, index: number) => boolean): Array<Element> {\n const items: Array<Element> = [];\n for (let i = 0; i < this.length; i++) {\n const item = this.getChild(i);\n if (predicate(item, i)) {\n items.push(item);\n }\n if (item instanceof BranchElement) {\n items.push(...item.treeFilter(predicate));\n }\n }\n return items;\n }\n\n treeFind(predicate: (item: Element, index: number) => boolean): Element | null {\n for (let i = 0; i < this.length; i++) {\n const item = this.getChild(i);\n if (predicate(item, i)) {\n return item;\n }\n if (item instanceof BranchElement) {\n const math = item.treeFind(predicate);\n if (math) {\n return math;\n }\n }\n }\n return null;\n }\n\n pubOnChange(selfChange: pubChangeType): void {\n if (this.modifyFlag === ModifyFlag.Track && selfChange === 'tracker') {\n return;\n }\n if (this.modifyFlag === ModifyFlag.Modify) {\n return;\n }\n if (selfChange === 'tracker') {\n if (this.modifyFlag === ModifyFlag.None) {\n this.modifyFlag = ModifyFlag.Track;\n }\n } else {\n this.modifyFlag = ModifyFlag.Modify;\n for (let i = 0; i < this.length; i++) {\n this.getChild(i).pubOnChange('to-child')\n }\n }\n this._onChangeEvent.next();\n }\n}\n\nexport type pubChangeType = 'self' | 'tracker' | 'to-child';\n\n/**\n * 行内编组元素\n */\nexport abstract class InlineGroupElement<P extends object = any> extends BranchElement<P> {\n}\n\n/**\n * 块级元素,目前只有P元素\n */\nexport abstract class BlockContentElement<P extends object = any> extends BranchElement<P> {\n}\n\n/**\n * 包含块级渲染元素的容器元素,例如body、table-cell、table等\n */\nexport abstract class BlockContainerElement<P extends object = any> extends BranchElement<P> {\n noFillEmpty!: boolean;\n}\n\nexport interface readElementProps<T> {\n type: string;\n props: T | undefined;\n children: any | undefined\n}\n\nexport abstract class ElementFactory<T = null> {\n options!: ViewOptions;\n\n abstract match(type: string): boolean;\n\n abstract createElement(data: readElementProps<T>, renderCtx: RenderContextType): Element;\n\n readCompleted(ele: Element, children: Array<Element>): void {\n if (ele instanceof BranchElement) {\n children.forEach((item => ele.addChild(item)));\n }\n }\n}\n\nexport interface SelectionContentRange {\n target: Element\n isFullSelected: boolean,\n startOffset: number,\n endOffset: number,\n selectedChildren: Array<SelectionContentRange>,\n}\n\n/**\n * 编辑模式\n */\nexport enum EditMode {\n /**\n * 自由模式,设计模板时使用\n */\n Free = 0,\n /**\n * 严格模式,医生书写模式时使用,只可更改数据元值\n */\n Strict = 1,\n /**\n * 查看模式,任何修改文档的操作都不允许,但是可选中,有拖蓝\n */\n View = 2,\n /**\n * 禁用模式,当前区域不可点击,不可选中,页脚、页眉编辑时的控制\n */\n Disabled = 3\n}\n\n/**\n * 文档模式\n */\nexport enum DocMode {\n Design = 0,\n /**\n * 完全编辑模式\n */\n Edit = 1,\n /**\n * 表单编辑模式\n */\n FormEdit = 2,\n /**\n * 视图模式,只能查看\n */\n View = 3\n}\n\nexport enum BooleanEnum {\n Null,\n True,\n False\n}\n\nexport interface DocUser {\n id: string,\n name: string\n}\n\nexport class PageOptions {\n private _width: number = 0;\n private _height: number = 0;\n orient: OrientType = 'portrait';\n\n constructor(width: number, height: number, orient: OrientType = 'portrait') {\n this._width = width;\n this._height = height;\n this.orient = orient;\n }\n\n get width(): number {\n if (this.orient === 'landscape') {\n return this._height;\n } else {\n return this._width;\n }\n }\n\n set width(value: number) {\n this._width = value;\n }\n\n get height(): number {\n if (this.orient === 'landscape') {\n return this._width;\n } else {\n return this._height;\n }\n\n }\n\n set height(value: number) {\n this._height = value;\n }\n}\n\nexport type OrientType = 'landscape' | 'portrait';\nexport type PageLayoutMode = 'singlePage' | 'multiPage' | 'fit-page';\n\nexport class ViewOptions {\n copyRightInfo!: string;\n watermark?: string;\n drawLineRectColor = \"rgb(0,0,0)\";\n drawCharRectColor = \"rgb(0,0,0)\";\n drawSymbolsColor = 'rgb(128,128,128)';\n defaultFontName = '宋体';\n defaultFontSize = 14;\n defaultColor = \"rgb(0,0,0)\";\n selectionOverlaysColor = 'rgb(131,175,155,0.5)';\n dataEleOverlaysColor = 'rgb(131,175,155,0.5)';\n dataEleReadOnlyOverlayColor = '#d9d9d9';\n dataEleOutlineColor = 'rgb(131,175,155,0.7)';\n viewBackcolor = 'rgb(230,230,230)';\n paraSymbolColor = 'rgb(128,128,128)';\n dataGroupColor = 'rgb(0,80,179)';\n //新增-留痕块文本颜色\n trackInsColor = '#ff4d4f';\n //删除-留痕块文本颜色\n trackDelColor = '#000';\n showLineRect!: boolean;\n showCharRect!: boolean;\n showParaMark!: boolean;\n showTabChar!: boolean;\n showSpaceChar!: boolean;\n showLineBreak!: boolean;\n bodyMarginTop = 8;\n devMode: boolean = false;\n showDebug!: boolean;\n resourceMode: 'lazy' | 'immediate' = 'immediate';\n secretBrowse: boolean = false;\n //中文版式,处理中文换行;前置标点和后置标点\n chineseLayout: boolean = true;\n //记录变更\n enableTrackHistory: boolean = false;\n //记录变更的次数\n trackHistoryMaxLength: number = 500;\n //整页模式,不分页\n private _fullPageView: boolean = false;\n get fullPageView(): boolean {\n return this._fullPageView;\n }\n\n set fullPageView(value: boolean) {\n if (this.fullPageView === value) {\n return;\n }\n this._fullPageView = value;\n this.onChange.next('force');\n }\n\n //毫米和像素的转换比\n mmToPixelsRatio: number = 0;\n cursor: CursorType = 'text';\n //当前文档偏移量,取决于滚动条位置\n translateY = 0;\n //文档大小\n docPageSettings: PageOptions = new PageOptions(0, 0);\n //视图大小,canvas\n viewSettings!: {\n width: number;\n height: number;\n };\n pageNumFormat: string = '第{index}页/共{count}页';\n pageNumOffset: number = 0;\n //页排版模式:单页模式、多页模式、适应页宽模式\n pageLayoutMode: PageLayoutMode = 'singlePage';\n\n //内容区宽度,受审阅窗口宽度影响\n get contentWidth(): number {\n if (this.showReviewWindow) {\n return this.docPageSettings.width + this.reviewWindowWidth;\n }\n return this.docPageSettings.width;\n }\n\n /**\n * 内容区域的高度\n * 同时限定canvas的最小宽度\n */\n get ContentWidth(): number {\n let width = this.docPageSettings.width;\n if (this.showReviewWindow) {\n width = width + this.reviewWindowWidth;\n }\n return width;\n }\n\n //两个页的间距\n docSpace: number = 0;\n //是否显示审阅窗口\n private _showReviewWindow: boolean = false;\n public get showReviewWindow(): boolean {\n return this._showReviewWindow;\n }\n\n public set showReviewWindow(value: boolean) {\n if (value === this._showReviewWindow) {\n return;\n }\n this._showReviewWindow = value;\n this.onChange.next();\n }\n\n //审阅窗口宽度\n reviewWindowWidth: number = 200;\n //缩放\n private _scale: number = 1;\n get scale(): number {\n return this._scale;\n }\n\n set scale(val: number) {\n this._scale = val;\n }\n\n docMode: DocMode = DocMode.Design;\n //是否显示审阅痕迹\n private _showTrackChanges: boolean = true;\n public get showTrackChanges(): boolean {\n return this._showTrackChanges;\n }\n\n public set showTrackChanges(value: boolean) {\n if (this._showTrackChanges === value) {\n return;\n }\n this._showTrackChanges = value;\n this.onChange.next('force');\n }\n\n //医嘱打印模式,文字行模式,将表格多行对象转换为多个表格行对象\n textRowLineMode: boolean = false;\n editUser: DocUser = {id: '', name: ''};\n //留痕区域的生效时间段,同一用户的留痕块在此时间外需要生成新的留痕块\n trackChangePeriod: number = 10;\n onChange: Subject<'demand' | 'force'> = new Subject();\n //打印模式,普通模式,续打模式\n printMode: 'normal' | 'continuation' = 'normal';\n constructor() {\n }\n}\n\n\nexport class MarginProps {\n\n constructor(public top: number = 0, public bottom: number = 0, public left: number = 0, public right: number = 0) {\n }\n\n clone(): MarginProps {\n const cloneMargin = new MarginProps(this.top, this.bottom, this.left, this.right);\n return cloneMargin;\n }\n}\n\nexport class PaddingProps extends MarginProps {\n}\n\nexport class BorderProps {\n constructor(public width: number = 0, public color: string = 'transparent', public style: string = 'solid') {\n }\n\n clone(): BorderProps {\n return new BorderProps(this.width, this.color, this.style);\n }\n}\n\nexport abstract class IDispose {\n abstract destroy(): void;\n}\n\n\nexport type TextAlign = 'center' | 'left' | 'right' | 'justify';\n\nexport interface Position {\n x: number;\n y: number;\n}\n\n\nexport abstract class ResizeLeafRenderObject extends LeafRenderObject {\n}\n\n\nexport type NullableType<T> = {\n [PropName in keyof T]?: T[PropName]\n};\n\n\nexport type RequiredType<T> = {\n [PropName in keyof T]: T[PropName]\n};\n\nexport type ImgLoadStatus = 'no' | 'loading' | 'completed' | 'error';\n\nexport interface ICancelTokenFn {\n cancel?: () => void;\n onFinish?: () => void;\n}\n\n\ntype IVoidFn = () => void;\n\nexport function onceTask(fn: IVoidFn): IVoidFn {\n let state = false;\n return () => {\n if (state) {\n return;\n }\n state = true;\n fn();\n };\n}","import {NullableType, OrientType, PaddingProps, TextAlign, ViewOptions} from \"./element-define\";\nimport {ElementUtil} from \"./element-util\";\nimport {TrackRunTypeEnum} from \"./impl/text/track-run-impl\";\nimport {CommonUtil} from \"./common-util\";\n\nexport type TextVertAlign = 'superscript' | 'subscript';\n\nexport abstract class INotifyPropertyChanged {\n // onPropertyChangedSubject: Subject<string> = new Subject();\n // propertyChanged(properyName: string): void {\n // this.onPropertyChangedSubject.next(properyName);\n // }\n abstract getSerializeProps(viewOptions: ViewOptions): any;\n\n private __attachedProperty!: Record<string, any>;\n\n setProperty<T>(propertyName: string, value: T): void {\n if (!this.__attachedProperty) {\n this.__attachedProperty = {};\n }\n this.__attachedProperty[propertyName] = value;\n }\n\n removeProperty(propertyName: string): void {\n if (!this.__attachedProperty) {\n return;\n }\n delete this.__attachedProperty[propertyName];\n }\n\n getProperty<T>(propertyName: string): T | null {\n if (!this.__attachedProperty) {\n return null;\n }\n return this.__attachedProperty[propertyName] as T;\n }\n\n cloneAttachedProperty(dest: INotifyPropertyChanged): void {\n if (!this.__attachedProperty) {\n return;\n }\n Object.keys(this.__attachedProperty).forEach(key => {\n dest.setProperty(key, CommonUtil.cloneValue(this.__attachedProperty[key]));\n });\n }\n}\n\nexport class TextProps extends INotifyPropertyChanged {\n constructor() {\n super();\n }\n\n color!: string;\n fontName!: string;\n fontSize!: number;\n fontWeight: 'normal' | 'bold' = 'normal';\n fontStyle: 'normal' | 'italic' = 'normal';\n //textDecoration: 'none' | 'underline' | 'overline' | 'line-through' = 'none';\n underline: boolean = false;\n overline: boolean = false;\n linethrough: boolean = false;\n background!: string;\n letterSpace!: number;\n\n /**\n * 上标或者下标\n */\n vertAlign!: TextVertAlign;\n\n /**\n * 字符边框\n */\n border!: boolean;\n\n clearCache(): void {\n this.__cacheFont = null;\n }\n\n clone(source: TextProps | null): TextProps {\n const clone = source ?? new TextProps();\n super.cloneAttachedProperty(clone);\n this.setPropsValue(this, clone);\n return clone;\n }\n\n setPropsValue(source: TextProps, target: TextProps): void {\n target.color = source.color;\n target.fontName = source.fontName;\n target.fontSize = source.fontSize;\n target.fontWeight = source.fontWeight;\n target.fontStyle = source.fontStyle;\n target.underline = source.underline;\n target.overline = source.overline;\n target.linethrough = source.linethrough;\n target.background = source.background;\n target.letterSpace = source.letterSpace;\n target.vertAlign = source.vertAlign;\n target.border = source.border;\n }\n\n getSerializeProps(viewOptions: ViewOptions): any {\n const props: NullableType<TextProps> = {};\n if (this.color && this.color !== viewOptions.defaultColor) {\n props[\"color\"] = this.color;\n }\n if (this.fontName && this.fontName !== viewOptions.defaultFontName) {\n props[\"fontName\"] = this.fontName;\n }\n if (this.fontSize !== viewOptions.defaultFontSize) {\n props[\"fontSize\"] = this.fontSize;\n }\n if (this.fontWeight && this.fontWeight !== \"normal\") {\n props[\"fontWeight\"] = this.fontWeight;\n }\n if (this.underline) {\n props[\"underline\"] = this.underline;\n }\n if (this.overline) {\n props[\"overline\"] = this.overline;\n }\n if (this.linethrough) {\n props[\"linethrough\"] = this.linethrough;\n }\n if (this.background) {\n props[\"background\"] = this.background;\n }\n if (this.letterSpace) {\n props[\"letterSpace\"] = this.letterSpace;\n }\n if (this.fontStyle && this.fontStyle !== 'normal') {\n props[\"fontStyle\"] = this.fontStyle;\n }\n if (this.vertAlign) {\n props[\"vertAlign\"] = this.vertAlign;\n }\n if (this.border) {\n props[\"border\"] = this.border;\n }\n return props;\n }\n\n private __cacheFont!: string | null;\n\n getFont(): string {\n if (this.__cacheFont) {\n return this.__cacheFont;\n } else {\n let fontStr = '';\n if (this.fontStyle && this.fontStyle !== 'normal') {\n fontStr += this.fontStyle + ' ';\n }\n if (this.fontWeight && this.fontWeight !== 'normal') {\n fontStr += this.fontWeight + ' ';\n }\n //当前存在上标或者下标,大小为3/5\n fontStr += (this.vertAlign ? this.fontSize * 3 / 5 : this.fontSize) + 'px ';\n fontStr += fontMapFunc.getFontMap(this.fontName);\n this.__cacheFont = fontStr;\n return this.__cacheFont;\n }\n }\n\n equals(props: TextProps): boolean {\n return this.background === props.background\n && this.color === props.color\n && this.fontName === props.fontName\n && this.fontSize === props.fontSize\n && this.fontWeight === props.fontWeight\n && this.letterSpace === props.letterSpace\n && this.underline === props.underline\n && this.overline === props.overline\n && this.linethrough === props.linethrough\n && this.fontStyle === props.fontStyle\n && this.vertAlign === props.vertAlign\n && this.border === props.border;\n }\n}\n\nexport class ParagraphProps extends INotifyPropertyChanged {\n //段落默认的文本属性\n //textProps!: TextProps;\n indent = 0;\n hanging = 0;\n lineHeight = 1.3;\n textAlign: TextAlign = 'left';\n numberType = -1;\n pageBreak = false;\n\n clone(dest: ParagraphProps | null = null): ParagraphProps {\n const clone = dest ?? new ParagraphProps();\n super.cloneAttachedProperty(clone);\n clone.indent = this.indent;\n clone.numberType = this.numberType;\n clone.lineHeight = this.lineHeight;\n clone.textAlign = this.textAlign;\n //clone.textProps = this.textProps.clone(new TextProps());\n //强制换页属性不可复制\n //clone.pageBreak=this.pageBreak;\n return clone;\n }\n\n getSerializeProps(viewOptions: ViewOptions): any {\n const props: NullableType<ParagraphProps> = {};\n if (this.indent) {\n props[\"indent\"] = this.indent;\n }\n if (this.hanging) {\n props[\"hanging\"] = this.hanging;\n }\n if (this.lineHeight && this.lineHeight !== 1.3) {\n props[\"lineHeight\"] = this.lineHeight;\n }\n if (this.textAlign && this.textAlign !== \"left\") {\n props[\"textAlign\"] = this.textAlign;\n }\n if (this.numberType !== -1) {\n props[\"numberType\"] = this.numberType;\n }\n if (this.pageBreak) {\n props[\"pageBreak\"] = this.pageBreak;\n }\n return props;\n }\n}\n\nexport class DocumentProps extends INotifyPropertyChanged {\n width!: number;\n height!: number;\n padding!: PaddingProps;\n headerLine = 12;\n footerLine = 12;\n orient: OrientType = 'portrait'\n createUserId!: string;\n createUserName!: string;\n createDate!: string;\n scripts!: string;\n\n clone(dest: DocumentProps): DocumentProps {\n const clone = dest ?? new DocumentProps();\n super.cloneAttachedProperty(clone);\n clone.width = this.width;\n clone.height = this.height;\n clone.padding = this.padding.clone();\n clone.headerLine = this.headerLine;\n clone.footerLine = this.footerLine;\n clone.scripts = this.scripts;\n clone.createUserId = this.createUserId;\n clone.createUserName = this.createUserName;\n clone.createDate = this.createDate;\n clone.orient = this.orient;\n return clone;\n }\n\n getSerializeProps(): any {\n const props: NullableType<DocumentProps> = {\n width: this.width,\n height: this.height,\n padding: this.padding,\n headerLine: this.headerLine,\n footerLine: this.footerLine,\n createDate: this.createDate,\n createUserName: this.createUserName,\n createUserId: this.createUserId\n };\n if (this.scripts) {\n props['scripts'] = this.scripts;\n }\n if (this.orient && this.orient !== 'portrait') {\n props['orient'] = this.orient;\n }\n return props;\n }\n}\n\nexport class CheckBoxProps extends INotifyPropertyChanged {\n size!: number;\n isChecked!: boolean;\n //用于复选框分组\n groupName!: string | null;\n\n clone(dest: CheckBoxProps) {\n const clone = dest ?? new CheckBoxProps();\n super.cloneAttachedProperty(clone);\n clone.size = this.size;\n clone.isChecked = this.isChecked;\n clone.groupName = this.groupName;\n return clone;\n }\n\n getSerializeProps(viewOptions: ViewOptions) {\n return {\n size: this.size,\n isChecked: this.isChecked,\n groupName: this.groupName,\n }\n }\n}\n\nexport class RadioBoxProps extends INotifyPropertyChanged {\n\n size!: number;\n isChecked!: boolean;\n\n clone(dest: RadioBoxProps) {\n const clone = dest ?? new RadioBoxProps();\n super.cloneAttachedProperty(clone);\n clone.size = this.size;\n clone.isChecked = this.isChecked;\n return clone;\n }\n\n getSerializeProps(viewOptions: ViewOptions) {\n return {\n size: this.size,\n isCheced: this.isChecked\n };\n }\n}\n\nexport class TableRowProps extends INotifyPropertyChanged {\n minHeight!: number;\n headerRow!: boolean;\n\n clone(dest: TableRowProps) {\n const clone = dest ?? new TableRowProps();\n super.cloneAttachedProperty(clone);\n clone.minHeight = this.minHeight;\n clone.headerRow = this.headerRow;\n return clone;\n }\n\n getSerializeProps(viewOptions: ViewOptions): any {\n const props: NullableType<TableRowProps> = {};\n if (this.minHeight > 0) {\n props[\"minHeight\"] = this.minHeight;\n props[\"headerRow\"] = this.headerRow;\n }\n if (this.headerRow) {\n props['headerRow'] = this.headerRow;\n }\n return props;\n }\n}\n\nexport type TableAlignment = 'start' | 'end' | 'center';\n\nexport class TableProps extends INotifyPropertyChanged {\n id!: string;\n //auto 或者具体的值\n width!: number | string;\n cols!: Array<number | string>;\n alignment!: TableAlignment;\n border: 'all' | 'none' = 'all';\n allowBreakRow!: boolean;\n\n clone(dest: TableProps): TableProps {\n const clone = dest ?? new TableProps();\n super.cloneAttachedProperty(clone);\n clone.id = this.id;\n clone.width = this.width;\n clone.cols = [...this.cols];\n clone.alignment = this.alignment;\n clone.border = this.border;\n return clone;\n }\n\n getSerializeProps(viewOptions: ViewOptions) {\n return {\n id: this.id,\n width: this.width,\n cols: this.cols,\n alignment: this.alignment,\n border: this.border\n };\n }\n}\n\nexport type CellMergeType = 'col-merge' | 'row-merge';\nexport type VMergeType = 'restart' | 'continue';\nexport type HMergeType = 'restart' | 'continue';\nexport type VerticalAlign = 'top' | 'middle' | 'bottom';\n\nexport class TableCellProps extends INotifyPropertyChanged {\n\n vMerge!: VMergeType | null;\n hMerge!: HMergeType | null;\n vAlign!: VerticalAlign | null;\n backgroundColor!: string | null;\n\n /**\n * 对角线\n */\n diagonal!: 'main' | 'sub' | null;\n\n clone(dest: TableCellProps): TableCellProps {\n const clone = dest ?? new TableCellProps();\n super.cloneAttachedProperty(clone);\n clone.vMerge = this.vMerge;\n clone.hMerge = this.hMerge;\n clone.vAlign = this.vAlign;\n clone.backgroundColor = this.backgroundColor;\n clone.diagonal = this.diagonal;\n return clone;\n }\n\n getSerializeProps(options: ViewOptions): any {\n const props: NullableType<TableCellProps> = {};\n if (this.vMerge) {\n props['vMerge'] = this.vMerge;\n }\n if (this.hMerge) {\n props['hMerge'] = this.hMerge;\n }\n if (this.vAlign && this.vAlign !== 'top') {\n props['vAlign'] = this.vAlign;\n }\n if (this.backgroundColor) {\n props['backgroundColor'] = this.backgroundColor;\n }\n if (this.diagonal) {\n props['diagonal'] = this.diagonal;\n }\n return props;\n }\n}\n\nexport class PictureProps extends INotifyPropertyChanged {\n title!: string;\n width!: number;\n height!: number;\n src!: string;\n border!: 'all' | 'none';\n\n clone(dest: PictureProps): PictureProps {\n const clone = dest ?? new PictureProps();\n super.cloneAttachedProperty(clone);\n clone.width = this.width;\n clone.height = this.height;\n clone.src = this.src;\n clone.border = this.border;\n clone.title = this.title;\n return clone;\n }\n\n getSerializeProps(viewOptions: ViewOptions) {\n const props: NullableType<PictureProps> = {\n width: this.width,\n height: this.height,\n src: this.src,\n border: this.border,\n };\n if (this.title) {\n props['title'] = this.title;\n }\n return props;\n }\n}\n\nexport class DataDecorateProps extends INotifyPropertyChanged {\n content!: string;\n size!: number;\n\n clone(dest: DataDecorateProps): DataDecorateProps {\n const clone = dest ?? new DataDecorateProps();\n super.cloneAttachedProperty(clone);\n clone.content = this.content;\n clone.size = this.size;\n return clone;\n }\n\n getSerializeProps(viewOptions: ViewOptions) {\n return {\n size: this.size,\n content: this.content\n };\n }\n}\n\nexport type DataEleTypes = 'text' | 'droplist' | 'date' | 'check' | 'img';\n\n\nexport class DataEleBaseProps extends INotifyPropertyChanged {\n id!: string;\n name!: string;\n fieldName!: string;\n caption!: string;\n required!: boolean;\n printable!: boolean;\n secretBrowse!: boolean;\n editable!: boolean;\n deleteable!: boolean;\n minLength!: number;\n type!: DataEleTypes;\n underline!: boolean;\n\n cloneBaseProps(destProps: DataEleBaseProps): void {\n super.cloneAttachedProperty(destProps);\n this.setPropValue(this, destProps);\n }\n\n private setPropValue(source: DataEleBaseProps, target: DataEleBaseProps): void {\n target.id = source.id;\n target.name = source.name;\n target.caption = source.caption;\n target.fieldName = source.fieldName;\n target.required = source.required;\n target.editable = source.editable;\n target.deleteable = source.deleteable;\n target.secretBrowse = source.secretBrowse;\n target.printable = source.printable;\n target.minLength = source.minLength;\n target.type = source.type;\n target.underline = source.underline;\n }\n\n updateProps(props: DataEleBaseProps): void {\n this.setPropValue(props, this);\n }\n\n getBaseProps(props: NullableType<DataEleBaseProps>, options: ViewOptions): NullableType<DataEleBaseProps> {\n props[\"id\"] = this.id;\n props[\"name\"] = this.name;\n props[\"fieldName\"] = this.fieldName;\n props[\"type\"] = this.type;\n if (this.caption) {\n props[\"caption\"] = this.caption;\n }\n if (this.required) {\n props[\"required\"] = this.required;\n }\n if (this.printable) {\n props[\"printable\"] = this.printable;\n }\n if (this.secretBrowse) {\n props[\"secretBrowse\"] = this.secretBrowse;\n }\n if (!this.editable) {\n props['editable'] = this.editable;\n }\n if (this.deleteable) {\n props[\"deleteable\"] = this.deleteable;\n }\n if (this.minLength) {\n props[\"minLength\"] = this.minLength;\n }\n if (this.underline) {\n props[\"underline\"] = this.underline;\n }\n return props;\n }\n\n getSerializeProps(viewOptions: ViewOptions) {\n throw new Error('未实现')\n }\n}\n\nexport class DataEleBaseTextProps extends DataEleBaseProps {\n constructor() {\n super();\n super.type = 'text';\n }\n\n valueTextProps!: TextProps;\n nullText!: string;\n nullTextProps!: TextProps;\n dataType: 'text' | 'int' | 'float' | 'email' | 'date' | 'phone' | 'zipcode' = 'text';\n\n clone(dest: DataEleBaseTextProps | null = null): DataEleBaseTextProps {\n const clone = dest ?? new DataEleBaseTextProps();\n super.cloneBaseProps(clone);\n clone.valueTextProps = this.valueTextProps.clone(null);\n clone.nullText = this.nullText;\n clone.nullTextProps = this.nullTextProps.clone(null);\n return clone;\n }\n\n getSerializeProps(options: ViewOptions): any {\n const props: NullableType<DataEleBaseTextProps> = {\n type: this.type,\n valueTextProps: this.valueTextProps.getSerializeProps(options),\n nullText: this.nullText,\n nullTextProps: this.nullTextProps.getSerializeProps(options)\n };\n if (this.dataType && this.dataType !== 'text') {\n props['dataType'] = this.dataType;\n }\n this.getBaseProps(props, options);\n return props;\n }\n\n getBaseProps(props: NullableType<DataEleBaseTextProps>, options: ViewOptions): NullableType<DataEleBaseTextProps> {\n super.getBaseProps(props, options);\n props['valueTextProps'] = this.valueTextProps.getSerializeProps(options);\n props['nullTextProps'] = this.nullTextProps.getSerializeProps(options);\n props['nullText'] = this.nullText;\n props['dataType'] = this.dataType;\n return props;\n }\n\n updateProps(props: DataEleBaseTextProps): void {\n super.updateProps(props);\n this.valueTextProps = props.valueTextProps;\n this.nullText = props.nullText;\n this.nullTextProps = props.nullTextProps;\n this.dataType = props.dataType;\n }\n}\n\nexport interface DataEleListOption {\n code: string,\n value: string\n}\n\nexport class DataEleListProps extends DataEleBaseTextProps {\n constructor() {\n super();\n super.type = 'droplist';\n }\n\n options: Array<DataEleListOption> = [];\n dropDownStyle!: 'DropDownList' | 'DropDown';\n /**\n * 是否允许多选\n */\n multiSelect!: boolean;\n\n clone(dest: DataEleListProps | null): DataEleListProps {\n const clone = dest ?? new DataEleListProps();\n super.clone(clone);\n clone.options = [...this.options];\n clone.dropDownStyle = this.dropDownStyle;\n clone.multiSelect = this.multiSelect;\n return clone;\n }\n\n getSerializeProps(options: ViewOptions): any {\n const props: NullableType<DataEleListProps> = {\n options: [...this.options],\n multiSelect: this.multiSelect,\n dropDownStyle: this.dropDownStyle,\n };\n super.getBaseProps(props, options);\n return props;\n }\n\n updateProps(props: DataEleListProps): void {\n super.updateProps(props);\n this.options = props.options;\n this.multiSelect = props.multiSelect;\n this.dropDownStyle = props.dropDownStyle;\n }\n}\n\nexport class CommContentProps extends INotifyPropertyChanged {\n id!: string;\n createId!: string;\n createName!: string;\n createDate!: Date;\n\n clone(dest: CommContentProps): CommContentProps {\n const clone = dest ?? new CommContentProps();\n super.cloneAttachedProperty(clone);\n clone.id = this.id;\n return clone;\n }\n\n getSerializeProps(viewOptions: ViewOptions) {\n return {\n id: this.id\n };\n }\n}\n\nexport class CommProps extends INotifyPropertyChanged {\n id!: string;\n markType!: \"start\" | \"end\";\n\n clone(dest: CommProps): CommProps {\n const clone = dest ?? new CommProps();\n super.cloneAttachedProperty(clone);\n clone.id = this.id;\n clone.markType = this.markType;\n return clone;\n }\n\n getSerializeProps(viewOptions: ViewOptions) {\n return {\n id: this.id,\n markType: this.markType\n };\n }\n}\n\n\nexport class DataEleCheckProps extends DataEleBaseProps {\n constructor() {\n super();\n super.type = 'check';\n }\n\n size!: number;\n checked!: boolean;\n checkedValue: string = '';\n groupName!: string;\n multiSelect: boolean = false;\n\n clone(dest: DataEleCheckProps | null): DataEleCheckProps {\n const clone = dest ?? new DataEleCheckProps();\n super.cloneBaseProps(clone);\n clone.checked = this.checked;\n clone.size = this.size;\n clone.groupName = this.groupName;\n clone.multiSelect = this.multiSelect;\n clone.checkedValue = this.checkedValue;\n return clone;\n }\n\n getSerializeProps(options: ViewOptions): any {\n const props: NullableType<DataEleCheckProps> = {\n checked: this.checked,\n size: this.size,\n groupName: this.groupName,\n multiSelect: this.multiSelect,\n checkedValue: this.checkedValue\n };\n this.getBaseProps(props, options)\n return props;\n }\n\n updateProps(props: DataEleCheckProps): void {\n super.updateProps(props);\n this.checked = props.checked;\n this.size = props.size;\n this.groupName = props.groupName;\n this.multiSelect = props.multiSelect;\n this.checkedValue = props.checkedValue;\n }\n}\n\n\nexport class DataEleImageProps extends DataEleBaseProps {\n constructor() {\n super();\n super.type = 'img';\n }\n\n width!: number;\n height!: number;\n src!: string;\n border!: 'all' | 'none';\n\n clone(dest: DataEleImageProps | null): DataEleImageProps {\n const clone = dest ?? new DataEleImageProps();\n this.cloneBaseProps(clone);\n clone.width = this.width;\n clone.height = this.height;\n clone.src = this.src;\n clone.border = this.border;\n return clone;\n }\n\n getSerializeProps(options: ViewOptions): any {\n const props: NullableType<DataEleImageProps> = {\n width: this.width,\n height: this.height,\n src: this.src,\n border: this.border\n };\n this.getBaseProps(props, options)\n return props;\n }\n\n updateProps(props: DataEleImageProps): void {\n super.updateProps(props);\n this.width = props.width;\n this.height = props.height;\n this.src = props.src;\n this.border = props.border;\n }\n\n}\n\nexport class DataEleDateProps extends DataEleBaseTextProps {\n constructor() {\n super();\n super.type = 'date';\n }\n\n minValue?: Date;\n maxValue?: Date;\n format?: string;\n\n clone(dest: DataEleDateProps | null): DataEleDateProps {\n const clone = dest ?? new DataEleDateProps();\n super.clone(clone);\n clone.minValue = this.minValue;\n clone.maxValue = this.maxValue;\n clone.format = this.format;\n return clone;\n }\n\n getSerializeProps(options: ViewOptions): any {\n const props: NullableType<DataEleDateProps> = {\n minValue: this.minValue,\n maxValue: this.maxValue,\n format: this.format\n };\n this.getBaseProps(props, options);\n return props;\n }\n\n updateProps(props: DataEleDateProps): void {\n super.updateProps(props);\n this.minValue = props.minValue;\n this.maxValue = props.maxValue;\n this.format = props.format;\n }\n}\n\nexport class ValidateCondition {\n required: boolean = false;\n maxLength: number = -1;\n dataType: 'string' | 'date' | 'time' | 'number' | 'float' = 'string';\n}\n\nexport class DataEleMHProps extends DataEleBaseProps {\n //初潮年龄\n age!: string;\n //行经期天数\n days!: string;\n //月经周期天数\n cycles!: string;\n //末次月经时间\n lastDate!: string;\n //闭经年龄\n closeAge!: string;\n kind!: string;\n\n clone(dest: DataEleMHProps | null): DataEleMHProps {\n const clone = dest ?? new DataEleMHProps();\n this.cloneBaseProps(clone);\n clone.age = this.age;\n clone.days = this.days;\n clone.cycles = this.cycles;\n clone.lastDate = this.lastDate;\n clone.closeAge = this.closeAge;\n clone.kind = this.kind;\n return clone;\n }\n\n getSerializeProps(options: ViewOptions) {\n const props: NullableType<DataEleMHProps> = {\n age: this.age,\n days: this.days,\n cycles: this.cycles,\n lastDate: this.lastDate,\n closeAge: this.closeAge,\n kind: this.kind\n }\n this.getBaseProps(props, options);\n return props;\n }\n\n}\n\nexport class TrackRunProps {\n userId!: string;\n userName!: string;\n date!: string;\n id!: string;\n\n constructor(public type: TrackRunTypeEnum) {\n }\n\n clone(dest: TrackRunProps | null) {\n dest = dest ?? new TrackRunProps(this.type);\n dest.userId = this.userId;\n dest.userName = this.userName;\n dest.date = this.date;\n dest.id = this.id;\n }\n\n getSerializeProps() {\n const props: NullableType<TrackRunProps> = {\n userId: this.userId,\n userName: this.userName,\n date: this.date,\n id: this.id\n }\n return props;\n }\n}\n\n\nclass FontMapStruct {\n fontMap = new Map<string, string>();\n length: number = 0;\n\n registerFontMap(name: string, keyName: string): void {\n this.fontMap.set(name, keyName);\n this.length = this.fontMap.size;\n }\n\n getFontMap(name: string): string {\n if (this.length === 0) {\n return name;\n }\n if (this.fontMap.has(name)) {\n let key = this.fontMap.get(name) as string;\n return key;\n }\n return name;\n }\n}\n\nexport const fontMapFunc = new FontMapStruct();\n\n\nexport class ValidateProps {\n id!: string;\n title!: string;\n msg!: string;\n}\n\nexport class DataElementGroupProps {\n id!: string;\n name!: string;\n hidden!: boolean;\n clone(dest: DataElementGroupProps | null) {\n dest = dest ?? new DataElementGroupProps();\n dest.id = this.id;\n dest.name = this.name;\n dest.hidden = this.hidden;\n }\n\n getSerializeProps() {\n const props: NullableType<DataElementGroupProps> = {}\n if (this.id) {\n props.id = this.id;\n }\n if (this.name) {\n props.name = this.name;\n }\n if (this.hidden) {\n props.hidden = this.hidden;\n }\n return props;\n }\n}\n\n\nexport class DataElementBarcodeProps {\n type: 'ena13' | 'code128' | 'code39' | 'qrcode' = 'code128';\n text: string = '';\n width: number = 0;\n height: number = 0;\n\n clone(dest: DataElementBarcodeProps | null) {\n dest = dest ?? new DataElementBarcodeProps();\n dest.type = this.type;\n dest.text = this.text;\n dest.width = this.width;\n dest.height = this.height;\n }\n\n getSerializeProps() {\n return {\n type: this.type,\n text: this.text,\n width: this.width,\n height: this.height\n }\n }\n}\n\nexport class BodyPartProps {\n partId!: string;\n}","import {\n BlockContainerElement,\n Element,\n ElementFactory,\n Position,\n SelectionContentRange,\n SerializeProps,\n ViewOptions\n} from \"../../element-define\";\nimport {ElementUtil} from \"../../element-util\";\nimport {RenderContextType} from \"../../render-context\";\nimport {BlockContainerRenderObject, IRenderData, RenderObject} from \"../../render-define\";\nimport {CommentRangeStatus} from \"./comment-content-impl\";\n\nexport class CommsContainerElement extends BlockContainerElement {\n constructor() {\n super('comm-list');\n this.noFillEmpty = true;\n }\n\n createRenderObject(options: ViewOptions, renderCtx: RenderContextType): RenderObject {\n const render = new CommsContainerRenderObject(this);\n render.rect.maxWidth = options.reviewWindowWidth;\n render.rect.width = render.rect.maxWidth;\n return render;\n }\n\n serialize(viewOptions: ViewOptions): SerializeProps {\n return {\n type: this.type,\n props: {}\n };\n }\n\n clone(data: boolean): Element {\n const clone = new CommsContainerElement();\n if (data) {\n for (let i = 0; i < this.length; i++) {\n clone.addChild(this.getChild(i).clone(true));\n }\n }\n return clone;\n }\n}\n\nexport class CommsContainerRenderObject extends BlockContainerRenderObject {\n //批注内容是否已经重组,只要重新绘制的时候组合一次即可\n isMeasureComm!: boolean;\n selectedSet!: Map<Element, SelectionContentRange>;\n commentRangeStatus: Array<CommentRangeStatus> = [];\n\n render(e: IRenderData): void {\n if (this.rect.height === 0) {\n return;\n }\n e.render.contentContext.strokeRect(e.position.x, e.position.y, this.rect.width, this.rect.height, 'black', 0.5);\n }\n\n clone(): RenderObject {\n const clone = new CommsContainerRenderObject(this.element);\n clone.rect = ElementUtil.cloneRect(this.rect);\n for (let i = 0; i < this.length; i++) {\n clone.addChild(this.getChild(i).clone());\n }\n return clone;\n }\n}\n\n\nexport class CommentsFactory extends ElementFactory<null> {\n match(type: string): boolean {\n return type === \"comm-list\";\n }\n\n createElement(data: any, renderCtx: RenderContextType): Element {\n const commentsEle = new CommsContainerElement();\n return commentsEle;\n }\n}\n","import {LeafElement, SerializeProps} from \"../../element-define\";\nimport {ElementUtil} from \"../../element-util\";\nimport {RenderContextType} from \"../../render-context\";\nimport {IRenderData, LeafRenderObject, RenderObject} from \"../../render-define\";\nimport {InlineGroupInputElement, validateInlineInputRenderObj} from \"./data-element-base-impl\";\n\nexport class DataDecorateElement extends LeafElement<any> {\n //props: DataDecorateProps;\n constructor(public dataEle: InlineGroupInputElement, public isPrefix: boolean) {\n super('data-dec');\n this.addEvent('GotCursor', (evt) => {\n const {selectionState} = evt.ctx;\n if (selectionState.collapsed && this.parent instanceof InlineGroupInputElement) {\n const group = this.parent as InlineGroupInputElement;\n if (this === group.endDecorate && selectionState.startOffset === 0) {\n if (group.length === 2) {\n selectionState.resetRange(group.startDecorate, 1);\n evt.isCancel = true;\n }\n }\n }\n });\n this.isDecorate = true;\n }\n\n createRenderObject(): DataDecorateRenderObject {\n const render = new DataDecorateRenderObject(this);\n //render.rect.width = this.dProps.size / 2;\n render.rect.width = 6;\n render.rect.height = 14;\n return render;\n }\n\n serialize(): SerializeProps | null {\n return null;\n }\n\n clone(): DataDecorateElement {\n const clone = new DataDecorateElement(this.dataEle, this.isPrefix);\n this.props.clone(clone.props);\n //clone.renderCtx = this.renderCtx;\n return clone;\n }\n}\n\n\nexport class DataDecorateRenderObject extends LeafRenderObject {\n render(e: IRenderData): void {\n this.renderDecorRect(e.render, e.position);\n }\n\n renderDecorRect(ctx: RenderContextType, position: { x: number; y: number; }): void {\n if (ctx.drawMode === 'print') {\n return;\n }\n const dataEleRender = ElementUtil.getParentRenderByPredicate(this, item => validateInlineInputRenderObj(item));\n if (!dataEleRender) {\n return;\n }\n const dataEleRenderPos = ElementUtil.getParentRenderPos(dataEleRender, this, position);\n const element = this.element as DataDecorateElement;\n let {x, y, height, width} = dataEleRenderPos;\n const lineWidth = 2;\n const paintColor = '#0050b3';\n ctx.contentContext.tran(() => {\n if (this.element.parent.type === 'data-group') {\n ctx.contentContext.ctx.shadowBlur = 5;\n ctx.contentContext.ctx.shadowColor = 'black';\n }\n if (element.isPrefix) {\n x += 2;\n ctx.contentContext.strokeLines([{x: x + lineWidth, y}, {x: x, y}, {\n x: x,\n y: y + height\n }, {x: x + lineWidth, y: y + height}], 1, paintColor);\n } else {\n x = x + width - 2;\n ctx.contentContext.strokeLines([{x: x - lineWidth, y}, {x: x, y}, {\n x: x,\n y: y + height\n }, {x: x - lineWidth, y: y + height}], 1, paintColor);\n }\n })\n }\n\n clone(cloneData = true): RenderObject {\n const clone = new DataDecorateRenderObject(this.element);\n clone.rect = ElementUtil.cloneRect(this.rect);\n return clone;\n }\n\n}\n","import { DocMode, Element, ElementFactory, InlineGroupElement, LeafElement } from \"../../element-define\";\nimport { InlineGroupRenderObject, IRenderData, RenderObject } from \"../../render-define\";\nimport { GotCursorEvent, KeyboradElementEvent } from \"../../element-event-define\";\nimport { DataEleBaseProps, TextProps } from \"../../element-props\";\nimport { DataDecorateElement } from \"./data-decorate-impl\";\nimport { ElementUtil } from \"../../element-util\";\n\n/**\n * 所有的数据元继承上述两个抽象类\n */\nexport abstract class DataElementLeaf<P extends object = any> extends LeafElement<P> {\n abstract setValue(val: any): void;\n\n abstract getValue(): any;\n}\n\n/**\n * 可供输入的内联块\n * 使用场景:数据元,数据组\n */\nexport abstract class InlineGroupInputElement<P extends object = any> extends InlineGroupElement<P> {\n startDecorate!: DataDecorateElement;\n endDecorate!: DataDecorateElement;\n\n constructor(type: string) {\n super(type);\n //行内块不允许换行\n this.addEvent<KeyboradElementEvent>('ElementKeyDown', (evt) => {\n const { selectionState, sourceEvent, source } = evt;\n const { startControl, startOffset } = selectionState;\n if (IsInSideDataElement(startControl as LeafElement, startOffset)) {\n if (sourceEvent.shiftKey && sourceEvent.keyCode === 13) {\n //this.removeNullText();\n } else if (!sourceEvent.shiftKey && sourceEvent.keyCode === 13) {\n evt.isCancel = true;\n }\n }\n }, true);\n\n this.addEvent('GotCursor', (evt) => {\n const { startControl, startOffset } = evt.selectionState;\n if (IsInSideDataElement(startControl, startOffset)) {\n this.isFocused = true;\n }\n });\n this.addEvent('LostCursor', (evt) => {\n this.isFocused = false;\n });\n this.fillDecorate();\n }\n\n fillDecorate(): void {\n if (!this.startDecorate) {\n const { startDecorate, endDecorate } = this.createDataDecorate();\n this.addChild(startDecorate, 0);\n this.addChild(endDecorate, 1);\n this.startDecorate = startDecorate;\n this.endDecorate = endDecorate;\n }\n }\n\n createDataDecorate(): { startDecorate: DataDecorateElement, endDecorate: DataDecorateElement } {\n const startDecorate = new DataDecorateElement(this, true);\n const endDecorate = new DataDecorateElement(this, false);\n return {\n startDecorate,\n endDecorate\n }\n }\n\n protected cloneSelf<T extends InlineGroupInputElement>(data: boolean, constr: new () => T): T {\n const clone = new constr();\n (<(prop: P) => P>this.props['clone'])(clone.props);\n //cloneFunc.apply(this, clone.props);\n if (data) {\n const length = this.length;\n for (let i = 0; i < length; i++) {\n const child = this.getChild(i);\n if (child !== this.startDecorate && child !== this.endDecorate) {\n clone.addChildToLast(child.clone(true));\n }\n }\n }\n return clone;\n }\n\n beginMeasure(): void {\n this.fillDecorate();\n super.beginMeasure();\n }\n\n addChild(child: Element<any>, index: number = -1): void {\n index = index === -1 ? this.length - 1 : index;\n index = index > this.length ? this.length : index;\n if (index === 0 && this.startDecorate) {\n this.parent?.addChild(child, this.getIndex());\n return;\n }\n if (index === this.length && this.endDecorate) {\n this.parent?.addChild(child, this.getIndex() + 1);\n return;\n }\n super.addChild(child, index);\n }\n\n clearInnerItems(): void {\n const removeItems = this.getInnerItems();\n removeItems.forEach(item => this.removeChild(item));\n }\n\n getInnerItems(): Array<Element> {\n const items: Array<Element> = [];\n for (let i = this.length - 1; i >= 0; i--) {\n const child = this.getChild(i);\n if (child !== this.startDecorate && child !== this.endDecorate) {\n items.push(child);\n }\n }\n return items;\n }\n\n /**\n * 追加到内容块末尾\n * 调用addChild\n * @param child\n */\n addChildToLast(child: Element): void {\n super.addChild(child, this.length - 1);\n }\n\n /**\n * 追加到内容块开始位置\n */\n addChildToFirst(child: Element): void {\n super.addChild(child, 1);\n }\n}\n\nexport abstract class DataElementInlineGroup<P extends DataEleBaseProps = DataEleBaseProps & { valueTextProps: TextProps }> extends InlineGroupInputElement<P> {\n constructor(type: string) {\n super(type);\n this.addEvent('ElementMousemove', (evt) => {\n this.isMouseenter = true;\n this.refreshView();\n });\n this.addEvent('ElementMouseLeave', (evt) => {\n this.isMouseenter = false;\n this.refreshView()\n });\n this.addEvent<GotCursorEvent>('GotCursor', (evt) => {\n this.onGotCursorEvent(evt)\n });\n }\n\n onGotCursorEvent(evt: GotCursorEvent): void {\n const { source, selectionState } = evt;\n if (evt.ctx.viewOptions.docMode === DocMode.FormEdit) {\n //当前数据元不可编辑\n if (selectionState.editable && !this.props.editable) {\n const { startControl, startOffset } = selectionState;\n if (startControl === this.startDecorate && startOffset === 0 || startControl === this.endDecorate && startOffset === 1) {\n return;\n }\n selectionState.editable = false;\n const range = selectionState.range?.clone();\n if (range) {\n range.editable = false;\n selectionState.addRange(range);\n }\n return\n }\n }\n\n if (source === this.endDecorate && selectionState.startOffset === 0 && this.length === 2) {\n evt.isCancel = true;\n selectionState.resetRange(this.startDecorate, 1);\n }\n }\n\n abstract setValue(val: any): void;\n\n abstract getValue(): string;\n\n /**\n * 验证数据元的值是否合法\n * @returns\n */\n validate(): string {\n if (this.props.required && this.props.editable && !this.getValue()) {\n return '该字段不能为空';\n }\n return '';\n }\n\n}\n\nexport abstract class DataElementRenderObject<T extends DataElementInlineGroup = DataElementInlineGroup> extends InlineGroupRenderObject<T> {\n render(e: IRenderData): void {\n const { render, position, docCtx: { viewOptions } } = e;\n //数据元不打印\n if (!this.element.props.printable && render.drawMode === 'print') {\n return;\n }\n render.contentContext.tran(() => {\n //绘制数据元区域底色\n if (this.element.isMouseenter) {\n const overlayColor = this.element.props.editable ? viewOptions.dataEleOverlaysColor : viewOptions.dataEleReadOnlyOverlayColor;\n render.overlaysContext.fillRect(position.x, position.y - 2, this.rect.width, this.rect.height + 4, overlayColor);\n }\n if (this.element.props.secretBrowse && viewOptions.secretBrowse) {\n render.contentContext.ctx.filter = \"blur(10px)\"\n }\n if (this.element.props.underline) {\n const y = position.y + 2 + this.rect.height;\n render.contentContext.strokeLines([{ x: position.x, y }, { x: position.x + this.rect.width, y }], 1, '#595959')\n }\n e.nextRender();\n })\n }\n\n}\n\n\nexport const validateDataEle = (ele: Element) => {\n return ele instanceof DataElementLeaf || ele instanceof DataElementInlineGroup;\n};\n\nexport const validateDataEleRenderObj = (renderObj: RenderObject) => {\n if (renderObj.element) {\n return validateDataEle(renderObj.element);\n }\n return false;\n};\n\nexport const validateInlineInputRenderObj = (renderObj: RenderObject) => {\n if (renderObj.element) {\n return renderObj.element instanceof InlineGroupInputElement;\n }\n return false;\n};\n\n/**\n * 是否在数据元内部\n * @param control\n * @param offset\n */\nexport function IsInSideDataElement(control: LeafElement, offset: number): boolean {\n const mathEle = ElementUtil.getParent(control, (item) => item instanceof DataElementInlineGroup) as DataElementInlineGroup;\n if (mathEle) {\n if ((control === mathEle.startDecorate && offset === 0) || (control === mathEle.endDecorate && offset === 1)) {\n return false;\n }\n return true;\n }\n return false;\n}\n\n\n/**\n * 是否在内联块内部\n * @param control\n * @param offset\n */\nexport function IsInSideInlineGroupInputElement(control: LeafElement, offset: number): boolean {\n const mathEle = ElementUtil.getParent(control, (item) => item instanceof InlineGroupInputElement) as InlineGroupInputElement;\n if (mathEle) {\n if ((control === mathEle.startDecorate && offset === 0) || (control === mathEle.endDecorate && offset === 1)) {\n return false;\n }\n return true;\n }\n return false;\n}\n\n\nexport abstract class DataElementBaseFactory<T = null> extends ElementFactory<T> {\n readCompleted(ele: Element, children: Array<Element>) {\n if (ele instanceof InlineGroupInputElement) {\n children.forEach(item => ele.addChildToLast(item))\n }\n }\n}","import {\n BlockContainerElement,\n DocMode,\n Element,\n ElementFactory,\n MarginProps,\n PaddingProps, Position,\n readElementProps,\n Rect,\n SerializeProps,\n ViewOptions\n} from \"../../element-define\";\nimport {DocumentProps, TextProps} from '../../element-props';\nimport {IRenderContextContract, RenderContextType} from \"../../render-context\";\nimport {DocumentBodyElement} from \"./doc-body-impl\";\nimport {DocumentHeaderElement} from \"./doc-header-impl\";\nimport {BlockContainerRenderObject, IRenderData, RenderObject} from \"../../render-define\";\nimport {ElementUtil} from \"../../element-util\";\nimport {DocumentFooterElement} from \"./doc-footer-impl\";\nimport {ContextMenuElementEvent} from \"../../element-event-define\";\nimport {documentPrint} from \"../../document-print\";\nimport {CommsContainerElement} from \"../comments/comments-container-impl\";\nimport {CommonUtil} from \"../../common-util\";\nimport {SelectionState} from \"../../document-selection\";\n\nexport class DocumentElement extends BlockContainerElement<DocumentProps> {\n //props: DocumentProps;\n viewOptions!: ViewOptions;\n bodyElement!: DocumentBodyElement;\n headerElement!: DocumentHeaderElement;\n footerElement!: DocumentFooterElement;\n commentsContainerElement!: CommsContainerElement;\n headerEditState: boolean = false;\n\n constructor() {\n super('doc');\n this.props = new DocumentProps();\n }\n\n createRenderObject(options: ViewOptions): DocumentRenderObject {\n const {width: docPixelsWidth, height: docPixelsHeight} = this.viewOptions.docPageSettings;\n const docRenderObject = new DocumentRenderObject(this);\n docRenderObject.rect.width = docPixelsWidth;\n docRenderObject.rect.maxWidth = docPixelsWidth;\n docRenderObject.rect.maxHeight = docPixelsHeight;\n docRenderObject.rect.height = docPixelsHeight;\n docRenderObject.element = this;\n const {top, bottom, left, right} = this.props.padding;\n let {headerLine: headLine, footerLine: footLine} = this.props;\n const {mmToPixelsRatio} = this.viewOptions;\n headLine = headLine * mmToPixelsRatio;\n footLine = footLine * mmToPixelsRatio;\n docRenderObject.padding.top = Math.floor(top * mmToPixelsRatio);\n docRenderObject.padding.bottom = Math.floor(bottom * mmToPixelsRatio);\n docRenderObject.padding.left = Math.floor(left * mmToPixelsRatio);\n docRenderObject.padding.right = Math.floor(right * mmToPixelsRatio);\n docRenderObject.headerLine = headLine;\n docRenderObject.footerLine = footLine;\n docRenderObject.margin.top = options.docSpace;\n docRenderObject.margin.bottom = options.docSpace;\n return docRenderObject;\n }\n\n serialize(): SerializeProps {\n return {\n type: 'doc',\n props: {\n ...this.props.getSerializeProps()\n }\n }\n }\n\n clone(): DocumentElement {\n const clone = new DocumentElement();\n this.props.clone(clone.props)\n for (let i = 0; i < this.length; i++) {\n clone.addChild(this.getChild(i).clone(true));\n }\n return clone;\n }\n\n /**\n * 更新页边距\n * @param marginProps\n */\n updateMargin(marginProps: Partial<MarginProps>, unit: 'mm' | 'cm' = 'cm'): void {\n const {top, bottom, left, right} = marginProps as MarginProps;\n const paddig = this.props.padding;\n const ratio = unit === 'cm' ? 10 : 1;\n paddig.top = top * ratio;\n paddig.bottom = bottom * ratio;\n paddig.left = left * ratio;\n paddig.right = right * ratio;\n }\n\n /**\n * 切换开启页眉页脚编辑功能\n */\n switchPageHeaderEditor(ss: SelectionState, ele: Element | null): void {\n if (this.viewOptions.docMode !== DocMode.Design) {\n return;\n }\n if (!this.headerEditState && (!ele || (ele === this.headerElement || ele === this.footerElement))) {\n this.headerElement.disableClick = false;\n this.footerElement.disableClick = false;\n this.bodyElement.disableClick = true;\n this.headerEditState = true;\n } else if (this.headerEditState && (!ele || ele === this.bodyElement)) {\n this.headerElement.disableClick = true;\n this.footerElement.disableClick = true;\n this.bodyElement.disableClick = false;\n this.headerEditState = false;\n }\n ss.clear();\n this.refreshView();\n }\n}\n\n\nexport class DocumentRenderObject extends BlockContainerRenderObject {\n constructor(ele: Element) {\n super(ele);\n }\n\n headerLine!: number;\n footerLine!: number;\n\n render(e: IRenderData): void {\n const {render, position, docCtx: {viewOptions}} = e;\n const {width: docWidth, height: docHeight} = viewOptions.docPageSettings;\n render.overlaysContext.fillRect(position.x, position.y, docWidth, this.rect.height, 'white', 5, 'black');\n e.render.tran(() => {\n e.render.contentContext.ctx.fillStyle = e.docCtx.viewOptions.defaultColor;\n this.checkPrintMode(e);\n e.nextRender();\n\n this.drawCopyRight(viewOptions, render, position);\n this.drawDocPageNum(render, viewOptions, position);\n //绘制文档边距线\n this.drawMarginLine(position, render, docWidth, docHeight);\n this.drawWatermark(render, viewOptions, position);\n });\n }\n\n /**\n * 打印模式检查\n * 如果是续打模式,需要进行裁剪打印范围,页眉页脚都不需要打印\n * @private\n */\n private checkPrintMode(e: IRenderData): void {\n if (e.docCtx.viewOptions.printMode === 'continuation' && this.getIndex() === 0) {\n const {x, y, width, height} = this.getChild(1).rect;\n e.render.contentContext.clip(x, y, width, height);\n }\n }\n\n /**\n * 绘制版权信息\n */\n private drawCopyRight(viewOptions: ViewOptions, render: IRenderContextContract, position: Position) {\n const textP = new TextProps();\n textP.color = \"rgb(0,0,0)\";\n textP.fontName = '楷体';\n textP.fontSize = 12;\n if (viewOptions.copyRightInfo) {\n render.contentContext.drawText(viewOptions.copyRightInfo, textP, position.x + 5, position.y + 5, 100, 12);\n }\n }\n\n /**\n * 绘制文档边距线\n */\n private drawMarginLine(position: Position, render: IRenderContextContract, docWidth: number, docHeight: number) {\n const padding = this.padding;\n let paddingPos = {x: padding.left + position.x, y: padding.top + position.y};\n const drawLineWidth = 0.5;\n const lineWidth = 20;\n render.overlaysContext.strokeLines([{x: paddingPos.x - lineWidth, y: paddingPos.y}, paddingPos, {\n x: paddingPos.x,\n y: paddingPos.y - lineWidth\n }], drawLineWidth);\n paddingPos = {x: docWidth - padding.right + position.x, y: padding.top + position.y};\n render.overlaysContext.strokeLines([{x: paddingPos.x + lineWidth, y: paddingPos.y}, paddingPos, {\n x: paddingPos.x,\n y: paddingPos.y - lineWidth\n }], drawLineWidth);\n paddingPos = {x: padding.left + position.x, y: docHeight - this.padding.bottom + position.y};\n render.overlaysContext.strokeLines([{x: paddingPos.x - lineWidth, y: paddingPos.y}, paddingPos, {\n x: paddingPos.x,\n y: paddingPos.y + lineWidth\n }], drawLineWidth);\n paddingPos = {x: docWidth - padding.left + position.x, y: docHeight - this.padding.bottom + position.y};\n render.overlaysContext.strokeLines([{x: paddingPos.x + lineWidth, y: paddingPos.y}, paddingPos, {\n x: paddingPos.x,\n y: paddingPos.y + lineWidth\n }], drawLineWidth);\n }\n\n /**\n * 绘制水印\n * @param ctx\n * @param position\n */\n private drawWatermark(ctx: RenderContextType, viewOptions: ViewOptions, position: { x: number; y: number; }): void {\n if (viewOptions.watermark) {\n const watermark = viewOptions.watermark;\n ctx.contentContext.ctx.save();\n ctx.contentContext.ctx.translate(position.x, position.y);\n const {width, height} = this.rect;\n const degrees = Math.atan(height / width) * 180 / Math.PI\n ctx.contentContext.ctx.rotate(degrees * Math.PI / 180);\n ctx.contentContext.ctx.globalAlpha = 0.3;\n const d = Math.sqrt(width * width + height * height);\n const textProps = new TextProps();\n textProps.color = \"rgb(0,0,0)\";\n textProps.fontName = '楷体';\n textProps.fontSize = 60;\n const textWidth = ctx.contentContext.measureText(watermark, textProps).width\n const x = d / 2 - textWidth / 2;\n ctx.contentContext.ctx.font = textProps.getFont()\n ctx.contentContext.ctx.fillText(watermark, x, 30);\n ctx.contentContext.ctx.restore();\n }\n }\n\n /**\n * 绘制文档页码\n */\n drawDocPageNum(ctx: RenderContextType, viewOptions: ViewOptions, position: { x: number; y: number; }): void {\n const pageWidth = viewOptions.docPageSettings.width;\n const pageIndex = this.getIndex() + 1 + viewOptions.pageNumOffset;\n const str = CommonUtil.parseText(viewOptions.pageNumFormat, {index: pageIndex, count: this.parent.length});\n const textProps = new TextProps();\n textProps.color = \"rgb(0,0,0)\";\n textProps.fontName = '仿宋';\n textProps.fontSize = 14;\n textProps.fontStyle = 'italic';\n const size = ctx.contentContext.measureText(str, textProps);\n const alignCenterX = position.x + Math.ceil(pageWidth / 2) - Math.ceil(size.width / 2)\n const paintY = position.y + this.rect.height - size.height - 5;\n ctx.contentContext.drawText(str, textProps, alignCenterX, paintY, size.width, size.height);\n }\n\n clone(): RenderObject {\n throw new Error('未实现');\n const cloneRender = new DocumentRenderObject(this.element);\n cloneRender.rect = ElementUtil.cloneRect(this.rect);\n cloneRender.headerLine = this.headerLine;\n cloneRender.footerLine = this.footerLine;\n for (let i = 0; i < this.length; i++) {\n cloneRender.addChild(this.getChild(i).clone());\n }\n return cloneRender;\n }\n}\n\nexport class DocumentFactory extends ElementFactory<DocumentProps> {\n match(type: string): boolean {\n return type === 'doc';\n }\n\n createElement(data: readElementProps<DocumentProps>, renderCtx: RenderContextType): Element {\n const documentElement = new DocumentElement();\n const props = data.props as DocumentProps;\n const docProps = documentElement.props;\n docProps.width = props.width;\n docProps.height = props.height;\n docProps.padding = new PaddingProps(props.padding.top, props.padding.bottom, props.padding.left, props.padding.right);\n docProps.headerLine = props.headerLine ?? 12;\n docProps.footerLine = props.footerLine ?? 12;\n docProps.scripts = props.scripts;\n docProps.createUserId = props.createUserId;\n docProps.createUserName = props.createUserName;\n docProps.createDate = props.createDate;\n docProps.orient = props.orient ?? 'portrait';\n return documentElement;\n }\n\n}\n","import {BlockContainerElement, Element, ElementFactory, Rect, SerializeProps} from \"../../element-define\";\nimport {MouseElementEvent} from \"../../element-event-define\";\nimport {ElementUtil} from \"../../element-util\";\nimport {RenderContextType} from \"../../render-context\";\nimport {IRenderData, MuiltBlockLineRenderObject, RenderObject} from \"../../render-define\";\nimport {DocumentElement} from \"./doc-impl\";\n\n\nexport class DocumentBodyElement extends BlockContainerElement {\n //当前区域内是否留痕\n trackChanges: boolean = false;\n\n constructor() {\n super('body');\n //this.editMode = EditMode.Free;\n this.addEvent('ElementDblClick', (evt) => {\n if (this.disableClick) {\n this.switchEditMode(evt);\n }\n }, true);\n }\n\n createRenderObject(): DocumentBodyRenderObject {\n return new DocumentBodyRenderObject(this);\n }\n\n serialize(): SerializeProps {\n return {\n type: 'body',\n props: {}\n }\n }\n\n switchEditMode(evt: MouseElementEvent): void {\n const docElement = ElementUtil.getParentByType(this, DocumentElement);\n if (docElement) {\n docElement.switchPageHeaderEditor(evt.selectionState, this);\n }\n return;\n }\n\n clone(data: boolean): DocumentBodyElement {\n const clone = new DocumentBodyElement();\n if (data) {\n for (let i = 0; i < this.length; i++) {\n clone.addChild(this.getChild(i).clone(true));\n }\n }\n return clone;\n }\n\n\n}\n\n\nexport class DocumentBodyRenderObject extends MuiltBlockLineRenderObject {\n render(e: IRenderData): void {\n const {render, position} = e;\n render.tran(() => {\n if (this.element.disableClick && render.drawMode === 'view') {\n render.contentContext.setGlobalAlpha(0.5);\n }\n e.nextRender();\n });\n }\n\n clone(cloneData = true): RenderObject {\n const cloneRender = new DocumentBodyRenderObject(this.element);\n cloneRender.rect = ElementUtil.cloneRect(this.rect);\n if (cloneData) {\n for (let i = 0; i < this.length; i++) {\n cloneRender.addChild(this.getChild(i).clone());\n }\n }\n return cloneRender;\n }\n\n}\n\n\nexport class DocumentBodyFactory extends ElementFactory<null> {\n match(type: string): boolean {\n return type === 'body';\n }\n\n createElement(data: any, renderCtx: RenderContextType): Element {\n const element = new DocumentBodyElement();\n return element;\n }\n\n}\n\n","import {BlockContainerElement, Element, ElementFactory, Rect, SerializeProps} from \"../../element-define\";\nimport {MouseElementEvent} from \"../../element-event-define\";\nimport {ElementUtil} from \"../../element-util\";\nimport {RenderContextType} from \"../../render-context\";\nimport {BlockContainerRenderObject, IRenderData, RenderObject} from \"../../render-define\";\nimport {DocumentElement} from \"./doc-impl\";\n\nexport class DocumentFooterElement extends BlockContainerElement {\n constructor() {\n super('footer');\n //this.editMode = EditMode.Disabled;\n this.disableClick = true;\n this.addEvent('ElementDblClick', (evt) => {\n this.switchEditMode(evt);\n }, true);\n }\n\n clone(data: boolean): Element {\n const clone = new DocumentFooterElement();\n if (data) {\n for (let i = 0; i < this.length; i++) {\n clone.addChild(this.getChild(i).clone(true));\n }\n }\n return clone;\n }\n\n switchEditMode(evt: MouseElementEvent): void {\n const docElement = this.parent as DocumentElement;\n docElement.switchPageHeaderEditor(evt.selectionState, this);\n return;\n }\n\n createRenderObject(): DocumentFooterRenderObject {\n const renderObject = new DocumentFooterRenderObject(this);\n return renderObject;\n }\n\n serialize(): SerializeProps {\n return {\n type: 'footer',\n props: {}\n }\n }\n}\n\nexport class DocumentFooterRenderObject extends BlockContainerRenderObject {\n render(e: IRenderData): void {\n const {render, position} = e;\n render.tran(() => {\n //判断页眉是否为输入内容\n const isFooterEmpty = ElementUtil.checkEmptyContent(this);\n if (this.element.disableClick && render.drawMode === 'view') {\n if (isFooterEmpty) {\n render.contentContext.setGlobalAlpha(0);\n } else {\n render.contentContext.setGlobalAlpha(0.5);\n }\n }\n e.nextRender();\n });\n\n }\n\n\n clone(): RenderObject {\n const cloneRender = new DocumentFooterRenderObject(this.element);\n cloneRender.rect = ElementUtil.cloneRect(this.rect);\n for (let i = 0; i < this.length; i++) {\n cloneRender.addChild(this.getChild(i).clone());\n }\n return cloneRender;\n }\n}\n\n\nexport class DocumentFooterFactory extends ElementFactory<null> {\n match(type: string): boolean {\n return type === 'footer';\n }\n\n createElement(data: any, renderCtx: RenderContextType): Element {\n const element = new DocumentFooterElement();\n //element.renderCtx = renderCtx;\n return element;\n }\n}\n","import { BlockContainerElement, Element, ElementFactory, SerializeProps } from \"../../element-define\";\nimport { MouseElementEvent } from \"../../element-event-define\";\nimport { ElementUtil } from \"../../element-util\";\nimport { RenderContextType } from \"../../render-context\";\nimport { BlockContainerRenderObject, IRenderData, RenderObject } from \"../../render-define\";\nimport { DocumentElement } from \"./doc-impl\";\n\nexport class DocumentHeaderElement extends BlockContainerElement {\n constructor() {\n super('header');\n this.addEvent('ElementDblClick', (evt) => {\n this.switchEditMode(evt);\n }, true);\n //this.editMode = EditMode.Disabled;\n this.disableClick = true;\n }\n\n clone(data: boolean): Element {\n const clone = new DocumentHeaderElement();\n if (data) {\n for (let i = 0; i < this.length; i++) {\n clone.addChild(this.getChild(i).clone(true));\n }\n }\n return clone;\n }\n\n switchEditMode(evt: MouseElementEvent): void {\n const docElement = this.parent as DocumentElement;\n docElement.switchPageHeaderEditor(evt.selectionState, this);\n return;\n }\n\n\n createRenderObject(): DocumentHeaderRenderObject {\n const renderObject = new DocumentHeaderRenderObject(this);\n return renderObject;\n }\n\n serialize(): SerializeProps {\n return {\n type: 'header',\n props: {}\n }\n }\n\n}\n\n\nexport class DocumentHeaderRenderObject extends BlockContainerRenderObject {\n render(e: IRenderData): void {\n const { render, position } = e;\n render.tran(() => {\n //判断页眉是否为输入内容\n const isHeaderEmpty = ElementUtil.checkEmptyContent(this);\n //存在输入内容时,绘制页眉-页体分割线\n if (!isHeaderEmpty || !this.element.disableClick) {\n const headerLineY = this.rect.height;\n render.contentContext.drawHoriLine(position.x, position.y + headerLineY, this.rect.width, 'black', 0.5);\n }\n if (this.element.disableClick && render.drawMode === 'view') {\n if (isHeaderEmpty) {\n render.contentContext.setGlobalAlpha(0);\n return;\n }\n render.contentContext.setGlobalAlpha(0.7);\n }\n e.nextRender();\n })\n }\n\n clone(): RenderObject {\n const cloneRender = new DocumentHeaderRenderObject(this.element);\n cloneRender.rect = ElementUtil.cloneRect(this.rect);\n for (let i = 0; i < this.length; i++) {\n cloneRender.addChild(this.getChild(i).clone());\n }\n return cloneRender;\n }\n}\n\n\nexport class DocumentHeaderFactory extends ElementFactory<null> {\n match(type: string): boolean {\n return type === 'header';\n }\n\n createElement(data: any, renderCtx: RenderContextType): Element {\n const element = new DocumentHeaderElement();\n //element.renderCtx = renderCtx;\n return element;\n }\n}\n","import {\n BlockContentElement,\n ElementFactory,\n Element,\n SerializeProps,\n ViewOptions,\n readElementProps\n} from \"../../element-define\";\nimport { ContextMenuElementEvent } from \"../../element-event-define\";\nimport { ParagraphProps } from \"../../element-props\";\nimport { ElementUtil } from \"../../element-util\";\nimport { RenderContextType } from \"../../render-context\";\nimport {\n BlockLineRectRenderObject, IRenderData,\n MuiltBlockLineRenderObject,\n RenderObject\n} from \"../../render-define\";\nimport * as History from '../../element-trace-tracking'\n\nexport class ParagraphElement extends BlockContentElement<ParagraphProps> {\n //props: ParagraphProps;\n constructor() {\n super('p');\n this.props = new ParagraphProps();\n this.addEvent('BackspaceKey', (evt) => {\n if (evt.selectionState.collapsed) {\n const pFirstLeafElement = ElementUtil.getFirstLeafElement(this);\n if (pFirstLeafElement === evt.source && evt.sourceOffset === 0) {\n if (this.props.numberType >= 0) {\n this.props.numberType = -1;\n evt.isCancel = true;\n } else if (this.props.indent) {\n this.props.indent = 0;\n evt.isCancel = true;\n }\n }\n }\n\n }, true);\n }\n\n /**\n * 设置样式\n * @param format\n */\n setFormat(format: Partial<ParagraphProps>): void {\n History.formatEle(this, format);\n Object.keys(format).forEach(key => {\n this.props[key] = format[key];\n })\n }\n\n createRenderObject(): ParagraphRenderObject {\n const paraRender = new ParagraphRenderObject(this);\n return paraRender;\n }\n\n serialize(viewOptions: ViewOptions): SerializeProps {\n return {\n type: 'p',\n props: {\n ...this.props.getSerializeProps(viewOptions)\n }\n }\n }\n\n clone(data: boolean): Element {\n const clone = new ParagraphElement();\n this.props.clone(clone.props);\n if (data) {\n for (let i = 0; i < this.length; i++) {\n clone.addChild(this.getChild(i).clone(true));\n }\n }\n return clone;\n }\n\n static createElement(): ParagraphElement {\n return new ParagraphElement();\n }\n\n}\n\nexport class ParagraphRenderObject extends MuiltBlockLineRenderObject {\n render(e: IRenderData): void {\n e.nextRender();\n this.drawProjectNumber(e.render, e.docCtx.viewOptions);\n }\n\n\n /**\n * 绘制项目符号\n */\n drawProjectNumber(ctx: RenderContextType, viewOptions: ViewOptions): void {\n const paraElement = this.element as ParagraphElement;\n if (paraElement.props.numberType >= 0) {\n if (paraElement.paintRenders.indexOf(this) > 0) {\n return;\n }\n const firstLine = this.getChild(0) as ParagraphLineRectRenderObject;\n if (!firstLine) {\n debugger;\n }\n const firstInline = firstLine.getChild(0);\n if (!firstInline) {\n debugger;\n }\n const firstInlinePaintPos = ElementUtil.getRenderAbsolutePaintPos(firstInline, {\n x: 0,\n y: -viewOptions.translateY\n });\n const numberSymbolY = firstInlinePaintPos.y + Math.ceil(firstInline.rect.height / 2);\n //ctx.contentContext.drawText(str, textProps, firstInlinePaintPos.x - paraElement.paraProps.indent, numberSymbolY, 14, 14);\n ctx.contentContext.fillCircular(firstInlinePaintPos.x - paraElement.props.indent + 2, numberSymbolY, 4)\n }\n }\n\n\n clone(): RenderObject {\n const cloneRender = new ParagraphRenderObject(this.element);\n cloneRender.rect = ElementUtil.cloneRect(this.rect);\n for (let i = 0; i < this.length; i++) {\n cloneRender.addChild(this.getChild(i).clone());\n }\n return cloneRender;\n }\n\n createLineRect(): ParagraphLineRectRenderObject {\n const lineRect = new ParagraphLineRectRenderObject(this.element);\n lineRect.rect.maxWidth = this.rect.maxWidth;\n return lineRect;\n }\n\n\n}\n\nexport class ParagraphFactory extends ElementFactory<ParagraphProps> {\n match(type: string): boolean {\n return type === 'p';\n }\n\n createElement(data: readElementProps<ParagraphProps>, renderCtx: RenderContextType): Element {\n const paraElement = new ParagraphElement();\n const props = data.props;\n paraElement.props.indent = props?.indent ?? 0;\n paraElement.props.hanging = props?.hanging ?? 0;\n paraElement.props.textAlign = props?.textAlign ?? 'left';\n paraElement.props.numberType = props?.numberType ?? -1;\n paraElement.props.lineHeight = props?.lineHeight ?? 1.3;\n paraElement.props.pageBreak = props?.pageBreak ?? false;\n return paraElement;\n }\n}\n\n/**\n * 段落行框\n */\nexport class ParagraphLineRectRenderObject extends BlockLineRectRenderObject {\n\n render(e: IRenderData): void {\n }\n\n clone(): RenderObject {\n const cloneRender = new ParagraphLineRectRenderObject(this.element);\n cloneRender.rect = ElementUtil.cloneRect(this.rect);\n for (let i = 0; i < this.length; i++) {\n cloneRender.addChild(this.getChild(i).clone());\n }\n return cloneRender;\n }\n}\n","import { Element, LeafElement, SerializeProps } from \"../../element-define\";\nimport { ElementUtil } from \"../../element-util\";\nimport { IRenderData, LeafRenderObject, RenderObject } from \"../../render-define\";\nimport { TextProps } from \"../../element-props\";\n\nexport class PSymbolElement extends LeafElement {\n textProps: TextProps;\n defaultHeight = 14;\n\n constructor() {\n super('psym');\n this.textProps = new TextProps();\n this.textProps.fontSize = this.defaultHeight;\n this.textProps.fontName = '宋体';\n this.textProps.color = '#8c8c8c';\n }\n\n createRenderObject(): LeafRenderObject {\n const symbol = new PSymbolRenderObject(this);\n symbol.rect.height = this.defaultHeight;\n symbol.rect.width = 7;\n return symbol;\n }\n\n serialize(): SerializeProps | null {\n return null;\n }\n\n clone(): Element {\n const clone = new PSymbolElement();\n clone.defaultHeight = this.defaultHeight;\n return clone;\n }\n\n getSelfLength(pure: boolean): number {\n return pure ? 0 : 1;\n }\n}\n\nexport class PSymbolRenderObject extends LeafRenderObject<PSymbolElement> {\n render(e: IRenderData): void {\n const { render, position } = e;\n if (render.drawMode === 'print') {\n return;\n }\n render.contentContext.drawText('⤶', this.element.textProps, position.x, position.y, 20, this.rect.height);\n }\n\n //绘制段落符号\n clone(): RenderObject {\n const render = new PSymbolRenderObject(this.element);\n render.rect = ElementUtil.cloneRect(this.rect);\n return render;\n }\n\n}\n\n","import {\n BlockContainerElement,\n Element,\n ElementFactory,\n PaddingProps,\n readElementProps,\n SerializeProps,\n ViewOptions\n} from \"../../element-define\";\nimport {TableCellProps} from \"../../element-props\";\nimport {ElementUtil} from \"../../element-util\";\nimport {RenderContextType} from \"../../render-context\";\nimport {InlineMuiltBlockLineRenderObject, IRenderData, RenderObject} from \"../../render-define\";\nimport {TableElement} from \"./table-impl\";\n\nexport class TableCellElement extends BlockContainerElement<TableCellProps> {\n //props: TableCellProps;\n constructor() {\n super('tbc');\n this.props = new TableCellProps();\n //this.addPropValueChangedSub(this.props);\n }\n\n beginMeasure(): void {\n super.beginMeasure();\n this.disableClick = !this.isNotBeMergedCell();\n }\n\n /**\n * 不被合并单元格的单元格\n * @returns\n */\n isNotBeMergedCell(): boolean {\n return this.props.hMerge !== 'continue' && this.props.vMerge !== 'continue';\n }\n\n createRenderObject(): RenderObject | null {\n if (!this.isNotBeMergedCell()) {\n return null;\n }\n const {cellWidth, cellOffset} = this.getCellWidth();\n const cellRender = new TableCellRenderObject(this);\n cellRender.rect.width = cellWidth;\n cellRender.rect.maxWidth = cellWidth;\n cellRender.padding = new PaddingProps(0, 0, 5, 5);\n cellRender.rect.x = cellOffset;\n return cellRender;\n }\n\n serialize(options: ViewOptions): SerializeProps {\n return {\n type: 'tbc',\n props: {\n ...this.props.getSerializeProps(options)\n }\n };\n }\n\n clone(data: boolean): Element {\n const clone = new TableCellElement();\n this.props.clone(clone.props);\n if (data) {\n for (let i = 0; i < this.length; i++) {\n clone.addChild(this.getChild(i).clone(true));\n }\n }\n return clone;\n }\n\n getCellWidth(): { cellWidth: number, cellOffset: number } {\n const row = this.parent;\n if (!row) {\n throw new Error('row is null');\n }\n const table = row.parent as TableElement;\n const cellIndex = row.getChildIndex(this);\n let cellWidth = table.getCellWidth(cellIndex);\n const cellOffset = table.getCellOffsetX(cellIndex);\n if (this.props.hMerge === 'restart') {\n for (let i = cellIndex + 1; i < table.getColsCount(); i++) {\n const nextCell = row.getChild(i) as TableCellElement;\n if (nextCell.props.hMerge === 'continue') {\n cellWidth += table.getCellWidth(i);\n } else {\n break;\n }\n }\n }\n return {cellWidth, cellOffset};\n }\n\n static createCell(): TableCellElement {\n const tc = new TableCellElement();\n return tc;\n }\n\n}\n\nexport class TableCellRenderObject extends InlineMuiltBlockLineRenderObject {\n render(e: IRenderData): void {\n const {render, position} = e;\n render.tran(() => {\n render.contentContext.clip(position.x, position.y, this.rect.width, this.rect.height);\n const {hMerge, vMerge, backgroundColor, diagonal} = (<TableCellElement>this.element).props;\n if (hMerge === 'continue' || vMerge === 'continue') {\n render.contentContext.setGlobalAlpha(0);\n render.overlaysContext.setGlobalAlpha(0);\n }\n if (backgroundColor && this.rect.width && this.rect.height) {\n render.contentContext.fillRect(position.x, position.y, this.rect.width, this.rect.height, backgroundColor)\n }\n if (diagonal && this.rect.width && this.rect.height) {\n let diagonalStartX = diagonal === 'main' ? position.x : position.x + this.rect.width;\n let diagonalStartY = position.y;\n let diagonalEndX = diagonal === 'main' ? position.x + this.rect.width : position.x;\n let diagonalEndY = position.y + this.rect.height;\n render.contentContext.strokeLines([{x: diagonalStartX, y: diagonalStartY}, {\n x: diagonalEndX,\n y: diagonalEndY\n }])\n }\n e.nextRender();\n })\n }\n\n clone(): RenderObject {\n const cloneRender = new TableCellRenderObject(this.element);\n cloneRender.rect = ElementUtil.cloneRect(this.rect);\n cloneRender.padding = this.padding?.clone();\n cloneRender.margin = this.margin?.clone();\n for (let i = 0; i < this.length; i++) {\n cloneRender.addChild(this.getChild(i).clone());\n }\n return cloneRender;\n }\n}\n\nexport class TableCellFactory extends ElementFactory<TableCellProps> {\n match(type: string): boolean {\n return type === 'tbc';\n }\n\n createElement(data: readElementProps<TableCellProps>, renderCtx: RenderContextType): Element {\n const tc = new TableCellElement();\n const props = data.props;\n tc.props.vMerge = props?.vMerge ?? null;\n tc.props.hMerge = props?.hMerge ?? null;\n tc.props.vAlign = props?.vAlign ?? null;\n tc.props.backgroundColor = props?.backgroundColor ?? null;\n tc.props.diagonal = props?.diagonal ?? null;\n //tc.renderCtx = renderCtx;\n return tc;\n }\n\n}\n","import {\n BlockContainerElement,\n Element,\n ElementFactory,\n ModifyFlag,\n readElementProps,\n SerializeProps,\n ViewOptions\n} from \"../../element-define\";\nimport {TableRowProps} from \"../../element-props\";\nimport {ElementUtil} from \"../../element-util\";\nimport {RenderContextType} from \"../../render-context\";\nimport {IRenderData, MuiltBlockLineRenderObject, RenderObject} from \"../../render-define\";\nimport {TableCellElement} from \"./table-cell-impl\";\n\nexport class TableRowElement extends BlockContainerElement<TableRowProps> {\n //props: TableRowProps;\n constructor() {\n super('tr');\n this.props = new TableRowProps();\n //在差异更新中,由于行内单元格存在合并行的情况,需要将当前行内存在合并的单元格,将其修改标志改为修改\n const changeSub = this.onChangeSubject.subscribe(() => {\n if (this.modifyFlag === ModifyFlag.Track) {\n //this.checkRowModifyState();\n this.pubOnChange('to-child');\n }\n });\n this.addsubscribe(this, changeSub);\n }\n\n createRenderObject(): RenderObject {\n return new TableRowRenderObject(this);\n }\n\n serialize(viewOptions: ViewOptions): SerializeProps {\n return {\n type: 'tr',\n props: {\n ...this.props?.getSerializeProps(viewOptions)\n }\n };\n }\n\n clone(data: boolean): Element {\n const clone = new TableRowElement();\n this.props.clone(clone.props);\n if (data) {\n for (let i = 0; i < this.length; i++) {\n clone.addChild(this.getChild(i).clone(true));\n }\n }\n return clone;\n }\n\n static createRow(cols: number): TableRowElement {\n const tr = new TableRowElement();\n for (let i = 0; i < cols; i++) {\n tr.addChild(TableCellElement.createCell());\n }\n return tr;\n }\n}\n\nexport class TableRowRenderObject extends MuiltBlockLineRenderObject<TableRowElement> {\n render(e: IRenderData): void {\n }\n\n\n clone(): RenderObject {\n const cloneRender = new TableRowRenderObject(this.element);\n cloneRender.rect = ElementUtil.cloneRect(this.rect);\n for (let i = 0; i < this.length; i++) {\n cloneRender.addChild(this.getChild(i).clone());\n }\n return cloneRender;\n }\n}\n\nexport class TableRowFactory extends ElementFactory<TableRowProps> {\n match(type: string): boolean {\n return type === 'tr';\n }\n\n createElement(data: readElementProps<TableRowProps>, renderCtx: RenderContextType): Element {\n const props = data.props as TableRowProps;\n const tr = new TableRowElement();\n tr.props.minHeight = props?.minHeight ?? -1;\n tr.props.headerRow = props?.headerRow;\n return tr;\n }\n\n}\n","import { SelectionState } from \"../../document-selection\";\nimport { ElementUtil } from \"../../element-util\";\nimport { Element } from \"../../element-define\";\nimport { ParagraphElement } from \"../paragraph/p-impl\";\nimport { TableCellElement } from \"./table-cell-impl\";\nimport { TableElement } from \"./table-impl\";\nimport { TableRowElement } from \"./table-row-impl\";\n\n\nexport class TableUtil {\n\n static canDeleteTable(ss: SelectionState): boolean {\n const { startControl } = ss;\n if (!startControl) {\n return false;\n }\n const tb = ElementUtil.getParentByType(startControl, TableElement);\n return !!tb;\n }\n\n /**\n * 校验当前选区是否可以执行合并单元格操作\n * @param ss\n * @returns\n */\n static canMergeCells(ss: SelectionState): boolean {\n const { ancestorCommonControl, startControl, endControl, collapsed, selectedRange } = ss;\n if (collapsed) {\n return false;\n }\n if (ancestorCommonControl instanceof TableElement || ancestorCommonControl instanceof TableRowElement) {\n const tbElement = ancestorCommonControl instanceof TableElement ? ancestorCommonControl : ancestorCommonControl.parent as TableElement;\n const startCell = ElementUtil.getParentByType(startControl, TableCellElement);\n const endCell = ElementUtil.getParentByType(endControl, TableCellElement);\n if (startCell?.parent?.parent === tbElement && endCell?.parent?.parent === tbElement) {\n const tbRegion = this.getTableRectSelectedRegion(tbElement, startCell, endCell);\n if (selectedRange && selectedRange.target === tbElement) {\n const selectedCells: Array<TableCellElement> = [];\n selectedRange.selectedChildren.every(item => item.selectedChildren.every(cell => selectedCells.push(cell.target as TableCellElement)));\n for (let i = tbRegion.startRow; i <= tbRegion.endRow; i++) {\n const currRow = tbElement.getChild<TableRowElement>(i);\n for (let j = tbRegion.startCol; j <= tbRegion.endCol; j++) {\n const currCell = currRow.getChild<TableCellElement>(j);\n if (currCell.isNotBeMergedCell() && selectedCells.indexOf(currCell) < 0) {\n return false;\n }\n }\n }\n return true;\n }\n }\n }\n return false;\n }\n\n /**\n * 获取横向合并当前单元格合并结束索引位置\n * @param tb\n * @param rowIndex\n * @param colIndex\n */\n static getHMergeEndIndex(tb: TableElement, rowIndex: number, colIndex: number): number {\n const currRow = tb.getChild(rowIndex) as TableRowElement;\n let index = colIndex;\n for (let i = colIndex + 1; i < tb.getColsCount(); i++) {\n const cell = currRow.getChild(i) as TableCellElement;\n if (cell.props.hMerge === 'continue') {\n index = i;\n } else {\n break;\n }\n }\n return index;\n }\n\n /**\n * 获取横向合并当前单元格合并开始索引位置\n * @param tb\n * @param rowIndex\n * @param colIndex\n */\n static getHMergeStartIndex(tb: TableElement, rowIndex: number, colIndex: number): number {\n const row = tb.getChild(rowIndex) as TableRowElement;\n for (let i = colIndex - 1; i >= 0; i--) {\n const cell = row.getChild(i) as TableCellElement;\n if (cell.props.hMerge === 'restart') {\n return i;\n }\n }\n throw new Error('未找到主合并单元格');\n }\n\n /**\n * 获取纵向合并当前单元格合并结束索引位置\n * @param tb\n * @param rowIndex\n * @param colIndex i\n */\n static getVMergeEndIndex(tb: TableElement, rowIndex: number, colIndex: number): number {\n let index = rowIndex;\n for (let i = rowIndex + 1; i < tb.length; i++) {\n const currRow = tb.getChild(i) as TableRowElement;\n const cell = currRow.getChild(colIndex) as TableCellElement;\n if (cell.props.vMerge === 'continue') {\n index = i;\n } else {\n break;\n }\n }\n return index;\n }\n\n /**\n * 获取纵向合并当前单元格合并开始索引位置\n * @param tb\n * @param rowIndex\n * @param colIndex i\n */\n static getVMergeStartIndex(tb: TableElement, rowIndex: number, colIndex: number): number {\n for (let i = rowIndex - 1; i >= 0; i--) {\n const currRow = tb.getChild(i) as TableRowElement;\n const cell = currRow.getChild(colIndex) as TableCellElement;\n if (cell.props.vMerge === 'restart') {\n return i;\n }\n }\n throw new Error('未找到主合并单元格');\n }\n\n /**\n * 合并单元格\n * @param ss\n * @returns\n */\n static mergeCells(ss: SelectionState): void {\n const { ancestorCommonControl, startControl, endControl, collapsed } = ss;\n if (collapsed) {\n return;\n }\n if (ancestorCommonControl instanceof TableElement || ancestorCommonControl instanceof TableRowElement) {\n const tbElement = ancestorCommonControl instanceof TableElement ? ancestorCommonControl : ancestorCommonControl.parent as TableElement;\n const startCell = ElementUtil.getParentByType(startControl, TableCellElement);\n const endCell = ElementUtil.getParentByType(endControl, TableCellElement);\n if (startCell?.parent?.parent === tbElement && endCell?.parent?.parent === tbElement) {\n //this.combineCellContent(tbElement, startCell, endCell);\n this.combineCells(tbElement, startCell, endCell);\n }\n this.checkRowBeMerged(ss);\n ss.clear();\n }\n }\n\n /**\n * 在合并单元格后需要校验\n * 1.如果某个行的所有单元格都不是normal,则需要删除当前行\n * 2.如果某个列的所有的单元格都不是normal,则需要删除当前列\n */\n private static checkRowBeMerged(ss: SelectionState): void {\n const tb = ElementUtil.getParentByType(ss.startControl, TableElement);\n if (!tb) {\n return\n }\n const colsCount = tb.getColsCount();\n const fullMergeRows: Array<TableRowElement> = [];\n for (let i = 0; i < tb.length; i++) {\n const row = tb.getChild(i) as TableRowElement;\n let count = 0;\n for (let j = 0; j < colsCount; j++) {\n const cell = row.getChild(j) as TableCellElement;\n if (!cell.isNotBeMergedCell()) {\n count++;\n }\n }\n //当前行所有的单元格都被合并,需要删除\n if (count === colsCount) {\n fullMergeRows.push(row)\n }\n }\n fullMergeRows.forEach(row => this.removeRow(row));\n }\n\n /**\n * 移除行\n * @param row\n */\n private static removeRow(row: TableRowElement): void {\n const rowIndex = row.getIndex();\n const tb = row.parent as TableElement;\n for (let i = 0; i < row.length; i++) {\n const cell = row.getChild<TableCellElement>(i);\n if (cell.props.vMerge === 'restart') {\n const vMergeEndIndex = this.getVMergeEndIndex(tb, rowIndex, i);\n if (vMergeEndIndex > rowIndex) {\n const nextRow = tb.getChild<TableRowElement>(rowIndex + 1);\n nextRow.getChild<TableCellElement>(i).props.vMerge = vMergeEndIndex - rowIndex > 2 ? 'restart' : null;\n }\n } else if (cell.props.vMerge === 'continue') {\n // const vMergeEndIndex = this.getVMergeEndIndex(tb, rowIndex, i);\n // if (vMergeEndIndex > rowIndex) {\n // const nextRow = tb.getChild<TableRowElement>(rowIndex + 1);\n // nextRow.getChild<TableCellElement>(i).cellProps.vMerge = 'continue';\n // }\n const vMergeStartIndex = this.getVMergeStartIndex(tb, rowIndex, i);\n const vMergeEndIndex = this.getVMergeEndIndex(tb, rowIndex, i);\n //当前单元格处于合并行的最后一行,并且合并的行数为2行\n if (vMergeEndIndex === rowIndex && vMergeEndIndex - vMergeStartIndex === 1) {\n const aboveCell = tb.getChild<TableRowElement>(vMergeStartIndex).getChild<TableCellElement>(i)\n aboveCell.props.vMerge = null;\n }\n }\n }\n tb.removeChild(row);\n }\n\n /**\n * 移除列\n * @param tb\n * @param colIndex\n */\n private static removeCol(tb: TableElement, colIndex: number): void {\n for (let i = 0; i < tb.length; i++) {\n const row = tb.getChild<TableRowElement>(i);\n const cell = row.getChild<TableCellElement>(colIndex);\n if (cell.props.hMerge === 'restart') {\n const hMergeEndIndex = this.getHMergeEndIndex(tb, i, colIndex);\n if (hMergeEndIndex > colIndex) {\n const nextCell = row.getChild<TableCellElement>(colIndex + 1);\n nextCell.props.hMerge = hMergeEndIndex - colIndex > 2 ? 'restart' : null;\n }\n } else if (cell.props.hMerge === 'continue') {\n const hMergeStartIndex = this.getHMergeStartIndex(tb, i, colIndex);\n const hMergeEndIndex = this.getHMergeEndIndex(tb, i, colIndex);\n //当前单元格处于合并行的最后一行,并且合并的行数为2行\n if (hMergeEndIndex === colIndex && hMergeEndIndex - hMergeStartIndex === 1) {\n const masterVMergeCell = tb.getChild<TableRowElement>(hMergeStartIndex).getChild<TableCellElement>(i)\n masterVMergeCell.props.hMerge = null;\n }\n }\n row.removeChild(cell);\n }\n tb.removeCol(colIndex);\n if (tb.props.cols.length === 0) {\n tb.remove();\n }\n }\n\n /**\n * 移除光标所在的当前行\n * @param ss\n */\n static removeCurrRow(ss: SelectionState): void {\n if (!ss.startControl) {\n return;\n }\n const startCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);\n if (!startCell?.parent) {\n throw new Error('parent is null')\n }\n const currRow = startCell.parent as TableRowElement;\n const tb = currRow.parent as TableElement;\n this.removeRow(currRow);\n if (tb.length === 0) {\n tb.remove();\n }\n }\n\n /**\n * 移除光标所在的当前列\n * @param ss\n */\n static removeCurrCol(ss: SelectionState): void {\n const startCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);\n if (!startCell?.parent) {\n throw new Error('parent is null')\n }\n if (ss.collapsed) {\n const currRow = startCell.parent as TableRowElement;\n const tb = currRow.parent as TableElement;\n this.removeCol(tb, startCell.getIndex());\n ss.clear();\n return;\n }\n const { ancestorCommonControl, startControl, endControl } = ss;\n if (ancestorCommonControl instanceof TableElement || ancestorCommonControl instanceof TableRowElement) {\n const tbElement = ancestorCommonControl instanceof TableElement ? ancestorCommonControl : ancestorCommonControl.parent as TableElement;\n const startCell = ElementUtil.getParentByType(startControl, TableCellElement);\n const endCell = ElementUtil.getParentByType(endControl, TableCellElement);\n if (startCell?.parent?.parent === tbElement && endCell?.parent?.parent === tbElement) {\n const startColIndex = startCell.getIndex();\n let endColIndex = endCell.getIndex();\n while (startColIndex <= endColIndex) {\n this.removeCol(tbElement, endColIndex);\n endColIndex--;\n }\n }\n tbElement.pubOnChange('self');\n }\n ss.clear();\n }\n\n /**\n * 合并单元格\n */\n static combineCells(tbElement: TableElement, startCell: TableCellElement, endCell: TableCellElement): void {\n const tbRegion = this.getTableRectSelectedRegion(tbElement, startCell, endCell);\n const cellContents: Array<Element> = [];\n for (let i = tbRegion.startRow; i <= tbRegion.endRow; i++) {\n const currRow = tbElement.getChild<TableRowElement>(i);\n for (let j = tbRegion.startCol; j <= tbRegion.endCol; j++) {\n const currCell = currRow.getChild<TableCellElement>(j);\n currCell.props.vMerge = null;\n currCell.props.hMerge = 'continue';\n if (j === tbRegion.startCol) {\n currCell.props.vMerge = i === tbRegion.startRow ? 'restart' : 'continue';\n currCell.props.hMerge = 'restart';\n }\n if (currCell !== startCell) {\n cellContents.push(...ElementUtil.getChildrenElements(currCell));\n currCell.clearItems();\n }\n }\n }\n //如果合并的单元格都是空段落,则不合并内容\n if (!cellContents.every((item) => (item instanceof ParagraphElement && item.length === 1))) {\n for (let i = 0; i < cellContents.length; i++) {\n startCell.addChild(cellContents[i]);\n }\n }\n }\n\n\n static canSplitCell(ss: SelectionState): boolean {\n const { ancestorCommonControl, startControl, endControl, collapsed } = ss;\n if (ancestorCommonControl instanceof TableElement || ancestorCommonControl instanceof TableRowElement) {\n const tbElement = ancestorCommonControl instanceof TableElement ? ancestorCommonControl : ancestorCommonControl.parent;\n const startCell = ElementUtil.getParentByType(startControl, TableCellElement);\n const endCell = ElementUtil.getParentByType(endControl, TableCellElement);\n if (startCell?.parent?.parent === tbElement && endCell?.parent?.parent === tbElement) {\n if (startCell === endCell) {\n return startCell.props.hMerge === 'restart' || startCell.props.vMerge === 'restart';\n }\n }\n } else {\n const startCell = ElementUtil.getParentByType(startControl, TableCellElement);\n if (!startCell) {\n throw new Error('startCell is null');\n }\n const { hMerge, vMerge } = startCell?.props;\n return hMerge === 'restart' || vMerge === 'restart' || !hMerge || !vMerge;\n }\n\n return false;\n }\n\n /**\n * 将合并的单元格合并还原\n * @param ss\n */\n static restoreCell(ss: SelectionState): void {\n const { ancestorCommonControl, startControl, endControl, collapsed } = ss;\n const startCell = ElementUtil.getParentByType(startControl, TableCellElement);\n if (startCell) {\n this.restoreCellMerge(startCell);\n ss.resetRange(startCell, 0);\n startCell.refreshView();\n }\n }\n\n private static restoreCellMerge(cell: TableCellElement): void {\n const { vMerge, hMerge } = cell.props;\n const row = cell.parent as TableRowElement;\n const tb = row.parent as TableElement;\n const rowIndex = row.getIndex();\n const colIndex = cell.getIndex();\n if (vMerge === 'restart') {\n for (let i = rowIndex + 1; i < tb.length; i++) {\n const row = tb.getChild(i) as TableRowElement;\n const cell = row.getChild(colIndex) as TableCellElement;\n if (cell.props.vMerge === \"continue\") {\n cell.props.vMerge = null;\n if (cell.props.hMerge === \"restart\") {\n this.restoreCellMerge(cell);\n }\n }\n }\n }\n if (hMerge === 'restart') {\n for (let i = colIndex + 1; i < row.length; i++) {\n const cell = row.getChild(i) as TableCellElement;\n if (cell.props.hMerge === \"continue\") {\n cell.props.hMerge = null;\n if (cell.props.vMerge === \"restart\") {\n this.restoreCellMerge(cell);\n }\n }\n }\n }\n cell.props.hMerge = null;\n cell.props.vMerge = null;\n }\n\n\n private static getVMergeRows(tb: TableElement, masterRowIndex: number, masterColIndex: number): Array<TableRowElement> {\n const items: Array<TableRowElement> = [];\n for (let i = masterRowIndex + 1; i < tb.length; i++) {\n const row = <TableRowElement>tb.getChild(i);\n const cell = row.getChild(masterColIndex) as TableCellElement;\n if (cell.props.vMerge === 'continue') {\n items.push(row);\n } else {\n return items;\n }\n }\n return items;\n }\n\n\n static insertCol(ss: SelectionState, insertColIndex: number): void {\n const startCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);\n if (!startCell?.parent) {\n throw new Error('parent is null')\n }\n const startRow = startCell.parent as TableRowElement;\n const tb = startRow.parent as TableElement;\n const currColIndex = startCell.getIndex();\n const colsCount = tb.getColsCount();\n insertColIndex = insertColIndex < 0 ? 0 : insertColIndex;\n insertColIndex = insertColIndex > colsCount ? colsCount : insertColIndex;\n //插入列需要将之前列分割\n const insertColWidth = insertColIndex === colsCount ? tb.getCellWidth(colsCount - 1) : tb.getCellWidth(insertColIndex);\n const newColWidth = Math.floor(insertColWidth / 2);\n if (newColWidth < 20) {\n console.warn('插入列的最小宽度不能小于20,当前为:' + newColWidth)\n return;\n }\n for (let i = 0; i < tb.length; i++) {\n const row = tb.getChild<TableRowElement>(i)\n const newCell = new TableCellElement();\n if (insertColIndex === 0 || insertColIndex === colsCount) {\n row.addChild(newCell, insertColIndex);\n continue;\n }\n const focusCell = row.getChild<TableCellElement>(insertColIndex);\n if (focusCell) {\n if (focusCell.props.hMerge === 'continue') {\n //获取合并行的最后的行索引\n const hMergeEndColIndex = this.getHMergeEndIndex(tb, i, currColIndex);\n if (hMergeEndColIndex > insertColIndex || (hMergeEndColIndex === insertColIndex && currColIndex < insertColIndex)) {\n newCell.props.hMerge = 'continue';\n }\n } else if (focusCell.props.hMerge === 'restart' && currColIndex > insertColIndex) {\n newCell.props.hMerge = 'continue';\n }\n }\n row.addChild(newCell, insertColIndex);\n }\n\n tb.setCellWidth(insertColIndex === colsCount ? insertColIndex - 1 : insertColIndex, insertColWidth - newColWidth);\n tb.insertCol(insertColIndex, newColWidth);\n tb.pubOnChange('self');\n tb.refreshView();\n }\n\n static insertRow(ss: SelectionState, insertRowIndex: number): TableRowElement {\n const startCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);\n if (!startCell?.parent) {\n throw new Error('parent is null')\n }\n const startRow = startCell.parent as TableRowElement;\n const tb = startRow.parent as TableElement;\n const currRowIndex = startRow.getIndex();\n insertRowIndex = insertRowIndex < 0 ? 0 : insertRowIndex;\n insertRowIndex = insertRowIndex > tb.length ? tb.length : insertRowIndex;\n const newRow = TableRowElement.createRow(tb.getColsCount());\n //新行插在第一行或者最后一行\n if (insertRowIndex === 0 || insertRowIndex === tb.length) {\n tb.addChild(newRow, insertRowIndex);\n tb.refreshView();\n return newRow;\n }\n const destRow = tb.getChild(insertRowIndex) as TableRowElement;\n for (let i = 0; i < destRow.length; i++) {\n const destCell = destRow.getChild(i) as TableCellElement;\n const newCell = newRow.getChild(i) as TableCellElement;\n //如果当前单元格是普通单元格或者合并列的最后一个单元格,则不做处理\n if (destCell.props.vMerge === 'continue') {\n //获取合并列的最后的行索引\n const vMergeEndRowIndex = this.getVMergeEndIndex(tb, insertRowIndex, i);\n if (vMergeEndRowIndex > insertRowIndex || (vMergeEndRowIndex === insertRowIndex && currRowIndex < insertRowIndex)) {\n newCell.props.vMerge = 'continue';\n //newCell.cellProps.hMerge = destCell.cellProps.hMerge;\n }\n } else if (destCell.props.vMerge === 'restart' && currRowIndex > insertRowIndex) {\n //在上方新增行,目标行单元格属于合并的起点\n newCell.props.vMerge = 'continue';\n //newCell.cellProps.hMerge = destCell.cellProps.hMerge;\n }\n\n }\n tb.addChild(newRow, insertRowIndex);\n tb.refreshView();\n return newRow;\n }\n\n /**\n * 在下方插入行\n */\n static insertRowBelow(ss: SelectionState): void {\n const startCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);\n if (!startCell?.parent) {\n throw new Error('parent is null')\n }\n const startRow = startCell.parent as TableRowElement;\n const currRowIndex = startRow.getIndex();\n this.insertRow(ss, currRowIndex + 1);\n }\n\n /**\n * 在上方插入行\n */\n static insertRowAbove(ss: SelectionState): void {\n const startCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);\n if (!startCell?.parent) {\n throw new Error('parent is null')\n }\n const startRow = startCell.parent as TableRowElement;\n const currRowIndex = startRow.getIndex();\n this.insertRow(ss, currRowIndex);\n }\n\n /**\n * 在右侧插入列\n */\n static insertColToRight(ss: SelectionState): void {\n const startCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);\n if (!startCell?.parent) {\n throw new Error('parent is null')\n }\n const currColIndex = startCell.getIndex();\n this.insertCol(ss, currColIndex + 1);\n }\n\n /**\n * 在左侧插入列\n */\n static insertColToLeft(ss: SelectionState): void {\n const startCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);\n if (!startCell?.parent) {\n throw new Error('parent is null')\n }\n const currColIndex = startCell.getIndex();\n this.insertCol(ss, currColIndex);\n }\n\n /**\n * 跳转到下一个单元格中\n * @param ss\n */\n static moveNextCell(ss: SelectionState): void {\n const startCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);\n if (!startCell?.parent) {\n throw new Error('parent is null')\n }\n const rowIndex = startCell.parent.getIndex();\n const nextCell = this.getNextCell(ss);\n if (nextCell) {\n ss.resetRange(nextCell, 0);\n nextCell.refreshView();\n return;\n }\n //新增行,并定位\n const newRow = this.insertRow(ss, rowIndex + 1);\n ss.resetRange(newRow, 0);\n newRow.refreshView();\n }\n\n\n /**\n * 获取下一个可定位的单元格\n * @param ss\n * @returns\n */\n static getNextCell(ss: SelectionState): TableCellElement | undefined {\n const startCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);\n if (!startCell?.parent) {\n throw new Error('parent is null')\n }\n const rowIndex = startCell.parent.getIndex();\n const colIndex = startCell.getIndex();\n const tb = startCell.parent.parent as TableElement;\n for (let i = rowIndex; i < tb.length; i++) {\n let j = i === rowIndex ? colIndex + 1 : 0;\n const currRow = tb.getChild(i) as TableRowElement;\n for (; j < tb.getColsCount(); j++) {\n const currCell = currRow.getChild(j) as TableCellElement;\n if (currCell.isNotBeMergedCell()) {\n return currCell;\n }\n }\n }\n //throw new Error('getNextCell is null')\n }\n\n /**\n * 当前光标是否在最后一个单元格中\n */\n static isLastVisiableCell(ss: SelectionState): boolean {\n return !this.getNextCell(ss);\n }\n\n\n /**\n * 移除当前table\n */\n static removeTable(ss: SelectionState): void {\n const tb = ElementUtil.getParentByType(ss.startControl, TableElement);\n if (!tb) {\n console.warn('当前位置不存在表格');\n return;\n }\n tb.parent.refreshView();\n tb.remove();\n }\n\n /**\n * 设置表格单元格对角线\n * @param ss\n * @param diagonal\n * @returns\n */\n static setTableCellDiagonal(ss: SelectionState, diagonal: 'main' | 'sub'): void {\n const tc = ElementUtil.getParentByType(ss.startControl, TableCellElement);\n if (!tc) {\n console.warn('当前位置不存在表格');\n return\n }\n if (!tc.props.diagonal || tc.props.diagonal !== diagonal) {\n tc.props.diagonal = diagonal;\n } else if (tc.props.diagonal === diagonal) {\n tc.props.diagonal = null;\n }\n tc.refreshView();\n }\n\n /**\n * 将当前表格截断成两个相邻的表格\n * @param tb\n * @param rowIndex\n */\n static cutTable(tb: TableElement, rowIndex: number): void {\n if (rowIndex === 0 || rowIndex === tb.length - 1) {\n return;\n }\n const newTb = tb.clone(false) as TableElement;\n const len = tb.length - 1;\n while (len > rowIndex) {\n const child = tb.getChild(len);\n newTb.addChild(child.clone(true), 0);\n tb.removeChild(child);\n }\n if (newTb.length > 0) {\n tb.parent.addChild(newTb, tb.getIndex() + 1);\n }\n }\n\n /**\n * 获取表格选区区域最大的矩形区域\n * @param tb\n * @param startCell\n * @param endCell\n * @returns\n */\n static getTableRectSelectedRegion(tb: TableElement, startCell: TableCellElement, endCell: TableCellElement): ITableSelectedRegion {\n let startRow = startCell.parent.getIndex();\n let startCol = startCell.getIndex();\n let endRow = endCell.parent.getIndex();\n let endCol = endCell.getIndex();\n if (startRow > endRow) {\n [endRow, startRow] = [startRow, endRow];\n }\n if (startCol > endCol) {\n [endCol, startCol] = [startCol, endCol];\n }\n for (let i = startRow; i <= endRow; i++) {\n const row = tb.getChild(i) as TableRowElement;\n for (let j = startCol; j <= endCol; j++) {\n const cell = row.getChild(j) as TableCellElement;\n const { hMerge, vMerge } = cell.props;\n if (hMerge === 'continue') {\n const startColIndex = TableUtil.getHMergeStartIndex(tb, i, j);\n const endColIndex = TableUtil.getHMergeEndIndex(tb, i, j);\n startCol = Math.min(startCol, startColIndex);\n endCol = Math.max(endCol, endColIndex);\n }\n if (vMerge === 'continue') {\n const startRowIndex = TableUtil.getVMergeStartIndex(tb, i, j);\n const endRowIndex = TableUtil.getVMergeEndIndex(tb, i, j);\n startRow = Math.min(startRow, startRowIndex);\n endRow = Math.max(endRow, endRowIndex);\n }\n if (vMerge === 'restart') {\n const rowIndex = TableUtil.getVMergeEndIndex(tb, i, j);\n if (rowIndex > endRow) {\n endRow = rowIndex;\n }\n }\n if (hMerge === 'restart') {\n const colIndex = TableUtil.getHMergeEndIndex(tb, i, j);\n if (colIndex > endCol) {\n endCol = colIndex;\n }\n }\n }\n }\n return { startRow, endRow, startCol, endCol }\n }\n}\n\n\nexport interface ITableSelectedRegion {\n startRow: number;\n endRow: number;\n startCol: number;\n endCol: number;\n}","import {\n BlockContainerElement,\n Element,\n ElementFactory,\n Position,\n SerializeProps,\n ViewOptions\n} from \"../../element-define\";\nimport {ContentMenuItem, ContextMenuElementEvent, KeyboradElementEvent} from \"../../element-event-define\";\nimport {TableProps} from \"../../element-props\";\nimport {ElementUtil} from \"../../element-util\";\nimport {RenderContextType} from \"../../render-context\";\nimport {IRenderData, MuiltBlockLineRenderObject, RenderObject} from \"../../render-define\";\nimport {ParagraphElement, ParagraphRenderObject} from \"../paragraph/p-impl\";\nimport {TableCellRenderObject} from \"./table-cell-impl\";\nimport {TableRowElement, TableRowRenderObject} from \"./table-row-impl\";\nimport {TableSplitCell} from \"./table-split-cell\";\nimport {TableUtil} from \"./table-util\";\n\nexport class TableElement extends BlockContainerElement<TableProps> {\n //props: TableProps;\n private _actualColsProps!: Array<IColsData> | null;\n\n constructor() {\n super('tb');\n this.props = new TableProps();\n this.addEvent<KeyboradElementEvent>('ElementKeyDown', (evt) => {\n //console.log('表格ElementKeyDown', evt);\n const sourceEvent = evt.sourceEvent;\n //按下tab键\n if (sourceEvent.keyCode === 9 && !sourceEvent.shiftKey) {\n evt.isCancel = true;\n sourceEvent.preventDefault();\n TableUtil.moveNextCell(evt.selectionState);\n }\n }, true);\n }\n\n /**\n * 获取实际测量的宽度,将auto、百分比列宽度进行转化为 number 类型\n */\n get actualColsProps() {\n if (!this._actualColsProps) {\n const colsData: Array<IColsData> = [];\n const cols = calcTableCols(this);\n cols.reduce((pre, cur) => {\n colsData.push({\n width: cur,\n offset: pre\n });\n return pre + cur;\n }, 0)\n this._actualColsProps = colsData;\n }\n return this._actualColsProps;\n }\n\n getCellWidth(cellIndex: number): number {\n if (cellIndex >= this.actualColsProps.length || cellIndex < 0) {\n return -1;\n }\n return this.actualColsProps[cellIndex].width;\n }\n\n getCellOffsetX(cellIndex: number): number {\n return this.actualColsProps[cellIndex].offset;\n }\n\n setCellWidth(cellIndex: number, width: number): void {\n //this.actualColsProps[index].width = width;\n if (cellIndex >= this.actualColsProps.length || cellIndex < 0) {\n return;\n }\n const cols = [...this.props.cols];\n cols[cellIndex] = width;\n this.props.cols = cols\n }\n\n /**\n * 插入列的定义\n * @param index\n * @param width\n */\n insertCol(index: number, width: number | string): void {\n const cols = [...this.props.cols];\n cols.splice(index, 0, width);\n this.props.cols = cols;\n this._actualColsProps = null;\n }\n\n /**\n * 移除列的定义\n * @param index\n */\n removeCol(index: number): void {\n const cols = [...this.props.cols];\n cols.splice(index, 1);\n this.props.cols = cols;\n }\n\n getColsCount(): number {\n return this.actualColsProps.length;\n }\n\n clone(data: boolean): Element {\n const clone = new TableElement();\n this.props.clone(clone.props);\n if (data) {\n for (let i = 0; i < this.length; i++) {\n clone.addChild(this.getChild(i).clone(true));\n }\n }\n return clone;\n }\n\n createRenderObject(options: ViewOptions, renderCtx: RenderContextType): RenderObject {\n return new TableRenderObject(this);\n }\n\n beginMeasure(): void {\n super.beginMeasure();\n this._actualColsProps = null;\n }\n\n\n serialize(options: ViewOptions): SerializeProps {\n //this.props.width = this.measureRender?.rect.width as number;\n const props = {\n type: 'tb',\n props: {...this.props.getSerializeProps(options)}\n }\n props.props.width = this.measureRender?.rect.width as number;\n return props;\n }\n\n static createTable(rows: number, cols: number): TableElement {\n const table = new TableElement();\n const tbProps = new TableProps();\n table.props = tbProps;\n tbProps.border = 'all';\n tbProps.cols = [];\n for (let i = 0; i < cols; i++) {\n tbProps.cols.push(\"1\");\n }\n for (let i = 0; i < rows; i++) {\n table.addChild(TableRowElement.createRow(cols));\n }\n return table;\n }\n}\n\n\nexport class TableRenderObject extends MuiltBlockLineRenderObject<TableElement> {\n setRenderWidth(maxWidth: number): void {\n super.setRenderWidth(maxWidth);\n }\n\n render(e: IRenderData): void {\n const {render, position} = e;\n //绘制表格线\n if (this.element.props.border !== 'all') {\n return;\n }\n for (let i = 0; i < this.length; i++) {\n const rowRender = this.getChild(i) as TableRowRenderObject;\n const rowPos: Position = {x: rowRender.rect.x + position.x, y: rowRender.rect.y + position.y};\n for (let j = 0; j < rowRender.length; j++) {\n const cellRender = rowRender.getChild(j) as TableCellRenderObject;\n const cellPos: Position = {x: cellRender.rect.x + rowPos.x, y: cellRender.rect.y + rowPos.y};\n //绘制单元格上边框\n if (i === 0) {\n //ctx.contentContext.fillRect(cellPos.x, cellPos.y, cellRender.rect.width, 1);\n render.contentContext.fillLines([{x: cellPos.x, y: cellPos.y}, {\n x: cellPos.x + cellRender.rect.width,\n y: cellPos.y\n }]);\n //this.drawLine(ctx, { x: cellPos.x, y: cellPos.y }, { x: cellPos.x + cellRender.rect.width, y: cellPos.y });\n }\n //绘制左边框\n if (j === 0) {\n //ctx.contentContext.fillRect(cellPos.x, cellPos.y, 1, cellRender.rect.height);\n render.contentContext.fillLines([{x: cellPos.x, y: cellPos.y}, {\n x: cellPos.x,\n y: cellPos.y + cellRender.rect.height\n }]);\n //this.drawLine(ctx, { x: cellPos.x, y: cellPos.y }, { x: cellPos.x, y: cellPos.y + cellRender.rect.height });\n }\n //绘制右边框\n //ctx.contentContext.fillRect(cellPos.x + cellRender.rect.width, cellPos.y, 1, cellRender.rect.height);\n render.contentContext.fillLines([{\n x: cellPos.x + cellRender.rect.width,\n y: cellPos.y\n }, {x: cellPos.x + cellRender.rect.width, y: cellPos.y + cellRender.rect.height}]);\n //this.drawLine(ctx, { x: cellPos.x + cellRender.rect.width, y: cellPos.y }, { x: cellPos.x + cellRender.rect.width, y: cellPos.y + cellRender.rect.height });\n //绘制下边框\n //ctx.contentContext.fillRect(cellPos.x, cellPos.y + cellRender.rect.height, cellRender.rect.width, 1);\n render.contentContext.fillLines([{\n x: cellPos.x,\n y: cellPos.y + cellRender.rect.height\n }, {x: cellPos.x + cellRender.rect.width, y: cellPos.y + cellRender.rect.height}]);\n //this.drawLine(ctx, { x: cellPos.x, y: cellPos.y + cellRender.rect.height }, { x: cellPos.x + cellRender.rect.width, y: cellPos.y + cellRender.rect.height });\n //cellRender.beginRender(ctx, { x: position.x + cellRender.offsetX, y: position.y + cellRender.offsetY });\n }\n }\n }\n\n clone(): RenderObject {\n const cloneRender = new TableRenderObject(this.element);\n cloneRender.rect = ElementUtil.cloneRect(this.rect);\n for (let i = 0; i < this.length; i++) {\n cloneRender.addChild(this.getChild(i).clone());\n }\n return cloneRender;\n }\n}\n\n\nexport class TableFactory extends ElementFactory<TableProps> {\n match(type: string): boolean {\n return type === 'tb';\n }\n\n createElement(data: any, renderCtx: RenderContextType): Element {\n const props = data.props as TableProps;\n const tb = new TableElement();\n const cols = props.cols;\n const tbProps = tb.props;\n tbProps.border = props.border || 'all';\n tbProps.cols = [];\n tbProps.id = tb.props.id;\n tbProps.alignment = props.alignment;\n for (const col of cols) {\n if (typeof col === 'object') {\n tbProps.cols.push((<any>col).width);\n } else {\n tbProps.cols.push(col);\n }\n }\n tb.props = tbProps;\n return tb;\n }\n\n}\n\n/**\n * 行-表格渲染模式\n */\nexport function textLineRenderMode(ele: TableElement, options: ViewOptions, renderCtx: RenderContextType): boolean {\n const tb = ele.measureRender as TableRenderObject;\n const rows: Array<TableRowRenderObject> = []\n for (let i = 0; i < tb.length; i++) {\n const row = tb.getChild(i) as TableRowRenderObject;\n //表格头不做处理\n if ((<TableRowElement>row.element).props.headerRow) {\n continue;\n }\n rows.push(row);\n }\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n //获取当前行的文字行数\n const maxLinesCount = getRowMaxTextLines(row);\n if (maxLinesCount > 1) {\n for (let j = 1; j < maxLinesCount; j++) {\n const newRow = row.element.createRenderObject() as TableRowRenderObject;\n newRow.rect = ElementUtil.cloneRect(row.rect);\n tb.insertChild(newRow, row.getIndex() + 1);\n //复制行文字到新行中\n for (let k = 0; k < row.length; k++) {\n const cell = row.getChild(k) as TableCellRenderObject;\n const newCell = cell.element.createRenderObject(options, renderCtx) as TableCellRenderObject\n newCell.rect = ElementUtil.cloneRect(cell.rect);\n if (newCell) {\n newRow.addChild(newCell)\n }\n }\n }\n }\n splitTextlineToNewRow(row, maxLinesCount, options, renderCtx);\n }\n ElementUtil.remeasure(tb);\n return true;\n}\n\n/**\n * 获取当前行的文字行数\n * @param row\n * @returns\n */\nfunction getRowMaxTextLines(row: TableRowRenderObject): number {\n let count = 0;\n for (let j = 0; j < row.length; j++) {\n const cell = row.getChild(j) as TableCellRenderObject;\n let cellMaxLines = 0;\n for (let k = 0; k < cell.length; k++) {\n const paraRender = cell.getChild(k) as ParagraphRenderObject;\n cellMaxLines += paraRender.length;\n }\n count = cellMaxLines > count ? cellMaxLines : count;\n }\n return count;\n}\n\n/**\n * 将多行文本移动到新行中\n * @param row\n * @param maxLinesCount\n * @returns\n */\nfunction splitTextlineToNewRow(row: TableRowRenderObject, maxLinesCount: number, options: ViewOptions, renderCtx: RenderContextType): void {\n if (maxLinesCount === 1) {\n return;\n }\n for (let i = 0; i < row.length; i++) {\n const cell = row.getChild(i) as TableCellRenderObject;\n const paraLines = ElementUtil.getCellParaLines(cell);\n if (paraLines.length === 1) {\n continue;\n }\n for (let j = 1; j < paraLines.length; j++) {\n const outterLineRect = paraLines[j];\n const paraRender = outterLineRect.parent as ParagraphRenderObject;\n\n const newParaRender = paraRender.element.createRenderObject(options, renderCtx) as ParagraphRenderObject;\n newParaRender.rect = ElementUtil.cloneRect(paraRender.rect);\n\n const newOutterLineRect = outterLineRect.clone();\n newOutterLineRect.rect = ElementUtil.cloneRect(outterLineRect.rect);\n newParaRender.addChild(newOutterLineRect);\n\n paraRender.removeChild(outterLineRect);\n ElementUtil.remeasure(paraRender);\n\n if (paraRender.length === 0) {\n cell.removeChild(paraRender);\n }\n const splitRow = row.parent.getChild(row.getIndex() + j) as TableRowRenderObject;\n const splitCell = splitRow.getChild(i) as TableCellRenderObject;\n splitCell.addChild(newParaRender);\n ElementUtil.remeasure(newParaRender);\n }\n }\n const tb = row.parent as TableRenderObject;\n const rowIndex = row.getIndex();\n for (let i = 0; i < maxLinesCount; i++) {\n const row = tb.getChild(rowIndex + i) as TableRowRenderObject;\n for (let j = 0; j < row.length; j++) {\n const cell = row.getChild(j) as TableCellRenderObject;\n ElementUtil.remeasure(cell);\n }\n ElementUtil.remeasure(row);\n }\n}\n\n\n/**\n * 计算表格列\n */\nfunction calcTableCols(element: TableElement): Array<number> {\n const percentCols: Array<string | number> = [];\n let sum = 0;\n let percentSum = 0;\n for (const col of element.props.cols) {\n if (typeof col === 'string') {\n percentCols.push(col);\n percentSum += Number.parseFloat(col);\n } else {\n percentCols.push(col);\n sum += col;\n }\n }\n const measureRender = element.measureRender as RenderObject;\n const tbWidth = measureRender.rect.maxWidth as number;\n const remainWidth = tbWidth - sum;\n const ratio = remainWidth / percentSum;\n for (let i = 0; i < percentCols.length; i++) {\n const width = percentCols[i];\n if (typeof width === 'string') {\n percentCols[i] = Math.floor(Number.parseFloat(width) * ratio);\n }\n }\n return percentCols as Array<number>;\n}\n\ninterface IColsData {\n width: number;\n offset: number;\n}\n\n\ninterface tbProps {\n cols: Array<{ width: number }>\n}\n\n\n","import { TextProps } from \"../../element-props\";\nimport { ElementUtil } from \"../../element-util\";\nimport { IRenderData, LeafRenderObject, RenderObject } from \"../../render-define\";\nimport { LeafElement, ElementFactory, Element, SerializeProps, ViewOptions, ModifyFlag } from \"../../element-define\";\nimport { watchChanged } from \"../../notify\";\nimport { RenderContextType, TextUnits } from \"../../render-context\";\nimport * as History from '../../element-trace-tracking'\n\n\nexport class TextGroupElement extends LeafElement<TextProps> {\n //props: TextProps;\n textMeasures: Array<TextUnits> = [];\n isMeasure: boolean = false;\n\n constructor() {\n super('text');\n this.props = new TextProps();\n watchChanged(this.props, () => {\n this.isMeasure = false;\n this.props.clearCache();\n });\n }\n\n set text(val: string) {\n this.splice(0, this.textMeasures.length, val);\n }\n\n splice(index: number, deleteCount: number, addText: string | null = null): Array<TextUnits> {\n const deletItems: Array<TextUnits> = [];\n if (deleteCount) {\n const removeChars = this.textMeasures.splice(index, deleteCount);\n History.removeText(this, index, deleteCount, removeChars.map(item => item.char).join(''));\n deleteCount = 0;\n deletItems.push(...removeChars);\n }\n this.isMeasure = false;\n addText = addText ?? '';\n History.inputText(this, index, addText);\n const addTextUnits = addText.split('').map(char => ({ sourceSize: 0, actualSize: 0, char }));\n if (this.textMeasures.length === 0) {\n this.textMeasures = addTextUnits;\n } else {\n this.textMeasures.splice(index, deleteCount, ...addTextUnits);\n }\n this.pubOnChange('self');\n return deletItems;\n }\n\n get text() {\n return this.textMeasures.map(item => item.char).join('');\n }\n\n createRenderObject(options: ViewOptions, renderCtx: RenderContextType): RenderObject {\n if (!this.isMeasure || this.modifyFlag !== ModifyFlag.None) {\n renderCtx.contentContext.measureTextUnits(this.textMeasures, this.props);\n this.isMeasure = true;\n }\n const render = new TextGroupRenderObject(this);\n render.disableClick = this.disableClick;\n render.textMeasures = [...this.textMeasures];\n render.measure();\n return render;\n }\n\n serialize(viewOptions: ViewOptions): SerializeProps & any {\n //修饰元素不序列化\n if (this.isDecorate) {\n return null;\n }\n return {\n type: 'text',\n props: {\n ...this.props.getSerializeProps(viewOptions)\n },\n content: this.text,\n complete: true\n }\n }\n\n clone(data: boolean): TextGroupElement {\n const clone = new TextGroupElement();\n this.props.clone(clone.props);\n clone.text = this.text;\n return clone;\n }\n\n destroy(): void {\n super.destroy();\n }\n\n spliceText(startOffset: number, endOffset: number, xCopy: boolean): TextGroupElement | null {\n endOffset = endOffset === -1 ? this.textMeasures.length : endOffset;\n if (endOffset === startOffset) {\n return null;\n }\n const clone = new TextGroupElement();\n this.props.clone(clone.props);\n if (xCopy) {\n //clone.textMeasures = this.textMeasures.splice(startOffset, endOffset - startOffset);\n clone.textMeasures = this.splice(startOffset, endOffset - startOffset);\n } else {\n clone.textMeasures = this.textMeasures.filter((item, index) => index >= startOffset && index < endOffset);\n }\n clone.textMeasures = clone.textMeasures.map(item => ({ sourceSize: 0, actualSize: 0, char: item.char }));\n return clone;\n }\n\n /**\n * 修改样式\n * @param format\n */\n setFormat(format: Partial<TextProps>): void {\n History.formatEle(this, format);\n Object.keys(format).forEach(key => {\n this.props[key] = format[key];\n })\n }\n\n clearTextCache(): void {\n this.isMeasure = false;\n }\n}\n\n\nexport class TextGroupRenderObject extends LeafRenderObject<TextGroupElement> {\n textMeasures!: Array<TextUnits>;\n\n render(e: IRenderData): void {\n const { render, position } = e;\n //null-text不打印\n if (render.drawMode === 'print' && this.element.isDecorate) {\n return;\n }\n if (this.element.props.border) {\n render.contentContext.strokeRect(position.x, position.y, this.rect.width, this.rect.height);\n }\n render.contentContext.drawTextUnits(this, position.x, position.y);\n // if (this.element.isMouseenter) {\n // ctx.overlaysContext.strokeRect(position.x, position.y, this.rect.width, this.rect.height, CommonUtil.randomColor());\n // }\n\n }\n\n constructor(element: TextGroupElement) {\n super(element);\n }\n\n clone(): RenderObject {\n const cloneRender = new TextGroupRenderObject(this.element);\n cloneRender.disableClick = this.disableClick;\n cloneRender.rect = ElementUtil.cloneRect(this.rect);\n cloneRender.textMeasures = [...this.textMeasures];\n //FIX:数据元中包含NullText时,在复制Render后,由于NullText对应的Element不在元素树中,因此NullTextRender\n //在渲染时会不断的Push到PaintRenders中,导致内存泄露\n if (this.element && this.element.isDecorate && this.element.disableClick) {\n this.element.paintRenders.length = 0;\n }\n return cloneRender;\n }\n\n measure(): void {\n this.rect.width = this.textMeasures.reduce((prev, curr) => prev + curr.actualSize, 0);\n this.rect.height = this.element.props.fontSize;\n }\n}\n\nexport class TextGroupFactory extends ElementFactory<null> {\n match(type: string): boolean {\n return type === 'text';\n }\n\n createElement(data: any, renderCtx: RenderContextType): Element {\n const props = data.props as TextProps;\n const text = data.content as string;\n const textGroup = new TextGroupElement();\n textGroup.text = text;\n ElementUtil.readTextProps(textGroup.props, props, this.options);\n return textGroup;\n }\n\n}\n","import { CommonUtil } from \"./common-util\";\nimport { SelectionState } from \"./document-selection\";\nimport { BranchElement, Element, SerializeProps, ViewOptions } from \"./element-define\";\nimport { ElementUtil } from \"./element-util\";\nimport { validateDataEle } from \"./impl/data-element/data-element-base-impl\";\nimport { TextGroupElement } from \"./impl/text/text-impl\";\nimport { TrackRunElement, TrackRunTypeEnum } from \"./impl/text/track-run-impl\";\n\nexport class ElementSerialize {\n static serialize(element: Element, viewOptions: ViewOptions): SerializeProps | null {\n if (element instanceof BranchElement) {\n const result = element.serialize(viewOptions);\n if (!result || result.complete) {\n return result;\n }\n result.children = [];\n let prevEle: { ele: Element, props: any } | null = null;\n for (let i = 0; i < element.length; i++) {\n const child = element.getChild(i);\n const serializeChild = this.serialize(child, viewOptions);\n if (child.type === 'text' && prevEle && prevEle.ele.type === 'text') {\n if ((<TextGroupElement>child).props.equals((<TextGroupElement>prevEle.ele).props)) {\n prevEle.props.content += (<any>serializeChild).content;\n continue;\n }\n }\n if (serializeChild) {\n delete serializeChild.complete;\n serializeChild.props = serializeChild.props || {};\n if (child.props && child.props['__attachedProperty']) {\n serializeChild.props['__attachedProperty'] = CommonUtil.cloneValue(child.props['__attachedProperty']);\n }\n if (Object.keys(serializeChild.props).length === 0) {\n delete serializeChild.props\n }\n if (serializeChild.children && serializeChild.children.length === 0) {\n delete serializeChild.children;\n }\n result.children.push(serializeChild);\n prevEle = { ele: child, props: serializeChild };\n }\n }\n return result;\n } else {\n return element.serialize(viewOptions);\n }\n }\n\n\n\n\n static serializeString(element: Element, options: { all: boolean } = { all: false }): string {\n if (!options.all && element instanceof TrackRunElement && element.type === TrackRunTypeEnum.Deleted) {\n return '';\n }\n if (element instanceof TextGroupElement && !element.isDecorate) {\n return element.text;\n }\n if (element instanceof BranchElement) {\n const items: Array<string> = [];\n for (let i = 0; i < element.length; i++) {\n const item = element.getChild(i);\n items.push(this.serializeString(item, options));\n }\n return items.join('');\n }\n return \"\";\n }\n\n\n /**\n * 获取选中的结构\n * @param ss\n * @param viewOptions\n */\n static getSelectedStruct(ss: SelectionState, viewOptions: ViewOptions): Element | null {\n if (ss.collapsed || !ss.startControl || !ss.selectedRange) {\n return null;\n }\n const range = ss.selectedRange;\n return ElementUtil.cloneRange(range, false, 'copy');\n }\n\n /**\n * 选中的文本\n * @param ss\n * @param viewOptions\n */\n static getSelectedText(ss: SelectionState, viewOptions: ViewOptions): string {\n const selectedStruct = this.getSelectedStruct(ss, viewOptions) as BranchElement;\n if (selectedStruct) {\n return this.serializeString(selectedStruct,);\n } else {\n return '';\n }\n }\n\n static getSelectedJSON(ss: SelectionState, viewOptions: ViewOptions): string {\n const selectedStruct = this.getSelectedStruct(ss, viewOptions) as BranchElement;\n if (selectedStruct) {\n return JSON.stringify(this.serialize(selectedStruct, viewOptions));\n } else {\n return '';\n }\n }\n\n /**\n * 遍历指定元素内部所有数据元列表\n */\n static getDataElements(element: BranchElement): Array<Element> {\n const array: Array<Element> = [];\n for (let i = 0; i < element.length; i++) {\n const item = element.getChild(i);\n if (validateDataEle(item)) {\n array.push(item);\n continue;\n }\n if (item instanceof BranchElement) {\n array.push(...this.getDataElements(item))\n }\n }\n return array;\n }\n\n\n\n}\n\nexport interface DataElementValueStruct {\n id: string,\n name: string,\n value: string\n}\n","import {\n InlineGroupElement,\n Position,\n SerializeProps,\n ViewOptions,\n Element,\n ElementFactory, readElementProps\n} from \"../../element-define\";\nimport {RenderContextType} from \"../../render-context\";\nimport {InlineGroupRenderObject, IRenderData, RenderObject} from \"../../render-define\";\nimport {TrackRunProps} from \"../../element-props\";\nimport {ElementUtil} from \"../../element-util\";\nimport {ElementSerialize} from \"../../element-serialize\";\nimport {GetTrackTipsEvent} from \"../../element-event-define\";\nimport {nanoid} from \"nanoid\";\n\nexport enum TrackRunTypeEnum {\n Inserted = 'ins-run',\n Deleted = 'del-run',\n}\n\ntype NullableType<T> = T | null;\n\nexport class TrackRunElement extends InlineGroupElement<TrackRunProps> {\n constructor(trackType: TrackRunTypeEnum) {\n super(trackType);\n this.props = new TrackRunProps(trackType);\n this.addEvent<GetTrackTipsEvent>('GetTrackTips', (evt) => {\n evt.trackTips = {\n trackRunType: this.type as TrackRunTypeEnum,\n name: this.props.userName,\n date: this.props.date,\n content: ElementSerialize.serializeString(this, {all: true})\n };\n console.log(evt.trackTips.content);\n\n evt.isCancel = true;\n });\n }\n\n clone(data: boolean): Element {\n const clone = new TrackRunElement(this.type as TrackRunTypeEnum);\n this.props.clone(clone.props);\n if (data) {\n const length = this.length;\n for (let i = 0; i < length; i++) {\n clone.addChild(this.getChild(i).clone(true));\n }\n }\n return clone;\n }\n\n createRenderObject(options: ViewOptions, renderCtx: RenderContextType): NullableType<RenderObject> {\n if (!options.showTrackChanges && this.type === TrackRunTypeEnum.Deleted) {\n return null;\n }\n return new TrackRunRenderObject(this);\n }\n\n serialize(viewOptions: ViewOptions): SerializeProps | null {\n return {\n type: this.type,\n props: this.props.getSerializeProps()\n };\n }\n\n split(index: number): TrackRunElement | null {\n if (index === 0 || index === this.length) {\n return null;\n }\n const clone = new TrackRunElement(this.type as TrackRunTypeEnum);\n this.props.clone(clone.props);\n const items: Array<Element> = [];\n for (let i = index; i < this.length; i++) {\n const child = this.getChild(i);\n items.push(child);\n }\n items.forEach(item => {\n item.remove();\n clone.addChild(item);\n });\n return clone;\n }\n}\n\nexport class TrackRunRenderObject extends InlineGroupRenderObject<TrackRunElement> {\n constructor(ele: TrackRunElement) {\n super(ele);\n }\n\n render(e: IRenderData): void {\n const {render, position, docCtx: {viewOptions}} = e;\n render.tran(() => {\n let fillColor = viewOptions.showTrackChanges ? this.element.type === 'ins-run' ? viewOptions.trackInsColor : viewOptions.trackDelColor : '';\n if (fillColor) {\n render.contentContext.ctx.fillStyle = fillColor;\n }\n e.nextRender();\n });\n const {x, y} = position;\n //不显示痕迹\n if (!viewOptions.showTrackChanges) {\n return;\n }\n const color = this.element.type === 'ins-run' ? 'green' : 'red';\n for (let i = 0; i < this.length; i++) {\n const childRender = this.getChild(i);\n const {rect} = childRender;\n if (childRender.element && childRender.element.type === 'del-run') {\n continue;\n }\n let lineY = y + rect.y + rect.height;\n lineY = this.element.type === 'ins-run' ? lineY : lineY - rect.height / 2;\n render.contentContext.drawHoriLine(x + rect.x, lineY, rect.width, color, 1);\n }\n }\n\n clone(): RenderObject {\n const cloneRender = new TrackRunRenderObject(this.element);\n cloneRender.rect = ElementUtil.cloneRect(this.rect);\n for (let i = 0; i < this.length; i++) {\n cloneRender.addChild(this.getChild(i).clone());\n }\n return cloneRender;\n }\n}\n\nexport class RunElementFactory extends ElementFactory<TrackRunProps> {\n\n createElement(data: readElementProps<TrackRunProps>, renderCtx: RenderContextType): TrackRunElement {\n const ele = new TrackRunElement(data.type as TrackRunTypeEnum);\n ele.props.userId = data.props?.userId ?? '';\n ele.props.userName = data.props?.userName ?? '';\n ele.props.date = data.props?.date ?? '';\n ele.props.id = data.props?.id ?? nanoid(5);\n return ele;\n }\n\n match(type: string): boolean {\n return type === TrackRunTypeEnum.Inserted || type === TrackRunTypeEnum.Deleted;\n }\n\n\n}\n\n","import {nanoid} from \"nanoid\";\nimport {EditorContext} from \"./document-context\";\nimport {\n BlockContainerElement,\n BranchElement,\n DocMode,\n Element,\n LeafElement,\n Position,\n Rect,\n SelectionContentRange,\n ViewOptions\n} from \"./element-define\";\nimport {HitRegion} from \"./element-event-define\";\nimport {DataEleBaseProps, TextProps} from \"./element-props\";\nimport {CommsContainerElement} from \"./impl/comments/comments-container-impl\";\nimport {DataElementInlineGroup} from \"./impl/data-element/data-element-base-impl\";\nimport {DocumentBodyElement} from \"./impl/document/doc-body-impl\";\nimport {DocumentFooterElement} from \"./impl/document/doc-footer-impl\";\nimport {DocumentHeaderElement} from \"./impl/document/doc-header-impl\";\nimport {DocumentRenderObject} from \"./impl/document/doc-impl\";\nimport {ParagraphElement, ParagraphLineRectRenderObject, ParagraphRenderObject} from \"./impl/paragraph/p-impl\";\nimport {PSymbolElement} from \"./impl/symbol/p-symbol-impl\";\nimport {TableCellElement, TableCellRenderObject} from \"./impl/table/table-cell-impl\";\nimport {TableElement, TableRenderObject} from \"./impl/table/table-impl\";\nimport {TableRowElement, TableRowRenderObject} from \"./impl/table/table-row-impl\";\nimport {TextGroupElement, TextGroupRenderObject} from \"./impl/text/text-impl\";\nimport {TrackRunElement, TrackRunTypeEnum} from \"./impl/text/track-run-impl\";\nimport {\n BlockContainerRenderObject,\n BlockContentRenderObject,\n BorderType,\n BranchRenderObject,\n CursorType,\n InlineGroupRenderObject,\n LeafRenderObject,\n RenderObject\n} from \"./render-define\";\n\n\ntype PAIR = { x: number, y: number };\n\nexport class ElementUtil {\n\n static setCanvasProps(canvas: HTMLCanvasElement, ctx: CanvasRenderingContext2D, viewOptions: { width: number, height: number }): void {\n // if (canvas instanceof OffscreenCanvas) {\n // this.setOffscreenCanvas(canvas, ctx as OffscreenCanvasRenderingContext2D, viewOptions, scale);\n // return\n // }\n const {width, height} = viewOptions;\n let dpr = window.devicePixelRatio || 1;\n dpr = Math.ceil(dpr);\n const scaleWidth = Math.floor(width * dpr) / dpr;\n const scaleHeight = Math.floor(height * dpr) / dpr;\n canvas.style.width = scaleWidth + 'px';\n canvas.style.height = scaleHeight + 'px';\n canvas.width = scaleWidth * dpr;\n canvas.height = scaleHeight * dpr;\n ctx.scale(dpr, dpr);\n }\n\n // static setOffscreenCanvas(canvas: OffscreenCanvas, ctx: OffscreenCanvasRenderingContext2D, viewOptions: { width: number, height: number }, scale: number = 1): void {\n\n // const { width, height } = viewOptions;\n // let dpr = window.devicePixelRatio || 1;\n // if (scale > 1) {\n // dpr *= scale;\n // }\n // dpr = Math.ceil(dpr);\n // const scaleWidth = Math.floor(width * dpr) / dpr;\n // const scaleHeight = Math.floor(height * dpr) / dpr;\n // canvas.width = scaleWidth * dpr;\n // canvas.height = scaleHeight * dpr;\n // ctx.scale(dpr, dpr);\n // }\n\n static getDprNumber(val: number, scale: number = 1): number {\n let dpr = window.devicePixelRatio || 1;\n if (scale > 1) {\n dpr *= scale;\n }\n dpr = Math.ceil(dpr);\n return Math.floor(val * dpr) / dpr\n }\n\n static readTextProps(dest: TextProps | null, props: TextProps | undefined, options: ViewOptions): TextProps {\n if (!props) {\n return this.createTextProps(dest, options);\n }\n const textProps = dest ?? new TextProps();\n //不需设置默认颜色,根据层级继承进行填充\n textProps.color = props.color;// || options.defaultColor;\n textProps.fontName = props.fontName || options.defaultFontName;\n textProps.fontSize = props.fontSize || options.defaultFontSize;\n textProps.border = props.border;\n if (props.fontWeight) {\n textProps.fontWeight = props.fontWeight;\n }\n if (props.fontStyle) {\n textProps.fontStyle = props.fontStyle;\n }\n if (props.underline) {\n textProps.underline = props.underline;\n }\n if (props.linethrough) {\n textProps.linethrough = props.linethrough;\n }\n if (props.overline) {\n textProps.overline = props.overline;\n }\n if (props.background) {\n textProps.background = props.background;\n }\n if (props.letterSpace) {\n textProps.letterSpace = props.letterSpace;\n }\n if (props.vertAlign) {\n textProps.vertAlign = props.vertAlign;\n }\n return textProps;\n }\n\n static readEleBaseProps(dest: DataEleBaseProps, props: DataEleBaseProps): DataEleBaseProps {\n dest.id = props.id ?? nanoid(5);\n dest.name = props.name;\n dest.caption = props.caption;\n dest.editable = props.editable ?? true;\n dest.fieldName = props.fieldName;\n dest.minLength = props.minLength;\n dest.printable = props.printable ?? true;\n dest.required = props.required;\n dest.secretBrowse = props.secretBrowse;\n dest.deleteable = props.deleteable;\n dest.underline = props.underline;\n dest.type = props.type;\n return dest;\n }\n\n /**\n * 获取内容区域最大高度\n * @param render\n * @param renderHeight\n * @returns\n */\n static innerRectMaxHeight(render: RenderObject, renderHeight: number): number {\n const {padding} = render;\n return renderHeight - padding.top - padding.bottom;\n }\n\n /**\n * 根据内框内容高度,更新外框框体高度\n * @param render\n * @param innerRect\n */\n static updateRenderHeightByInnerRect(render: RenderObject, innerRect: Rect): void {\n const {padding, margin} = render;\n //外层容器高度等于内容高度+外边距+内边距\n render.rect.height = innerRect.height + margin.top + margin.bottom + padding.top + padding.bottom;\n }\n\n /**\n * 设置块级元素限制尺寸\n * @param render\n * @param parentLimitRect\n */\n static setBlockElementLimitSize(render: BlockContainerRenderObject | BlockContentRenderObject, parentLimitRect: Rect): void {\n render.rect.x = parentLimitRect.x;\n render.rect.y = parentLimitRect.y + parentLimitRect.height;\n render.rect.width = parentLimitRect.maxWidth ?? 0;\n render.rect.maxWidth = parentLimitRect.maxWidth;\n if (parentLimitRect.maxHeight) {\n render.rect.maxHeight = parentLimitRect.maxHeight - parentLimitRect.height;\n }\n }\n\n /**\n * 克隆框体\n * @param rect\n * @returns\n */\n static cloneRect(rect: Rect): Rect {\n const cloneRect = new Rect();\n cloneRect.x = rect.x;\n cloneRect.y = rect.y;\n cloneRect.width = rect.width;\n cloneRect.height = rect.height;\n cloneRect.maxHeight = rect.maxHeight;\n cloneRect.maxWidth = rect.maxWidth;\n return cloneRect;\n }\n\n /**\n * 重新限定子元素以及当前高度值,并返回内边框内容高度\n * @param render\n * @param resetX 测量段落外框时,内框不需要重置x,因为内框已经存在对齐\n * @returns\n */\n static remeasure(render: BlockContainerRenderObject | BlockContentRenderObject, resetX = true): number {\n if (render.rect.width === 0) {\n return -1;\n }\n if (render instanceof TableRowRenderObject) {\n return this.remeasureTableRow(render);\n }\n if (render instanceof TableRenderObject) {\n this.setTableAlign(render);\n this.remeasureTableMerge(render);\n }\n const innerRect = render.getInnerRect();\n for (let i = 0; i < render.length; i++) {\n const line = render.getChild(i);\n if (resetX) {\n line.rect.x = innerRect.x;\n }\n line.rect.y = innerRect.height + innerRect.y + line.margin.top;\n line.rect.maxWidth = innerRect.maxWidth;\n innerRect.height += line.rect.height + line.margin.top + line.margin.bottom;\n }\n render.updateRenderHeight(innerRect);\n return innerRect.height;\n }\n\n static remeasureTableRow(rowRender: TableRowRenderObject, foreceColIndex = -1): number {\n const rowEle = rowRender.element as TableRowElement;\n const rowMinHeight = rowEle.props.minHeight > 19 ? rowEle.props.minHeight : 19;\n let maxCellheight = rowMinHeight;\n //限制行最小高度\n maxCellheight = maxCellheight < 19 ? 19 : maxCellheight;\n //获取行内非纵向合并单元格的最高单元格高度\n for (let i = 0; i < rowRender.length; i++) {\n const cellRender = rowRender.getChild(i);\n const {vMerge} = (<TableCellElement>cellRender.element).props;\n if (cellRender.rect.height > maxCellheight && (vMerge !== 'restart' || i === foreceColIndex)) {\n maxCellheight = cellRender.rect.height;\n }\n }\n //循环设置单元格高度为行内最大单元格高度\n for (let i = 0; i < rowRender.length; i++) {\n const cellRender = rowRender.getChild(i) as TableCellRenderObject;\n const cellElement = <TableCellElement>cellRender.element;\n const {vMerge} = cellElement.props;\n if ((vMerge !== 'restart' || i === foreceColIndex) || cellRender.rect.height < maxCellheight) {\n cellRender.rect.height = maxCellheight;\n }\n //处理单元格内容纵向居中\n this.measureCellVAlign(cellRender);\n }\n //设置行高\n rowRender.updateRenderHeight(maxCellheight);\n return maxCellheight;\n }\n\n /**\n * 获取表格行绘制元素的内容高度,用于缩放行高度时,获取最小内容高度,缩放的高度不能小于内容最小高度\n */\n static getTableRowRenderContentHeight(rowRender: TableRowRenderObject): number {\n const rowEle = rowRender.element as TableRowElement;\n let maxCellheight = 19;\n //限制行最小高度\n //获取行内非纵向合并单元格的最高单元格高度\n for (let i = 0; i < rowRender.length; i++) {\n const cellRender = rowRender.getChild(i) as TableCellRenderObject;\n const cellContentHeight = this.getTableCellRenderContentHeight(cellRender);\n const {vMerge} = (<TableCellElement>cellRender.element).props;\n if (cellContentHeight > maxCellheight && vMerge !== 'restart') {\n maxCellheight = cellContentHeight;\n }\n }\n return maxCellheight;\n }\n\n /**\n * 获取单元格内容高度\n * 单元格暂不处理上下margin、padding\n * @param cellRender\n * @returns\n */\n static getTableCellRenderContentHeight(cellRender: TableCellRenderObject): number {\n let contentHeight = 0;\n for (let i = 0; i < cellRender.length; i++) {\n contentHeight += cellRender.getChild(i).rect.height;\n }\n return contentHeight;\n }\n\n /**\n * 处理单元格内容纵向对齐\n * @param render\n */\n private static measureCellVAlign(render: TableCellRenderObject): void {\n const tcElement = render.element as TableCellElement;\n const {vAlign} = tcElement.props;\n if (!vAlign || vAlign === 'top') {\n return;\n }\n let sumHeight = 0;\n for (let i = 0; i < render.length; i++) {\n sumHeight += render.getChild(i).rect.height;\n }\n let spaceHeight = 0;\n spaceHeight = vAlign === 'middle' ? Math.floor((render.rect.height - sumHeight) / 2) : vAlign === 'bottom' ? render.rect.height - sumHeight : 0\n if (spaceHeight <= 0) {\n return;\n }\n let y = spaceHeight;\n for (let i = 0; i < render.length; i++) {\n render.getChild(i).rect.y = y;\n y += render.getChild(i).rect.height;\n }\n }\n\n /**\n * 设置表格横向排列方式\n * @param tbRender\n * @private\n */\n private static setTableAlign(tbRender: TableRenderObject): void {\n // const {alignment} = tbRender.element.props;\n // if (!alignment) {\n // return;\n // }\n // const parentRender = tbRender.parent;\n // const remainSpace = parentRender.rect.width - tbRender.rect.width;\n // if (remainSpace <= 0) {\n // return;\n // }\n // if (alignment === 'center') {\n // tbRender.rect.x = Math.floor(remainSpace / 2);\n // } else if (alignment === 'end') {\n // tbRender.rect.x = remainSpace;\n // }\n }\n\n /**\n * 重新测量合并单元格高度\n * @param tbRender\n * @returns\n */\n static remeasureTableMerge(tbRender: TableRenderObject): void {\n //是否需要重新计算,主要解决:之前合并计算的列,可能会被后面合并计算的列所影响,需要再次重新计算测量\n let needReCalc = false;\n for (let i = 0; i < tbRender.length; i++) {\n const row = tbRender.getChild(i) as TableRowRenderObject;\n for (let j = 0; j < row.length; j++) {\n const cellRender = row.getChild(j) as TableCellRenderObject;\n const ele = cellRender.element as TableCellElement;\n const {vMerge} = ele.props;\n if (vMerge === 'restart') {\n const eleIndex = ele.getIndex();\n const continueRows = this.getContinueVMergeRenderRows(tbRender, i, eleIndex);\n if (!continueRows.length) {\n //向下不存在合并的单元格,当前合并的单元格是被cut过来的,并且当前单元格高度高于行内高度需要remeasure当前行\n if (cellRender.rect.height > row.rect.height) {\n this.remeasureTableRow(row, j);\n needReCalc = true;\n }\n continue;\n }\n const continueCellHeight = continueRows.reduce((prev, curr) => prev + curr.rect.height, 0)\n const overflowHeight = cellRender.rect.height - row.rect.height - continueCellHeight;\n //溢出的高度加到最后一个合并单元格中\n if (overflowHeight > 0) {\n const lastRow = continueRows[continueRows.length - 1];\n lastRow.rect.height += overflowHeight;\n this.resizeCellToFillRow(lastRow);\n needReCalc = true;\n } else {\n cellRender.rect.height = row.rect.height + continueCellHeight;\n }\n }\n }\n }\n if (needReCalc) {\n this.remeasureTableMerge(tbRender);\n return;\n }\n }\n\n /**\n * 获取向下纵向合并的行\n * @param render\n * @param rowIndex\n * @param colIndex\n * @returns\n */\n private static getContinueVMergeRenderRows(render: TableRenderObject, rowIndex: number, colIndex: number): TableRowRenderObject[] {\n const rows: Array<TableRowRenderObject> = [];\n for (let i = rowIndex + 1; i < render.length; i++) {\n const rowRender = render.getChild(i) as TableRowRenderObject;\n const rowEle = rowRender.element as TableRowElement;\n const ele = rowEle.getChild(colIndex) as TableCellElement;\n const {vMerge} = ele.props;\n if (vMerge !== 'continue') {\n break;\n }\n rows.push(rowRender);\n }\n return rows;\n }\n\n /**\n * 根据横向当前被合并的单元格\n * @param tb\n * @param rowIndex\n * @param colIndex\n */\n static getHorizontalRestartCellIndex(tb: TableElement, rowIndex: number, colIndex: number): number {\n const row = tb.getChild(rowIndex) as TableRowElement;\n for (let i = colIndex - 1; i >= 0; i--) {\n const cell = row.getChild(i) as TableCellElement;\n if (cell.props.hMerge === 'restart') {\n return i;\n }\n }\n throw new Error('未找到主合并单元格');\n }\n\n /**\n * 根据横向当前被合并的单元格\n * @param tb\n * @param rowIndex\n * @param colIndex\n */\n static getVerticalRestartCellIndex(tb: TableElement, rowIndex: number, colIndex: number): number {\n for (let i = rowIndex - 1; i >= 0; i--) {\n const row = tb.getChild(i) as TableRowElement;\n const cell = row.getChild(colIndex) as TableCellElement;\n if (cell.props.vMerge === 'restart') {\n return i;\n }\n }\n throw new Error('未找到横向当前被合并的单元格')\n }\n\n /**\n * 获取合并单元格主单元格\n * @param tb\n * @param rowIndex\n * @param colIndex\n * @returns\n */\n static getRestartCellPosition(tb: TableElement, rowIndex: number, colIndex: number): { rowIndex: number, colIndex: number } {\n const row = tb.getChild(rowIndex) as TableRowElement;\n const cell = row.getChild(colIndex) as TableCellElement;\n if (cell.props.hMerge === 'continue') {\n const restartCellIndex = this.getHorizontalRestartCellIndex(tb, rowIndex, colIndex);\n return this.getRestartCellPosition(tb, rowIndex, restartCellIndex);\n }\n if (cell.props.vMerge === 'continue') {\n const restartRowIndex = this.getVerticalRestartCellIndex(tb, rowIndex, colIndex);\n return this.getRestartCellPosition(tb, restartRowIndex, colIndex);\n }\n return {rowIndex, colIndex}\n }\n\n /**\n * 调整单元格高度填满整个行的高度\n */\n private static resizeCellToFillRow(row: TableRowRenderObject): void {\n for (let i = 0; i < row.length; i++) {\n const cell = row.getChild(i);\n cell.rect.height = row.rect.height;\n }\n }\n\n\n /**\n * 获取元素的全局索引位置\n * @param control\n * @returns\n */\n static getControlIndex(control: Element): number;\n static getControlIndex(control: Element, pure: boolean): number;\n static getControlIndex(control: Element, pure?: boolean): number {\n pure = typeof pure === 'undefined' ? false : pure;\n return this._getControlIndex(pure, control);\n }\n\n /**\n * 根据全局索引位置获取元素\n * @param control\n * @param counter\n * @returns\n */\n static getControlByIndex(control: Element, counter: { currIndex: number, index: number }): Element | null;\n static getControlByIndex(control: Element, counter: { currIndex: number, index: number }, pure: boolean): Element | null;\n static getControlByIndex(control: Element, counter: { currIndex: number, index: number }, pure?: boolean): Element | null {\n pure = typeof pure === 'undefined' ? false : pure;\n return this._getControlByIndex(pure, control, counter);\n }\n\n\n /**\n * 获取元素的全局索引位置,不统计段落符号\n * @param pure\n * @param control\n * @returns\n */\n private static _getControlIndex(pure: boolean, control: Element): number {\n if (!control) {\n return -1;\n }\n const parent = control.parent;\n if (parent) {\n const index = control.getIndex();\n let counter = pure && control.type === 'psym' ? 0 : 1;\n for (let i = 0; i < index; i++) {\n const child = parent.getChild(i);\n counter += child.getSelfLength(pure);\n }\n return counter + this._getControlIndex(pure, parent);\n } else {\n return 0;\n }\n }\n\n\n /**\n * 根据全局索引位置获取元素,不统计段落符号\n * @param control\n * @param counter\n * @returns\n */\n private static _getControlByIndex(pure: boolean, control: Element, counter: { currIndex: number, index: number }): Element | null {\n const increaseVal = pure && control.type === 'psym' ? 0 : 1;\n counter.currIndex += increaseVal;\n if (counter.currIndex === counter.index) {\n return control;\n }\n if (control instanceof LeafElement) {\n return null;\n } else if (control instanceof BranchElement) {\n for (let i = 0; i < control.length; i++) {\n const res = this._getControlByIndex(pure, control.getChild(i), counter);\n if (res) {\n return res;\n }\n }\n }\n return null;\n }\n\n\n // /**\n // * 获取元素的全局索引位置\n // * @param control\n // * @returns\n // */\n // static getControlIndex2(control: Element): number {\n // const parent = control.parent;\n // if (parent) {\n // const index = control.getIndex();\n // let counter = 1;\n // for (let i = 0; i < index; i++) {\n // const child = parent.getChild(i);\n // counter += child.getSelfLength();\n // }\n // return counter + this.getControlIndex2(parent);\n // } else {\n // return 0;\n // }\n // }\n //\n // /**\n // * 根据全局索引位置获取元素\n // * @param control\n // * @param counter\n // * @returns\n // */\n // static getControlByIndex2(control: Element, counter: { currIndex: number, index: number }): Element | null {\n // counter.currIndex++;\n // if (counter.currIndex === counter.index) {\n // return control;\n // }\n // if (control instanceof LeafElement) {\n // return null;\n // } else if (control instanceof BranchElement) {\n // for (let i = 0; i < control.length; i++) {\n // const res = this.getControlByIndex2(control.getChild(i), counter);\n // if (res) {\n // return res;\n // }\n // }\n // }\n // return null;\n // }\n\n /**\n * 获取同级紧挨前方的兄弟元素\n * @param element\n * @returns\n */\n static getPrevSiblingElement(element: Element): Element | null {\n const parent = element.parent;\n if (!parent) {\n return null;\n }\n if (parent) {\n const index = parent.getChildIndex(element);\n if (index > 0) {\n return parent.getChild(index - 1);\n }\n }\n return null;\n }\n\n /**\n * 获取同级紧挨下方的元素\n * @param element\n * @returns\n */\n static getNextSiblingElement(element: Element): Element | null {\n const parent = element.parent;\n if (!parent) {\n return null;\n }\n if (parent) {\n const index = parent.getChildIndex(element);\n if (index < parent.length - 1) {\n return parent.getChild(index + 1)\n }\n }\n return null;\n }\n\n static getNextSiblingTrackElement(element: Element, type: TrackRunTypeEnum, userId: string): TrackRunElement | null {\n const nextSiblingEle = this.getNextSiblingElement(element);\n if (nextSiblingEle instanceof TrackRunElement) {\n if (nextSiblingEle.type === type && nextSiblingEle.props.userId === userId) {\n return nextSiblingEle;\n }\n }\n return null;\n }\n\n static getPrevSiblingTrackElement(element: Element, type: TrackRunTypeEnum, userId: string): TrackRunElement | null {\n const prevSiblingEle = this.getPrevSiblingElement(element);\n if (prevSiblingEle instanceof TrackRunElement) {\n if (prevSiblingEle.type === type && prevSiblingEle.props.userId === userId) {\n return prevSiblingEle;\n }\n }\n return null;\n }\n\n /**\n * 根据默认配置创建长文本\n * @param viewOptions\n * @returns\n */\n static getNewTextGroup(textProps: TextProps): TextGroupElement {\n const text = new TextGroupElement()\n textProps.clone(text.props);\n return text;\n }\n\n static createTextProps(dest: TextProps | null, viewOptions: ViewOptions): TextProps {\n const textProps = dest ?? new TextProps();\n textProps.fontSize = viewOptions.defaultFontSize;\n textProps.fontName = viewOptions.defaultFontName;\n textProps.color = viewOptions.defaultColor;\n return textProps;\n }\n\n /**\n * 获取容器内的最小渲染元素集合\n * @param parPos\n * @param array\n */\n static getAvailHitLeafRenderObjects(render: RenderObject, parPos: Position): Array<{ render: LeafRenderObject, rect: Rect }> {\n if (!this.checkAvailHitRender(render)) {\n return [];\n }\n const renderObjectRect: Rect = {\n x: parPos.x + render.rect.x,\n y: parPos.y + render.rect.y,\n width: render.rect.width,\n height: render.rect.height,\n maxWidth: 0,\n maxHeight: 0\n };\n const array: Array<{ render: LeafRenderObject, rect: Rect }> = [];\n if (render instanceof BranchRenderObject) {\n for (let i = 0; i < render.length; i++) {\n const child = render.getChild(i);\n array.push(...this.getAvailHitLeafRenderObjects(child, {x: renderObjectRect.x, y: renderObjectRect.y}));\n }\n } else if (render instanceof LeafRenderObject) {\n array.push({render: render, rect: renderObjectRect});\n } else {\n throw new Error('未实现');\n }\n return array;\n }\n\n /**\n * 获取容器内的最小渲染元素集合\n * @param parPos\n * @param array\n */\n static getAvailHitRenderObjects(render: RenderObject, parPos: Position): Array<{ render: RenderObject, rect: Rect }> {\n if (!this.checkAvailHitRender(render)) {\n return [];\n }\n const renderObjectRect: Rect = this.getRenderObjectAbsoluteRect(render, parPos);\n const array: Array<{ render: RenderObject, rect: Rect }> = [];\n if (render instanceof BranchRenderObject) {\n for (let i = 0; i < render.length; i++) {\n const child = render.getChild(i);\n if (this.checkAvailHitRender(child)) {\n array.push({render: child, rect: this.getRenderObjectAbsoluteRect(child, renderObjectRect)})\n\n }\n }\n } else if (render instanceof LeafRenderObject) {\n array.push({render: render, rect: renderObjectRect});\n } else {\n throw new Error('未实现');\n }\n return array;\n }\n\n /**\n * 获取绘制元素的绝对位置框\n */\n static getRenderObjectAbsoluteRect(render: RenderObject, parPos: Position): Rect {\n const renderObjectRect: Rect = {\n x: parPos.x + render.rect.x,\n y: parPos.y + render.rect.y,\n width: render.rect.width,\n height: render.rect.height,\n maxWidth: 0,\n maxHeight: 0\n };\n return renderObjectRect;\n }\n\n\n /**\n * 检查当前绘制元素是否属于有效点击元素\n */\n static checkAvailHitRender(render: RenderObject): boolean {\n if (render.element && render.element.disableClick) {\n return false;\n }\n if (render instanceof TableRowRenderObject) {\n const rowEle = render.element as TableRowElement;\n if (rowEle.props.headerRow) {\n return rowEle.paintRenders.indexOf(render) === 0;\n }\n }\n return !render.disableClick;\n }\n\n /**\n * 验证点击可操作性\n * 主要限制页眉页脚的编辑模式\n */\n static verifyHitable(sourceElement: LeafElement | null | undefined): boolean {\n if (!sourceElement) {\n return false;\n }\n const parents = ElementUtil.getParentElements(sourceElement);\n for (let i = parents.length - 1; i >= 0; i--) {\n const child = parents[i];\n if (child.disableClick) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * 获取一个点到一个矩形最短的距离\n * @param rect\n * @param p\n * @returns\n */\n static getDistanceToRect(rect: Rect, p: Position) {\n const lines: Array<{ f: PAIR, s: PAIR }> = [];\n lines.push({\n f: {\n x: rect.x,\n y: rect.y\n },\n s: {\n x: rect.x + rect.width,\n y: rect.y\n }\n }, {\n f: {\n x: rect.x,\n y: rect.y\n },\n s: {\n x: rect.x,\n y: rect.y + rect.height\n }\n }, {\n f: {\n x: rect.x,\n y: rect.y + rect.height\n },\n s: {\n x: rect.x + rect.width,\n y: rect.y + rect.height\n }\n }, {\n f: {\n x: rect.x + rect.width,\n y: rect.y\n },\n s: {\n x: rect.x + rect.width,\n y: rect.y + rect.height\n }\n })\n const distances = lines.map(item => this.minDistance(item.f, item.s, p))\n return Math.min(...distances);\n }\n\n static minDistance(A: PAIR, B: PAIR, E: PAIR) {\n\n const AB: PAIR = {x: B.x - A.x, y: B.y - A.y}\n\n const BE: PAIR = {x: E.x - B.x, y: E.y - B.y};\n\n const AE: PAIR = {x: E.x - A.x, y: E.y - A.y}\n\n const AB_BE = (AB.x * BE.x + AB.y * BE.y);\n const AB_AE = (AB.x * AE.x + AB.y * AE.y);\n\n let reqAns = 0;\n\n if (AB_BE > 0) {\n const y = E.y - B.y;\n const x = E.x - B.x;\n reqAns = Math.sqrt(x * x + y * y);\n } else if (AB_AE < 0) {\n const y = E.y - A.y;\n const x = E.x - A.x;\n reqAns = Math.sqrt(x * x + y * y);\n } else {\n const x1 = AB.x;\n const y1 = AB.y;\n const x2 = AE.x;\n const y2 = AE.y;\n const mod = Math.sqrt(x1 * x1 + y1 * y1);\n reqAns = Math.abs(x1 * y2 - y1 * x2) / mod;\n }\n return reqAns;\n }\n\n /**\n * 获取父级层级渲染对象\n * @param render\n * @returns\n */\n static getParentRenders(render: RenderObject): Array<RenderObject> {\n if (render) {\n return [render, ...this.getParentRenders(render.parent)];\n } else {\n return [];\n }\n }\n\n static getRenderMapElements(render: RenderObject): Array<Element> {\n const renders = this.getParentRenders(render);\n return renders.map(render => render.element).filter(ele => ele);\n }\n\n static getParentRender<T extends BranchRenderObject>(child: RenderObject, parentType: { new(...args: any): T }): T | null {\n if (!child) {\n return null;\n }\n if (child instanceof parentType) {\n return child;\n } else {\n return this.getParentRender(child.parent, parentType);\n }\n }\n\n static getParentRenderByPredicate(child: RenderObject, predicate: (item: RenderObject) => boolean): RenderObject | null {\n if (!child) {\n return null;\n }\n if (predicate(child)) {\n return child;\n } else {\n return this.getParentRenderByPredicate(child.parent, predicate);\n }\n }\n\n /**\n * 获取父级层级元素对象\n * @param element\n * @returns\n */\n static getParentElements(element: Element | null | undefined): Array<Element> {\n if (element) {\n return [element, ...this.getParentElements(element.parent)];\n } else {\n return [];\n }\n }\n\n /**\n * 获取最后一个子元素\n * @param element\n * @returns\n */\n static getLastLeafElement(element: Element, predicate: null | ((item: Element) => boolean) = null): LeafElement | null {\n if (element instanceof LeafElement && (!predicate || predicate(element))) {\n return element;\n } else if (element instanceof BranchElement) {\n for (let i = element.length - 1; i >= 0; i--) {\n const res = this.getLastLeafElement(element.getChild(i), predicate)\n if (res) {\n return res;\n }\n }\n return null;\n }\n return null;\n }\n\n\n /**\n * 获取第一个子元素\n * @param element\n * @returns\n */\n static getFirstLeafElement(element: Element): LeafElement | null {\n if (element instanceof LeafElement) {\n return element;\n } else if (element instanceof BranchElement) {\n for (let i = 0; i < element.length; i++) {\n const res = this.getFirstLeafElement(element.getChild(i));\n if (res) {\n return res;\n }\n }\n return null;\n }\n return null;\n }\n\n /**\n * 校验两个元素是否在同一个段落中\n * @param element1\n * @param element2\n */\n static isInSameParagraph(element1: Element, element2: Element): boolean {\n const par1 = this.getParentByType(element1, ParagraphElement);\n const par2 = this.getParentByType(element2, ParagraphElement);\n return par1 === par2;\n }\n\n static getBorderCursor(borderType: BorderType): CursorType {\n switch (borderType) {\n case 'none':\n return 'text';\n case 'top':\n return 'row-resize';\n case 'left':\n return 'col-resize';\n case 'right':\n return 'col-resize';\n case 'bottom':\n return 'row-resize'\n case 'left-middle':\n case 'right-middle':\n return 'w-resize';\n case 'top-middle':\n case 'bottom-middle':\n return 's-resize';\n case 'left-top':\n case 'right-bottom':\n return 'se-resize';\n case 'right-top':\n case 'left-bottom':\n return 'ne-resize';\n default:\n return 'text';\n }\n }\n\n static getParentByType<P extends Element, T>(child: P | null, parentType: { new(...args: any): T }): T | null {\n if (!child) {\n return null;\n }\n if (child instanceof parentType) {\n return child;\n } else {\n return this.getParentByType(child.parent, parentType);\n }\n }\n\n static getParent(child: Element | null, predicate: (item: Element) => boolean): Element | null {\n if (!child) {\n return null;\n }\n if (predicate(child)) {\n return child;\n } else {\n return this.getParent(child.parent, predicate);\n }\n }\n\n\n /**\n * 修正段落内容\n * @returns\n */\n static fixParagraphContent(control: ParagraphElement): void {\n //如果最后一个元素不是段落符号,则补足\n if (!(control.getChild(control.length - 1) instanceof PSymbolElement)) {\n control.addChild(new PSymbolElement());\n }\n const items: Array<PSymbolElement> = [];\n for (let i = 0; i < control.length - 1; i++) {\n const child = control.getChild(i);\n if (child instanceof PSymbolElement) {\n items.push(child);\n }\n }\n items.forEach(item => {\n control.removeChild(item)\n });\n }\n\n /**\n * 修正块级容器内容\n * @param control\n */\n static fixBlockContainer(control: BlockContainerElement): void {\n if (control.length === 0) {\n if (control instanceof TableCellElement && (control.props.vMerge === 'continue' || control.props.hMerge === 'continue')) {\n return;\n }\n if (control.noFillEmpty) {\n return;\n }\n control.addChild(new ParagraphElement());\n }\n }\n\n\n /**\n * 获取绘制元素相对于整个画布的绝对位置\n * 整个画布绘制的时候不一定从x=0,y=0时绘制的,下拉滚动时,上面从负y坐标开始绘制\n * 如果计算某个元素相对画布的左上角的绝对坐标位置,需要childPos的y值减去translateY\n * @param render\n * @param refPos 参照位置\n * @returns\n */\n static getRenderAbsolutePaintPos(render: RenderObject, refPos: Position | null = null): Position {\n refPos = refPos ?? {x: 0, y: 0};\n const currPos: Position = {x: render.rect.x + refPos.x, y: render.rect.y + refPos.y};\n if (!render.parent) {\n return currPos;\n }\n return this.getRenderAbsolutePaintPos(render.parent, currPos);\n }\n\n static getRenderAbsolutePaintRect(render: RenderObject, childPos: Position | null = null): Rect {\n const pos = this.getRenderAbsolutePaintPos(render, childPos);\n return {...pos, width: render.rect.width, height: render.rect.height, maxWidth: 0, maxHeight: 0};\n }\n\n\n /**\n * 获取选中区域的开始区域\n * @param range\n * @returns\n */\n static getFirstSelectedRange(range: SelectionContentRange): SelectionContentRange {\n if (range.selectedChildren.length === 0 || range.target instanceof TextGroupElement) {\n return range;\n } else {\n return this.getFirstSelectedRange(range.selectedChildren[0]);\n }\n }\n\n /**\n * 获取选中区域的开始区域\n * @param range \\\n * @returns\n */\n static getLastSelectedRange(range: SelectionContentRange): SelectionContentRange {\n if (range.selectedChildren.length === 0 || range.target instanceof TextGroupElement) {\n return range;\n } else {\n return this.getLastSelectedRange(range.selectedChildren[range.selectedChildren.length - 1]);\n }\n }\n\n\n /**\n * 克隆选区内容\n * @param range\n * @param isDelete\n * @returns\n */\n static cloneRange(range: SelectionContentRange, isDelete: boolean, cloneMode: 'clone' | 'source' | 'copy' = 'clone'): Element | null {\n const {target, isFullSelected, startOffset, endOffset, selectedChildren} = range;\n if (isFullSelected) {\n //修饰元素不能复制 审阅标记、数据元NullText\n if (cloneMode === 'copy' && target.isDecorate) {\n return null;\n }\n const clone = cloneMode === 'source' ? target : target.clone(true);\n if (isDelete) {\n target.remove();\n }\n return clone;\n } else {\n if (target instanceof LeafElement) {\n if (target instanceof TextGroupElement && startOffset !== endOffset) {\n if (isDelete) {\n const copyTarget = target.spliceText(startOffset, endOffset, true);\n if (target.text.length === 0) {\n target.remove();\n }\n return copyTarget;\n } else {\n const copyTarget = target.spliceText(startOffset, endOffset, false);\n return copyTarget;\n }\n }\n return null;\n } else if (target instanceof BranchElement) {\n const array: Array<Element> = [];\n for (let i = 0; i < selectedChildren.length; i++) {\n const copyChild = this.cloneRange(selectedChildren[i], isDelete, cloneMode);\n if (copyChild) {\n array.push(copyChild);\n }\n }\n if (!array.length) {\n return null;\n } else {\n const copyTarget = target.clone(false) as BranchElement;\n array.forEach(item => {\n copyTarget.addChild(item)\n });\n return copyTarget;\n }\n }\n }\n return null;\n }\n\n /**\n * 获取所有的子级元素\n * @param branchEle\n * @returns\n */\n static getChildrenElements(branchEle: BranchElement): Array<Element> {\n const array = [];\n for (let i = 0; i < branchEle.length; i++) {\n array.push(branchEle.getChild(i));\n }\n return array;\n }\n\n /**\n * 递归向前寻找最近的元素\n * @param currElement\n * @param inPara 是否在同一段落中寻找\n * @param forCursor 查找结果是否用于光标定位\n * @param viewOptions\n * @returns\n */\n static getRecursionPrevSiblingElement(currElement: Element | null, inPara: boolean = false, forCursor: boolean = false, viewOptions: ViewOptions): LeafElement | null {\n const parent = currElement?.parent;\n //删除留痕块的measureRender在不显示留痕模式下,不生成render\n if (!currElement || !parent || (!currElement.measureRender && !(currElement instanceof TrackRunElement))) {\n return null;\n }\n //如果当前数据元不可编辑,则直接跳过\n if (parent instanceof DataElementInlineGroup && !parent.props.editable && viewOptions.docMode === DocMode.FormEdit) {\n return this.getRecursionPrevSiblingElement(parent, inPara, forCursor, viewOptions);\n }\n if (forCursor && parent.disableClick) {\n return this.getRecursionPrevSiblingElement(parent, inPara, forCursor, viewOptions);\n }\n const index = parent.getChildIndex(currElement);\n if (!index) {\n if (inPara && parent.type === 'p') {\n return null;\n }\n return this.getRecursionPrevSiblingElement(parent, inPara, forCursor, viewOptions);\n } else {\n let prevElement: Element | null = null;\n for (let i = index - 1; i >= 0; i--) {\n prevElement = parent.getChild(i);\n if (prevElement && !prevElement.disableClick) {\n break;\n }\n }\n if (!prevElement || prevElement.disableClick) {\n return this.getRecursionPrevSiblingElement(parent, inPara, forCursor, viewOptions);\n }\n const lastLeafElement = ElementUtil.getLastLeafElement(prevElement);\n //用于光标定位\n if (forCursor && lastLeafElement && lastLeafElement.disableClick) {\n return this.getRecursionPrevSiblingElement(lastLeafElement, inPara, forCursor, viewOptions);\n }\n if (lastLeafElement) {\n return lastLeafElement;\n } else {\n return this.getRecursionPrevSiblingElement(prevElement.parent, inPara, forCursor, viewOptions);\n }\n }\n }\n\n\n /**\n * 循环向前寻找可定位的数据元\n * @param currElement\n */\n static getPrevDataElement(ctx: EditorContext, currElement: DataElementInlineGroup): DataElementInlineGroup | null {\n const dataEle = ctx.getCurrentCtx(currElement).getControlInstanceList().filter(item => item instanceof DataElementInlineGroup) as Array<DataElementInlineGroup>;\n const index = dataEle.indexOf(currElement);\n if (index > 0) {\n for (let i = index - 1; i >= 0; i--) {\n if (!dataEle[i].disableClick && dataEle[i].props.editable) {\n return dataEle[i];\n }\n }\n }\n return null;\n }\n\n // /**\n // * 递归向前寻找最近的可点击元素\n // */\n // static getRecursionPrevSiblingElementForHit(currElement: Element | null): LeafElement | null {\n // let ele: LeafElement | null = null;\n // do {\n // ele = this.getRecursionPrevSiblingElement(currElement);\n // } while (ele && ele.disableClick)\n // return ele;\n // }\n\n // /**\n // * 在同一段落中,递归向前寻找最近的元素\n // */\n // static getRecursionPrevSiblingElementInPara(currElement: Element | null): LeafElement | null {\n // const parent = currElement?.parent;\n // if (!currElement || !parent) {\n // return null;\n // }\n // const index = parent.getChildIndex(currElement);\n // if (!index) {\n // if (parent.type === 'p') {\n // return null;\n // }\n // return this.getRecursionPrevSiblingElementInPara(parent);\n // } else {\n // const prevElement = parent.getChild(index - 1);\n // const lastLeafElement = ElementUtil.getLastLeafElement(prevElement);\n // if (lastLeafElement) {\n // return lastLeafElement;\n // } else {\n // return this.getRecursionPrevSiblingElementInPara(prevElement?.parent);\n // }\n // }\n // }\n\n // /**\n // * 在同一段落中,递归向前寻找最近的可点击元素\n // */\n // static getRecursionPrevSiblingElementInParaForHit(currElement: Element | null): LeafElement | null {\n // let ele: LeafElement | null = null;\n // do {\n // ele = this.getRecursionPrevSiblingElementInPara(currElement);\n // } while (ele && ele.disableClick)\n // return ele;\n // }\n\n\n /**\n * 递归向后寻找最近的元素\n */\n static getRecursionNextSiblingElement(currElement: Element | null, inPara: boolean = false, forCursor: boolean = false, viewOptions: ViewOptions): LeafElement | null {\n const parent = currElement?.parent;\n if (!currElement || !parent || !currElement.measureRender) {\n return null;\n }\n //如果当前数据元不可编辑,则直接跳过\n if (parent instanceof DataElementInlineGroup && !parent.props.editable && viewOptions.docMode === DocMode.FormEdit) {\n return this.getRecursionNextSiblingElement(parent, inPara, forCursor, viewOptions);\n }\n if (forCursor && parent.disableClick) {\n return this.getRecursionNextSiblingElement(parent, inPara, forCursor, viewOptions);\n }\n const index = parent.getChildIndex(currElement);\n if (index === parent.length - 1) {\n if (inPara && parent.type === 'p') {\n return null;\n }\n return this.getRecursionNextSiblingElement(parent, inPara, forCursor, viewOptions);\n } else {\n let nextElement: Element | null = null;\n for (let i = index + 1; i < parent.length; i++) {\n nextElement = parent.getChild(i);\n if (nextElement && !nextElement.disableClick) {\n break;\n }\n }\n if (!nextElement || nextElement.disableClick) {\n return this.getRecursionNextSiblingElement(parent, inPara, forCursor, viewOptions);\n }\n const lastLeafElement = ElementUtil.getFirstLeafElement(nextElement);\n //用于光标定位\n if (forCursor && lastLeafElement && lastLeafElement.disableClick) {\n return this.getRecursionNextSiblingElement(lastLeafElement, inPara, forCursor, viewOptions);\n }\n if (lastLeafElement) {\n return lastLeafElement;\n } else {\n return this.getRecursionNextSiblingElement(nextElement.parent, inPara, forCursor, viewOptions);\n }\n }\n }\n\n\n // /**\n // * 在同一段落中,递归向后寻找最近的元素\n // */\n // static getRecursionNextSiblingElementInPara(currElement: Element | null): LeafElement | null {\n // const parent = currElement?.parent;\n // if (!currElement || !parent) {\n // return null;\n // }\n // const index = parent.getChildIndex(currElement);\n // if (index === parent.length - 1) {\n // if (parent.type === 'p') {\n // return null;\n // }\n // return this.getRecursionNextSiblingElementInPara(parent);\n // } else {\n // const nextElement = parent.getChild(index + 1);\n // const lastLeafElement = ElementUtil.getFirstLeafElement(nextElement);\n // if (lastLeafElement) {\n // return lastLeafElement;\n // } else {\n // return this.getRecursionNextSiblingElementInPara(nextElement.parent);\n // }\n // }\n // }\n\n // /**\n // * 在同一段落中,递归向后寻找最近的可点击元素\n // */\n // static getRecursionNextSiblingElementInParaForHit(currElement: Element | null): LeafElement | null {\n // let ele: LeafElement | null = null;\n // do {\n // ele = this.getRecursionNextSiblingElementInPara(currElement);\n // } while (ele && ele.disableClick)\n // return ele;\n // }\n\n // /**\n // * 在同一段落中,递归向后寻找最近的可点击元素\n // */\n // static getRecursionNextSiblingElementForHit(currElement: Element | null): LeafElement | null {\n // let ele: LeafElement | null = null;\n // do {\n // ele = this.getRecursionNextSiblingElement(currElement);\n // } while (ele && ele.disableClick)\n // return ele;\n // }\n\n /**\n * 获取行内最大渲染单元格高度,主要处理纵向合并单元格问题\n * @param row\n * @returns\n */\n static getRowMaxCellHeight(row: TableRowRenderObject): number {\n let maxHeight = 0;\n for (let i = 0; i < row.length; i++) {\n if (row.getChild(i).rect.height > maxHeight) {\n maxHeight = row.getChild(i).rect.height;\n }\n }\n return maxHeight;\n }\n\n\n /**\n * 校验是否为空内容\n * @param ele\n */\n static checkEmptyContent(ele: BranchRenderObject): boolean {\n if (ele.length === 1) {\n const firstRender = ele.getChild(0);\n if (firstRender instanceof ParagraphRenderObject) {\n if ((<ParagraphElement>(firstRender.element)).length === 1) {\n return true;\n }\n }\n }\n return false;\n }\n\n /**\n * 测量行内编组元素\n * @param render\n */\n static remeasureInlineGroupRender(render: InlineGroupRenderObject): void {\n let x = 0;\n let maxHeight = 0;\n for (let i = 0; i < render.length; i++) {\n const item = render.getChild(i);\n item.rect.x = x;\n if (item.rect.height > maxHeight) {\n maxHeight = item.rect.height;\n }\n x += item.rect.width;\n }\n for (let i = 0; i < render.length; i++) {\n const item = render.getChild(i);\n item.rect.y = maxHeight - item.rect.height;\n }\n render.rect.width = x;\n render.rect.height = maxHeight;\n }\n\n static getParaLinePos(childRender: RenderObject, childRenderPos: Position): Rect {\n const parent = childRender.parent;\n const rect = ElementUtil.cloneRect(parent.rect);\n rect.x = childRenderPos.x - childRender.rect.x;\n rect.y = childRenderPos.y - childRender.rect.y;\n if (parent instanceof ParagraphLineRectRenderObject) {\n return rect;\n } else {\n return this.getParaLinePos(parent, rect);\n }\n }\n\n\n static getParentRenderPos(parentRender: RenderObject, childRender: RenderObject, childRenderPos: Position): Rect {\n const parent = childRender.parent;\n const rect = ElementUtil.cloneRect(parent.rect);\n rect.x = childRenderPos.x - childRender.rect.x;\n rect.y = childRenderPos.y - childRender.rect.y;\n if (parent === parentRender) {\n return rect;\n } else {\n return this.getParentRenderPos(parentRender, parent, rect);\n }\n }\n\n\n /**\n * 获取绘制元素所在的区域\n */\n static getRenderObjectRegion(render: RenderObject): HitRegion | undefined {\n if (!render) {\n return undefined;\n }\n if (render.element) {\n return this.getElementRegion(render.element);\n }\n return this.getRenderObjectRegion(render.parent);\n }\n\n /**\n * 获取文档元素所在的区域\n * @param element\n * @returns\n */\n static getElementRegion(element: Element): HitRegion | undefined {\n const regionTarget = this.getElementRegionTarget(element);\n return regionTarget?.type;\n }\n\n static getElementRegionTarget(element: Element | null): { type: HitRegion, target: BranchElement } | null {\n if (!element) {\n return null;\n }\n if (element instanceof DocumentBodyElement) {\n return {type: 'body', target: element};\n }\n if (element instanceof DocumentFooterElement) {\n return {type: 'footer', target: element};\n }\n if (element instanceof DocumentHeaderElement) {\n return {type: 'header', target: element};\n }\n if (element instanceof CommsContainerElement) {\n return {type: 'review', target: element}\n }\n return this.getElementRegionTarget(element.parent);\n }\n\n /**\n * 根据坐标系统偏移位获取所在的文本偏移位置\n * @param textRender\n * @param x\n * @returns\n */\n static getTextRenderOffset(textRender: TextGroupRenderObject, x: number): number {\n const ele = textRender.element as TextGroupElement;\n const docRender = ElementUtil.getParentRender(textRender, DocumentRenderObject);\n if (!docRender) {\n throw new Error('docRender is null')\n }\n const elePaintRenders = ele.paintRenders;//.filter(item => ElementUtil.getParentRender(item, DocumentRenderObject) === docRender);\n let count = 0;\n for (let i = 0; i < elePaintRenders.length; i++) {\n const render = elePaintRenders[i] as TextGroupRenderObject;\n if (render !== textRender) {\n count += render.textMeasures.length;\n } else {\n let horX = 0;\n for (let j = 0; j < render.textMeasures.length; j++) {\n if (horX + render.textMeasures[j].actualSize >= x) {\n if (horX + Math.floor(render.textMeasures[j].actualSize / 2) > x) {\n if (j === 0 && i > 0) {\n j += 0.5;\n }\n } else {\n j += 1;\n }\n return j + count;\n }\n horX += render.textMeasures[j].actualSize;\n }\n return count + render.textMeasures.length;\n }\n }\n throw new Error('未找到当前文本元素的光标偏移量');\n }\n\n static getHitRenderOffset(render: LeafRenderObject, x: number): number {\n if (render instanceof TextGroupRenderObject) {\n return this.getTextRenderOffset(render, x);\n } else {\n if (render.element && render.element.type === 'psym') {\n return 0;\n }\n return (render.rect.width / 2) >= x ? 0 : 1;\n }\n }\n\n static getTextRenderHorX(currRender: TextGroupRenderObject, startOffset: number, endOffset: number): { startX: number, endX: number } {\n const textEle = currRender.element as TextGroupElement;\n let endX = 0;\n let startX = 0;\n let count = 0;\n for (let i = 0; i < textEle.paintRenders.length; i++) {\n const paintRender = textEle.paintRenders[i] as TextGroupRenderObject;\n if (paintRender !== currRender) {\n count += paintRender.textMeasures.length;\n } else {\n if (count + paintRender.textMeasures.length < startOffset) {\n continue;\n }\n if (count > endOffset) {\n continue;\n }\n for (let j = 0; j < paintRender.textMeasures.length; j++) {\n if (endOffset === count + j) {\n break;\n }\n if (count + j === startOffset) {\n startX = endX;\n }\n endX += paintRender.textMeasures[j].actualSize;\n }\n }\n }\n return {startX, endX};\n }\n\n /**\n * 获取一个元素结尾偏移量\n * 文本以字符长度进行确定\n * @param ele\n * @returns\n */\n static getElementEndOffset(ele: LeafElement): number {\n if (ele instanceof TextGroupElement) {\n return ele.textMeasures.length;\n }\n return 1;\n }\n\n /**\n * 判断当前偏移量是否是最终偏移量\n * @param ele\n * @param offset\n */\n static isElementEndOffset(ele: LeafElement, offset: number): boolean {\n return this.getElementEndOffset(ele) === offset;\n }\n\n /**\n * 获取直接子节点的所有渲染元素\n * @param ele\n * @returns\n */\n static getChildRenders<T extends RenderObject>(ele: BranchRenderObject): Array<T> {\n const items: Array<T> = [];\n for (let i = 0; i < ele.length; i++) {\n items.push(ele.getChild(i) as T);\n }\n return items;\n }\n\n /**\n * 获取当前单元格内所有的段落行\n * @param cell\n * @returns\n */\n static getCellParaLines(cell: TableCellRenderObject): Array<ParagraphLineRectRenderObject> {\n const items: Array<ParagraphLineRectRenderObject> = [];\n for (let i = 0; i < cell.length; i++) {\n const para = cell.getChild(i) as ParagraphRenderObject;\n for (let j = 0; j < para.length; j++) {\n items.push(para.getChild(j) as ParagraphLineRectRenderObject)\n }\n }\n return items;\n }\n\n static getRandomColor(seed: number) {\n let letters = '0123456789ABCDEF';\n let color = '#';\n for (let i = 0; i < 6; i++) {\n color += letters[Math.floor(this.getSeedRandom(seed) * 16)];\n }\n return color;\n }\n\n\n static getSeedRandom(seed: number): number {\n return Number(\"0.\" + Math.sin(seed * Math.random()).toString().substr(6));\n }\n\n\n static findChildRender(render: BranchRenderObject, predicate: (child: RenderObject) => boolean): RenderObject | null {\n for (let i = 0; i < render.length; i++) {\n if (predicate(render.getChild(i))) {\n return render.getChild(i);\n }\n }\n return null;\n }\n\n /**\n * 向上查找类型为数据元的父级\n * @param ele\n * @returns\n */\n static getDataElement(ele: Element): DataElementInlineGroup | null {\n return this.getParent(ele, item => item instanceof DataElementInlineGroup) as DataElementInlineGroup;\n }\n}\n\n","import {IRenderContextContract, RenderContextType} from \"../../render-context\";\nimport {BlockContainerRenderObject, IRenderData, RenderObject} from \"../../render-define\";\nimport {DocumentRenderObject} from \"./doc-impl\";\nimport {RenderCtx} from \"../../../controls/render-context\";\n\nexport class DocumentContainerRender extends BlockContainerRenderObject {\n constructor() {\n super(null);\n }\n\n render(e: IRenderData): void {\n const {render, nextRender,docCtx:{viewOptions}} = e;\n const {viewSettings, docPageSettings, viewBackcolor,scale} = viewOptions;\n render.clear();\n render.overlaysContext.fillRect(0, 0, viewSettings.width, viewSettings.height, viewBackcolor);\n render.tran(() => {\n render.overlaysContext.ctx.scale(scale, scale);\n render.contentContext.ctx.scale(scale, scale);\n nextRender();\n });\n }\n\n clone(): RenderObject {\n throw new Error(\"Method not implemented.\");\n }\n\n addPages(pages: Array<DocumentRenderObject>): void {\n for (let i = 0; i < pages.length; i++) {\n this.addChild(pages[i]);\n }\n }\n}\n","import { BranchElement, LeafElement, Rect, Element, SelectionContentRange, Position } from \"./element-define\";\nimport { HitEventInfo, HitRegion } from \"./element-event-define\";\nimport { ElementUtil } from \"./element-util\";\nimport { DocumentContainerRender } from \"./impl/document/doc-container-impl\";\nimport { DocumentRenderObject } from \"./impl/document/doc-impl\";\nimport { TextGroupElement, TextGroupRenderObject } from \"./impl/text/text-impl\";\nimport { RenderObject } from \"./render-define\";\nimport { DocumentBodyElement } from \"./impl/document/doc-body-impl\";\nimport { Subject } from \"./event-subject\";\n\nexport class DocumentSelection {\n constructor() {\n this.selectionState = new SelectionState();\n }\n\n selectionState: SelectionState;\n snapshotSelectionState!: SelectionState | null;\n setSelectionState(hitInfo: { startHitInfo: HitEventInfo, endHitInfo: HitEventInfo }): void {\n const { startHitInfo, endHitInfo } = hitInfo;\n this.selectionState.clear();\n this.selectionState.startHitInfo = startHitInfo;\n if (!startHitInfo) {\n return;\n }\n const startRange = new SelectionRange();\n startRange.setStart(startHitInfo.element, startHitInfo.offset);\n if (endHitInfo) {\n startRange.setEnd(endHitInfo.element, endHitInfo.offset);\n } else {\n startRange.setEnd(startHitInfo.element, startHitInfo.offset);\n }\n this.selectionState.addRange(startRange);\n }\n\n /**\n * 获取选区共同的祖先控件\n */\n static getAncestorCommonControl(startControl: LeafElement, endControl: LeafElement): BranchElement {\n const startNestParents = this.getNestParents(startControl.parent);\n const ancestorCommonControl = this.getCommonParenet(endControl.parent, startNestParents);\n if (!ancestorCommonControl) {\n throw new Error('未找到公共的祖先组件');\n }\n return ancestorCommonControl;\n }\n\n /**\n * 获取向上的嵌套父级节点集合\n * @param control \n * @param array \n */\n static getNestParents(control: BranchElement | null): Array<BranchElement> {\n if (control) {\n return [control, ...this.getNestParents(control.parent)];\n }\n return [];\n\n }\n\n static getCommonParenet(control: BranchElement | null, array: Array<BranchElement>): BranchElement | null {\n if (!control) {\n return null;\n }\n if (array.some(item => item === control)) {\n return control;\n }\n return this.getCommonParenet(control?.parent, array);\n }\n\n updateSelectionState(): boolean {\n if (this.compareSelectionEquals()) {\n return false;\n }\n const range = this.selectionState.range;\n this.transformRange();\n if (!range) {\n return false;\n }\n const startControlIndex = ElementUtil.getControlIndex(range.startControl);\n const endControlIndex = ElementUtil.getControlIndex(range.endControl);\n if (endControlIndex < startControlIndex) {\n const clone = range.clone();\n clone.startControl = range.endControl;\n clone.startOffset = range.endOffset;\n clone.endControl = range.startControl;\n clone.endOffset = range.startOffset;\n clone.editable = range.editable;\n this.selectionState.addRange(clone);\n }\n this.selectionState.editable = range.editable;\n\n this.selectionState.startControl = range.startControl as LeafElement;\n this.selectionState.startOffset = range.startOffset;\n this.selectionState.startControlIndex = ElementUtil.getControlIndex(range.startControl);\n\n this.selectionState.endControl = range.endControl as LeafElement;\n this.selectionState.endOffset = range.endOffset;\n this.selectionState.endControlIndex = ElementUtil.getControlIndex(range.endControl);\n\n this.selectionState.ancestorCommonControl = DocumentSelection.getAncestorCommonControl(this.selectionState.startControl, this.selectionState.endControl);\n\n this.selectionState.enableTrackChanges = this.getEnableTrackChanges(range.startControl);\n return true;\n }\n\n /**\n * 获取当前选区区域内是否支持留痕\n * @private\n */\n private getEnableTrackChanges(ele: Element): boolean {\n const body = ElementUtil.getParentByType(ele, DocumentBodyElement);\n return body?.trackChanges || false;\n }\n\n private compareSelectionEquals(): boolean {\n const range = this.selectionState.range;\n const snap = this.snapshotSelectionState;\n if (snap && range) {\n return range.startControl === snap.startControl\n && range.startOffset === snap.startOffset\n && range.endControl === snap.endControl\n && range.endOffset === snap.endOffset;\n }\n return false;\n }\n\n /**\n * 转换选区内容\n * 处理结束选区在开始选区之前\n */\n private transformRange(): void {\n let range = this.selectionState.range;\n if (!range) {\n return;\n }\n const { startControl, startOffset, endControl, endOffset } = range;\n const startControlIndex = ElementUtil.getControlIndex(startControl);\n const endControlIndex = ElementUtil.getControlIndex(endControl);\n if ((endControlIndex < startControlIndex)) {\n const clone = range.clone();\n clone.startControl = endControl;\n clone.startOffset = endOffset;\n clone.endControl = startControl;\n clone.endOffset = startOffset;\n this.selectionState.addRange(clone);\n }\n range = this.selectionState.range;\n if (!range) {\n throw new Error('range is null')\n }\n range.calcRange();\n if ((range.startControl === range.endControl && range.startOffset > range.endOffset)) {\n const { startOffset, endOffset } = range;\n range.startOffset = endOffset;\n range.endOffset = startOffset;\n }\n range.calcRange();\n //防止光标定位到段落符号之后\n if (range.startControl === range.endControl && range.startOffset === 1 && range.endOffset === 1 && range.startControl.type === 'psym') {\n range.startOffset = 0;\n range.endOffset = 0;\n }\n range.calcRange();\n }\n\n takeSnapshot(): void {\n this.snapshotSelectionState = this.selectionState.clone();\n }\n\n clearSnapshot(): void {\n this.snapshotSelectionState = null;\n }\n\n}\n\nexport class SelectionState {\n get startControl(): LeafElement {\n return this._startControl as LeafElement;\n }\n\n set startControl(value: LeafElement | null) {\n this._startControl = value;\n }\n\n get endControl(): LeafElement {\n return this._endControl as LeafElement;\n }\n\n set endControl(value: LeafElement | null) {\n this._endControl = value;\n }\n onChangedEvent: Subject<void> = new Subject();\n startControlIndex!: number;\n startOffset!: number;\n endControlIndex!: number;\n endOffset!: number;\n get collapsed() {\n const { startControlIndex, startOffset, endControlIndex, endOffset } = this;\n return !(startControlIndex !== endControlIndex || (startControlIndex === endControlIndex && startOffset !== endOffset));\n }\n private _startControl!: LeafElement | null;\n private _endControl!: LeafElement | null;\n ancestorCommonControl!: BranchElement | null;\n range!: SelectionRange | null;\n startHitInfo!: HitEventInfo | null;\n selectedRange!: SelectionContentRange | null;\n editable: boolean = true;\n renderContainer!: DocumentContainerRender;\n cursorPos!: Rect | null;\n //当前选区的上下文是否支持留痕修改\n enableTrackChanges: boolean = false;\n constructor() {\n this.clear();\n }\n clear(): void {\n this.range = null;\n this.startOffset = -1;\n this.endOffset = -1;\n this._startControl = null;\n this._endControl = null;\n this.ancestorCommonControl = null;\n this.startControlIndex = -1;\n this.endControlIndex = -1;\n this.selectedRange = null;\n this.cursorPos = null;\n }\n\n addRange(range: SelectionRange): void {\n this.clear();\n this.range = range;\n this.onChangedEvent.next();\n }\n resetRange(startControl: Element, startOffset: number): SelectionRange {\n const range = new SelectionRange();\n range.setStart(startControl, startOffset);\n range.setEnd(startControl, startOffset);\n this.addRange(range);\n return range;\n }\n\n surround(ele: Element): void {\n const range = new SelectionRange();\n range.setStart(ele, 0);\n range.setEnd(ele, -1);\n this.addRange(range);\n }\n\n clone(): SelectionState {\n const clone = new SelectionState();\n clone._startControl = this._startControl;\n clone.startOffset = this.startOffset;\n clone._endControl = this._endControl;\n clone.endOffset = this.endOffset;\n clone.ancestorCommonControl = this.ancestorCommonControl;\n clone.startControlIndex = this.startControlIndex;\n clone.endControlIndex = this.endControlIndex;\n clone.selectedRange = this.selectedRange;\n clone.editable = this.editable;\n return clone;\n }\n\n\n}\n\n\n\nexport class SelectionRange {\n startControl!: Element;\n startOffset!: number;\n endControl!: Element;\n endOffset!: number;\n editable: boolean = true;\n setStart(control: Element, offset: number): void {\n this.startControl = control;\n this.startOffset = offset;\n }\n setEnd(control: Element, offset: number): void {\n this.endControl = control;\n this.endOffset = offset;\n }\n\n private calcStart(): void {\n const res = this.setInfo(this.startControl, this.startOffset);\n this.setStart(res.control, res.offset);\n }\n\n private calcEnd(): void {\n const res = this.setInfo(this.endControl, this.endOffset);\n this.setEnd(res.control, res.offset);\n }\n\n calcRange(): void {\n this.calcStart();\n this.calcEnd();\n }\n\n private setInfo(control: Element, offset: number): { control: LeafElement, offset: number } {\n if (control instanceof LeafElement) {\n if (control instanceof TextGroupElement) {\n offset = offset === -1 ? control.text.length : offset;\n }\n offset = offset === -1 ? 1 : offset;\n return { control, offset };\n } else if (control instanceof BranchElement) {\n if (offset > control.length) {\n throw new Error('超索引');\n }\n if (offset === control.length) {\n const child = control.getChild(offset - 1);\n return this.setInfo(child, 1);\n } else if (offset === -1) {\n const child = control.getChild(control.length - 1);\n return this.setInfo(child, -1);\n } else {\n const child = control.getChild(offset);\n return this.setInfo(child, 0);\n }\n } else {\n throw new Error('未实现');\n }\n }\n\n clone(): SelectionRange {\n const clone = new SelectionRange();\n clone.startControl = this.startControl;\n clone.startOffset = this.startOffset;\n clone.endControl = this.endControl;\n clone.endOffset = this.endOffset;\n return clone;\n }\n\n}\n\nexport class DocumentCursor {\n static getElementCursorPos(ele: LeafElement, offset: number, hitRegion: HitRegion | undefined, docNum: number): { render: RenderObject, rect: Rect } {\n if (hitRegion === 'body' || hitRegion === 'review') {\n return this.getElementRenderPos(ele, offset, ele.paintRenders);\n } else if (hitRegion === 'footer' || hitRegion === 'header') {\n const docContainer = ElementUtil.getParentRender(ele.paintRenders[0], DocumentContainerRender);\n if (!docContainer) {\n throw new Error('docContainer is null')\n }\n const docRender = docContainer.getChild(docNum) as DocumentRenderObject;\n const currDocPaintRenders = ele.paintRenders.filter(item => ElementUtil.getParentRender(item, DocumentRenderObject) === docRender);\n return this.getElementRenderPos(ele, offset, currDocPaintRenders);\n }\n debugger;\n throw new Error('未找到元素偏移量对应的光标位置')\n }\n\n private static getElementRenderPos(ele: LeafElement, offset: number, paints: Array<RenderObject>): { render: RenderObject, rect: Rect } {\n if (ele instanceof TextGroupElement) {\n let count = 0;\n for (let i = 0; i < paints.length; i++) {\n const paintRender = paints[i] as TextGroupRenderObject;\n let horX = 0;\n if (paintRender.textMeasures.length + count < offset) {\n count += paintRender.textMeasures.length;\n continue;\n }\n for (let i = 0; i <= paintRender.textMeasures.length; i++) {\n if (count === offset || (i === 0 && count + 0.5 === offset)) {\n const rect = ElementUtil.getRenderAbsolutePaintRect(paintRender, { x: 0, y: 0 })\n //上标、下标位置处理\n if (['superscript', 'subscript'].indexOf(ele.props.vertAlign) >= 0) {\n rect.height -= ele.props.fontSize / 2;\n if (ele.props.vertAlign === 'subscript') {\n rect.y += rect.height;\n }\n }\n rect.x += horX;\n return {\n render: paintRender,\n rect\n }\n }\n count++;\n horX += paintRender.textMeasures[i].actualSize;\n }\n }\n } else {\n const paintRender = paints[0];\n const rect = ElementUtil.getRenderAbsolutePaintRect(paintRender, { x: 0, y: 0 })\n if (offset === 1) {\n rect.x += rect.width;\n }\n return {\n render: paintRender,\n rect\n }\n }\n throw new Error('未能定位到元素位置')\n }\n}\n","import {ElementFactory, LeafElement, readElementProps, SerializeProps, ViewOptions} from \"../../element-define\";\nimport {CheckBoxProps} from \"../../element-props\";\nimport {ElementUtil} from \"../../element-util\";\nimport {RenderContextType} from \"../../render-context\";\nimport {IRenderData, LeafRenderObject, RenderObject} from \"../../render-define\";\nimport {ElementEvent} from \"../../element-event-define\";\n\nexport class CheckBoxElement extends LeafElement<CheckBoxProps> {\n constructor() {\n super('ckb');\n this.props = new CheckBoxProps();\n this.cursorType = 'default'\n this.addEvent('ElementClick', (evt) => {\n this.changeState(evt)\n });\n }\n\n createRenderObject(): CheckBoxRenderObject {\n const render = new CheckBoxRenderObject(this);\n render.rect.width = this.props.size + 4;\n render.rect.height = this.props.size;\n return render;\n }\n\n changeState(e: ElementEvent): void {\n this.props.isChecked = !this.props.isChecked;\n }\n\n serialize(viewOptions: ViewOptions): SerializeProps {\n return {\n type: 'ckb',\n props: {\n ...this.props.getSerializeProps(viewOptions)\n }\n }\n }\n\n clone(): CheckBoxElement {\n const clone = new CheckBoxElement();\n this.props.clone(clone.props);\n return clone;\n }\n}\n\nexport class CheckBoxFactory extends ElementFactory<CheckBoxProps> {\n match(type: string): boolean {\n return type === 'ckb';\n }\n\n createElement(data: readElementProps<CheckBoxProps>, renderCtx: RenderContextType): CheckBoxElement {\n const props = data.props;\n const ckbElement = new CheckBoxElement();\n const ckbProps = ckbElement.props;\n ckbProps.size = props?.size ?? 14;\n ckbProps.isChecked = props?.isChecked ?? false;\n ckbProps.groupName = props?.groupName ?? null;\n return ckbElement;\n }\n}\n\nexport class CheckBoxRenderObject extends LeafRenderObject<CheckBoxElement> {\n render(e: IRenderData): void {\n e.render.contentContext.drawCheckBox(e.position.x + 2, e.position.y, this.element.props.size, this.element.props.size, this.element.props.isChecked);\n }\n\n clone(cloneData = true): RenderObject {\n const clone = new CheckBoxRenderObject(this.element);\n clone.rect = ElementUtil.cloneRect(this.rect);\n return clone;\n }\n\n}\n","import {\n BlockContainerElement,\n ElementFactory,\n Position,\n readElementProps,\n Rect,\n SelectionContentRange,\n SerializeProps,\n ViewOptions\n} from \"../../element-define\";\nimport {CommContentProps, TextProps} from \"../../element-props\";\nimport {Element} from \"../../element-define\"\nimport {ElementUtil} from \"../../element-util\";\nimport {RenderContextType} from \"../../render-context\";\nimport {BlockContainerRenderObject, IRenderData, RenderObject} from \"../../render-define\";\nimport {DocumentRenderObject} from \"../document/doc-impl\";\nimport {CommentElement} from \"./comment-element-impl\";\nimport moment from \"moment\";\n\nexport abstract class CommContentBaseElement<P extends object = { id: string }> extends BlockContainerElement<P> {\n startMark!: CommentElement;\n endMark!: CommentElement;\n focus: boolean = false;\n\n protected constructor(type: string) {\n super(type);\n this.addEvent('GotCursor', () => {\n this.focus = true;\n this.refreshView()\n });\n this.addEvent('LostCursor', () => {\n this.focus = false;\n this.refreshView()\n })\n }\n}\n\nexport abstract class CommContentBaseRenderObject<E extends CommContentBaseElement> extends BlockContainerRenderObject<E> {\n commMarkRender!: { render: RenderObject, pos: Position };\n}\n\nexport class CommContentElement extends CommContentBaseElement<CommContentProps> {\n constructor() {\n super(\"comm-content\");\n this.props = new CommContentProps();\n }\n\n createRenderObject(options: ViewOptions, renderCtx: RenderContextType): RenderObject {\n const render = new CommContentRenderObject(this);\n render.padding.left = 14;\n render.padding.top = 24;\n return render;\n }\n\n serialize(viewOptions: ViewOptions): SerializeProps {\n return {\n type: this.type,\n props: {...this.props.getSerializeProps(viewOptions)}\n }\n }\n\n clone(data: boolean): Element {\n throw new Error('不支持');\n }\n}\n\nexport class CommContentRenderObject extends CommContentBaseRenderObject<CommContentElement> {\n render(e: IRenderData): void {\n let borderColor = this.element.focus ? '#fa8c16' : '#ffd591';\n e.render.contentContext.strokeRect(e.position.x, e.position.y, this.rect.width, this.rect.height, borderColor);\n e.render.contentContext.fillRect(e.position.x, e.position.y, 8, this.rect.height, '#871400')\n const docRender = ElementUtil.getParentRender(this.commMarkRender.render, DocumentRenderObject) as DocumentRenderObject;\n //获取审阅标记的绘制坐标\n let commMarkPos = ElementUtil.getRenderAbsolutePaintPos(this.commMarkRender.render, {\n x: 0,\n y: -e.docCtx.viewOptions.translateY\n });\n const commMarkLinePos = ElementUtil.getParaLinePos(this.commMarkRender.render, commMarkPos);\n commMarkPos.y = commMarkLinePos.y + 2;\n\n const docRenderPos = ElementUtil.getRenderAbsolutePaintPos(docRender, {x: 0, y: -e.docCtx.viewOptions.translateY});\n const marginLeft = commMarkPos.x - docRenderPos.x - docRender.padding.left;\n const marginRight = e.docCtx.viewOptions.docPageSettings.width - marginLeft - docRender.padding.right * 2;\n e.render.overlaysContext.drawDashLine([commMarkPos, {\n x: commMarkPos.x + marginRight,\n y: commMarkPos.y\n }], [1, 1], 'red');\n e.render.overlaysContext.drawDashLine([{\n x: commMarkPos.x + marginRight,\n y: commMarkPos.y\n }, e.position], [1, 1], 'red');\n\n this.renderTitle(e.render, e.position);\n }\n\n renderTitle(ctx: RenderContextType, position: Position): void {\n const topPadding = 24;\n const {props} = this.element;\n const textProps = new TextProps();\n textProps.fontSize = 12;\n textProps.fontName = '楷体';\n textProps.color = \"rgb(0,0,0)\";\n const createDate = moment(props.createDate).format('YYYY-MM-DD HH:mm')\n const commTitle = `${props.createName}:${createDate}`;\n const {width, height} = ctx.contentContext.measureText(commTitle, textProps);\n const rect: Rect = {x: position.x + this.padding.left, y: position.y, width, height, maxHeight: 0, maxWidth: 0}\n rect.y += (topPadding - rect.height) / 2;\n ctx.contentContext.drawText(commTitle, textProps, rect.x, rect.y, rect.width, rect.height);\n }\n\n endRender(ctx: RenderContextType, position: Position): void {\n //throw new Error(\"Method not implemented.\");\n }\n\n clone(): RenderObject {\n const clone = new CommContentRenderObject(this.element);\n clone.rect = ElementUtil.cloneRect(this.rect);\n clone.padding = this.padding.clone();\n for (let i = 0; i < this.length; i++) {\n clone.addChild(this.getChild(i).clone());\n }\n return clone;\n }\n}\n\nexport interface CommentRangeStatus {\n range: SelectionContentRange,\n commContent: CommContentBaseElement\n}\n\nexport class CommentContentFactory extends ElementFactory<CommContentProps> {\n match(type: string): boolean {\n return type === \"comm-content\";\n }\n\n createElement(data: readElementProps<CommContentProps>, renderCtx: RenderContextType): Element {\n const props = data.props as CommContentProps;\n const commentEle = new CommContentElement();\n commentEle.props.id = props.id;\n commentEle.props.createDate = props.createDate;\n commentEle.props.createId = props.createId;\n commentEle.props.createName = props.createName;\n return commentEle;\n }\n}\n","import {Position} from \"../../element-define\";\nimport {RenderContextType} from \"../../render-context\";\nimport {RenderObject} from \"../../render-define\";\nimport {ElementUtil} from \"../../element-util\";\nimport {DocumentRenderObject} from \"../document/doc-impl\";\nimport {CommContentBaseElement, CommContentBaseRenderObject,} from \"./comment-content-impl\";\nimport {CommentElement, CommentRenderObject} from \"./comment-element-impl\";\nimport {CommsContainerRenderObject} from \"./comments-container-impl\";\n\ninterface CommMapProps {\n commMarkRender: CommentRenderObject,\n commMarkPos: Position,\n commContentRender: CommContentBaseRenderObject<any>,\n commContentPos?: Position\n}\n\nexport class CommentsUtil {\n static remeasureComments(ctx: RenderContextType, commWindow: CommsContainerRenderObject, commContainer: CommsContainerRenderObject, map: Array<{ ele: CommentElement, render: RenderObject, pos: Position }>): void {\n const commMap: Array<CommMapProps> = [];\n const docRender = ElementUtil.getParentRender(commWindow, DocumentRenderObject) as DocumentRenderObject;\n for (let i = 0; i < commContainer.length; i++) {\n const commRender = commContainer.getChild(i);\n const commEle = commRender.element as CommContentBaseElement;\n const mapComm = map.find(item => item.ele.props.id === commEle.props.id);\n if (mapComm) {\n const commMarkLinePos = ElementUtil.getParaLinePos(mapComm.render, mapComm.pos);\n mapComm.pos.y = commMarkLinePos.y + 2;\n\n const commContentRender = commRender.clone() as CommContentBaseRenderObject<any>;\n commContentRender.rect.x = 0;\n commContentRender.rect.y = mapComm.pos.y;\n commWindow.addChild(commContentRender);\n commMap.push({\n commMarkRender: <CommentRenderObject>mapComm.render,\n commMarkPos: mapComm.pos,\n commContentRender: commContentRender\n });\n }\n }\n let sumCommentHeight = 0;\n for (let i = 0; i < commMap.length; i++) {\n const map = commMap[i];\n const prevRender = commMap[i - 1]?.commContentRender;\n const {commContentRender} = map;\n sumCommentHeight += commContentRender.rect.height + 5;\n if (prevRender) {\n const {y: prevY, height: prevHeight} = prevRender.rect;\n if (commContentRender.rect.y < prevY + prevHeight) {\n commContentRender.rect.y = prevY + prevHeight + 5;\n }\n }\n commContentRender.commMarkRender = {render: map.commMarkRender, pos: map.commMarkPos};\n }\n if (!commMap.length) {\n return;\n }\n const lastCommentMap = commMap[commMap.length - 1];\n const {commContentRender: lastCommContentRender} = lastCommentMap;\n const {rect: lastRect} = lastCommContentRender;\n\n //批注内容超出文档,需要重新排序\n if (lastRect.y + lastRect.height > docRender.rect.height) {\n //总内容小于容器高度,则进行倒排\n //否则进行正排\n if (sumCommentHeight < docRender.rect.height) {\n lastRect.y = docRender.rect.height - lastRect.height;\n for (let i = commMap.length - 1; i >= 0; i--) {\n const map = commMap[i];\n const prevRender = commMap[i + 1]?.commContentRender;\n const {commContentRender} = map;\n if (prevRender) {\n const {y: prevY} = prevRender.rect;\n if (commContentRender.rect.y + commContentRender.rect.height > prevY) {\n commContentRender.rect.y = prevY - commContentRender.rect.height - 5;\n }\n }\n commContentRender.commMarkRender = {render: map.commMarkRender, pos: map.commMarkPos};\n }\n }\n }\n\n }\n\n}\n","import {\n Element,\n ElementFactory,\n LeafElement,\n readElementProps,\n SerializeProps,\n ViewOptions\n} from \"../../element-define\";\nimport {CommProps} from \"../../element-props\";\nimport {ElementUtil} from \"../../element-util\";\nimport {RenderContextType} from \"../../render-context\";\nimport {IRenderData, LeafRenderObject, RenderObject} from \"../../render-define\";\n\nexport class CommentElement extends LeafElement<CommProps> {\n constructor() {\n super('comm');\n this.isDecorate = true;\n this.disableClick = true;\n this.props = new CommProps();\n }\n\n createRenderObject(options: ViewOptions, renderCtx: RenderContextType): RenderObject {\n const render = new CommentRenderObject(this);\n render.rect.width = 0;\n render.rect.height = 14;\n return render;\n }\n\n serialize(viewOptions: ViewOptions): SerializeProps | null {\n if (this.isDecorate) {\n return null;\n }\n return {\n type: this.type,\n props: {\n ...this.props.getSerializeProps(viewOptions)\n }\n }\n }\n\n clone(): Element {\n const clone = new CommentElement();\n this.props.clone(clone.props);\n return clone;\n }\n}\n\nexport class CommentRenderObject extends LeafRenderObject<CommentElement> {\n render(e: IRenderData): void {\n if (!e.docCtx.viewOptions.showReviewWindow) {\n return;\n }\n const paraLinePos = ElementUtil.getParaLinePos(this, {x: e.position.x, y: e.position.y});\n const color = '#ff4d4f';\n e.render.contentContext.fillRect(e.position.x - 1, paraLinePos.y, 2, paraLinePos.height, color)\n }\n\n clone(): RenderObject {\n const clone = new CommentRenderObject(this.element);\n clone.rect = ElementUtil.cloneRect(this.rect);\n return clone;\n }\n}\n\nexport class CommentFactory extends ElementFactory<CommProps> {\n match(type: string): boolean {\n return type === \"comm\";\n }\n\n createElement(data: readElementProps<CommProps>, renderCtx: RenderContextType): Element {\n const ele = new CommentElement();\n const props = data.props as CommProps;\n ele.props.id = props.id;\n ele.props.markType = props.markType;\n return ele;\n }\n}\n","import {ViewOptions, Element, SerializeProps, Position, Rect} from \"../../element-define\";\nimport {TextProps, ValidateProps} from \"../../element-props\";\nimport {ElementUtil} from \"../../element-util\";\nimport {RenderContextType} from \"../../render-context\";\nimport {IRenderData, RenderObject} from \"../../render-define\";\nimport {CommContentBaseElement, CommContentBaseRenderObject} from \"./comment-content-impl\";\nimport {ParagraphElement} from \"../paragraph/p-impl\";\nimport {TextGroupElement} from \"../text/text-impl\";\nimport {DocumentRenderObject} from \"../document/doc-impl\";\n\n/**\n * 数据元验证提示\n */\nexport class ValidateElement extends CommContentBaseElement<ValidateProps> {\n constructor() {\n super('validate');\n this.props = new ValidateProps();\n this.isDecorate = true;\n }\n\n createRenderObject(options: ViewOptions, renderCtx: RenderContextType): RenderObject | null {\n const render = new ValidateRenderObject(this);\n render.padding.left = 14;\n render.padding.top = 24;\n return render;\n }\n\n serialize(viewOptions: ViewOptions): SerializeProps | null {\n return null;\n }\n\n clone(data: boolean): Element {\n throw new Error(\"Method not implemented.\");\n }\n\n setContent(content: string): void {\n this.clearItems();\n const para = new ParagraphElement();\n const text = new TextGroupElement();\n text.props.fontSize = 14;\n text.props.fontName = '等线';\n text.props.color = '#000000'\n text.text = content;\n para.addChild(text);\n this.addChild(para);\n }\n}\n\nexport class ValidateRenderObject extends CommContentBaseRenderObject<ValidateElement> {\n render(e: IRenderData): void {\n let borderColor = this.element.focus ? '#fa8c16' : '#ffd591';\n e.render.contentContext.strokeRect(e.position.x, e.position.y, this.rect.width, this.rect.height, borderColor);\n e.render.contentContext.fillRect(e.position.x, e.position.y, 8, this.rect.height, '#871400')\n const docRender = ElementUtil.getParentRender(this.commMarkRender.render, DocumentRenderObject) as DocumentRenderObject;\n //获取审阅标记的绘制坐标\n let commMarkPos = ElementUtil.getRenderAbsolutePaintPos(this.commMarkRender.render, {\n x: 0,\n y: -e.docCtx.viewOptions.translateY\n });\n const commMarkLinePos = ElementUtil.getParaLinePos(this.commMarkRender.render, commMarkPos);\n commMarkPos.y = commMarkLinePos.y + 2;\n\n const docRenderPos = ElementUtil.getRenderAbsolutePaintPos(docRender, {x: 0, y: -e.docCtx.viewOptions.translateY});\n const marginLeft = commMarkPos.x - docRenderPos.x - docRender.padding.left;\n const marginRight = e.docCtx.viewOptions.docPageSettings.width - marginLeft - docRender.padding.right * 2;\n e.render.overlaysContext.drawDashLine([commMarkPos, {\n x: commMarkPos.x + marginRight,\n y: commMarkPos.y\n }], [1, 1], 'red');\n e.render.overlaysContext.drawDashLine([{\n x: commMarkPos.x + marginRight,\n y: commMarkPos.y\n }, e.position], [1, 1], 'red');\n\n this.renderTitle(e.render, e.position);\n }\n\n renderTitle(ctx: RenderContextType, position: Position): void {\n const topPadding = 24;\n const textProps = new TextProps();\n textProps.fontSize = 12;\n textProps.fontName = '楷体';\n textProps.color = \"rgb(0,0,0)\";\n const title = this.element.props.title;\n const {width, height} = ctx.contentContext.measureText(title, textProps);\n const rect: Rect = {x: position.x + this.padding.left, y: position.y, width, height, maxHeight: 0, maxWidth: 0}\n rect.y += (topPadding - rect.height) / 2;\n ctx.contentContext.drawText(title, textProps, rect.x, rect.y, rect.width, rect.height);\n }\n\n clone(): RenderObject {\n const clone = new ValidateRenderObject(this.element);\n clone.rect = ElementUtil.cloneRect(this.rect);\n clone.padding = this.padding.clone();\n for (let i = 0; i < this.length; i++) {\n clone.addChild(this.getChild(i).clone());\n }\n return clone;\n }\n}\n","import {\n Element,\n ElementFactory,\n Position,\n readElementProps,\n ResizeLeafRenderObject,\n SerializeProps,\n ViewOptions\n} from \"../../element-define\";\nimport {DataElementBarcodeProps} from \"../../element-props\";\nimport {ElementUtil} from \"../../element-util\";\nimport {RenderContextType} from \"../../render-context\";\nimport {IRenderData, LeafRenderObject, RenderObject} from \"../../render-define\";\nimport {DataElementLeaf} from \"./data-element-base-impl\";\nimport bwipjs from \"bwip-js\";\nimport {watchChanged} from \"../../notify\";\n\n\nexport class DataElementBarcode extends DataElementLeaf<DataElementBarcodeProps> {\n resizeable: boolean = true;\n private barCodeCanvas!: HTMLCanvasElement | null;\n private cache = false;\n\n constructor() {\n super('data-ele-barcode');\n this.props = new DataElementBarcodeProps();\n this.props.width = 100;\n this.props.height = 30;\n this.focusable = true;\n watchChanged(this.props, () => {\n this.cache = false;\n });\n }\n\n createRenderObject(): LeafRenderObject {\n const render = new DataElementBarcodeRenderObject(this);\n render.rect.width = this.props.width + 2;\n render.rect.height = this.props.height + 2;\n return render;\n }\n\n serialize(options: ViewOptions): SerializeProps {\n return {\n type: this.type,\n props: {\n ...this.props.getSerializeProps()\n }\n }\n }\n\n clone(data: boolean): Element {\n const clone = new DataElementBarcode();\n this.props.clone(clone.props);\n return clone;\n }\n\n setValue(val: string): void {\n this.props.text = val;\n }\n\n getValue(): string {\n return this.props.text;\n }\n\n drawBarcode(renderCtx: RenderContextType, pos: Position): void {\n this.createBarcodeCache();\n renderCtx.contentContext.ctx.drawImage(this.barCodeCanvas as HTMLCanvasElement, pos.x, pos.y, this.props.width, this.props.height);\n }\n\n createBarcodeCache(): void {\n if (this.cache) {\n return;\n }\n this.cache = true;\n if (!this.barCodeCanvas) {\n this.barCodeCanvas = document.createElement('canvas');\n }\n this.barCodeCanvas = bwipjs.toCanvas(this.barCodeCanvas, {\n bcid: this.props.type, // Barcode type\n text: this.props.text || \"0123456789\", // Text to encode\n height: 10, // Bar height, in millimeters\n includetext: true, // Show human-readable text\n textxalign: \"center\", // Always good to set this\n });\n }\n}\n\nexport class DataElementBarcodeRenderObject extends ResizeLeafRenderObject {\n render(e: IRenderData): void {\n const barcodeEle = this.element as DataElementBarcode;\n barcodeEle.drawBarcode(e.render, e.position);\n }\n\n clone(): RenderObject {\n const clone = new DataElementBarcodeRenderObject(this.element);\n clone.rect = ElementUtil.cloneRect(this.rect);\n return clone;\n }\n\n pagePaintCompleted(e:IRenderData): void {\n if (this.element.isFocused) {\n const {render,position:pos}=e;\n const {width, height} = this.rect;\n render.contentContext.strokeRect(pos.x, pos.y, this.rect.width, this.rect.height, '#1890ff', 0.5);\n this.drawResizeCircle(render, pos.x, pos.y);\n this.drawResizeCircle(render, pos.x + width, pos.y);\n this.drawResizeCircle(render, pos.x, pos.y + height);\n this.drawResizeCircle(render, pos.x + width, pos.y + height);\n this.drawResizeCircle(render, pos.x + (Math.floor(width / 2)), pos.y);\n this.drawResizeCircle(render, pos.x + (Math.floor(width / 2)), pos.y + height);\n this.drawResizeCircle(render, pos.x, pos.y + (Math.floor(height / 2)));\n this.drawResizeCircle(render, pos.x + width, pos.y + (Math.floor(height / 2)));\n }\n }\n\n private drawResizeCircle(ctx: RenderContextType, x: number, y: number): void {\n const ctxNative = ctx.contentContext.ctx;\n ctxNative.save();\n ctxNative.fillStyle = '#69c0ff';\n ctxNative.beginPath();\n ctxNative.arc(x, y, Math.floor(4 / 5 * 4), 0, 2 * Math.PI);\n ctxNative.closePath();\n ctxNative.fill();\n ctxNative.restore();\n }\n}\n\n\nexport class DataElementBarcodeFactory extends ElementFactory<DataElementBarcodeProps> {\n match(type: string): boolean {\n return type === 'data-ele-barcode';\n }\n\n createElement(data: readElementProps<DataElementBarcodeProps>, renderCtx: RenderContextType): Element {\n const ele = new DataElementBarcode();\n ele.props.width = data.props?.width || 100;\n ele.props.height = data.props?.height || 30;\n ele.props.type = data.props?.type || 'code128';\n ele.props.text = data.props?.text || '';\n return ele;\n }\n}\n","import {\n DocMode,\n Element,\n ElementFactory,\n LeafElement,\n readElementProps,\n SerializeProps,\n ViewOptions\n} from \"../../element-define\";\nimport {ContextMenuElementEvent, ElementEvent} from \"../../element-event-define\";\nimport {DataEleCheckProps} from \"../../element-props\";\nimport {ElementUtil} from \"../../element-util\";\nimport {RenderContextType} from \"../../render-context\";\nimport {IRenderData, LeafRenderObject, RenderObject} from \"../../render-define\";\nimport {DataElementLeaf} from \"./data-element-base-impl\";\n\nexport class DataElementCheck extends DataElementLeaf<DataEleCheckProps> {\n //props: DataEleCheckProps;\n constructor() {\n super('data-ele-check');\n this.cursorType = 'default'\n this.props = new DataEleCheckProps();\n this.addEvent<ContextMenuElementEvent>('ElementContextMenu', (evt) => {\n evt.menus.push({\n icon: 'Settings', caption: '内容控制设置', eventObj: {}\n });\n });\n this.addEvent('ElementClick', (evt) => {\n this.onClickHandler(evt)\n });\n }\n\n createRenderObject(): RenderObject {\n const render = new DataElementCheckRenderObject(this);\n render.rect.width = this.props.size + 4;\n render.rect.height = this.props.size;\n return render;\n }\n\n onClickHandler(evt: ElementEvent): void {\n if (!this.props.editable && evt.ctx.viewOptions.docMode === DocMode.FormEdit) {\n return;\n }\n //如果当前是单选框并且当前已经被选中,则不作处理\n if (this.props.groupName && !this.props.multiSelect && this.props.checked) {\n return;\n }\n this.props.checked = !this.props.checked;\n const docCtx = evt.ctx;\n //复选框存在组时,并且为单选模式时\n if (this.props.groupName && !this.props.multiSelect) {\n const ckbs = docCtx.getCurrentCtx(this).getCheckBoxList(this.props.groupName);\n ckbs.forEach(item => {\n if (item !== this) {\n item.setValue(!this.props.checked)\n }\n });\n }\n }\n\n serialize(viewOptions: ViewOptions): SerializeProps {\n return {\n type: this.type,\n props: {\n ...this.props.getSerializeProps(viewOptions)\n }\n }\n }\n\n clone(data: boolean): DataElementCheck {\n const clone = new DataElementCheck();\n this.props.clone(clone.props);\n return clone;\n }\n\n setValue(val: any): void {\n if (typeof val === 'boolean') {\n this.props.checked = val;\n } else {\n const trueValue = val === 'true';\n this.props.checked = trueValue;\n }\n }\n\n getValue(): any {\n if (this.props.checked) {\n return this.props.checkedValue;\n } else {\n return '';\n }\n }\n}\n\n\nexport class DataElementCheckRenderObject extends LeafRenderObject {\n constructor(element: Element) {\n super(element);\n }\n\n clone(): RenderObject {\n const cloneRender = new DataElementCheckRenderObject(this.element);\n cloneRender.rect = ElementUtil.cloneRect(this.rect);\n return cloneRender;\n }\n\n render(e: IRenderData): void {\n const {render, position} = e;\n const element = this.element as DataElementCheck;\n if (this.element.props.multiSelect) {\n render.contentContext.drawCheckBox(position.x + 2, position.y, element.props.size, element.props.size, element.props.checked);\n } else {\n render.contentContext.drawRadioBox(position.x + 2, position.y, element.props.size, element.props.size, element.props.checked);\n }\n }\n}\n\nexport class DataElementCheckFactory extends ElementFactory<DataEleCheckProps> {\n match(type: string): boolean {\n return type === \"data-ele-check\"\n }\n\n createElement(data: readElementProps<DataEleCheckProps>, renderCtx: RenderContextType): Element {\n const props = data.props as DataEleCheckProps;\n const ele = new DataElementCheck();\n this.createDataEleProps(ele.props, props);\n return ele;\n }\n\n createDataEleProps(dest: DataEleCheckProps, props: DataEleCheckProps): DataEleCheckProps {\n const dataEleProps: DataEleCheckProps = dest;\n ElementUtil.readEleBaseProps(dataEleProps, props);\n //dataEleProps.id = props.id ?? nanoid(5);\n //dataEleProps.name = props.name;\n //dataEleProps.caption = props.caption;\n //dataEleProps.type = props.type;\n dataEleProps.checked = props.checked;\n dataEleProps.size = props.size;\n dataEleProps.groupName = props.groupName;\n dataEleProps.multiSelect = props.multiSelect ?? false;\n dataEleProps.checkedValue = props.checkedValue;\n return dataEleProps;\n }\n\n}\n","import {Element, ElementFactory, SerializeProps, ViewOptions} from \"../../element-define\";\nimport {DataEleDateProps} from \"../../element-props\";\nimport {ElementUtil} from \"../../element-util\";\nimport {RenderContextType} from \"../../render-context\";\nimport {RenderObject} from \"../../render-define\";\nimport {ElementSerialize} from \"../../element-serialize\";\nimport {TextGroupElement} from \"../text/text-impl\";\nimport {DataElementBaseFactory, DataElementInlineGroup, DataElementRenderObject} from \"./data-element-base-impl\";\nimport moment from 'moment'\n\nexport class DataElementDate extends DataElementInlineGroup<DataEleDateProps> {\n constructor() {\n super('data-ele-date');\n this.props = new DataEleDateProps();\n }\n\n createRenderObject(): RenderObject {\n return new DataElementDateRenderObject(this);\n }\n\n serialize(viewOptions: ViewOptions): SerializeProps & any {\n return {\n type: this.type,\n props: {\n ...this.props.getSerializeProps(viewOptions)\n }\n }\n }\n\n clone(data: boolean): DataElementDate {\n return super.cloneSelf(data, DataElementDate);\n }\n\n\n setValue(val: Date | string): void {\n const format = this.props.format ?? 'YYYY-MM-DD';\n const date = moment(val, format);\n if (!date.isValid()) {\n return;\n }\n const formatStr = date.format(format);\n if (this.getValue() === formatStr) {\n return;\n }\n this.pubOnChange('self');\n this.clearInnerItems();\n const valueText = new TextGroupElement();\n this.props.valueTextProps.clone(valueText.props);\n valueText.text = formatStr;\n this.addChild(valueText, this.length - 1);\n this.beginMeasure();\n }\n\n getValue(): string {\n return ElementSerialize.serializeString(this)\n }\n\n validate(): string {\n let res = super.validate();\n if (res) {\n return res;\n }\n const format = this.props.format ?? 'YYYY-MM-DD';\n const date = moment(this.getValue(), format);\n if (!date.isValid()) {\n return '日期格式不正确';\n }\n return '';\n }\n\n}\n\n\nexport class DataElementDateRenderObject extends DataElementRenderObject<DataElementDate> {\n constructor(element: DataElementDate) {\n super(element);\n }\n\n clone(): RenderObject {\n const cloneRender = new DataElementDateRenderObject(this.element);\n cloneRender.rect = ElementUtil.cloneRect(this.rect);\n for (let i = 0; i < this.length; i++) {\n cloneRender.addChild(this.getChild(i).clone());\n }\n return cloneRender;\n }\n\n}\n\nexport class DataElementDateFactory extends DataElementBaseFactory<DataEleDateProps> {\n match(type: string): boolean {\n return type === \"data-ele-date\"\n }\n\n createElement(data: any, renderCtx: RenderContextType): Element {\n const props = data.props as DataEleDateProps;\n const ele = new DataElementDate();\n this.createDataEleProps(ele.props, props);\n return ele;\n }\n\n createDataEleProps(dest: DataEleDateProps, props: DataEleDateProps): DataEleDateProps {\n const dataEleProps: DataEleDateProps = dest;\n ElementUtil.readEleBaseProps(dataEleProps, props);\n //dataEleProps.id = props.id ?? nanoid(5);\n //dataEleProps.name = props.name;\n dataEleProps.minValue = props.minValue;\n dataEleProps.maxValue = props.maxValue;\n dataEleProps.format = props.format;\n //dataEleProps.caption = props.caption;\n //dataEleProps.type = props.type;\n dataEleProps.nullText = props.nullText;\n dataEleProps.nullTextProps = ElementUtil.readTextProps(null, props.nullTextProps, this.options);\n dataEleProps.valueTextProps = ElementUtil.readTextProps(null, props.valueTextProps, this.options);\n return dataEleProps;\n }\n\n\n}\n","import {DataElementBaseFactory, InlineGroupInputElement} from \"./data-element-base-impl\";\nimport {InlineGroupRenderObject, IRenderData, RenderObject} from \"../../render-define\";\nimport {RenderContextType} from \"../../render-context\";\nimport {SerializeProps, ViewOptions, Element, Position} from \"../../element-define\";\nimport {DataElementGroupProps} from \"../../element-props\";\nimport {ElementUtil} from \"../../element-util\";\nimport {ContextMenuElementEvent} from \"../../element-event-define\";\nimport {ElementSerialize} from \"../../element-serialize\";\nimport {ParagraphRenderObject} from \"../paragraph/p-impl\";\nimport {CommonUtil} from \"../../common-util\";\n\nexport class DataElementGroupElement extends InlineGroupInputElement<DataElementGroupProps> {\n constructor() {\n super('data-group');\n this.props = new DataElementGroupProps();\n this.addEvent('ElementMousemove', (evt) => {\n this.isMouseenter = true;\n this.refreshView();\n });\n this.addEvent('ElementMouseLeave', (evt) => {\n this.isMouseenter = false;\n this.refreshView();\n });\n }\n\n clone(data: boolean): Element {\n return super.cloneSelf(data, DataElementGroupElement);\n }\n\n createRenderObject(options: ViewOptions, renderCtx: RenderContextType): RenderObject | null {\n if (this.props.hidden) {\n return null;\n }\n return new DataElementGroupRenderObject(this);\n }\n\n serialize(viewOptions: ViewOptions): SerializeProps | null {\n return {\n type: this.type,\n props: {\n ...this.props.getSerializeProps()\n }\n }\n }\n\n}\n\n\nexport class DataElementGroupRenderObject extends InlineGroupRenderObject<DataElementGroupElement> {\n paintPos!: Position;\n\n\n render(e: IRenderData): void {\n this.paintPos = e.position;\n }\n\n private getCurrentParaGroupRenders(): DataElementGroupRenderObject[] {\n const renders: DataElementGroupRenderObject[] = [];\n const currParaRender = ElementUtil.getParentRender(this, ParagraphRenderObject) as ParagraphRenderObject;\n for (let i = 0; i < this.element.paintRenders.length; i++) {\n const paraRender = ElementUtil.getParentRender(this.element.paintRenders[i], ParagraphRenderObject) as ParagraphRenderObject;\n if (paraRender === currParaRender) {\n renders.push(this.element.paintRenders[i] as DataElementGroupRenderObject);\n }\n }\n return renders;\n }\n\n\n pagePaintCompleted(e: IRenderData): void {\n const {render, docCtx: {viewOptions}} = e;\n const canPaint = this.element.isMouseenter || this.element.isFocused;\n if (canPaint && this.element.paintRenders.indexOf(this) === 0) {\n const currParaRenders = this.getCurrentParaGroupRenders();\n const verOffset = 3;\n if (currParaRenders.length > 1) {\n const secondGroupRenderPos = currParaRenders[1].paintPos;\n if (secondGroupRenderPos.x + currParaRenders[1].rect.width > this.paintPos.x) {\n const leftPoints: Array<Position> = [];\n const rightPoints: Array<Position> = [];\n for (let i = 0; i < currParaRenders.length; i++) {\n const groupRender = currParaRenders[i];\n const groupRenderPos = groupRender.paintPos;\n\n leftPoints.push({x: groupRenderPos.x, y: groupRenderPos.y - verOffset});\n rightPoints.push({\n x: groupRenderPos.x + groupRender.rect.width,\n y: groupRenderPos.y - verOffset\n });\n leftPoints.push({\n x: groupRenderPos.x,\n y: groupRenderPos.y + groupRender.rect.height + verOffset * 2\n });\n rightPoints.push({\n x: groupRenderPos.x + groupRender.rect.width,\n y: groupRenderPos.y + groupRender.rect.height + verOffset * 2\n });\n }\n const sharpPoints1 = CommonUtil.resharpPoints(rightPoints);\n const sharpPoints = CommonUtil.resharpPoints([...leftPoints.reverse()]);\n render.overlaysContext.strokeLines([...sharpPoints, ...sharpPoints1, sharpPoints[0]], 1, viewOptions.dataGroupColor);\n return;\n }\n }\n for (let i = 0; i < currParaRenders.length; i++) {\n const currRen = currParaRenders[i];\n render.overlaysContext.strokeRect(currRen.paintPos.x, currRen.paintPos.y - verOffset, currRen.rect.width, currRen.rect.height + verOffset * 2, viewOptions.dataGroupColor);\n }\n }\n\n }\n\n\n endRender(ctx: RenderContextType, position: Position): void {\n\n }\n\n clone(): RenderObject {\n const cloneRender = new DataElementGroupRenderObject(this.element);\n cloneRender.rect = ElementUtil.cloneRect(this.rect);\n for (let i = 0; i < this.length; i++) {\n cloneRender.addChild(this.getChild(i).clone());\n }\n return cloneRender;\n }\n}\n\nexport class DataElementGroupFactory extends DataElementBaseFactory<DataElementGroupProps> {\n match(type: string): boolean {\n return type === \"data-group\"\n }\n\n createElement(data: any, renderCtx: RenderContextType): Element {\n const props = data.props as DataElementGroupProps;\n const ele = new DataElementGroupElement();\n ele.props.id = props.id;\n ele.props.name = props.name;\n ele.props.hidden = Boolean(props.hidden);\n return ele;\n }\n\n}\n\n","import {\n Element,\n ElementFactory,\n ImgLoadStatus,\n LeafElement,\n Position,\n readElementProps,\n ResizeLeafRenderObject,\n SerializeProps,\n ViewOptions\n} from \"../../element-define\";\nimport {DataEleImageProps} from \"../../element-props\";\nimport {ElementUtil} from \"../../element-util\";\nimport {RenderContextType} from \"../../render-context\";\nimport {IRenderData, LeafRenderObject, RenderObject} from \"../../render-define\";\nimport {DataElementLeaf} from \"./data-element-base-impl\";\nimport {EditorContext} from \"../../document-context\";\n\nexport class DataElementImage extends DataElementLeaf<DataEleImageProps> {\n //props: DataEleImageProps;\n status: ImgLoadStatus = 'no';\n resizeable: boolean = true;\n\n constructor() {\n super('data-ele-img');\n this.props = new DataEleImageProps();\n //this.addPropValueChangedSub(this.props);\n this.cursorType = 'move'\n this.focusable = true;\n }\n\n createRenderObject(): LeafRenderObject {\n const render = new DataImageRenderObject(this);\n render.rect.width = this.props.width + 2;\n render.rect.height = this.props.height + 2;\n return render;\n }\n\n serialize(options: ViewOptions): SerializeProps {\n return {\n type: 'data-ele-img',\n props: {\n ...this.props.getSerializeProps(options)\n }\n }\n }\n\n clone(data: boolean): Element {\n const clone = new DataElementImage();\n this.props.clone(clone.props);\n return clone;\n }\n\n loadImage(ctx: EditorContext): void {\n if (this.status === 'no') {\n this.status = 'loading';\n const onCallback = (status: ImgLoadStatus) => {\n this.status = status;\n if (status === 'completed') {\n this.refreshView();\n }\n }\n ctx.imageLoader.loadImage(this.props.src, onCallback);\n }\n }\n\n destroy(): void {\n super.destroy();\n }\n\n setValue(val: any): void {\n if (this.getValue() === val) {\n return;\n }\n this.props.src = val as string;\n }\n\n getValue(): string {\n return this.props.src;\n }\n}\n\nexport class DataImageRenderObject extends ResizeLeafRenderObject {\n render(e: IRenderData): void {\n const {render, position,docCtx} = e;\n const dataImgElement = this.element as DataElementImage;\n const picProps = dataImgElement.props;\n if (dataImgElement.status === 'no') {\n dataImgElement.loadImage(docCtx);\n return;\n }\n if (dataImgElement.status === 'completed') {\n const imageSource = docCtx.imageLoader.getImage(picProps.src);\n if (!imageSource) {\n return;\n }\n if (picProps.border === 'all') {\n render.contentContext.strokeRect(position.x, position.y, this.rect.width, this.rect.height, 'black');\n }\n render.contentContext.drawImage(imageSource, 0, 0, imageSource.naturalWidth, imageSource.naturalHeight, position.x + 2, position.y + 2, picProps.width, picProps.height);\n }\n if (render.drawMode === 'view') {\n let {x, y} = position;\n const {width, height} = this.rect;\n const lineWidth = 5;\n const paintColor = '#0050b3';\n render.contentContext.strokeLines([{x: x + lineWidth, y}, {x, y}, {x, y: y + height}, {\n x: x + lineWidth,\n y: y + height\n }], 1, paintColor);\n x = x + width;\n render.contentContext.strokeLines([{x: x - lineWidth, y}, {x, y}, {x, y: y + height}, {\n x: x - lineWidth,\n y: y + height\n }], 1, paintColor);\n }\n }\n\n clone(): RenderObject {\n const clone = new DataImageRenderObject(this.element);\n clone.rect = ElementUtil.cloneRect(this.rect);\n return clone;\n }\n\n pagePaintCompleted(e:IRenderData): void {\n if (this.element.isFocused) {\n const {render,position:pos}=e;\n const {width, height} = this.rect;\n render.contentContext.strokeRect(pos.x, pos.y, this.rect.width, this.rect.height, '#1890ff', 0.5);\n this.drawResizeCircle(render, pos.x, pos.y);\n this.drawResizeCircle(render, pos.x + width, pos.y);\n this.drawResizeCircle(render, pos.x, pos.y + height);\n this.drawResizeCircle(render, pos.x + width, pos.y + height);\n this.drawResizeCircle(render, pos.x + (Math.floor(width / 2)), pos.y);\n this.drawResizeCircle(render, pos.x + (Math.floor(width / 2)), pos.y + height);\n this.drawResizeCircle(render, pos.x, pos.y + (Math.floor(height / 2)));\n this.drawResizeCircle(render, pos.x + width, pos.y + (Math.floor(height / 2)));\n }\n }\n\n private drawResizeCircle(ctx: RenderContextType, x: number, y: number): void {\n const ctxNative = ctx.contentContext.ctx;\n ctxNative.save();\n ctxNative.fillStyle = '#69c0ff';\n ctxNative.beginPath();\n ctxNative.arc(x, y, Math.floor(4 / 5 * 4), 0, 2 * Math.PI);\n ctxNative.closePath();\n ctxNative.fill();\n ctxNative.restore();\n }\n}\n\n\nexport class DataElementImgFactory extends ElementFactory<DataEleImageProps> {\n match(type: string): boolean {\n return type === 'data-ele-img';\n }\n\n createElement(data: readElementProps<DataEleImageProps>, renderCtx: RenderContextType): Element {\n const props = data.props as DataEleImageProps;\n const pic = new DataElementImage();\n ElementUtil.readEleBaseProps(pic.props, props);\n //pic.props.id = props.id ?? nanoid(5);\n //pic.props.name = props.name;\n //pic.props.caption = props.caption;\n //pic.props.type = props.type;\n pic.props.width = props.width;\n pic.props.height = props.height;\n pic.props.src = props.src;\n pic.props.border = props.border || 'all';\n return pic;\n }\n}\n","import {Element, ElementFactory, readElementProps, SerializeProps, ViewOptions} from \"../../element-define\";\nimport {DataEleListProps, DataEleBaseTextProps} from \"../../element-props\";\nimport {ElementUtil} from \"../../element-util\";\nimport {RenderContextType} from \"../../render-context\";\nimport {RenderObject} from \"../../render-define\";\nimport {ElementSerialize} from \"../../element-serialize\";\nimport {TextGroupElement} from \"../text/text-impl\";\nimport {DataElementBaseFactory, DataElementInlineGroup, DataElementRenderObject} from \"./data-element-base-impl\";\n\nexport class DataElementList extends DataElementInlineGroup<DataEleListProps> {\n //props: DataEleListProps;\n constructor() {\n super('data-ele-list');\n this.props = new DataEleListProps();\n }\n\n createRenderObject(): RenderObject {\n return new DataElementListRenderObject(this);\n }\n\n serialize(viewOptions: ViewOptions): SerializeProps & any {\n return {\n type: this.type,\n props: {\n ...this.props.getSerializeProps(viewOptions)\n }\n }\n }\n\n clone(data: boolean): DataElementList {\n return super.cloneSelf(data, DataElementList);\n }\n\n setValue(vals: string[]): void {\n if (this.getValue() === vals.join(';')) {\n return;\n }\n this.pubOnChange('self');\n this.clearInnerItems();\n if (this.props.multiSelect) {\n for (let i = 0; i < vals.length; i++) {\n const val = vals[i];\n const option = this.props.options.find(item => item.code === val);\n if (option) {\n const valueText = new TextGroupElement();\n this.props.valueTextProps.clone(valueText.props);\n const splitSymbol = i < vals.length - 1 ? ';' : ''\n valueText.text = option.value + splitSymbol;\n this.addChild(valueText, this.length - 1);\n }\n }\n } else {\n if (vals.length > 1) {\n console.warn('当前下拉框是单选模式,不能传入多个值')\n }\n const val = vals[0];\n const option = this.props.options.find(item => item.code === val);\n if (option) {\n const valueText = new TextGroupElement();\n this.props.valueTextProps.clone(valueText.props);\n valueText.text = option.value;\n this.addChild(valueText, this.length - 1);\n }\n }\n this.beginMeasure();\n }\n\n getValue(): string {\n const values = ElementSerialize.serializeString(this);\n if (!values) {\n return '';\n }\n const valueItems = values.split(';');\n const valueCode: Array<string> = [];\n for (const valueItem of valueItems) {\n const option = this.props.options.find(item => item.value === valueItem);\n if (option) {\n valueCode.push(option.code)\n } else {\n valueCode.push(option + '')\n }\n }\n return valueCode.join(';')\n }\n}\n\n\nexport class DataElementListRenderObject extends DataElementRenderObject<DataElementList> {\n constructor(element: DataElementList) {\n super(element);\n }\n\n clone(): RenderObject {\n const cloneRender = new DataElementListRenderObject(this.element);\n cloneRender.rect = ElementUtil.cloneRect(this.rect);\n for (let i = 0; i < this.length; i++) {\n cloneRender.addChild(this.getChild(i).clone());\n }\n return cloneRender;\n }\n\n}\n\nexport class DataElementListFactory extends DataElementBaseFactory<DataEleListProps> {\n match(type: string): boolean {\n return type === \"data-ele-list\"\n }\n\n createElement(data: readElementProps<DataEleListProps>, renderCtx: RenderContextType): Element {\n const props = data.props as DataEleListProps;\n const ele = new DataElementList();\n this.createDataEleProps(ele.props, props);\n return ele;\n }\n\n createDataEleProps(dest: DataEleListProps, props: DataEleListProps): DataEleBaseTextProps {\n const dataEleProps: DataEleListProps = dest;\n ElementUtil.readEleBaseProps(dataEleProps, props);\n //dataEleProps.id = props.id ?? nanoid(5);\n //dataEleProps.name = props.name;\n //dataEleProps.caption = props.caption;\n //dataEleProps.type = props.type;\n dataEleProps.nullText = props.nullText;\n dataEleProps.nullTextProps = ElementUtil.readTextProps(null, props.nullTextProps, this.options);\n dataEleProps.valueTextProps = ElementUtil.readTextProps(null, props.valueTextProps, this.options);\n const options = props.options || [];\n dataEleProps.multiSelect = props.multiSelect;\n dataEleProps.options = [...options];\n dataEleProps.dropDownStyle = props.dropDownStyle;\n return dataEleProps;\n }\n\n}\n","import {Element, SerializeProps, ViewOptions} from \"../../element-define\";\nimport {DataEleBaseTextProps} from \"../../element-props\";\nimport {ElementUtil} from \"../../element-util\";\nimport {RenderContextType} from \"../../render-context\";\nimport {RenderObject} from \"../../render-define\";\nimport {ElementSerialize} from \"../../element-serialize\";\nimport {TextGroupElement} from \"../text/text-impl\";\nimport {DataElementBaseFactory, DataElementInlineGroup, DataElementRenderObject} from \"./data-element-base-impl\";\n\nexport class DataElementText extends DataElementInlineGroup<DataEleBaseTextProps> {\n //props: DataEleBaseTextProps;\n constructor() {\n super('data-ele-text');\n this.props = new DataEleBaseTextProps();\n }\n\n createRenderObject(): RenderObject {\n return new DataElementTextRenderObject(this);\n }\n\n serialize(viewOptions: ViewOptions): SerializeProps & any {\n return {\n type: this.type,\n props: {\n ...this.props.getSerializeProps(viewOptions)\n }\n }\n }\n\n clone(data: boolean): DataElementText {\n return super.cloneSelf(data, DataElementText);\n }\n\n setValue(val: string): void {\n if (!this.startDecorate) {\n return;\n }\n if (this.getValue() === val) {\n return;\n }\n this.pubOnChange('self');\n this.clearInnerItems();\n if (val) {\n const valueText = new TextGroupElement();\n this.props.valueTextProps.clone(valueText.props);\n valueText.text = val;\n this.addChild(valueText, this.length - 1);\n }\n this.beginMeasure();\n }\n\n getValue(): string {\n return ElementSerialize.serializeString(this, {all: false});\n }\n\n validate(): string {\n let error = super.validate();\n if (error) {\n return error;\n }\n return '';\n\n }\n}\n\nexport class DataElementTextRenderObject extends DataElementRenderObject<DataElementText> {\n constructor(element: DataElementText) {\n super(element);\n }\n\n clone(): RenderObject {\n const cloneRender = new DataElementTextRenderObject(this.element);\n cloneRender.rect = ElementUtil.cloneRect(this.rect);\n for (let i = 0; i < this.length; i++) {\n cloneRender.addChild(this.getChild(i).clone());\n }\n return cloneRender;\n }\n\n}\n\nexport class DataElementTextFactory extends DataElementBaseFactory<DataEleBaseTextProps> {\n match(type: string): boolean {\n return type === \"data-ele-text\"\n }\n\n createElement(data: any, renderCtx: RenderContextType): Element {\n const props = data.props as DataEleBaseTextProps;\n const ele = new DataElementText();\n this.createDataEleProps(ele.props, props);\n return ele;\n }\n\n createDataEleProps(dest: DataEleBaseTextProps, props: DataEleBaseTextProps): DataEleBaseTextProps {\n const dataEleProps: DataEleBaseTextProps = dest;\n ElementUtil.readEleBaseProps(dataEleProps, props);\n //dataEleProps.id = props.id ?? nanoid(5);\n //dataEleProps.name = props.name;\n //dataEleProps.caption = props.caption;\n //dataEleProps.type = props.type;\n dataEleProps.nullText = props.nullText;\n dataEleProps.nullTextProps = ElementUtil.readTextProps(null, props.nullTextProps, this.options);\n dataEleProps.valueTextProps = ElementUtil.readTextProps(null, props.valueTextProps, this.options);\n dataEleProps.dataType = props.dataType;\n return dataEleProps;\n }\n\n}\n","import {Element, LeafElement, SerializeProps, ViewOptions} from \"../../element-define\";\nimport {ElementUtil} from \"../../element-util\";\nimport {RenderContextType} from \"../../render-context\";\nimport {IRenderData, LeafRenderObject, RenderObject} from \"../../render-define\";\n\n/**\n * 当前数据元内容长度小于最小长度时,需要当前元素撑开以达到最小长度\n */\nexport class FillNullSpaceElement extends LeafElement {\n //需要填充的长度\n length!: number;\n\n constructor() {\n super('fill-null');\n this.isDecorate = true;\n this.disableClick = true;\n }\n\n createRenderObject(options: ViewOptions, renderCtx: RenderContextType): RenderObject {\n return new FillNullSpaceRenderObject();\n }\n\n serialize(viewOptions: ViewOptions): SerializeProps {\n throw new Error(\"Method not implemented.\");\n }\n\n clone(data: boolean): Element {\n //throw new Error(\"Method not implemented.\");\n return new FillNullSpaceElement();\n }\n\n}\n\n\nexport class FillNullSpaceRenderObject extends LeafRenderObject {\n constructor() {\n super(null);\n this.disableClick = true;\n }\n\n render(e: IRenderData): void {\n }\n\n clone(): RenderObject {\n const clone = new FillNullSpaceRenderObject();\n clone.rect = ElementUtil.cloneRect(this.rect);\n return clone;\n }\n\n}","import {BlockContainerElement, SerializeProps, Element, readElementProps, ElementFactory} from \"../../element-define\";\nimport {ElementUtil} from \"../../element-util\";\nimport {RenderContextType} from \"../../render-context\";\nimport {IRenderData, MuiltBlockLineRenderObject, RenderObject} from \"../../render-define\";\nimport {BodyPartProps} from \"../../element-props\";\n\n/**\n * 用于合并病程录,每个part包含每份病程录body\n * 多个part处于一个body下面\n */\nexport class DocumentBodyPartElement extends BlockContainerElement<BodyPartProps> {\n //是否被修改\n isModify!: boolean;\n\n constructor() {\n super('body-part');\n this.addEvent('ElementMousemove', (evt) => {\n this.isMouseenter = true;\n this.refreshView();\n });\n this.addEvent('ElementMouseLeave', (evt) => {\n this.isMouseenter = false;\n this.refreshView();\n });\n this.addEvent('GotCursor', (evt) => {\n this.isFocused = true;\n this.refreshView();\n });\n this.addEvent('LostCursor', (evt) => {\n this.isFocused = false;\n this.refreshView();\n });\n this.props = new BodyPartProps();\n }\n\n createRenderObject(): DocumentBodyPartRenderObject {\n const render = new DocumentBodyPartRenderObject(this);\n render.margin.top = 10;\n render.margin.bottom = 10;\n return render;\n }\n\n serialize(): SerializeProps {\n return {\n type: this.type,\n props: {\n partId: this.props.partId,\n }\n }\n }\n\n clone(data: boolean): DocumentBodyPartElement {\n const clone = new DocumentBodyPartElement();\n clone.props.partId = this.props.partId;\n if (data) {\n for (let i = 0; i < this.length; i++) {\n clone.addChild(this.getChild(i).clone(true));\n }\n }\n return clone;\n }\n}\n\n\nexport class DocumentBodyPartRenderObject extends MuiltBlockLineRenderObject {\n render(e: IRenderData): void {\n const {render, position} = e;\n const bgColor = (this.element.isFocused || this.element.isMouseenter) ? '#d9d9d9' : '#ffffff';\n render.overlaysContext.fillRect(position.x - 2, position.y - 2, this.rect.width + 4, this.rect.height + 4, bgColor, 5, 'black');\n }\n\n clone(cloneData = true): RenderObject {\n const cloneRender = new DocumentBodyPartRenderObject(this.element);\n cloneRender.rect = ElementUtil.cloneRect(this.rect);\n cloneRender.margin.top = this.margin.top;\n cloneRender.margin.bottom = this.margin.bottom;\n if (cloneData) {\n for (let i = 0; i < this.length; i++) {\n cloneRender.addChild(this.getChild(i).clone());\n }\n }\n return cloneRender;\n }\n\n}\n\nexport class DocumentBodyPartFactory extends ElementFactory<BodyPartProps> {\n match(type: string): boolean {\n return type === 'body-part';\n }\n\n createElement(data: readElementProps<BodyPartProps>, renderCtx: RenderContextType): Element<any> {\n const bodyPart = data.props?.partId || '';\n const element = new DocumentBodyPartElement();\n element.props.partId = bodyPart;\n return element;\n }\n\n}","import { CommonUtil } from \"../../common-util\";\nimport { ViewOptions, Element, SerializeProps, ElementFactory, readElementProps, Rect } from \"../../element-define\";\nimport { DataEleMHProps, TextProps } from \"../../element-props\";\nimport { ElementUtil } from \"../../element-util\";\nimport { RenderContextType } from \"../../render-context\";\nimport { IRenderData, LeafRenderObject, RenderObject } from \"../../render-define\";\nimport { DataElementLeaf } from \"../data-element/data-element-base-impl\";\n\n/**\n * 月经史\n */\nexport class DataElementMH extends DataElementLeaf<DataEleMHProps> {\n //props!: DataEleMHProps;\n constructor() {\n super('data-ele-mh')\n this.props = new DataEleMHProps();\n //this.addPropValueChangedSub(this.props);\n }\n\n setValue(val: DataEleMHProps | string | null): void {\n if (typeof val === 'string' && val) {\n const items = val.split(';');\n if (items.length >= 4) {\n const mhLayoutItem = getMHItem(this.props.kind);\n this.props[mhLayoutItem.left.prop] = items[0];\n this.props[mhLayoutItem.top.prop] = items[1];\n this.props[mhLayoutItem.bottom.prop] = items[2];\n this.props[mhLayoutItem.right.prop] = items[3];\n }\n } else if (typeof val === 'object') {\n this.props.age = val?.age ?? '';\n this.props.days = val?.days ?? '';\n this.props.cycles = val?.cycles ?? '';\n this.props.lastDate = val?.lastDate ?? '';\n this.props.closeAge = val?.closeAge ?? '';\n }\n }\n\n getValue() {\n const layoutItem = getMHItem(this.props.kind);\n return `${this.props[layoutItem.left.prop]};${this.props[layoutItem.top.prop]};${this.props[layoutItem.bottom.prop]};${this.props[layoutItem.right.prop]}`;\n }\n\n createRenderObject(options: ViewOptions, renderCtx: RenderContextType): RenderObject<Element> | null {\n const render = new DataRenderMH(this);\n const measure = renderMH(this, renderCtx, { x: 0, y: 0 }, false);\n if (measure) {\n render.rect.width = measure.width;\n render.rect.height = measure.height;\n }\n return render;\n }\n\n serialize(viewOptions: ViewOptions): SerializeProps | null {\n return {\n type: this.type,\n props: this.props.getSerializeProps(viewOptions)\n }\n }\n\n clone(data: boolean): Element {\n const element = new DataElementMH();\n this.props.clone(element.props);\n return element;\n }\n\n getCurrentLayoutItem(): MHLayoutType {\n return getMHItem(this.props.kind);\n }\n\n}\n\ntype MHLayoutType = {\n [key in 'left' | 'top' | 'right' | 'bottom']: {\n tip: '初潮年龄' | '行经期天数' | '末次月经时间' | '月经周期天数' | '闭经年龄',\n prop: 'age' | 'days' | 'cycles' | 'lastDate' | 'closeAge'\n }\n}\n\nconst mhLayoutItems: Array<MHLayoutType> = [\n {\n left: { tip: '初潮年龄', prop: 'age' },\n top: { tip: '行经期天数', prop: 'days' },\n right: { tip: '末次月经时间', prop: 'lastDate' },\n bottom: { tip: '月经周期天数', prop: 'cycles' }\n },\n {\n left: { tip: '初潮年龄', prop: 'age' },\n top: { tip: '闭经年龄', prop: 'closeAge' },\n right: { tip: '末次月经时间', prop: 'lastDate' },\n bottom: { tip: '行经期天数', prop: 'days' }\n },\n {\n left: { tip: '闭经年龄', prop: 'closeAge' },\n top: { tip: '行经期天数', prop: 'days' },\n right: { tip: '末次月经时间', prop: 'lastDate' },\n bottom: { tip: '月经周期天数', prop: 'cycles' }\n },\n {\n left: { tip: '初潮年龄', prop: 'age' },\n top: { tip: '月经周期天数', prop: 'cycles' },\n right: { tip: '末次月经时间', prop: 'lastDate' },\n bottom: { tip: '行经期天数', prop: 'days' }\n },\n {\n left: { tip: '初潮年龄', prop: 'age' },\n top: { tip: '闭经年龄', prop: 'closeAge' },\n right: { tip: '末次月经时间', prop: 'lastDate' },\n bottom: { tip: '月经周期天数', prop: 'cycles' }\n }\n]\n\n\nfunction getMHItem(kind: string): MHLayoutType {\n kind = kind ?? 'A';\n kind = kind.toUpperCase();\n let kindIndex = ['A', 'B', 'C', 'D', 'E'].indexOf(kind);\n kindIndex = kindIndex < 0 ? 0 : kindIndex;\n return mhLayoutItems[kindIndex];\n}\n\nexport class DataRenderMH extends LeafRenderObject<DataElementMH> {\n render(e: IRenderData): void {\n renderMH(this.element, e.render, e.position, true);\n }\n\n clone(): RenderObject<Element> {\n const clone = new DataRenderMH(this.element);\n clone.rect = ElementUtil.cloneRect(this.rect);\n return clone;\n }\n}\n\nexport class DataElementMHFactory extends ElementFactory<DataEleMHProps> {\n match(type: string): boolean {\n return type === 'data-ele-mh'\n }\n\n createElement(data: readElementProps<DataEleMHProps>, renderCtx: RenderContextType): Element {\n const ele = new DataElementMH();\n ElementUtil.readEleBaseProps(ele.props, data.props as DataEleMHProps);\n ele.props.age = data.props?.age ?? '';\n ele.props.cycles = data.props?.cycles ?? '';\n ele.props.days = data.props?.days ?? '';\n ele.props.lastDate = data.props?.lastDate ?? '';\n ele.props.closeAge = data.props?.closeAge ?? '';\n ele.props.kind = data.props?.kind ?? 'A';\n return ele;\n }\n\n}\n\nfunction renderMH(element: DataElementMH, ctx: RenderContextType, position: { x: number; y: number; }, isPaint: boolean): { width: number, height: number } | void {\n let { x, y } = position;\n const defaultTextProps = new TextProps()\n const paddingVer = 2;\n const paddingHor = 5;\n defaultTextProps.fontSize = 12;\n defaultTextProps.fontName = '仿宋';\n defaultTextProps.color = \"rgb(0,0,0)\";\n const currentLayout = getMHItem(element.props.kind);\n const left = CommonUtil.getEmptyValue(element.props[currentLayout.left.prop], currentLayout.left.tip);\n const top = CommonUtil.getEmptyValue(element.props[currentLayout.top.prop], currentLayout.top.tip);\n const bottom = CommonUtil.getEmptyValue(element.props[currentLayout.bottom.prop], currentLayout.bottom.tip);\n const right = CommonUtil.getEmptyValue(element.props[currentLayout.right.prop], currentLayout.right.tip);\n const leftRect = ctx.contentContext.measureText(left, defaultTextProps)\n const topRect = ctx.contentContext.measureText(top, defaultTextProps)\n const bottomRect = ctx.contentContext.measureText(bottom, defaultTextProps)\n const rightRect = ctx.contentContext.measureText(right, defaultTextProps)\n let height = topRect.height + bottomRect.height;\n const middleWidth = Math.max(topRect.width, bottomRect.width)\n let width = leftRect.width + middleWidth + rightRect.width;\n if (!isPaint) {\n return { width: width + paddingHor * 2, height: height + paddingVer * 2 }\n }\n x += paddingHor;\n y += paddingVer;\n //年龄\n ctx.contentContext.drawText(left, defaultTextProps, x, y + (height - leftRect.height) / 2, leftRect.width, leftRect.height)\n x += leftRect.width;\n //天数\n ctx.contentContext.drawText(top, defaultTextProps, x + (middleWidth - topRect.width) / 2, y - 2, topRect.width, topRect.height);\n //分割线\n ctx.contentContext.drawHoriLine(x, y + topRect.height, middleWidth)\n //周期\n ctx.contentContext.drawText(bottom, defaultTextProps, x + (middleWidth - bottomRect.width) / 2, y + topRect.height + 2, bottomRect.width, bottomRect.height);\n //末次时间\n x += middleWidth;\n ctx.contentContext.drawText(right, defaultTextProps, x, y + (height - leftRect.height) / 2, rightRect.width, rightRect.height)\n\n if (ctx.drawMode === 'view') {\n let { x, y } = position;\n width = width + paddingHor * 2;\n height = height + paddingVer * 2;\n //const { width, height } = this.rect;\n const lineWidth = 3;\n const paintColor = '#0050b3';\n ctx.contentContext.strokeLines([{ x: x + lineWidth, y }, { x, y }, { x, y: y + height }, {\n x: x + lineWidth,\n y: y + height\n }], 1, paintColor);\n x = x + width;\n ctx.contentContext.strokeLines([{ x: x - lineWidth, y }, { x, y }, { x, y: y + height }, {\n x: x - lineWidth,\n y: y + height\n }], 1, paintColor);\n }\n}\n\n\n","import {\n Element,\n ElementFactory,\n ImgLoadStatus,\n LeafElement,\n Position,\n ResizeLeafRenderObject,\n SerializeProps,\n ViewOptions\n} from \"../../element-define\";\nimport {PictureProps} from \"../../element-props\";\nimport {ElementUtil} from \"../../element-util\";\nimport {RenderContextType} from \"../../render-context\";\nimport {IRenderData, LeafRenderObject, RenderObject} from \"../../render-define\";\nimport {EditorContext} from \"../../document-context\";\n\n\ninterface IResizeElement {\n resizeable: boolean;\n}\n\nexport class PictureElement extends LeafElement<PictureProps> implements IResizeElement {\n //props: PictureProps;\n status: ImgLoadStatus = 'no';\n resizeable: boolean = true;\n\n constructor() {\n super('img');\n this.props = new PictureProps();\n //this.addPropValueChangedSub(this.props);\n this.cursorType = 'move'\n this.focusable = true;\n }\n\n createRenderObject(): LeafRenderObject {\n const render = new PictureRenderObject(this);\n render.rect.width = this.props.width + 2;\n render.rect.height = this.props.height + 2;\n return render;\n }\n\n serialize(options: ViewOptions): SerializeProps {\n return {\n type: 'img',\n props: {\n ...this.props.getSerializeProps(options)\n }\n }\n }\n\n clone(data: boolean): Element {\n const clone = new PictureElement();\n this.props.clone(clone.props);\n return clone;\n }\n\n loadImage(ctx: EditorContext): void {\n if (this.status === 'no') {\n this.status = 'loading';\n //this.imageSource = new Image();\n //this.imageSource.src = this.props.src;\n // const onload = (e: any) => {\n // this.isLoad = 'completed';\n // this.refreshView('appearance');\n // };\n // const onerror = (e: any) => {\n // this.isLoad = 'error';\n // console.error(e);\n // };\n const onCallback = (status: ImgLoadStatus) => {\n this.status = status;\n if (status === 'completed') {\n this.refreshView();\n }\n }\n ctx.imageLoader.loadImage(this.props.src, onCallback);\n }\n }\n\n destroy(): void {\n super.destroy();\n }\n}\n\nexport class PictureRenderObject extends ResizeLeafRenderObject {\n render(e: IRenderData): void {\n const {render, position,docCtx} = e;\n const picElement = this.element as PictureElement;\n const picProps = picElement.props;\n if (picElement.status === 'no') {\n picElement.loadImage(docCtx);\n return;\n }\n if (picElement.status === 'completed') {\n const imageSource = docCtx.imageLoader.getImage(picProps.src);\n if (!imageSource) {\n return;\n }\n if (picProps.border === 'all') {\n render.contentContext.strokeRect(position.x, position.y, this.rect.width, this.rect.height, 'black');\n }\n render.contentContext.drawImage(imageSource, 0, 0, imageSource.naturalWidth, imageSource.naturalHeight, position.x + 2, position.y + 2, picProps.width, picProps.height);\n }\n }\n\n clone(): RenderObject {\n const clone = new PictureRenderObject(this.element);\n clone.rect = ElementUtil.cloneRect(this.rect);\n return clone;\n }\n\n pagePaintCompleted(e:Omit<IRenderData, \"nextRender\">): void {\n if (this.element.isFocused) {\n const {render,position:pos}=e;\n const {width, height} = this.rect;\n render.contentContext.strokeRect(pos.x, pos.y, width, height, '#1890ff', 0.5);\n this.drawResizeCircle(render, pos.x, pos.y);\n this.drawResizeCircle(render, pos.x + width, pos.y);\n this.drawResizeCircle(render, pos.x, pos.y + height);\n this.drawResizeCircle(render, pos.x + width, pos.y + height);\n this.drawResizeCircle(render, pos.x + (Math.floor(width / 2)), pos.y);\n this.drawResizeCircle(render, pos.x + (Math.floor(width / 2)), pos.y + height);\n this.drawResizeCircle(render, pos.x, pos.y + (Math.floor(height / 2)));\n this.drawResizeCircle(render, pos.x + width, pos.y + (Math.floor(height / 2)));\n }\n }\n\n private drawResizeCircle(ctx: RenderContextType, x: number, y: number): void {\n const ctxNative = ctx.contentContext.ctx;\n ctxNative.fillStyle = '#69c0ff';\n ctxNative.beginPath();\n ctxNative.arc(x, y, Math.floor(4 / 5 * 4), 0, 2 * Math.PI);\n ctxNative.closePath();\n ctxNative.fill();\n }\n}\n\n\nexport class PictureFactory extends ElementFactory<PictureProps> {\n match(type: string): boolean {\n return type === 'img';\n }\n\n createElement(data: any, renderCtx: RenderContextType): Element {\n const props = data.props as PictureProps;\n const pic = new PictureElement();\n const picProps = pic.props;\n picProps.width = props.width;\n picProps.height = props.height;\n picProps.src = props.src;\n picProps.border = props.border || 'all';\n picProps.title = props.title;\n pic.props = picProps;\n return pic;\n }\n}\n","import {ElementFactory, LeafElement, SerializeProps} from \"../../element-define\";\nimport {RadioBoxProps} from \"../../element-props\";\nimport {ElementUtil} from \"../../element-util\";\nimport {RenderContextType} from \"../../render-context\";\nimport {IRenderData, LeafRenderObject, RenderObject} from \"../../render-define\";\n\nexport class RadioBoxElement extends LeafElement<RadioBoxProps> {\n //props: RadioBoxProps;\n constructor() {\n super('rd');\n this.props = new RadioBoxProps();\n //this.addPropValueChangedSub(this.props);\n this.cursorType = 'default'\n this.addEvent('ElementClick', (evt) => {\n this.changeState()\n });\n }\n\n createRenderObject(): RadioBoxRenderObject {\n const render = new RadioBoxRenderObject(this);\n render.rect.width = this.props.size + 4;\n render.rect.height = this.props.size;\n return render;\n }\n\n changeState(): void {\n const parent = this.parent;\n if (!parent) {\n throw new Error('parent is null')\n }\n for (let i = 0; i < parent.length; i++) {\n const child = parent.getChild(i);\n if (child instanceof RadioBoxElement && child !== this) {\n child.props.isChecked = false;\n }\n }\n this.props.isChecked = true;\n }\n\n serialize(): SerializeProps {\n return {\n type: 'rd',\n props: {\n ...this.props\n }\n }\n }\n\n clone(): RadioBoxElement {\n const clone = new RadioBoxElement();\n this.props.clone(clone.props);\n return clone;\n }\n}\n\nexport class RadioBoxFactory extends ElementFactory<RadioBoxProps> {\n match(type: string): boolean {\n return type === 'rd';\n }\n\n createElement(data: any, renderCtx: RenderContextType): RadioBoxElement {\n const rdElement = new RadioBoxElement();\n const props = data.props as RadioBoxProps;\n const ckbProps = rdElement.props;\n ckbProps.size = props.size ?? 14;\n ckbProps.isChecked = props.isChecked;\n rdElement.props = ckbProps;\n return rdElement;\n }\n}\n\nexport class RadioBoxRenderObject extends LeafRenderObject<RadioBoxElement> {\n\n render(e: IRenderData): void {\n const {render, position} = e;\n render.contentContext.drawRadioBox(position.x + 2, position.y, this.element.props.size, this.element.props.size, this.element.props.isChecked);\n }\n\n clone(cloneData = true): RenderObject {\n const clone = new RadioBoxRenderObject(this.element);\n clone.rect = ElementUtil.cloneRect(this.rect);\n return clone;\n }\n\n}\n","import {Element, ElementFactory, LeafElement, SerializeProps} from \"../../element-define\";\nimport {ElementUtil} from \"../../element-util\";\nimport {RenderContextType} from \"../../render-context\";\nimport {IRenderData, LeafRenderObject, RenderObject} from \"../../render-define\";\nimport {TextProps} from \"../../element-props\";\n\nexport class BreakElement extends LeafElement {\n textProps: TextProps;\n\n constructor() {\n super('br');\n this.textProps = new TextProps();\n this.textProps.fontSize = 14;\n this.textProps.fontName = '宋体';\n this.textProps.color = '#595959';\n }\n\n createRenderObject(): LeafRenderObject {\n const symbol = new BreakRenderObject(this);\n symbol.rect.height = 14;\n symbol.rect.width = 7;\n return symbol;\n }\n\n serialize(): SerializeProps {\n return {\n type: 'br',\n props: {}\n }\n }\n\n clone(): Element {\n const clone = new BreakElement();\n //clone.renderCtx = this.renderCtx;\n return clone;\n }\n\n}\n\nexport class BreakRenderObject extends LeafRenderObject<BreakElement> {\n render(e: IRenderData): void {\n const {render, position} = e;\n if (render.drawMode === 'print') {\n return;\n }\n render.contentContext.drawText('↓', this.element.textProps, position.x, position.y, 20, this.rect.height);\n }\n\n clone(): RenderObject {\n const render = new BreakRenderObject(this.element);\n render.rect = ElementUtil.cloneRect(this.rect);\n return render;\n }\n}\n\nexport class BreakFactory extends ElementFactory<null> {\n match(type: string): boolean {\n return type === 'br';\n }\n\n createElement(data: any, renderCtx: RenderContextType): Element {\n const ele = new BreakElement();\n return ele;\n }\n\n}\n\n","export interface ColumnPartOffset extends ColumnPart {\n offset: number\n}\n\nexport interface ColumnPart {\n index: number,\n width: number\n}\n\nexport interface ColumnPatch {\n type: 'modify' | 'insert',\n data: ColumnPart\n}\n\nexport class ColumnPatchUtil {\n static getPatchPacks(cols: Array<ColumnPart>, splitCols: Array<ColumnPart>): [Array<{ part: ColumnPartOffset, patchs: Array<ColumnPatch> }>, Array<Array<ColumnPart>>] {\n const oldLinePointMap = this.getLinePointMap(cols);\n //要分割的列坐标\n const newLinePointMap = this.getLinePointMap(splitCols);\n const resArray: Set<number> = new Set();\n const allPointMap = oldLinePointMap.concat(newLinePointMap);\n for (let i = 0; i < allPointMap.length; i++) {\n const part = allPointMap[i];\n resArray.add(part.offset);\n resArray.add(part.offset + part.width);\n }\n const points = Array.from(resArray).sort((first, second) => first - second);\n const patchs: Array<{ part: ColumnPartOffset, patchs: Array<ColumnPatch> }> = [];\n //获取其他行的拆分补丁\n for (let i = 0; i < points.length - 1; i++) {\n const partStartOffset = points[i];\n const partEndOffset = points[i + 1];\n const joinPart = oldLinePointMap.find(item => {\n const startOffset = item.offset;\n const endOffset = item.offset + item.width;\n return (\n (startOffset >= partStartOffset && startOffset < partEndOffset)\n ||\n (endOffset > partStartOffset && endOffset <= partEndOffset)\n ||\n (startOffset <= partStartOffset && endOffset >= partEndOffset)\n )\n });\n if (joinPart) {\n if (joinPart.offset === partStartOffset && joinPart.offset + joinPart.width === partEndOffset) {\n continue;\n }\n const patch = patchs.find(item => item.part === joinPart);\n if (patch) {\n patch.patchs.push({\n type: 'insert',\n data: {width: partEndOffset - partStartOffset, index: joinPart.index}\n })\n } else {\n patchs.push({\n part: joinPart,\n patchs: [{\n type: 'modify',\n data: {width: partEndOffset - partStartOffset, index: joinPart.index}\n }]\n })\n }\n }\n }\n //获取当前行的拆分补丁\n const currRowPaths: Array<Array<ColumnPart>> = [];\n const allColumnMap = this.getLinePointMap(this.getColumn(points));\n for (let i = 0; i < newLinePointMap.length; i++) {\n const partStartOffset = newLinePointMap[i].offset;\n const partEndOffset = newLinePointMap[i].offset + newLinePointMap[i].width;\n const joinParts = allColumnMap.filter(item => {\n const startOffset = item.offset;\n const endOffset = item.offset + item.width;\n return (\n (startOffset >= partStartOffset && startOffset < partEndOffset)\n ||\n (endOffset > partStartOffset && endOffset <= partEndOffset)\n ||\n (startOffset <= partStartOffset && endOffset >= partEndOffset)\n )\n });\n currRowPaths.push(joinParts);\n }\n return [patchs, currRowPaths];\n }\n\n\n private static getColumn(points: Array<number>): Array<ColumnPart> {\n const items: Array<ColumnPart> = [];\n for (let index = 0; index < points.length - 1; index++) {\n items.push({index, width: points[index + 1] - points[index]});\n }\n return items;\n }\n\n private static getSplitCols(width: number, cols: number): Array<ColumnPart> {\n const items: Array<ColumnPart> = [];\n for (let i = 0; i < cols; i++) {\n items.push({width: Math.floor(width / cols), index: i});\n }\n items[items.length - 1].width += width - items.reduce((prev, curr) => prev + curr.width, 0);\n return items;\n }\n\n private static getLinePointMap(hMergeCols: Array<ColumnPart>): Array<ColumnPartOffset> {\n const linePointMap: Array<ColumnPartOffset> = [];\n let x = 0;\n for (let i = 0; i < hMergeCols.length; i++) {\n const col = hMergeCols[i];\n linePointMap.push({index: col.index, width: col.width, offset: x});\n x += col.width;\n }\n return linePointMap;\n }\n}","import {SelectionState} from \"../../document-selection\";\nimport {ElementUtil} from \"../../element-util\";\nimport {TableCellElement} from \"./table-cell-impl\";\nimport {TableElement} from \"./table-impl\";\nimport {TableRowElement} from \"./table-row-impl\";\nimport {ColumnPart, ColumnPartOffset, ColumnPatch, ColumnPatchUtil} from \"./table-split-cell-patch\";\nimport {TableUtil} from \"./table-util\";\n\n/**\n * 拆分单元格\n * 蜀道难,难于上青天;拆分单元格,头发秃,精神衰,眼睛昏,身体废。\n *\n * 1.拆分为多列规则:不影响其他列宽度,将当前列宽度均分\n */\nexport class TableSplitCell {\n /**\n *\n * 普通单元格可以任意拆分行和列\n * 已合并的单元格,可以拆分任意数量的列;可以拆分的数量必须为合并单元格数量的约数\n */\n static splitCell(ss: SelectionState, rows: number, cols: number): void {\n const focusCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);\n if (!focusCell) {\n throw new Error('focusCell is null')\n }\n if (!focusCell.props.hMerge && !focusCell.props.vMerge) {\n this.splitNormalCell(ss, rows, cols);\n } else {\n this.splitMergeCell(ss, rows, cols);\n }\n // else if (!focusCell.cellProps.hMerge) {\n // const { endColIndex } = this.horSplitHorNormalCell(ss, rows, cols);\n // this.verSplitVerMergeCell(ss, rows, endColIndex);\n // }\n // //当前单元格为横向合并单元格\n // else {\n // const { endColIndex } = this.horSplitHorMergeCell(ss, rows, cols);\n // this.verSplitVerMergeCell(ss, rows, endColIndex);\n // }\n }\n\n\n /**\n * 拆分普通的单元格\n */\n private static splitNormalCell(ss: SelectionState, rows: number, cols: number): void {\n rows = rows < 1 ? 1 : rows;\n cols = cols < 1 ? 1 : cols;\n if (rows === 1 && cols === 1) {\n return;\n }\n const focusCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);\n const focusRow = ElementUtil.getParentByType(focusCell, TableRowElement);\n const tb = ElementUtil.getParentByType(focusRow, TableElement);\n if (!focusCell || !focusRow || !tb) {\n throw new Error('focusCell | focusRow | tb is null');\n }\n const focusCellIndex = focusRow.getChildIndex(focusCell);\n const focusRowIndex = focusRow.getIndex();\n const cellWidth = tb.getCellWidth(focusCellIndex);\n if (focusCell.props.hMerge || focusCell.props.vMerge) {\n return;\n }\n //拆分为多列\n if (cols > 1) {\n const splitCellWidths = this.getSplitCols(cellWidth, cols);\n tb.setCellWidth(focusCellIndex, splitCellWidths[0].width);\n for (let i = 1; i < splitCellWidths.length; i++) {\n tb.insertCol(focusCellIndex + i, splitCellWidths[i].width);\n }\n for (let i = 0; i < tb.length; i++) {\n const row = tb.getChild(i) as TableRowElement;\n //获取主单元格\n const masterCell = row.getChild(focusCellIndex) as TableCellElement;\n for (let j = 1; j < cols; j++) {\n const newCell = new TableCellElement();\n row.addChild(newCell, focusCellIndex + j);\n if (i < focusRowIndex || i > focusRowIndex) {\n //由普通单元格转向合并单元格\n if (!masterCell.props.hMerge) {\n masterCell.props.hMerge = 'restart';\n }\n newCell.props.hMerge = 'continue';\n }\n }\n }\n }\n if (rows > 1) {\n for (let i = 1; i < rows; i++) {\n const newRow = TableRowElement.createRow(tb.getColsCount());\n tb.addChild(newRow, focusRowIndex + i)\n for (let j = 0; j < newRow.length; j++) {\n const cell = newRow.getChild<TableCellElement>(j);\n const masterCell = focusRow.getChild<TableCellElement>(j)\n if (j < focusCellIndex || j > focusCellIndex + cols - 1)\n //紧挨上级的单元格存在横向合并\n if (masterCell.props.hMerge) {\n if (masterCell.props.hMerge === 'restart') {\n if (!masterCell.props.vMerge) {\n masterCell.props.vMerge = 'restart'\n }\n cell.props.vMerge = 'continue';\n }\n } else {\n if (!masterCell.props.vMerge) {\n masterCell.props.vMerge = 'restart'\n }\n cell.props.vMerge = 'continue'\n }\n }\n }\n }\n tb.pubOnChange('self');\n tb.refreshView();\n }\n\n /**\n * 拆分合并的单元格\n * @param ss\n * @param rows\n * @param cols\n */\n static splitMergeCell(ss: SelectionState, rows: number, cols: number): void {\n rows = rows < 1 ? 1 : rows;\n cols = cols < 1 ? 1 : cols;\n if (rows === 1 && cols === 1) {\n return;\n }\n const focusCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);\n const focusRow = ElementUtil.getParentByType(focusCell, TableRowElement);\n const tb = ElementUtil.getParentByType(focusRow, TableElement);\n if (!focusCell || !focusRow || !tb) {\n throw new Error('focusCell | focusRow | tb is null');\n }\n const focusCellIndex = focusRow.getChildIndex(focusCell);\n const focusRowIndex = focusRow.getIndex();\n const cellWidth = tb.getCellWidth(focusCellIndex);\n if (!focusCell.props.hMerge && !focusCell.props.vMerge) {\n return;\n }\n const mergeRows = this.getVMergeRowsCount(tb, focusRowIndex, focusCellIndex);\n const mergeCols = this.getHMergeColsCount(tb, focusRowIndex, focusCellIndex);\n //只有拆分的行数需要满足此条件\n if (mergeRows > 1 && rows > 1) {\n if (rows % mergeRows !== 0) {\n throw new Error(`当前合并的行数为:${mergeRows},当前可拆分的行数是${mergeRows}的约数`)\n }\n }\n //拆分的行数、列数等于合并的行数、列数\n //执行还原\n if (mergeCols === cols && mergeRows === rows) {\n TableUtil.restoreCell(ss);\n return;\n }\n\n if (mergeCols === 1) {\n const {endColIndex} = this.horSplitHorNormalCell(ss, rows, cols);\n this.verSplitVerMergeCell(ss, rows, endColIndex);\n }\n //当前单元格为横向合并单元格\n else {\n const {endColIndex} = this.horSplitHorMergeCell(ss, rows, cols);\n this.verSplitVerMergeCell(ss, rows, endColIndex);\n }\n }\n\n /**\n * 拆分横向正常的单元格\n * @param ss\n * @param rows\n * @param cols\n */\n static horSplitHorNormalCell(ss: SelectionState, rows: number, cols: number): { startColIndex: number, endColIndex: number } {\n const focusCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);\n const focusRow = ElementUtil.getParentByType(focusCell, TableRowElement);\n const tb = ElementUtil.getParentByType(focusRow, TableElement);\n if (!focusCell || !focusRow || !tb) {\n throw new Error('focusCell | focusRow | tb is null');\n }\n const focusCellIndex = focusRow.getChildIndex(focusCell);\n const focusRowIndex = focusRow.getIndex();\n const cellWidth = tb.getCellWidth(focusCellIndex);\n const splitCellWidths = this.getSplitCols(cellWidth, cols);\n tb.setCellWidth(focusCellIndex, splitCellWidths[0].width);\n for (let i = 1; i < splitCellWidths.length; i++) {\n tb.insertCol(focusCellIndex + i, splitCellWidths[i].width);\n }\n const mergeRows = this.getVMergeRowsCount(tb, focusRowIndex, focusCellIndex);\n rows = rows < mergeRows ? mergeRows : rows;\n //向指定的列插入拆分单元格\n if (cols > 1) {\n for (let i = 0; i < tb.length; i++) {\n const currRow = tb.getChild(i) as TableRowElement;\n //获取主单元格\n const masterCell = currRow.getChild(focusCellIndex) as TableCellElement;\n for (let j = 1; j < cols; j++) {\n const newCell = new TableCellElement();\n currRow.addChild(newCell, focusCellIndex + j);\n if (i < focusRowIndex || i >= focusRowIndex + rows) {\n //由普通单元格转向合并单元格\n if (!masterCell.props.hMerge) {\n masterCell.props.hMerge = 'restart';\n }\n newCell.props.hMerge = 'continue';\n } else {\n newCell.props.vMerge = masterCell.props.vMerge;\n }\n }\n }\n }\n //在选中行下插入拆分行\n //如果当前是普通单元格\n if (!focusCell.props.vMerge) {\n debugger\n for (let i = 1; i < rows; i++) {\n const newRow = TableRowElement.createRow(tb.getColsCount());\n tb.addChild(newRow, focusRowIndex + i);\n }\n }\n tb.pubOnChange('to-child');\n tb.refreshView();\n return {\n startColIndex: focusCellIndex,\n endColIndex: focusCellIndex + cols - 1\n }\n }\n\n /**\n * 横向拆分合并的单元格\n * @param ss\n * @param rows\n * @param cols\n */\n static horSplitHorMergeCell(ss: SelectionState, rows: number, cols: number): { startColIndex: number, endColIndex: number } {\n const focusCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);\n const focusRow = ElementUtil.getParentByType(focusCell, TableRowElement);\n const tb = ElementUtil.getParentByType(focusRow, TableElement);\n if (!focusCell || !focusRow || !tb) {\n throw new Error('focusCell | focusRow | tb is null');\n }\n const focusCellIndex = focusRow.getChildIndex(focusCell);\n const focusRowIndex = focusRow.getIndex();\n const hMergeCols = this.getHMergeCols(tb, focusRowIndex, focusCellIndex, cols);\n const colsWidth = hMergeCols.reduce((prev, curr) => prev + curr.width, 0)\n const splitCols = this.getSplitCols(colsWidth, cols);\n const [otherPacks, currPacks] = ColumnPatchUtil.getPatchPacks(hMergeCols, splitCols);\n this.applyHorSplitColumnPatchPacks(tb, focusRowIndex, 1, otherPacks);\n this.applyHorSplitColumnCurrPatchPacks(tb, focusRowIndex, focusCellIndex, rows, currPacks);\n tb.pubOnChange('to-child');\n tb.refreshView();\n return {\n startColIndex: focusCellIndex,\n endColIndex: this.getPrepareNewColCounts(otherPacks, hMergeCols)\n }\n }\n\n /**\n * 获取需要新创建的列数量\n */\n private static getPrepareNewColCounts(packs: Array<{ part: ColumnPartOffset, patchs: Array<ColumnPatch> }>, hMergeCols: Array<ColumnPart>): number {\n const lastColIndex = hMergeCols[hMergeCols.length - 1].index;\n if (packs.length === 0) {\n return lastColIndex;\n }\n const lastColPack = packs.find(pack => pack.part.index === lastColIndex);\n if (!lastColPack) {\n return lastColIndex;\n }\n return lastColIndex + lastColPack.patchs.filter(item => item.type === 'insert').length\n }\n\n /**\n * 应用横向拆分单元格补丁\n */\n private static applyHorSplitColumnPatchPacks(tb: TableElement, focusRowIndex: number, splitRows: number, packs: Array<{ part: ColumnPartOffset, patchs: Array<ColumnPatch> }>): void {\n for (let i = packs.length - 1; i >= 0; i--) {\n const pack = packs[i];\n const colIndex = pack.part.index;\n for (let j = pack.patchs.length - 1; j >= 0; j--) {\n const patch = pack.patchs[j];\n if (patch.type === 'modify') {\n tb.setCellWidth(colIndex, patch.data.width);\n } else if (patch.type === 'insert') {\n tb.insertCol(colIndex + 1, patch.data.width);\n //向指定的列插入拆分单元格\n for (let i = 0; i < tb.length; i++) {\n const currRow = tb.getChild(i) as TableRowElement;\n //获取主单元格\n const masterCell = currRow.getChild(colIndex) as TableCellElement;\n const newCell = new TableCellElement();\n currRow.addChild(newCell, colIndex + 1);\n if (!masterCell.props.hMerge) {\n masterCell.props.hMerge = 'restart';\n }\n newCell.props.hMerge = 'continue';\n }\n }\n }\n }\n }\n\n /**\n * 存在横向合并的单元格,进行单元格分拆,打补丁\n * @param tb\n * @param focusRowIndex\n * @param focusColInex\n * @param splitRows\n * @param packs\n */\n private static applyHorSplitColumnCurrPatchPacks(tb: TableElement, focusRowIndex: number, focusColInex: number, splitRows: number, packs: Array<Array<ColumnPart>>): void {\n //获取当前列的合并行数\n let vMergeRows = this.getVMergeRowsCount(tb, focusRowIndex, focusColInex);\n vMergeRows = vMergeRows === 1 ? 0 : vMergeRows;\n const startRow = tb.getChild(focusRowIndex) as TableRowElement;\n const endRow = tb.getChild(focusRowIndex + vMergeRows - 1) as TableRowElement;\n for (let i = 0; i < packs.length; i++) {\n const mergeCols = packs[i];\n if (mergeCols.length === 1) {\n const startCell = startRow.getChild(focusColInex + mergeCols[0].index) as TableCellElement;\n const endCell = endRow.getChild(focusColInex + mergeCols[0].index) as TableCellElement;\n TableUtil.combineCells(tb, startCell, endCell);\n } else {\n // for (let j = 0; j < mergeCols.length; j++) {\n // const cell = focusRow.getChild(focusColInex + mergeCols[j].index) as TableCellElement;\n // cell.cellProps.hMerge = j === 0 ? 'restart' : 'continue';\n // }\n const startCell = startRow.getChild(focusColInex + mergeCols[0].index) as TableCellElement;\n const endCell = endRow.getChild(focusColInex + mergeCols[mergeCols.length - 1].index) as TableCellElement;\n TableUtil.combineCells(tb, startCell, endCell);\n }\n }\n }\n\n\n /**\n * 纵向拆分合并的单元格\n * 在指定行下插入复制行\n * 存在\n */\n private static verSplitVerMergeCell(ss: SelectionState, rows: number, endColIndex: number): void {\n if (rows === 1) {\n return;\n }\n const focusCell = ElementUtil.getParentByType(ss.startControl, TableCellElement);\n const focusRow = ElementUtil.getParentByType(focusCell, TableRowElement);\n const tb = ElementUtil.getParentByType(focusRow, TableElement);\n if (!focusCell || !focusRow || !tb) {\n throw new Error('focusCell | focusRow | tb is null');\n }\n const focusCellIndex = focusRow.getChildIndex(focusCell);\n const focusRowIndex = focusRow.getIndex();\n let mergeRows = 0;\n if (focusCell.props.vMerge === 'restart') {\n mergeRows = this.getVMergeRowsCount(tb, focusRowIndex, focusCellIndex);\n if (mergeRows % rows !== 0) {\n throw new Error(`可拆分的行数必须是${mergeRows}的约数`);\n }\n }\n //不存在合并行,则向下新增行\n if (mergeRows === 0) {\n for (let i = 0; i < rows - 1; i++) {\n const newRow = new TableRowElement();\n for (let i = 0; i < focusRow.length; i++) {\n const focusRowCell = focusRow.getChild(i) as TableCellElement;\n const cell = new TableCellElement();\n //其他列要纵向合并\n if (i < focusCellIndex || i > endColIndex) {\n if (!focusRowCell.props.vMerge) {\n focusRowCell.props.vMerge = 'restart';\n }\n cell.props.vMerge = 'continue';\n }\n cell.props.hMerge = focusRowCell.props.hMerge;\n newRow.addChild(cell);\n }\n tb.addChild(newRow, focusRowIndex + i + 1);\n }\n }\n //存在合并行,则按照约数单个合并分拆为多个合并\n else {\n //拆分行和合并行相等,则执行还原\n if (rows === mergeRows) {\n for (let i = 0; i < mergeRows; i++) {\n const row = tb.getChild(focusRowIndex + i) as TableRowElement;\n for (let j = focusCellIndex; j <= endColIndex; j++) {\n const cell = row.getChild(j) as TableCellElement;\n cell.props.vMerge = null;\n }\n }\n } else {\n for (let i = 0; i < mergeRows; i++) {\n if (i % rows === 0) {\n const row = tb.getChild(focusRowIndex + i) as TableRowElement;\n const cell = row.getChild(focusCellIndex) as TableCellElement;\n cell.props.vMerge = 'restart';\n }\n }\n }\n }\n }\n\n\n private static getSplitCols(width: number, cols: number): Array<ColumnPart> {\n const items: Array<ColumnPart> = [];\n for (let i = 0; i < cols; i++) {\n items.push({width: Math.floor(width / cols), index: i});\n }\n items[items.length - 1].width += width - items.reduce((prev, curr) => prev + curr.width, 0);\n return items;\n }\n\n /**\n * 获取横向合并的列\n * @param tb\n * @param currRowIndex\n * @param currColIndex\n * @param splitCols\n */\n private static getHMergeCols(tb: TableElement, currRowIndex: number, currColIndex: number, splitCols: number): Array<ColumnPart> {\n const row = tb.getChild(currRowIndex) as TableRowElement;\n const items: Array<ColumnPart> = [{width: tb.getCellWidth(currColIndex), index: currColIndex}];\n for (let i = currColIndex + 1; i < tb.getColsCount(); i++) {\n const cell = row.getChild(i) as TableCellElement;\n if (cell.props.hMerge === 'continue') {\n items.push({width: tb.getCellWidth(i), index: i});\n } else {\n break;\n }\n }\n return items;\n }\n\n /**\n * 获取纵向合并的行数\n * @param tb\n * @param rowIndex\n * @param colIndex\n */\n private static getVMergeRowsCount(tb: TableElement, rowIndex: number, colIndex: number): number {\n const startCell = <TableCellElement>(<TableRowElement>tb.getChild(rowIndex)).getChild(colIndex)\n if (startCell.props.vMerge !== 'restart') {\n return 1;\n }\n let i = 0;\n for (i = rowIndex + 1; i < tb.length; i++) {\n const row = tb.getChild(i) as TableRowElement;\n const cell = row.getChild(colIndex) as TableCellElement;\n if (cell.props.vMerge !== 'continue') {\n return i - rowIndex;\n }\n }\n return i - rowIndex;\n }\n\n /**\n * 获取纵向合并的行数\n * @param tb\n * @param rowIndex\n * @param colIndex\n */\n private static getHMergeColsCount(tb: TableElement, rowIndex: number, colIndex: number): number {\n const row = tb.getChild<TableRowElement>(rowIndex);\n const startCell = row.getChild<TableCellElement>(colIndex)\n if (startCell.props.hMerge !== 'restart') {\n return 1;\n }\n let i = 0;\n for (i = colIndex + 1; i < row.length; i++) {\n const cell = row.getChild(i) as TableCellElement;\n if (cell.props.hMerge !== 'continue') {\n return i - colIndex;\n }\n }\n return i - colIndex;\n }\n\n}\n","import {ElementUtil} from \"./framework/element-util\";\nimport {DocumentCursor, SelectionState} from \"./framework/document-selection\";\nimport {Position, ViewOptions} from \"./framework/element-define\";\nimport {HitEventInfo} from \"./framework/element-event-define\";\nimport {DocumentRenderObject} from \"./framework/impl\";\nimport {ParagraphElement, ParagraphRenderObject} from \"./framework/impl\";\nimport {TableCellRenderObject} from \"./framework/impl\";\nimport {TableRowRenderObject} from \"./framework/impl\";\nimport {RenderObject} from \"./framework/render-define\";\nimport {EditorContext} from \"./framework/document-context\";\n\nexport interface RuleOptions {\n width: number;\n pagePL: number;\n pagePR: number;\n docLeft: number;\n\n}\n\nexport class DocRule {\n private ctx!: CanvasRenderingContext2D;\n private options: RuleOptions;\n //标尺高度\n private ruleHeight = 30;\n //当前标尺的位置\n private thumbX: {\n indent: number,\n hanging: number\n }\n private mouseDownPos!: Position | null;\n private indentThumbPoints: Array<Position> = [];\n private hangThumbPoints: Array<Position> = [];\n private mouseDownThumbType: 'none' | 'indent' | 'hang' = 'none';\n public viewOptions: ViewOptions;\n public ss: SelectionState\n\n constructor(public canvas: HTMLCanvasElement, private docCtx: EditorContext) {\n this.viewOptions = this.docCtx.viewOptions;\n this.ss = this.docCtx.selectionState;\n this.ctx = this.canvas.getContext('2d') as CanvasRenderingContext2D;\n this.options = {\n width: 0,\n pagePL: 0,\n pagePR: 0,\n docLeft: 0\n };\n this.thumbX = {\n indent: 0,\n hanging: 0\n };\n this.canvas.addEventListener(\"mousedown\", (evt) => this.canvasMousedown(evt));\n this.canvas.addEventListener(\"mousemove\", (evt) => this.canvasMousemove(evt));\n this.canvas.addEventListener(\"mouseup\", (evt) => this.canvasMouseup(evt));\n }\n\n destroy(): void {\n this.canvas.removeEventListener(\"mousedown\", this.canvasMousedown);\n this.canvas.removeEventListener(\"mousemove\", this.canvasMousemove);\n this.canvas.removeEventListener(\"mouseup\", this.canvasMouseup);\n }\n\n setRuleOptions(options: RuleOptions) {\n this.options = options;\n const convertRatio = this.viewOptions.mmToPixelsRatio;\n this.options.pagePL = Math.floor(this.options.pagePL * convertRatio);\n this.options.pagePR = Math.floor(this.options.pagePR * convertRatio);\n //this.scaleView();\n ElementUtil.setCanvasProps(this.canvas, this.ctx, {width: this.getParentWidth(), height: this.ruleHeight});\n //this.canvas.style.left = this.options.docLeft + 'px';\n }\n\n getParentWidth(): number {\n const parent = this.canvas.parentElement as HTMLDivElement;\n return parent.getBoundingClientRect().width;\n }\n\n private fillRect(x: number, y: number, width: number, height: number, color: string) {\n const {scale} = this.viewOptions;\n this.ctx.save();\n this.ctx.scale(scale, 1);\n this.ctx.fillStyle = color;\n this.ctx.fillRect(x, y, width, height);\n this.ctx.restore();\n }\n\n private drawIndentThumb(x: number, y: number): Array<Position> {\n const points: Array<Position> = [];\n x -= 4;\n points.push({x: x, y});\n points.push({x: x, y: y + 3});\n points.push({x: x + 4, y: y + 7});\n points.push({x: x + 8, y: y + 3});\n points.push({x: x + 8, y});\n points.push({x: x, y});\n this.drawLine(points);\n return points;\n }\n\n private drawHangThumb(x: number, y: number): Array<Position> {\n const points: Array<{ x: number, y: number }> = [];\n x -= 4;\n points.push({x: x, y});\n points.push({x: x, y: y - 3});\n points.push({x: x + 4, y: y - 7});\n points.push({x: x + 8, y: y - 3});\n points.push({x: x + 8, y});\n points.push({x: x, y});\n points.push({x: x, y: y + 3});\n points.push({x: x + 8, y: y + 3});\n points.push({x: x + 8, y: y});\n this.drawLine(points);\n return points;\n }\n\n private measureText(text: string) {\n this.ctx.font = \"8px 'Times New Roman'\";\n const measure = this.ctx.measureText(text);\n return measure.width;\n }\n\n private drawLine(points: Array<Position>): void {\n this.ctx.beginPath();\n const {scale} = this.viewOptions;\n this.ctx.save();\n this.ctx.scale(scale, 1);\n this.ctx.fillStyle = \"white\";\n this.ctx.lineWidth = 0.5;\n for (let j = 0; j < points.length; j++) {\n let {x, y} = points[j];\n x += 0.5;\n y += 0.5;\n if (j === 0) {\n this.ctx.moveTo(x, y);\n } else {\n this.ctx.lineTo(x, y);\n }\n }\n this.ctx.stroke();\n this.ctx.fill();\n this.ctx.closePath();\n this.ctx.restore();\n }\n\n private drawText(text: string, x: number, y: number) {\n const {scale} = this.viewOptions;\n x = x * scale;\n this.ctx.save();\n this.ctx.fillStyle = \"rgb(0,0,0)\";\n this.ctx.textBaseline = \"alphabetic\";\n this.ctx.font = \"8px 'Times New Roman'\";\n this.ctx.fillText(text, x, y + 8 - 1);\n this.ctx.restore();\n }\n\n /**\n * 刷新新的状态\n */\n refreshRule(): void {\n // if (!this.docCtx.selectionState.startControl) {\n // return;\n // }\n this.ctx.clearRect(0, 0, this.canvas.width, this.ruleHeight);\n this.ctx.save();\n this.ctx.translate(this.options.docLeft * this.viewOptions.scale, 0);\n this.drawRule();\n this.ctx.restore();\n }\n\n private canvasMousedown(evt: MouseEvent): void {\n const clickPos = this.getMousePos(evt);\n if (this.pointInPoly(clickPos, this.indentThumbPoints)) {\n this.mouseDownThumbType = 'indent';\n this.mouseDownPos = clickPos;\n } else if (this.pointInPoly(clickPos, this.hangThumbPoints)) {\n this.mouseDownThumbType = 'hang';\n this.mouseDownPos = clickPos;\n } else {\n console.log(\"未点击在里面\");\n }\n }\n\n private getMousePos(evt: MouseEvent): Position {\n const {scale} = this.viewOptions;\n return {\n x: (evt.offsetX / scale - this.options.docLeft),\n y: evt.offsetY / scale\n }\n }\n\n private canvasMousemove(evt: MouseEvent): void {\n if (['indent', 'hang'].indexOf(this.mouseDownThumbType) < 0) {\n return;\n }\n if (!this.mouseDownPos) {\n return;\n }\n const canvasPos = this.getMousePos(evt);\n let moveX = canvasPos.x - this.mouseDownPos.x;\n //至少移动5px再进行修改\n const remainder = moveX % 5;\n if (Math.abs(remainder) < 3) {\n return;\n } else {\n if (remainder < 0) {\n moveX -= 5 + remainder;\n } else {\n moveX += 5 - remainder;\n }\n }\n if (moveX === 0) {\n return;\n }\n canvasPos.x = this.mouseDownPos.x + moveX;\n const para = this.getCurrPara();\n if (!para) {\n throw new Error('para is null')\n }\n if (this.mouseDownThumbType === 'indent') {\n this.thumbX.indent += moveX;\n this.thumbX.indent = this.thumbX.indent < 0 ? 0 : this.thumbX.indent;\n this.thumbX.indent = this.thumbX.indent > this.options.width ? this.options.width : this.thumbX.indent;\n this.mouseDownPos = canvasPos;\n para.props.indent += moveX;\n this.drawRule();\n }\n if (this.mouseDownThumbType === 'hang') {\n this.thumbX.hanging += moveX;\n this.thumbX.hanging = this.thumbX.hanging < 0 ? 0 : this.thumbX.hanging;\n this.thumbX.hanging = this.thumbX.hanging > this.options.width ? this.options.width : this.thumbX.hanging;\n this.mouseDownPos = canvasPos;\n para.props.hanging += moveX;\n this.drawRule();\n }\n }\n\n private canvasMouseup(evt: MouseEvent): void {\n this.mouseDownThumbType = 'none';\n this.mouseDownPos = null;\n }\n\n\n private pointInPoly(pt: Position, poly: Array<Position>): boolean {\n let c = false;\n for (let i = -1, l = poly.length, j = l - 1; ++i < l; j = i) {\n if (((poly[i].y <= pt.y && pt.y < poly[j].y) || (poly[j].y <= pt.y && pt.y < poly[i].y)) && pt.x < ((poly[j].x - poly[i].x) * (pt.y - poly[i].y)) / (poly[j].y - poly[i].y) + poly[i].x) {\n c = !c\n }\n }\n return c;\n }\n\n\n /**\n * 绘制\n */\n private drawRule(): void {\n this.getRuleMarksPos();\n const {scale} = this.viewOptions;\n //this.ctx.save();\n //this.ctx.scale(scale, scale);\n this.fillRect(0, 0, this.options.pagePL, this.ruleHeight, \"rgb(198,198,198)\");\n this.fillRect(this.options.width - this.options.pagePR, 0, this.options.pagePR, this.ruleHeight, \"rgb(198,198,198)\");\n for (let j = 0; j < 50; j++) {\n const gantWidth = 20;\n const points: Array<Position> = [];\n const x = j * gantWidth;\n if (x > this.options.width) {\n break;\n }\n const y = 10;\n points.push({x, y}, {x, y: y + 10});\n this.drawLine(points);\n const textWidth = this.measureText(j + \"\");\n this.drawText(j + '', x + Math.floor((gantWidth - textWidth) / 2), y + 1);\n }\n this.indentThumbPoints = this.drawIndentThumb(this.thumbX.indent, 6);\n this.hangThumbPoints = this.drawHangThumb(this.thumbX.hanging, 25);\n //this.ctx.restore();\n }\n\n private getRuleMarksPos(): void {\n const {startControl, startOffset, startHitInfo} = this.ss;\n if (!startControl || !startHitInfo) {\n this.thumbX.indent = 0;\n this.thumbX.hanging = 0;\n return;\n }\n const para = ElementUtil.getParentByType(startControl, ParagraphElement) as ParagraphElement;\n const indent = para.props.indent;\n const hanging = para.props.hanging;\n const {startRegion, hitDocIndex} = this.ss.startHitInfo as HitEventInfo;\n const cursorPosi = DocumentCursor.getElementCursorPos(startControl, startOffset, startRegion, hitDocIndex);\n //当前段落\n const paraRender = ElementUtil.getParentRender(cursorPosi.render, ParagraphRenderObject) as ParagraphRenderObject;\n //当前段落位置\n const paraRenderPos = ElementUtil.getRenderAbsolutePaintPos(paraRender)\n //当前文档\n const docRender = ElementUtil.getParentRender(paraRender, DocumentRenderObject) as DocumentRenderObject;\n //当前文档位置\n const docRenderPos = ElementUtil.getRenderAbsolutePaintPos(docRender)\n this.thumbX.indent = paraRenderPos.x - docRenderPos.x + indent;\n this.thumbX.hanging = paraRenderPos.x - docRenderPos.x + hanging;\n this.options.docLeft = docRender.rect.x + docRender.parent.rect.x;\n this.setParentMarksPos(paraRender);\n }\n\n private getCurrPara(): ParagraphElement | null {\n const {startControl, startOffset} = this.ss;\n if (!startControl) {\n return null;\n }\n return ElementUtil.getParentByType(startControl, ParagraphElement);\n }\n\n private setParentMarksPos(childRender: RenderObject): Array<{ pos: Position }> {\n const items: Array<{ pos: Position }> = [];\n const parentRender = childRender.parent;\n if (!parentRender || parentRender instanceof DocumentRenderObject) {\n return items;\n }\n if (parentRender instanceof TableRowRenderObject) {\n const docRender = ElementUtil.getParentRender(parentRender, DocumentRenderObject) as DocumentRenderObject;\n const docRenderPos = ElementUtil.getRenderAbsolutePaintPos(docRender)\n for (let i = 0; i < parentRender.length; i++) {\n const cellRender = parentRender.getChild(i) as TableCellRenderObject;\n const pos = ElementUtil.getRenderAbsolutePaintPos(cellRender)\n this.drawCellMark(pos.x - docRenderPos.x, 0, cellRender.padding.left);\n }\n }\n items.push(...this.setParentMarksPos(parentRender));\n return items;\n }\n\n private drawCellMark(x: number, y: number, width: number): void {\n x += 0.5;\n y += 0.5;\n this.fillRect(x, y, width, this.ruleHeight, 'rgb(198,198,198,0.2)')\n for (let i = 0; i < width; i++) {\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.lineWidth = 0.3;\n this.ctx.setLineDash([0.5, 0.5, 0.5]);\n this.ctx.moveTo(x + i, y);\n this.ctx.lineTo(x + i, y + this.ruleHeight);\n this.ctx.stroke();\n this.ctx.closePath();\n this.ctx.restore();\n }\n }\n\n // scaleView(): void {\n // return;\n // const {scale} = this.viewOptions;\n // //this.canvas.style.transformOrigin = 'center center';\n // const parent = this.canvas.parentElement as HTMLDivElement;\n // if (scale === 1) {\n // parent.style.transform = '';\n // } else {\n // parent.style.transform = `scale(${this.viewOptions.scale})`;\n // }\n // }\n //\n\n}\n","import { Position } from \"./element-define\";\nimport { TextProps } from \"./element-props\";\nimport { ElementUtil } from \"./element-util\";\nimport { ParagraphElement } from \"./impl/paragraph/p-impl\";\nimport { TextGroupElement, TextGroupRenderObject } from \"./impl/text/text-impl\";\n\nexport interface TextUnits {\n sourceSize: number,\n actualSize: number,\n char: string\n}\n\nexport interface IRenderContextContract {\n contentContext: PaintContent;\n overlaysContext: PaintContent;\n mainContext: PaintContent;\n drawMode: 'view' | 'print';\n clear(): void;\n commit(pageSetting: ISetCanvasPageProps): void\n init(pageSetting: ISetCanvasPageProps): void\n tran(effect: () => void): void;\n update(pageSetting: ISetCanvasPageProps): void;\n}\n\nexport type RenderContextType = IRenderContextContract;\n\nexport type ISetCanvasPageProps =\n {\n width: number; height: number; scale: number;\n };\n\nexport class RenderContext implements IRenderContextContract {\n contentContext!: PaintContent;\n overlaysContext!: PaintContent;\n drawMode: 'view' | 'print' = 'view';\n private contentOffCanvas!: HTMLCanvasElement;\n private overlayOffCanvas!: HTMLCanvasElement;\n\n constructor(public readonly mainContext: PaintContent) { }\n\n //初始化创建绘制类\n init(pageSetting: ISetCanvasPageProps): void {\n this.contentOffCanvas = document.createElement('canvas');\n this.overlayOffCanvas = document.createElement('canvas');\n this.contentContext = new PaintContent(this.contentOffCanvas.getContext('2d') as CanvasRenderingContext2D);\n this.overlaysContext = new PaintContent(this.overlayOffCanvas.getContext('2d') as CanvasRenderingContext2D);\n this.update(pageSetting);\n }\n\n /**\n * 更新绘制画布大小\n */\n update(pageSetting: ISetCanvasPageProps): void {\n ElementUtil.setCanvasProps(this.contentOffCanvas, this.contentContext.ctx, pageSetting)\n ElementUtil.setCanvasProps(this.overlayOffCanvas, this.overlaysContext.ctx, pageSetting)\n ElementUtil.setCanvasProps(this.mainContext.ctx.canvas, this.mainContext.ctx, pageSetting)\n }\n\n clear(): void {\n this.contentContext.clear();\n this.overlaysContext.clear();\n this.mainContext.clear();\n }\n\n commit(pageSetting: ISetCanvasPageProps): void {\n let { width, height } = pageSetting;\n //this.mainCtx.clearRect(0, 0, this.mainCtx.canvas.width, this.mainCtx.canvas.height);\n if (!this.overlayOffCanvas.width || !this.overlayOffCanvas.height) {\n return;\n }\n //修复由于偏移量的问题,导致黑边的问题\n this.mainContext.fillRect(-1, -1, width + 2, height + 2, '#fff')\n this.mainContext.drawImage(this.overlayOffCanvas, 0, 0, ElementUtil.getDprNumber(width), ElementUtil.getDprNumber(height));\n //console.time('drawImage');\n this.mainContext.drawImage(this.contentOffCanvas, 0, 0, ElementUtil.getDprNumber(width), ElementUtil.getDprNumber(height));\n //console.timeEnd('drawImage');\n }\n\n tran(effect: () => void) {\n try {\n this.contentContext.save();\n this.overlaysContext.save();\n effect();\n } catch (e) {\n throw e;\n } finally {\n this.contentContext.restore();\n this.overlaysContext.restore();\n }\n }\n\n}\n\nexport class PaintContent {\n constructor(public ctx: CanvasRenderingContext2D) {\n this.init();\n }\n\n init(): void {\n this.ctx.textBaseline = 'alphabetic';\n }\n\n setGlobalAlpha(alpha: number): void {\n this.ctx.globalAlpha = alpha;\n }\n\n getGlobalAlpha(): number {\n return this.ctx.globalAlpha;\n }\n\n clear(): void {\n this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n this.init();\n }\n\n drawText(text: string, textProps: TextProps, x: number, y: number, width: number, height: number): void {\n if (textProps.background) {\n this.fillRect(x, y, width, height, textProps.background);\n }\n this.ctx.save();\n this.ctx.fillStyle = textProps.color;\n this.ctx.font = textProps.getFont();\n const vertHeight = textProps.vertAlign === 'superscript' ? 0 : height;\n this.ctx.fillText(text, x, y + vertHeight - height / 7);\n this.ctx.restore();\n if (textProps.linethrough) {\n this.drawHoriLine(x, y + (Math.ceil(height / 2)), width, textProps.color, 1);\n }\n if (textProps.underline) {\n this.drawHoriLine(x, y + height, width, textProps.color, 1);\n }\n if (textProps.overline) {\n this.drawHoriLine(x, y, width, textProps.color, 1);\n }\n }\n\n fillCircular(x: number, y: number, r: number, color: string = 'black'): void {\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.fillStyle = color;\n this.ctx.arc(x, y, r, 0, 2 * Math.PI);\n this.ctx.fill();\n this.ctx.restore();\n }\n\n drawTextUnits(textGroupRender: TextGroupRenderObject, x: number, y: number): void {\n const textEle = textGroupRender.element as TextGroupElement;\n const textProps = textEle.props;\n const { width, height } = textGroupRender.rect;\n this.ctx.save();\n //根据上级继承进行绘制\n if(textProps.color){\n this.ctx.fillStyle = textProps.color;\n }\n this.ctx.font = textProps.getFont();\n if (textProps.background) {\n this.fillRect(x, y, width, height, textProps.background);\n }\n if (textProps.linethrough) {\n this.drawHoriLine(x, y + (Math.ceil(height / 2)), width, textProps.color, 1);\n }\n if (textProps.underline) {\n this.drawHoriLine(x, y + height, width, textProps.color, 1);\n }\n if (textProps.overline) {\n this.drawHoriLine(x, y, width, textProps.color, 1);\n }\n let horX = 0;\n let vertHeight = height - (height / 7);\n if (textProps.vertAlign === 'superscript') {\n //到top\n vertHeight -= textProps.fontSize * 2 / 5;\n //top在向上收缩 -top行间距\n //vertHeight -= textProps.fontSize * this.getParaLineHeight(textEle) / 20\n }\n for (let i = 0; i < textGroupRender.textMeasures.length; i++) {\n const unit = textGroupRender.textMeasures[i];\n this.ctx.fillText(unit.char, x + horX, y + vertHeight);\n horX += unit.actualSize;\n }\n this.ctx.restore();\n }\n\n getParaLineHeight(textEle: TextGroupElement): number {\n const para = ElementUtil.getParentByType(textEle, ParagraphElement);\n if (!para) {\n throw new Error('未能找到父级段落元素')\n }\n return para.props.lineHeight;\n }\n\n measureText(text: string, textProps: TextProps): { width: number, height: number } {\n this.ctx.fillStyle = textProps.color;\n this.ctx.font = textProps.getFont();\n const textMeasure = this.ctx.measureText(text);\n return { width: textMeasure.width, height: textProps.fontSize };\n }\n\n\n measureTextUnits(units: Array<TextUnits>, textProps: TextProps): void {\n this.ctx.font = textProps.getFont();\n const letterSpace = textProps.letterSpace ?? 0;\n for (let i = 0; i < units.length; i++) {\n const char = units[i];\n const textMeasure = this.ctx.measureText(char.char);\n char.actualSize = textMeasure.width + letterSpace;\n char.sourceSize = textMeasure.width;\n }\n }\n\n clearRect(x: number, y: number, width: number, height: number): void {\n this.ctx.clearRect(x, y, width, height);\n }\n\n save(): void {\n this.ctx.save();\n }\n\n restore(): void {\n this.ctx.restore();\n }\n\n scale(ratio: number): void {\n this.ctx.scale(ratio, ratio);\n }\n\n /**\n * 包装任务执行:save->exec->restore\n * @param effect\n */\n tran(effect: () => void): void {\n this.save();\n try {\n effect();\n } catch (e) {\n throw e;\n } finally {\n this.restore();\n }\n }\n\n strokeRect(x: number, y: number, width: number, height: number, strokeColor = 'black', strokeWidth = 1): void {\n x = Math.ceil(x);\n y = Math.ceil(y);\n x += 0.5;\n y += 0.5;\n this.ctx.save();\n this.ctx.lineWidth = strokeWidth;\n this.ctx.strokeStyle = strokeColor;\n this.ctx.strokeRect(x, y, width, height);\n this.ctx.restore();\n //this.strokeLines([{ x, y }, { x: x + width, y }, { x: x + width, y: y + height }, { x, y: y + height }, { x, y }], strokeWidth, strokeColor);\n }\n\n //strokeRectImageData(x:number)\n\n /**\n * 绘制水平线\n * @param x \n * @param y \n * @param width \n * @param lineColor \n * @param lineWidth \n */\n drawHoriLine(x: number, y: number, width: number, lineColor = 'black', lineWidth = 1): void {\n this.strokeLines([{ x, y }, { x: x + width, y }], lineWidth, lineColor);\n }\n\n fillRect(x: number, y: number, width: number, height: number, fillColor = 'white', shadowBlur = 0, shadowColor = 'black'): void {\n x = Math.ceil(x);\n y = Math.ceil(y);\n x += 0.5;\n y += 0.5;\n this.ctx.save();\n this.ctx.fillStyle = fillColor;\n this.ctx.shadowBlur = shadowBlur;\n this.ctx.shadowColor = shadowColor;\n this.ctx.beginPath();\n this.ctx.moveTo(x, y);\n this.ctx.lineTo(x + width, y);\n this.ctx.lineTo(x + width, y + height);\n this.ctx.lineTo(x, y + height);\n this.ctx.lineTo(x, y);\n this.ctx.fill();\n this.ctx.closePath();\n this.ctx.restore();\n }\n\n strokeLines(lines: Array<Position>, width = 1, strokeColor = 'black'): void {\n this.ctx.save();\n this.ctx.strokeStyle = strokeColor;\n this.ctx.lineWidth = width;\n this.ctx.lineCap = 'round';\n this.ctx.beginPath();\n for (let i = 0; i < lines.length; i++) {\n let { x, y } = lines[i];\n x = Math.ceil(x);\n y = Math.ceil(y);\n x += 0.5;\n y += 0.5;\n if (i === 0) {\n this.ctx.moveTo(x, y);\n } else {\n this.ctx.lineTo(x, y);\n }\n }\n this.ctx.stroke();\n this.ctx.closePath();\n this.ctx.restore();\n }\n\n fillLines(lines: Array<Position>, width = 1, fillColor = 'black'): void {\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.fillStyle = fillColor;\n this.ctx.lineWidth = width;\n for (let i = 0; i < lines.length; i++) {\n let { x, y } = lines[i];\n x = Math.ceil(x);\n y = Math.ceil(y);\n x += 0.5;\n y += 0.5;\n if (i === 0) {\n this.ctx.moveTo(x, y);\n } else {\n this.ctx.lineTo(x, y);\n }\n }\n this.ctx.stroke();\n this.ctx.closePath();\n this.ctx.restore();\n }\n\n\n drawCheckBox(x: number, y: number, width: number, height: number, isChecked: boolean): void {\n this.strokeRect(x, y, width, height, 'black', 1);\n if (isChecked) {\n const lines: Array<Position> = [];\n lines.push({ x: x + (Math.ceil(width / 4)), y: y + (Math.ceil(height / 2)) });\n lines.push({ x: x + (Math.ceil(width / 2)), y: y + (Math.floor(height * 3 / 4)) });\n lines.push({ x: x + (Math.ceil(width * 3 / 4)), y: y + (Math.ceil(height / 4)) });\n this.strokeLines(lines, 2, 'red');\n }\n }\n\n drawRadioBox(x: number, y: number, width: number, height: number, isChecked: boolean): void {\n x = x + Math.floor(width / 2);\n y = y + Math.floor(height / 2);\n width = Math.floor(width / 2);\n this.ctx.save();\n this.ctx.strokeStyle = 'black';\n this.ctx.beginPath();\n this.ctx.arc(x, y, width, 0, 2 * Math.PI);\n this.ctx.stroke();\n this.ctx.closePath();\n if (isChecked) {\n this.ctx.fillStyle = 'black';\n this.ctx.beginPath();\n this.ctx.arc(x, y, Math.floor(width / 5 * 3), 0, 2 * Math.PI);\n this.ctx.closePath();\n this.ctx.fill();\n }\n this.ctx.restore();\n }\n\n\n drawImage(image: CanvasImageSource, sx: number, sy: number): void;\n drawImage(image: CanvasImageSource, sx: number, sy: number, sw: number, sh: number): void;\n drawImage(image: CanvasImageSource, sx: number, sy: number, sw: number, sh: number, dx: number, dy: number, dw: number, dh: number): void;\n drawImage(image: CanvasImageSource, sx: number, sy: number, sw?: number, sh?: number, dx?: number, dy?: number, dw?: number, dh?: number): void {\n if (typeof sw !== 'undefined' && typeof sh !== 'undefined' && typeof dx !== 'undefined' && typeof dy !== 'undefined' && typeof dw !== 'undefined' && typeof dh !== 'undefined') {\n this.ctx.drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh);\n } else if (typeof sw !== 'undefined' && typeof sh !== 'undefined') {\n this.ctx.drawImage(image, sx, sy, sw, sh);\n } else {\n this.ctx.drawImage(image, sx, sy);\n }\n }\n\n drawDashLine(points: Array<Position>, lineDash: Array<number>, lineColor = 'black', lineWidth = 1): void {\n this.ctx.save();\n this.ctx.setLineDash(lineDash);\n this.ctx.strokeStyle = lineColor;\n this.ctx.lineWidth = lineWidth;\n this.ctx.beginPath();\n for (let i = 0; i < points.length; i++) {\n let { x, y } = points[i];\n x += 0.5;\n y += 0.5;\n if (i === 0) {\n this.ctx.moveTo(x, y);\n } else {\n this.ctx.lineTo(x, y);\n }\n }\n this.ctx.stroke();\n this.ctx.closePath();\n this.ctx.restore();\n }\n\n roundRect(x: number, y: number, width: number, height: number, radius: number | { tl: number, tr: number, br: number, bl: number }, fill: boolean, stroke: boolean) {\n x += 0.5;\n y += 0.5;\n if (typeof stroke === 'undefined') {\n stroke = true;\n }\n if (typeof radius === 'number') {\n radius = { tl: radius, tr: radius, br: radius, bl: radius };\n } else {\n var defaultRadius = { tl: 0, tr: 0, br: 0, bl: 0 };\n for (var side in defaultRadius) {\n radius[side] = radius[side] || defaultRadius[side];\n }\n }\n this.ctx.beginPath();\n this.ctx.lineWidth = 1;\n this.ctx.moveTo(x + radius.tl, y);\n this.ctx.lineTo(x + width - radius.tr, y);\n this.ctx.quadraticCurveTo(x + width, y, x + width, y + radius.tr);\n this.ctx.lineTo(x + width, y + height - radius.br);\n this.ctx.quadraticCurveTo(x + width, y + height, x + width - radius.br, y + height);\n this.ctx.lineTo(x + radius.bl, y + height);\n this.ctx.quadraticCurveTo(x, y + height, x, y + height - radius.bl);\n this.ctx.lineTo(x, y + radius.tl);\n this.ctx.quadraticCurveTo(x, y, x + radius.tl, y);\n this.ctx.closePath();\n if (fill) {\n this.ctx.fill();\n }\n if (stroke) {\n this.ctx.stroke();\n }\n\n }\n\n clip(x: number, y: number, width: number, height: number): void {\n this.ctx.beginPath();\n this.ctx.rect(x, y, width, height);\n this.ctx.clip();\n }\n\n}\n\n\n","import { BranchElement, ViewOptions, Element } from \"./element-define\";\nimport { ElementUtil } from \"./element-util\";\nimport { TableElement, textLineRenderMode } from \"./impl/table/table-impl\";\nimport { RenderContextType } from \"./render-context\";\nimport { BlockContainerRenderObject, RenderObject } from \"./render-define\";\n\n/**\n* 文字行渲染模式\n用于医嘱打印模式\n*/\nexport function runTextLineRender(ele: Element, options: ViewOptions, renderCtx: RenderContextType): void {\n if (!options.textRowLineMode) {\n return;\n }\n if (ele instanceof TableElement) {\n textLineRenderMode(ele, options, renderCtx);\n remeasureParentRenders(ele.measureRender)\n return;\n }\n if (ele instanceof BranchElement) {\n for (let i = 0; i < ele.length; i++) {\n runTextLineRender(ele.getChild(i), options, renderCtx);\n }\n }\n}\n\nfunction remeasureParentRenders(render: RenderObject | null): void {\n if (!render) {\n return\n }\n ElementUtil.remeasure(render as BlockContainerRenderObject)\n remeasureParentRenders(render.parent)\n\n}","import { runTextLineRender } from \"./document-textline-mode\";\nimport {\n BlockContainerElement,\n BlockContentElement,\n BranchElement,\n Element,\n InlineGroupElement,\n LeafElement,\n ModifyFlag,\n ViewOptions\n} from \"./element-define\";\nimport { DataEleBaseProps, DataEleBaseTextProps, TextProps } from \"./element-props\";\nimport { suppressTracking } from \"./element-trace-tracking\";\nimport { ElementUtil } from \"./element-util\";\nimport { DataElementInlineGroup } from \"./impl\";\nimport { FillNullSpaceRenderObject } from \"./impl\";\nimport { DocumentElement, DocumentRenderObject } from \"./impl\";\nimport { ParagraphElement, ParagraphLineRectRenderObject, ParagraphRenderObject } from \"./impl\";\nimport { TextGroupElement, TextGroupRenderObject } from \"./impl\";\nimport { RenderContextType } from \"./render-context\";\nimport {\n BlockContainerRenderObject,\n BlockContentRenderObject,\n BranchRenderObject,\n InlineGroupRenderObject,\n LeafRenderObject,\n RenderObject\n} from \"./render-define\";\ninterface ICutLineData { firstItem: RenderObject | null, lastItem: RenderObject | null, br?: boolean }\n/**\n * 测量阶段,生成Render-UI\n */\nexport class ElementMeasure {\n constructor(private options: ViewOptions, private renderCtx: RenderContextType) { }\n\n measureDocument(document: DocumentElement): DocumentRenderObject {\n //测量阶段,对于空段落会插入段落符号,新表格会插入空段落,此时不需要记录节点的更改,以最大的节点进行记录\n return suppressTracking(() => {\n this.clearPaintCache(document);\n const docRender = this.measureControl(document, this.options.docPageSettings.width) as DocumentRenderObject;\n this.setMeasureCompletedModifyFlag(document);\n runTextLineRender(document, this.options, this.renderCtx);\n return docRender;\n })\n }\n\n measureControl(element: Element, maxWidth: number): RenderObject | null {\n if (element.modifyFlag === ModifyFlag.None) {\n return element.measureRender;\n }\n if (element instanceof BlockContentElement) {\n const render = element.createRenderObject(this.options, this.renderCtx) as BlockContentRenderObject;\n element.measureRender = render;\n //测量阶段,只限制最大宽度即可\n render.setRenderWidth(maxWidth);\n if (element instanceof ParagraphElement) {\n this.measureParagraph(element, render as ParagraphRenderObject);\n } else {\n throw new Error('未实现');\n }\n return render;\n\n } else if (element instanceof BlockContainerElement) {\n ElementUtil.fixBlockContainer(element);\n let render: BlockContainerRenderObject | null = null;\n if (element.modifyFlag === ModifyFlag.Modify || element.modifyFlag === ModifyFlag.Track) {\n ElementUtil.fixBlockContainer(element);\n element.measureRender = null;\n render = element.createRenderObject(this.options, this.renderCtx) as BlockContainerRenderObject;\n if (!render) {\n element.measureRender = null;\n return null;\n }\n if (render.rect.maxWidth === 0) {\n render.setRenderWidth(maxWidth);\n }\n }\n if (!render) {\n throw new Error('render is null')\n }\n element.measureRender = render;\n const innerMaxWidth = render.getInnerMaxWidth();\n for (let i = 0; i < element.length; i++) {\n const child = element.getChild(i);\n const blockContentELement = child as BlockContentElement;\n const childRender = this.measureControl(blockContentELement, innerMaxWidth) as BlockContentRenderObject;\n if (!childRender) {\n continue;\n }\n render.addChild(childRender);\n }\n ElementUtil.remeasure(render);\n return render;\n } else {\n throw new Error('未实现');\n }\n }\n\n /**\n * 生成段落 UI 树\n * @param para \n * @param render \n */\n measureParagraph(para: ParagraphElement, render: ParagraphRenderObject): void {\n ElementUtil.fixParagraphContent(para);\n const renderObjects: Array<RenderObject> = [];\n for (let i = 0; i < para.length; i++) {\n const child = para.getChild(i);\n if (child instanceof InlineGroupElement) {\n child.measureRender = this.getInlineGroupRenderItem(child);\n if (child.measureRender) {\n renderObjects.push(child.measureRender);\n }\n }\n else if (child instanceof LeafElement) {\n child.measureRender = child.createRenderObject(this.options, this.renderCtx);\n if (child.measureRender) {\n renderObjects.push(child.measureRender);\n }\n }\n }\n this.measureInnerParagraph(render, para, renderObjects);\n }\n\n\n\n /**\n * 根据段落UI元素,进行排列\n * @param render \n * @param paragraph \n * @param renderObjects \n */\n measureInnerParagraph(render: ParagraphRenderObject, paragraph: ParagraphElement, renderObjects: Array<RenderObject>) {\n let lineRect = render.createLineRect();\n //行内框\n const innerLineRects: Array<ParagraphLineRectRenderObject> = [];\n const addInnerLineFunc = (lineRect: ParagraphLineRectRenderObject): void => {\n innerLineRects.push(lineRect);\n if (lineRect.rect.maxWidth <= 0) {\n throw new Error('lineRect.rect.maxWidth is ' + lineRect.rect.maxWidth)\n }\n if (innerLineRects.indexOf(lineRect) === 0) {\n if (paragraph.props.indent > 0) {\n lineRect.rect.maxWidth -= paragraph.props.indent;\n }\n } else {\n lineRect.rect.maxWidth -= paragraph.props.hanging;\n }\n };\n addInnerLineFunc(lineRect);\n let i = 0;\n let currItem = renderObjects[i++];\n const inCloseBody = paragraph.parent.type === 'body';\n while (currItem) {\n const maxWidth = lineRect.rect.maxWidth as number;\n const nextItem = renderObjects[i];\n const { firstItem, lastItem, br } = this.cutRenderItem(currItem, nextItem, maxWidth - lineRect.rect.width, lineRect.length === 0, inCloseBody);\n if (firstItem) {\n if (lastItem) {\n renderObjects.splice(i, 0, lastItem);\n }\n currItem = firstItem;\n } else {\n lineRect = render.createLineRect();\n addInnerLineFunc(lineRect);\n continue;\n }\n lineRect.addChild(currItem);\n currItem.rect.x = lineRect.rect.width;\n if (currItem.rect.height > lineRect.rect.height) {\n lineRect.rect.height = currItem.rect.height;\n }\n lineRect.rect.width += currItem.rect.width;\n if (br) {\n //lineRect.rect.maxWidth = lineRect.rect.width;\n lineRect = render.createLineRect();\n addInnerLineFunc(lineRect);\n }\n currItem = renderObjects[i++];\n }\n for (let i = 0; i < innerLineRects.length; i++) {\n const innerLineRect = innerLineRects[i] as ParagraphLineRectRenderObject;\n innerLineRect.rect.x = this.getParaLineRectStartX(innerLineRects.length, i, paragraph, render, innerLineRect);\n //限制最大行高\n const maxLineHeight = Math.floor(14 * 1.3);\n //fillLineHeight填充行高\n let fillLineHeight = Math.ceil(innerLineRect.rect.height * (paragraph.props.lineHeight - 1));\n fillLineHeight = fillLineHeight > maxLineHeight ? maxLineHeight : fillLineHeight;\n const lineHeight = innerLineRect.rect.height + fillLineHeight;\n const paddingBottom = Math.ceil(fillLineHeight / 2);\n innerLineRect.rect.height = lineHeight;\n for (let j = 0; j < innerLineRect.length; j++) {\n const leaf = innerLineRect.getChild(j);\n leaf.rect.y = innerLineRect.rect.height - paddingBottom - leaf.rect.height;\n }\n //render.rect.height += lineRect.rect.height;\n const outterLineRect = render.createLineRect();\n outterLineRect.rect.width = outterLineRect.rect.maxWidth as number;\n outterLineRect.addChild(innerLineRect);\n ElementUtil.remeasure(outterLineRect, false);\n render.addChild(outterLineRect);\n }\n ElementUtil.remeasure(render);\n }\n\n /**\n * 获取段落行布局横向坐标起始位置,被段落text-align影响\n */\n getParaLineRectStartX(counter: number, paraLineIndex: number, paraElement: ParagraphElement, paraRenderObject: ParagraphRenderObject, paraLineRender: ParagraphLineRectRenderObject): number {\n //左对齐,首行缩进\n let indent = paraElement.props.indent;\n //存在项目符号\n if (paraLineIndex > 0) {\n indent = paraElement.props.hanging;\n }\n if (paraElement.props.textAlign === 'center') {\n const remainSpace = paraRenderObject.rect.width - paraLineRender.rect.width;\n return Math.ceil(remainSpace / 2) + indent;\n } else if (paraElement.props.textAlign === 'right') {\n const remainSpace = paraRenderObject.rect.width - paraLineRender.rect.width;\n return remainSpace + indent;\n } else if (paraElement.props.textAlign === 'justify') {\n const renderUnitCount = this.getRenderUnitLength(paraLineRender);\n if (paraLineIndex === counter - 1 || renderUnitCount === 1) {\n return indent;\n }\n const spaceWidth = (<number>paraLineRender.rect.maxWidth - paraLineRender.rect.width) / (renderUnitCount - 1);\n this.setAlignJustify(paraLineRender, 0, spaceWidth);\n return indent;\n } else {\n return indent;\n }\n }\n\n /**\n * 设置两端对齐\n * @param render \n * @param count \n * @param spaceWidth \n */\n private setAlignJustify(render: RenderObject, count: number, spaceWidth: number): number {\n if (render instanceof BranchRenderObject) {\n let width = 0;\n for (let i = 0; i < render.length; i++) {\n const currRender = render.getChild(i);\n count += this.setAlignJustify(currRender, count, spaceWidth);\n currRender.rect.x = width;\n width += currRender.rect.width;\n }\n render.rect.width = width;\n } else if (render instanceof LeafRenderObject) {\n if (render instanceof TextGroupRenderObject) {\n let i = count === 0 ? 1 : 0;\n for (; i < render.textMeasures.length; i++) {\n render.textMeasures[i].actualSize = render.textMeasures[i].actualSize + spaceWidth;\n }\n render.measure();\n count += render.textMeasures.length;\n } else {\n if (count !== 0) {\n render.rect.width += spaceWidth;\n }\n count += 1;\n }\n }\n return count;\n }\n\n /**\n * 获取段落行渲染单位个数,字符需要计算为字符长度\n */\n private getRenderUnitLength(paraLine: RenderObject): number {\n if (paraLine instanceof LeafRenderObject) {\n if (paraLine instanceof TextGroupRenderObject) {\n return paraLine.textMeasures.length;\n } else {\n return 1;\n }\n } else if (paraLine instanceof BranchRenderObject) {\n let count = 0;\n for (let i = 0; i < paraLine.length; i++) {\n count += this.getRenderUnitLength(paraLine.getChild(i));\n }\n return count;\n }\n throw new Error('未到达计算位置')\n }\n\n\n getInlineGroupRenderItem(item: InlineGroupElement): RenderObject | null {\n const inlineGroupRender = item.createRenderObject(this.options, this.renderCtx) as InlineGroupRenderObject;\n if (!inlineGroupRender) {\n return null;\n }\n for (let i = 0; i < item.length; i++) {\n const child = item.getChild(i);\n child.beginMeasure();\n if (child instanceof LeafElement) {\n child.measureRender = child.createRenderObject(this.options, this.renderCtx);\n if (child.measureRender) {\n inlineGroupRender.addChild(child.measureRender);\n }\n } else if (child instanceof InlineGroupElement) {\n item.measureRender = this.getInlineGroupRenderItem(child);\n if (item.measureRender) {\n inlineGroupRender.addChild(item.measureRender);\n }\n } else {\n throw new Error('未实现')\n }\n }\n\n ElementUtil.remeasureInlineGroupRender(inlineGroupRender);\n //限制最小长度\n if (item instanceof DataElementInlineGroup) {\n //需要填充null-text\n if (item.length === 2) {\n const nullText = new TextGroupElement();\n nullText.isDecorate = true;\n nullText.disableClick = true;\n const baseTextProps = (<any>item).props as DataEleBaseTextProps;\n nullText.text = baseTextProps.nullText as string;\n baseTextProps.nullTextProps.clone(nullText.props);\n const nullTextRender = nullText.createRenderObject(this.options, this.renderCtx);\n inlineGroupRender.insertChild(nullTextRender, 1);\n ElementUtil.remeasureInlineGroupRender(inlineGroupRender);\n }\n const props = (<any>item).props as DataEleBaseProps;\n let minLength = props.minLength ?? 14;\n minLength = minLength < 14 ? 14 : minLength;\n if (item instanceof DataElementInlineGroup && inlineGroupRender.rect.width < minLength) {\n const fillNullSpace = new FillNullSpaceRenderObject();\n fillNullSpace.rect.width = minLength - inlineGroupRender.rect.width;\n fillNullSpace.rect.height = inlineGroupRender.rect.height;\n inlineGroupRender.insertChild(fillNullSpace, inlineGroupRender.length - 1);\n }\n ElementUtil.remeasureInlineGroupRender(inlineGroupRender);\n }\n return inlineGroupRender;\n }\n\n\n cutRenderItem(render: RenderObject, nextRender: RenderObject, limitWidth: number, lineEmpty: boolean, inCloseBody: boolean): ICutLineData {\n if (render instanceof LeafRenderObject) {\n if (render.rect.width > limitWidth && render instanceof TextGroupRenderObject) {\n return this.cutTextRender(render, nextRender, limitWidth, lineEmpty, inCloseBody);\n }\n if (render instanceof FillNullSpaceRenderObject) {\n return this.cutFillNullRender(render, limitWidth);\n }\n if (render.rect.width < limitWidth || lineEmpty || render.element.type === 'br' || render.element.type === 'psym') {\n return { firstItem: render, lastItem: null, br: render.element.type === 'br' };\n }\n return { firstItem: null, lastItem: null };\n } else if (render instanceof InlineGroupRenderObject) {\n return this.cutInlineGroupRenderItem(render, limitWidth, lineEmpty, inCloseBody);\n }\n throw new Error('到达计算边界')\n }\n\n cutTextRender(render: TextGroupRenderObject, nextRender: RenderObject, limitWidth: number, lineEmpty: boolean, inCloseBody: boolean): ICutLineData {\n let sumWidth = 0;\n const cutRender = render.clone() as TextGroupRenderObject;\n cutRender.textMeasures.length = 0;\n let i = 0;\n for (; i < render.textMeasures.length; i++) {\n sumWidth += render.textMeasures[i].actualSize;\n if (sumWidth > limitWidth) {\n if (lineEmpty && i === 0) {\n i = 1;\n }\n break;\n }\n }\n //后置标点处理\n i = this.patchHandlePostPunctuation(render, nextRender, i, inCloseBody, lineEmpty);\n //前置标点处理\n i = this.patchHandleLeadingPunctuation(render, i, lineEmpty);\n if (i <= 0) {\n return { firstItem: null, lastItem: null };\n }\n\n cutRender.textMeasures = render.textMeasures.splice(0, i);\n render.measure();\n cutRender.measure();\n return { firstItem: cutRender, lastItem: render, br: true };\n }\n\n /**\n * 处理前置标点,前置标点不能出现在末尾\n * @param render \n * @param i \n */\n private patchHandleLeadingPunctuation(render: TextGroupRenderObject, i: number, lineEmpty: boolean): number {\n if (i === 1 && lineEmpty) {\n return i;\n }\n if (this.containLeadingPunctuation(render.textMeasures[i]?.char)) {\n return i--;\n }\n return i;\n }\n\n /**\n * 处理后置标点,后置标点不能出现在行首\n * @param render \n * @param i \n * @param lineEmpty \n */\n private patchHandlePostPunctuation(render: TextGroupRenderObject, nextRender: RenderObject, i: number, inCloseBody: boolean, lineEmpty: boolean): number {\n if (i === render.textMeasures.length - 1) {\n //紧跟着的字符包含后置标点\n if (this.containerStartSymbolInTextStart(nextRender)) {\n i--;\n }\n }\n if (inCloseBody && this.containPostPunctuation(render.textMeasures[i]?.char)) {\n if (this.containPostPunctuation(render.textMeasures[i + 1]?.char)) {\n i--;\n } else {\n i++;\n }\n } else {\n if (i <= 1) {\n //debugger;\n }\n if (i > 1 && this.containPostPunctuation(render.textMeasures[i]?.char)) {\n i--;\n }\n }\n return i;\n }\n\n /**\n * 是否包含后置标点\n * @param str \n * @returns \n */\n private containPostPunctuation(str: string): boolean {\n return '!),.:;?]}¨·ˇˉ―‖’”…∶、。〃々〉》」』】〕〗!"'),.:;?]`|}~¢'.indexOf(str) > -1;\n }\n\n //是否包含前置标点\n private containLeadingPunctuation(str: string): boolean {\n return '‘“〈《「『【〔〖([{£'.indexOf(str) > -1;\n }\n\n /**\n * 文本开头是否包含后置标点\n * @param render \n * @returns \n */\n private containerStartSymbolInTextStart(render: RenderObject): boolean {\n //return false;\n if (render instanceof TextGroupRenderObject) {\n if (render.textMeasures.length > 0) {\n return this.containPostPunctuation(render.textMeasures[0].char);\n }\n }\n return false;\n }\n\n cutFillNullRender(render: FillNullSpaceRenderObject, limitWidth: number): ICutLineData {\n if (limitWidth === 0) {\n return { firstItem: null, lastItem: null }\n }\n if (render.rect.width > limitWidth) {\n const cutRender = new FillNullSpaceRenderObject();\n cutRender.rect.width = limitWidth;\n cutRender.rect.height = render.rect.height;\n render.rect.width = render.rect.width - limitWidth;\n return { firstItem: cutRender, lastItem: render }\n } else {\n return { firstItem: render, lastItem: null }\n }\n }\n\n /**\n * 行内编组元素超出行内可用空间,需要根据剩余空间长度进行截断\n */\n cutInlineGroupRenderItem(render: InlineGroupRenderObject, limitWidth: number, emptyLine: boolean, inCloseBody: boolean): ICutLineData {\n const cutRender = render.element.createRenderObject(this.options, this.renderCtx) as InlineGroupRenderObject;\n let x = 0;\n let br = false;\n const items = [...render.getItems()];\n for (let i = 0; i < items.length; i++) {\n const child = items[i];\n if (child instanceof LeafRenderObject) {\n if (x + child.rect.width > limitWidth) {\n const { firstItem, lastItem, br: childBr } = this.cutRenderItem(child, items[i + 1], limitWidth - x, emptyLine && cutRender.length === 0, inCloseBody);\n if (firstItem) {\n cutRender.addChild(firstItem);\n if (lastItem) {\n //items.push(lastItem);\n //items.splice(i + 1, 0, lastItem)\n }\n }\n br = childBr || br;\n break;\n } else {\n render.removeChild(child);\n cutRender.addChild(child);\n }\n //软换行符\n if (child.element && child.element.type === 'br') {\n br = true;\n break;\n }\n } else if (child instanceof InlineGroupRenderObject) {\n if (x + child.rect.width > limitWidth) {\n const { firstItem, br: childBr } = this.cutInlineGroupRenderItem(child, limitWidth - x, emptyLine && cutRender.length === 0, inCloseBody);\n if (firstItem) {\n cutRender.addChild(firstItem);\n }\n br = childBr || br;\n break;\n } else {\n render.removeChild(child);\n cutRender.addChild(child);\n }\n }\n x += child.rect.width;\n }\n if (!cutRender.length) {\n return { firstItem: null, lastItem: null };\n }\n ElementUtil.remeasureInlineGroupRender(cutRender);\n ElementUtil.remeasureInlineGroupRender(render);\n return { firstItem: cutRender, lastItem: render.length ? render : null, br };\n }\n\n /**\n * 修改测量完毕后的元素状态\n * @param ele \n */\n setMeasureCompletedModifyFlag(ele: Element): void {\n if (ele instanceof BranchElement) {\n for (let i = 0; i < ele.length; i++) {\n this.setMeasureCompletedModifyFlag(ele.getChild(i));\n }\n }\n ele.modifyFlag = ModifyFlag.None;\n }\n\n clearPaintCache(ele: Element): void {\n ele.beginMeasure();\n if (ele instanceof BranchElement) {\n for (let i = 0; i < ele.length; i++) {\n this.clearPaintCache(ele.getChild(i));\n }\n }\n }\n\n endMeasures(ele: Element): void {\n if (ele instanceof BranchElement) {\n for (let i = 0; i < ele.length; i++) {\n this.endMeasures(ele.getChild(i));\n }\n }\n }\n\n\n\n}\n","import { BranchElement, Element, LeafElement, SelectionContentRange } from \"./element-define\";\nimport { ElementUtil } from \"./element-util\";\nimport { TableCellElement } from \"./impl/table/table-cell-impl\";\nimport { TableElement } from \"./impl/table/table-impl\";\nimport { TableRowElement } from \"./impl/table/table-row-impl\";\nimport { SelectionRange, SelectionState } from './document-selection'\nimport { TextGroupElement } from \"./impl/text/text-impl\";\n\n\nexport class RangeUtil {\n\n static getSelctionRange(startControl: LeafElement, startOffset: number, endControl: LeafElement, endOffset: number, ancestorCommonControl: BranchElement): SelectionContentRange {\n if (ancestorCommonControl instanceof TableElement || ancestorCommonControl instanceof TableRowElement) {\n const tbElement = ancestorCommonControl instanceof TableElement ? ancestorCommonControl : ancestorCommonControl.parent as TableElement;\n return this.getTableSelectionRange(startControl, startOffset, endControl, endOffset, tbElement);\n }\n if (startControl === endControl && startControl.parent === ancestorCommonControl) {\n return this.getCollapsedRange(startControl, startOffset, endOffset, ancestorCommonControl);\n }\n const startRange = this.getStartForbackTreeData(startControl, ancestorCommonControl, null, startOffset).selectedChildren[0];\n const endRange = this.getEndForwardTreeData(endControl, ancestorCommonControl, null, endOffset).selectedChildren[0];\n const startIndex = ancestorCommonControl.getChildIndex(startRange.target);\n const endIndex = ancestorCommonControl.getChildIndex(endRange.target);\n const commonRange = this.getChildTreeData(ancestorCommonControl, startIndex + 1, endIndex);\n if (this.rangeEquals(startRange, endRange)) {\n commonRange.selectedChildren.unshift(startRange);\n } else {\n commonRange.selectedChildren.unshift(startRange);\n commonRange.selectedChildren.push(endRange);\n }\n this.setRangeFullSelected(commonRange);\n return commonRange;\n }\n\n static getCollapsedRange(startControl: LeafElement, startOffset: number, endOffset: number, ancestorCommonControl: BranchElement): SelectionContentRange {\n const range = {\n target: ancestorCommonControl,\n isFullSelected: false,\n startOffset: startControl.getIndex(),\n endOffset: startControl.getIndex() + 1,\n selectedChildren: [this.getChildTreeData(startControl, startOffset, endOffset)]\n }\n this.setRangeFullSelected(range);\n return range;\n\n }\n\n /**\n * 获取表格选区的内容\n * @param startControl \n * @param startOffset \n * @param endControl \n * @param endOffset \n * @param tb \n */\n static getTableSelectionRange(startControl: LeafElement, startOffset: number, endControl: LeafElement, endOffset: number, tb: TableElement): SelectionContentRange {\n const startCell = ElementUtil.getParentByType(startControl, TableCellElement);\n const endCell = ElementUtil.getParentByType(endControl, TableCellElement);\n if (startCell && endCell && startCell.parent.parent === tb && endCell.parent.parent === tb) {\n let startRowIndex = startCell.parent.getIndex();\n let endRowIndex = endCell.parent.getIndex();\n let startColIndex = startCell.getIndex();\n let endColIndex = endCell.getIndex();\n if (startColIndex > endColIndex) {\n [startColIndex, endColIndex] = [endColIndex, startColIndex];\n }\n if (startRowIndex > endRowIndex) {\n [startRowIndex, endRowIndex] = [endRowIndex, startRowIndex];\n }\n const region = { startRow: startRowIndex, endRow: endRowIndex, startCol: startColIndex, endCol: endColIndex };//this.getTableRectSelectedRegion(tb, { startRow: startRowIndex, endRow: endRowIndex, startCol: startColIndex, endCol: endColIndex });\n startRowIndex = region.startRow;\n endRowIndex = region.endRow;\n startColIndex = region.startCol;\n endColIndex = region.endCol;\n const rowRanges: Array<SelectionContentRange> = [];\n for (let i = startRowIndex; i <= endRowIndex; i++) {\n const cellRanges: Array<SelectionContentRange> = [];\n const row = tb.getChild(i) as TableRowElement;\n for (let j = startColIndex; j <= endColIndex; j++) {\n const cell = row.getChild(j) as TableCellElement;\n const cellFirstLeafElement = ElementUtil.getFirstLeafElement(cell) as LeafElement;\n const cellLastLeafElement = ElementUtil.getLastLeafElement(cell) as LeafElement;\n if (!cellFirstLeafElement && !cell.isNotBeMergedCell()) {\n cellRanges.push({\n target: cell,\n isFullSelected: true,\n startOffset: 0,\n endOffset: 1,\n selectedChildren: []\n });\n } else {\n const cellRange = this.getSelctionRange(cellFirstLeafElement, 0, cellLastLeafElement, 1, cell);\n cellRanges.push(cellRange);\n }\n }\n const rowRange: SelectionContentRange = {\n target: row,\n isFullSelected: false,\n startOffset: startColIndex,\n endOffset: endColIndex,\n selectedChildren: [...cellRanges]\n };\n rowRange.isFullSelected = startColIndex === 0 && endColIndex === row.length - 1;\n rowRanges.push(rowRange);\n }\n const tableRange: SelectionContentRange = {\n target: tb,\n isFullSelected: false,\n startOffset: startRowIndex,\n endOffset: endRowIndex,\n selectedChildren: [...rowRanges]\n };\n tableRange.isFullSelected = startRowIndex === 0 && endRowIndex === tb.length - 1 && tableRange.selectedChildren.every(item => item.isFullSelected);\n return tableRange;\n } else {\n throw new Error('当前单元格和表格不对应');\n }\n }\n\n\n\n private static getStartForbackTreeData(control: Element, ancestorCommonControl: BranchElement, childData: SelectionContentRange | null, offset: number): SelectionContentRange {\n if (!control) {\n debugger;\n }\n const parent = control.parent;\n if (parent !== ancestorCommonControl) {\n const range = this.getChildTreeData(parent, parent.getChildIndex(control) + 1, -1);\n if (childData) {\n range.selectedChildren.unshift(childData);\n } else {\n range.selectedChildren.unshift(this.getChildTreeData(control, offset, -1));\n }\n this.setRangeFullSelected(range);\n return this.getStartForbackTreeData(parent, ancestorCommonControl, range, -99);\n } else {\n const ancestorRange: SelectionContentRange = {\n target: ancestorCommonControl,\n startOffset: -1,\n endOffset: -1,\n isFullSelected: false,\n selectedChildren: []\n };\n if (!childData) {\n childData = this.getChildTreeData(control, offset, -1);\n }\n ancestorRange.selectedChildren.push(childData);\n this.setRangeFullSelected(ancestorRange);\n return ancestorRange;\n }\n }\n\n\n\n private static getEndForwardTreeData(control: Element, ancestorCommonControl: BranchElement, childData: SelectionContentRange | null, offset: number): SelectionContentRange {\n const parent = control.parent;\n if (parent !== ancestorCommonControl) {\n const range = this.getChildTreeData(parent, 0, parent.getChildIndex(control));\n if (childData) {\n range.selectedChildren.push(childData);\n } else {\n range.selectedChildren.push(this.getChildTreeData(control, 0, offset));\n }\n this.setRangeFullSelected(range);\n return this.getEndForwardTreeData(parent, ancestorCommonControl, range, -99);\n } else {\n const ancestorRange: SelectionContentRange = {\n target: ancestorCommonControl,\n startOffset: 0,\n endOffset: 0,\n isFullSelected: false,\n selectedChildren: []\n };\n if (!childData) {\n childData = this.getChildTreeData(control, 0, offset)\n }\n ancestorRange.selectedChildren.push(childData);\n this.setRangeFullSelected(ancestorRange);\n return ancestorRange;\n }\n }\n\n private static getChildTreeData(control: Element, start: number, end: number): SelectionContentRange {\n const range: SelectionContentRange = {\n target: control,\n isFullSelected: false,\n startOffset: start,\n endOffset: end,\n selectedChildren: []\n };\n if (control instanceof LeafElement) {\n if (control instanceof TextGroupElement) {\n range.endOffset = end === -1 ? control.text.length : end;\n } else {\n range.endOffset = end === -1 ? 1 : end;\n }\n\n } else if (control instanceof BranchElement) {\n end = end === -1 ? control.length : end;\n for (let i = start; i < end; i++) {\n const child = control.getChild(i);\n range.selectedChildren.push(this.getChildTreeData(child, 0, -1));\n }\n }\n this.setRangeFullSelected(range);\n return range;\n }\n\n private static setRangeFullSelected(selectionRange: SelectionContentRange): void {\n if (selectionRange.target instanceof LeafElement) {\n const { startOffset, endOffset } = selectionRange;\n if (selectionRange.target instanceof TextGroupElement) {\n selectionRange.isFullSelected = startOffset === 0 && endOffset === selectionRange.target.text.length\n } else {\n selectionRange.isFullSelected = startOffset === 0 && endOffset === 1;\n }\n } else if (selectionRange.target instanceof BranchElement) {\n const parent = selectionRange.target;\n const selectedChildren = selectionRange.selectedChildren;\n //被合并的table-cell,内容为empty\n if (selectedChildren.length === 0) {\n if (selectionRange.startOffset === 0 && selectionRange.endOffset === -1) {\n selectionRange.isFullSelected = true;\n return;\n }\n selectionRange.isFullSelected = false;\n return;\n }\n const firstItem = selectedChildren[0];\n const firstItemIndex = parent.getChildIndex(firstItem.target);\n const lastItem = selectedChildren[selectedChildren.length - 1];\n const lastItemIndex = parent.getChildIndex(lastItem.target);\n selectionRange.startOffset = firstItemIndex;\n selectionRange.endOffset = lastItemIndex;\n selectionRange.isFullSelected = firstItemIndex === 0 && firstItem.isFullSelected && lastItemIndex === parent.length - 1 && lastItem.isFullSelected;\n }\n }\n\n static rangeEquals(selRange1: SelectionContentRange, selRange2: SelectionContentRange): boolean {\n return selRange1.target === selRange2.target && selRange1.startOffset === selRange2.startOffset && selRange1.endOffset === selRange2.endOffset;\n }\n\n\n /**\n * 根据选区范围更正选区内容状态\n * @param selectedRange \n * @param selectionState \n */\n static fixSelectionStateByRange(selectionState: SelectionState): boolean {\n const { startControl, startOffset, endControl, endOffset, selectedRange } = selectionState;\n if (!selectedRange || !startControl) {\n return false;\n }\n const startRange = this.getStartRangeTarget(selectedRange) as SelectionContentRange;\n const endRange = this.getEndRangeTarget(selectedRange) as SelectionContentRange;\n if (startRange.target !== startControl || startRange.startOffset !== startOffset || endRange.target !== endControl || endRange.endOffset !== endOffset) {\n selectionState.clear();\n const ssRange = new SelectionRange();\n ssRange.setStart(startRange.target, startRange.startOffset);\n ssRange.setEnd(endRange.target, endRange.endOffset);\n selectionState.addRange(ssRange);\n return true;\n }\n return false;\n }\n\n static getStartRangeTarget(parentRange: SelectionContentRange): SelectionContentRange | null {\n if (parentRange.target instanceof LeafElement) {\n return parentRange;\n } else {\n for (let i = 0; i < parentRange.selectedChildren.length; i++) {\n const res = this.getStartRangeTarget(parentRange.selectedChildren[i]);\n if (res) {\n return res;\n }\n }\n }\n return null;\n }\n\n static getEndRangeTarget(parentRange: SelectionContentRange): SelectionContentRange | null {\n if (parentRange.target instanceof LeafElement) {\n return parentRange;\n } else {\n for (let i = parentRange.selectedChildren.length - 1; i >= 0; i--) {\n const res = this.getEndRangeTarget(parentRange.selectedChildren[i]);\n if (res) {\n return res;\n }\n }\n }\n return null;\n }\n\n /**\n * 循环递归执行选区对象方法\n * @param range \n * @param handler \n */\n static recursionTraversalRangeHandler(range: SelectionContentRange, handler: (range: SelectionContentRange) => void): void {\n handler(range);\n for (let i = 0; i < range.selectedChildren.length; i++) {\n this.recursionTraversalRangeHandler(range.selectedChildren[i], handler);\n }\n }\n\n /**\n * 判断元素是否被完全选中\n * @param range \n */\n static checkElementFullInRange(range: SelectionContentRange, ele: Element): boolean {\n let res = false;\n this.recursionTraversalRangeHandler(range, (childRange) => {\n if (childRange.target === ele && childRange.isFullSelected) {\n res = true;\n }\n });\n return res;\n }\n\n}","import { RenderContextType } from \"./render-context\";\nimport { Element, LeafElement, onceTask, Position, SelectionContentRange, ViewOptions } from \"./element-define\";\nimport { BranchRenderObject, IRenderData, LeafRenderObject, RenderObject } from \"./render-define\";\nimport { DocumentContainerRender } from \"./impl\";\nimport { ElementUtil } from \"./element-util\";\nimport { CommentElement } from \"./impl\";\nimport { CommsContainerRenderObject } from \"./impl\";\nimport { CommentsUtil } from \"./impl\";\nimport { TextGroupElement, TextGroupRenderObject } from \"./impl\";\nimport { RangeUtil } from \"./range-util\";\nimport { DataElementRenderObject } from \"./impl\";\nimport { EditorContext } from \"./document-context\";\n\nexport interface PrintOptions {\n beforePrintPage: (pageIndex: number, pageCount: number) => void;\n afterPrintPage: (pageIndex: number, pageCount: number) => void;\n}\n\nexport class ElementPaint {\n //存储元素和绘制元素的映射关系\n //paintElementMap: Map<Element, Array<RenderObject>> = new Map();\n private selectedSets!: Map<Element, SelectionContentRange>;\n private measureCommContainer!: CommsContainerRenderObject;\n private rePaint!: boolean;\n viewOptions: ViewOptions;\n constructor(private renderCtx: RenderContextType, private docCtx: EditorContext) {\n this.viewOptions = docCtx.viewOptions;\n }\n\n //审阅标记的位置对应关系\n paintCommMap!: Array<{ ele: CommentElement, render: RenderObject, pos: Position }>;\n paintPagePos!: Position;\n\n drawPages(docContainer: DocumentContainerRender, selectedSets: Map<Element, SelectionContentRange>, measureCommContainer: CommsContainerRenderObject, rePaint: boolean): void {\n\n this.rePaint = rePaint;\n this.measureCommContainer = measureCommContainer;\n this.selectedSets = selectedSets;\n const pageCount = docContainer.length;\n const containerPos = { x: docContainer.rect.x, y: docContainer.rect.y - this.viewOptions.translateY };\n const nextRenderFn = onceTask(() => {\n for (let i = 0; i < pageCount; i++) {\n const doc = docContainer.getChild(i);\n const { x: rx, y: ry, width: rw, height: rh } = doc.rect;\n const currPosition = { x: rx + containerPos.x, y: ry + containerPos.y };\n let inViewPort: boolean | undefined = (currPosition.y >= 0 && currPosition.y <= this.viewOptions.viewSettings.height / this.viewOptions.scale) || (currPosition.y < 0 && currPosition.y + rh > 0);\n if (this.viewOptions.fullPageView) {\n //inViewPort = undefined;\n }\n this.paintCommMap = [];\n this.paintPagePos = currPosition;\n this.drawRenderObject(doc, containerPos, inViewPort);\n if (inViewPort) {\n this.invokedPagePaintCompleted(doc, containerPos);\n }\n }\n })\n docContainer.render({\n render: this.renderCtx,\n position: { x: 0, y: 0 },\n nextRender: nextRenderFn,\n docCtx: this.docCtx\n })\n nextRenderFn();\n const { scale, viewSettings: { width, height } } = this.viewOptions;\n this.renderCtx.commit({ width, height, scale });\n }\n\n drawRenderObject(renderObject: RenderObject<any>, parent: { x: number, y: number }, parentInViewPort: boolean | undefined = false): void {\n const element = renderObject.element;\n if (this.rePaint && element) {\n element.paintRenders.push(renderObject);\n }\n const { x: rx, y: ry, width: rw, height: rh } = renderObject.rect;\n const currPosition = { x: rx + parent.x, y: ry + parent.y };\n //判断当前绘制元素是否在视窗内\n let inViewPort: boolean = parentInViewPort;\n if (parentInViewPort === undefined || this.viewOptions.fullPageView) {\n inViewPort = (currPosition.y >= 0 && currPosition.y <= this.viewOptions.viewSettings.height) || (currPosition.y < 0 && currPosition.y + rh > 0);\n }\n if (renderObject instanceof BranchRenderObject) {\n if (inViewPort || this.rePaint) {\n //审阅窗口重新计算位置\n if (this.viewOptions.showReviewWindow && renderObject instanceof CommsContainerRenderObject) {\n if (!renderObject.isMeasureComm) {\n CommentsUtil.remeasureComments(this.renderCtx, renderObject, this.measureCommContainer, this.paintCommMap);\n renderObject.isMeasureComm = true;\n }\n }\n const nextRenderFn = onceTask(() => {\n for (let i = 0; i < renderObject.length; i++) {\n const child = renderObject.getChild(i);\n this.drawRenderObject(child, currPosition, inViewPort)\n }\n })\n const renderData: IRenderData = {\n position: currPosition,\n nextRender: nextRenderFn,\n render: this.renderCtx,\n docCtx: this.docCtx\n }\n renderObject.render(renderData);\n nextRenderFn();\n }\n } else if (renderObject instanceof LeafRenderObject) {\n if (inViewPort) {\n const renderData: IRenderData = {\n position: currPosition,\n nextRender: () => { },\n render: this.renderCtx,\n docCtx: this.docCtx\n }\n renderObject.render(renderData);\n }\n //审阅信息\n if (this.viewOptions.showReviewWindow && element && element.type === 'comm') {\n const commElement = element as CommentElement;\n if (commElement.props.markType === 'start') {\n //获取当前绘制元素相对于当前页的坐标\n this.paintCommMap.push({\n ele: commElement,\n render: renderObject,\n pos: { x: currPosition.x - this.paintPagePos.x, y: currPosition.y - this.paintPagePos.y }\n });\n }\n }\n }\n //处理选中拖蓝\n if (inViewPort && this.selectedSets.has(element)) {\n const range = this.selectedSets.get(element) as SelectionContentRange;\n if (renderObject instanceof LeafRenderObject) {\n const overlayRect = { x: currPosition.x, y: currPosition.y, width: rw, height: rh };\n const paraLinePos = ElementUtil.getParaLinePos(renderObject, { x: currPosition.x, y: currPosition.y });\n if (range.isFullSelected) {\n this.renderCtx.overlaysContext.fillRect(overlayRect.x, paraLinePos.y, overlayRect.width, paraLinePos.height, this.viewOptions.selectionOverlaysColor);\n } else {\n if (element instanceof TextGroupElement && range.endOffset > range.startOffset) {\n const {\n startX,\n endX\n } = ElementUtil.getTextRenderHorX(<TextGroupRenderObject>renderObject, range.startOffset, range.endOffset);\n overlayRect.width = endX - startX;\n overlayRect.x += startX;\n this.renderCtx.overlaysContext.fillRect(overlayRect.x, paraLinePos.y, overlayRect.width, paraLinePos.height, this.viewOptions.selectionOverlaysColor);\n }\n }\n } else if (range.isFullSelected && element.type === 'tbc') {\n this.renderCtx.overlaysContext.fillRect(currPosition.x, currPosition.y, renderObject.rect.width, renderObject.rect.height, this.viewOptions.selectionOverlaysColor);\n }\n }\n if (inViewPort && this.viewOptions.showReviewWindow && this.measureCommContainer.selectedSet.has(element)) {\n if (renderObject instanceof LeafRenderObject || renderObject instanceof DataElementRenderObject) {\n const range = this.measureCommContainer.selectedSet.get(element) as SelectionContentRange;\n if (range.isFullSelected) {\n let commentRangePaintColor = '#ffd591';\n for (let i = 0; i < this.measureCommContainer.commentRangeStatus.length; i++) {\n const commentRangeStatus = this.measureCommContainer.commentRangeStatus[i];\n if (commentRangeStatus.commContent.focus) {\n if (RangeUtil.checkElementFullInRange(commentRangeStatus.range, element)) {\n commentRangePaintColor = '#fa8c16';\n }\n }\n }\n const overlayRect = { x: currPosition.x, y: currPosition.y, width: rw, height: rh };\n const paraLinePos = ElementUtil.getParaLinePos(renderObject, {\n x: currPosition.x,\n y: currPosition.y\n });\n this.renderCtx.overlaysContext.fillRect(overlayRect.x, paraLinePos.y, overlayRect.width, paraLinePos.height, commentRangePaintColor);\n }\n }\n\n }\n }\n\n /**\n * 触发页面绘制结束事件\n */\n invokedPagePaintCompleted(renderObject: RenderObject, parent: { x: number, y: number }): void {\n const { x: rx, y: ry, width: rw, height: rh } = renderObject.rect;\n const currPosition = { x: rx + parent.x, y: ry + parent.y };\n renderObject.pagePaintCompleted({ render: this.renderCtx, position: currPosition, docCtx: this.docCtx })\n if (renderObject instanceof BranchRenderObject) {\n for (let i = 0; i < renderObject.length; i++) {\n this.invokedPagePaintCompleted(renderObject.getChild(i), currPosition);\n }\n }\n }\n\n static drawPage(renderCtx: RenderContextType, docCtx: EditorContext, renderObject: RenderObject, parent: { x: number, y: number }): void {\n const { x: rx, y: ry } = renderObject.rect;\n const currPosition = { x: rx + parent.x, y: ry + parent.y };\n if (renderObject instanceof BranchRenderObject) {\n const nextRenderFn = onceTask(() => {\n for (let i = 0; i < renderObject.length; i++) {\n const child = renderObject.getChild(i);\n this.drawPage(renderCtx, docCtx, child, currPosition);\n }\n });\n const renderData: IRenderData = {\n position: currPosition,\n nextRender: nextRenderFn,\n render: renderCtx,\n docCtx\n }\n renderObject.render(renderData);\n nextRenderFn();\n } else if (renderObject instanceof LeafRenderObject) {\n const renderData: IRenderData = {\n position: currPosition,\n nextRender: () => { },\n render: renderCtx,\n docCtx: docCtx\n }\n renderObject.render(renderData);\n }\n }\n}\n\n\n\n","import { ElementUtil } from \"./element-util\";\nimport { DocumentBodyRenderObject } from \"./impl/document/doc-body-impl\";\nimport { DocumentHeaderRenderObject } from \"./impl/document/doc-header-impl\";\nimport { DocumentElement, DocumentRenderObject } from \"./impl/document/doc-impl\";\nimport { RenderContextType } from \"./render-context\";\nimport { BlockContentRenderObject, BlockLineRectRenderObject, MuiltBlockLineRenderObject, RenderObject } from \"./render-define\";\nimport { Rect, ViewOptions } from \"./element-define\";\nimport { TableRowElement, TableRowRenderObject } from \"./impl/table/table-row-impl\";\nimport { DocumentFooterRenderObject } from \"./impl/document/doc-footer-impl\";\nimport { TableCellElement, TableCellRenderObject } from \"./impl/table/table-cell-impl\";\nimport { TableElement, TableRenderObject } from \"./impl/table/table-impl\";\nimport { CommsContainerRenderObject } from \"./impl/comments/comments-container-impl\";\nimport { ParagraphElement } from \"./impl/paragraph/p-impl\";\n\nexport class ElementRenderCut {\n constructor(private options: ViewOptions, private renderContext: RenderContextType) { }\n\n cutPage(documentRender: DocumentRenderObject, documentElement: DocumentElement): Array<DocumentRenderObject> {\n if (this.options.fullPageView) {\n return this.getFullViewDocRender(documentRender, documentElement);\n }\n const headerRender = documentRender.getChild(0) as DocumentHeaderRenderObject;\n const bodyRender = documentRender.getChild(1).clone() as DocumentBodyRenderObject;\n const footerRender = documentRender.getChild(2) as DocumentFooterRenderObject;\n const commentsRender = documentRender.getChild(3) as CommsContainerRenderObject;\n const { headerLine, footerLine } = documentRender;\n let bodyMarginTop = headerLine + headerRender.rect.height + 6;\n let bodyMarginBottom = footerLine + footerRender.rect.height;\n const { top: bodyTop, bottom: bodyBottom } = documentRender.padding;\n bodyMarginTop = bodyMarginTop > bodyTop ? bodyMarginTop : bodyTop;\n bodyMarginBottom = bodyMarginBottom > bodyBottom ? bodyMarginBottom : bodyBottom;\n documentRender.padding.top = bodyMarginTop;\n documentRender.padding.bottom = bodyMarginBottom;\n const bodyLimitRect = documentRender.getInnerRect();\n const bodyArray: Array<DocumentBodyRenderObject> = [];\n let { emptyBody: pageBodyRender, innerRect: bodyInnerLimitRect } = this.createEmptyBodyRender(bodyRender, bodyLimitRect);\n bodyArray.push(pageBodyRender);\n\n const createBodyHolder = () => {\n const { emptyBody, innerRect } = this.createEmptyBodyRender(bodyRender, bodyLimitRect);\n pageBodyRender = emptyBody;\n bodyInnerLimitRect = innerRect;\n bodyArray.push(pageBodyRender);\n };\n\n const appendToBody = (item: BlockContentRenderObject) => {\n item.rect.y = bodyInnerLimitRect.height + item.margin.top;\n pageBodyRender.addChild(item);\n bodyInnerLimitRect.height += item.rect.height + item.margin.top + item.margin.bottom;\n //上一个元素的bottom-margin\n //bodyInnerLimitRect.prevMargin = item.margin.bottom;\n ElementUtil.updateRenderHeightByInnerRect(pageBodyRender, bodyInnerLimitRect);\n if (this.checkPageBreak(item)) {\n createBodyHolder();\n }\n };\n\n\n let i = 0;\n let cloneBlockContentRender: null | BlockContentRenderObject = bodyRender.getChild(i) as BlockContentRenderObject;\n while (cloneBlockContentRender) {\n if (bodyInnerLimitRect.maxHeight - bodyInnerLimitRect.height - cloneBlockContentRender.rect.height - cloneBlockContentRender.margin.bottom - cloneBlockContentRender.margin.top < 0) {\n //限制的外框尺寸\n const bodyAvailHeight = bodyInnerLimitRect.maxHeight - bodyInnerLimitRect.height - cloneBlockContentRender.margin.bottom - cloneBlockContentRender.margin.top;\n //限制的内框尺寸\n const limitRenderInnterHeight = ElementUtil.innerRectMaxHeight(cloneBlockContentRender, bodyAvailHeight);\n const cutRenderObject = this.cutRenderItem(cloneBlockContentRender, limitRenderInnterHeight);\n //至少有一个块级行元素被切割出来\n if (cutRenderObject) {\n appendToBody(cutRenderObject);\n }\n createBodyHolder();\n } else {\n appendToBody(cloneBlockContentRender);\n if (++i < bodyRender.length) {\n cloneBlockContentRender = bodyRender.getChild(i) as BlockContentRenderObject;\n } else {\n cloneBlockContentRender = null;\n }\n }\n }\n\n const docPages: Array<DocumentRenderObject> = [];\n let pageY: number = this.options.docSpace;\n for (let i = 0; i < bodyArray.length; i++) {\n const body = bodyArray[i];\n const documentRender = documentElement.createRenderObject(this.options);\n docPages.push(documentRender);\n documentRender.rect.y = pageY;\n const limitRect = documentRender.getInnerRect();\n const cloneHeaderRender = headerRender.clone();\n cloneHeaderRender.rect.x = limitRect.x;\n cloneHeaderRender.rect.y = headerLine;\n documentRender.addChild(cloneHeaderRender);\n body.rect.x = limitRect.x;\n body.rect.y = bodyMarginTop;\n body.rect.height = bodyInnerLimitRect.maxHeight;\n documentRender.addChild(body);\n pageY += documentRender.rect.height + this.options.docSpace;\n const cloneFooterRender = footerRender.clone();\n cloneFooterRender.rect.x = limitRect.x;\n cloneFooterRender.rect.y = documentRender.rect.height - bodyMarginBottom;\n documentRender.addChild(cloneFooterRender);\n //审阅模式,添加审阅窗口\n if (this.options.showReviewWindow && commentsRender) {\n const commentsContainer = commentsRender.element.createRenderObject(this.options, this.renderContext) as CommsContainerRenderObject;\n commentsContainer.padding.top = bodyMarginTop;\n commentsContainer.rect.height = documentRender.rect.height;\n documentRender.addChild(commentsContainer);\n commentsContainer.rect.x = documentRender.rect.x + documentRender.rect.width;\n documentRender.rect.width += this.options.reviewWindowWidth;\n }\n }\n return docPages;\n }\n\n private checkPageBreak(item: RenderObject): boolean {\n if (item.element && item.element.type === 'p') {\n const p = item.element as ParagraphElement;\n if (p.props.pageBreak) {\n return true;\n }\n }\n return false;\n }\n\n getFullViewDocRender(documentRender: DocumentRenderObject, documentElement: DocumentElement): Array<DocumentRenderObject> {\n const commentsRender = documentRender.getChild(3) as CommsContainerRenderObject;\n const commentsContainer = commentsRender.element.createRenderObject(this.options, this.renderContext) as CommsContainerRenderObject;\n documentRender.rect.height -= commentsContainer.rect.height;\n const bodyRender = documentRender.getChild(1) as DocumentBodyRenderObject;\n if (this.options.showReviewWindow) {\n documentRender.removeChild(commentsRender);\n documentRender.addChild(commentsContainer);\n commentsContainer.padding.top = bodyRender.rect.y;\n commentsContainer.rect.height = documentRender.rect.height;\n commentsContainer.rect.x = documentRender.rect.x + documentRender.rect.width;\n documentRender.rect.width += this.options.reviewWindowWidth;\n }\n return [documentRender as DocumentRenderObject]\n }\n\n createEmptyBodyRender(bodyRender: DocumentBodyRenderObject, limitRect: Rect): { emptyBody: DocumentBodyRenderObject, innerRect: Rect & { prevMargin: number } } {\n const pageBodyRender = bodyRender.element.createRenderObject(this.options, this.renderContext) as DocumentBodyRenderObject;\n ElementUtil.setBlockElementLimitSize(pageBodyRender, limitRect);\n const bodyInnerLimitRect = pageBodyRender.getInnerRect();\n if (this.options.fullPageView) {\n bodyInnerLimitRect.height = Number.MAX_VALUE;\n }\n return { emptyBody: pageBodyRender, innerRect: { ...bodyInnerLimitRect, prevMargin: 0 } };\n }\n\n /**\n * 切割渲染元素\n * @param render 被切割的对象\n * @param limitHeight \n * @param addFunc \n * @returns \n */\n cutRenderItem(render: BlockContentRenderObject, limitHeight: number): BlockContentRenderObject | null {\n if (render instanceof TableRowRenderObject) {\n return this.cutRowRenderItem(render, limitHeight);\n }\n if (render instanceof TableRenderObject) {\n return this.cutTable(render, limitHeight);\n }\n const cloneRender = render.element.createRenderObject(this.options, this.renderContext) as MuiltBlockLineRenderObject;\n cloneRender.setRenderWidth(render.rect.width);\n if (render instanceof MuiltBlockLineRenderObject) {\n let sumHeight = 0;\n const children = [...render.getItems()];\n let j = 0;\n let blockLine = children[j];\n while (blockLine) {\n //sumHeight = ElementUtil.remeasure(cloneRender);\n const calcBlockLineHeight = this.getBlockLineHeight(blockLine);\n if (calcBlockLineHeight + sumHeight > limitHeight) {\n if (blockLine instanceof MuiltBlockLineRenderObject) {\n //限制的外框尺寸\n const availHeight = limitHeight - sumHeight;\n //限制的内框尺寸\n const limitRenderInnterHeight = ElementUtil.innerRectMaxHeight(render, availHeight);\n const cutRenderObject = this.cutRenderItem(blockLine, limitRenderInnterHeight);\n if (cutRenderObject) {\n cloneRender.addChild(cutRenderObject);\n sumHeight += cutRenderObject.rect.height;\n blockLine = children[++j];\n } else {\n break;\n }\n } else {\n break;\n }\n } else {\n render.removeChild(blockLine);\n cloneRender.addChild(blockLine);\n sumHeight += blockLine.rect.height;\n blockLine = children[++j];\n }\n }\n ElementUtil.remeasure(cloneRender);\n ElementUtil.remeasure(render);\n if (cloneRender.length === 0) {\n return null;\n } else {\n return cloneRender;\n }\n } else {\n throw new Error('未实现');\n }\n }\n\n /**\n * 切割渲染元素\n * @param tbRender 被切割的对象\n * @param limitHeight \n * @param addFunc \n * @returns \n */\n cutTable(tbRender: TableRenderObject, limitHeight: number): BlockContentRenderObject | null {\n const cloneTbRender = tbRender.element.createRenderObject(this.options, this.renderContext) as TableRenderObject;\n cloneTbRender.setRenderWidth(tbRender.rect.width);\n let sumHeight = 0;\n const rows = [...tbRender.getItems()];\n //获取跨页需要重复显示的行\n const headerRows = this.getHeaderRows(tbRender);\n //跨页头的高度\n const headerHeight = headerRows.reduce((prev, curr) => prev + curr.rect.height, 0);\n if (headerHeight > limitHeight) {\n return null;\n }\n const copyHeaderRows = headerRows.map(item => item.clone());\n //获取最后一个截断行,需要根据截断行判断最后一个截断的行位置\n const cutOffRows = rows.filter(row => limitHeight >= row.rect.y && limitHeight <= row.rect.y + row.rect.height)\n .map((row) => ({ rowIndex: (<TableRowElement>row.element).getIndex(), row }))\n .sort((first, second) => second.rowIndex - first.rowIndex);\n if (cutOffRows.length === 0) {\n throw new Error('无法获取截断行');\n }\n const joinRow = cutOffRows[0].row;\n let j = 0;\n let currRow = rows[j];\n const cutRows: Array<TableRowRenderObject> = [];\n while (currRow) {\n const rowContentHeight = this.getBlockLineHeight(currRow);\n if (rowContentHeight + sumHeight > limitHeight) {\n if (currRow instanceof MuiltBlockLineRenderObject) {\n //限制的外框尺寸\n const availHeight = limitHeight - sumHeight;\n //限制的内框尺寸\n const limitRenderInnterHeight = ElementUtil.innerRectMaxHeight(tbRender, availHeight);\n const cutRow = this.cutRowRenderItem(currRow, limitRenderInnterHeight) as TableRowRenderObject;\n if (cutRow) {\n cloneTbRender.addChild(cutRow);\n sumHeight += cutRow.rect.height;\n cutRows.push(currRow);\n if (currRow === joinRow) {\n break;\n }\n currRow = rows[++j];\n } else {\n break;\n }\n } else {\n break;\n }\n } else {\n tbRender.removeChild(currRow);\n cloneTbRender.addChild(currRow);\n sumHeight += currRow.rect.height;\n currRow = rows[++j];\n }\n }\n this.fixCutTable(tbRender, cutRows);\n ElementUtil.remeasure(cloneTbRender);\n //存在跨页需要重复显示的行头,则需要重新放置行头\n if (copyHeaderRows.length) {\n copyHeaderRows.forEach((r, i) => tbRender.insertChild(r, i))\n }\n ElementUtil.remeasure(tbRender);\n if (cloneTbRender.length === 0) {\n return null;\n } else {\n return cloneTbRender;\n }\n }\n\n cutRowRenderItem(render: TableRowRenderObject, limitHeight: number): TableRowRenderObject | null {\n if (render.element.props.minHeight > 0 && render.rect.height > limitHeight) {\n return null;\n }\n const cloneRowRender = render.element.createRenderObject() as TableRowRenderObject;\n cloneRowRender.rect.width = render.rect.width;\n cloneRowRender.rect.maxWidth = render.rect.height;\n const cellRenders = [...render.getItems()] as Array<TableCellRenderObject>;\n const cutCellRenders: Array<RenderObject | null> = [];\n for (let i = 0; i < cellRenders.length; i++) {\n const cellRender = cellRenders[i];\n if (cellRender.rect.height > limitHeight) {\n //限制的外框尺寸\n const availHeight = limitHeight;\n //限制的内框尺寸\n const limitRenderInnterHeight = ElementUtil.innerRectMaxHeight(cellRender, availHeight);\n const cutCellRender = this.cutRenderItem(cellRender, limitRenderInnterHeight);\n if (cutCellRender) {\n cutCellRenders.push(cutCellRender)\n } else {\n cutCellRenders.push(null)\n }\n } else {\n const cloneCellRender = cellRender as BlockLineRectRenderObject;\n render.removeChild(cellRender);\n cutCellRenders.push(cloneCellRender);\n }\n }\n ElementUtil.remeasure(render);\n if (cutCellRenders.filter(item => item).length === 0) {\n return null;\n } else {\n //补齐单元格\n for (let i = 0; i < cutCellRenders.length; i++) {\n let cellRender = cutCellRenders[i] as TableCellRenderObject;\n if (!cellRender) {\n cellRender = cellRenders[i].clone() as TableCellRenderObject;\n ElementUtil.remeasure(cellRender);\n }\n cloneRowRender.addChild(cellRender);\n }\n ElementUtil.remeasure(cloneRowRender);\n return cloneRowRender;\n }\n }\n /**\n * 修复->已经截断的合并单元格要向下移动到合适的位置\n * @param tbRender \n * @param cutRows \n * @returns \n */\n private fixCutTable(tbRender: TableRenderObject, cutRows: Array<TableRowRenderObject>): void {\n if (!cutRows.length) {\n return;\n }\n const tbEle = tbRender.element as TableElement;\n const belowMergeRows = new Set<TableRowRenderObject>();\n for (let i = 0; i < tbRender.length; i++) {\n const row = tbRender.getChild(i) as TableRowRenderObject;\n const nextRow = tbRender.getChild(i + 1) as TableRowRenderObject;\n if (!nextRow) {\n break;\n }\n if (!cutRows.some(item => item === row)) {\n break;\n }\n if (row.length === tbEle.getColsCount()) {\n break;\n }\n if (this.checkFullRow(row)) {\n break;\n }\n for (let j = 0; j < row.length; j++) {\n const cell = row.getChild(j) as TableCellRenderObject;\n const cellEle = cell.element as TableCellElement;\n const colIndex = cellEle.getIndex();\n if (!this.existsCellRender(nextRow, colIndex)) {\n const insertColIndex = this.getRowInsertCellIndex(cell, nextRow);\n if (insertColIndex === -1) {\n const insertColIndex2 = this.getRowInsertCellIndex(cell, nextRow);\n throw new Error('未在紧挨下方找到可以放置的位置');\n }\n //row.removeChild(cell);\n nextRow.insertChild(cell, insertColIndex);\n belowMergeRows.add(row);\n ElementUtil.remeasure(nextRow);\n }\n }\n }\n if (belowMergeRows.size) {\n for (const row of belowMergeRows) {\n tbRender.removeChild(row);\n row.clear();\n }\n ElementUtil.remeasure(tbRender);\n }\n }\n\n /**\n * 校验当前是否是一个完整的行,没有Null单元格,检查当前是否还需要向下合并\n * @param row \n */\n private checkFullRow(row: TableRowRenderObject): boolean {\n let x = 0;\n for (let i = 0; i < row.length; i++) {\n const cell = row.getChild(i);\n if (cell.rect.x !== x) {\n return false;\n }\n x += cell.rect.width;\n }\n return x === row.rect.width;\n }\n\n private existsCellRender(rowRender: TableRowRenderObject, cellIndex: number): boolean {\n for (let i = 0; i < rowRender.length; i++) {\n const cellRender = rowRender.getChild(i) as TableCellRenderObject;\n const cellEle = cellRender.element as TableCellElement;\n if (cellEle.getIndex() === cellIndex) {\n return true;\n }\n }\n return false;\n }\n\n private getBlockLineHeight(render: RenderObject): number {\n if (render instanceof TableRowRenderObject) {\n let maxCellHeight = 0;\n for (let i = 0; i < render.length; i++) {\n const itemHeight = render.getChild(i).rect.height;\n if (itemHeight > maxCellHeight) {\n maxCellHeight = itemHeight;\n }\n }\n return maxCellHeight;\n }\n return render.rect.height;\n }\n\n\n getRowInsertCellIndex(sourceCell: TableCellRenderObject, destRow: TableRowRenderObject): number {\n for (let i = 0; i < destRow.length; i++) {\n const cell = destRow.getChild(i) as TableCellRenderObject;\n const rect = cell.rect;\n if (sourceCell.rect.x < rect.x) {\n return i;\n }\n }\n const lastCell = destRow.getChild(destRow.length - 1);\n if (sourceCell.rect.x >= lastCell.rect.x + lastCell.rect.width) {\n return destRow.length;\n }\n return -1;\n }\n\n private getHeaderRows(tb: TableRenderObject): Array<TableRowRenderObject> {\n const rows: Array<TableRowRenderObject> = [];\n for (let i = 0; i < tb.length; i++) {\n const rowRender = tb.getChild(i) as TableRowRenderObject;\n const rowEle = rowRender.element as TableRowElement;\n if (rowEle.props.headerRow) {\n rows.push(rowRender);\n } else {\n break;\n }\n }\n return rows;\n }\n}\n","import { SelectionState } from \"./document-selection\"\nimport { ElementUtil } from \"./element-util\";\nimport { BranchElement, Element, LeafElement, SelectionContentRange } from \"./element-define\";\nimport { RangeUtil } from \"./range-util\";\nimport { TableElement } from \"./impl/table/table-impl\";\nimport { TableCellElement } from \"./impl/table/table-cell-impl\";\n\n\n\n\n/**\n * 用于处理选区拖蓝\n */\nexport class SelectionOverlays {\n private selectionRange!: SelectionContentRange | null;\n selectedSets: Map<Element, SelectionContentRange> = new Map();\n constructor(private selectionState: SelectionState) { }\n\n getSelectionTreeData(): void {\n let { ancestorCommonControl, startControl, startOffset, endControl, endOffset, collapsed } = this.selectionState;\n this.selectedSets.clear();\n if (this.selectionRange) {\n this.selectionRange.selectedChildren.length = 0;\n }\n this.selectionRange = null;\n if (!startControl || !endControl || !ancestorCommonControl) {\n //this.selectionRange?.selectedChildren.length=0;\n this.selectionState.selectedRange = null;\n return;\n }\n if (collapsed) {\n const commonRange = RangeUtil.getSelctionRange(startControl, startOffset, endControl, endOffset, ancestorCommonControl);\n this.selectionState.selectedRange = commonRange;\n this.selectedSets.clear();\n return;\n }\n const fixStartElement = this.fixStartSelectionElement(startControl, startOffset, ancestorCommonControl);\n startControl = fixStartElement.element;\n startOffset = fixStartElement.offset;\n const fixEndElement = this.fixEndSelectionElement(endControl, endOffset, ancestorCommonControl);\n endControl = fixEndElement.element;\n endOffset = fixEndElement.offset;\n const commonRange = RangeUtil.getSelctionRange(startControl, startOffset, endControl, endOffset, ancestorCommonControl);\n //console.log(commonRange);\n this.selectionRange = commonRange;\n this.convertSelectRangeToSet();\n this.selectionState.selectedRange = commonRange;\n }\n\n private convertSelectRangeToSet(): void {\n this.selectedSets.clear();\n if (this.selectionRange) {\n SelectionOverlays.addToSets(this.selectionRange, this.selectedSets);\n }\n }\n\n static addToSets(range: SelectionContentRange, set: Map<Element, SelectionContentRange>): void {\n set.set(range.target, range);\n for (let i = 0; i < range.selectedChildren.length; i++) {\n //单元格全部选中效果,单元格整个拖蓝即可\n if (range.isFullSelected && range.target.type === 'tbc') {\n continue;\n }\n this.addToSets(range.selectedChildren[i], set);\n }\n }\n\n /**\n * 添加到批注集合\n * @param range \n * @param set \n */\n static addToCommentSets(range: SelectionContentRange, set: Map<Element, SelectionContentRange>): void {\n set.set(range.target, range);\n for (let i = 0; i < range.selectedChildren.length; i++) {\n this.addToCommentSets(range.selectedChildren[i], set);\n }\n }\n\n /**\n * 修正开始选区内容\n * 1.如果当前选区开始于表格内容,结束选区位于表格外,则需要开始选区内容重定位到单元格第一个元素\n */\n private fixStartSelectionElement(element: LeafElement, offset: number, ancestorCommonControl: BranchElement): { element: LeafElement, offset: number } {\n if (!(ancestorCommonControl instanceof TableElement)) {\n const lookupParentCell = ElementUtil.getParentByType(element, TableCellElement);\n if (lookupParentCell) {\n if (!lookupParentCell.parent || !lookupParentCell.parent.parent) {\n }\n const lookupParentTbIndex = ElementUtil.getControlIndex(lookupParentCell.parent.parent);\n const ancestorCommonControlIndex = ElementUtil.getControlIndex(ancestorCommonControl);\n if (ancestorCommonControlIndex < lookupParentTbIndex) {\n const rowFirstLeafElement = ElementUtil.getFirstLeafElement(lookupParentCell.parent);\n if (!rowFirstLeafElement) {\n throw new Error('当前元素处于表格内元素,未能定位到当前单元格首个元素');\n }\n return {\n element: rowFirstLeafElement,\n offset: 0\n };\n }\n }\n }\n return { element, offset };\n }\n\n /**\n * 修正开始选区内容\n * 1.如果当前选区开始于表格内容,结束选区位于表格外,则需要开始选区内容重定位到单元格第一个元素\n */\n private fixEndSelectionElement(element: LeafElement, offset: number, ancestorCommonControl: BranchElement): { element: LeafElement, offset: number } {\n if (!(ancestorCommonControl instanceof TableElement)) {\n const lookupParentCell = ElementUtil.getParentByType(element, TableCellElement);\n if (lookupParentCell) {\n const lookupParentTbIndex = ElementUtil.getControlIndex(lookupParentCell.parent.parent);\n const ancestorCommonControlIndex = ElementUtil.getControlIndex(ancestorCommonControl);\n if (ancestorCommonControlIndex < lookupParentTbIndex) {\n const rowLastLeafElement = ElementUtil.getLastLeafElement(lookupParentCell.parent);\n if (!rowLastLeafElement) {\n const rowLastLeafElement = ElementUtil.getLastLeafElement(lookupParentCell.parent);\n throw new Error('当前元素处于表格内元素,未能定位到当前单元格首个元素');\n }\n return {\n element: rowLastLeafElement,\n offset: 1\n };\n }\n }\n }\n return { element, offset };\n }\n\n}","import { ElementMeasure } from \"./element-measure\";\nimport { ElementPaint } from \"./element-paint\";\nimport { ElementRenderCut } from \"./element-render-cut\";\nimport { DocumentRenderObject } from \"./impl/document/doc-impl\";\nimport { RenderContextType } from \"./render-context\";\nimport { Element, SelectionContentRange, ViewOptions } from \"./element-define\";\nimport { DocumentContainerRender } from \"./impl/document/doc-container-impl\";\nimport { ElementUtil } from \"./element-util\";\nimport { DocumentSelection } from \"./document-selection\";\nimport { CommsContainerRenderObject } from \"./impl/comments/comments-container-impl\";\nimport { RangeUtil } from \"./range-util\";\nimport { SelectionOverlays } from \"./selection-overlays\";\nimport { EditorContext } from \"./document-context\";\nimport { CommContentElement, CommentRangeStatus } from \"./impl/comments/comment-content-impl\";\n\nexport class DocumentPaint {\n elementMeasure: ElementMeasure;\n elementRenderCut: ElementRenderCut;\n elementPaint: ElementPaint;\n docPages!: Array<DocumentRenderObject>;\n docContainer!: DocumentContainerRender;\n commsContainer!: CommsContainerRenderObject;\n private viewOptions: ViewOptions;\n constructor(private renderContext: RenderContextType, private docCtx: EditorContext, private selectedSets: Map<Element, SelectionContentRange>) {\n this.viewOptions = this.docCtx.viewOptions;\n this.elementMeasure = new ElementMeasure(this.viewOptions, this.renderContext);\n this.elementRenderCut = new ElementRenderCut(this.viewOptions, this.renderContext);\n this.elementPaint = new ElementPaint(this.renderContext, this.docCtx);\n }\n\n rePages(): void {\n if (!this.docCtx.document.length) {\n return;\n }\n this.docContainer = new DocumentContainerRender();\n this.docCtx.selectionState.renderContainer = this.docContainer;\n this.docContainer.rect.width = this.viewOptions.docPageSettings.width;\n // console.time('排版计时');\n const documentRender = this.elementMeasure.measureDocument(this.docCtx.document);\n this.commsContainer = documentRender.getChild(3) as CommsContainerRenderObject;\n if (this.commsContainer) {\n this.commsContainer = this.commsContainer.clone() as CommsContainerRenderObject;\n }\n //console.timeEnd('排版计时');\n //console.time('断页计时');\n const docPages = this.elementRenderCut.cutPage(documentRender, this.docCtx.document);\n //console.timeEnd('断页计时');\n this.setCommRangeMark();\n this.docPages = docPages;\n this.layoutPages();\n }\n\n /**\n * 文档页面显示布局\n * @param pages\n */\n layoutPages(): void {\n if (!this.docContainer || !this.docPages) {\n return;\n }\n const { pageLayoutMode } = this.viewOptions;\n if (pageLayoutMode == 'multiPage') {\n this.layoutMultiPages(this.docPages);\n } else {\n this.layoutSinglePages(this.docPages);\n }\n }\n\n /**\n * 单页模式:完成文档页断页后,文档页排版\n * 1.根据页面视图缩放设置\n * 2.根据页面视窗总宽度,设置页面居中\n */\n private layoutSinglePages(pages: Array<DocumentRenderObject>): void {\n this.docContainer.clear();\n const { scale, pageLayoutMode, viewSettings: { width: viewWidth } } = this.viewOptions;\n //文档内容区宽度\n const contentWidth = this.viewOptions.contentWidth;\n //文档容器总宽度等于内容宽度\n //单页模式,docContainer居中\n this.docContainer.rect.width = contentWidth;\n //缩放后的内容区宽度\n const scaleContentWidth = contentWidth * scale;\n const docLeft = Math.floor((viewWidth - scaleContentWidth) / 2 / scale);\n this.docContainer.rect.x = docLeft;\n this.docContainer.addPages(pages);\n ElementUtil.remeasure(this.docContainer, true);\n }\n\n /**\n * 多页模式\n * @private\n */\n private layoutMultiPages(pages: Array<DocumentRenderObject>): void {\n this.docContainer.clear();\n const {\n scale,\n pageLayoutMode,\n docSpace,\n viewSettings: { width: viewWidth },\n docPageSettings: { height: pageHeight }\n } = this.viewOptions;\n //文档内容区宽度\n const contentWidth = this.viewOptions.contentWidth\n //文档容器总宽度等于绘制区总宽度\n this.docContainer.rect.width = viewWidth;\n this.docContainer.rect.x = 0;\n\n //判断是否满足多页布局\n let layoutPageNum = Math.floor(viewWidth / (contentWidth + docSpace * 2) / scale);\n if (layoutPageNum < 2 || pages.length === 1) {\n this.layoutSinglePages(pages);\n return;\n }\n layoutPageNum = layoutPageNum > pages.length ? pages.length : layoutPageNum;\n const pageLineWidth = contentWidth * layoutPageNum + (layoutPageNum - 1) * docSpace;\n let leftSpace = Math.floor((viewWidth - pageLineWidth * scale) / 2 / scale);\n let height = docSpace;\n for (let i = 0; i < pages.length; i++) {\n const page = pages[i];\n if (i % layoutPageNum === 0 && i !== 0) {\n height += pageHeight + docSpace;\n }\n page.rect.x = leftSpace + (i % layoutPageNum) * (contentWidth + docSpace);\n page.rect.y = height;\n this.docContainer.addChild(page)\n }\n this.docContainer.rect.height = height + pageHeight;\n }\n\n /**\n * 获取设置文档容器的总高度\n */\n getDocumentContainerHeight(): number {\n if (this.docPages.length > 0) {\n return this.docContainer.rect.height * this.viewOptions.scale;\n const lastPage = this.docPages[this.docPages.length - 1];\n const lastPageY = lastPage.rect.y + lastPage.rect.height + this.viewOptions.docSpace;\n return lastPageY + (this.viewOptions.viewSettings.height * (this.viewOptions.scale - 1));\n } else {\n return 0;\n }\n }\n\n refreshView(rePaint = false): void {\n //console.time('计时');\n this.elementPaint.drawPages(this.docContainer, this.selectedSets, this.commsContainer, rePaint);\n //console.timeEnd('计时');\n\n }\n\n getDocPages(): Array<DocumentRenderObject> {\n return this.docPages;\n }\n\n getDocContainer(): DocumentContainerRender {\n return this.docContainer;\n }\n\n /***\n * 设置审阅区间样式痕迹\n */\n private setCommRangeMark(): void {\n if (!this.viewOptions.showReviewWindow) {\n return;\n }\n const cce = this.docCtx.document.commentsContainerElement;\n const set = new Map<Element, SelectionContentRange>();\n const commentRangeStatus: Array<CommentRangeStatus> = [];\n for (let i = 0; i < cce.length; i++) {\n const commContent = cce.getChild(i) as CommContentElement;\n const { startMark, endMark, props: { id }, focus } = commContent;\n const ancestorCommonControl = DocumentSelection.getAncestorCommonControl(startMark, endMark);\n const commonRange = RangeUtil.getSelctionRange(startMark, 0, endMark, 1, ancestorCommonControl);\n SelectionOverlays.addToCommentSets(commonRange, set);\n commentRangeStatus.push({\n commContent,\n range: commonRange\n })\n }\n this.commsContainer.selectedSet = set;\n this.commsContainer.commentRangeStatus = commentRangeStatus;\n }\n}\n","import {\n ElementFactory,\n LeafElement,\n readElementProps,\n SerializeProps,\n ViewOptions,\n Element\n} from \"../../element-define\";\nimport {RenderContextType} from \"../../render-context\";\nimport {IRenderData, LeafRenderObject, RenderObject} from \"../../render-define\";\nimport {ElementUtil} from \"../../element-util\";\n\n/**\n * 段落行\n */\nexport class ParaLineElement extends LeafElement<ParaLineProps> {\n constructor() {\n super('p-line');\n this.props = new ParaLineProps();\n }\n\n clone(data: boolean): Element {\n const clone = new ParaLineElement();\n this.props.clone(clone.props);\n return clone;\n }\n\n\n createRenderObject(options: ViewOptions, renderCtx: RenderContextType): RenderObject | null {\n const render = new ParaLineRenderObject(this);\n render.rect.width = 9999;\n return render;\n }\n\n serialize(viewOptions: ViewOptions): SerializeProps | null {\n return {\n type: this.type,\n props: {\n ...this.props\n }\n }\n }\n\n}\n\nexport class ParaLineRenderObject extends LeafRenderObject {\n clone(): RenderObject {\n const clone = new ParaLineRenderObject(this.element);\n clone.rect = ElementUtil.cloneRect(this.rect);\n return clone;\n }\n\n render(e: IRenderData): void {\n const {render, position} = e;\n render.contentContext.drawHoriLine(position.x, position.y, this.parent.rect.width, 'black', 1);\n }\n\n}\n\nexport class ParaLineElementFactory extends ElementFactory<ParaLineProps> {\n createElement(data: readElementProps<ParaLineProps>, renderCtx: RenderContextType): Element {\n const ele = new ParaLineElement();\n ele.props.lineType = data.props?.lineType ?? 'solid';\n return ele;\n }\n\n match(type: string): boolean {\n return type === 'p-line';\n }\n}\n\nexport class ParaLineProps {\n lineType: 'solid' | 'dash' = 'solid';\n\n clone(dest?: ParaLineProps): ParaLineProps {\n const clone = dest ?? new ParaLineProps();\n clone.lineType = this.lineType;\n return clone;\n }\n}","import { EditorContext } from \"./document-context\";\nimport { BranchElement, ElementFactory, Element, ViewOptions, PageOptions } from \"./element-define\";\nimport { CheckBoxFactory } from \"./impl/checkbox/checkbox-impl\";\nimport { CommentContentFactory } from \"./impl/comments/comment-content-impl\";\nimport { CommentFactory } from \"./impl/comments/comment-element-impl\";\nimport { CommsContainerElement, CommentsFactory } from \"./impl/comments/comments-container-impl\";\nimport { DataElementCheckFactory } from \"./impl/data-element/data-element-check-impl\";\nimport { DataElementDateFactory } from \"./impl/data-element/data-element-date-impl\";\nimport { DataElementImgFactory } from \"./impl/data-element/data-element-image-impl\";\nimport { DataElementListFactory } from \"./impl/data-element/data-element-list-impl\";\nimport { DataElementTextFactory } from \"./impl/data-element/data-element-text-impl\";\nimport { DocumentBodyElement, DocumentBodyFactory } from \"./impl/document/doc-body-impl\";\nimport { DocumentFooterElement, DocumentFooterFactory } from \"./impl/document/doc-footer-impl\";\nimport { DocumentHeaderElement, DocumentHeaderFactory } from \"./impl/document/doc-header-impl\";\nimport { DocumentElement, DocumentFactory } from \"./impl/document/doc-impl\";\nimport { DataElementMHFactory } from \"./impl/media-formula/menstrual-history\";\nimport { ParagraphFactory } from \"./impl/paragraph/p-impl\";\nimport { PictureFactory } from \"./impl/picture/image-impl\";\nimport { RadioBoxFactory } from \"./impl/radio/radio-impl\";\nimport { BreakFactory } from \"./impl/symbol/br-symbol-impl\";\nimport { TableCellFactory } from \"./impl/table/table-cell-impl\";\nimport { TableFactory } from \"./impl/table/table-impl\";\nimport { TableRowFactory } from \"./impl/table/table-row-impl\";\nimport { RunElementFactory } from \"./impl/text/track-run-impl\";\nimport { TextGroupFactory } from \"./impl/text/text-impl\";\nimport { RenderContextType } from \"./render-context\";\nimport { INotifyPropertyChanged, TrackRunProps } from \"./element-props\";\nimport { DataElementGroupFactory } from \"./impl/data-element/data-element-group-impl\";\nimport { DocumentBodyPartFactory } from \"./impl/document/doc-body-part-impl\";\nimport { DataElementBarcodeFactory } from \"./impl/data-element/data-element-barcode\";\nimport { ParaLineElementFactory } from \"./impl/paragraph/p-line-impl\";\n\nexport class ElementReader {\n\n constructor(private docCtx: EditorContext, private renderCtx: RenderContextType) {\n this.initFactory();\n }\n\n factories: Array<ElementFactory> = [];\n\n addFactory<U extends null | object, T extends ElementFactory<U>>(c: new () => T): void {\n const instance = new c();\n instance.options = this.docCtx.viewOptions;\n this.factories.push(instance as ElementFactory);\n }\n\n\n private initFactory(): void {\n this.addFactory(DocumentFactory);\n this.addFactory(DocumentHeaderFactory);\n this.addFactory(DocumentBodyFactory);\n this.addFactory(ParagraphFactory);\n this.addFactory(TextGroupFactory);\n this.addFactory(CheckBoxFactory);\n this.addFactory(TableFactory);\n this.addFactory(TableRowFactory);\n this.addFactory(TableCellFactory);\n this.addFactory(DocumentFooterFactory);\n this.addFactory(PictureFactory);\n this.addFactory(RadioBoxFactory);\n this.addFactory(DataElementTextFactory);\n this.addFactory(DataElementDateFactory);\n this.addFactory(DataElementListFactory);\n this.addFactory(DataElementCheckFactory);\n this.addFactory(DataElementBarcodeFactory);\n this.addFactory(BreakFactory);\n this.addFactory(CommentsFactory)\n this.addFactory(CommentContentFactory);\n this.addFactory(CommentFactory);\n this.addFactory(DataElementImgFactory);\n this.addFactory(DataElementMHFactory);\n this.addFactory(RunElementFactory);\n this.addFactory(DataElementGroupFactory);\n this.addFactory(DocumentBodyPartFactory);\n this.addFactory(ParaLineElementFactory);\n // this.registerReadFunc<TrackRunProps>('ins-run', (data) => {\n // const props = new TrackRunProps(data.type);\n // props.userId = data.userId;\n // props.userName = data.userName;\n // props.date = data.date;\n // return props;\n // })\n // this.registerReadFunc<TrackRunProps>('del-run', (data) => {\n // const props = new TrackRunProps(data.type);\n // props.userId = data.userId;\n // props.userName = data.userName;\n // props.date = data.date;\n // return props;\n // })\n }\n\n read(data: any | DocumentElement): void {\n const document = data instanceof DocumentElement ? data : this.readElement(data) as DocumentElement;\n this.setDocument(document);\n }\n\n setDocument(document: DocumentElement): void {\n // if (this.docCtx.document) {\n // this.docCtx.document.destroy();\n // }\n // this.document?.clearItems();\n // document.docProps.clone(this.document.docProps);\n document.bodyElement = document.find((item) => item instanceof DocumentBodyElement) as DocumentBodyElement;\n document.headerElement = document.find((item) => item instanceof DocumentHeaderElement) as DocumentHeaderElement;\n document.footerElement = document.find((item) => item instanceof DocumentFooterElement) as DocumentFooterElement;\n document.commentsContainerElement = document.find((item) => item instanceof CommsContainerElement) as CommsContainerElement;\n if (!document.commentsContainerElement) {\n document.commentsContainerElement = new CommsContainerElement();\n }\n document.clearItems();\n document.addChild(document.headerElement);\n document.addChild(document.bodyElement);\n document.addChild(document.footerElement);\n document.addChild(document.commentsContainerElement);\n this.docCtx.document = document;\n document.viewOptions = this.docCtx.viewOptions;\n const width = Math.floor(document.props.width * this.docCtx.viewOptions.mmToPixelsRatio);\n const height = Math.floor(document.props.height * this.docCtx.viewOptions.mmToPixelsRatio);\n this.docCtx.viewOptions.docPageSettings = new PageOptions(width, height, document.props.orient);\n //this.viewOptions.viewSettings.width = this.viewOptions.docPageSettings.width + 10;\n }\n\n\n readElement(data: any): Element {\n const type = data.type as string;\n for (const factory of this.factories) {\n if (factory.match(type)) {\n const element = factory.createElement(data, this.renderCtx);\n this.readExtendsProps(data, element);\n const childArr: Array<Element> = [];\n if (element instanceof BranchElement) {\n const children = data.children || [];\n for (const child of children) {\n //element.addChild(this.readElement(child));\n childArr.push(this.readElement(child));\n }\n }\n factory.readCompleted(element, childArr);\n return element;\n }\n }\n throw new Error('未知的元素类型:' + type);\n }\n\n // propsReadFuncs: Map<string, (data: any) => any> = new Map();\n\n // registerReadFunc<T>(propName: string, func: (data: T) => T): void {\n // this.propsReadFuncs.set(propName, func);\n // }\n\n readExtendsProps(data: any, element: Element): void {\n if (!data.props) {\n return;\n }\n const extendsProps = data.props.__attachedProperty;\n if (extendsProps) {\n if (element.props instanceof INotifyPropertyChanged) {\n Object.keys(extendsProps as object).forEach((key) => {\n element.props.setProperty(key, extendsProps[key]);\n });\n }\n }\n }\n}\n","import {CommonUtil} from \"./common-util\";\nimport {DocumentPaint} from \"./document-paint\";\nimport {SelectionRange, SelectionState} from \"./document-selection\";\nimport {LeafElement, Rect, Element, Position, ViewOptions, ResizeLeafRenderObject, DocMode} from \"./element-define\";\nimport {\n DropElementEvent,\n ElementEvent,\n EventStage,\n EventTypes,\n GetTrackTipsEvent,\n GotCursorEvent,\n HitEventInfo,\n HitRegion,\n ITrackTips,\n LostCursorEvent,\n MousedownElementEvent,\n MouseElementEvent\n} from \"./element-event-define\";\nimport {ElementUtil} from \"./element-util\";\nimport {DocumentRenderObject} from \"./impl\";\nimport {PictureElement} from \"./impl\";\nimport {BreakElement} from \"./impl\";\nimport {PSymbolElement} from \"./impl\";\nimport {TableCellElement, TableCellRenderObject} from \"./impl\";\nimport {TableElement} from \"./impl\";\nimport {TableRowElement, TableRowRenderObject} from \"./impl\";\nimport {BorderType, BranchRenderObject, CursorType, LeafRenderObject, RenderObject} from \"./render-define\";\nimport {EditorContext} from \"./document-context\";\nimport {ParagraphLineRectRenderObject} from \"./impl\";\nimport {TextGroupElement} from \"./impl\";\nimport {DocumentHeaderRenderObject} from \"./impl\";\nimport {DocumentFooterRenderObject} from \"./impl\";\nimport {Subject, Subscription, fromEvent} from \"./event-subject\";\nimport {DocumentInput} from \"./document-input-cursor\";\n\ninterface EdgeRenderInfo {\n renderElement: Element,\n relativePos: Position,\n mousedown: boolean,\n mousedownPos?: Position,\n border: BorderType\n}\n\n/**\n * 事件系统\n */\nexport class DocumentEvent {\n private ismousedown!: boolean;\n //开始点击时的元素信息\n startHitInfo!: HitEventInfo | null;\n //当前位置点击的元素信息\n endHitInfo!: HitEventInfo | null;\n //当前定位的焦点元素,例如图片等\n focusedElement!: LeafElement | null;\n focusedRect!: Rect | null;\n //当前光标所在的元素\n currentMouseoverRender!: { render: RenderObject, absoluteRenderRect: Rect } | null;\n hitInfoChanged: Subject<{ startHitInfo: HitEventInfo, endHitInfo: HitEventInfo }> = new Subject();\n clickEvent: Subject<MouseEvent> = new Subject();\n dblClickEvent: Subject<MouseEvent> = new Subject();\n changeCursor: Subject<CursorType> = new Subject();\n contextMenu: Subject<MouseEvent> = new Subject();\n trackTipsChanged: Subject<{ pos: Position, tips: ITrackTips }> = new Subject();\n //光标处于边框的绘制元素\n edgeRenderInfo!: EdgeRenderInfo | null;\n //当前鼠标所在的page-position\n currentPos!: Position;\n //鼠标按下的位置\n mousedownPos!: Position;\n subs: Array<Subscription> = [];\n selectionState: SelectionState;\n viewOptions: ViewOptions;\n\n constructor(private canvas: HTMLCanvasElement, private documentPaint: DocumentPaint, private docCtx: EditorContext, private documentInput: DocumentInput) {\n this.selectionState = this.docCtx.selectionState;\n this.viewOptions = this.docCtx.viewOptions;\n this.bindEvent();\n }\n\n private bindEvent(): void {\n this.addSubEvent(fromEvent<MouseEvent>(this.canvas, 'mousedown').subscribe((evt) => {\n this.mousedown(evt);\n }));\n this.addSubEvent(fromEvent<MouseEvent>(this.canvas, 'mouseup').subscribe((evt) => {\n this.mouseup(evt);\n }));\n this.addSubEvent(fromEvent<MouseEvent>(this.canvas, 'click').subscribe((evt) => {\n this.mouseClickHandle(evt);\n }));\n this.addSubEvent(fromEvent<MouseEvent>(this.canvas, 'contextmenu').subscribe((evt) => {\n this.contextMenu.next(evt);\n }));\n this.addSubEvent(fromEvent<MouseEvent>(this.canvas, 'mousemove').subscribe((evt) => {\n this.mousemove(evt);\n }));\n this.addSubEvent(fromEvent<MouseEvent>(this.canvas, 'dblclick').subscribe((evt) => {\n this.mouseDblClickHandle(evt);\n }));\n this.documentInput.onLeftEvent.subscribe(() => {\n this.moveCursorToLeft()\n });\n this.documentInput.onRightEvent.subscribe(() => {\n this.moveCursorToRight()\n });\n this.documentInput.onSelectAllEvent.subscribe(() => {\n this.selectAll()\n });\n this.documentInput.onHomeEvent.subscribe(() => {\n this.moveCursorToLineStart()\n })\n this.documentInput.onEndEvent.subscribe(() => {\n this.moveCursorToLineEnd()\n })\n this.documentInput.onUpEvent.subscribe(() => {\n this.moveCursorToUpOrDown(true)\n })\n this.documentInput.onDownEvent.subscribe(() => {\n this.moveCursorToUpOrDown(false)\n })\n }\n\n addSubEvent(sub: Subscription): void {\n this.subs.push(sub);\n }\n\n clearSubEvent(): void {\n this.subs.forEach(item => item.unsubscribe());\n this.subs.length = 0;\n }\n\n clear(): void {\n this.selectionState.clear();\n this.startHitInfo = null;\n this.endHitInfo = null;\n this.focusedElement = null;\n this.focusedRect = null;\n this.currentMouseoverRender = null;\n this.edgeRenderInfo = null;\n }\n\n private mousedown(evt: MouseEvent): void {\n const docEvent = new MouseElementEvent(this.docCtx);\n this.setEventViewPos(evt, docEvent);\n docEvent.buttons = evt.buttons;\n docEvent.shift = evt.shiftKey;\n docEvent.ctrl = evt.ctrlKey;\n this.mousedownPos = {x: docEvent.globalX, y: docEvent.globalY};\n this.mousedownHandle(docEvent);\n }\n\n private mouseup(evt: MouseEvent): void {\n const docEvent = new MouseElementEvent(this.docCtx);\n this.setEventViewPos(evt, docEvent);\n docEvent.shift = evt.shiftKey;\n docEvent.ctrl = evt.ctrlKey;\n this.ismousedown = false;\n this.edgeRenderInfo = null;\n }\n\n private mousemove(evt: MouseEvent): void {\n const docEvent = new MouseElementEvent(this.docCtx);\n this.setEventViewPos(evt, docEvent);\n docEvent.shift = evt.shiftKey;\n docEvent.ctrl = evt.ctrlKey;\n if (this.mousedownPos && docEvent.globalX === this.mousedownPos.x && docEvent.globalY === this.mousedownPos.y) {\n return;\n }\n this.mousemoveHandle(docEvent);\n }\n\n /**\n * 根据缩放值,设置在绘制对象上的坐标位置\n * @param evt\n * @param viewEvt\n */\n private setEventViewPos(evt: MouseEvent, viewEvt: ElementEvent): void {\n viewEvt.globalX = evt.offsetX / this.viewOptions.scale;\n viewEvt.globalY = evt.offsetY / this.viewOptions.scale;\n }\n\n private prevTrackInfo: boolean = false;\n\n /**\n * 显示提示信息\n * 显示留痕提示信息等\n */\n private getTips(): void {\n if (!this.currentMouseoverRender) {\n return;\n }\n const element = this.currentMouseoverRender.render.element;\n if (!element) {\n return;\n }\n const event = new GetTrackTipsEvent(this.docCtx);\n event.source = element;\n DocumentEvent.invokeEvent('GetTrackTips', element, event, 'Bubbling', this.docCtx);\n if (event.trackTips) {\n this.trackTipsChanged.next({pos: {...this.currentPos}, tips: event.trackTips});\n this.prevTrackInfo = true;\n } else {\n if (!this.prevTrackInfo) {\n return;\n }\n this.trackTipsChanged.next();\n this.prevTrackInfo = false;\n }\n }\n\n\n /**\n * 滚动视图的时候,需要手动触发mousemove\n */\n onScrollView(): void {\n if (!this.currentPos) {\n return;\n }\n const docEvent = new MouseElementEvent(this.docCtx);\n docEvent.globalX = this.currentPos.x;\n docEvent.globalY = this.currentPos.y;\n this.mousemoveHandle(docEvent);\n }\n\n /**\n * 处理鼠标按下事件\n * @param evt\n * @returns\n */\n private mousedownHandle(evt: MouseElementEvent): void {\n //点击右键时,直接返回\n if (evt.buttons === 2 && this.startHitInfo) {\n return;\n }\n this.ismousedown = true;\n this.startHitInfo = this.getHitInfo(evt);\n if (!ElementUtil.verifyHitable(this.startHitInfo?.element)) {\n this.startHitInfo = null;\n }\n if (this.startHitInfo) {\n const startElement = this.startHitInfo.element;\n this.switchElementFocus();\n //如果当前选中的是段落符号,则需要手动将其偏移量定位到左边\n if (startElement instanceof PSymbolElement || startElement instanceof BreakElement) {\n this.startHitInfo.offset = 0;\n }\n //this.startHitInfo.startRegion = this.getRenderObjectRegion(this.startHitInfo.render);\n this.endHitInfo = this.startHitInfo;\n const mousedownEvent = new MousedownElementEvent(this.docCtx);\n mousedownEvent.source = startElement;\n DocumentEvent.invokeEvent('ElementMousedown', startElement, mousedownEvent, 'All', this.docCtx);\n } else {\n this.clearHitInfo();\n }\n if (this.edgeRenderInfo) {\n this.edgeRenderInfo.mousedown = true;\n this.edgeRenderInfo.mousedownPos = this.currentPos;\n this.clearHitInfo();\n }\n this.hitInfoChanged.next({\n startHitInfo: this.startHitInfo as HitEventInfo,\n endHitInfo: this.endHitInfo as HitEventInfo\n });\n this.selectionState.startHitInfo = this.startHitInfo;\n }\n\n /**\n * 设置元素焦点状态\n */\n private switchElementFocus(): void {\n if (!this.startHitInfo) {\n return;\n }\n const startElement = this.startHitInfo.element;\n if (this.focusedElement) {\n this.focusedElement.isFocused = false;\n this.focusedElement = null;\n this.focusedRect = null;\n }\n if (startElement && startElement.focusable) {\n startElement.isFocused = true;\n this.focusedElement = startElement as LeafElement;\n this.focusedRect = ElementUtil.getRenderAbsolutePaintRect(this.startHitInfo.render);\n }\n }\n\n clearHitInfo(): void {\n this.startHitInfo = null;\n this.endHitInfo = null;\n }\n\n /**\n * 获取当前鼠标所在位置的元素信息\n * @param evt\n * @returns\n */\n private getHitInfo(evt: MouseElementEvent): HitEventInfo | null {\n const hitDocInfo = this.getHitDocPage(evt);\n if (!hitDocInfo) {\n return null;\n }\n const {docIndex, docRender, hitPagePos} = hitDocInfo;\n //设置文档页中的相对位置\n evt.pageX = hitPagePos.x;\n evt.pageY = hitPagePos.y;\n\n const hitInfo = this.getHitLeafRender(docRender, {x: 0, y: -docRender.rect.y}, {\n x: evt.pageX,\n y: evt.pageY\n });\n if (!hitInfo) {\n return null;\n }\n const element = hitInfo.render.element as LeafElement;\n return {\n hitDocIndex: docIndex,\n offset: hitInfo.offset,\n element,\n render: hitInfo.render,\n relativeRect: hitInfo.render.rect,\n absoluteRect: hitInfo.absoluteRenderRect,\n shadowRenderIndex: element.paintRenders.indexOf(hitInfo.render),\n startRegion: ElementUtil.getRenderObjectRegion(hitInfo.render)\n };\n\n }\n\n private getMouseoverRenderInfo(evt: MouseElementEvent): { render: RenderObject, absoluteRenderRect: Rect } | null {\n const hitDocInfo = this.getHitDocPage(evt);\n if (!hitDocInfo) {\n return null;\n }\n const {docIndex, docRender, paintAbsoluteRect, hitPagePos} = hitDocInfo;\n //设置文档页中的相对位置\n evt.pageX = hitPagePos.x;\n evt.pageY = hitPagePos.y;\n //const docRenderParentAbsolutePos = ElementUtil.getRenderAbsolutePaintPos(docRender.parent);\n //const mouseoverInfo = this.getMouseoverRender(docRender, docRenderParentAbsolutePos, { x: evt.globalX, y: evt.globalY + this.viewOptions.translateY });\n const mouseoverInfo = this.getHitLeafRender(docRender, {\n x: -docRender.rect.x,\n y: -docRender.rect.y\n }, {x: evt.pageX, y: evt.pageY});\n return mouseoverInfo;\n }\n\n /**\n * 鼠标移动事件\n * 主要处理选区改变\n */\n private mousemoveHandle(evt: MouseElementEvent): void {\n //console.time('mousemove计时')\n let edgeRenderInfo: null | typeof this.edgeRenderInfo = null;\n const mousePos: Position = {x: evt.globalX, y: evt.globalY};\n let cursorType: CursorType = 'text';\n this.currentPos = mousePos;\n if (this.ismousedown && this.startHitInfo) {\n this.endHitInfo = this.getHitInfo(evt);\n //只有鼠标按下的时候需要发布事件\n this.pubHitInfo();\n }\n const currMouseoverRenderInfo = this.getMouseoverRenderInfo(evt);\n //新旧信息不一致,需要校验绘制区域,触发mouseenter、mouseleave等事件\n this.invokeMousemoveEvent(this.currentMouseoverRender?.render, currMouseoverRenderInfo?.render, mousePos);\n this.currentMouseoverRender = currMouseoverRenderInfo;\n //当前有元素有焦点时,需要首先判断当前位置是否在焦点元素上\n //如果单元格中包含图片等可缩放的元素,并且元素的大小超过单元格,则当前图片的某一部分就无法缩放\n if (!this.ismousedown && this.focusedElement && this.focusedRect && (<any>this.focusedElement)['resizeable']) {\n const relativePos: Position = {x: mousePos.x - this.focusedRect.x, y: mousePos.y - this.focusedRect.y};\n const isInCellBorder = CommonUtil.isInPictureResizePoint(this.focusedRect, relativePos, 4);\n if (isInCellBorder) {\n cursorType = ElementUtil.getBorderCursor(isInCellBorder.borderType);\n if (isInCellBorder?.borderType === 'none') {\n edgeRenderInfo = null;\n } else {\n edgeRenderInfo = {\n renderElement: this.focusedElement,\n relativePos,\n mousedown: false,\n border: isInCellBorder.borderType\n };\n }\n }\n }//当前鼠标不处于mousedown并且鼠标位于单元格边界时,获取边界信息\n else if (!this.ismousedown && this.isInCellRenderObject(this.currentMouseoverRender?.render)) {\n const cellRender = ElementUtil.getParentRender(this.currentMouseoverRender?.render as RenderObject, TableCellRenderObject) as TableCellRenderObject;\n //const cellRender = this.currentMouseoverRender?.render as TableCellRenderObject;\n //const { render: { renderPosition: { x: rx, y: ry } } } = this.currentMouseoverRender;\n //const rp = this.currentMouseoverRender?.absoluteRenderRect as Rect;\n const rp = ElementUtil.getRenderAbsolutePaintRect(cellRender);\n rp.y -= this.viewOptions.translateY;\n const relativePos: Position = {x: mousePos.x - rp.x, y: mousePos.y - rp.y};\n const isInCellBorder = CommonUtil.isInRectBorder(cellRender.rect, 2, relativePos);\n if (isInCellBorder) {\n //console.log('是否在边框上' + isInCellBorder?.borderType);\n }\n cursorType = ElementUtil.getBorderCursor(isInCellBorder.borderType);\n this.changeCursor.next(cursorType);\n if (isInCellBorder?.borderType === 'none') {\n edgeRenderInfo = null;\n } else {\n edgeRenderInfo = {\n renderElement: cellRender.element,\n relativePos,\n mousedown: false,\n border: isInCellBorder.borderType\n };\n }\n }\n if (!this.ismousedown) {\n this.edgeRenderInfo = edgeRenderInfo;\n }\n //存在边界元素,并且当前边界处于鼠标按下状态\n if (this.edgeRenderInfo && this.edgeRenderInfo.mousedown) {\n this.resizeRender(evt);\n cursorType = ElementUtil.getBorderCursor(this.edgeRenderInfo.border);\n }\n if (this.currentMouseoverRender?.render?.element instanceof LeafElement && !this.ismousedown && cursorType === 'text') {\n cursorType = this.currentMouseoverRender?.render?.element.cursorType;\n }\n this.changeCursor.next(cursorType);\n }\n\n\n private isCellRenderObject(render: RenderObject | undefined): boolean {\n return render instanceof TableCellRenderObject;\n }\n\n /**\n * 当前绘制元素是否在单元格上面\n * @param render\n * @returns\n */\n private isInCellRenderObject(render: RenderObject | undefined): boolean {\n if (!render) {\n return false;\n }\n return ElementUtil.getParentRender(render, TableCellRenderObject) !== null;\n }\n\n private isResizeRenderObject(render: RenderObject | undefined): boolean {\n return render instanceof ResizeLeafRenderObject;\n }\n\n /**\n * 触发鼠标移动事件\n */\n private invokeMousemoveEvent(oldRender: RenderObject | null | undefined, newRender: RenderObject | null | undefined, mousePos: { x: number, y: number } | undefined): void {\n const oldParentRenders = oldRender ? ElementUtil.getRenderMapElements(oldRender) : [];\n const newParentRenders = newRender ? ElementUtil.getRenderMapElements(newRender) : [];\n const mouseleaveRenders = oldParentRenders.filter(item => newParentRenders.every(oldItem => item !== oldItem));\n const mouseenterRenders = newParentRenders.filter(item => oldParentRenders.every(oldItem => item !== oldItem));\n const mousemoveRenders = oldParentRenders.filter(item => mouseleaveRenders.every(oldItem => item !== oldItem));\n const loopInvokeEvent = (eventName: EventTypes, array: Array<Element>) => {\n for (const element of array) {\n const mouseEvent = new MouseElementEvent(this.docCtx);\n mouseEvent.source = element;\n mouseEvent.currentElement = element;\n element.invokeEvent(eventName, mouseEvent);\n }\n };\n loopInvokeEvent('ElementMouseLeave', mouseleaveRenders);\n loopInvokeEvent('ElementMouseEnter', mouseenterRenders);\n loopInvokeEvent('ElementMousemove', mousemoveRenders);\n }\n\n\n prevCursorItems: Array<Element> = [];\n\n /**\n * 触发获取焦点事件\n * 需要根据上次获取焦点的元素,比较触发失去焦点事件\n * @param focusElement\n */\n invokeCursor(focusElement: LeafElement): void {\n if (focusElement === this.prevCursorItems[0]) {\n return;\n }\n const getCursorEvent = new GotCursorEvent(this.docCtx);\n getCursorEvent.source = focusElement;\n\n const oldParents = this.prevCursorItems;\n const newParents = ElementUtil.getParentElements(focusElement);\n const leaveParents = oldParents.filter(item => newParents.every(oldItem => item !== oldItem));\n const enterParents = newParents.filter(item => oldParents.every(oldItem => item !== oldItem));\n const loopInvokeEvent = (eventName: EventTypes, array: Array<Element>) => {\n for (const element of array) {\n const mouseEvent = new LostCursorEvent(this.docCtx);\n mouseEvent.source = focusElement;\n mouseEvent.currentElement = element;\n mouseEvent.ctx = this.docCtx;\n element.invokeEvent(eventName, mouseEvent);\n }\n };\n loopInvokeEvent('LostCursor', leaveParents);\n loopInvokeEvent('GotCursor', enterParents);\n\n this.prevCursorItems = newParents;\n //dDocumentEvent.invokeEvent('GotCursor', focusElement, getCursorEvent, 'All', this.docCtx);\n }\n\n /**\n * mousedown-mouseup-click\n */\n private mouseClickHandle(evt: MouseEvent): void {\n if (this.viewOptions.docMode === DocMode.View) {\n return;\n }\n if (this.startHitInfo && this.endHitInfo && this.startHitInfo.element === this.endHitInfo.element) {\n const startElement = this.startHitInfo.render.element as LeafElement;\n const mousedownEvent = new MousedownElementEvent(this.docCtx);\n mousedownEvent.source = startElement;\n DocumentEvent.invokeEvent('ElementClick', startElement, mousedownEvent, \"All\", this.docCtx);\n //this.refreshDocument();\n }\n const {startControl, startOffset, collapsed} = this.selectionState;\n if (collapsed && this.startHitInfo && startControl && this.startHitInfo.element === this.focusedElement) {\n //const { render: { element: endElement }, offset: endElementOffset } = this.endHitInfo;\n //当前焦点元素被拖放\n if (this.focusedElement instanceof PictureElement && this.focusedElement !== startControl) {\n const dropEvent = new DropElementEvent(this.docCtx);\n dropEvent.source = startControl;\n dropEvent.sourceOffset = startOffset;\n dropEvent.dragElement = this.focusedElement;\n if (DocumentEvent.invokeEvent('ElementDrop', startControl, dropEvent, 'All', this.docCtx)) {\n return;\n }\n this.docCtx.docChange.moveElement(startControl, startOffset, this.focusedElement, this.startHitInfo.offset, this.selectionState);\n this.focusedElement.isFocused = false;\n this.focusedElement = null;\n this.focusedRect = null;\n return;\n }\n }\n this.clickEvent.next(evt);\n }\n\n /**\n * 鼠标双击事件\n */\n private mouseDblClickHandle(evt: MouseEvent): void {\n const docEvent = new MouseElementEvent(this.docCtx);\n this.setEventViewPos(evt, docEvent);\n //需要先处理是否开启页眉页脚编辑功能\n const hitRegion = this.getHitRegion(docEvent);\n if ((hitRegion === 'footer' || hitRegion === 'header') && !this.docCtx.document.headerEditState) {\n this.docCtx.document.switchPageHeaderEditor(this.selectionState, null);\n return;\n } else if (hitRegion === 'body' && this.docCtx.document.headerEditState) {\n this.docCtx.document.switchPageHeaderEditor(this.selectionState, null);\n return;\n }\n const hitInfo = this.getHitInfo(docEvent);\n if (hitInfo) {\n docEvent.source = hitInfo.element;\n docEvent.sourceRender = hitInfo.render;\n const res = DocumentEvent.invokeEvent('ElementDblClick', hitInfo.element, docEvent, 'All', this.docCtx);\n if (res) {\n return\n }\n this.dblClickEvent.next(evt);\n }\n }\n\n /**\n * 获取点击的渲染元素对象\n * @param renderObject\n * @param parPos\n * @param hitPos\n * @returns\n */\n private getHitLeafRender(renderObject: RenderObject, parPos: Position, hitPos: Position): { render: LeafRenderObject, offset: number, absoluteRenderRect: Rect } | null {\n //处理单元格合并,被合并的单元格当前属于被隐藏状态,不能被选择\n //if (renderObject.element && renderObject.element.visiable === false || renderObject instanceof FillNullSpaceRenderObject) {\n if (!ElementUtil.checkAvailHitRender(renderObject)) {\n return null;\n }\n if (!renderObject.rect) {\n throw new Error('renderObject.rect is null')\n }\n const renderObjectRect: Rect = {\n x: parPos.x + renderObject.rect.x,\n y: parPos.y + renderObject.rect.y,\n width: renderObject.rect.width,\n height: renderObject.rect.height,\n maxWidth: 0,\n maxHeight: 0\n };\n if (renderObject instanceof TableRowRenderObject) {\n return this.getTRowHitLeafRender(renderObject, parPos, hitPos);\n }\n if (renderObject instanceof LeafRenderObject) {\n if (CommonUtil.isInsideRectByPosition(renderObjectRect, hitPos)) {\n const x = hitPos.x - renderObjectRect.x;\n const offset = ElementUtil.getHitRenderOffset(renderObject, x);\n return {\n render: renderObject,\n offset,\n absoluteRenderRect: renderObjectRect\n };\n }\n } else if (renderObject instanceof BranchRenderObject) {\n if (CommonUtil.isInsideRectByPosition(renderObjectRect, hitPos)) {\n for (let i = 0; i < renderObject.length; i++) {\n const childRender = renderObject.getChild(i);\n const res = this.getHitLeafRender(childRender, {\n x: renderObjectRect.x,\n y: renderObjectRect.y\n }, hitPos);\n if (res) {\n return res;\n }\n }\n //如果当前范围未击中任何元素,则需要匹配最近的元素\n return this.getRecentHitRender(renderObject, parPos, hitPos);\n }\n } else {\n throw new Error('未实现');\n }\n return null;\n }\n\n\n private getTRowHitLeafRender(renderObject: TableRowRenderObject, parent: Position, position: Position): { render: LeafRenderObject, offset: number, absoluteRenderRect: Rect } | null {\n const rowEle = renderObject.element as TableRowElement;\n //跨页重复显示的头行,属于不可点击区域\n //只有表第一页部分可以点击\n if (rowEle.props.headerRow) {\n if (rowEle.paintRenders.indexOf(renderObject) > 0) {\n return null;\n }\n }\n const renderObjectRect: Rect = {\n x: parent.x + renderObject.rect.x,\n y: parent.y + renderObject.rect.y,\n width: renderObject.rect.width,\n height: renderObject.rect.height,\n maxWidth: 0,\n maxHeight: 0\n };\n for (let i = 0; i < renderObject.length; i++) {\n const childRender = renderObject.getChild(i);\n const res = this.getHitLeafRender(childRender, {x: renderObjectRect.x, y: renderObjectRect.y}, position);\n if (res) {\n return res;\n }\n }\n return null;\n }\n\n\n /**\n * 如果当前范围未击中任何元素,则需要匹配最近的元素\n * @param renderObject\n * @param parent\n * @param position\n */\n private getRecentHitRender(renderObject: BranchRenderObject, parent: Position, position: Position): { render: LeafRenderObject, offset: number, absoluteRenderRect: Rect } | null {\n const currentRenderPos: Position = {x: renderObject.rect.x + parent.x, y: renderObject.rect.y + parent.y}\n let childRenders = ElementUtil.getAvailHitRenderObjects(renderObject, parent);\n childRenders = childRenders.filter(item => !item.render.disableClick);\n let childrenRenderMap = childRenders.map(item => ({\n rect: item.rect,\n distance: ElementUtil.getDistanceToRect(item.rect, position),\n render: item.render\n }))\n //rects = rects.concat(childRenders.map(item => ({ rect: item.rect, distance: ElementUtil.getDistance({ x: item.rect.x + item.rect.width, y: item.rect.y }, position), render: item.render })));\n childrenRenderMap.sort((item1, item2) => item1.distance - item2.distance);\n for (let i = 0; i < childrenRenderMap.length; i++) {\n const adjacentRender = childrenRenderMap[0];\n if (!adjacentRender) {\n break;\n }\n if (adjacentRender.render instanceof BranchRenderObject) {\n const res = this.getRecentHitRender(adjacentRender.render, currentRenderPos, position);\n if (res) {\n return res;\n }\n } else if (adjacentRender.render instanceof LeafRenderObject) {\n let x = 0;\n if (adjacentRender.rect.x > position.x) {\n x = 0;\n } else if (adjacentRender.rect.x + adjacentRender.rect.width < position.x) {\n x = adjacentRender.rect.width;\n } else {\n x = position.x - adjacentRender.rect.x;\n }\n const offset = ElementUtil.getHitRenderOffset(adjacentRender.render, x);\n return {\n render: adjacentRender.render,\n absoluteRenderRect: adjacentRender.rect,\n offset\n };\n }\n }\n return null;\n }\n\n\n /**\n * 获取点击的doc-page\n */\n private getHitDocPage(evt: MouseElementEvent): { docRender: DocumentRenderObject, paintAbsoluteRect: Position, hitPagePos: Position, docIndex: number } | null {\n const hitPos: Position = {x: evt.globalX, y: evt.globalY};\n const docContainer = this.documentPaint.getDocContainer();\n //let { x, y } = docContainer.rect;\n //y -= this.viewOptions.translateY;\n let i = 0;\n for (; i < docContainer.length; i++) {\n const docRender = docContainer.getChild(i) as DocumentRenderObject;\n const docPos = ElementUtil.getRenderAbsolutePaintPos(docRender);\n if (CommonUtil.isInsideRectByPosition({\n x: docPos.x,\n y: docPos.y - this.viewOptions.translateY,\n width: docRender.rect.width,\n height: docRender.rect.height\n }, hitPos)) {\n break;\n }\n }\n i = i === docContainer.length ? i - 1 : i;\n const hitDoc = docContainer.getChild(i) as DocumentRenderObject;\n const docPos = ElementUtil.getRenderAbsolutePaintPos(hitDoc);\n //const docPos = { x: hitDoc.rect.x + x, y: hitDoc.rect.y + y };\n const hitPagePos: Position = {x: hitPos.x - docPos.x, y: hitPos.y - docPos.y + this.viewOptions.translateY}\n return {\n docRender: hitDoc,\n paintAbsoluteRect: docPos,\n docIndex: i,\n hitPagePos\n }\n }\n\n /**\n * 触发事件\n * @param type\n * @param sourceElement\n * @param event\n * @param eventStage\n * @param docCtx\n */\n static invokeEvent(type: EventTypes, sourceElement: Element, event: ElementEvent, eventStage: EventStage, docCtx: EditorContext): ElementEvent | null {\n const parents = ElementUtil.getParentElements(sourceElement);\n //先执行捕获阶段,在执行冒泡\n for (let i = parents.length - 1; i > -parents.length; i--) {\n if (i > 1 && (eventStage !== 'Capture' && eventStage !== 'All')) {\n continue;\n }\n if (i <= 0 && (eventStage !== 'Bubbling' && eventStage !== 'All')) {\n continue;\n }\n const child = parents[Math.abs(i)];\n event.currentElement = child;\n event.source = sourceElement;\n const userCapture = i > 0;\n child.invokeEvent(type, event, userCapture);\n if (event.isCancel) {\n return event;\n }\n // docCtx.invokeTypeHandler(child, type, event, userCapture);\n // if (event.isCancel) {\n // return event;\n // }\n }\n return null;\n }\n\n\n /**\n * 发布当前的点击信息\n */\n private pubHitInfo(): void {\n this.hitInfoChanged.next({\n startHitInfo: this.startHitInfo as HitEventInfo,\n endHitInfo: this.endHitInfo as HitEventInfo\n });\n }\n\n /**\n * 获取鼠标所在的渲染元素对象\n * @param renderObject\n * @param parent\n * @param position\n * @returns\n */\n private getMouseoverRender(renderObject: RenderObject, parent: Position, position: Position): { render: RenderObject, absoluteRenderRect: Rect } | null {\n const renderObjectRect: Rect = {\n x: parent.x + renderObject.rect.x,\n y: parent.y + renderObject.rect.y,\n width: renderObject.rect.width,\n height: renderObject.rect.height,\n maxWidth: 0,\n maxHeight: 0\n };\n if (renderObject instanceof LeafRenderObject) {\n if (CommonUtil.isInsideRectByPosition(renderObjectRect, position)) {\n return {\n render: renderObject,\n absoluteRenderRect: renderObjectRect\n };\n }\n } else if (renderObject instanceof BranchRenderObject) {\n if (CommonUtil.isInsideRectByPosition(renderObjectRect, position)) {\n //当前为表单元格,但是表格不存在上下padding,\n //则表格上边框和下边框可能会和内容(paragraph)重叠,\n //当前光标在table-render上时,始终无法获取到table-cell-render\n if (renderObject instanceof TableCellRenderObject && (CommonUtil.ApproxmateValueInRange(renderObjectRect.y, 1, position.y) || CommonUtil.ApproxmateValueInRange(renderObjectRect.y + renderObjectRect.height, 1, position.y))) {\n return {\n render: renderObject,\n absoluteRenderRect: renderObjectRect\n }\n }\n for (let i = 0; i < renderObject.length; i++) {\n const childRender = renderObject.getChild(i);\n const res = this.getMouseoverRender(childRender, {\n x: renderObjectRect.x,\n y: renderObjectRect.y\n }, position);\n if (res) {\n return res;\n }\n }\n return {\n render: renderObject,\n absoluteRenderRect: renderObjectRect\n }\n }\n } else {\n throw new Error('未实现');\n }\n return null;\n }\n\n /**\n * 缩放元素\n */\n private resizeRender(e: MouseElementEvent): void {\n if ((<any>this.edgeRenderInfo?.renderElement)['resizeable']) {\n this.resizeElement(e);\n } else if (this.edgeRenderInfo?.renderElement instanceof TableCellElement) {\n this.resizeTableCell();\n }\n }\n\n /**\n * 缩放表格\n */\n private resizeTableCell(): void {\n if (!this.edgeRenderInfo || !this.edgeRenderInfo.mousedownPos) {\n return;\n }\n const cellElement = this.getResizeTableCell();\n const border = this.edgeRenderInfo.border;\n const mousedownPos = this.edgeRenderInfo.mousedownPos;\n const moveDistanceX = this.currentPos.x - mousedownPos.x;\n const moveDistanceY = this.currentPos.y - mousedownPos.y;\n const row = cellElement.parent;\n const table = row?.parent as TableElement;\n if (!row || !table) {\n throw new Error('row | table is null')\n }\n const cellIndex = row.getChildIndex(cellElement);\n let cellWidth = table.getCellWidth(cellIndex);\n const colsCount = table.getColsCount();\n if (['left', 'right'].includes(border)) {\n if (cellIndex === 0 && border === 'left') {\n return;\n }\n let resizeColWidth = 0;\n let resizeColIndex = 0;\n if (border === 'left') {\n resizeColIndex = cellIndex - 1;\n resizeColWidth = table.getCellWidth(resizeColIndex);\n resizeColWidth += moveDistanceX;\n cellWidth -= moveDistanceX;\n } else if (border === 'right') {\n resizeColIndex = cellIndex + 1;\n //移动最后一列时,右侧没有列了,resizeColWidth的值为-1\n resizeColWidth = table.getCellWidth(resizeColIndex);\n if (resizeColWidth > 0) {\n resizeColWidth -= moveDistanceX;\n }\n cellWidth += moveDistanceX;\n }\n if ((resizeColWidth != -1 && resizeColWidth < 20) || cellWidth < 20) {\n return;\n }\n table.setCellWidth(resizeColIndex, resizeColWidth);\n table.setCellWidth(cellIndex, cellWidth);\n this.edgeRenderInfo.mousedownPos = this.currentPos;\n table.pubOnChange('self');\n } else if (['bottom', 'top'].includes(border)) {\n let rowIndex = row.getIndex();\n if (rowIndex === 0 && border === 'top') {\n return;\n }\n //按照移动底边计算\n rowIndex = border === 'top' ? rowIndex - 1 : rowIndex;\n const resizeRowEle = table.getChild(rowIndex) as TableRowElement;\n let resizeRowRender = resizeRowEle.measureRender as TableRowRenderObject;\n if (resizeRowRender.element !== resizeRowEle) {\n console.error('缩放表格行高度出现错误,绘制元素和表格对象不对应')\n return;\n }\n const minHeight = resizeRowEle.props.minHeight ?? 0;\n //当前行不存在最小高度设置,并且缩放高度为负数\n if (minHeight <= 0 && moveDistanceY < 0) {\n return;\n }\n //当前内容高度\n let resizeRowRenderContentHeight = ElementUtil.getTableRowRenderContentHeight(resizeRowRender);\n let resizeRowMinHeight = 0;\n if (minHeight <= 0) {\n resizeRowMinHeight = resizeRowRenderContentHeight + moveDistanceY;\n } else {\n resizeRowMinHeight = minHeight + moveDistanceY;\n }\n //缩放的高度小于内容高度,则重置行最小高度\n if (resizeRowMinHeight <= resizeRowRenderContentHeight) {\n //resizeRowEle.trProps.minHeight = 0;\n resizeRowMinHeight = 0;\n }\n resizeRowEle.props.minHeight = resizeRowMinHeight;\n this.edgeRenderInfo.mousedownPos = this.currentPos;\n table.pubOnChange('self');\n }\n }\n\n private getResizeTableCell(): TableCellElement {\n if (!this.edgeRenderInfo) {\n throw new Error('edgeRenderInfo is null')\n }\n const cellElement = this.edgeRenderInfo.renderElement as TableCellElement;\n const row = cellElement.parent;\n if (!row) {\n throw new Error('row is null')\n }\n const table = row.parent as TableElement;\n const cellIndex = row.getChildIndex(cellElement);\n const border = this.edgeRenderInfo.border;\n if (cellElement.props.hMerge === 'restart' || border === 'right') {\n for (let i = cellIndex + 1; i < table.getColsCount(); i++) {\n const cell = row.getChild(i) as TableCellElement;\n if (cell.props.hMerge !== 'continue') {\n return row.getChild(i - 1) as TableCellElement;\n }\n }\n return row.getChild<TableCellElement>(table.getColsCount() - 1);\n }\n return cellElement;\n }\n\n /**\n * 调整元素大小\n */\n private resizeElement(e: MouseElementEvent): void {\n if (!this.edgeRenderInfo || !this.edgeRenderInfo.mousedownPos) {\n return;\n }\n const imgElement = <unknown>this.edgeRenderInfo.renderElement as { props: { width: number, height: number } };\n const border = this.edgeRenderInfo.border;\n const mousedownPos = this.edgeRenderInfo.mousedownPos;\n let moveDistanceX = this.currentPos.x - mousedownPos.x;\n let moveDistanceY = this.currentPos.y - mousedownPos.y;\n if (['left-top', 'left-middle', 'left-bottom', 'right-top', 'right-middle', 'right-bottom', 'top-middle', 'bottom-middle'].indexOf(border) >= 0) {\n if (['left-middle', 'right-middle'].indexOf(border) >= 0) {\n moveDistanceY = 0;\n }\n if (['top-middle', 'bottom-middle'].indexOf(border) >= 0) {\n moveDistanceX = 0;\n }\n //shift键按比例缩放\n if (e.shift && ['left-top', 'right-top', 'left-bottom', 'right-bottom'].indexOf(border) >= 0) {\n let scale = 1;\n if (Math.abs(moveDistanceX) > Math.abs(moveDistanceY)) {\n scale = moveDistanceX / imgElement.props.width;\n moveDistanceY = Math.floor(scale * imgElement.props.height);\n } else {\n scale = moveDistanceY / imgElement.props.height;\n moveDistanceX = Math.floor(scale * imgElement.props.width);\n }\n }\n imgElement[\"props\"].width += moveDistanceX;\n imgElement[\"props\"].height += moveDistanceY;\n if (imgElement[\"props\"].width < 10) {\n imgElement[\"props\"].width = 10;\n }\n if (imgElement[\"props\"].height < 10) {\n imgElement[\"props\"].height = 10;\n }\n this.edgeRenderInfo.mousedownPos = this.currentPos;\n }\n\n }\n\n /**\n * 选中当前全部 ctrl+A\n */\n selectAll(): void {\n const {startControl} = this.selectionState;\n const regionTarget = ElementUtil.getElementRegionTarget(startControl);\n if (!startControl || !regionTarget) {\n return;\n }\n const firstLeaf = ElementUtil.getFirstLeafElement(regionTarget.target);\n const lastLeaf = ElementUtil.getLastLeafElement(regionTarget.target);\n if (!firstLeaf || !lastLeaf) {\n throw new Error('firstLeaf or lastLeaf is null')\n }\n this.selectionState.clear();\n const newSelectionRange = new SelectionRange();\n newSelectionRange.setStart(firstLeaf, 0);\n newSelectionRange.setEnd(lastLeaf, -1);\n this.selectionState.addRange(newSelectionRange);\n //const doc=\n }\n\n\n /**\n * 移动光标到行首\n */\n moveCursorToLineStart(): void {\n this.moveCursorToHomeOrEnd();\n }\n\n /**\n * 移动光标到行尾\n */\n moveCursorToLineEnd(): void {\n this.moveCursorToHomeOrEnd(false);\n }\n\n /**\n * 处理移动光标到行尾或行首\n * @param home\n * @returns\n */\n private moveCursorToHomeOrEnd(home: boolean = true): void {\n const {startControl} = this.selectionState;\n if (!startControl || !this.docCtx.cursorRect) {\n return;\n }\n const rect = this.docCtx.cursorRect;\n const docEvent = new MouseElementEvent(this.docCtx);\n docEvent.globalX = rect.x;\n docEvent.globalY = rect.y + rect.height / 2;\n docEvent.buttons = 1;\n const hitInfo = this.getHitInfo(docEvent);\n if (!hitInfo) {\n return;\n }\n const paraRender = ElementUtil.getParentRender(hitInfo.render, ParagraphLineRectRenderObject) as ParagraphLineRectRenderObject\n const linePosRect = ElementUtil.getRenderAbsolutePaintRect(paraRender)\n docEvent.globalX = linePosRect.x + (home ? 0 : linePosRect.width);\n docEvent.globalY = linePosRect.y + linePosRect.height / 2;\n this.mousedownPos = {x: docEvent.globalX, y: docEvent.globalY};\n this.mousedownHandle(docEvent);\n this.ismousedown = false;\n this.edgeRenderInfo = null;\n }\n\n\n /**\n * 向左移动光标\n */\n moveCursorToLeft(): void {\n const {startControl, startOffset} = this.selectionState;\n if (startOffset === 0) {\n const oldRegion = ElementUtil.getElementRegion(startControl);\n const prevEle = ElementUtil.getRecursionPrevSiblingElement(startControl, false, true, this.viewOptions);\n if (prevEle) {\n const newRegion = ElementUtil.getElementRegion(prevEle);\n if (newRegion !== oldRegion) {\n return;\n }\n this.selectionState.resetRange(prevEle, -1);\n return;\n }\n } else {\n if (startControl instanceof TextGroupElement) {\n this.selectionState.resetRange(startControl, startOffset - 1);\n } else {\n this.selectionState.resetRange(startControl, 0);\n }\n }\n }\n\n /**\n * 向右移动光标\n */\n moveCursorToRight(): void {\n const {startControl, startOffset} = this.selectionState;\n if (this.isLeafEleEndOffset(startControl, startOffset)) {\n const oldRegion = ElementUtil.getElementRegion(startControl);\n const nextEle = ElementUtil.getRecursionNextSiblingElement(startControl, false, true, this.viewOptions);\n if (nextEle) {\n const newRegion = ElementUtil.getElementRegion(nextEle);\n if (oldRegion !== newRegion) {\n return;\n }\n this.selectionState.resetRange(nextEle, 0);\n return;\n }\n } else {\n if (startControl instanceof TextGroupElement) {\n this.selectionState.resetRange(startControl, startOffset + 1);\n } else {\n this.selectionState.resetRange(startControl, 1);\n }\n }\n }\n\n /**\n * 向上移动光标\n */\n moveCursorToUpOrDown(up: boolean = true): void {\n if (!this.selectionState.cursorPos) {\n return;\n }\n let {x, y} = this.selectionState.cursorPos;\n y -= this.viewOptions.translateY;\n for (let i = 0; i < 50; i++) {\n const docEvent = new MouseElementEvent(this.docCtx);\n docEvent.globalX = x;\n docEvent.globalY = y - (up ? i * 2 : i * -2);\n docEvent.buttons = 1;\n const hitInfo = this.getHitInfo(docEvent);\n const res = hitInfo?.element === this.selectionState.startControl && hitInfo.offset === this.selectionState.startOffset;\n if (!hitInfo) {\n return;\n }\n if (!res) {\n this.mousedownPos = {x: x, y: y};\n this.mousedownHandle(docEvent);\n this.ismousedown = false;\n this.edgeRenderInfo = null;\n return;\n }\n }\n }\n\n\n /**\n * 当前偏移量是否处于当前元素的末尾\n * @param ele\n * @param offset\n * @returns\n */\n private isLeafEleEndOffset(ele: LeafElement, offset: number): boolean {\n if (ele instanceof TextGroupElement) {\n return ele.textMeasures.length === offset;\n } else {\n if (ele instanceof PSymbolElement) {\n return true;\n } else {\n return offset === 1;\n }\n }\n }\n\n /**\n * 获取点击的文档区域\n * @param docRender\n * @param pos\n * @returns\n */\n getHitRegion(docEvent: MouseElementEvent): HitRegion | null {\n const hitDocInfo = this.getHitDocPage(docEvent);\n if (!hitDocInfo) {\n return null;\n }\n const {docRender, hitPagePos} = hitDocInfo;\n const headerRender = ElementUtil.findChildRender(docRender, (item) => item instanceof DocumentHeaderRenderObject) as DocumentHeaderRenderObject;\n const footerRender = ElementUtil.findChildRender(docRender, (item) => item instanceof DocumentFooterRenderObject) as DocumentFooterRenderObject;\n if (!headerRender) {\n throw new Error('header is null');\n }\n if (!footerRender) {\n throw new Error('footer is null');\n }\n const headerLine = headerRender.rect.y + headerRender.rect.height;\n const footerLine = footerRender.rect.y;\n if (hitPagePos.y <= headerLine) {\n return 'header';\n } else if (hitPagePos.y <= footerLine) {\n return 'body';\n } else if (hitPagePos.y > footerLine && hitPagePos.y < docRender.rect.height) {\n return 'footer';\n } else {\n return null;\n }\n }\n\n}\n\n\n","import { LeafElement } from \"./element-define\";\nimport { KeyboradElementEvent } from \"./element-event-define\";\nimport { DocumentEvent } from \"./document-event\";\nimport { EditorContext } from \"./document-context\";\nimport { fromEvent, Subject } from \"./event-subject\";\n\nexport interface ICompositionStartInfo {\n element: LeafElement, offset: number\n}\nexport interface InputData {\n composition?: boolean;\n //开启输入法后的光标的起点位置\n compositionStartInfo?: ICompositionStartInfo;\n //输入法之前输入的内容\n prevInputData?: string;\n data: string\n}\n\n/**\n * 输入处理\n */\nexport class DocumentInput {\n /**\n * 光标闪烁状态\n */\n private _cursorBlinksState = false;\n private cursorBlinksIntervalID: any;\n //是否是开启输入法了\n private compositionStart = false;\n //开启输入法后输入的文字\n private compositionPrevData!: string;\n //开启输入法后的的元素\n private compositionStartInfo!: ICompositionStartInfo | null;\n //输入内容事件\n onInputEvent: Subject<InputData> = new Subject();\n //backspace 键盘事件\n onBackspaceEvent: Subject<KeyboardEvent> = new Subject();\n //delete 键盘事件\n onDeleteEvent: Subject<KeyboardEvent> = new Subject();\n //enter 键盘事件\n onEnterEvent: Subject<void> = new Subject();\n //左键\n onLeftEvent: Subject<void> = new Subject();\n //右键\n onRightEvent: Subject<void> = new Subject();\n //复制\n onCopyEvent: Subject<ClipboardEvent> = new Subject();\n //剪切\n onCutEvent: Subject<ClipboardEvent> = new Subject();\n //粘贴\n onPasteEvent: Subject<ClipboardEvent> = new Subject();\n //插入换行符\n onInsertBr: Subject<void> = new Subject();\n //ctrl+A 全选事件\n onSelectAllEvent: Subject<void> = new Subject();\n //home 事件\n onHomeEvent: Subject<void> = new Subject();\n //end 事件\n onEndEvent: Subject<void> = new Subject();\n onUpEvent: Subject<void> = new Subject();\n onDownEvent: Subject<void> = new Subject();\n constructor(private editInput: HTMLInputElement, private editCursor: HTMLSpanElement, private cursorWrapper: HTMLDivElement, private docCtx: EditorContext) {\n fromEvent(this.editInput, 'blur').subscribe(() => {\n //console.log('输入框 blur');\n })\n fromEvent(this.editInput, 'focus').subscribe(() => {\n //console.log('输入框 focus');\n })\n fromEvent(this.editInput, 'input').subscribe(() => {\n if (this.compositionStart) {\n return;\n }\n if (!this.editInput.value) {\n return;\n }\n //console.log('输入文字了');\n if (!this.compositionStart) {\n const { startControl, startOffset } = this.docCtx.selectionState;\n this.onInputEvent.next({\n data: this.editInput.value,\n prevInputData: '',\n compositionStartInfo: {\n element: startControl as LeafElement,\n offset: startOffset\n }\n });\n this.editInput.value = '';\n }\n console.log('input');\n\n })\n fromEvent<CompositionEvent>(this.editInput, 'compositionstart').subscribe((evt) => {\n this.compositionStart = true;\n this.compositionPrevData = '';\n const { startControl, startOffset } = this.docCtx.selectionState;\n //console.log('输入法开始');\n this.compositionStartInfo = {\n element: startControl as LeafElement,\n offset: startOffset\n };\n });\n fromEvent<CompositionEvent>(this.editInput, 'compositionupdate').subscribe((evt) => {\n if (evt.data === this.compositionPrevData) {\n return;\n }\n //console.log('输入了:' + evt.data);\n // this.onInputEvent.next({\n // data: evt.data,\n // compositionStartInfo: this.compositionStartInfo as ICompositionStartInfo,\n // composition: true,\n // prevInputData: this.compositionPrevData\n // });\n // this.compositionPrevData = evt.data;\n });\n fromEvent<CompositionEvent>(this.editInput, 'compositionend').subscribe((evt) => {\n //console.log('compositionend')\n\n this.onInputEvent.next({\n data: this.editInput.value,\n prevInputData: '',\n compositionStartInfo: this.compositionStartInfo as ICompositionStartInfo\n });\n\n this.compositionStart = false;\n this.editInput.value = \"\";\n this.compositionPrevData = '';\n\n // this.onInputEvent.next({\n // data: evt.data,\n // compositionStartOffset: this.compositionStartOffset,\n // compositionRecordContent: this.compositionRecordContent\n // });\n // this.onInputEvent.next({\n // data: evt.data,\n // compositionStartInfo: this.compositionStartInfo,\n // composition: true,\n // prevInputData: ''\n // });\n this.compositionStartInfo = null;\n //this.compositionRecordContent = '';\n });\n fromEvent<KeyboardEvent>(this.editInput, 'keydown').subscribe((evt) => {\n const keyEvent = new KeyboradElementEvent(this.docCtx);\n keyEvent.sourceEvent = evt;\n if (DocumentEvent.invokeEvent('ElementKeyDown', this.docCtx.selectionState.startControl as LeafElement, keyEvent, 'Capture', this.docCtx)) {\n return;\n }\n if (evt.keyCode === 8) {\n this.onBackspaceEvent.next(evt);\n } else if (evt.keyCode === 13 && !evt.shiftKey) {\n this.onEnterEvent.next();\n } else if (evt.keyCode === 37) {\n this.onLeftEvent.next();\n } else if (evt.keyCode === 39) {\n this.onRightEvent.next();\n } else if (evt.keyCode === 38) {\n this.onUpEvent.next();\n } else if (evt.keyCode === 40) {\n this.onDownEvent.next();\n }\n else if (evt.keyCode === 9) {\n evt.preventDefault();\n } else if (evt.keyCode === 13 && evt.shiftKey) {\n evt.preventDefault();\n this.onInsertBr.next();\n } else if (evt.keyCode === 46) {\n this.onDeleteEvent.next(evt);\n } else if (evt.ctrlKey && evt.keyCode === 65) {\n evt.preventDefault();\n this.onSelectAllEvent.next();\n } else if (evt.keyCode === 36) {\n this.onHomeEvent.next();\n }\n else if (evt.keyCode === 35) {\n this.onEndEvent.next();\n }\n });\n fromEvent<ClipboardEvent>(this.editInput, \"copy\").subscribe(evt => {\n this.onCopyEvent.next(evt);\n });\n fromEvent<ClipboardEvent>(this.editInput, \"paste\").subscribe(evt => {\n this.onPasteEvent.next(evt);\n });\n fromEvent<ClipboardEvent>(this.editInput, \"cut\").subscribe(evt => {\n this.onCutEvent.next(evt);\n });\n }\n\n destroy(): void {\n clearInterval(this.cursorBlinksIntervalID);\n }\n\n /**\n * 设置光标闪烁\n */\n setCursorBlinks() {\n this.editCursor.style.background = this._cursorBlinksState ? 'transparent' : 'black';\n this._cursorBlinksState = !this._cursorBlinksState;\n }\n\n /**\n * 设置光标位置\n * @param position\n */\n setCursorPosition(position: { x: number; y: number; height: number; }) {\n this.cursorWrapper.style.left = position.x + 'px';\n this.cursorWrapper.style.top = position.y + 'px';\n this.cursorWrapper.style.height = position.height + 'px';\n this.setCursorVisibility(true);\n //this.setCursorInputStatus();\n }\n\n /**\n * 设置虚拟光标的可见性\n * @param visibility\n */\n setCursorVisibility(visibility: boolean) {\n this.cursorWrapper.style.display = visibility ? 'block' : 'none';\n if (visibility) {\n this.setInputFocus(true);\n }\n }\n\n /**\n * 设置输入状态\n * @param focus \n */\n setInputFocus(focus: boolean): void {\n if (focus) {\n this.editInput.readOnly = false;\n this.editInput.focus();\n\n } else {\n //this.editInput.blur();\n this.editInput.readOnly = true;\n this.docCtx.selectionState.cursorPos = null;\n }\n }\n\n\n\n}","import {DocumentInput, ICompositionStartInfo, InputData} from \"./document-input-cursor\";\nimport {SelectionRange, SelectionState} from \"./document-selection\";\nimport {ElementUtil} from \"./element-util\";\nimport {\n BlockContainerElement,\n BlockContentElement,\n BranchElement,\n DocMode,\n Element,\n InlineGroupElement,\n LeafElement,\n SelectionContentRange,\n ViewOptions\n} from \"./element-define\";\nimport {TextGroupElement} from \"./impl\";\nimport {PSymbolElement} from \"./impl\";\nimport {ParagraphElement} from \"./impl\";\nimport {RangeUtil} from \"./range-util\";\nimport {TableElement} from \"./impl\";\nimport {DocumentEvent} from \"./document-event\";\nimport {KeyboradElementEvent} from \"./element-event-define\";\nimport {DataEleBaseProps, ParagraphProps, TextProps} from \"./element-props\";\nimport {ElementSerialize} from \"./element-serialize\";\nimport {ElementReader} from \"./element-reader\";\nimport {BreakElement} from \"./impl\";\nimport {DataDecorateElement} from \"./impl\";\nimport {EditorContext} from \"./document-context\";\nimport {\n DataElementInlineGroup,\n InlineGroupInputElement,\n IsInSideDataElement,\n IsInSideInlineGroupInputElement\n} from \"./impl\";\nimport {DocumentComment} from \"./document-comment\";\nimport {CommentElement} from \"./impl\";\nimport {nanoid} from \"nanoid\";\nimport {CommContentElement} from \"./impl\";\nimport {ValidateElement} from \"./impl\";\nimport {CommonUtil} from \"./common-util\";\nimport {TrackRunElement, TrackRunTypeEnum} from \"./impl\";\nimport {DocumentBodyElement} from \"./impl\";\n\n/**\n * 文档内容改变\n */\nexport class DocumentChange {\n private selectionState: SelectionState;\n private viewOptions: ViewOptions;\n\n constructor(private eleReader: ElementReader, private docCtx: EditorContext, private docComment: DocumentComment, private documentInput: DocumentInput) {\n this.selectionState = this.docCtx.selectionState;\n this.viewOptions = this.docCtx.viewOptions;\n this.documentInput.onInputEvent.subscribe(data => {\n this.newInput(data)\n });\n this.documentInput.onBackspaceEvent.subscribe((evt) => {\n this.onBackspace(evt)\n });\n this.documentInput.onEnterEvent.subscribe(() => {\n this.onEnter()\n });\n this.documentInput.onCopyEvent.subscribe((evt) => {\n this.onCopy(evt)\n });\n this.documentInput.onCutEvent.subscribe((evt) => {\n this.onCut(evt);\n });\n this.documentInput.onPasteEvent.subscribe((evt) => {\n this.onPaste(evt)\n });\n this.documentInput.onInsertBr.subscribe(() => {\n this.insertSoftBr()\n });\n this.documentInput.onDeleteEvent.subscribe((evt) => {\n this.onDeleteKeyHandler(evt)\n });\n\n }\n\n newInput(data: InputData): void {\n const {startControl, startOffset, collapsed, enableTrackChanges} = this.selectionState;\n if (!startControl) {\n debugger;\n }\n if (!collapsed) {\n this.onInputBySelectRange(data);\n return;\n }\n //判断是否需要创建新的留痕区域\n if (enableTrackChanges && !this.isInCorrectTrackRegion(startControl as Element, TrackRunTypeEnum.Inserted)) {\n this.newInputTrackChanges(data, startControl as LeafElement, startOffset);\n return;\n }\n //当前输入节点是在留痕区域中,但是当前关闭了审阅模式,需要拆分留痕区域,创建新输入节点\n if (!enableTrackChanges && this.isInTrackBlock(startControl)) {\n const newInput = this.splitTrackElement(startControl, startOffset);\n const comp = data.compositionStartInfo as ICompositionStartInfo;\n comp.element = newInput;\n comp.offset = 0;\n this.inputTextGroup(newInput, data);\n return;\n }\n if (!(startControl instanceof TextGroupElement)) {\n if (!data.compositionStartInfo) {\n throw new Error('compositionStartInfo is null');\n }\n const siblingTextEle = startOffset === 1 ? ElementUtil.getNextSiblingElement(startControl) : ElementUtil.getPrevSiblingElement(startControl);\n if (siblingTextEle instanceof TextGroupElement) {\n data.compositionStartInfo.offset = startOffset === 0 ? siblingTextEle.text.length : 0;\n this.inputTextGroup(siblingTextEle, data);\n } else {\n const inputTextProps = this.getDefaultTextProps(startControl, startOffset);\n const newTextGroup = ElementUtil.getNewTextGroup(inputTextProps);\n startControl.parent.addChild(newTextGroup, startControl.getIndex() + startOffset);\n this.inputTextGroup(newTextGroup, data);\n }\n return;\n }\n this.inputTextGroup(startControl, data);\n }\n\n\n /**\n * 选中区域后进行输入\n * 需要处理将选中的区域删除后,进行输入的情况\n */\n onInputBySelectRange(data: InputData): void {\n this.onRangeDelete();\n const cb = () => {\n const {startControl, startOffset, editable} = this.selectionState;\n if (!editable) {\n return false;\n }\n const comp = data.compositionStartInfo as ICompositionStartInfo;\n comp.element = startControl;\n comp.offset = startOffset;\n this.newInput(data);\n return true;\n }\n //利用回调完成后续的输入处理\n this.docCtx.setPaintedCallback(cb);\n }\n\n /**\n * 当前元素是否在正确的留痕区域(ins-run、del-run),情况分为以下情况\n * 1.留痕块类型为新增,但是留痕块的创建者为其他用户,此时需要拆分留痕区域\n * 2.留痕块为当前用户创建,但是创建时间大于有效的时间,此时需要拆分留痕区域\n * @param startControl\n * @param trackType\n * @returns\n */\n isInCorrectTrackRegion(startControl: Element, trackType: TrackRunTypeEnum): boolean {\n const parent = startControl.parent;\n return parent instanceof TrackRunElement\n && parent.props.userId === this.viewOptions.editUser.id\n && parent.type === trackType\n && CommonUtil.getNowDiffSeconds(parent.props.date) <= this.viewOptions.trackChangePeriod;\n }\n\n /**\n * 当前元素是否在留痕区域(ins-run、del-run)中\n * @param target\n * @param trackType\n * @returns\n */\n isInTrackBlock(target: Element, trackType: TrackRunTypeEnum | null = null): boolean {\n return target.parent instanceof TrackRunElement && (trackType === null || target.parent.type === trackType);\n }\n\n /**\n * 留痕输入\n * @param data\n * @param startControl\n * @param startOffset\n * @returns\n */\n newInputTrackChanges(data: InputData, startControl: LeafElement, startOffset: number): void {\n const userId = this.viewOptions.editUser.id;\n const compInfo = data.compositionStartInfo as ICompositionStartInfo;\n if (this.isInCorrectTrackRegion(startControl, TrackRunTypeEnum.Inserted)) {\n return;\n }\n if (this.isInTrackBlock(startControl)) {\n const newInput = this.createNewTrackInput(startControl, startOffset, TrackRunTypeEnum.Inserted);\n compInfo.offset = 0;\n compInfo.element = newInput;\n this.inputTextGroup(newInput, data);\n return;\n } else {\n const {\n trackElement,\n newTextGroup\n } = this.createTextTrackElement(startControl, null, TrackRunTypeEnum.Inserted);\n this.insertElement(startControl, startOffset, [trackElement])\n compInfo.offset = 0;\n compInfo.element = newTextGroup;\n this.inputTextGroup(newTextGroup, data);\n return;\n }\n }\n\n\n /**\n * 创建新的留痕块,并返回留痕块输入定位文本\n * @param startControl\n * @param startOffset\n * @param trackType\n * @returns\n */\n createNewTrackInput(startControl: LeafElement, startOffset: number, trackType: TrackRunTypeEnum): TextGroupElement {\n const textProps = this.getDefaultTextProps(startControl, startOffset);\n const currTrackEle = startControl.parent as TrackRunElement;\n if (startControl instanceof TextGroupElement && startOffset > 0 && startOffset < startControl.textMeasures.length) {\n const splitText = startControl.spliceText(startOffset, startControl.textMeasures.length, true) as TextGroupElement;\n startControl.parent.addChild(splitText, startControl.getIndex() + 1);\n startOffset = startControl.textMeasures.length;\n }\n startOffset = startOffset > 0 ? 1 : 0;\n const index = startControl.getIndex() + startOffset;\n //切割留痕块\n if (index > 0 && index < currTrackEle.length) {\n const splitTrack = currTrackEle.split(startControl.getIndex() + startOffset) as TrackRunElement;\n currTrackEle.parent.addChild(splitTrack, currTrackEle.getIndex() + 1);\n const {trackElement, newTextGroup} = this.createTextTrackElement(startControl, textProps, trackType);\n currTrackEle.parent.addChild(trackElement, currTrackEle.getIndex() + 1);\n return newTextGroup;\n } else {\n const {trackElement, newTextGroup} = this.createTextTrackElement(startControl, textProps, trackType);\n currTrackEle.parent.addChild(trackElement, currTrackEle.getIndex() + (index === 0 ? 0 : 1));\n return newTextGroup;\n }\n }\n\n /**\n * 获取当前输入节点的文本属性\n * @param startControl\n * @param offset\n * @returns\n */\n getDefaultTextProps(startControl: LeafElement, offset: number): TextProps {\n let textProps = this.getDefaultTextPropsByOptions();\n if (startControl instanceof TextGroupElement) {\n textProps = startControl.props;\n }\n const dataEle = ElementUtil.getDataElement(startControl) as DataElementInlineGroup;\n if (dataEle && IsInSideDataElement(startControl, offset)) {\n return dataEle.props.valueTextProps;\n }\n return textProps;\n }\n\n /**\n * 根据选项配置返回创建文本的默认文本属性\n * @private\n */\n private getDefaultTextPropsByOptions(): TextProps {\n const props = new TextProps();\n props.fontName = this.viewOptions.defaultFontName;\n props.fontSize = this.viewOptions.defaultFontSize;\n props.color = this.viewOptions.defaultColor;\n return props;\n }\n\n /**\n * 当前元素位于留痕区域内,但是当前编辑模式为非留痕模式,需要将当前留痕元素分割开来,插入新普通文本元素对象,并返回\n * @param startControl\n * @param startOffset\n * @returns\n */\n splitTrackElement(startControl: LeafElement, startOffset: number): TextGroupElement {\n if (!(startControl.parent instanceof TrackRunElement) && startControl instanceof TextGroupElement) {\n return startControl;\n }\n const textProps = this.getDefaultTextProps(startControl, startOffset);\n const currTrackEle = startControl.parent as TrackRunElement;\n if (startControl instanceof TextGroupElement && startOffset > 0 && startOffset < startControl.textMeasures.length) {\n const splitText = startControl.spliceText(startOffset, startControl.textMeasures.length, true) as TextGroupElement;\n startControl.parent.addChild(splitText, startControl.getIndex() + 1);\n startOffset = startControl.textMeasures.length;\n }\n startOffset = startOffset > 0 ? 1 : 0;\n const index = startControl.getIndex() + startOffset;\n if (index > 0 && index < currTrackEle.length) {\n const splitTrack = currTrackEle.split(startControl.getIndex() + startOffset) as TrackRunElement;\n currTrackEle.parent.addChild(splitTrack, currTrackEle.getIndex() + 1);\n const newInput = ElementUtil.getNewTextGroup(textProps);\n currTrackEle.parent.addChild(newInput, currTrackEle.getIndex() + 1);\n return this.splitTrackElement(newInput, 0);\n } else {\n const newInput = ElementUtil.getNewTextGroup(textProps);\n currTrackEle.parent.addChild(newInput, currTrackEle.getIndex() + (index === 0 ? 0 : 1));\n return this.splitTrackElement(newInput, 0);\n }\n }\n\n /**\n * 创建插入(ins-run) 留痕,并且返回留痕的文本元素对象\n * @param startControl\n * @returns\n */\n private createTextTrackElement(startControl: Element, textProps: TextProps | null, trackType: TrackRunTypeEnum): { trackElement: TrackRunElement, newTextGroup: TextGroupElement } {\n const para = ElementUtil.getParentByType(startControl, ParagraphElement) as ParagraphElement;\n const trackElement = this.createTrackElement(trackType);\n textProps = textProps || this.getDefaultTextPropsByOptions();\n const newTextGroup = ElementUtil.getNewTextGroup(textProps);\n newTextGroup.props.color = '';\n //newTextGroup.props.color = '#ff4d4f';\n trackElement.addChild(newTextGroup);\n return {\n trackElement,\n newTextGroup\n }\n\n }\n\n private createTrackElement(trackType: TrackRunTypeEnum): TrackRunElement {\n const trackElement = new TrackRunElement(trackType);\n trackElement.props.userId = this.viewOptions.editUser.id;\n trackElement.props.userName = this.viewOptions.editUser.name;\n trackElement.props.date = CommonUtil.formatNow('YYYY-MM-DD HH:mm:ss');\n trackElement.props.id = nanoid(5);\n return trackElement;\n }\n\n private inputTextGroup(text: TextGroupElement, data: InputData): void {\n const prevInputData = data.prevInputData || '';\n const prevInputDataLength = prevInputData.length;\n if (!data.compositionStartInfo) {\n throw new Error('compositionStartInfo is null')\n }\n const {element, offset} = data.compositionStartInfo;\n let startInputOffset = offset;\n //startInputOffset -= prevInputDataLength;\n if (!(element instanceof TextGroupElement)) {\n //当前选中元素位于输入元素是起始还是结束位置,如果位于起始位置,则输入偏移量为0,否则为未变更之前的内容length\n if (ElementUtil.getNextSiblingElement(element) === text) {\n startInputOffset = 0;\n } else {\n startInputOffset = text.textMeasures.length - prevInputDataLength;\n }\n }\n text.splice(startInputOffset, prevInputDataLength, data.data);\n //输入后撤销,导致文本组内为空\n if (!text.text.length) {\n this.removeEmptyText(text);\n } else {\n this.selectionState.resetRange(text, startInputOffset + data.data.length);\n }\n }\n\n\n /**\n * backspace,向前删除\n */\n onBackspace(evt: KeyboardEvent): void {\n const {startControl, startOffset, collapsed} = this.selectionState;\n if (!startControl) {\n throw new Error('startControl is null')\n }\n const eventElement = new KeyboradElementEvent(this.docCtx);\n eventElement.key = 'backspace';\n eventElement.source = startControl;\n eventElement.sourceEvent = evt;\n eventElement.sourceOffset = startOffset;\n const res = DocumentEvent.invokeEvent('BackspaceKey', startControl, eventElement, 'Capture', this.docCtx);\n if (res && res.isCancel) {\n return;\n }\n this.docComment.updateComments();\n if (collapsed) {\n this.onBackspaceElement(startControl, startOffset);\n } else {\n this.onRangeDelete();\n }\n }\n\n /**\n * delete,向后删除\n * @param evt\n */\n onDeleteKeyHandler(evt: KeyboardEvent): void {\n const {startControl, startOffset, collapsed} = this.selectionState;\n const eventElement = new KeyboradElementEvent(this.docCtx);\n eventElement.key = 'delete';\n eventElement.source = startControl;\n eventElement.sourceEvent = evt;\n eventElement.sourceOffset = startOffset;\n const res = DocumentEvent.invokeEvent('DeleteKey', startControl, eventElement, 'Capture', this.docCtx);\n if (res && res.isCancel) {\n return;\n }\n if (collapsed) {\n this.onKeyDeleteElement(startControl, startOffset);\n } else {\n this.onRangeDelete();\n }\n }\n\n /**\n * 根据选择范围删除\n */\n private onRangeDelete(): { cursorEle: Element, cursorOffset: number } {\n const {selectedRange} = this.selectionState;\n if (!selectedRange) {\n throw new Error('selectionRange is null')\n }\n //用于刷新后定位光标\n let startPointElement: Element;\n let startPointOffset = 0;\n if (selectedRange.isFullSelected) {\n //某个容器的内容被全部选中\n if (selectedRange.target instanceof BlockContainerElement) {\n startPointElement = selectedRange.target;\n startPointOffset = 0;\n }\n //内容块被选中,需要向上寻找内容块容器\n else if (selectedRange.target instanceof BlockContentElement) {\n const parentContainer = ElementUtil.getParent(selectedRange.target, (item) => item instanceof BlockContainerElement) as BlockContainerElement;\n if (parentContainer) {\n startPointElement = parentContainer;\n startPointOffset = 0;\n } else {\n throw new Error('未能向上寻找到定位的内容块容器')\n }\n } else {\n throw new Error('未知条件区间')\n }\n } else {\n const startRange = RangeUtil.getStartRangeTarget(selectedRange) as SelectionContentRange;\n const endRange = RangeUtil.getEndRangeTarget(selectedRange) as SelectionContentRange;\n if (startRange.isFullSelected) {\n startPointElement = ElementUtil.getRecursionPrevSiblingElement(startRange.target, false, true, this.viewOptions) as LeafElement;\n startPointOffset = -1;\n //判断结束选区和开始选区是否在一个段落中,尽量落在同一段落中\n if (!startPointElement || ElementUtil.isInSameParagraph(startRange.target, endRange.target)) {\n if (!endRange.isFullSelected) {\n startPointElement = endRange.target;\n startPointOffset = 0;\n }\n }\n } else {\n startPointElement = startRange.target as LeafElement;\n startPointOffset = startRange.startOffset;\n }\n }\n if (this.viewOptions.docMode === DocMode.FormEdit) {\n this.deleteRangeInFormEdit(selectedRange)\n } else {\n this.deleteRange(selectedRange);\n }\n this.selectionState.resetRange(startPointElement, startPointOffset);\n return {cursorEle: startPointElement, cursorOffset: startPointOffset};\n }\n\n /**\n * backspace删除\n * @param control\n * @param offset\n * @returns\n */\n private onBackspaceElement(control: LeafElement, offset: number): void {\n this.selectionState.clear();\n if (offset === 0) {\n const prevEle = ElementUtil.getRecursionPrevSiblingElement(control, false, true, this.viewOptions);\n if (!prevEle) {\n this.selectionState.resetRange(control, 0);\n return;\n }\n if (ElementUtil.isInSameParagraph(control, prevEle)) {\n if (ElementUtil.getPrevSiblingElement(control) === prevEle) {\n this.onBackspaceElement(prevEle, ElementUtil.getElementEndOffset(prevEle));\n } else {\n this.selectionState.resetRange(prevEle, -1);\n }\n } else {\n //需要判断是否是兄弟段落,兄弟段落,需要合并\n const prevPara = ElementUtil.getParentByType(prevEle, ParagraphElement) as ParagraphElement;\n const currPara = ElementUtil.getParentByType(control, ParagraphElement) as ParagraphElement;\n //表明是紧挨着的两个段落,要进行段落合并\n if (ElementUtil.getPrevSiblingElement(currPara) === prevPara) {\n if (this.selectionState.enableTrackChanges) {\n this.selectionState.resetRange(prevEle, -1);\n return;\n }\n this.combineParagraph(prevPara, currPara, control);\n } else {\n //不是紧挨着的段落,则前一个段落是位于另一个容器里,例如:处于单元格内的段落\n //则不向前定位\n this.selectionState.resetRange(control, offset)\n }\n }\n } else {\n if (control instanceof TextGroupElement) {\n this.onDeleteText(control, offset - 1, 1);\n if (!control.textMeasures.length) {\n this.removeEmptyText(control);\n } else {\n this.selectionState.resetRange(control, offset - 1);\n }\n } else {\n if (control.parent instanceof InlineGroupInputElement && control instanceof DataDecorateElement) {\n const dataEle = control.parent;\n //空数据元,并且当前光标处于数据元开始位置\n if (this.canDeleteInlineGroup(dataEle)) {\n this.setCurosrForDeleteAction(dataEle);\n dataEle.remove();\n return;\n }\n if (control.isPrefix && this.viewOptions.docMode === DocMode.FormEdit) {\n if (this.jumpToPrevDataElement(dataEle)) {\n return;\n }\n }\n }\n if (control.isDecorate) {\n this.onBackspaceElement(control, 0);\n return;\n }\n this.removeElement(control);\n }\n }\n }\n\n /**\n * 跳到上一个数据元中\n * @param currEle\n */\n private jumpToPrevDataElement(currEle: InlineGroupInputElement): boolean {\n if (this.viewOptions.docMode !== DocMode.FormEdit) {\n return false;\n }\n const prevEle = ElementUtil.getPrevDataElement(this.docCtx, currEle as DataElementInlineGroup);\n if (!prevEle) {\n return false;\n }\n if (prevEle) {\n this.selectionState.resetRange(prevEle.endDecorate, 0);\n return true;\n }\n return false;\n }\n\n /**\n * delete删除\n * @param control\n * @param offset\n * @returns\n */\n private onKeyDeleteElement(control: LeafElement, offset: number): void {\n this.selectionState.clear();\n if (offset === ElementUtil.getElementEndOffset(control)) {\n const nextEle = ElementUtil.getRecursionNextSiblingElement(control, false, true, this.viewOptions);\n if (!nextEle) {\n this.selectionState.resetRange(control, -1);\n return;\n }\n if (ElementUtil.isInSameParagraph(control, nextEle)) {\n if (ElementUtil.getNextSiblingElement(control) === nextEle) {\n this.onKeyDeleteElement(nextEle, 0);\n } else {\n this.selectionState.resetRange(nextEle, 0);\n }\n } else {\n //需要判断是否是兄弟段落,兄弟段落,需要合并\n const nextPara = ElementUtil.getParentByType(nextEle, ParagraphElement) as ParagraphElement;\n const currPara = ElementUtil.getParentByType(control, ParagraphElement) as ParagraphElement;\n //表明是紧挨着的两个段落,要进行段落合并\n if (ElementUtil.getNextSiblingElement(currPara) === nextPara) {\n if (this.selectionState.enableTrackChanges) {\n this.selectionState.resetRange(nextEle, 0);\n return;\n }\n this.combineParagraph(nextPara, currPara, control);\n } else {\n //不是紧挨着的段落,则前一个段落是位于另一个容器里,例如:处于单元格内的段落\n //则不向前定位\n this.selectionState.resetRange(control, offset)\n }\n }\n } else {\n if (control instanceof TextGroupElement) {\n this.onDeleteText(control, offset, 1);\n if (!control.textMeasures.length) {\n this.removeEmptyText(control);\n } else {\n this.selectionState.resetRange(control, offset);\n }\n } else {\n if (control.parent instanceof DataElementInlineGroup && control instanceof DataDecorateElement) {\n const dataEle = control.parent as DataElementInlineGroup;\n //空数据元,并且当前光标处于数据元开始位置\n if (control.isPrefix) {\n if (this.canDeleteInlineGroup(dataEle)) {\n this.setCurosrForDeleteAction(dataEle);\n dataEle.remove();\n } else {\n this.selectionState.resetRange(control, -1);\n }\n return;\n } else if (!control.isPrefix && dataEle.length === 2) {\n this.selectionState.resetRange(dataEle.endDecorate, -1);\n return;\n }\n }\n if (control.isDecorate) {\n //this.onKeyDeleteElement(control, -1);\n return;\n }\n this.removeElement(control);\n }\n }\n }\n\n /**\n * 判断是否可以删除数据组\n * @param dataEle\n * @private\n */\n private canDeleteInlineGroup(dataEle: InlineGroupInputElement): boolean {\n if (this.viewOptions.docMode === DocMode.FormEdit) {\n return false;\n }\n return dataEle.length === 2;\n }\n\n private onDeleteText(text: TextGroupElement, offset: number, len: number): void {\n if (this.selectionState.enableTrackChanges) {\n this.updateDeletedTrackText(text, offset, len)\n } else {\n text.splice(offset, len)\n }\n }\n\n private onDeleteItem(item: LeafElement): void {\n if (this.selectionState.enableTrackChanges) {\n //删除符号不进行留痕\n if (item.type === 'psym') {\n return\n }\n this.onTrackDeleteElement(item);\n } else {\n item.remove();\n item.destroy();\n }\n }\n\n\n /**\n * 当前元素是否在留痕元素内\n * @param target\n * @param trackType\n * @returns\n */\n private isInCurrentUserTrack(target: Element, trackType: TrackRunTypeEnum): boolean {\n return target.parent instanceof TrackRunElement && target.parent.type === trackType && target.parent.props.userId === this.viewOptions.editUser.id;\n\n }\n\n private isInTrackElement(target: Element, trackType: TrackRunTypeEnum): boolean {\n return target.parent instanceof TrackRunElement && target.parent.type === trackType;\n\n }\n\n\n /**\n * 留痕除文本以外的其他元素\n * @param target\n */\n private onTrackDeleteElement(target: LeafElement): void {\n const parent = target.parent;\n if (this.isInTrackElement(target, TrackRunTypeEnum.Deleted)) {\n return;\n }\n //当前用户增加的内容,内容直接删除不需要留痕\n if (this.isInCurrentUserTrack(target, TrackRunTypeEnum.Inserted)) {\n target.remove();\n this.removeEmtpyInlineBlock(parent);\n return;\n }\n //target.remove();\n const trackEle = this.getNextTrackElement(target, TrackRunTypeEnum.Deleted);\n trackEle.addChild(target.clone(true), 0);\n target.remove();\n this.removeEmtpyInlineBlock(parent);\n }\n\n /**\n * 更新文本删除留痕\n */\n private updateDeletedTrackText(target: TextGroupElement, offset: number, len: number): void {\n if (this.isInTrackElement(target, TrackRunTypeEnum.Deleted)) {\n return;\n }\n //当前用户增加的内容,当前用户删除时不需要留痕\n if (this.isInCurrentUserTrack(target, TrackRunTypeEnum.Inserted)) {\n target.splice(offset, len);\n return;\n }\n //全部被删除\n if (offset === 0 && len === target.textMeasures.length) {\n const trackInputText = this.getNextTrackInputElement(target, TrackRunTypeEnum.Deleted);\n trackInputText.text = target.text + trackInputText.text;\n target.splice(0, len);\n //target.remove();\n return;\n }\n const {leftElement} = this.splitText(target, offset + len);\n target = leftElement as never;\n let trackText: TextGroupElement = this.getNextTrackInputElement(target, TrackRunTypeEnum.Deleted);\n const spText = target.spliceText(target.textMeasures.length - len, target.textMeasures.length, true);\n trackText.splice(0, 0, spText?.text);\n }\n\n\n private getNextTrackInputElement(target: Element, trackType: TrackRunTypeEnum): TextGroupElement {\n const trackElement = ElementUtil.getNextSiblingTrackElement(target, trackType, this.viewOptions.editUser.id)\n if (trackElement) {\n const firstEle = trackElement.getChild(0);\n if (firstEle && firstEle instanceof TextGroupElement) {\n return firstEle;\n } else {\n const newInput = new TextGroupElement();\n trackElement.addChild(newInput, 0);\n target.props.clone(newInput.props);\n return newInput;\n }\n } else {\n const {\n trackElement,\n newTextGroup\n } = this.createTextTrackElement(target, target.props, TrackRunTypeEnum.Deleted);\n target.parent.addChild(trackElement, target.getIndex() + 1);\n return newTextGroup;\n }\n }\n\n\n private getNextTrackElement(target: Element, trackType: TrackRunTypeEnum): TrackRunElement {\n let trackElement = ElementUtil.getNextSiblingTrackElement(target, trackType, this.viewOptions.editUser.id)\n if (!trackElement) {\n trackElement = this.createTrackElement(trackType);\n target.parent.addChild(trackElement, target.getIndex() + 1);\n }\n return trackElement;\n }\n\n\n /**\n * 删除元素并定位光标\n * @param control\n * @returns\n */\n private removeElement(control: LeafElement): void {\n const prevEle = ElementUtil.getRecursionPrevSiblingElement(control, false, true, this.viewOptions);\n if (!prevEle) {\n const nextEle = ElementUtil.getRecursionNextSiblingElement(control, true, true, this.viewOptions);\n if (nextEle) {\n this.selectionState.resetRange(nextEle, 0);\n control.remove();\n return;\n }\n this.selectionState.resetRange(control, 0);\n return;\n }\n if (ElementUtil.isInSameParagraph(control, prevEle)) {\n this.selectionState.resetRange(prevEle, -1);\n control.remove();\n return;\n } else {\n const nextEle = ElementUtil.getRecursionNextSiblingElement(control, true, true, this.viewOptions);\n if (nextEle && ElementUtil.getPrevSiblingElement(nextEle) === control) {\n this.selectionState.resetRange(nextEle, 0);\n control.remove();\n return;\n } else {\n this.selectionState.resetRange(prevEle, -1);\n control.remove();\n return;\n }\n }\n }\n\n\n /**\n * 回车事件\n */\n onEnter(): void {\n const {startControl} = this.selectionState;\n const paragraph = ElementUtil.getParentByType(startControl, ParagraphElement) as ParagraphElement;\n const breakPara = this.splitCurrentParagraph();\n //选中的是一个元素\n if (breakPara === paragraph) {\n const clonePara = paragraph.clone(false);\n breakPara.parent.addChild(clonePara, breakPara.getIndex());\n }\n this.selectionState.resetRange(breakPara, 0);\n\n }\n\n /**\n * 插入表格\n * @param tb\n * @returns\n */\n insertTable(tb: TableElement): void {\n const breakPara = this.splitCurrentParagraph();\n breakPara.parent.addChild(tb, breakPara.getIndex());\n this.selectionState.resetRange(tb, 0);\n }\n\n /**\n * 分割当前段落用于插入表格或者粘贴的内容\n * @param insertItems 分割后插入的内容,内容需要是block或者表格对象\n */\n private splitCurrentParagraph(): ParagraphElement {\n const {startControl, startOffset} = this.selectionState;\n const paragraph = ElementUtil.getParentByType(startControl, ParagraphElement) as ParagraphElement;\n const paraContainer = paragraph.parent;\n //如果选中的是段落第一个元素\n const firstLeaf = ElementUtil.getFirstLeafElement(paragraph);\n if ((startControl === firstLeaf && startOffset === 0) || (startControl === firstLeaf && startControl instanceof PSymbolElement)) {\n //this.selectionState.resetRange(paragraph, 0);\n return paragraph;\n }\n const last = ElementUtil.getLastLeafElement(paragraph) as LeafElement;\n const selectedParaRange = RangeUtil.getSelctionRange(startControl, startOffset, last, 1, paragraph);\n selectedParaRange.isFullSelected = false;\n const breakPara = ElementUtil.cloneRange(selectedParaRange, true) as ParagraphElement;\n ElementUtil.fixParagraphContent(paragraph);\n ElementUtil.fixParagraphContent(breakPara);\n paraContainer.addChild(breakPara, paragraph.getIndex() + 1);\n //paraContainer.addChild(tb, breakPara.getIndex());\n //this.selectionState.resetRange(breakPara, 0);\n return breakPara;\n }\n\n /**\n * 合并段落\n */\n combineParagraph(prevPara: ParagraphElement, currPara: ParagraphElement, currElement: Element): void {\n const prevParaLength = prevPara.length;\n for (let i = 0; i < currPara.length; i++) {\n const child = currPara.getChild(i).clone(true);\n prevPara.addChild(child);\n }\n //currPara.remove();\n const currParaContainer = currPara.parent;\n currPara.destroy();\n currParaContainer.removeChild(currPara);\n this.selectionState.resetRange(prevPara.getChild(prevParaLength), 0);\n }\n\n /**\n * 删除选中的区域内容\n * @param range\n */\n deleteRange(range: SelectionContentRange): void {\n const {selectedChildren} = range;\n for (let i = selectedChildren.length - 1; i >= 0; i--) {\n const childRange = selectedChildren[i];\n const {target: childTarget, isFullSelected: childFullSelected} = childRange;\n if (childTarget instanceof LeafElement && !childTarget.isDecorate) {\n if (childFullSelected) {\n this.onDeleteItem(childTarget);\n } else if (childTarget instanceof TextGroupElement) {\n const {startOffset, endOffset} = childRange;\n this.onDeleteText(childTarget, startOffset, endOffset - startOffset);\n }\n } else if (childTarget instanceof BranchElement) {\n //留痕模式\n if (this.selectionState.enableTrackChanges) {\n this.deleteRange(childRange);\n } else {\n //表格全选状态时,执行删除操作\n if (childTarget instanceof TableElement && childFullSelected) {\n childTarget.remove();\n childTarget.destroy();\n }\n //段落全选状态时,执行删除操作\n else if (childTarget instanceof BlockContentElement && childFullSelected) {\n childTarget.remove();\n childTarget.destroy();\n } else if (childTarget instanceof InlineGroupElement && childFullSelected) {\n childTarget.remove();\n childTarget.destroy();\n } else {\n this.deleteRange(childRange);\n }\n }\n }\n }\n }\n\n\n /**\n * 表单区域删除处理\n * @param range\n * @returns\n */\n private deleteRangeInFormEdit(range: SelectionContentRange): void {\n const dataElement = ElementUtil.getDataElement(range.target);\n //在数据元内删除,调用普通的删除处理\n if (dataElement) {\n this.deleteRange(range);\n return;\n }\n //在数据元外删除\n else {\n this.loopForDelDataEleRange(range);\n }\n }\n\n /**\n * 表单模式:删除选中的区域内容\n */\n private loopForDelDataEleRange(range: SelectionContentRange): void {\n const {selectedChildren} = range;\n for (let i = selectedChildren.length - 1; i >= 0; i--) {\n const childRange = selectedChildren[i];\n const {target: childTarget} = childRange;\n if (childTarget instanceof BranchElement) {\n if (childTarget instanceof DataElementInlineGroup) {\n const dataEleProps = childTarget.props as DataEleBaseProps;\n //数据元可编辑\n if (dataEleProps.editable) {\n this.deleteRange(childRange);\n }\n } else {\n this.loopForDelDataEleRange(childRange)\n }\n }\n }\n }\n\n\n /**\n * 向目标移动元素\n * @param targetElement\n * @param targetOffset\n * @param moveElement\n * @param moveOffset\n * @param ss\n */\n moveElement(targetElement: Element, targetOffset: number, moveElement: Element, moveOffset: number, ss: SelectionState): void {\n moveElement.remove();\n if (targetElement instanceof TextGroupElement) {\n const {leftElement, rightElement} = this.splitText(targetElement, targetOffset);\n if (leftElement) {\n leftElement.parent.addChild(moveElement, leftElement.getIndex() + 1)\n } else if (rightElement) {\n rightElement.parent.addChild(moveElement, rightElement.getIndex())\n }\n } else {\n targetElement.parent.addChild(moveElement, targetElement.getIndex() + targetOffset);\n }\n ss.resetRange(moveElement, moveOffset);\n }\n\n /**\n * 向指定的目标插入元素\n * @param targetElement\n * @param targetOffset\n * @param destEleArray\n */\n insertElement(targetElement: Element, targetOffset: number, destEleArray: Array<Element>): Element | null {\n let lastEle!: Element | null;\n if (targetElement instanceof TextGroupElement) {\n const {leftElement, rightElement} = this.splitText(targetElement, targetOffset);\n if (leftElement) {\n for (let i = 0; i < destEleArray.length; i++) {\n lastEle = destEleArray[i];\n leftElement.parent.addChild(lastEle, leftElement.getIndex() + 1 + i);\n }\n } else if (rightElement) {\n for (let i = 0; i < destEleArray.length; i++) {\n lastEle = destEleArray[i]\n rightElement.parent.addChild(lastEle, rightElement.getIndex());\n }\n }\n } else {\n for (let i = 0; i < destEleArray.length; i++) {\n lastEle = destEleArray[i]\n targetElement.parent.addChild(lastEle, targetElement.getIndex() + targetOffset);\n }\n }\n return lastEle;\n }\n\n\n /**\n * 根据开始位置和结束位置,将字符切割成指定的区间\n * @param splitTextUnit\n * @param start\n * @param end\n * @returns\n */\n static splitTextGroupByRange(text: TextGroupElement, start: number, end: number): TextGroupElement | null {\n end = end === -1 ? text.textMeasures.length : end;\n if (start === end) {\n return null;\n }\n if (start === 0 && end === text.textMeasures.length) {\n return text;\n }\n if (start === text.textMeasures.length) {\n return null;\n }\n let lastTextGroup = text.spliceText(end, -1, true);\n let middleTextGroup = text.spliceText(start, -1, true);\n if (lastTextGroup) {\n text.parent.addChild(lastTextGroup, text.getIndex() + 1);\n }\n if (!middleTextGroup) {\n throw new Error('middleText is null');\n }\n text.parent.addChild(middleTextGroup, text.getIndex() + 1);\n\n if (text.textMeasures.length === 0) {\n text.remove();\n text.destroy();\n }\n return middleTextGroup;\n }\n\n splitText(text: TextGroupElement, offset: number): { leftElement: TextGroupElement | null, rightElement: TextGroupElement | null } {\n offset = offset == -1 ? text.textMeasures.length : offset;\n if (offset === text.textMeasures.length) {\n return {\n leftElement: text,\n rightElement: null\n }\n }\n if (offset === 0) {\n return {\n leftElement: null,\n rightElement: text\n }\n }\n const rightText = text.spliceText(offset, -1, true);\n if (rightText) {\n text.parent.addChild(rightText, text.getIndex() + 1);\n }\n let leftText: TextGroupElement | null = text;\n if (text.textMeasures.length === 0) {\n text.remove();\n leftText = null;\n }\n return {\n leftElement: leftText,\n rightElement: rightText\n }\n }\n\n /**\n * 设置选中的文本样式\n * @param ss\n * @param setterFunc\n * @returns\n */\n static setTextStyle(ss: SelectionState, setterFunc: (text: TextGroupElement) => void): void {\n const range = ss.selectedRange;\n if (!range || ss.collapsed) {\n return;\n }\n const newSelectionRange = new SelectionRange();\n const startRange = ElementUtil.getFirstSelectedRange(range);\n const endRange = ElementUtil.getLastSelectedRange(range);\n this.recursionSetRangeTextStyle(range, setterFunc);\n if (startRange === endRange) {\n if (startRange.isFullSelected) {\n newSelectionRange.setStart(startRange.target, 0);\n newSelectionRange.setEnd(startRange.target, -1);\n }\n if (startRange.target instanceof TextGroupElement) {\n const startSelectedOffset = ss.startOffset;\n const endSelectedOffset = ss.endOffset;\n const middleElement = this.splitTextGroupByRange(startRange.target, startSelectedOffset, endSelectedOffset);\n if (middleElement) {\n setterFunc(middleElement);\n newSelectionRange.setStart(middleElement, 0);\n newSelectionRange.setEnd(middleElement, -1);\n }\n }\n } else {\n if (startRange.isFullSelected) {\n newSelectionRange.setStart(startRange.target, 0);\n } else {\n if (startRange.target instanceof TextGroupElement) {\n const middleElement = this.splitTextGroupByRange(startRange.target, startRange.startOffset, -1);\n if (middleElement) {\n setterFunc(middleElement);\n newSelectionRange.setStart(middleElement, 0);\n } else {\n newSelectionRange.setStart(startRange.target, 0);\n }\n } else {\n newSelectionRange.setStart(startRange.target, startRange.startOffset);\n }\n }\n if (endRange.isFullSelected) {\n newSelectionRange.setEnd(endRange.target, -1);\n } else {\n if (endRange.target instanceof TextGroupElement) {\n const middleElement = this.splitTextGroupByRange(endRange.target, 0, endRange.endOffset);\n if (middleElement) {\n setterFunc(middleElement);\n newSelectionRange.setEnd(middleElement, -1);\n } else {\n newSelectionRange.setStart(endRange.target, 0);\n }\n\n } else {\n newSelectionRange.setEnd(endRange.target, endRange.endOffset);\n }\n }\n }\n ss.addRange(newSelectionRange);\n }\n\n private static recursionSetRangeTextStyle(range: SelectionContentRange, setterFunc: (text: TextGroupElement) => void): void {\n RangeUtil.recursionTraversalRangeHandler(range, (itemRange) => {\n if (itemRange.target instanceof TextGroupElement && itemRange.isFullSelected) {\n setterFunc(itemRange.target)\n }\n })\n }\n\n\n static setParaAlign(ss: SelectionState, setterFunc: (tp: ParagraphProps) => void): void {\n if (ss.collapsed && ss.startControl) {\n const para = ElementUtil.getParentByType(ss.startControl, ParagraphElement);\n if (para) {\n setterFunc(para.props);\n }\n } else {\n const range = ss.selectedRange;\n if (!range) {\n return;\n }\n RangeUtil.recursionTraversalRangeHandler(range, (itemRange) => {\n if (itemRange.target instanceof ParagraphElement) {\n setterFunc(itemRange.target.props);\n }\n })\n }\n\n }\n\n\n /**\n * 复制\n * @param evt\n * @returns\n */\n onCopy(evt: ClipboardEvent): void {\n evt.preventDefault();\n const copySerializeStr = ElementSerialize.getSelectedJSON(this.selectionState, this.viewOptions);\n if (!copySerializeStr) {\n return;\n }\n evt.clipboardData?.setData('doc/plain', copySerializeStr);\n const copyStr = ElementSerialize.getSelectedText(this.selectionState, this.viewOptions);\n evt.clipboardData?.setData('text/plain', copyStr);\n }\n\n /**\n * 剪切\n * @param evt\n */\n onCut(evt: ClipboardEvent): void {\n this.onCopy(evt);\n this.onRangeDelete();\n }\n\n /**\n * 粘贴\n * @param evt\n * @returns\n */\n onPaste(evt: ClipboardEvent): void {\n evt.preventDefault();\n let pasteText = evt.clipboardData?.getData('text/plain');\n const pasteData = evt.clipboardData?.getData('doc/plain');\n if (!pasteData) {\n if (pasteText) {\n this.pastePlainText(pasteText);\n }\n return;\n }\n const pasteElement = this.eleReader.readElement(JSON.parse(pasteData));\n if (!pasteElement) {\n console.log('粘贴反序列化数据失败', pasteData);\n return;\n }\n const {collapsed} = this.selectionState;\n let {startControl, startOffset} = this.selectionState;\n if (!collapsed) {\n //TODO:如果一个容器内的元素被全部删除,则返回 null\n // const { cursorEle, cursorOffset } = this.onRangeDelete();\n // startControl = cursorEle;\n // startOffset = cursorOffset;\n }\n if (!startControl) {\n return;\n }\n //表单模式:如果复制的是单格式的文本,需要序列化为纯文本处理\n if (this.viewOptions.docMode === DocMode.FormEdit) {\n const pasteString = ElementSerialize.serializeString(pasteElement, {all: false});\n if (pasteString) {\n this.pastePlainText(pasteString);\n }\n return;\n }\n if (pasteElement instanceof ParagraphElement || pasteElement instanceof InlineGroupElement) {\n const children: Array<Element> = [];\n if (pasteElement instanceof ParagraphElement) {\n children.push(...ElementUtil.getChildrenElements(pasteElement));\n } else if (pasteElement instanceof InlineGroupElement) {\n //当前粘贴的元素为数据元,并且在数据元内部粘贴\n if (IsInSideDataElement(startControl, startOffset) && pasteElement instanceof DataElementInlineGroup) {\n const pasteChildren = pasteElement.getInnerItems().map(item => item.clone(true))\n children.push(...pasteChildren)\n } else {\n children.push(pasteElement);\n }\n }\n if (!children.length) {\n throw new Error('段落子元素为空');\n }\n const lastEle = this.insertElement(startControl, startOffset, children) as Element;\n this.selectionState.resetRange(lastEle, -1);\n return;\n }\n console.log('粘贴:' + pasteData);\n }\n\n insertSoftBr(): void {\n let {startControl, startOffset} = this.selectionState;\n const lastEle = this.insertElement(startControl, startOffset, [new BreakElement()]) as Element;\n const focusEle = ElementUtil.getNextSiblingElement(lastEle);\n if (focusEle) {\n this.selectionState.resetRange(focusEle, 0);\n }\n\n }\n\n /**\n * 处理黏贴的纯文本\n * @param text\n */\n private pastePlainText(text: string): void {\n const textItems = text.split(/\\r?\\n/);\n const {startControl, startOffset} = this.selectionState;\n if (this.viewOptions.docMode === DocMode.FormEdit || textItems.length === 1 || IsInSideInlineGroupInputElement(startControl, startOffset)) {\n text = text.replace(/[\\n\\r]/g, '');\n this.newInput({\n data: text,\n compositionStartInfo: {\n element: startControl,\n offset: startOffset\n }\n })\n } else {\n const breakPara = this.splitCurrentParagraph();\n for (let i = 0; i < textItems.length; i++) {\n const newPara = breakPara.clone(false) as ParagraphElement;\n const inputTextProps = this.getDefaultTextPropsByOptions();\n const newTextEle = ElementUtil.getNewTextGroup(inputTextProps);\n newTextEle.text = textItems[i];\n newPara.addChild(newTextEle, 0);\n breakPara.parent.addChild(newPara, breakPara.getIndex());\n }\n this.selectionState.resetRange(breakPara, 0);\n }\n }\n\n /**\n * 设置当前段落项目符号类型\n */\n setParagraphNumberType(): void {\n const {startControl} = this.selectionState;\n if (!startControl) {\n return;\n }\n const para = ElementUtil.getParentByType(startControl, ParagraphElement) as ParagraphElement;\n const format: Partial<ParagraphProps> = {};\n if (para.props.numberType >= 0) {\n format.numberType = -1;\n format.indent = 0;\n } else {\n format.numberType = 0;\n format.indent = 15;\n }\n para.setFormat(format);\n }\n\n /**\n * 插入批注\n */\n insertComment(): void {\n const {startControl, startOffset, endControl, endOffset, collapsed} = this.selectionState;\n if (collapsed || !startControl || !endControl) {\n return;\n }\n const id = nanoid(5);\n const startCommMark = new CommentElement();\n startCommMark.props.id = id;\n startCommMark.props.markType = 'start';\n\n const endCommMark = new CommentElement();\n endCommMark.props.id = id;\n endCommMark.props.markType = 'end';\n\n this.insertElement(endControl, endOffset, [endCommMark])\n this.insertElement(startControl, startOffset, [startCommMark])\n\n const commContent = new CommContentElement();\n commContent.props.id = id;\n commContent.props.createId = this.viewOptions.editUser.id;\n commContent.props.createName = this.viewOptions.editUser.name;\n commContent.props.createDate = new Date();\n const pos = this.docComment.getCommMarkIndex(startCommMark);\n if (pos < 0) {\n throw new Error('获取插入的批注位置不正确');\n }\n this.docCtx.document.commentsContainerElement.addChild(commContent, pos);\n this.selectionState.clear();\n\n this.docComment.afterCommentsChanged();\n }\n\n validate(): boolean {\n const dataEleList = this.docCtx.document.treeFilter(item => item instanceof DataElementInlineGroup) as Array<DataElementInlineGroup>;\n const errorEleList = dataEleList.map(item => ({error: item.validate(), ele: item})).filter(item => item.error);\n if (!errorEleList.length) {\n return true;\n }\n errorEleList.forEach(item => {\n const id = nanoid(5);\n const startCommMark = new CommentElement();\n startCommMark.props.id = id;\n startCommMark.props.markType = 'start';\n\n const endCommMark = new CommentElement();\n endCommMark.props.id = id;\n endCommMark.props.markType = 'end';\n\n item.ele.addChild(startCommMark, 0);\n item.ele.addChild(endCommMark, item.ele.length)\n const caption = CommonUtil.nullToString(item.ele.props.caption);\n const validateElement = new ValidateElement();\n validateElement.props.title = caption + '验证';\n validateElement.props.id = id;\n validateElement.setContent(item.error);\n\n const pos = this.docComment.getCommMarkIndex(startCommMark);\n this.docCtx.document.commentsContainerElement.addChild(validateElement, pos);\n\n\n })\n this.docCtx.selectionState.clear();\n this.docComment.afterCommentsChanged();\n\n return false;\n }\n\n /**\n * 移除空字符串\n * @param text\n */\n removeEmptyText(text: TextGroupElement): void {\n //const nextLeafElementInPara = ElementUtil.getRecursionNextSiblingElement(text, true, true); getComputedStyle\n this.setCurosrForDeleteAction(text);\n const parent = text.parent;\n text.remove();\n this.removeEmtpyInlineBlock(parent);\n }\n\n setCurosrForDeleteAction(control: Element): void {\n const cursorInfo = this.getCursorElementByDeleteAction(control);\n if (cursorInfo) {\n this.selectionState.resetRange(cursorInfo.ele, cursorInfo.offset);\n } else {\n this.selectionState.clear();\n }\n }\n\n getCursorElementByDeleteAction(control: Element): { ele: LeafElement, offset: number } | null {\n const prevLeafElementInPara = ElementUtil.getRecursionPrevSiblingElement(control, false, true, this.viewOptions);\n //判断是否为同一段落\n if (prevLeafElementInPara && ElementUtil.isInSameParagraph(prevLeafElementInPara, control)) {\n return {\n ele: prevLeafElementInPara,\n offset: ElementUtil.getElementEndOffset(prevLeafElementInPara)\n }\n }\n //同一段落其他元素\n const nextLeafElementInPara = ElementUtil.getRecursionNextSiblingElement(control, true, true, this.viewOptions);\n if (nextLeafElementInPara) {\n return {\n ele: nextLeafElementInPara,\n offset: 0\n }\n }\n //上一段落\n if (prevLeafElementInPara) {\n return {\n ele: prevLeafElementInPara,\n offset: prevLeafElementInPara instanceof PSymbolElement ? 0 : ElementUtil.getElementEndOffset(prevLeafElementInPara)\n }\n }\n return null;\n }\n\n /**\n * 移除空行内标签\n * @param ele\n */\n removeEmtpyInlineBlock(ele: Element): void {\n if (ele instanceof InlineGroupElement && ele.length === 0) {\n const parent = ele.parent;\n ele.remove();\n this.removeEmtpyInlineBlock(parent);\n }\n }\n\n /**\n * 插入强制换页符号\n */\n insertPageBreakPara(): void {\n const {startControl} = this.selectionState;\n const currPara = ElementUtil.getParentByType(startControl, ParagraphElement)\n if (!currPara) {\n return;\n }\n if (currPara.parent instanceof DocumentBodyElement) {\n const pageBreak = new ParagraphElement();\n pageBreak.props.pageBreak = true;\n pageBreak.props.textAlign = 'center';\n pageBreak.parent.addChild(pageBreak);\n }\n }\n\n\n}\n","import {EditorContext} from \"./document-context\";\nimport {SelectionState} from \"./document-selection\";\nimport {OrientType, PageOptions, ViewOptions} from \"./element-define\";\nimport {ElementPaint} from \"./element-paint\";\nimport {ElementUtil} from \"./element-util\";\nimport {DocumentRenderObject} from \"./impl/document/doc-impl\";\nimport {PaintContent, RenderContext} from \"./render-context\";\n\nexport class documentPrint {\n static print(ss: SelectionState, viewOptions: ViewOptions, docCtx: EditorContext, printRanges: Array<number> | null = null): void {\n const renderCanvasNodes = this.getRenderCanvasNodes(ss, viewOptions, docCtx, printRanges);\n if (!renderCanvasNodes.length) {\n console.warn('无可打印节点');\n return;\n }\n printNodes(renderCanvasNodes, { ...docCtx.document.props });\n }\n\n /**\n * 获取绘制的canvas节点\n * @param ss \n * @param viewOptions \n * @param docCtx \n * @param printRanges \n * @returns \n */\n private static getRenderCanvasNodes(ss: SelectionState, viewOptions: ViewOptions, docCtx: EditorContext, printRanges: Array<number> | null = null): Array<HTMLCanvasElement> {\n const { scale,docPageSettings:{width, height }} = viewOptions;\n const dc = ss.renderContainer;\n const canvasList: Array<HTMLCanvasElement> = [];\n const printPages: Array<DocumentRenderObject> = [];\n for (let i = 0; i < dc.length; i++) {\n if (!printRanges || printRanges.some(pageIndex => pageIndex === i)) {\n printPages.push(<DocumentRenderObject>dc.getChild(i));\n }\n }\n for (let i = 0; i < printPages.length; i++) {\n const canvasNode = document.createElement('canvas');\n canvasNode.style.cursor = 'text';\n canvasNode.style.width = width + 'px';\n canvasNode.style.height = height + 'px';\n const ctx = canvasNode.getContext('2d') as CanvasRenderingContext2D;\n ElementUtil.setCanvasProps(canvasNode, ctx, viewOptions.docPageSettings);\n const renderCtx = new RenderContext(new PaintContent(ctx));\n renderCtx.init({width,height,scale});\n renderCtx.drawMode = 'print';\n const doc = printPages[i];\n const tmp = ElementUtil.cloneRect(doc.rect);\n doc.rect.x = 0;\n doc.rect.y = 0;\n ElementPaint.drawPage(renderCtx,docCtx, doc, { x: 0, y: 0 });\n renderCtx.overlaysContext.clear();\n renderCtx.mainContext.fillRect(0, 0, width, height, 'white');\n renderCtx.commit({width,height,scale});\n doc.rect = tmp;\n canvasList.push(canvasNode);\n }\n return canvasList\n }\n\n /**\n * 导出base64\n * @param ss \n * @param viewOptions \n * @param docCtx \n * @param printRanges \n * @returns \n */\n static exportCanvasNodes(ss: SelectionState, viewOptions: ViewOptions, docCtx: EditorContext, printRanges: Array<number> | null = null): Array<HTMLCanvasElement> {\n return this.getRenderCanvasNodes(ss, viewOptions, docCtx, printRanges);\n }\n\n\n /**\n * 当前当前页\n * @param ss \n * @param viewOptions \n */\n static printCurrPage(ss: SelectionState, viewOptions: ViewOptions, docCtx: EditorContext,): void {\n const { startHitInfo } = ss;\n if (!startHitInfo) {\n return;\n }\n const docPage = ElementUtil.getParentRender(startHitInfo.render, DocumentRenderObject);\n if (!docPage) {\n return;\n }\n this.print(ss, viewOptions, docCtx, [docPage.getIndex()]);\n }\n}\n\n\nexport function createPrintTemplate({ width, height, orient }: PageOptions): string {\n return `\n <!DOCTYPE html>\n <html lang=\"zh\">\n <head>\n <meta charset=\"UTF-8\">\n <title></title>\n <style >\n html,\n body {\n margin: 0;\n padding: 0;\n }\n * {\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n }\n @page {\n size: ${orient};\n margin: 0;\n }\n div {\n width: ${width}mm;\n min-height: ${height}mm;\n font-size: 0;\n }\n @media print {\n @page {\n size: ${orient};\n margin: 0;\n }\n html,\n body {\n width: ${width}mm;\n height: ${height}mm;\n }\n div {\n width: initial;\n min-height: initial;\n }\n }\n </style>\n </head>\n <body></body>\n </html>\n `.replace(/\\n/g, '').replace(/\\s+/g, ' ').replace(/'/g, '\\\\\\'');\n}\n\n\ntype PrintPaperOptions = {\n width: number;\n height: number;\n orient: OrientType;\n};\n\n/**\n * 打印DOM\n * @param printNodes \n * @param options \n * @returns \n */\nexport function printNodes(printNodes: Array<Node>, options: PrintPaperOptions): void {\n const printIFrame = document.createElement(\"iframe\") as HTMLIFrameElement;\n printIFrame.src = 'about:blank';\n printIFrame.style.borderWidth = '0';\n printIFrame.style.height = \"0\";\n printIFrame.style.display = 'none';\n document.body.appendChild(printIFrame);\n printIFrame.contentWindow?.document.open(\"text/html\", \"printer\");\n if (!printNodes.length) {\n console.warn('无可打印节点');\n return;\n }\n const printSize: PageOptions = new PageOptions(options.width, options.height, options.orient);\n const iframeHTML = createPrintTemplate(printSize);\n printIFrame.contentWindow?.document.write(iframeHTML);\n printIFrame.contentWindow?.document.close();\n for (let i = 0; i < printNodes.length; i++) {\n const item = printNodes[i];\n const div = document.createElement('div');\n div.appendChild(item);\n printIFrame.contentWindow?.document.body.appendChild(div)\n }\n printIFrame.contentWindow?.document.body.focus();\n setTimeout(() => {\n printIFrame.contentWindow?.print();\n printIFrame.parentNode?.removeChild(printIFrame);\n }, 0);\n}\n\n/**\n * canvas节点导出到PDF\n * @param fileName \n * @param nodes \n * @param options \n */\n// export function exportCanvasToPDF(fileName: string, nodes: Array<HTMLCanvasElement>, options: PrintPaperOptions): void {\n// if (!fileName) {\n// fileName = 'document.pdf';\n// } else {\n// fileName = fileName.replace(/[\\/\\\\:*?\"<>|]/g, '_');\n// if (!fileName.endsWith('.pdf')) {\n// fileName += '.pdf';\n// }\n// }\n// const pdf = new jsPDF(options.orient, 'px', [options.width, options.height]);\n// for (let i = 0; i < nodes.length; i++) {\n// const canvas = nodes[i];\n// const imgData = canvas.toDataURL('image/jpeg', 1.0);\n// pdf.addImage(imgData, 'JPEG', 0, 0, options.width, options.height);\n// if (i < nodes.length - 1) {\n// pdf.addPage();\n// }\n// }\n// pdf.save(fileName);\n// }","import { PaddingProps } from \"./element-define\";\nimport { DocumentProps } from \"./element-props\";\nimport { DocumentBodyElement } from \"./impl/document/doc-body-impl\";\nimport { DocumentFooterElement } from \"./impl/document/doc-footer-impl\";\nimport { DocumentHeaderElement } from \"./impl/document/doc-header-impl\";\nimport { DocumentElement } from \"./impl/document/doc-impl\";\n\nexport class DocumentTemplate {\n static createA4Doc(): DocumentElement {\n const doc = new DocumentElement();\n doc.props = new DocumentProps();\n doc.props.width = 210;\n doc.props.height = 297;\n doc.props.padding = new PaddingProps(25.4, 25.4, 19.1, 19.1);\n doc.addChild(new DocumentHeaderElement());\n doc.addChild(new DocumentBodyElement());\n doc.addChild(new DocumentFooterElement());\n return doc;\n }\n}","import { EditorContext } from \"./document-context\";\n\nexport class DocumentEvalFunc {\n constructor(public docCtx: EditorContext) {\n\n }\n scriptsFunc!: (() => void) | null;\n\n /**\n * 实例化动态脚本\n */\n initScripts(scripts: string): void {\n this.destroyScripts();\n if (scripts) {\n try {\n const func = new Function(\"docCtx\", scripts)\n this.scriptsFunc = func(this.docCtx);\n } catch (e) {\n console.error(\"自定义标本解析错误\", e);\n }\n\n }\n // const func = (docCtx: DocumentContext) => {\n // const sexELe = docCtx.getControlById('NqoYI')\n // const dyEle = docCtx.getControlById('gTuBI');\n // return () => {\n // if (sexELe && dyEle) {\n // const sexValue = sexELe.getValue();\n // const dyValue = sexValue === '1' ? '男的吗' : sexValue === '2' ? '女的吗' : '难道是人妖吗';\n // dyEle.setValue(dyValue);\n // }\n // };\n // };\n }\n\n /**\n * 销毁动态脚本实例\n */\n destroyScripts(): void {\n if (this.scriptsFunc) {\n this.scriptsFunc = null;\n }\n }\n\n /**\n * 触发动态脚本\n */\n invokedScripts(): void {\n this.scriptsFunc?.();\n }\n\n\n}\n","import { IImageLoader, ImageSourceItem } from \"./document-context\";\nimport { ImgLoadStatus } from \"./element-define\";\n\n\nexport abstract class DocumentImagesBaseLoader implements IImageLoader {\n images: Array<ImageSourceItem> = [];\n\n clear(): void {\n this.images.length = 0;\n }\n\n loadImage(src: string, onCallback: (status: ImgLoadStatus) => void): void {\n if (!src) {\n return;\n }\n //已经存在的资源不需要重新加载\n let matchItem = this.images.find(item => item.src === src);\n if (matchItem) {\n if (matchItem.loadStatus === 'no') {\n matchItem.cbs.push(onCallback);\n } else {\n onCallback(matchItem.loadStatus);\n }\n return;\n }\n const task = this.createRequestImage(src);\n const imgItem: ImageSourceItem = {\n ele: undefined as any,\n src,\n cbs: [onCallback],\n loadStatus: 'no',\n task\n };\n this.images.push(imgItem)\n // if (this.viewOptions.resourceMode === 'immediate') {\n // ele.onload = (e) => { this.invokeImgLoad(src, 'completed'); };\n // ele.onerror = (e) => { this.invokeImgLoad(src, 'error'); };\n // }\n }\n\n abstract createRequestImage(url: string): Promise<void>;\n\n invokeImgLoad(src: string, status: ImgLoadStatus, data: any): void {\n const img = this.images.find(item => item.src === src);\n if (img) {\n img.loadStatus = status;\n img.cbs.forEach(cb => cb(status));\n img.ele = data;\n }\n }\n\n getLoadTasks(): Array<Promise<void>> {\n return this.images.map(item => item.task);\n }\n\n\n getImage(src: string): HTMLImageElement | undefined {\n const img = this.images.find(item => item.src === src);\n return img?.ele;\n }\n\n /**\n * 判断图片是否都已经加载完毕\n * 用于打印时判断,如果当前图片没有加载完毕就打印,图片是打印不出来\n * @returns \n */\n imagesLoadCompleted(): boolean {\n if (this.images.length === 0) {\n return true;\n }\n return this.images.every(item => ['completed', 'error'].includes(item.loadStatus))\n }\n}\n\nexport class DocumentImagesLoader extends DocumentImagesBaseLoader {\n createRequestImage(url: string): Promise<void> {\n const ele = new Image();\n ele.src = url;\n return new Promise<void>((r, i) => {\n ele.onload = (e) => { this.invokeImgLoad(url, 'completed', ele); r(); };\n ele.onerror = (e) => { this.invokeImgLoad(url, 'error', ele); r(); };\n });\n\n }\n\n}","import {DocumentEvalFunc} from \"./document-eval-func\";\nimport {DocumentImagesLoader} from \"./document-images-loader\";\nimport {SelectionState} from \"./document-selection\";\nimport {\n BranchElement,\n Element,\n ElementHandler,\n elementTypeEventHandler,\n ImgLoadStatus,\n ModifyFlag,\n Rect,\n RefreshType,\n ViewOptions\n} from \"./element-define\";\nimport {ElementEvent, EventTypes} from \"./element-event-define\";\nimport {DataElementValueStruct, ElementSerialize} from \"./element-serialize\";\nimport {\n DataElementCheck,\n DataElementInlineGroup,\n DataElementLeaf,\n DocumentBodyPartElement,\n DocumentElement,\n TrackRunElement,\n TrackRunTypeEnum,\n validateDataEle\n} from \"./impl\";\nimport {ElementUtil} from \"./element-util\";\nimport {DocumentChange} from \"./document-change\";\nimport {CommonUtil} from \"./common-util\";\n\ninterface RegisterTypeHandlerProps<T extends Element> {\n elementType: { new(...args: any): T },\n eventName: EventTypes,\n handler: <E extends ElementEvent>(e: E) => void,\n useCapture: boolean\n}\n\n/**\n * 当前打开的文档的上下文信息,当前文档所有的属性设置都暴露在上下文中\n */\nexport class EditorContext {\n isDirty: boolean = false;\n cursorRect!: Rect | null;\n private _document!: DocumentElement;\n //文档刷新的订阅事件\n //refSub!: Subscription;\n syncRefresh!: () => void;\n imageLoader: IImageLoader;\n dynamicFunc: DocumentEvalFunc;\n docChange!: DocumentChange;\n clearPrevDocCb!: (() => void) | null;\n //绘制结束之后回调函数\n paintedCallback!: (() => void) | null;\n\n constructor(public readonly selectionState: SelectionState, public readonly viewOptions: ViewOptions) {\n this.dynamicFunc = new DocumentEvalFunc(this);\n this.imageLoader = new DocumentImagesLoader();\n this.selectionState.onChangedEvent.subscribe(() => {\n this.syncRefresh?.();\n });\n }\n\n public setPaintedCallback(cb: (() => void) | null) {\n this.paintedCallback = cb;\n }\n\n public get document(): DocumentElement {\n return this._document;\n }\n\n public set document(value: DocumentElement) {\n this.clearPrevDocCb?.();\n this._document = value;\n this.initScripts();\n // this.refSub = this._document.refreshSubject.subscribe((data) => {\n // data = data ?? 'content';\n // this.isDirty = this.isDirty || data === 'content';\n // this.syncRefresh?.(data);\n // });\n const docRefreshSub = this._document.refreshSubject.subscribe(() => {\n this.syncRefresh?.();\n });\n const docChangedSub = this._document.onChangeSubject.subscribe(() => {\n this.syncRefresh?.();\n });\n this.syncRefresh();\n this.clearPrevDocCb = () => {\n docRefreshSub.unsubscribe();\n docChangedSub.unsubscribe();\n if (this._document) {\n\n this.selectionState?.renderContainer?.destroy();\n this.clear();\n this._document.destroy();\n }\n this.clearPrevDocCb = null;\n }\n }\n\n clear(): void {\n this.selectionState.clear();\n this.imageLoader.clear();\n ;\n this.dynamicFunc.destroyScripts();\n this.isDirty = false;\n }\n\n get defaultCtx(): DocumentContext {\n return new DocumentContext(this._document, this.selectionState);\n }\n\n getCurrentCtx(ele: Element): DocumentContext {\n const parentCtx = ElementUtil.getParent(ele, (item) => item instanceof DocumentElement || item instanceof DocumentBodyPartElement) as BranchElement;\n return new DocumentContext(parentCtx, this.selectionState);\n }\n\n /**\n * 根据当前选区,返回所在的上下文元素,返回类型为DocumentElement|DocumentBodyPartElement\n */\n getCurrentEleCtx(): BranchElement | null {\n const {startControl} = this.selectionState;\n if (!startControl) {\n return null;\n }\n return ElementUtil.getParent(startControl, (item) => item instanceof DocumentElement || item instanceof DocumentBodyPartElement) as BranchElement;\n }\n\n getCtx(ele: BranchElement): DocumentContext {\n return new DocumentContext(ele, this.selectionState);\n }\n\n\n registerTypeHandlers<T extends Element = Element, F extends ElementEvent = ElementEvent>(elementType: any, eventName: EventTypes, handler: ElementHandler<F>, useCapture: boolean = false): void {\n if (elementTypeEventHandler.find(item => item.ctx === this && item.elementType === elementType && item.eventName === eventName && item.useCapture === useCapture)) {\n return;\n }\n const temp = handler as ElementHandler<ElementEvent>;\n elementTypeEventHandler.push({\n elementType,\n eventName,\n handler: temp,\n useCapture,\n ctx: this\n })\n }\n\n\n destroy(): void {\n this.clear();\n this.document.destroy();\n this.clearPrevDocCb?.();\n //this.ele_types_handlers.length = 0;\n this.imageLoader.clear();\n ;\n }\n\n /**\n * 切换行打印模式\n */\n switchTextlineMode(): void {\n this.document.viewOptions.textRowLineMode = !this.document.viewOptions.textRowLineMode;\n this.syncRefresh();\n }\n\n /**\n * 实例化动态脚本\n */\n private initScripts(): void {\n this.dynamicFunc.initScripts(this.document.props.scripts);\n }\n\n\n /**\n * 替换数据元\n */\n replaceDataElement(oldDataElement: DataElementLeaf | DataElementInlineGroup, newElement: DataElementLeaf | DataElementInlineGroup, ss: SelectionState): void {\n //清除光标\n ss.clear();\n //执行刷新\n //插入新对象到旧对象之前\n oldDataElement.parent.addChild(newElement, oldDataElement.getIndex());\n //删除旧节点\n oldDataElement.remove();\n }\n\n get refreshType(): RefreshType | null {\n if (!this._document) {\n return null;\n }\n return this._document.modifyFlag === ModifyFlag.None ? 'appearance' : 'content'\n }\n}\n\nexport interface ImageSourceItem {\n src: string,\n task: Promise<void>;\n cbs: Array<(status: ImgLoadStatus) => void>;\n ele: HTMLImageElement,\n loadStatus: ImgLoadStatus\n}\n\nexport interface IImageLoader {\n clear(): void;\n\n loadImage(src: string, onCallback: (status: ImgLoadStatus) => void): void;\n\n getImage(src: string): HTMLImageElement | undefined;\n\n imagesLoadCompleted(): boolean;\n\n getLoadTasks(): Array<Promise<void>>;\n}\n\n/**\n * 文档上下文\n */\nexport class DocumentContext {\n constructor(public ctx: BranchElement, private ss: SelectionState) {\n }\n\n getControlIDList(): Array<string> {\n const dataEleList = <unknown>this.ctx.treeFilter(item => validateDataEle(item)) as Array<{ props: { id: string } }>;\n return dataEleList.map(item => item.props.id);\n }\n\n getControlInstanceList(): Array<DataElementInlineGroup | DataElementLeaf> {\n return this.ctx.treeFilter(item => validateDataEle(item)) as Array<DataElementInlineGroup | DataElementLeaf>;\n }\n\n getControlById(id: string): DataElementInlineGroup | DataElementLeaf {\n return this.ctx.treeFind(item => validateDataEle(item) && (<any>item)['props']['id'] === id) as DataElementInlineGroup | DataElementLeaf;\n }\n\n getControlByName(name: string): DataElementInlineGroup | DataElementLeaf {\n return this.ctx.treeFind(item => validateDataEle(item) && (<any>item)['props']['name'] === name) as DataElementInlineGroup | DataElementLeaf;\n }\n\n /**\n * 获取数据元值集合\n */\n getDataElementValues(): Array<DataElementValueStruct> {\n const structList = this.getDataElementModelList();\n return structList.map<DataElementValueStruct>(item => ({\n id: item.id,\n name: item.name,\n value: item.getValue()\n }));\n }\n\n /**\n * 获取数据元结构以及get\\set闭包调用函数\n * @returns\n */\n getDataElementModelList(): Array<DataCheckEleModel | DataInputEleModel | DataLeafEleModel> {\n const dataEleList = this.ctx.treeFilter(item => validateDataEle(item) || item instanceof DataElementInlineGroup) as Array<DataElementInlineGroup | DataElementLeaf>;\n\n const dataInlineGroups = dataEleList.filter(item => item instanceof DataElementInlineGroup) as Array<DataElementInlineGroup>;\n const dataLeafs = dataEleList.filter(item => item instanceof DataElementLeaf) as Array<DataElementLeaf>;\n\n //复选框数据元\n const dataCheckList = dataLeafs.filter(item => item instanceof DataElementCheck) as Array<DataElementCheck>;\n //除复选框之外的LeafDataElement\n const dataOtherLeafValues = CommonUtil.removeUnionSet(dataLeafs, dataCheckList).map<DataLeafEleModel>(item => (\n {\n id: item.props.id as string,\n name: item.props.name as string,\n fieldName: item.props.field as string,\n item,\n getValue: () => {\n return item.getValue()\n },\n setValue: (val) => {\n item.setValue(val)\n }\n }));\n const dataInlineStructList = dataInlineGroups.map<DataInputEleModel>(item => (\n {\n id: item.props.id, name: item.props.name, fieldName: item.props.fieldName, item, getValue: () => {\n return item.getValue()\n }, setValue: (val) => {\n item.setValue(val)\n }\n }));\n //复选框列表\n const dataCheckStructList = this.getDataCheckModelList(dataCheckList);\n return [...dataInlineStructList, ...dataCheckStructList, ...dataOtherLeafValues];\n }\n\n /**\n * 获取复选框数据元结构列表\n * @param dataCheckList\n * @returns\n */\n private getDataCheckModelList(dataCheckList: Array<DataElementCheck>): Array<DataCheckEleModel | DataLeafEleModel> {\n //不存在groupName的复选框\n const singleCheckList = dataCheckList.filter(item => !item.props.groupName);\n //存在groupName的复选框\n const groupNames = Array.from(new Set(dataCheckList.filter(item => item.props.groupName).map(item => item.props.groupName)));\n const groupCheckListValues = groupNames.map<DataCheckEleModel>((groupName) => {\n const groupCheckItems = dataCheckList.filter(item => item.props.groupName === groupName);\n return {\n id: groupName,\n name: groupCheckItems[0].props.name,\n fieldName: groupCheckItems[0].props.fieldName,\n multiSelect: groupCheckItems[0].props.multiSelect,\n item: groupCheckItems,\n getValue: () => {\n let checkedValue = '';\n if (groupCheckItems[0].props.multiSelect) {\n checkedValue = groupCheckItems.filter(item => item.props.checked).map(item => item.getValue() + '').join(';');\n } else {\n const checkedSingleItem = groupCheckItems.find(item => item.props.checked)\n if (checkedSingleItem) {\n checkedValue = checkedSingleItem.props.checkedValue;\n }\n }\n ;\n return checkedValue;\n },\n setValue: (val: string | Array<string>) => {\n //为null时\n if (val === null || val === undefined) {\n groupCheckItems.forEach(item => item.props.checked = false);\n return;\n }\n if (groupCheckItems[0].props.multiSelect) {\n const valItems = typeof val === 'string' ? val.split(';') : val;\n\n groupCheckItems.forEach(item => {\n item.props.checked = valItems.indexOf(item.props.checkedValue + '') >= 0;\n });\n } else {\n groupCheckItems.forEach(item => {\n item.props.checked = item.props.checkedValue === val;\n });\n }\n ;\n }\n }\n })\n const singleCheckListValues = singleCheckList.map<DataLeafEleModel>(item => ({\n id: item.props.id,\n name: item.props.name,\n fieldName: item.props.fieldName,\n item,\n getValue: () => {\n return item.getValue()\n },\n setValue: (val) => {\n item.setValue(val)\n }\n }));\n return [...singleCheckListValues, ...groupCheckListValues];\n }\n\n /**\n * 获取留痕块元素列表\n */\n getTrackElements(): Array<TrackRunElement> {\n return this.ctx.treeFilter(item => item instanceof TrackRunElement) as Array<TrackRunElement>;\n }\n\n getTrackElmeentById(id: string): TrackRunElement | null {\n return this.ctx.treeFind(item => item instanceof TrackRunElement && item.props.id === id) as TrackRunElement | null;\n }\n\n /**\n * 获取留痕块内数据\n */\n getTracksData(): Array<TrackBlockData> {\n const trackElements = this.getTrackElements();\n return trackElements.map(item => {\n const trackRun = item as TrackRunElement;\n const content = ElementSerialize.serializeString(trackRun, {all: true});\n return {\n //用户id\n userId: trackRun.props.userId,\n //用户名称\n userName: trackRun.props.userName,\n //日期\n date: trackRun.props.date,\n //类型,ins-run:插入,del-run:删除\n type: trackRun.type as TrackRunTypeEnum,\n //留痕块id\n id: trackRun.props.id,\n //内容\n content\n }\n });\n }\n\n setControlValue(id: string, value: string): void {\n const dataEle = this.getControlById(id);\n if (dataEle) {\n dataEle.setValue(value);\n }\n this.ss.clear();\n }\n\n setControlValueByName(name: string, val: any): void {\n const dataEle = this.getControlByName(name)\n dataEle.setValue(val)\n }\n\n /**\n * 获取复选框选中的值\n */\n getCheckBoxValues(groupName: string): Array<string> {\n const ckbs = this.getCheckBoxList(groupName);\n return ckbs.filter(item => item.props.checked).map(item => item.props.checkedValue);\n }\n\n getCheckBoxList(groupName: string): Array<DataElementCheck> {\n return this.getControlInstanceList().filter(item => item instanceof DataElementCheck && item.props.groupName === groupName) as Array<DataElementCheck>;\n }\n\n /**\n * 当前上下文执行默认绑定\n * @param data\n */\n bindDataValues(data: string | Object | Array<{ key: string, value: any }>, predicateKey: 'id' | 'name' | 'fieldName' = 'fieldName'): void {\n this.ss.clear();\n let bindData = typeof data === 'string' ? JSON.parse(data) as Object : data;\n if (Array.isArray(bindData)) {\n const obj = {};\n bindData.forEach(item => {\n obj[item.key] = item.value\n });\n bindData = obj;\n }\n const dataList = this.getDataElementModelList();\n dataList.forEach(item => {\n const objKey = item[predicateKey];\n if (bindData.hasOwnProperty(objKey)) {\n let bindValue = bindData[objKey];\n if (typeof bindValue === 'string') {\n bindValue = bindValue.replace(/[\\n\\r]/g, '');\n }\n item.setValue(bindData[objKey]);\n }\n });\n }\n}\n\n\ninterface DataEleBaseModel {\n id: string;\n name: string;\n fieldName: string;\n getValue: () => any;\n setValue: (val: any) => void;\n}\n\ninterface DataCheckEleModel extends DataEleBaseModel {\n item: Array<DataElementCheck>;\n multiSelect: boolean;\n}\n\ninterface DataInputEleModel extends DataEleBaseModel {\n item: DataElementInlineGroup\n}\n\ninterface DataLeafEleModel extends DataEleBaseModel {\n item: DataElementLeaf;\n}\n\n/**\n * 留痕块结构化数据\n */\ninterface TrackBlockData {\n userId: string;\n userName: string;\n date: string;\n type: TrackRunTypeEnum,\n content: string,\n id: string;\n}","import { EditorContext } from \"./document-context\";\nimport { ElementUtil } from \"./element-util\";\nimport { CommContentBaseElement, CommContentElement } from \"./impl/comments/comment-content-impl\";\nimport { CommentElement } from \"./impl/comments/comment-element-impl\";\nimport { TextGroupElement } from \"./impl/text/text-impl\";\nimport { RangeUtil } from \"./range-util\";\n\n/**\n * 处理文档批注\n */\nexport class DocumentComment {\n commMarkList: Array<CommentElement> = [];\n commContentList: Array<CommContentBaseElement> = [];\n isDirty: boolean = true;\n constructor(public docCtx: EditorContext) { }\n\n /**\n * 读取审阅标记符号\n */\n readComments(): void {\n if (!this.isDirty) {\n return;\n }\n const commList = this.docCtx.document.treeFilter(item => item.type === 'comm') as Array<CommentElement>;\n const startCommList = commList.filter(item => item.props.markType === \"start\");\n const endCommList = commList.filter(item => item.props.markType === \"end\");\n const commMaps = startCommList.map(startItem => {\n const end = endCommList.find(endItem => endItem.props.id === startItem.props.id);\n if (!end) {\n throw new Error('未找到匹配的结束审阅符号')\n }\n return { start: startItem, end }\n })\n const commContentList: Array<CommContentBaseElement> = [];\n for (let i = 0; i < this.docCtx.document.commentsContainerElement.length; i++) {\n const commContent = this.docCtx.document.commentsContainerElement.getChild(i) as CommContentBaseElement;\n const commMap = commMaps.find(item => item.start.props.id === commContent.props.id);\n if (!commMap) {\n throw new Error('未找到审阅内容对应的审阅符号');\n }\n commContent.startMark = commMap.start;\n commContent.endMark = commMap.end;\n commContentList.push(commContent)\n }\n this.commMarkList = commList;\n this.commContentList = commContentList;\n this.docCtx.viewOptions.showReviewWindow = this.commContentList.length > 0;\n this.isDirty = false;\n }\n\n /**\n * 执行删除前,需要更新批注节点位置\n */\n updateComments(): void {\n const { selectionState } = this.docCtx;\n const { startControl, startOffset, collapsed, selectedRange } = selectionState;\n if (collapsed) {\n if (startOffset === 0) {\n return;\n }\n const nextSiblingEle = ElementUtil.getNextSiblingElement(startControl);\n //紧挨着的元素\n if (nextSiblingEle instanceof CommentElement && nextSiblingEle.props.markType === 'end') {\n if (startControl instanceof TextGroupElement) {\n if (startControl.textMeasures.length === startOffset) {\n this.removeComment(nextSiblingEle.props.id);\n }\n } else {\n this.removeComment(nextSiblingEle.props.id);\n }\n }\n } else {\n //如果开始批注被选中,则需要移动开始批注元素到选区末尾\n //如果结束批注被选中,则需要删除当前批注\n if (!selectedRange) {\n return\n }\n const endRange = RangeUtil.getEndRangeTarget(selectedRange);\n if (!endRange) {\n return\n }\n const commPairs: Array<CommMarkSelectedStatus> = [];\n for (let i = 0; i < this.commContentList.length; i++) {\n const { startMark, endMark } = this.commContentList[i];\n const commPair: CommMarkSelectedStatus = {\n startMark,\n endMark,\n startMarkStatus: RangeUtil.checkElementFullInRange(selectedRange, startMark),\n endMarkStatus: RangeUtil.checkElementFullInRange(selectedRange, endMark),\n };\n commPairs.push(commPair)\n }\n\n for (let i = 0; i < commPairs.length; i++) {\n const commPair = commPairs[i];\n if (commPair.endMarkStatus) {\n this.removeComment(commPair.endMark.props.id);\n } else if (commPair.startMarkStatus) {\n // const newStartMark = new CommentElement();\n // newStartMark.props.id = commPair.startMark.props.id;\n // commPair.startMark.isDecorate = false;\n // DocumentChange.insertElement(endRange.target, endRange.endOffset, [newStartMark]);\n }\n }\n }\n }\n\n\n /**\n * 删除批注\n * @param id \n */\n removeComment(id: string): void {\n const commentMarks = this.commMarkList.filter(item => item.props.id === id);\n const commentContent = this.commContentList.find(item => item.props.id === id);\n commentMarks.forEach(item => item.remove())\n commentContent?.remove();\n this.afterCommentsChanged();\n }\n\n getCommMarkIndex(commMark: CommentElement): number {\n const markType = commMark.props.markType;\n const commList = this.docCtx.document.treeFilter(item => item.type === 'comm') as Array<CommentElement>;\n const startCommList = commList.filter(item => item.props.markType === markType);\n return startCommList.indexOf(commMark);\n }\n\n /**\n * 清除所有批注\n */\n clearAllComments(): void {\n this.readComments();\n for (let i = 0; i < this.commContentList.length; i++) {\n this.removeComment(this.commContentList[i].props.id);\n }\n this.docCtx.selectionState.clear();\n }\n\n /**\n * 清除所有的验证批注\n */\n clearAllValidates(): void {\n this.docCtx.document.treeFilter(item => item.type === 'validate').forEach(item => { this.removeComment(item.props.id) })\n }\n\n /**\n * 批注修改后事件\n * 用于标注当前文档的批注发生更改了,不再重复读取批注,提高性能\n */\n afterCommentsChanged(): void {\n this.isDirty = true;\n }\n\n\n}\n\n\nexport interface CommMarkSelectedStatus {\n startMark: CommentElement,\n endMark: CommentElement,\n startMarkStatus: boolean,\n endMarkStatus: boolean\n}\n","import { Element, LeafElement } from \"./element-define\";\nimport { TextGroupElement } from \"./impl/text/text-impl\";\nimport { ElementUtil } from \"./element-util\";\nimport { SelectionRange, SelectionState } from \"./document-selection\";\n\ndeclare namespace Intl {\n\n type BCP47LanguageTag = string;\n\n /**\n * An object with some or all properties of the `Intl.Segmenter` constructor `options` parameter.\n *\n * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter/Segmenter#parameters)\n */\n interface SegmenterOptions {\n /** The locale matching algorithm to use. For information about this option, see [Intl page](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_negotiation). */\n localeMatcher?: \"best fit\" | \"lookup\" | undefined;\n /** The type of input to be split */\n granularity?: \"grapheme\" | \"word\" | \"sentence\" | undefined;\n }\n\n interface Segmenter {\n /**\n * Returns `Segments` object containing the segments of the input string, using the segmenter's locale and granularity.\n *\n * @param input - The text to be segmented as a `string`.\n *\n * @returns A new iterable Segments object containing the segments of the input string, using the segmenter's locale and granularity.\n */\n segment(input: string): Segments;\n\n resolvedOptions(): ResolvedSegmenterOptions;\n }\n\n interface ResolvedSegmenterOptions {\n locale: string;\n granularity: \"grapheme\" | \"word\" | \"sentence\";\n }\n\n interface Segments {\n /**\n * Returns an object describing the segment in the original string that includes the code unit at a specified index.\n *\n * @param codeUnitIndex - A number specifying the index of the code unit in the original input string. If the value is omitted, it defaults to `0`.\n */\n containing(codeUnitIndex?: number): SegmentData;\n\n /** Returns an iterator to iterate over the segments. */\n [Symbol.iterator](): IterableIterator<SegmentData>;\n }\n\n interface SegmentData {\n /** A string containing the segment extracted from the original input string. */\n segment: string;\n /** The code unit index in the original input string at which the segment begins. */\n index: number;\n /** The complete input string that was segmented. */\n input: string;\n /**\n * A boolean value only if granularity is \"word\"; otherwise, undefined.\n * If granularity is \"word\", then isWordLike is true when the segment is word-like (i.e., consists of letters/numbers/ideographs/etc.); otherwise, false.\n */\n isWordLike?: boolean;\n }\n\n const Segmenter: {\n prototype: Segmenter;\n\n /**\n * Creates a new `Intl.Segmenter` object.\n *\n * @param locales - A string with a [BCP 47 language tag](http://tools.ietf.org/html/rfc5646), or an array of such strings.\n * For the general form and interpretation of the `locales` argument,\n * see the [`Intl` page](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_identification_and_negotiation).\n *\n * @param options - An [object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter/Segmenter#parameters)\n * with some or all options of `SegmenterOptions`.\n *\n * @returns [Intl.Segmenter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segments) object.\n *\n * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter).\n */\n new(locales?: BCP47LanguageTag | BCP47LanguageTag[], options?: SegmenterOptions): Segmenter;\n\n /**\n * Returns an array containing those of the provided locales that are supported without having to fall back to the runtime's default locale.\n *\n * @param locales - A string with a [BCP 47 language tag](http://tools.ietf.org/html/rfc5646), or an array of such strings.\n * For the general form and interpretation of the `locales` argument,\n * see the [`Intl` page](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl#Locale_identification_and_negotiation).\n *\n * @param options An [object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter/supportedLocalesOf#parameters).\n * with some or all possible options.\n *\n * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Segmenter/supportedLocalesOf)\n */\n supportedLocalesOf(locales: BCP47LanguageTag | BCP47LanguageTag[], options?: Pick<SegmenterOptions, \"localeMatcher\">): BCP47LanguageTag[];\n };\n}\n\nexport function getFocusTextSegment(selection: SelectionState): boolean {\n let { startControl: element, startOffset: offset } = selection;\n if (!(element instanceof TextGroupElement)) return false;\n if (!supportSegment()) return false;\n const focusEle = element as TextGroupElement;\n offset = offset + 1;\n offset = offset > focusEle.textMeasures.length ? focusEle.textMeasures.length : offset;\n //获取连续的字符\n const items = [...getConsecutiveTextsByDirection(element), element, ...getConsecutiveTextsByDirection(element, false)];\n const sortItems = getTextSortData(items);\n const { index, text } = sortItems.reduce((prev, curr) => {\n prev.text += curr.text;\n if (prev.completed) {\n return prev;\n }\n if (curr.item === focusEle) {\n prev.index += offset;\n prev.completed = true;\n } else {\n prev.index += curr.item.textMeasures.length;\n }\n return prev\n }, { completed: false, index: 0, text: '' });\n const { index: hitIndex, len: hitLen } = getHitSegment(text, index);\n const matchSegment = sortItems.filter(item => (item.index <= hitIndex && item.endIndex > hitIndex) || (item.index <= hitIndex + hitLen && item.endIndex > hitIndex + hitLen));\n const startSegment = matchSegment[0];\n const endSegment = matchSegment[matchSegment.length - 1];\n const startOffset = hitIndex - startSegment.index;\n const endOffset = hitIndex + hitLen - endSegment.index;\n const newRange = new SelectionRange();\n newRange.setStart(startSegment.item, startOffset);\n newRange.setEnd(endSegment.item, endOffset);\n selection.addRange(newRange);\n return true;\n}\n\ninterface TextSegmentData {\n item: TextGroupElement,\n len: number,\n index: number,\n endIndex: number,\n text: string\n}\n\n/**\n * 进行分词\n * @param text\n * @param focusOffset\n */\nfunction getHitSegment(text: string, focusOffset:number): { index: number, len: number } {\n const segmenter = new Intl.Segmenter(\"zh-CN\", { granularity: \"word\" });\n const iterator1 = segmenter.segment(text)[Symbol.iterator]();\n const segItems = Array.from(iterator1);\n let index = 0;\n for (let i = 0; i < segItems.length; i++) {\n const segItem = segItems[i];\n const currIndex = segItem.index;\n const currLen = segItem.segment.length;\n if (focusOffset > currIndex && focusOffset <= currLen + currIndex) {\n return {\n index,\n len: currLen\n }\n }\n index += currLen;\n }\n throw new Error('未获取到对应的分词词组');\n}\n\nfunction supportSegment(): boolean {\n return typeof Intl.Segmenter === 'function';\n}\n\n/**\n * 根据前后顺序标识索引位\n * @param texts\n */\nfunction getTextSortData(texts: Array<TextGroupElement>): Array<TextSegmentData> {\n let index = 0;\n const sortItems: Array<TextSegmentData> = [];\n for (let i = 0; i < texts.length; i++) {\n const item = texts[i];\n const sortData = {\n len: item.textMeasures.length,\n index,\n endIndex: index + item.textMeasures.length,\n item,\n text: item.text\n };\n sortItems.push(sortData);\n index += sortData.len;\n }\n return sortItems;\n}\n\n/**\n * 获取指定方向上连续的字符\n * @param element\n * @param prev\n */\nfunction getConsecutiveTextsByDirection(element: TextGroupElement, prev = true): Array<TextGroupElement> {\n let prevText: Element | null = element;\n const prevTexts: Array<TextGroupElement> = [];\n const func = prev ? ElementUtil.getPrevSiblingElement : ElementUtil.getNextSiblingElement;\n const addItem = prev ? prevTexts.unshift : prevTexts.push;\n while ((prevText = func(prevText)) && prevText instanceof TextGroupElement) {\n //addItem(prevText);\n addItem.apply(prevTexts, [prevText]);\n }\n return prevTexts;\n}\n","import { CommonUtil } from './common-util';\nimport { EditorContext } from './document-context'\nimport { SelectionRange } from './document-selection';\nimport { BranchElement, Element } from './element-define';\nimport { ElementReader } from './element-reader';\nimport {\n DeleteEleOpsDelta,\n DeleteTextOpsDelta,\n FormatOpsDelta,\n generatePatch,\n InsertOpsDelta,\n InsertTextOpsDelta,\n opsTrackModel,\n suppressTracking\n} from './element-trace-tracking'\nimport { ElementUtil } from './element-util';\nimport { TextGroupElement } from './impl';\nimport moment from 'moment'\n\ntype HistoryCommand = 'undo' | 'redo';\ntype HistoryChanges = { date: Date, ops: Array<opsTrackModel>, beforeSelection: SelectionLog | null, afterSelection: SelectionLog | null }\n\n/**\n * 处理撤销回滚等行为\n */\nexport class ElementTrackManage {\n\n actions: Array<HistoryChanges> = [];\n index: number = 0;\n //一旦发生变更,就锁定当前选区的数据\n //logLockState: boolean = true;\n selectionLog!: SelectionLog | null;\n\n constructor(public docCtx: EditorContext, public reader: ElementReader) {\n }\n\n /**\n * 生成变更之前的选区数据\n */\n generateSelectionLog(): void {\n // if (!this.logLockState) {\n // return;\n // }\n this.selectionLog = this.getSelection();\n }\n\n clear(): void {\n this.index = 0;\n this.actions.length = 0;\n this.selectionLog = null;\n }\n\n /**\n * 生成历史操作信息\n */\n generateTrack(): void {\n if (!this.docCtx.viewOptions.enableTrackHistory) {\n return;\n }\n const ops = generatePatch(this.docCtx.document);\n if (!ops.length) {\n return;\n }\n if (this.mergeOps(ops)) {\n return;\n }\n this.actions.splice(this.index);\n this.actions.push({\n date: new Date(),\n ops,\n beforeSelection: this.selectionLog,\n afterSelection: this.getSelection()\n });\n this.index++;\n if (this.index > this.docCtx.viewOptions.trackHistoryMaxLength) {\n this.actions.splice(this.index);\n }\n this.generateSelectionLog();\n }\n\n /**\n * 合并操作,\n * 合并输入、删除文字在一定周期内的更改\n * @private\n */\n private mergeOps(ops: opsTrackModel[]): boolean {\n return false;\n //问题在于:\n //1.新输入的字符串,selectState的startOffset、endOffset=1,后输入的字符串的endOffset进行累加\n //2.撤销后重做,选区范围在1-2,英国是0-2,因为之前在创建文本对象后,选区的结束位为1\n // if (ops.length > 1) {\n // return false;\n // }\n // const lastOps = this.actions[this.actions.length - 1];\n // if (!lastOps) {\n // return false;\n // }\n // //if(lastOps.ops[lastOps.ops.length-1])\n // //超过10秒的操作不合并\n // if (moment().diff(moment(lastOps.date), 'seconds') > 10) {\n // return false;\n // }\n // const prevOp = lastOps.ops[lastOps.ops.length - 1];\n // const currOp = ops[0];\n // const prevAfterSelection = lastOps.afterSelection;\n // //操作类型相同\n // if ('insText' in currOp.ops && 'insText' in prevOp.ops && currOp.index === prevOp.index) {\n // if (!prevAfterSelection) {\n // return false;\n // }\n // //选区必须闭合\n // if (!prevAfterSelection.collapsed) {\n // return false;\n // }\n // //前后是连续的操作\n // const { index, length } = prevOp.ops.insText;\n // if (index + length === currOp.ops.insText.index) {\n // if (prevAfterSelection.endOffset === index + length) {\n // prevOp.ops.content += currOp.ops.content;\n // prevOp.ops.insText.length += currOp.ops.insText.length;\n // lastOps.date = new Date();\n // prevAfterSelection.endOffset += currOp.ops.insText.length;\n // return true;\n // }\n // }\n // //this.commandForInsertTextOp(command, op as opsTrackModel<InsertTextOpsDelta>)\n // } else if ('delText' in currOp.ops && 'delText' in prevOp.ops && currOp.index === prevOp.index) {\n // if (prevOp.ops.delText.index === currOp.ops.delText.index + currOp.ops.delText.length) {\n // prevOp.ops.delText.length += currOp.ops.delText.length;\n // prevOp.ops.content = currOp.ops.content;\n // lastOps.date = new Date();\n // return true;\n // }\n // //this.commandForDeleteTextOp(command, op as opsTrackModel<DeleteTextOpsDelta>)\n // }\n // return false;\n }\n\n private getSelection(): SelectionLog | null {\n const { startControl, startOffset, endControl, endOffset, editable } = this.docCtx.selectionState;\n if (!startControl) {\n return null;\n }\n const startIndex = ElementUtil.getControlIndex(startControl, false);\n const endIndex = startControl === endControl ? startIndex : ElementUtil.getControlIndex(endControl, false);\n return {\n startIndex,\n startOffset,\n endIndex,\n endOffset,\n editable\n }\n }\n\n /**\n * 执行撤销\n */\n undo(): void {\n suppressTracking(() => {\n this.index--;\n this.executeCommand('undo');\n });\n }\n\n /**\n * 是否可以撤销\n */\n get canUndo(): boolean {\n return this.index > 0;\n }\n\n /**\n * 是否可以重做\n */\n get canRedo(): boolean {\n return this.index < this.actions.length;\n }\n\n /**\n * 执行重做\n */\n redo(): void {\n suppressTracking(() => {\n this.executeCommand('redo');\n this.index++;\n })\n }\n\n private executeCommand(command: HistoryCommand): void {\n const action = this.actions[this.index];\n if (!action) {\n return;\n }\n const ss = command === 'undo' ? action.beforeSelection : action.afterSelection;\n this.restoreSelection(ss);\n const ops = command === 'undo' ? [...action.ops].reverse() : action.ops;\n ops.forEach(op => {\n if ('insert' in op.ops) {\n this.commandForInsertEleOp(command, op as opsTrackModel<InsertOpsDelta>);\n } else if ('delete' in op.ops) {\n this.commandForDeleteEleOp(command, op as opsTrackModel<DeleteEleOpsDelta>)\n } else if ('insText' in op.ops) {\n this.commandForInsertTextOp(command, op as opsTrackModel<InsertTextOpsDelta>)\n } else if ('delText' in op.ops) {\n this.commandForDeleteTextOp(command, op as opsTrackModel<DeleteTextOpsDelta>)\n } else if ('format' in op.ops) {\n this.commandForEleFormat(command, op as opsTrackModel<FormatOpsDelta>);\n }\n });\n }\n\n\n /**\n * 还原光标\n * @param ssLog\n * @returns\n */\n restoreSelection(ssLog: SelectionLog | null): void {\n this.docCtx.selectionState.clear();\n if (!ssLog) {\n return;\n }\n this.docCtx.setPaintedCallback(() => {\n const { startIndex, startOffset, endIndex, endOffset, editable } = ssLog;\n const range = new SelectionRange();\n const sc = this.getControl(startIndex, false) as Element;\n\n const ec = startIndex === endIndex ? sc : this.getControl(endIndex, false) as Element;\n range.setStart(sc, startOffset);\n range.setEnd(ec, endOffset);\n range.editable = editable;\n this.docCtx.selectionState.addRange(range);\n })\n }\n\n /**\n * 撤销文本输入操作\n */\n commandForInsertTextOp(command: HistoryCommand, data: opsTrackModel<InsertTextOpsDelta>): void {\n const targe = this.getControl<TextGroupElement>(data.index);\n const { content, insText: { index, length } } = data.ops;\n command === 'undo' ? targe.splice(index, length) : targe.splice(index, 0, content);\n\n }\n\n /**\n * 撤销文本删除操作\n * @param command\n * @param data\n */\n commandForDeleteTextOp(command: HistoryCommand, data: opsTrackModel<DeleteTextOpsDelta>): void {\n const target = this.getControl<TextGroupElement>(data.index);\n const { content, delText: { index, length } } = data.ops;\n command === 'undo' ? target.splice(index, 0, content) : target.splice(index, length);\n }\n\n /**\n * 撤销元素属性修改操作\n */\n commandForEleFormat(command: HistoryCommand, data: opsTrackModel<FormatOpsDelta>): void {\n const target = this.getControl<Element>(data.index);\n const applyProps = {};\n const getterField = command === 'undo' ? 'oldValue' : 'newValue';\n //获取修改之前的值对象\n Object.keys(data.ops.format).forEach(key => {\n applyProps[key] = data.ops.format[key][getterField];\n })\n //更新到之前的值\n this.updateProps(target.props, applyProps);\n }\n\n /**\n * 撤销删除元素的操作\n * @param command\n * @param data\n */\n commandForDeleteEleOp(command: HistoryCommand, data: opsTrackModel<DeleteEleOpsDelta>): void {\n if (command === 'undo') {\n this.restoreToInsert(data.index, data.parentIndex, data.prevIndex, data.ops.delete);\n } else {\n const ele = this.getControl(data.index);\n ele.remove();\n }\n }\n\n /**\n * 撤销插入的元素\n * @param command\n * @param data\n */\n commandForInsertEleOp(command: HistoryCommand, data: opsTrackModel<InsertOpsDelta>): void {\n if (command === 'undo') {\n const ele = this.getControl(data.index);\n ele.remove();\n } else {\n this.restoreToInsert(data.index, data.parentIndex, data.prevIndex, data.ops.insert);\n }\n }\n\n private restoreToInsert(index: number, parentIndex: number, prevIndex: number, data: Element): void {\n const prevSiblingEle = prevIndex !== -1 ? this.getControl(prevIndex) : null;\n //获取插入位置之前的元素,然后向后插入目标元素\n const ele = this.getControl(index - 1);\n const target = data.clone(true);\n if (prevSiblingEle) {\n prevSiblingEle.parent.addChild(target, prevSiblingEle.getIndex() + 1);\n } else {\n //ele获取的为父容器\n if (index === parentIndex + 1) {\n if (ele instanceof BranchElement) {\n ele.addChild(target, 0);\n return;\n } else {\n throw new Error('父级类型不正确');\n }\n }\n ele.parent.addChild(target, ele.getIndex() + 1)\n }\n }\n\n /**\n * 更新属性\n * @param currProps\n * @param newProps\n */\n updateProps(currProps: object, newProps: object): void {\n Object.keys(newProps).forEach(key => {\n currProps[key] = CommonUtil.cloneValue(newProps[key]);\n })\n }\n\n getControl<T extends Element>(index: number, pure: boolean = true): T {\n return ElementUtil.getControlByIndex(this.docCtx.document, { currIndex: -1, index: index }, pure) as T;\n }\n}\n\ninterface SelectionLog {\n startIndex: number;\n startOffset: number;\n endIndex: number;\n endOffset: number;\n editable: boolean;\n}","import {PaintContent, RenderContext} from './framework/render-context';\nimport {ContentMenuItem, ContextMenuElementEvent, EventMap, HitEventInfo} from './framework/element-event-define';\nimport {DocumentPaint} from './framework/document-paint';\nimport {ElementReader} from './framework/element-reader';\nimport {DocumentEvent} from './framework/document-event';\nimport {DocumentInput} from './framework/document-input-cursor';\nimport {DocumentCursor, DocumentSelection, SelectionState} from './framework/document-selection';\nimport {ElementUtil} from './framework/element-util';\nimport {DocumentChange} from './framework/document-change';\nimport {CursorType} from './framework/render-define';\nimport {SelectionOverlays} from './framework/selection-overlays';\nimport {\n BranchElement,\n DocMode,\n Element,\n ICancelTokenFn,\n LeafElement,\n MarginProps,\n OrientType, PageLayoutMode,\n PageOptions,\n Position,\n Rect,\n TextAlign,\n ViewOptions\n} from './framework/element-define';\nimport {ElementSerialize} from './framework/element-serialize';\nimport {\n CommContentBaseElement, DataElementGroupElement,\n DataElementInlineGroup,\n DataElementLeaf, DataElementText,\n DocumentBodyElement,\n DocumentElement,\n DocumentRenderObject,\n IsInSideDataElement,\n ParagraphElement,\n PSymbolElement,\n TableElement,\n TableRowElement,\n TableUtil,\n TextGroupElement,\n validateDataEle\n} from './framework/impl';\nimport {documentPrint} from './framework/document-print';\nimport {DocumentTemplate} from './framework/document-template';\nimport {DocRule} from './doc-ruler';\nimport {DataEleBaseTextProps, ParagraphProps, TextProps} from './framework/element-props';\nimport {EditorContext} from './framework/document-context';\nimport {DocumentComment} from './framework/document-comment';\nimport {getFocusTextSegment} from \"./framework/document-segmenter\";\nimport * as Track from './framework/element-trace-tracking'\nimport {ElementTrackManage} from './framework/element-trace-manage';\nimport {Subject} from './framework/event-subject';\n\n\nexport class CanvasTextEditor {\n private contentCtx: CanvasRenderingContext2D;\n viewOptions: ViewOptions;\n docCtx: EditorContext;\n private docComment: DocumentComment;\n private renderContext: RenderContext;\n private documentPaint: DocumentPaint;\n elementReader: ElementReader;\n private documentEvent: DocumentEvent;\n private documentSelection: DocumentSelection;\n private documentInput: DocumentInput;\n private documentChange: DocumentChange;\n private selectionOverlays: SelectionOverlays;\n private docRule: DocRule;\n private eventMap: EventMap = new EventMap();\n historyMange: ElementTrackManage;\n selectionChanged: Subject<SelectionState> = new Subject();\n beforeRenderSubject: Subject<void> = new Subject();\n afterRenderSubject: Subject<void> = new Subject();\n selectionState: SelectionState;\n //显示右键菜单\n onContextMenuItemChanged: Subject<EditorContenxtProps> = new Subject();\n onDblClickEvent: Subject<Event> = new Subject();\n onClickEvent: Subject<Event> = new Subject();\n onScrollViewEvent: Subject<number> = new Subject();\n //文档改变事件:内容及样式,业务模块需要根据此事件,来追踪当前文档是否改变的状态\n onDocChangedEvent: Subject<void> = new Subject();\n //执行flushTask,refreshDoc之前,此时可以在文档计算排版之前改变内容\n onBeforeRefreshDocument: Subject<void> = new Subject();\n constructor(private docScroll: HTMLDivElement, private holdSpace: HTMLDivElement, private ruleCanvas: HTMLCanvasElement, private editCanvasContainer: HTMLDivElement, private editCanvas: HTMLCanvasElement, editInput: HTMLInputElement, editCursor: HTMLSpanElement, private cursorWrapper: HTMLDivElement) {\n this.viewOptions = new ViewOptions();\n this.documentSelection = new DocumentSelection();\n this.docCtx = new EditorContext(this.documentSelection.selectionState, this.viewOptions);\n this.viewOptions.copyRightInfo = '万达信息电子病历编辑器,www.wondersgroup.com';\n this.viewOptions.drawCharRectColor = 'green';\n this.viewOptions.showLineRect = true;\n this.viewOptions.docSpace = 20;\n this.viewOptions.reviewWindowWidth = 200;\n this.viewOptions.defaultFontName = '宋体'\n //this.viewOptions.scale = 2;\n //整个画布的尺寸\n this.viewOptions.viewSettings = {\n width: 1000,\n height: this.getContainerHeight().height\n };\n this.viewOptions.editUser = {\n id: '6666',\n name: '管理员'\n };\n this.viewOptions.fullPageView = false;\n this.createDocViewer();\n this.docComment = new DocumentComment(this.docCtx);\n this.contentCtx = editCanvas.getContext('2d') as CanvasRenderingContext2D;\n this.renderContext = new RenderContext(new PaintContent(this.contentCtx));\n this.renderContext.init({width: 500, height: 500, scale: 1});\n this.selectionState = this.documentSelection.selectionState;\n this.selectionOverlays = new SelectionOverlays(this.documentSelection.selectionState);\n this.documentPaint = new DocumentPaint(this.renderContext, this.docCtx, this.selectionOverlays.selectedSets);\n this.elementReader = new ElementReader(this.docCtx, this.renderContext);\n this.docRule = new DocRule(this.ruleCanvas, this.docCtx);\n this.documentInput = new DocumentInput(editInput, editCursor, cursorWrapper, this.docCtx);\n this.documentChange = new DocumentChange(this.elementReader, this.docCtx, this.docComment, this.documentInput);\n this.documentEvent = new DocumentEvent(editCanvas, this.documentPaint, this.docCtx, this.documentInput);\n this.historyMange = new ElementTrackManage(this.docCtx, this.elementReader);\n this.documentEvent.hitInfoChanged.subscribe((hitInfo) => {\n this.hitInfoChanged(hitInfo)\n });\n this.documentEvent.clickEvent.subscribe((evt) => {\n this.docClickHandle(evt)\n });\n this.documentEvent.dblClickEvent.subscribe((evt) => {\n this.docDblClickHandle(evt)\n });\n this.documentEvent.changeCursor.subscribe((cursor) => {\n this.changeCursor(cursor)\n });\n this.documentEvent.contextMenu.subscribe(evt => {\n this.onContextMenu(evt)\n });\n this.documentEvent.trackTipsChanged.subscribe(data => {\n });\n\n this.docCtx.docChange = this.documentChange;\n this.listenContainerHeight();\n this.refreshDocRule();\n this.docCtx.syncRefresh = () => {\n this.flushToSchedule()\n };\n this.viewOptions.onChange.subscribe((type) => {\n this.resetViewer(type)\n });\n }\n\n /**\n * 设置标尺\n */\n refreshDocRule(): void {\n let docLeft = 0//CommonUtil.getOffsetX(this.editCanvas.parentElement as HTMLDivElement);\n let pagePL = 0, pagePR = 0;\n if (this.documentPaint.docContainer) {\n docLeft += this.documentPaint.docContainer.rect.x;\n }\n if (this.docCtx.document?.props?.padding) {\n const {left, right} = this.docCtx.document.props.padding;\n pagePL = left;\n pagePR = right;\n }\n this.docRule.setRuleOptions({width: this.viewOptions.docPageSettings.width, pagePL, pagePR, docLeft});\n this.docRule.refreshRule();\n }\n\n createDocViewer(): void {\n this.viewOptions.mmToPixelsRatio = this.measureMMToPixs();\n const width = Math.floor(210 * this.viewOptions.mmToPixelsRatio);\n const height = Math.floor(297 * this.viewOptions.mmToPixelsRatio);\n this.viewOptions.docPageSettings = new PageOptions(width, height);\n this.docScroll.onscroll = (evt) => {\n this.scrollView(evt);\n };\n }\n\n measureMMToPixs(): number {\n const div = document.createElement('div');\n div.style.width = '100mm';\n document.body.appendChild(div);\n const width = div.getBoundingClientRect().width;\n document.body.removeChild(div);\n return width / 100;\n }\n\n flushTask!: (() => void) | null;\n //是否用于跟踪修改状态,在初始化、数据元赋值等情况不需要跟踪修改标志\n private trackChangeState = true;\n\n flushToSchedule(): void {\n if (this.docCtx.refreshType === 'content') {\n //触发动态脚本\n this.docCtx.dynamicFunc.invokedScripts();\n this.triggerDocChange();\n }\n if (this.flushTask) {\n return;\n }\n this.flushTask = () => {\n this.refreshDocument();\n this.flushTask = null;\n let cb = this.docCtx.paintedCallback;\n if (cb) {\n this.docCtx.setPaintedCallback(null);\n cb();\n return;\n }\n this.historyMange.generateTrack();\n this.historyMange.generateSelectionLog();\n };\n Promise.resolve().then(() => {\n if (this.flushTask) {\n this.flushTask();\n }\n });\n }\n\n /**\n * 触发文档改变事件\n * @returns\n */\n triggerDocChange(): void {\n if (!this.trackChangeState) {\n return;\n }\n this.onDocChangedEvent.next();\n }\n\n /**\n * fn函数执行时,不触发onDocChange\n * @param fn\n */\n noEffectChange(fn: () => void): void {\n const prev = this.trackChangeState;\n this.trackChangeState = false;\n try {\n fn();\n } catch (e) {\n console.error(e);\n }\n this.trackChangeState = prev;\n }\n\n\n loadDoc(data: any | DocumentElement): void {\n Track.suppressTracking(() => {\n this.elementReader.read(data);\n this.refreshDocument();\n this.refreshDocRule();\n this.historyMange.clear();\n });\n }\n\n /**\n * 更新滚动高度\n * 1.文档内容高度\n * 2.文档缩放值\n */\n setScrollSize(): void {\n this.holdSpace.style.height = this.documentPaint.getDocumentContainerHeight() + 'px';\n }\n\n scrollView(evt: Event): void {\n const target = evt.target as HTMLDivElement;\n const top = Math.floor(target.scrollTop);\n this.editCanvasContainer.style.top = top + 'px';\n this.cursorWrapper.style.transform = \"translate(0,-\" + top + \"px)\";\n this.viewOptions.translateY = top / this.viewOptions.scale;\n this.documentPaint.refreshView();\n this.documentEvent.onScrollView();\n this.onScrollViewEvent.next(top);\n }\n\n /**\n * 刷新文档,重新测量并设置光标等\n * @returns\n */\n private refreshDocument(): void {\n if (this.docCtx.refreshType === null) {\n return;\n }\n let rePaint = this.docCtx.refreshType === 'content';\n if (rePaint) {\n this.onBeforeRefreshDocument.next();\n this.documentSelection.clearSnapshot();\n this.docComment.readComments();\n Track.suppressTracking(() => {\n this.documentPaint.rePages();\n });\n this.beforeRenderSubject.next();\n }\n this.refreshView(rePaint);\n }\n\n /**\n * 刷新绘制文档\n * TODO:选区改变时,直接调用该方法\n * @param rePaint\n */\n private refreshView(rePaint: boolean): void {\n const ssChanged = this.documentSelection.updateSelectionState();\n this.selectionOverlays.getSelectionTreeData();\n this.documentPaint.refreshView(rePaint);\n this.setScrollSize();\n this.setCursor();\n ssChanged && this.selectionChanged.next(this.documentSelection.selectionState);\n this.docRule.refreshRule();\n }\n\n private hitInfoChanged(hitInfo: { startHitInfo: HitEventInfo, endHitInfo: HitEventInfo }): void {\n this.documentSelection.setSelectionState(hitInfo);\n this.refreshDocument();\n this.selectionChanged.next(this.documentSelection.selectionState);\n }\n\n /**\n * 设置光标\n */\n private setCursor(): boolean {\n const {startControl, startOffset} = this.selectionState;\n if (!this.canSetCursor()) {\n this.selectionState.editable = false;\n this.documentInput.setCursorVisibility(false);\n return false;\n }\n const {startRegion, hitDocIndex} = this.documentEvent.startHitInfo as HitEventInfo;\n const cursorPos = DocumentCursor.getElementCursorPos(startControl, startOffset, startRegion, hitDocIndex);\n this.docCtx.cursorRect = ElementUtil.cloneRect(cursorPos.rect);\n const abPos = this.transToAbsolutePos(ElementUtil.cloneRect(cursorPos.rect));\n this.documentInput.setCursorPosition(abPos);\n this.selectionState.cursorPos = cursorPos.rect;\n this.documentEvent.invokeCursor(startControl);\n return true;\n }\n\n /**\n * 将相对坐标位置转换为绝对坐标位\n * 由于缩放,导致绝对位置=相对位置*scale\n * @param pos\n */\n transToAbsolutePos<T extends Position | Rect>(pos: T): T {\n const {scale} = this.viewOptions;\n const offsetX = this.documentPaint.docContainer.rect.x;\n const offsetY = this.documentPaint.docContainer.rect.y;\n pos.x = pos.x * scale;\n pos.y = pos.y * scale;\n if ('height' in pos) {\n pos.height = pos.height * scale;\n }\n return pos;\n }\n\n /**\n * 判断是否光标可以设置接受编辑\n * @returns\n */\n private canSetCursor(): boolean {\n const {startControl, startOffset, editable} = this.selectionState;\n if (!startControl || !editable) {\n return false;\n }\n if (this.viewOptions.docMode === DocMode.Design) {\n return true;\n }\n //浏览模式\n if (this.viewOptions.docMode === DocMode.View) {\n return false;\n }\n //表单模式下,如果不在数据元素中,则不显示光标\n if (this.viewOptions.docMode === DocMode.FormEdit) {\n if (!IsInSideDataElement(startControl, startOffset)) {\n return false;\n }\n }\n if (!ElementUtil.verifyHitable(startControl)) {\n return false;\n }\n //表单模式下,数据元不可编辑\n if (this.viewOptions.docMode === DocMode.FormEdit && IsInSideDataElement(startControl, startOffset)) {\n const dataEle = ElementUtil.getDataElement(startControl);\n if (dataEle && !dataEle.props.editable) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * 修改光标\n * @param newCursor\n */\n private changeCursor(newCursor: CursorType): void {\n this.editCanvas.style.cursor = newCursor;\n this.viewOptions.cursor = newCursor;\n }\n\n /**\n * 文档点击事件\n */\n private docClickHandle(evt: MouseEvent): void {\n this.setCursor();\n this.selectionOverlays.getSelectionTreeData();\n this.onClickEvent.next(evt);\n }\n\n /**\n * 文档双击事件\n * 处理全选当前段落\n */\n private docDblClickHandle(evt: MouseEvent): void {\n const res = getFocusTextSegment(this.selectionState);\n if (res) {\n this.refreshDocument();\n }\n this.onDblClickEvent.next(evt);\n }\n\n /**\n * 获取当前光标所在的数据元\n * @returns\n */\n getCurrentDataElement(): DataElementInlineGroup | DataElementLeaf | null {\n const selectionState = this.documentSelection.selectionState;\n const {startControl} = selectionState;\n if (startControl) {\n if (!ElementUtil.verifyHitable(startControl)) {\n return null;\n }\n return ElementUtil.getParent(startControl, validateDataEle) as DataElementInlineGroup | DataElementLeaf;\n }\n return null;\n }\n\n /**\n * 设置当前光标所在的数据元的值\n * @param val\n */\n setCurrentDataElementValue(val: any): void {\n const dataEle = this.getCurrentDataElement();\n if (dataEle) {\n dataEle?.setValue(val);\n this.selectionState.clear();\n }\n }\n\n /**\n * 获取数据元位置\n * @param element\n * @returns\n */\n getDataElementPosition(element: LeafElement) {\n const startDecorateRender = element.paintRenders[0]\n if (!startDecorateRender) {\n console.error('未找到数据元开始渲染元素');\n return;\n }\n const {x, height, y, width} = startDecorateRender.rect;\n const pos = ElementUtil.getRenderAbsolutePaintPos(startDecorateRender)\n return {x: pos.x + width, y: pos.y + height + 5, translateY: this.viewOptions.translateY}\n }\n\n /**\n * 获取文档模型\n * @returns\n */\n getDocSchema(): any {\n return ElementSerialize.serialize(this.docCtx.document, this.viewOptions);\n }\n\n getDocSchemaJSON(): string {\n const res = JSON.stringify(this.getDocSchema());\n return res;\n }\n\n /**\n * 右键菜单\n * @param evt\n */\n onContextMenu(evt: MouseEvent): void {\n evt.preventDefault();\n const {selectionState} = this.documentSelection;\n const {startControl} = selectionState;\n if (!startControl) {\n return;\n }\n const elementEvent = new ContextMenuElementEvent(this.docCtx);\n elementEvent.source = startControl;\n DocumentEvent.invokeEvent('ElementContextMenu', startControl, elementEvent, 'All', this.docCtx);\n const position = {x: evt.offsetX + 10, y: evt.offsetY, translateY: this.viewOptions.translateY};\n this.onContextMenuItemChanged.next({pos: position, menus: elementEvent.menus})\n }\n\n resizeObserver: ResizeObserver | null = null;\n\n listenContainerHeight(): void {\n this.resizeObserver = new ResizeObserver(entries => {\n this.updateDocHeight();\n }\n );\n this.resizeObserver.observe(this.docScroll);\n this.updateDocHeight();\n }\n\n private updateDocHeight(): void {\n const {width, height} = this.getContainerHeight();\n this.viewOptions.viewSettings.width = width;\n this.viewOptions.viewSettings.height = height;\n if (width < this.viewOptions.ContentWidth) {\n this.viewOptions.viewSettings.width = this.viewOptions.ContentWidth;\n }\n //适应页宽模式\n if (this.viewOptions.pageLayoutMode === 'fit-page') {\n const scale = (this.viewOptions.viewSettings.width - 80) / this.viewOptions.docPageSettings.width;\n this._scaleView(scale);\n }\n this.resetViewer();\n }\n\n resetViewer(type: 'demand' | 'force' | undefined = undefined): void {\n const refreshType = type === 'force' ? 'content' : 'appearance';\n if (refreshType === 'content') {\n this.docCtx.document.pubOnChange('self');\n }\n this.updateRenderCtx();\n this.documentPaint.layoutPages();\n this.refreshDocument();\n this.refreshDocRule();\n }\n\n /**\n * 缩放视图\n * @param scale\n * @returns\n */\n scale(scale: number): void {\n //自适应页宽模式时,如果手动调整缩放比例,则转变为单页模式\n if (this.viewOptions.pageLayoutMode === 'fit-page') {\n this.viewOptions.pageLayoutMode = 'singlePage';\n }\n this._scaleView(scale);\n }\n\n /**\n * 缩放视图\n * @param scale\n * @returns\n */\n private _scaleView(scale: number): number {\n scale = scale < 0.5 ? 0.5 : scale;\n scale = scale > 2 ? 2 : scale;\n this.viewOptions.scale = scale;\n this.updateRenderCtx();\n this.refreshDocRule();\n this.flushToSchedule();\n this.documentPaint.layoutPages();\n return scale;\n }\n\n private updateRenderCtx(): void {\n const {scale, viewSettings: {width, height}} = this.viewOptions;\n this.renderContext.update({width, height, scale});\n }\n\n getContainerHeight(): { height: number, width: number } {\n let {height, width} = this.docScroll.getBoundingClientRect();\n return {height: Math.floor(height), width: Math.floor(width)};\n }\n\n\n /**\n * 在当前位置插入表格\n * @param rows\n * @param cols\n */\n insertTable(rows: number, cols: number): void {\n const tb = TableElement.createTable(rows, cols);\n this.documentChange.insertTable(tb);\n }\n\n /**\n * 打印所有文档\n */\n printAllPages(): void {\n documentPrint.print(this.documentSelection.selectionState, this.viewOptions, this.docCtx)\n }\n\n getPrintNodes(): Array<HTMLCanvasElement> {\n return documentPrint.exportCanvasNodes(this.documentSelection.selectionState, this.viewOptions, this.docCtx);\n }\n\n /**\n * 清除文档\n */\n clearDoc(): void {\n if (this.docCtx.document) {\n this.historyMange.clear();\n this.docCtx.document.destroy();\n this.documentSelection.selectionState.clear();\n this.documentEvent.clearHitInfo();\n }\n this.docCtx.clear();\n }\n\n /**\n * 新建文档\n * @param doc\n */\n createNewDoc(doc: DocumentElement | null = null): void {\n //this.docCtx.clear();\n const newDoc = doc ?? DocumentTemplate.createA4Doc();\n // this.elementReader.setDocument(newDoc);\n // this.refreshDocument('content');\n this.loadDoc(ElementSerialize.serialize(newDoc, this.viewOptions));\n }\n\n destroy(): void {\n this.docCtx.destroy();\n this.documentEvent.clearSubEvent();\n this.documentInput.destroy();\n this.flushTask = null;\n }\n\n\n /**\n * 获取选区文本属性\n * @returns\n */\n getSelectionTextGroupProps(): TextProps | null {\n const selectionState = this.selectionState;\n const range = selectionState.selectedRange;\n if (!range) {\n if (selectionState.collapsed) {\n if (selectionState.startControl instanceof TextGroupElement) {\n return selectionState.startControl.props;\n }\n }\n return null;\n }\n const startRange = ElementUtil.getFirstSelectedRange(range);\n const endRange = ElementUtil.getLastSelectedRange(range);\n if (startRange.target instanceof TextGroupElement) {\n return startRange.target.props;\n }\n return null;\n }\n\n getSelectionParaProps(): ParagraphProps | null {\n const selectionState = this.selectionState;\n if (!selectionState || !selectionState.startControl) {\n return null;\n }\n const para = ElementUtil.getParentByType(selectionState.startControl, ParagraphElement) as ParagraphElement;\n return para.props;\n }\n\n\n setTextFormat(newProps: Partial<TextProps>): void {\n DocumentChange.setTextStyle(this.selectionState, (t) => {\n t.setFormat(newProps);\n })\n }\n\n\n /**\n * 开启格式刷\n */\n enableFormatBrush(): ICancelTokenFn | null {\n const startControl = this.selectionState.startControl;\n if (startControl instanceof TextGroupElement) {\n const selectedStyle = startControl.props.clone(null);\n const selectionOverlayColor = this.viewOptions.selectionOverlaysColor;\n this.viewOptions.selectionOverlaysColor = \"rgba(0,58,140,0.8)\";\n\n const cancelToken: ICancelTokenFn = {};\n const sub = this.onClickEvent.subscribe(() => {\n sub.unsubscribe();\n this.setTextFormat(selectedStyle);\n this.viewOptions.selectionOverlaysColor = selectionOverlayColor;\n if (cancelToken.onFinish) {\n cancelToken.onFinish();\n }\n });\n cancelToken.cancel = () => {\n sub.unsubscribe();\n this.viewOptions.selectionOverlaysColor = selectionOverlayColor;\n };\n return cancelToken;\n }\n return null;\n }\n\n /**\n * 设置段落对齐\n * @param align\n */\n switchParaAlign(align: TextAlign): void {\n const setterFunc = (paraProps: ParagraphProps) => {\n paraProps.textAlign = align;\n };\n DocumentChange.setParaAlign(this.selectionState, setterFunc);\n }\n\n\n combineCell(): void {\n TableUtil.mergeCells(this.selectionState)\n }\n\n /**\n * 切换当前段落项目符号状态\n */\n setParagraphNumberType(): void {\n this.documentChange.setParagraphNumberType();\n }\n\n /**\n * 删除当前批注\n * @param id\n */\n removeComment(id: string): void {\n this.docComment.removeComment(id);\n this.selectionState.clear();\n }\n\n /**\n * 移除焦点所在的批注\n */\n removeCurrentComment(): void {\n const comment = ElementUtil.getParent(this.selectionState.startControl, (item => item instanceof CommContentBaseElement)) as CommContentBaseElement;\n if (comment) {\n this.removeComment(comment.props.id);\n }\n }\n\n /**\n * 插入批注\n */\n insertComment(): void {\n this.documentChange.insertComment();\n }\n\n /**\n * 清除所有批注\n */\n clearAllComments(): void {\n this.docComment.clearAllComments();\n }\n\n\n cutTable(): void {\n const row = ElementUtil.getParentByType(this.selectionState.startControl, TableRowElement) as TableRowElement;\n const tb = row?.parent as TableElement;\n TableUtil.cutTable(tb, row.getIndex());\n const para = new ParagraphElement();\n tb.parent.addChild(para, tb.getIndex() + 1);\n }\n\n /**\n * 初始化当前文档创建用户信息\n * 一份文档只需要设置一次\n */\n initCurrentDocUser(userId: string, userName: string, date: string): void {\n Track.suppressTracking(() => {\n const doc = this.docCtx.document;\n doc.props.createUserId = userId;\n doc.props.createUserName = userName;\n doc.props.createDate = date;\n });\n }\n\n /**\n * 验证文档内容\n * @returns\n */\n validate(): boolean {\n this.docComment.clearAllValidates();\n return this.documentChange.validate();\n }\n\n /**\n * 撤销\n */\n undo(): void {\n this.historyMange.undo();\n }\n\n /**\n * 恢复\n */\n redo(): void {\n this.historyMange.redo();\n }\n\n /**\n * 是否可以撤销\n */\n canUndo(): boolean {\n return this.historyMange.canUndo;\n }\n\n /**\n * 是否可以恢复\n */\n canRedo(): boolean {\n return this.historyMange.canRedo;\n }\n\n switchTrackChanges(eleCtx: BranchElement | null = null): void {\n eleCtx = eleCtx || this.docCtx.document;\n const body = eleCtx.treeFind(item => item instanceof DocumentBodyElement) as DocumentBodyElement;\n if (body) {\n body.trackChanges = !body.trackChanges;\n } else {\n throw new Error('未找到doc-body');\n }\n }\n\n get trackTipsChanged() {\n return this.documentEvent.trackTipsChanged;\n }\n\n switchFullViewPage(): void {\n this.viewOptions.fullPageView = !this.viewOptions.fullPageView;\n }\n\n getSelectedJSON(): string {\n return ElementSerialize.getSelectedJSON(this.selectionState, this.viewOptions);\n }\n\n getSelectedText(): string {\n const copySerializeStr = ElementSerialize.getSelectedStruct(this.selectionState, this.viewOptions);\n return ElementSerialize.serializeString(copySerializeStr as BranchElement);\n }\n\n /**\n * 设置纸张方向\n * @param orientation\n */\n setPaperOrient(orientation: OrientType): void {\n this.docCtx.document.props.orient = orientation;\n this.viewOptions.docPageSettings.orient = orientation;\n this.resetViewer('force');\n this.selectionState.clear();\n }\n\n /**\n * 设置纸张大小,单位为毫米(mm)\n * @param width\n * @param height\n */\n setPaperSize(width: number, height: number): void {\n const docProps = this.docCtx.document.props;\n docProps.width = width;\n docProps.height = height;\n width = Math.floor(width * this.viewOptions.mmToPixelsRatio);\n height = Math.floor(height * this.viewOptions.mmToPixelsRatio);\n this.viewOptions.docPageSettings = new PageOptions(width, height, docProps.orient);\n this.resetViewer('force');\n }\n\n /**\n * 插入强制换页符\n */\n insertPageBreakPara(): void {\n this.documentChange.insertPageBreakPara();\n }\n\n /**\n * 显示当前元素到视图中\n * @param element\n */\n bringToView(element: Element): void {\n const ele = element instanceof BranchElement ? ElementUtil.getFirstLeafElement(element) : element as LeafElement;\n if (ele) {\n const region = ElementUtil.getElementRegion(ele);\n const renderObj = ele.paintRenders[0];\n const docRender = ElementUtil.getParentRender(renderObj, DocumentRenderObject) as DocumentRenderObject;\n const index = docRender.getIndex();\n const cursorPos = DocumentCursor.getElementCursorPos(ele, 0, region, index);\n this.selectionState.surround(element);\n if (cursorPos.rect.y - this.viewOptions.translateY > 0 && cursorPos.rect.y - this.viewOptions.translateY < this.viewOptions.viewSettings.height) {\n return;\n }\n this.docScroll.scrollTo(cursorPos.rect.x, cursorPos.rect.y - this.viewOptions.translateY);\n }\n }\n\n /**\n * 设置当前文档页边距\n */\n setDocumentMargin(pageMargin: Partial<MarginProps>): void {\n if (!this.docCtx.document) {\n return;\n }\n this.docCtx.document.updateMargin(pageMargin);\n }\n\n /**\n * 插入元素\n * @param targetElement\n * @param targetOffset\n * @param destEleArray\n * @returns\n */\n insertElement(targetElement: Element, targetOffset: number, destEleArray: Array<Element>): Element | null {\n if (!this.selectionState.editable) {\n return null;\n }\n return this.documentChange.insertElement(targetElement, targetOffset, destEleArray);\n }\n\n showHistory(): void {\n //console.log(History.ops);\n const newPara = new ParagraphElement();\n const pSymbol = new PSymbolElement();\n newPara.addChild(new TextGroupElement());\n newPara.addChild(pSymbol);\n const index = ElementUtil.getControlIndex(pSymbol);\n console.log(index)\n console.log(ElementUtil.getControlByIndex(newPara, {currIndex: -1, index}));\n }\n\n getControlById(index: number) {\n return ElementUtil.getControlByIndex(this.docCtx.document, {currIndex: -1, index});\n }\n\n getControlId(ele: Element) {\n return ElementUtil.getControlIndex(ele);\n }\n\n switchPageLayout(mode: PageLayoutMode): void {\n this.viewOptions.pageLayoutMode = mode;\n if (mode === 'fit-page') {\n this.updateDocHeight();\n }\n this.flushToSchedule();\n }\n\n\n test2(): void {\n //获取文档上下文\n const docEleCtx = this.docCtx.getCtx(this.docCtx.document);\n //获取年龄数据元\n const dataEle = docEleCtx.getControlById('1493477712134672386') as DataElementText;\n //获取要隐藏的数据组\n const dataGroup = docEleCtx.ctx.treeFind((item) => item instanceof DataElementGroupElement) as DataElementGroupElement;\n //侦听数据元更改时间\n dataEle.onChangeSubject.subscribe((e) => {\n //在文档重新排版、绘制前,获取最终的指定节点的内容\n const beforeRefreshSub = this.onBeforeRefreshDocument.subscribe((e2) => {\n console.log('内容发生改变,隐藏数据组');\n //获取年龄数据元输入的值\n const age = Number.parseInt(dataEle.getValue());\n //年龄大于20,隐藏数据元\n dataGroup.props.hidden = age > 20;\n //取消订阅事件\n beforeRefreshSub.unsubscribe();\n });\n\n });\n }\n}\n\n\nexport type EditorCurrentPos = {\n pos: Position\n};\n\nexport type EditorContenxtProps = {\n menus: Array<ContentMenuItem>\n} & EditorCurrentPos\n\nexport type EditorPanelProps = {\n type: string;\n} & EditorCurrentPos;\n\n","import { DocumentBodyElement } from \"./impl/document/doc-body-impl\";\nimport { DocumentBodyPartElement } from \"./impl/document/doc-body-part-impl\";\nimport { DocumentElement } from \"./impl/document/doc-impl\";\n\n/**\n * 文档合并\n */\nexport class DocumentCombine {\n /**\n * 合并模板文档\n * 用于设置合并后,页眉页脚等统一部分\n */\n mainTemplate!: DocumentElement\n\n docParts: Array<{ doc: DocumentElement, docId: string }> = [];\n /**\n * 添加需要合并的文档部分\n */\n add(docPart: DocumentElement, id: string): void {\n this.docParts.push({ doc: docPart, docId: id })\n }\n\n dispose(): void {\n this.docParts.length = 0;\n }\n\n /**\n * 用于合并文档计算\n */\n load(): DocumentElement {\n const template = this.mainTemplate.clone();\n const body = template.find((item) => item instanceof DocumentBodyElement) as DocumentBodyElement;\n body.clearItems();\n for (let i = 0; i < this.docParts.length; i++) {\n const part = this.docParts[i];\n const docPartContainer = new DocumentBodyPartElement();\n docPartContainer.props.partId = part.docId;\n const docPartBody = part.doc.find(item => item instanceof DocumentBodyElement) as DocumentBodyElement\n docPartContainer.addChild(docPartBody.clone(true));\n body.addChild(docPartContainer)\n }\n return template;\n }\n}","import { EditorContext } from \"./document-context\";\nimport { DocumentPaint } from \"./document-paint\";\nimport { printNodes } from \"./document-print\";\nimport { SelectionState } from \"./document-selection\";\nimport { ViewOptions } from \"./element-define\";\nimport { ElementPaint } from \"./element-paint\";\nimport { ElementReader } from \"./element-reader\";\nimport { ElementUtil } from \"./element-util\";\nimport { DocumentElement, DocumentRenderObject } from \"./impl/document/doc-impl\";\nimport { PaintContent, RenderContext, RenderContextType } from \"./render-context\";\n\n/**\n * 离屏打印\n */\nexport abstract class DocumentPrintOffscreenBase {\n documentPaint: DocumentPaint;\n viewOptions: ViewOptions;\n docCtx: EditorContext;\n renderCtx: RenderContextType;\n elementReader: ElementReader;\n\n constructor() {\n this.viewOptions = new ViewOptions();\n this.viewOptions.copyRightInfo = '万达信息电子病历编辑器,www.wondersgroup.com';\n this.viewOptions.showCharRect = true;\n this.viewOptions.drawCharRectColor = 'green';\n this.viewOptions.showLineRect = true;\n this.viewOptions.docSpace = 20;\n this.viewOptions.reviewWindowWidth = 200;\n this.viewOptions.mmToPixelsRatio = 3.7795001220703126;\n //整个画布的尺寸\n this.viewOptions.viewSettings = {\n width: 1000,\n height: 800\n };\n this.viewOptions.editUser = {\n id: '6666',\n name: '管理员'\n };\n const { canvas, ctx } = this.createCanvas(200, 200);\n const ss = new SelectionState();\n this.docCtx = new EditorContext(ss, this.viewOptions);\n this.renderCtx = this.createRenderCtx(ctx, this.viewOptions, this.docCtx);\n this.documentPaint = new DocumentPaint(this.renderCtx, this.docCtx, new Map());\n this.elementReader = new ElementReader(this.docCtx, this.renderCtx);\n this.docCtx.syncRefresh = () => {\n };\n }\n\n async print(data: any | DocumentElement, ranges: Array<number> | null = null): Promise<void> {\n await this.prepare(data);\n const canvasNodes = this.getCanvasNodes(this.documentPaint.docPages, ranges);\n if (!canvasNodes.length) {\n console.warn('无可打印页')\n return;\n }\n const docProps = this.docCtx.document.props;\n printNodes(canvasNodes, { ...docProps });\n }\n\n /**\n * 获取绘制的图片,格式为Base64编码\n */\n async getImagesContent(data: any | DocumentElement, ranges: Array<number> | null = null): Promise<Array<string>> {\n await this.prepare(data);\n const canvasNodes = this.getCanvasNodes(this.documentPaint.docPages, ranges);\n if (!canvasNodes.length) {\n console.warn('无可导出页')\n return [];\n }\n return canvasNodes.map(node => node.toDataURL());\n }\n\n async getPrintNodes(data: any | DocumentElement, ranges: Array<number> | null = null): Promise<Array<any>> {\n await this.prepare(data);\n const canvasNodes = this.getCanvasNodes(this.documentPaint.docPages, ranges);\n return canvasNodes;\n }\n\n /**\n * 读取数据,排版\n * @param data\n */\n private async prepare(data: any | DocumentElement): Promise<void> {\n this.elementReader.read(data);\n this.documentPaint.rePages();\n await Promise.all(this.docCtx.imageLoader.getLoadTasks());\n const { scale, docPageSettings: { width, height } } = this.viewOptions;\n this.renderCtx.update({ scale, width, height });\n }\n\n getCanvasNodes(printPages: Array<DocumentRenderObject>, printRanges: Array<number> | null = null): Array<HTMLCanvasElement> {\n const { scale, docPageSettings: { width, height } } = this.viewOptions;\n const canvasList: Array<HTMLCanvasElement> = [];\n for (let i = 0; i < printPages.length; i++) {\n if (printRanges && printRanges.indexOf(i) === -1) {\n continue;\n }\n const { canvas: canvasNode, ctx } = this.createCanvas(width, height);\n const renderCtx = this.createRenderCtx(ctx, this.viewOptions, this.docCtx);\n renderCtx.init({ width, height, scale });\n renderCtx.drawMode = 'print';\n const doc = printPages[i];\n const tmp = ElementUtil.cloneRect(doc.rect);\n doc.rect.x = 0;\n doc.rect.y = 0;\n ElementPaint.drawPage(renderCtx, this.docCtx, doc, { x: 0, y: 0 });\n renderCtx.overlaysContext.clear();\n renderCtx.mainContext.fillRect(0, 0, width, height, 'white');\n renderCtx.commit({ width, height, scale });\n doc.rect = tmp;\n canvasList.push(canvasNode);\n }\n return canvasList;\n }\n\n abstract createCanvas(width: number, height: number): { canvas: HTMLCanvasElement, ctx: CanvasRenderingContext2D };\n\n abstract createRenderCtx(mainCtx: CanvasRenderingContext2D, viewOptions: ViewOptions, docCtx: EditorContext): RenderContextType;\n}\n\n\nexport class DocumentPrintOffscreen extends DocumentPrintOffscreenBase {\n createRenderCtx(mainCtx: CanvasRenderingContext2D, viewOptions: ViewOptions, docCtx: EditorContext): RenderContextType {\n const renderCtx = new RenderContext(new PaintContent(mainCtx));\n const { scale, docPageSettings: { width, height } } = this.viewOptions;\n renderCtx.init({ scale, width, height });\n return renderCtx;\n }\n\n createCanvas(width: number, height: number): { canvas: HTMLCanvasElement, ctx: CanvasRenderingContext2D } {\n const canvasNode = document.createElement('canvas');\n canvasNode.style.cursor = 'text';\n canvasNode.style.width = width + 'px';\n canvasNode.style.height = height + 'px';\n const ctx = canvasNode.getContext('2d') as CanvasRenderingContext2D;\n ElementUtil.setCanvasProps(canvasNode, ctx, this.viewOptions.docPageSettings);\n return {\n canvas: canvasNode, ctx\n }\n }\n}","import {ContentMenuItem, ContextMenuElementEvent, KeyboradElementEvent} from \"./element-event-define\";\nimport { ElementUtil } from \"./element-util\";\nimport { ElementHandler } from \"./element-define\";\nimport { documentPrint } from \"./document-print\";\nimport {ParagraphElement, TableSplitCell, TableUtil} from \"./impl\";\n\n/**\n * 删除当前段落\n * @param evt\n */\nexport const deleteCurrentParagraph: ElementHandler<ContextMenuElementEvent> = (evt): void => {\n const { selectionState, ctx: { viewOptions }, currentElement } = evt;\n evt.menus.push({\n icon: 'DeleteTable', caption: '删除段落', eventObj: {\n onClick: (cevt) => {\n selectionState.clear();\n const psymbol = ElementUtil.getLastLeafElement(currentElement);\n const nextFocusableEle = ElementUtil.getRecursionNextSiblingElement(psymbol, false, true, viewOptions);\n if (nextFocusableEle) {\n selectionState.resetRange(nextFocusableEle, 0);\n } else {\n selectionState.clear();\n }\n currentElement.remove();\n currentElement.destroy();\n }\n }\n });\n}\n\n/**\n * 文档打印\n * @param cevt \n */\nexport const printDocOnContextmenu: ElementHandler<ContextMenuElementEvent> = (cevt): void => {\n cevt.menus.push({\n icon: 'Print', caption: '打印所有页', eventObj: {\n onClick: (evt) => {\n documentPrint.print(cevt.selectionState, cevt.ctx.viewOptions, cevt.ctx)\n }\n }\n });\n cevt.menus.push({\n icon: 'Print', caption: '打印当前页', eventObj: {\n onClick: (evt) => {\n documentPrint.printCurrPage(cevt.selectionState, cevt.ctx.viewOptions, cevt.ctx)\n }\n }\n });\n};\n\nexport const setDataElementProps:ElementHandler<ContextMenuElementEvent>=(evt):void =>{\n evt.menus.push({\n icon: 'Settings', caption: '内容控制设置', eventObj: {\n onClick:(e)=>{\n console.log('点击了')\n }\n }\n });\n};\n\nexport const onTableContextmenu:ElementHandler<ContextMenuElementEvent>=(evt):void =>{\n const {selectionState, ctx: {viewOptions},currentElement} = evt;\n if (TableUtil.canDeleteTable(selectionState)) {\n evt.menus.push({\n icon: 'DeleteTable', caption: '删除表格', eventObj: {\n onClick: (cevt) => {\n selectionState.clear();\n const prevEle = ElementUtil.getRecursionPrevSiblingElement(currentElement, false, true, viewOptions);\n if (prevEle) {\n selectionState.resetRange(prevEle, -1);\n }\n currentElement.remove();\n currentElement.destroy();\n }\n }\n });\n }\n if (TableUtil.canMergeCells(selectionState)) {\n evt.menus.push({\n icon: 'MergeDuplicate', caption: '合并单元格', eventObj: {\n onClick: (cevt) => {\n TableUtil.mergeCells(selectionState)\n }\n }\n });\n }\n if (TableUtil.canSplitCell(selectionState)) {\n evt.menus.push({\n icon: 'Split', caption: '拆分单元格', eventObj: {\n onClick: (cevt) => {\n TableSplitCell.splitCell(selectionState, 0, 2)\n }\n }\n });\n evt.menus.push({\n icon: 'Combine', caption: '合并单元格还原', eventObj: {\n onClick: (cevt) => {\n TableUtil.restoreCell(selectionState)\n }\n }\n });\n\n }\n evt.menus.push({\n icon: \"Insert\", caption: '上方插入段落', eventObj: {\n onClick: (cevt) => {\n currentElement.parent.addChild(ParagraphElement.createElement(), currentElement.getIndex());\n currentElement.refreshView()\n }\n }\n });\n evt.menus.push({\n icon: \"Insert\", caption: '下方插入段落', eventObj: {\n onClick: (cevt) => {\n currentElement.parent.addChild(ParagraphElement.createElement(), currentElement.getIndex() + 1);\n currentElement.refreshView()\n }\n }\n });\n evt.menus = removeDuplicatesEvent(evt.menus);\n};\n\nfunction removeDuplicatesEvent(events: ContentMenuItem[]): ContentMenuItem[] {\n let arr: ContentMenuItem[] = [];\n for (let i = events.length - 1; i >= 0; i--) {\n let keys = arr.map(item => item.caption);\n if (!keys.includes(events[i].caption)) {\n arr.unshift(events[i]);\n }\n }\n return arr;\n}"],"names":["nanoid","RenderObjectType","moment","ModifyFlag","History.logUpdateEleProps","History.insertEle","History.removeEle","EditMode","DocMode","BooleanEnum","History.formatEle","History.removeText","History.inputText","TrackRunTypeEnum","bwipjs","Track.suppressTracking"],"mappings":"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"}