@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,108 +0,0 @@
1
- import { nanoid } from "nanoid";
2
- /**
3
- * 元素事件
4
- */
5
- export class ElementEvent {
6
- ctx;
7
- constructor(ctx) {
8
- this.ctx = ctx;
9
- }
10
- /**
11
- * 事件源头对象
12
- */
13
- source;
14
- sourceOffset;
15
- sourceRender;
16
- /**
17
- * 当前所在的对象
18
- */
19
- currentElement;
20
- currentRenderObjectX;
21
- currentRenderObjectY;
22
- //是否取消向上冒泡
23
- isCancel;
24
- globalX;
25
- globalY;
26
- pageX;
27
- pageY;
28
- shift;
29
- ctrl;
30
- buttons;
31
- get selectionState() {
32
- return this.ctx.selectionState;
33
- }
34
- }
35
- export class ContentMenuItem {
36
- icon;
37
- caption;
38
- eventObj;
39
- subItems = [];
40
- }
41
- /**
42
- * 鼠标操作的事件
43
- */
44
- export class MouseElementEvent extends ElementEvent {
45
- }
46
- export class MousedownElementEvent extends ElementEvent {
47
- }
48
- export class KeyboradElementEvent extends ElementEvent {
49
- key;
50
- sourceEvent;
51
- }
52
- export class GotCursorEvent extends ElementEvent {
53
- }
54
- export class LostCursorEvent extends ElementEvent {
55
- }
56
- export class GetTrackTipsEvent extends ElementEvent {
57
- trackTips;
58
- }
59
- export class ContextMenuElementEvent extends ElementEvent {
60
- menus = [];
61
- }
62
- export class DropElementEvent extends ElementEvent {
63
- dragElement;
64
- }
65
- export class EventMap {
66
- map = new WeakMap();
67
- add(element, eventName, listener, useCapture) {
68
- const events = this.map.get(element);
69
- const eventId = nanoid(8);
70
- const eventProps = { id: eventId, eventName, listener, useCapture };
71
- if (!events) {
72
- this.map.set(element, [eventProps]);
73
- }
74
- else {
75
- events.push(eventProps);
76
- }
77
- return eventId;
78
- }
79
- remove(element, eventId) {
80
- const events = this.map.get(element);
81
- if (events) {
82
- const listenerIndex = events.findIndex(item => item.id === eventId);
83
- if (listenerIndex >= 0) {
84
- events.splice(listenerIndex, 1);
85
- }
86
- }
87
- }
88
- removeByType(element, eventName) {
89
- const events = this.map.get(element);
90
- if (events) {
91
- const filterEvents = events.filter(item => item.eventName === eventName);
92
- filterEvents.forEach(item => { this.remove(element, item.id); });
93
- }
94
- }
95
- clear(element) {
96
- //const events = this.map.get(element);
97
- this.map.delete(element);
98
- }
99
- get(element, eventName, useCapture = false) {
100
- const events = this.map.get(element);
101
- if (events) {
102
- const listener = events.filter(item => item.eventName === eventName && item.useCapture === useCapture).map(item => item.listener);
103
- return listener;
104
- }
105
- return [];
106
- }
107
- }
108
- //# sourceMappingURL=element-event-define.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"element-event-define.js","sourceRoot":"lib/","sources":["framework/element-event-define.ts"],"names":[],"mappings":"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","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}"]}
@@ -1,551 +0,0 @@
1
- import { runTextLineRender } from "./document-textline-mode";
2
- import { BlockContainerElement, BlockContentElement, BranchElement, InlineGroupElement, LeafElement, ModifyFlag } from "./element-define";
3
- import { TextProps } from "./element-props";
4
- import { ElementUtil } from "./element-util";
5
- import { DataElementInlineGroup } from "./impl/data-element/data-element-base-impl";
6
- import { FillNullSpaceRenderObject } from "./impl/decorate/fill-null-space-imple";
7
- import { ParagraphElement } from "./impl/paragraph/p-impl";
8
- import { TextGroupElement, TextGroupRenderObject } from "./impl/text/text-impl";
9
- import { BranchRenderObject, InlineGroupRenderObject, LeafRenderObject } from "./render-define";
10
- /**
11
- * 测量阶段,生成Render-UI
12
- */
13
- export class ElementMeasure {
14
- options;
15
- renderCtx;
16
- constructor(options, renderCtx) {
17
- this.options = options;
18
- this.renderCtx = renderCtx;
19
- }
20
- measureDocument(document) {
21
- this.clearPaintCache(document);
22
- const docRender = this.measureControl(document, this.options.docPageSettings.width);
23
- this.setMeasureCompletedModifyFlag(document);
24
- runTextLineRender(document, this.options, this.renderCtx);
25
- return docRender;
26
- }
27
- measureControl(element, maxWidth) {
28
- if (element.modifyFlag === ModifyFlag.None) {
29
- return element.measureRender;
30
- }
31
- if (element instanceof BlockContentElement) {
32
- const render = element.createRenderObject(this.options, this.renderCtx);
33
- element.measureRender = render;
34
- //测量阶段,只限制最大宽度即可
35
- render.setRenderWidth(maxWidth);
36
- if (element instanceof ParagraphElement) {
37
- this.measureParagraph(element, render);
38
- }
39
- else {
40
- throw new Error('未实现');
41
- }
42
- return render;
43
- }
44
- else if (element instanceof BlockContainerElement) {
45
- ElementUtil.fixBlockContainer(element);
46
- let render = null;
47
- if (element.modifyFlag === ModifyFlag.Modify || element.modifyFlag === ModifyFlag.Track) {
48
- ElementUtil.fixBlockContainer(element);
49
- element.measureRender = null;
50
- render = element.createRenderObject(this.options, this.renderCtx);
51
- if (!render) {
52
- element.measureRender = null;
53
- return null;
54
- }
55
- if (render.rect.maxWidth === 0) {
56
- render.setRenderWidth(maxWidth);
57
- }
58
- }
59
- if (!render) {
60
- throw new Error('render is null');
61
- }
62
- element.measureRender = render;
63
- const innerMaxWidth = render.getInnerMaxWidth();
64
- for (let i = 0; i < element.length; i++) {
65
- const child = element.getChild(i);
66
- const blockContentELement = child;
67
- const childRender = this.measureControl(blockContentELement, innerMaxWidth);
68
- if (!childRender) {
69
- continue;
70
- }
71
- render.addChild(childRender);
72
- }
73
- ElementUtil.remeasure(render);
74
- return render;
75
- }
76
- else {
77
- throw new Error('未实现');
78
- }
79
- }
80
- /**
81
- * 生成段落 UI 树
82
- * @param para
83
- * @param render
84
- */
85
- measureParagraph(para, render) {
86
- ElementUtil.fixParagraphContent(para);
87
- this.setParagraphDefaultTextProps(para);
88
- const renderObjects = [];
89
- for (let i = 0; i < para.length; i++) {
90
- const child = para.getChild(i);
91
- if (child instanceof InlineGroupElement) {
92
- child.measureRender = this.getInlineGroupRenderItem(child);
93
- if (child.measureRender) {
94
- renderObjects.push(child.measureRender);
95
- }
96
- }
97
- else if (child instanceof LeafElement) {
98
- child.measureRender = child.createRenderObject(this.options, this.renderCtx);
99
- if (child.measureRender) {
100
- renderObjects.push(child.measureRender);
101
- }
102
- }
103
- }
104
- this.measureInnerParagraph(render, para, renderObjects);
105
- }
106
- /**
107
- * 设置段落默认文本属性
108
- * 当前段落属于空段落时,键入文本时,文本的默认属性
109
- */
110
- setParagraphDefaultTextProps(para) {
111
- const lastTextGroup = ElementUtil.getLastLeafElement(para, (item) => item instanceof TextGroupElement);
112
- const defaultTextProps = lastTextGroup ? lastTextGroup.props.clone(new TextProps()) : ElementUtil.createTextProps(null, this.options);
113
- if (para.props.textProps && para.props.textProps.equals(defaultTextProps)) {
114
- return;
115
- }
116
- para.props.textProps = defaultTextProps;
117
- }
118
- /**
119
- * 根据段落UI元素,进行排列
120
- * @param render
121
- * @param paragraph
122
- * @param renderObjects
123
- */
124
- measureInnerParagraph(render, paragraph, renderObjects) {
125
- let lineRect = render.createLineRect();
126
- //行内框
127
- const innerLineRects = [];
128
- const addInnerLineFunc = (lineRect) => {
129
- innerLineRects.push(lineRect);
130
- if (lineRect.rect.maxWidth <= 0) {
131
- throw new Error('lineRect.rect.maxWidth is ' + lineRect.rect.maxWidth);
132
- }
133
- if (innerLineRects.indexOf(lineRect) === 0) {
134
- if (paragraph.props.indent > 0) {
135
- lineRect.rect.maxWidth -= paragraph.props.indent;
136
- }
137
- }
138
- else {
139
- lineRect.rect.maxWidth -= paragraph.props.hanging;
140
- }
141
- };
142
- addInnerLineFunc(lineRect);
143
- let i = 0;
144
- let currItem = renderObjects[i++];
145
- const inCloseBody = paragraph.parent.type === 'body';
146
- while (currItem) {
147
- const maxWidth = lineRect.rect.maxWidth;
148
- const nextItem = renderObjects[i];
149
- const { firstItem, lastItem, br } = this.cutRenderItem(currItem, nextItem, maxWidth - lineRect.rect.width, lineRect.length === 0, inCloseBody);
150
- if (firstItem) {
151
- if (lastItem) {
152
- renderObjects.splice(i, 0, lastItem);
153
- }
154
- currItem = firstItem;
155
- }
156
- else {
157
- lineRect = render.createLineRect();
158
- addInnerLineFunc(lineRect);
159
- continue;
160
- }
161
- lineRect.addChild(currItem);
162
- currItem.rect.x = lineRect.rect.width;
163
- if (currItem.rect.height > lineRect.rect.height) {
164
- lineRect.rect.height = currItem.rect.height;
165
- }
166
- lineRect.rect.width += currItem.rect.width;
167
- if (br) {
168
- //lineRect.rect.maxWidth = lineRect.rect.width;
169
- lineRect = render.createLineRect();
170
- addInnerLineFunc(lineRect);
171
- }
172
- currItem = renderObjects[i++];
173
- }
174
- for (let i = 0; i < innerLineRects.length; i++) {
175
- const innerLineRect = innerLineRects[i];
176
- innerLineRect.rect.x = this.getParaLineRectStartX(innerLineRects.length, i, paragraph, render, innerLineRect);
177
- //限制最大行高
178
- const maxLineHeight = Math.floor(14 * 1.3);
179
- //fillLineHeight填充行高
180
- let fillLineHeight = Math.ceil(innerLineRect.rect.height * (paragraph.props.lineHeight - 1));
181
- fillLineHeight = fillLineHeight > maxLineHeight ? maxLineHeight : fillLineHeight;
182
- const lineHeight = innerLineRect.rect.height + fillLineHeight;
183
- const paddingBottom = Math.ceil(fillLineHeight / 2);
184
- innerLineRect.rect.height = lineHeight;
185
- for (let j = 0; j < innerLineRect.length; j++) {
186
- const leaf = innerLineRect.getChild(j);
187
- leaf.rect.y = innerLineRect.rect.height - paddingBottom - leaf.rect.height;
188
- }
189
- //render.rect.height += lineRect.rect.height;
190
- const outterLineRect = render.createLineRect();
191
- outterLineRect.rect.width = outterLineRect.rect.maxWidth;
192
- outterLineRect.addChild(innerLineRect);
193
- ElementUtil.remeasure(outterLineRect, false);
194
- render.addChild(outterLineRect);
195
- }
196
- ElementUtil.remeasure(render);
197
- }
198
- /**
199
- * 获取段落行布局横向坐标起始位置,被段落text-align影响
200
- */
201
- getParaLineRectStartX(counter, paraLineIndex, paraElement, paraRenderObject, paraLineRender) {
202
- //左对齐,首行缩进
203
- let indent = paraElement.props.indent;
204
- //存在项目符号
205
- if (paraLineIndex > 0) {
206
- indent = paraElement.props.hanging;
207
- }
208
- if (paraElement.props.textAlign === 'center') {
209
- const remainSpace = paraRenderObject.rect.width - paraLineRender.rect.width;
210
- return Math.ceil(remainSpace / 2) + indent;
211
- }
212
- else if (paraElement.props.textAlign === 'right') {
213
- const remainSpace = paraRenderObject.rect.width - paraLineRender.rect.width;
214
- return remainSpace + indent;
215
- }
216
- else if (paraElement.props.textAlign === 'justify') {
217
- const renderUnitCount = this.getRenderUnitLength(paraLineRender);
218
- if (paraLineIndex === counter - 1 || renderUnitCount === 1) {
219
- return indent;
220
- }
221
- const spaceWidth = (paraLineRender.rect.maxWidth - paraLineRender.rect.width) / (renderUnitCount - 1);
222
- this.setAlignJustify(paraLineRender, 0, spaceWidth);
223
- return indent;
224
- }
225
- else {
226
- return indent;
227
- }
228
- }
229
- /**
230
- * 设置两端对齐
231
- * @param render
232
- * @param count
233
- * @param spaceWidth
234
- */
235
- setAlignJustify(render, count, spaceWidth) {
236
- if (render instanceof BranchRenderObject) {
237
- let width = 0;
238
- for (let i = 0; i < render.length; i++) {
239
- const currRender = render.getChild(i);
240
- count += this.setAlignJustify(currRender, count, spaceWidth);
241
- currRender.rect.x = width;
242
- width += currRender.rect.width;
243
- }
244
- render.rect.width = width;
245
- }
246
- else if (render instanceof LeafRenderObject) {
247
- if (render instanceof TextGroupRenderObject) {
248
- let i = count === 0 ? 1 : 0;
249
- for (; i < render.textMeasures.length; i++) {
250
- render.textMeasures[i].actualSize = render.textMeasures[i].actualSize + spaceWidth;
251
- }
252
- render.measure();
253
- count += render.textMeasures.length;
254
- }
255
- else {
256
- if (count !== 0) {
257
- render.rect.width += spaceWidth;
258
- }
259
- count += 1;
260
- }
261
- }
262
- return count;
263
- }
264
- /**
265
- * 获取段落行渲染单位个数,字符需要计算为字符长度
266
- */
267
- getRenderUnitLength(paraLine) {
268
- if (paraLine instanceof LeafRenderObject) {
269
- if (paraLine instanceof TextGroupRenderObject) {
270
- return paraLine.textMeasures.length;
271
- }
272
- else {
273
- return 1;
274
- }
275
- }
276
- else if (paraLine instanceof BranchRenderObject) {
277
- let count = 0;
278
- for (let i = 0; i < paraLine.length; i++) {
279
- count += this.getRenderUnitLength(paraLine.getChild(i));
280
- }
281
- return count;
282
- }
283
- throw new Error('未到达计算位置');
284
- }
285
- getInlineGroupRenderItem(item) {
286
- const inlineGroupRender = item.createRenderObject(this.options, this.renderCtx);
287
- if (!inlineGroupRender) {
288
- return null;
289
- }
290
- for (let i = 0; i < item.length; i++) {
291
- const child = item.getChild(i);
292
- child.beginMeasure();
293
- if (child instanceof LeafElement) {
294
- child.measureRender = child.createRenderObject(this.options, this.renderCtx);
295
- if (child.measureRender) {
296
- inlineGroupRender.addChild(child.measureRender);
297
- }
298
- }
299
- else if (child instanceof InlineGroupElement) {
300
- item.measureRender = this.getInlineGroupRenderItem(child);
301
- if (item.measureRender) {
302
- inlineGroupRender.addChild(item.measureRender);
303
- }
304
- }
305
- else {
306
- throw new Error('未实现');
307
- }
308
- }
309
- ElementUtil.remeasureInlineGroupRender(inlineGroupRender);
310
- //限制最小长度
311
- if (item instanceof DataElementInlineGroup) {
312
- //需要填充null-text
313
- if (item.length === 2) {
314
- const nullText = new TextGroupElement();
315
- nullText.isDecorate = true;
316
- nullText.disableClick = true;
317
- const baseTextProps = item.props;
318
- nullText.text = baseTextProps.nullText;
319
- baseTextProps.nullTextProps.clone(nullText.props);
320
- const nullTextRender = nullText.createRenderObject(this.options, this.renderCtx);
321
- inlineGroupRender.insertChild(nullTextRender, 1);
322
- ElementUtil.remeasureInlineGroupRender(inlineGroupRender);
323
- }
324
- const props = item.props;
325
- let minLength = props.minLength ?? 14;
326
- minLength = minLength < 14 ? 14 : minLength;
327
- if (item instanceof DataElementInlineGroup && inlineGroupRender.rect.width < minLength) {
328
- const fillNullSpace = new FillNullSpaceRenderObject();
329
- fillNullSpace.rect.width = minLength - inlineGroupRender.rect.width;
330
- fillNullSpace.rect.height = inlineGroupRender.rect.height;
331
- inlineGroupRender.insertChild(fillNullSpace, inlineGroupRender.length - 1);
332
- }
333
- ElementUtil.remeasureInlineGroupRender(inlineGroupRender);
334
- }
335
- return inlineGroupRender;
336
- }
337
- cutRenderItem(render, nextRender, limitWidth, lineEmpty, inCloseBody) {
338
- if (render instanceof LeafRenderObject) {
339
- if (render.rect.width > limitWidth && render instanceof TextGroupRenderObject) {
340
- return this.cutTextRender(render, nextRender, limitWidth, lineEmpty, inCloseBody);
341
- }
342
- if (render instanceof FillNullSpaceRenderObject) {
343
- return this.cutFillNullRender(render, limitWidth);
344
- }
345
- if (render.rect.width < limitWidth || lineEmpty || render.element.type === 'br' || render.element.type === 'psym') {
346
- return { firstItem: render, lastItem: null, br: render.element.type === 'br' };
347
- }
348
- return { firstItem: null, lastItem: null };
349
- }
350
- else if (render instanceof InlineGroupRenderObject) {
351
- return this.cutInlineGroupRenderItem(render, limitWidth, lineEmpty, inCloseBody);
352
- }
353
- throw new Error('到达计算边界');
354
- }
355
- cutTextRender(render, nextRender, limitWidth, lineEmpty, inCloseBody) {
356
- let sumWidth = 0;
357
- const cutRender = render.clone();
358
- cutRender.textMeasures.length = 0;
359
- let i = 0;
360
- for (; i < render.textMeasures.length; i++) {
361
- sumWidth += render.textMeasures[i].actualSize;
362
- if (sumWidth > limitWidth) {
363
- if (lineEmpty && i === 0) {
364
- i = 1;
365
- }
366
- break;
367
- }
368
- }
369
- //后置标点处理
370
- i = this.patchHandlePostPunctuation(render, nextRender, i, inCloseBody, lineEmpty);
371
- //前置标点处理
372
- i = this.patchHandleLeadingPunctuation(render, i, lineEmpty);
373
- if (i <= 0) {
374
- return { firstItem: null, lastItem: null };
375
- }
376
- cutRender.textMeasures = render.textMeasures.splice(0, i);
377
- render.measure();
378
- cutRender.measure();
379
- return { firstItem: cutRender, lastItem: render, br: true };
380
- }
381
- /**
382
- * 处理前置标点,前置标点不能出现在末尾
383
- * @param render
384
- * @param i
385
- */
386
- patchHandleLeadingPunctuation(render, i, lineEmpty) {
387
- if (i === 1 && lineEmpty) {
388
- return i;
389
- }
390
- if (this.containLeadingPunctuation(render.textMeasures[i]?.char)) {
391
- return i--;
392
- }
393
- return i;
394
- }
395
- /**
396
- * 处理后置标点,后置标点不能出现在行首
397
- * @param render
398
- * @param i
399
- * @param lineEmpty
400
- */
401
- patchHandlePostPunctuation(render, nextRender, i, inCloseBody, lineEmpty) {
402
- if (i === render.textMeasures.length - 1) {
403
- //紧跟着的字符包含后置标点
404
- if (this.containerStartSymbolInTextStart(nextRender)) {
405
- i--;
406
- }
407
- }
408
- if (inCloseBody && this.containPostPunctuation(render.textMeasures[i]?.char)) {
409
- if (this.containPostPunctuation(render.textMeasures[i + 1]?.char)) {
410
- i--;
411
- }
412
- else {
413
- i++;
414
- }
415
- }
416
- else {
417
- if (i <= 1) {
418
- //debugger;
419
- }
420
- if (i > 1 && this.containPostPunctuation(render.textMeasures[i]?.char)) {
421
- i--;
422
- }
423
- }
424
- return i;
425
- }
426
- /**
427
- * 是否包含后置标点
428
- * @param str
429
- * @returns
430
- */
431
- containPostPunctuation(str) {
432
- return '!),.:;?]}¨·ˇˉ―‖’”…∶、。〃々〉》」』】〕〗!"'),.:;?]`|}~¢'.indexOf(str) > -1;
433
- }
434
- //是否包含前置标点
435
- containLeadingPunctuation(str) {
436
- return '‘“〈《「『【〔〖([{£'.indexOf(str) > -1;
437
- }
438
- /**
439
- * 文本开头是否包含后置标点
440
- * @param render
441
- * @returns
442
- */
443
- containerStartSymbolInTextStart(render) {
444
- //return false;
445
- if (render instanceof TextGroupRenderObject) {
446
- if (render.textMeasures.length > 0) {
447
- return this.containPostPunctuation(render.textMeasures[0].char);
448
- }
449
- }
450
- return false;
451
- }
452
- cutFillNullRender(render, limitWidth) {
453
- if (limitWidth === 0) {
454
- return { firstItem: null, lastItem: null };
455
- }
456
- if (render.rect.width > limitWidth) {
457
- const cutRender = new FillNullSpaceRenderObject();
458
- cutRender.rect.width = limitWidth;
459
- cutRender.rect.height = render.rect.height;
460
- render.rect.width = render.rect.width - limitWidth;
461
- return { firstItem: cutRender, lastItem: render };
462
- }
463
- else {
464
- return { firstItem: render, lastItem: null };
465
- }
466
- }
467
- /**
468
- * 行内编组元素超出行内可用空间,需要根据剩余空间长度进行截断
469
- */
470
- cutInlineGroupRenderItem(render, limitWidth, emptyLine, inCloseBody) {
471
- const cutRender = render.element.createRenderObject(this.options, this.renderCtx);
472
- let x = 0;
473
- let br = false;
474
- const items = [...render.getItems()];
475
- for (let i = 0; i < items.length; i++) {
476
- const child = items[i];
477
- if (child instanceof LeafRenderObject) {
478
- if (x + child.rect.width > limitWidth) {
479
- const { firstItem, lastItem, br: childBr } = this.cutRenderItem(child, items[i + 1], limitWidth - x, emptyLine && cutRender.length === 0, inCloseBody);
480
- if (firstItem) {
481
- cutRender.addChild(firstItem);
482
- if (lastItem) {
483
- //items.push(lastItem);
484
- //items.splice(i + 1, 0, lastItem)
485
- }
486
- }
487
- br = childBr || br;
488
- break;
489
- }
490
- else {
491
- render.removeChild(child);
492
- cutRender.addChild(child);
493
- }
494
- //软换行符
495
- if (child.element && child.element.type === 'br') {
496
- br = true;
497
- break;
498
- }
499
- }
500
- else if (child instanceof InlineGroupRenderObject) {
501
- if (x + child.rect.width > limitWidth) {
502
- const { firstItem, br: childBr } = this.cutInlineGroupRenderItem(child, limitWidth - x, emptyLine && cutRender.length === 0, inCloseBody);
503
- if (firstItem) {
504
- cutRender.addChild(firstItem);
505
- }
506
- br = childBr || br;
507
- break;
508
- }
509
- else {
510
- render.removeChild(child);
511
- cutRender.addChild(child);
512
- }
513
- }
514
- x += child.rect.width;
515
- }
516
- if (!cutRender.length) {
517
- return { firstItem: null, lastItem: null };
518
- }
519
- ElementUtil.remeasureInlineGroupRender(cutRender);
520
- ElementUtil.remeasureInlineGroupRender(render);
521
- return { firstItem: cutRender, lastItem: render.length ? render : null, br };
522
- }
523
- /**
524
- * 修改测量完毕后的元素状态
525
- * @param ele
526
- */
527
- setMeasureCompletedModifyFlag(ele) {
528
- if (ele instanceof BranchElement) {
529
- for (let i = 0; i < ele.length; i++) {
530
- this.setMeasureCompletedModifyFlag(ele.getChild(i));
531
- }
532
- }
533
- ele.modifyFlag = ModifyFlag.None;
534
- }
535
- clearPaintCache(ele) {
536
- ele.beginMeasure();
537
- if (ele instanceof BranchElement) {
538
- for (let i = 0; i < ele.length; i++) {
539
- this.clearPaintCache(ele.getChild(i));
540
- }
541
- }
542
- }
543
- endMeasures(ele) {
544
- if (ele instanceof BranchElement) {
545
- for (let i = 0; i < ele.length; i++) {
546
- this.endMeasures(ele.getChild(i));
547
- }
548
- }
549
- }
550
- }
551
- //# sourceMappingURL=element-measure.js.map