@hailin-zheng/editor-core 1.0.18 → 1.0.20

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.
Files changed (291) hide show
  1. package/lib/doc-ruler.d.ts +1 -0
  2. package/lib/doc-ruler.d.ts.map +1 -0
  3. package/lib/framework/common-util.d.ts +1 -0
  4. package/lib/framework/common-util.d.ts.map +1 -0
  5. package/lib/framework/document-change.d.ts +1 -0
  6. package/lib/framework/document-change.d.ts.map +1 -0
  7. package/lib/framework/document-combine.d.ts +1 -0
  8. package/lib/framework/document-combine.d.ts.map +1 -0
  9. package/lib/framework/document-comment.d.ts +1 -0
  10. package/lib/framework/document-comment.d.ts.map +1 -0
  11. package/lib/framework/document-context.d.ts +1 -0
  12. package/lib/framework/document-context.d.ts.map +1 -0
  13. package/lib/framework/document-eval-func.d.ts +1 -0
  14. package/lib/framework/document-eval-func.d.ts.map +1 -0
  15. package/lib/framework/document-event.d.ts +1 -0
  16. package/lib/framework/document-event.d.ts.map +1 -0
  17. package/lib/framework/document-history.d.ts +1 -0
  18. package/lib/framework/document-history.d.ts.map +1 -0
  19. package/lib/framework/document-images-loader.d.ts +1 -0
  20. package/lib/framework/document-images-loader.d.ts.map +1 -0
  21. package/lib/framework/document-input-cursor.d.ts +1 -0
  22. package/lib/framework/document-input-cursor.d.ts.map +1 -0
  23. package/lib/framework/document-paint.d.ts +1 -0
  24. package/lib/framework/document-paint.d.ts.map +1 -0
  25. package/lib/framework/document-print-offscreen.d.ts +1 -0
  26. package/lib/framework/document-print-offscreen.d.ts.map +1 -0
  27. package/lib/framework/document-print.d.ts +1 -0
  28. package/lib/framework/document-print.d.ts.map +1 -0
  29. package/lib/framework/document-segmenter.d.ts +1 -0
  30. package/lib/framework/document-segmenter.d.ts.map +1 -0
  31. package/lib/framework/document-selection.d.ts +1 -0
  32. package/lib/framework/document-selection.d.ts.map +1 -0
  33. package/lib/framework/document-template.d.ts +1 -0
  34. package/lib/framework/document-template.d.ts.map +1 -0
  35. package/lib/framework/document-textline-mode.d.ts +1 -0
  36. package/lib/framework/document-textline-mode.d.ts.map +1 -0
  37. package/lib/framework/element-define.d.ts +1 -0
  38. package/lib/framework/element-define.d.ts.map +1 -0
  39. package/lib/framework/element-event-define.d.ts +1 -0
  40. package/lib/framework/element-event-define.d.ts.map +1 -0
  41. package/lib/framework/element-measure.d.ts +1 -0
  42. package/lib/framework/element-measure.d.ts.map +1 -0
  43. package/lib/framework/element-paint.d.ts +1 -0
  44. package/lib/framework/element-paint.d.ts.map +1 -0
  45. package/lib/framework/element-props.d.ts +2 -1
  46. package/lib/framework/element-props.d.ts.map +1 -0
  47. package/lib/framework/element-reader.d.ts +1 -0
  48. package/lib/framework/element-reader.d.ts.map +1 -0
  49. package/lib/framework/element-render-cut.d.ts +1 -0
  50. package/lib/framework/element-render-cut.d.ts.map +1 -0
  51. package/lib/framework/element-serialize.d.ts +1 -0
  52. package/lib/framework/element-serialize.d.ts.map +1 -0
  53. package/lib/framework/element-util.d.ts +1 -0
  54. package/lib/framework/element-util.d.ts.map +1 -0
  55. package/lib/framework/impl/checkbox/checkbox-impl.d.ts +1 -0
  56. package/lib/framework/impl/checkbox/checkbox-impl.d.ts.map +1 -0
  57. package/lib/framework/impl/comments/comment-content-impl.d.ts +1 -0
  58. package/lib/framework/impl/comments/comment-content-impl.d.ts.map +1 -0
  59. package/lib/framework/impl/comments/comment-element-impl.d.ts +1 -0
  60. package/lib/framework/impl/comments/comment-element-impl.d.ts.map +1 -0
  61. package/lib/framework/impl/comments/comments-container-impl.d.ts +1 -0
  62. package/lib/framework/impl/comments/comments-container-impl.d.ts.map +1 -0
  63. package/lib/framework/impl/comments/comments-util.d.ts +1 -0
  64. package/lib/framework/impl/comments/comments-util.d.ts.map +1 -0
  65. package/lib/framework/impl/comments/validate-msg-impl.d.ts +1 -0
  66. package/lib/framework/impl/comments/validate-msg-impl.d.ts.map +1 -0
  67. package/lib/framework/impl/data-element/data-decorate-impl.d.ts +1 -0
  68. package/lib/framework/impl/data-element/data-decorate-impl.d.ts.map +1 -0
  69. package/lib/framework/impl/data-element/data-element-barcode.d.ts +1 -0
  70. package/lib/framework/impl/data-element/data-element-barcode.d.ts.map +1 -0
  71. package/lib/framework/impl/data-element/data-element-base-impl.d.ts +1 -0
  72. package/lib/framework/impl/data-element/data-element-base-impl.d.ts.map +1 -0
  73. package/lib/framework/impl/data-element/data-element-check-impl.d.ts +1 -0
  74. package/lib/framework/impl/data-element/data-element-check-impl.d.ts.map +1 -0
  75. package/lib/framework/impl/data-element/data-element-date-impl.d.ts +1 -0
  76. package/lib/framework/impl/data-element/data-element-date-impl.d.ts.map +1 -0
  77. package/lib/framework/impl/data-element/data-element-group-impl.d.ts +1 -0
  78. package/lib/framework/impl/data-element/data-element-group-impl.d.ts.map +1 -0
  79. package/lib/framework/impl/data-element/data-element-image-impl.d.ts +1 -0
  80. package/lib/framework/impl/data-element/data-element-image-impl.d.ts.map +1 -0
  81. package/lib/framework/impl/data-element/data-element-list-impl.d.ts +1 -0
  82. package/lib/framework/impl/data-element/data-element-list-impl.d.ts.map +1 -0
  83. package/lib/framework/impl/data-element/data-element-text-impl.d.ts +1 -0
  84. package/lib/framework/impl/data-element/data-element-text-impl.d.ts.map +1 -0
  85. package/lib/framework/impl/decorate/fill-null-space-imple.d.ts +1 -0
  86. package/lib/framework/impl/decorate/fill-null-space-imple.d.ts.map +1 -0
  87. package/lib/framework/impl/document/doc-body-impl.d.ts +1 -0
  88. package/lib/framework/impl/document/doc-body-impl.d.ts.map +1 -0
  89. package/lib/framework/impl/document/doc-body-part-impl.d.ts +1 -0
  90. package/lib/framework/impl/document/doc-body-part-impl.d.ts.map +1 -0
  91. package/lib/framework/impl/document/doc-container-impl.d.ts +1 -0
  92. package/lib/framework/impl/document/doc-container-impl.d.ts.map +1 -0
  93. package/lib/framework/impl/document/doc-footer-impl.d.ts +1 -0
  94. package/lib/framework/impl/document/doc-footer-impl.d.ts.map +1 -0
  95. package/lib/framework/impl/document/doc-header-impl.d.ts +1 -0
  96. package/lib/framework/impl/document/doc-header-impl.d.ts.map +1 -0
  97. package/lib/framework/impl/document/doc-impl.d.ts +1 -0
  98. package/lib/framework/impl/document/doc-impl.d.ts.map +1 -0
  99. package/lib/framework/impl/index.d.ts +37 -0
  100. package/lib/framework/impl/index.d.ts.map +1 -0
  101. package/lib/framework/impl/media-formula/menstrual-history.d.ts +1 -0
  102. package/lib/framework/impl/media-formula/menstrual-history.d.ts.map +1 -0
  103. package/lib/framework/impl/paragraph/p-impl.d.ts +1 -0
  104. package/lib/framework/impl/paragraph/p-impl.d.ts.map +1 -0
  105. package/lib/framework/impl/picture/image-impl.d.ts +1 -0
  106. package/lib/framework/impl/picture/image-impl.d.ts.map +1 -0
  107. package/lib/framework/impl/radio/radio-impl.d.ts +1 -0
  108. package/lib/framework/impl/radio/radio-impl.d.ts.map +1 -0
  109. package/lib/framework/impl/symbol/br-symbol-impl.d.ts +1 -0
  110. package/lib/framework/impl/symbol/br-symbol-impl.d.ts.map +1 -0
  111. package/lib/framework/impl/symbol/p-symbol-impl.d.ts +1 -0
  112. package/lib/framework/impl/symbol/p-symbol-impl.d.ts.map +1 -0
  113. package/lib/framework/impl/table/table-cell-impl.d.ts +1 -0
  114. package/lib/framework/impl/table/table-cell-impl.d.ts.map +1 -0
  115. package/lib/framework/impl/table/table-impl.d.ts +1 -0
  116. package/lib/framework/impl/table/table-impl.d.ts.map +1 -0
  117. package/lib/framework/impl/table/table-row-impl.d.ts +1 -0
  118. package/lib/framework/impl/table/table-row-impl.d.ts.map +1 -0
  119. package/lib/framework/impl/table/table-split-cell-patch.d.ts +1 -0
  120. package/lib/framework/impl/table/table-split-cell-patch.d.ts.map +1 -0
  121. package/lib/framework/impl/table/table-split-cell.d.ts +1 -0
  122. package/lib/framework/impl/table/table-split-cell.d.ts.map +1 -0
  123. package/lib/framework/impl/table/table-util.d.ts +1 -0
  124. package/lib/framework/impl/table/table-util.d.ts.map +1 -0
  125. package/lib/framework/impl/text/text-impl.d.ts +1 -0
  126. package/lib/framework/impl/text/text-impl.d.ts.map +1 -0
  127. package/lib/framework/impl/text/track-run-impl.d.ts +1 -0
  128. package/lib/framework/impl/text/track-run-impl.d.ts.map +1 -0
  129. package/lib/framework/notify.d.ts +1 -0
  130. package/lib/framework/notify.d.ts.map +1 -0
  131. package/lib/framework/range-util.d.ts +1 -0
  132. package/lib/framework/range-util.d.ts.map +1 -0
  133. package/lib/framework/render-context.d.ts +1 -0
  134. package/lib/framework/render-context.d.ts.map +1 -0
  135. package/lib/framework/render-define.d.ts +1 -0
  136. package/lib/framework/render-define.d.ts.map +1 -0
  137. package/lib/framework/selection-overlays.d.ts +1 -0
  138. package/lib/framework/selection-overlays.d.ts.map +1 -0
  139. package/lib/index.d.ts +35 -0
  140. package/lib/index.d.ts.map +1 -0
  141. package/lib/index.js +15671 -0
  142. package/lib/texteditor.d.ts +3 -2
  143. package/lib/texteditor.d.ts.map +1 -0
  144. package/lib/util/subject.d.ts +1 -0
  145. package/lib/util/subject.d.ts.map +1 -0
  146. package/lib/util/table-bind.d.ts +1 -0
  147. package/lib/util/table-bind.d.ts.map +1 -0
  148. package/package.json +32 -23
  149. package/README.md +0 -1613
  150. package/lib/doc-ruler.js +0 -313
  151. package/lib/doc-ruler.js.map +0 -1
  152. package/lib/framework/common-util.js +0 -178
  153. package/lib/framework/common-util.js.map +0 -1
  154. package/lib/framework/document-change.js +0 -1342
  155. package/lib/framework/document-change.js.map +0 -1
  156. package/lib/framework/document-combine.js +0 -40
  157. package/lib/framework/document-combine.js.map +0 -1
  158. package/lib/framework/document-comment.js +0 -148
  159. package/lib/framework/document-comment.js.map +0 -1
  160. package/lib/framework/document-context.js +0 -330
  161. package/lib/framework/document-context.js.map +0 -1
  162. package/lib/framework/document-eval-func.js +0 -48
  163. package/lib/framework/document-eval-func.js.map +0 -1
  164. package/lib/framework/document-event.js +0 -1054
  165. package/lib/framework/document-event.js.map +0 -1
  166. package/lib/framework/document-history.js +0 -65
  167. package/lib/framework/document-history.js.map +0 -1
  168. package/lib/framework/document-images-loader.js +0 -66
  169. package/lib/framework/document-images-loader.js.map +0 -1
  170. package/lib/framework/document-input-cursor.js +0 -239
  171. package/lib/framework/document-input-cursor.js.map +0 -1
  172. package/lib/framework/document-paint.js +0 -103
  173. package/lib/framework/document-paint.js.map +0 -1
  174. package/lib/framework/document-print-offscreen.js +0 -128
  175. package/lib/framework/document-print-offscreen.js.map +0 -1
  176. package/lib/framework/document-print.js +0 -203
  177. package/lib/framework/document-print.js.map +0 -1
  178. package/lib/framework/document-segmenter.js +0 -106
  179. package/lib/framework/document-segmenter.js.map +0 -1
  180. package/lib/framework/document-selection.js +0 -358
  181. package/lib/framework/document-selection.js.map +0 -1
  182. package/lib/framework/document-template.js +0 -20
  183. package/lib/framework/document-template.js.map +0 -1
  184. package/lib/framework/document-textline-mode.js +0 -30
  185. package/lib/framework/document-textline-mode.js.map +0 -1
  186. package/lib/framework/element-define.js +0 -579
  187. package/lib/framework/element-define.js.map +0 -1
  188. package/lib/framework/element-event-define.js +0 -108
  189. package/lib/framework/element-event-define.js.map +0 -1
  190. package/lib/framework/element-measure.js +0 -551
  191. package/lib/framework/element-measure.js.map +0 -1
  192. package/lib/framework/element-paint.js +0 -170
  193. package/lib/framework/element-paint.js.map +0 -1
  194. package/lib/framework/element-props.js +0 -809
  195. package/lib/framework/element-props.js.map +0 -1
  196. package/lib/framework/element-reader.js +0 -151
  197. package/lib/framework/element-reader.js.map +0 -1
  198. package/lib/framework/element-render-cut.js +0 -449
  199. package/lib/framework/element-render-cut.js.map +0 -1
  200. package/lib/framework/element-serialize.js +0 -113
  201. package/lib/framework/element-serialize.js.map +0 -1
  202. package/lib/framework/element-util.js +0 -1463
  203. package/lib/framework/element-util.js.map +0 -1
  204. package/lib/framework/impl/checkbox/checkbox-impl.js +0 -64
  205. package/lib/framework/impl/checkbox/checkbox-impl.js.map +0 -1
  206. package/lib/framework/impl/comments/comment-content-impl.js +0 -105
  207. package/lib/framework/impl/comments/comment-content-impl.js.map +0 -1
  208. package/lib/framework/impl/comments/comment-element-impl.js +0 -62
  209. package/lib/framework/impl/comments/comment-element-impl.js.map +0 -1
  210. package/lib/framework/impl/comments/comments-container-impl.js +0 -62
  211. package/lib/framework/impl/comments/comments-container-impl.js.map +0 -1
  212. package/lib/framework/impl/comments/comments-util.js +0 -67
  213. package/lib/framework/impl/comments/comments-util.js.map +0 -1
  214. package/lib/framework/impl/comments/validate-msg-impl.js +0 -83
  215. package/lib/framework/impl/comments/validate-msg-impl.js.map +0 -1
  216. package/lib/framework/impl/data-element/data-decorate-impl.js +0 -91
  217. package/lib/framework/impl/data-element/data-decorate-impl.js.map +0 -1
  218. package/lib/framework/impl/data-element/data-element-barcode.js +0 -115
  219. package/lib/framework/impl/data-element/data-element-barcode.js.map +0 -1
  220. package/lib/framework/impl/data-element/data-element-base-impl.js +0 -205
  221. package/lib/framework/impl/data-element/data-element-base-impl.js.map +0 -1
  222. package/lib/framework/impl/data-element/data-element-check-impl.js +0 -133
  223. package/lib/framework/impl/data-element/data-element-check-impl.js.map +0 -1
  224. package/lib/framework/impl/data-element/data-element-date-impl.js +0 -111
  225. package/lib/framework/impl/data-element/data-element-date-impl.js.map +0 -1
  226. package/lib/framework/impl/data-element/data-element-group-impl.js +0 -130
  227. package/lib/framework/impl/data-element/data-element-group-impl.js.map +0 -1
  228. package/lib/framework/impl/data-element/data-element-image-impl.js +0 -137
  229. package/lib/framework/impl/data-element/data-element-image-impl.js.map +0 -1
  230. package/lib/framework/impl/data-element/data-element-list-impl.js +0 -131
  231. package/lib/framework/impl/data-element/data-element-list-impl.js.map +0 -1
  232. package/lib/framework/impl/data-element/data-element-text-impl.js +0 -103
  233. package/lib/framework/impl/data-element/data-element-text-impl.js.map +0 -1
  234. package/lib/framework/impl/decorate/fill-null-space-imple.js +0 -43
  235. package/lib/framework/impl/decorate/fill-null-space-imple.js.map +0 -1
  236. package/lib/framework/impl/document/doc-body-impl.js +0 -79
  237. package/lib/framework/impl/document/doc-body-impl.js.map +0 -1
  238. package/lib/framework/impl/document/doc-body-part-impl.js +0 -94
  239. package/lib/framework/impl/document/doc-body-part-impl.js.map +0 -1
  240. package/lib/framework/impl/document/doc-container-impl.js +0 -21
  241. package/lib/framework/impl/document/doc-container-impl.js.map +0 -1
  242. package/lib/framework/impl/document/doc-footer-impl.js +0 -77
  243. package/lib/framework/impl/document/doc-footer-impl.js.map +0 -1
  244. package/lib/framework/impl/document/doc-header-impl.js +0 -83
  245. package/lib/framework/impl/document/doc-header-impl.js.map +0 -1
  246. package/lib/framework/impl/document/doc-impl.js +0 -209
  247. package/lib/framework/impl/document/doc-impl.js.map +0 -1
  248. package/lib/framework/impl/media-formula/menstrual-history.js +0 -153
  249. package/lib/framework/impl/media-formula/menstrual-history.js.map +0 -1
  250. package/lib/framework/impl/paragraph/p-impl.js +0 -156
  251. package/lib/framework/impl/paragraph/p-impl.js.map +0 -1
  252. package/lib/framework/impl/picture/image-impl.js +0 -124
  253. package/lib/framework/impl/picture/image-impl.js.map +0 -1
  254. package/lib/framework/impl/radio/radio-impl.js +0 -72
  255. package/lib/framework/impl/radio/radio-impl.js.map +0 -1
  256. package/lib/framework/impl/symbol/br-symbol-impl.js +0 -54
  257. package/lib/framework/impl/symbol/br-symbol-impl.js.map +0 -1
  258. package/lib/framework/impl/symbol/p-symbol-impl.js +0 -54
  259. package/lib/framework/impl/symbol/p-symbol-impl.js.map +0 -1
  260. package/lib/framework/impl/table/table-cell-impl.js +0 -145
  261. package/lib/framework/impl/table/table-cell-impl.js.map +0 -1
  262. package/lib/framework/impl/table/table-impl.js +0 -363
  263. package/lib/framework/impl/table/table-impl.js.map +0 -1
  264. package/lib/framework/impl/table/table-row-impl.js +0 -75
  265. package/lib/framework/impl/table/table-row-impl.js.map +0 -1
  266. package/lib/framework/impl/table/table-split-cell-patch.js +0 -89
  267. package/lib/framework/impl/table/table-split-cell-patch.js.map +0 -1
  268. package/lib/framework/impl/table/table-split-cell.js +0 -464
  269. package/lib/framework/impl/table/table-split-cell.js.map +0 -1
  270. package/lib/framework/impl/table/table-util.js +0 -678
  271. package/lib/framework/impl/table/table-util.js.map +0 -1
  272. package/lib/framework/impl/text/text-impl.js +0 -149
  273. package/lib/framework/impl/text/text-impl.js.map +0 -1
  274. package/lib/framework/impl/text/track-run-impl.js +0 -112
  275. package/lib/framework/impl/text/track-run-impl.js.map +0 -1
  276. package/lib/framework/notify.js +0 -116
  277. package/lib/framework/notify.js.map +0 -1
  278. package/lib/framework/range-util.js +0 -312
  279. package/lib/framework/range-util.js.map +0 -1
  280. package/lib/framework/render-context.js +0 -384
  281. package/lib/framework/render-context.js.map +0 -1
  282. package/lib/framework/render-define.js +0 -195
  283. package/lib/framework/render-define.js.map +0 -1
  284. package/lib/framework/selection-overlays.js +0 -124
  285. package/lib/framework/selection-overlays.js.map +0 -1
  286. package/lib/texteditor.js +0 -913
  287. package/lib/texteditor.js.map +0 -1
  288. package/lib/util/subject.js +0 -88
  289. package/lib/util/subject.js.map +0 -1
  290. package/lib/util/table-bind.js +0 -6
  291. package/lib/util/table-bind.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"document-event.js","sourceRoot":"lib/","sources":["framework/document-event.ts"],"names":[],"mappings":"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","sourcesContent":["import { CommonUtil } from \"./common-util\";\nimport { fromEvent, Subject, Subscription } from \"rxjs\";\nimport { DocumentPaint } from \"./document-paint\";\nimport { SelectionRange, SelectionState } from \"./document-selection\";\nimport { LeafElement, Rect, Element, Position, ViewOptions, ResizeLeafRenderObject, DocMode } from \"./element-define\";\nimport { DropElementEvent, ElementEvent, EventStage, EventTypes, GetTrackTipsEvent, GotCursorEvent, HitEventInfo, HitRegion, ITrackTips, LostCursorEvent, MousedownElementEvent, MouseElementEvent } from \"./element-event-define\";\nimport { ElementUtil } from \"./element-util\";\nimport { DocumentRenderObject } from \"./impl/document/doc-impl\";\nimport { PictureElement } from \"./impl/picture/image-impl\";\nimport { BreakElement } from \"./impl/symbol/br-symbol-impl\";\nimport { PSymbolElement } from \"./impl/symbol/p-symbol-impl\";\nimport { TableCellElement, TableCellRenderObject } from \"./impl/table/table-cell-impl\";\nimport { TableElement } from \"./impl/table/table-impl\";\nimport { TableRowElement, TableRowRenderObject } from \"./impl/table/table-row-impl\";\nimport { BorderType, BranchRenderObject, CursorType, LeafRenderObject, RenderObject } from \"./render-define\";\nimport { EditorContext } from \"./document-context\";\nimport { ParagraphLineRectRenderObject } from \"./impl/paragraph/p-impl\";\nimport { TextGroupElement } from \"./impl/text/text-impl\";\nimport { DocumentHeaderRenderObject } from \"./impl/document/doc-header-impl\";\nimport { DocumentFooterRenderObject } from \"./impl/document/doc-footer-impl\";\nimport { debounceTime } from \"rxjs/operators\";\ninterface EdgeRenderInfo { renderElement: Element, relativePos: Position, mousedown: boolean, mousedownPos?: Position, border: BorderType }\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\n constructor(private canvas: HTMLCanvasElement, private documentPaint: DocumentPaint, private viewOptions: ViewOptions, private selectionState: SelectionState, private docCtx: EditorContext) {\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, 'mousemove').pipe(debounceTime(500)).subscribe((evt) => {\n this.getTips();\n }));\n this.addSubEvent(fromEvent<MouseEvent>(this.canvas, 'dblclick').subscribe((evt) => {\n this.mouseDblClickHandle(evt);\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 docEvent.globalX = evt.offsetX;\n docEvent.globalY = evt.offsetY;\n docEvent.buttons = evt.buttons;\n docEvent.shift = evt.shiftKey;\n docEvent.ctrl = evt.ctrlKey;\n this.mousedownPos = { x: evt.offsetX, y: evt.offsetY };\n this.mousedownHandle(docEvent);\n }\n\n private mouseup(evt: MouseEvent): void {\n const docEvent = new MouseElementEvent(this.docCtx);\n docEvent.globalX = evt.offsetX;\n docEvent.globalY = evt.offsetY;\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 docEvent.globalX = evt.offsetX;\n docEvent.globalY = evt.offsetY;\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 private prevTrackInfo: boolean = false;\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 && !this.selectionState.collapsed) {\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({ startHitInfo: this.startHitInfo as HitEventInfo, endHitInfo: this.endHitInfo as HitEventInfo });\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: -docRender.rect.x, y: -docRender.rect.y }, { x: evt.pageX, y: evt.pageY });\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: this.documentPaint.elementPaint.getShadowRenderIndex(element, hitInfo.render),\n startRegion: ElementUtil.getRenderObjectRegion(hitInfo.render)\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, { x: -docRender.rect.x, y: -docRender.rect.y }, { 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 = { renderElement: this.focusedElement, relativePos, mousedown: false, border: isInCellBorder.borderType };\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 = { renderElement: cellRender.element, relativePos, mousedown: false, border: isInCellBorder.borderType };\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 * @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 docEvent.globalX = evt.offsetX;\n docEvent.globalY = evt.offsetY;\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) { return }\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 = { x: parPos.x + renderObject.rect.x, y: parPos.y + renderObject.rect.y, width: renderObject.rect.width, height: renderObject.rect.height, maxWidth: 0, maxHeight: 0 };\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, { x: renderObjectRect.x, y: renderObjectRect.y }, 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\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 = { x: parent.x + renderObject.rect.x, y: parent.y + renderObject.rect.y, width: renderObject.rect.width, height: renderObject.rect.height, maxWidth: 0, maxHeight: 0 };\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 => ({ rect: item.rect, distance: ElementUtil.getDistanceToRect(item.rect, position), render: item.render }))\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 /**\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 docRenderPos: Position = { x: docRender.rect.x + x, y: docRender.rect.y + y };\n if (docRenderPos.y + docRender.rect.height > hitPos.y) {\n break;\n }\n if (docRenderPos.y > hitPos.y) {\n break;\n }\n }\n i = i === docContainer.length ? i - 1 : i;\n const hitDoc = docContainer.getChild(i) as DocumentRenderObject;\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 }\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 */\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({ startHitInfo: this.startHitInfo as HitEventInfo, endHitInfo: this.endHitInfo as HitEventInfo });\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 = { x: parent.x + renderObject.rect.x, y: parent.y + renderObject.rect.y, width: renderObject.rect.width, height: renderObject.rect.height, maxWidth: 0, maxHeight: 0 };\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, { x: renderObjectRect.x, y: renderObjectRect.y }, 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 }\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);\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);\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"]}
@@ -1,65 +0,0 @@
1
- import { debounceTime, filter } from 'rxjs/operators';
2
- import { ElementSerialize } from "./element-serialize";
3
- /**
4
- * 支持文档重做和撤销的类
5
- */
6
- export class DocumentHistory {
7
- docCtx;
8
- reader;
9
- task = Promise.resolve();
10
- constructor(docCtx, reader, onDocChangedEvent) {
11
- this.docCtx = docCtx;
12
- this.reader = reader;
13
- onDocChangedEvent.pipe(filter(() => this.docCtx.viewOptions.enableUndo), debounceTime(1500)).subscribe(() => {
14
- this.task.then(() => {
15
- if (!this.docCtx.viewOptions.enableUndo || !this.docCtx.isDirty) {
16
- return;
17
- }
18
- this.generateHistoryItem();
19
- });
20
- });
21
- }
22
- _undoStack = [];
23
- _index = -1;
24
- maxLength = 50;
25
- generateHistoryItem() {
26
- console.log('生成历史记录');
27
- if (this.maxLength === this._undoStack.length) {
28
- this._undoStack.shift();
29
- }
30
- this._undoStack.splice(this._index + 1, this._undoStack.length - this._index - 1);
31
- const content = ElementSerialize.serialize(this.docCtx.document, this.docCtx.viewOptions);
32
- this._undoStack.push({
33
- content,
34
- time: new Date()
35
- });
36
- this._index++;
37
- }
38
- get index() {
39
- return this._index;
40
- }
41
- get canUndo() {
42
- return this._index > 0;
43
- }
44
- get canRedo() {
45
- return this._index < this._undoStack.length - 1;
46
- }
47
- undo() {
48
- if (this.canUndo) {
49
- this._index--;
50
- this.reader.read(this._undoStack[this._index].content);
51
- }
52
- }
53
- redo() {
54
- if (this.canRedo) {
55
- this._index++;
56
- this.reader.read(this._undoStack[this._index].content);
57
- }
58
- }
59
- clear() {
60
- this._undoStack = [];
61
- this._index = -1;
62
- this.generateHistoryItem();
63
- }
64
- }
65
- //# sourceMappingURL=document-history.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"document-history.js","sourceRoot":"lib/","sources":["framework/document-history.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAGrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAMvD;;GAEG;AACH,MAAM,OAAO,eAAe;IAEL;IAA8B;IADjD,IAAI,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IACxC,YAAmB,MAAqB,EAAS,MAAqB,EAAE,iBAAgC;QAArF,WAAM,GAAN,MAAM,CAAe;QAAS,WAAM,GAAN,MAAM,CAAe;QAClE,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE;YACxG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;gBAChB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;oBAC7D,OAAO;iBACV;gBACD,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC/B,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IACO,UAAU,GAA0B,EAAE,CAAC;IACvC,MAAM,GAAW,CAAC,CAAC,CAAC;IAC5B,SAAS,GAAW,EAAE,CAAC;IACvB,mBAAmB;QACf,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtB,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;YAC3C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;SAC3B;QACD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAClF,MAAM,OAAO,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC1F,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACjB,OAAO;YACP,IAAI,EAAE,IAAI,IAAI,EAAE;SACnB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,EAAE,CAAC;IAClB,CAAC;IAED,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IACpD,CAAC;IAED,IAAI;QACA,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;SAC1D;IACL,CAAC;IAED,IAAI;QACA,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;SAC1D;IACL,CAAC;IAED,KAAK;QACD,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC/B,CAAC;CAEJ","sourcesContent":["import { read } from \"fs\";\nimport { Subject } from \"rxjs\";\nimport { debounceTime, filter } from 'rxjs/operators'\nimport { EditorContext } from \"./document-context\";\nimport { ElementReader } from \"./element-reader\";\nimport { ElementSerialize } from \"./element-serialize\";\n\nexport interface DocumentHistoryItem {\n content: any,\n time: Date\n}\n/**\n * 支持文档重做和撤销的类 \n */\nexport class DocumentHistory {\n task: Promise<void> = Promise.resolve();\n constructor(public docCtx: EditorContext, public reader: ElementReader, onDocChangedEvent: Subject<void>) {\n onDocChangedEvent.pipe(filter(() => this.docCtx.viewOptions.enableUndo), debounceTime(1500)).subscribe(() => {\n this.task.then(() => {\n if (!this.docCtx.viewOptions.enableUndo || !this.docCtx.isDirty) {\n return;\n }\n this.generateHistoryItem();\n });\n });\n }\n private _undoStack: DocumentHistoryItem[] = [];\n private _index: number = -1;\n maxLength: number = 50;\n generateHistoryItem(): void {\n console.log('生成历史记录');\n if (this.maxLength === this._undoStack.length) {\n this._undoStack.shift();\n }\n this._undoStack.splice(this._index + 1, this._undoStack.length - this._index - 1);\n const content = ElementSerialize.serialize(this.docCtx.document, this.docCtx.viewOptions);\n this._undoStack.push({\n content,\n time: new Date()\n });\n this._index++;\n }\n\n get index() {\n return this._index;\n }\n\n get canUndo() {\n return this._index > 0;\n }\n\n get canRedo() {\n return this._index < this._undoStack.length - 1;\n }\n\n undo() {\n if (this.canUndo) {\n this._index--;\n this.reader.read(this._undoStack[this._index].content);\n }\n }\n\n redo() {\n if (this.canRedo) {\n this._index++;\n this.reader.read(this._undoStack[this._index].content);\n }\n }\n\n clear() {\n this._undoStack = [];\n this._index = -1;\n this.generateHistoryItem();\n }\n\n}"]}
@@ -1,66 +0,0 @@
1
- export class DocumentImagesLoader {
2
- images = [];
3
- clear() {
4
- this.images.length = 0;
5
- }
6
- loadImage(src, onCallback) {
7
- if (!src) {
8
- return;
9
- }
10
- //已经存在的资源不需要重新加载
11
- let matchItem = this.images.find(item => item.src === src);
12
- if (matchItem) {
13
- if (matchItem.loadStatus === 'no') {
14
- matchItem.cbs.push(onCallback);
15
- }
16
- else {
17
- onCallback(matchItem.loadStatus);
18
- }
19
- return;
20
- }
21
- const ele = new Image();
22
- ele.src = src;
23
- const task = new Promise((r, i) => {
24
- ele.onload = (e) => { this.invokeImgLoad(src, 'completed'); r(); };
25
- ele.onerror = (e) => { this.invokeImgLoad(src, 'error'); r(); };
26
- });
27
- const imgItem = {
28
- ele,
29
- src,
30
- cbs: [onCallback],
31
- loadStatus: 'no',
32
- task
33
- };
34
- this.images.push(imgItem);
35
- // if (this.viewOptions.resourceMode === 'immediate') {
36
- // ele.onload = (e) => { this.invokeImgLoad(src, 'completed'); };
37
- // ele.onerror = (e) => { this.invokeImgLoad(src, 'error'); };
38
- // }
39
- }
40
- invokeImgLoad(src, status) {
41
- const img = this.images.find(item => item.src === src);
42
- if (img) {
43
- img.loadStatus = status;
44
- img.cbs.forEach(cb => cb(status));
45
- }
46
- }
47
- getLoadTasks() {
48
- return this.images.map(item => item.task);
49
- }
50
- getImage(src) {
51
- const img = this.images.find(item => item.src === src);
52
- return img?.ele;
53
- }
54
- /**
55
- * 判断图片是否都已经加载完毕
56
- * 用于打印时判断,如果当前图片没有加载完毕就打印,图片是打印不出来
57
- * @returns
58
- */
59
- imagesLoadCompleted() {
60
- if (this.images.length === 0) {
61
- return true;
62
- }
63
- return this.images.every(item => ['completed', 'error'].includes(item.loadStatus));
64
- }
65
- }
66
- //# sourceMappingURL=document-images-loader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"document-images-loader.js","sourceRoot":"lib/","sources":["framework/document-images-loader.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,oBAAoB;IAC7B,MAAM,GAA2B,EAAE,CAAC;IAEpC,KAAK;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,SAAS,CAAC,GAAW,EAAE,UAA2C;QAC9D,IAAI,CAAC,GAAG,EAAE;YACN,OAAO;SACV;QACD,gBAAgB;QAChB,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAC3D,IAAI,SAAS,EAAE;YACX,IAAI,SAAS,CAAC,UAAU,KAAK,IAAI,EAAE;gBAC/B,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aAClC;iBAAM;gBACH,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;aACpC;YACD,OAAO;SACV;QACD,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;QACd,MAAM,IAAI,GAAG,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACpC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACnE,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,GAAoB;YAC7B,GAAG;YACH,GAAG;YACH,GAAG,EAAE,CAAC,UAAU,CAAC;YACjB,UAAU,EAAE,IAAI;YAChB,IAAI;SACP,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACzB,uDAAuD;QACvD,qEAAqE;QACrE,kEAAkE;QAClE,IAAI;IACR,CAAC;IAED,aAAa,CAAC,GAAW,EAAE,MAAqB;QAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QACvD,IAAI,GAAG,EAAE;YACL,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC;YACxB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;SACrC;IACL,CAAC;IAED,YAAY;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IAGD,QAAQ,CAAC,GAAW;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QACvD,OAAO,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC;IAED;;;;OAIG;IACH,mBAAmB;QACf,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1B,OAAO,IAAI,CAAC;SACf;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAA;IACtF,CAAC;CACJ","sourcesContent":["import { IImageLoader, ImageSourceItem } from \"./document-context\";\nimport { ImgLoadStatus } from \"./element-define\";\n\nexport class DocumentImagesLoader 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 ele = new Image();\n ele.src = src;\n const task = new Promise<void>((r, i) => {\n ele.onload = (e) => { this.invokeImgLoad(src, 'completed'); r(); };\n ele.onerror = (e) => { this.invokeImgLoad(src, 'error'); r(); };\n });\n const imgItem: ImageSourceItem = {\n ele,\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 invokeImgLoad(src: string, status: ImgLoadStatus): 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 }\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}"]}
@@ -1,239 +0,0 @@
1
- import { fromEvent, Subject } from "rxjs";
2
- import { KeyboradElementEvent } from "./element-event-define";
3
- import { DocumentEvent } from "./document-event";
4
- /**
5
- * 输入处理
6
- */
7
- export class DocumentInput {
8
- editInput;
9
- editCursor;
10
- cursorWrapper;
11
- docCtx;
12
- /**
13
- * 光标是否可见
14
- */
15
- _cursorVisibility = false;
16
- /**
17
- * 光标闪烁状态
18
- */
19
- _cursorBlinksState = false;
20
- cursorBlinksIntervalID;
21
- //是否是开启输入法了
22
- compositionStart = false;
23
- //开启输入法后输入的文字
24
- compositionPrevData;
25
- //开启输入法后的的元素
26
- compositionStartInfo;
27
- //输入内容事件
28
- onInputEvent = new Subject();
29
- //backspace 键盘事件
30
- onBackspaceEvent = new Subject();
31
- //delete 键盘事件
32
- onDeleteEvent = new Subject();
33
- //enter 键盘事件
34
- onEnterEvent = new Subject();
35
- //左键
36
- onLeftEvent = new Subject();
37
- //右键
38
- onRightEvent = new Subject();
39
- //复制
40
- onCopyEvent = new Subject();
41
- //剪切
42
- onCutEvent = new Subject();
43
- //粘贴
44
- onPasteEvent = new Subject();
45
- //插入换行符
46
- onInsertBr = new Subject();
47
- //ctrl+A 全选事件
48
- onSelectAllEvent = new Subject();
49
- //home 事件
50
- onHomeEvent = new Subject();
51
- //end 事件
52
- onEndEvent = new Subject();
53
- onUpEvent = new Subject();
54
- onDownEvent = new Subject();
55
- constructor(editInput, editCursor, cursorWrapper, docCtx) {
56
- this.editInput = editInput;
57
- this.editCursor = editCursor;
58
- this.cursorWrapper = cursorWrapper;
59
- this.docCtx = docCtx;
60
- this.startCursorBlinks();
61
- fromEvent(this.editInput, 'blur').subscribe(() => {
62
- this._cursorVisibility = false;
63
- //console.log('输入框 blur');
64
- });
65
- fromEvent(this.editInput, 'focus').subscribe(() => {
66
- //console.log('输入框 focus');
67
- });
68
- fromEvent(this.editInput, 'input').subscribe(() => {
69
- if (this.compositionStart) {
70
- return;
71
- }
72
- if (!this.editInput.value) {
73
- return;
74
- }
75
- //console.log('输入文字了');
76
- if (!this.compositionStart) {
77
- const { startControl, startOffset } = this.docCtx.selectionState;
78
- this.onInputEvent.next({
79
- data: this.editInput.value, prevInputData: '', compositionStartInfo: {
80
- element: startControl,
81
- offset: startOffset
82
- }
83
- });
84
- this.editInput.value = '';
85
- }
86
- });
87
- fromEvent(this.editInput, 'compositionstart').subscribe((evt) => {
88
- this.compositionStart = true;
89
- this.compositionPrevData = '';
90
- const { startControl, startOffset } = this.docCtx.selectionState;
91
- //console.log('输入法开始');
92
- this.compositionStartInfo = {
93
- element: startControl,
94
- offset: startOffset
95
- };
96
- });
97
- fromEvent(this.editInput, 'compositionupdate').subscribe((evt) => {
98
- if (evt.data === this.compositionPrevData) {
99
- return;
100
- }
101
- //console.log('输入了:' + evt.data);
102
- this.onInputEvent.next({
103
- data: evt.data,
104
- compositionStartInfo: this.compositionStartInfo,
105
- composition: true,
106
- prevInputData: this.compositionPrevData
107
- });
108
- this.compositionPrevData = evt.data;
109
- });
110
- fromEvent(this.editInput, 'compositionend').subscribe((evt) => {
111
- //console.log('compositionend')
112
- this.compositionStart = false;
113
- this.editInput.value = "";
114
- this.compositionPrevData = '';
115
- // this.onInputEvent.next({
116
- // data: evt.data,
117
- // compositionStartOffset: this.compositionStartOffset,
118
- // compositionRecordContent: this.compositionRecordContent
119
- // });
120
- // this.onInputEvent.next({
121
- // data: evt.data,
122
- // compositionStartInfo: this.compositionStartInfo,
123
- // composition: true,
124
- // prevInputData: ''
125
- // });
126
- this.compositionStartInfo = null;
127
- //this.compositionRecordContent = '';
128
- });
129
- fromEvent(this.editInput, 'keydown').subscribe((evt) => {
130
- const keyEvent = new KeyboradElementEvent(this.docCtx);
131
- keyEvent.sourceEvent = evt;
132
- if (DocumentEvent.invokeEvent('ElementKeyDown', this.docCtx.selectionState.startControl, keyEvent, 'Capture', this.docCtx)) {
133
- return;
134
- }
135
- if (evt.keyCode === 8) {
136
- this.onBackspaceEvent.next(evt);
137
- }
138
- else if (evt.keyCode === 13 && !evt.shiftKey) {
139
- this.onEnterEvent.next();
140
- }
141
- else if (evt.keyCode === 37) {
142
- this.onLeftEvent.next();
143
- }
144
- else if (evt.keyCode === 39) {
145
- this.onRightEvent.next();
146
- }
147
- else if (evt.keyCode === 38) {
148
- this.onUpEvent.next();
149
- }
150
- else if (evt.keyCode === 40) {
151
- this.onDownEvent.next();
152
- }
153
- else if (evt.keyCode === 9) {
154
- evt.preventDefault();
155
- }
156
- else if (evt.keyCode === 13 && evt.shiftKey) {
157
- evt.preventDefault();
158
- this.onInsertBr.next();
159
- }
160
- else if (evt.keyCode === 46) {
161
- this.onDeleteEvent.next(evt);
162
- }
163
- else if (evt.ctrlKey && evt.keyCode === 65) {
164
- evt.preventDefault();
165
- this.onSelectAllEvent.next();
166
- }
167
- else if (evt.keyCode === 36) {
168
- this.onHomeEvent.next();
169
- }
170
- else if (evt.keyCode === 35) {
171
- this.onEndEvent.next();
172
- }
173
- });
174
- fromEvent(this.editInput, "copy").subscribe(evt => {
175
- this.onCopyEvent.next(evt);
176
- });
177
- fromEvent(this.editInput, "paste").subscribe(evt => {
178
- this.onPasteEvent.next(evt);
179
- });
180
- fromEvent(this.editInput, "cut").subscribe(evt => {
181
- this.onCutEvent.next(evt);
182
- });
183
- }
184
- /**
185
- * 设置光标闪烁
186
- */
187
- startCursorBlinks() {
188
- // this.cursorBlinksIntervalID = setInterval(() => {
189
- // //this.setCursorBlinks();
190
- // }, 500);
191
- }
192
- destroy() {
193
- clearInterval(this.cursorBlinksIntervalID);
194
- }
195
- /**
196
- * 设置光标闪烁
197
- */
198
- setCursorBlinks() {
199
- this.editCursor.style.background = this._cursorBlinksState ? 'transparent' : 'black';
200
- this._cursorBlinksState = !this._cursorBlinksState;
201
- }
202
- /**
203
- * 设置光标位置
204
- * @param position
205
- */
206
- setCursorPosition(position) {
207
- this.cursorWrapper.style.left = position.x + 'px';
208
- this.cursorWrapper.style.top = position.y + 'px';
209
- this.cursorWrapper.style.height = position.height + 'px';
210
- this.setCursorVisibility(true);
211
- //this.setCursorInputStatus();
212
- }
213
- /**
214
- * 设置虚拟光标的可见性
215
- * @param visibility
216
- */
217
- setCursorVisibility(visibility) {
218
- this.cursorWrapper.style.display = visibility ? 'block' : 'none';
219
- if (visibility) {
220
- this.setInputFocus(true);
221
- }
222
- }
223
- /**
224
- * 设置输入状态
225
- * @param focus
226
- */
227
- setInputFocus(focus) {
228
- if (focus) {
229
- this.editInput.readOnly = false;
230
- this.editInput.focus();
231
- }
232
- else {
233
- //this.editInput.blur();
234
- this.editInput.readOnly = true;
235
- this.docCtx.selectionState.cursorPos = null;
236
- }
237
- }
238
- }
239
- //# sourceMappingURL=document-input-cursor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"document-input-cursor.js","sourceRoot":"lib/","sources":["framework/document-input-cursor.ts"],"names":[],"mappings":"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","sourcesContent":["import { fromEvent, Subject } from \"rxjs\";\nimport { LeafElement } from \"./element-define\";\nimport { KeyboradElementEvent } from \"./element-event-define\";\nimport { DocumentEvent } from \"./document-event\";\nimport { EditorContext } from \"./document-context\";\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 _cursorVisibility = false;\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 this.startCursorBlinks();\n fromEvent(this.editInput, 'blur').subscribe(() => {\n this._cursorVisibility = false;\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, prevInputData: '', compositionStartInfo: {\n element: startControl as LeafElement,\n offset: startOffset\n }\n });\n this.editInput.value = '';\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 this.compositionStart = false;\n this.editInput.value = \"\";\n this.compositionPrevData = '';\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\n\n /**\n * 设置光标闪烁\n */\n startCursorBlinks() {\n // this.cursorBlinksIntervalID = setInterval(() => {\n // //this.setCursorBlinks();\n // }, 500);\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}"]}