@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,449 +0,0 @@
1
- import { ElementUtil } from "./element-util";
2
- import { MuiltBlockLineRenderObject } from "./render-define";
3
- import { TableRowRenderObject } from "./impl/table/table-row-impl";
4
- import { TableRenderObject } from "./impl/table/table-impl";
5
- export class ElementRenderCut {
6
- options;
7
- renderContext;
8
- constructor(options, renderContext) {
9
- this.options = options;
10
- this.renderContext = renderContext;
11
- }
12
- cutPage(documentRender, documentElement) {
13
- if (this.options.fullPageView) {
14
- return this.getFullViewDocRender(documentRender, documentElement);
15
- }
16
- const headerRender = documentRender.getChild(0);
17
- const bodyRender = documentRender.getChild(1).clone();
18
- const footerRender = documentRender.getChild(2);
19
- const commentsRender = documentRender.getChild(3);
20
- const { headerLine, footerLine } = documentRender;
21
- let bodyMarginTop = headerLine + headerRender.rect.height + 6;
22
- let bodyMarginBottom = footerLine + footerRender.rect.height;
23
- const { top: bodyTop, bottom: bodyBottom } = documentRender.padding;
24
- bodyMarginTop = bodyMarginTop > bodyTop ? bodyMarginTop : bodyTop;
25
- bodyMarginBottom = bodyMarginBottom > bodyBottom ? bodyMarginBottom : bodyBottom;
26
- documentRender.padding.top = bodyMarginTop;
27
- documentRender.padding.bottom = bodyMarginBottom;
28
- const bodyLimitRect = documentRender.getInnnerRect();
29
- const bodyArray = [];
30
- let { emptyBody: pageBodyRender, innerRect: bodyInnerLimitRect } = this.createEmptyBodyRender(bodyRender, bodyLimitRect);
31
- bodyArray.push(pageBodyRender);
32
- const createBodyHolder = () => {
33
- const { emptyBody, innerRect } = this.createEmptyBodyRender(bodyRender, bodyLimitRect);
34
- pageBodyRender = emptyBody;
35
- bodyInnerLimitRect = innerRect;
36
- bodyArray.push(pageBodyRender);
37
- };
38
- const appendToBody = (item) => {
39
- item.rect.y = bodyInnerLimitRect.height + item.margin.top;
40
- pageBodyRender.addChild(item);
41
- bodyInnerLimitRect.height += item.rect.height + item.margin.top + item.margin.bottom;
42
- //上一个元素的bottom-margin
43
- //bodyInnerLimitRect.prevMargin = item.margin.bottom;
44
- ElementUtil.updateRenderHeightByInnerRect(pageBodyRender, bodyInnerLimitRect);
45
- if (this.checkPageBreak(item)) {
46
- createBodyHolder();
47
- }
48
- };
49
- let i = 0;
50
- let cloneBlockContentRender = bodyRender.getChild(i);
51
- while (cloneBlockContentRender) {
52
- if (bodyInnerLimitRect.maxHeight - bodyInnerLimitRect.height - cloneBlockContentRender.rect.height - cloneBlockContentRender.margin.bottom - cloneBlockContentRender.margin.top < 0) {
53
- //限制的外框尺寸
54
- const bodyAvailHeight = bodyInnerLimitRect.maxHeight - bodyInnerLimitRect.height - cloneBlockContentRender.margin.bottom - cloneBlockContentRender.margin.top;
55
- //限制的内框尺寸
56
- const limitRenderInnterHeight = ElementUtil.innerRectMaxHeight(cloneBlockContentRender, bodyAvailHeight);
57
- const cutRenderObject = this.cutRenderItem(cloneBlockContentRender, limitRenderInnterHeight);
58
- //至少有一个块级行元素被切割出来
59
- if (cutRenderObject) {
60
- appendToBody(cutRenderObject);
61
- }
62
- createBodyHolder();
63
- }
64
- else {
65
- appendToBody(cloneBlockContentRender);
66
- if (++i < bodyRender.length) {
67
- cloneBlockContentRender = bodyRender.getChild(i);
68
- }
69
- else {
70
- cloneBlockContentRender = null;
71
- }
72
- }
73
- }
74
- const docPages = [];
75
- let pageY = this.options.docSpace;
76
- for (let i = 0; i < bodyArray.length; i++) {
77
- const body = bodyArray[i];
78
- const documentRender = documentElement.createRenderObject(this.options);
79
- docPages.push(documentRender);
80
- documentRender.rect.y = pageY;
81
- const limitRect = documentRender.getInnnerRect();
82
- const cloneHeaderRender = headerRender.clone();
83
- cloneHeaderRender.rect.x = limitRect.x;
84
- cloneHeaderRender.rect.y = headerLine;
85
- documentRender.addChild(cloneHeaderRender);
86
- body.rect.x = limitRect.x;
87
- body.rect.y = bodyMarginTop;
88
- body.rect.height = bodyInnerLimitRect.maxHeight;
89
- documentRender.addChild(body);
90
- pageY += documentRender.rect.height + this.options.docSpace;
91
- const cloneFooterRender = footerRender.clone();
92
- cloneFooterRender.rect.x = limitRect.x;
93
- cloneFooterRender.rect.y = documentRender.rect.height - bodyMarginBottom;
94
- documentRender.addChild(cloneFooterRender);
95
- //审阅模式,添加审阅窗口
96
- if (this.options.showReviewWindow && commentsRender) {
97
- const commentsContainer = commentsRender.element.createRenderObject(this.options, this.renderContext);
98
- commentsContainer.padding.top = bodyMarginTop;
99
- commentsContainer.rect.height = documentRender.rect.height;
100
- documentRender.addChild(commentsContainer);
101
- commentsContainer.rect.x = documentRender.rect.x + documentRender.rect.width;
102
- documentRender.rect.width += this.options.reviewWindowWidth;
103
- }
104
- }
105
- return docPages;
106
- }
107
- checkPageBreak(item) {
108
- if (item.element && item.element.type === 'p') {
109
- const p = item.element;
110
- if (p.props.pageBreak) {
111
- return true;
112
- }
113
- }
114
- return false;
115
- }
116
- getFullViewDocRender(documentRender, documentElement) {
117
- const commentsRender = documentRender.getChild(3);
118
- const commentsContainer = commentsRender.element.createRenderObject(this.options, this.renderContext);
119
- documentRender.rect.height -= commentsContainer.rect.height;
120
- const bodyRender = documentRender.getChild(1);
121
- if (this.options.showReviewWindow) {
122
- documentRender.removeChild(commentsRender);
123
- documentRender.addChild(commentsContainer);
124
- commentsContainer.padding.top = bodyRender.rect.y;
125
- commentsContainer.rect.height = documentRender.rect.height;
126
- commentsContainer.rect.x = documentRender.rect.x + documentRender.rect.width;
127
- documentRender.rect.width += this.options.reviewWindowWidth;
128
- }
129
- return [documentRender];
130
- }
131
- createEmptyBodyRender(bodyRender, limitRect) {
132
- const pageBodyRender = bodyRender.element.createRenderObject(this.options, this.renderContext);
133
- ElementUtil.setBlockElementLimitSize(pageBodyRender, limitRect);
134
- const bodyInnerLimitRect = pageBodyRender.getInnnerRect();
135
- if (this.options.fullPageView) {
136
- bodyInnerLimitRect.height = Number.MAX_VALUE;
137
- }
138
- return { emptyBody: pageBodyRender, innerRect: { ...bodyInnerLimitRect, prevMargin: 0 } };
139
- }
140
- /**
141
- * 切割渲染元素
142
- * @param render 被切割的对象
143
- * @param limitHeight
144
- * @param addFunc
145
- * @returns
146
- */
147
- cutRenderItem(render, limitHeight) {
148
- if (render instanceof TableRowRenderObject) {
149
- return this.cutRowRenderItem(render, limitHeight);
150
- }
151
- if (render instanceof TableRenderObject) {
152
- return this.cutTable(render, limitHeight);
153
- }
154
- const cloneRender = render.element.createRenderObject(this.options, this.renderContext);
155
- cloneRender.setRenderWidth(render.rect.width);
156
- if (render instanceof MuiltBlockLineRenderObject) {
157
- let sumHeight = 0;
158
- const children = [...render.getItems()];
159
- let j = 0;
160
- let blockLine = children[j];
161
- while (blockLine) {
162
- //sumHeight = ElementUtil.remeasure(cloneRender);
163
- const calcBlockLineHeight = this.getBlockLineHeight(blockLine);
164
- if (calcBlockLineHeight + sumHeight > limitHeight) {
165
- if (blockLine instanceof MuiltBlockLineRenderObject) {
166
- //限制的外框尺寸
167
- const availHeight = limitHeight - sumHeight;
168
- //限制的内框尺寸
169
- const limitRenderInnterHeight = ElementUtil.innerRectMaxHeight(render, availHeight);
170
- const cutRenderObject = this.cutRenderItem(blockLine, limitRenderInnterHeight);
171
- if (cutRenderObject) {
172
- cloneRender.addChild(cutRenderObject);
173
- sumHeight += cutRenderObject.rect.height;
174
- blockLine = children[++j];
175
- }
176
- else {
177
- break;
178
- }
179
- }
180
- else {
181
- break;
182
- }
183
- }
184
- else {
185
- render.removeChild(blockLine);
186
- cloneRender.addChild(blockLine);
187
- sumHeight += blockLine.rect.height;
188
- blockLine = children[++j];
189
- }
190
- }
191
- ElementUtil.remeasure(cloneRender);
192
- ElementUtil.remeasure(render);
193
- if (cloneRender.length === 0) {
194
- return null;
195
- }
196
- else {
197
- return cloneRender;
198
- }
199
- }
200
- else {
201
- throw new Error('未实现');
202
- }
203
- }
204
- /**
205
- * 切割渲染元素
206
- * @param tbRender 被切割的对象
207
- * @param limitHeight
208
- * @param addFunc
209
- * @returns
210
- */
211
- cutTable(tbRender, limitHeight) {
212
- const cloneTbRender = tbRender.element.createRenderObject(this.options, this.renderContext);
213
- cloneTbRender.setRenderWidth(tbRender.rect.width);
214
- let sumHeight = 0;
215
- const rows = [...tbRender.getItems()];
216
- //获取跨页需要重复显示的行
217
- const headerRows = this.getHeaderRows(tbRender);
218
- //跨页头的高度
219
- const headerHeight = headerRows.reduce((prev, curr) => prev + curr.rect.height, 0);
220
- if (headerHeight > limitHeight) {
221
- return null;
222
- }
223
- const copyHeaderRows = headerRows.map(item => item.clone());
224
- //获取最后一个截断行,需要根据截断行判断最后一个截断的行位置
225
- const cutOffRows = rows.filter(row => limitHeight >= row.rect.y && limitHeight <= row.rect.y + row.rect.height)
226
- .map((row) => ({ rowIndex: row.element.getIndex(), row }))
227
- .sort((first, second) => second.rowIndex - first.rowIndex);
228
- if (cutOffRows.length === 0) {
229
- throw new Error('无法获取截断行');
230
- }
231
- const joinRow = cutOffRows[0].row;
232
- let j = 0;
233
- let currRow = rows[j];
234
- const cutRows = [];
235
- while (currRow) {
236
- const rowContentHeight = this.getBlockLineHeight(currRow);
237
- if (rowContentHeight + sumHeight > limitHeight) {
238
- if (currRow instanceof MuiltBlockLineRenderObject) {
239
- //限制的外框尺寸
240
- const availHeight = limitHeight - sumHeight;
241
- //限制的内框尺寸
242
- const limitRenderInnterHeight = ElementUtil.innerRectMaxHeight(tbRender, availHeight);
243
- const cutRow = this.cutRowRenderItem(currRow, limitRenderInnterHeight);
244
- if (cutRow) {
245
- cloneTbRender.addChild(cutRow);
246
- sumHeight += cutRow.rect.height;
247
- cutRows.push(currRow);
248
- if (currRow === joinRow) {
249
- break;
250
- }
251
- currRow = rows[++j];
252
- }
253
- else {
254
- break;
255
- }
256
- }
257
- else {
258
- break;
259
- }
260
- }
261
- else {
262
- tbRender.removeChild(currRow);
263
- cloneTbRender.addChild(currRow);
264
- sumHeight += currRow.rect.height;
265
- currRow = rows[++j];
266
- }
267
- }
268
- this.fixCutTable(tbRender, cutRows);
269
- ElementUtil.remeasure(cloneTbRender);
270
- //存在跨页需要重复显示的行头,则需要重新放置行头
271
- if (copyHeaderRows.length) {
272
- copyHeaderRows.forEach((r, i) => tbRender.insertChild(r, i));
273
- }
274
- ElementUtil.remeasure(tbRender);
275
- if (cloneTbRender.length === 0) {
276
- return null;
277
- }
278
- else {
279
- return cloneTbRender;
280
- }
281
- }
282
- cutRowRenderItem(render, limitHeight) {
283
- if (render.element.props.minHeight > 0 && render.rect.height > limitHeight) {
284
- return null;
285
- }
286
- const cloneRowRender = render.element.createRenderObject();
287
- cloneRowRender.rect.width = render.rect.width;
288
- cloneRowRender.rect.maxWidth = render.rect.height;
289
- const cellRenders = [...render.getItems()];
290
- const cutCellRenders = [];
291
- for (let i = 0; i < cellRenders.length; i++) {
292
- const cellRender = cellRenders[i];
293
- if (cellRender.rect.height > limitHeight) {
294
- //限制的外框尺寸
295
- const availHeight = limitHeight;
296
- //限制的内框尺寸
297
- const limitRenderInnterHeight = ElementUtil.innerRectMaxHeight(cellRender, availHeight);
298
- const cutCellRender = this.cutRenderItem(cellRender, limitRenderInnterHeight);
299
- if (cutCellRender) {
300
- cutCellRenders.push(cutCellRender);
301
- }
302
- else {
303
- cutCellRenders.push(null);
304
- }
305
- }
306
- else {
307
- const cloneCellRender = cellRender;
308
- render.removeChild(cellRender);
309
- cutCellRenders.push(cloneCellRender);
310
- }
311
- }
312
- ElementUtil.remeasure(render);
313
- if (cutCellRenders.filter(item => item).length === 0) {
314
- return null;
315
- }
316
- else {
317
- //补齐单元格
318
- for (let i = 0; i < cutCellRenders.length; i++) {
319
- let cellRender = cutCellRenders[i];
320
- if (!cellRender) {
321
- cellRender = cellRenders[i].clone();
322
- ElementUtil.remeasure(cellRender);
323
- }
324
- cloneRowRender.addChild(cellRender);
325
- }
326
- ElementUtil.remeasure(cloneRowRender);
327
- return cloneRowRender;
328
- }
329
- }
330
- /**
331
- * 修复->已经截断的合并单元格要向下移动到合适的位置
332
- * @param tbRender
333
- * @param cutRows
334
- * @returns
335
- */
336
- fixCutTable(tbRender, cutRows) {
337
- if (!cutRows.length) {
338
- return;
339
- }
340
- const tbEle = tbRender.element;
341
- const belowMergeRows = new Set();
342
- for (let i = 0; i < tbRender.length; i++) {
343
- const row = tbRender.getChild(i);
344
- const nextRow = tbRender.getChild(i + 1);
345
- if (!nextRow) {
346
- break;
347
- }
348
- if (!cutRows.some(item => item === row)) {
349
- break;
350
- }
351
- if (row.length === tbEle.getColsCount()) {
352
- break;
353
- }
354
- if (this.checkFullRow(row)) {
355
- break;
356
- }
357
- for (let j = 0; j < row.length; j++) {
358
- const cell = row.getChild(j);
359
- const cellEle = cell.element;
360
- const colIndex = cellEle.getIndex();
361
- if (!this.existsCellRender(nextRow, colIndex)) {
362
- const insertColIndex = this.getRowInsertCellIndex(cell, nextRow);
363
- if (insertColIndex === -1) {
364
- const insertColIndex2 = this.getRowInsertCellIndex(cell, nextRow);
365
- throw new Error('未在紧挨下方找到可以放置的位置');
366
- }
367
- //row.removeChild(cell);
368
- nextRow.insertChild(cell, insertColIndex);
369
- belowMergeRows.add(row);
370
- ElementUtil.remeasure(nextRow);
371
- }
372
- }
373
- }
374
- if (belowMergeRows.size) {
375
- for (const row of belowMergeRows) {
376
- tbRender.removeChild(row);
377
- row.clear();
378
- }
379
- ElementUtil.remeasure(tbRender);
380
- }
381
- }
382
- /**
383
- * 校验当前是否是一个完整的行,没有Null单元格,检查当前是否还需要向下合并
384
- * @param row
385
- */
386
- checkFullRow(row) {
387
- let x = 0;
388
- for (let i = 0; i < row.length; i++) {
389
- const cell = row.getChild(i);
390
- if (cell.rect.x !== x) {
391
- return false;
392
- }
393
- x += cell.rect.width;
394
- }
395
- return x === row.rect.width;
396
- }
397
- existsCellRender(rowRender, cellIndex) {
398
- for (let i = 0; i < rowRender.length; i++) {
399
- const cellRender = rowRender.getChild(i);
400
- const cellEle = cellRender.element;
401
- if (cellEle.getIndex() === cellIndex) {
402
- return true;
403
- }
404
- }
405
- return false;
406
- }
407
- getBlockLineHeight(render) {
408
- if (render instanceof TableRowRenderObject) {
409
- let maxCellHeight = 0;
410
- for (let i = 0; i < render.length; i++) {
411
- const itemHeight = render.getChild(i).rect.height;
412
- if (itemHeight > maxCellHeight) {
413
- maxCellHeight = itemHeight;
414
- }
415
- }
416
- return maxCellHeight;
417
- }
418
- return render.rect.height;
419
- }
420
- getRowInsertCellIndex(sourceCell, destRow) {
421
- for (let i = 0; i < destRow.length; i++) {
422
- const cell = destRow.getChild(i);
423
- const rect = cell.rect;
424
- if (sourceCell.rect.x < rect.x) {
425
- return i;
426
- }
427
- }
428
- const lastCell = destRow.getChild(destRow.length - 1);
429
- if (sourceCell.rect.x >= lastCell.rect.x + lastCell.rect.width) {
430
- return destRow.length;
431
- }
432
- return -1;
433
- }
434
- getHeaderRows(tb) {
435
- const rows = [];
436
- for (let i = 0; i < tb.length; i++) {
437
- const rowRender = tb.getChild(i);
438
- const rowEle = rowRender.element;
439
- if (rowEle.props.headerRow) {
440
- rows.push(rowRender);
441
- }
442
- else {
443
- break;
444
- }
445
- }
446
- return rows;
447
- }
448
- }
449
- //# sourceMappingURL=element-render-cut.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"element-render-cut.js","sourceRoot":"lib/","sources":["framework/element-render-cut.ts"],"names":[],"mappings":"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","sourcesContent":["import { ElementUtil } from \"./element-util\";\nimport { DocumentBodyRenderObject } from \"./impl/document/doc-body-impl\";\nimport { DocumentHeaderRenderObject } from \"./impl/document/doc-header-impl\";\nimport { DocumentElement, DocumentRenderObject } from \"./impl/document/doc-impl\";\nimport { RenderContenxtType } from \"./render-context\";\nimport { BlockContentRenderObject, BlockLineRectRenderObject, MuiltBlockLineRenderObject, RenderObject } from \"./render-define\";\nimport { Rect, ViewOptions } from \"./element-define\";\nimport { TableRowElement, TableRowRenderObject } from \"./impl/table/table-row-impl\";\nimport { DocumentFooterRenderObject } from \"./impl/document/doc-footer-impl\";\nimport { TableCellElement, TableCellRenderObject } from \"./impl/table/table-cell-impl\";\nimport { TableElement, TableRenderObject } from \"./impl/table/table-impl\";\nimport { CommsContainerRenderObject } from \"./impl/comments/comments-container-impl\";\nimport { ParagraphElement } from \"./impl/paragraph/p-impl\";\n\nexport class ElementRenderCut {\n constructor(private options: ViewOptions, private renderContext: RenderContenxtType) { }\n\n cutPage(documentRender: DocumentRenderObject, documentElement: DocumentElement): Array<DocumentRenderObject> {\n if (this.options.fullPageView) {\n return this.getFullViewDocRender(documentRender, documentElement);\n }\n const headerRender = documentRender.getChild(0) as DocumentHeaderRenderObject;\n const bodyRender = documentRender.getChild(1).clone() as DocumentBodyRenderObject;\n const footerRender = documentRender.getChild(2) as DocumentFooterRenderObject;\n const commentsRender = documentRender.getChild(3) as CommsContainerRenderObject;\n const { headerLine, footerLine } = documentRender;\n let bodyMarginTop = headerLine + headerRender.rect.height + 6;\n let bodyMarginBottom = footerLine + footerRender.rect.height;\n const { top: bodyTop, bottom: bodyBottom } = documentRender.padding;\n bodyMarginTop = bodyMarginTop > bodyTop ? bodyMarginTop : bodyTop;\n bodyMarginBottom = bodyMarginBottom > bodyBottom ? bodyMarginBottom : bodyBottom;\n documentRender.padding.top = bodyMarginTop;\n documentRender.padding.bottom = bodyMarginBottom;\n const bodyLimitRect = documentRender.getInnnerRect();\n const bodyArray: Array<DocumentBodyRenderObject> = [];\n let { emptyBody: pageBodyRender, innerRect: bodyInnerLimitRect } = this.createEmptyBodyRender(bodyRender, bodyLimitRect);\n bodyArray.push(pageBodyRender);\n\n const createBodyHolder = () => {\n const { emptyBody, innerRect } = this.createEmptyBodyRender(bodyRender, bodyLimitRect);\n pageBodyRender = emptyBody;\n bodyInnerLimitRect = innerRect;\n bodyArray.push(pageBodyRender);\n };\n\n const appendToBody = (item: BlockContentRenderObject) => {\n item.rect.y = bodyInnerLimitRect.height + item.margin.top;\n pageBodyRender.addChild(item);\n bodyInnerLimitRect.height += item.rect.height + item.margin.top + item.margin.bottom;\n //上一个元素的bottom-margin\n //bodyInnerLimitRect.prevMargin = item.margin.bottom;\n ElementUtil.updateRenderHeightByInnerRect(pageBodyRender, bodyInnerLimitRect);\n if (this.checkPageBreak(item)) {\n createBodyHolder();\n }\n };\n\n\n let i = 0;\n let cloneBlockContentRender: null | BlockContentRenderObject = bodyRender.getChild(i) as BlockContentRenderObject;\n while (cloneBlockContentRender) {\n if (bodyInnerLimitRect.maxHeight - bodyInnerLimitRect.height - cloneBlockContentRender.rect.height - cloneBlockContentRender.margin.bottom - cloneBlockContentRender.margin.top < 0) {\n //限制的外框尺寸\n const bodyAvailHeight = bodyInnerLimitRect.maxHeight - bodyInnerLimitRect.height - cloneBlockContentRender.margin.bottom - cloneBlockContentRender.margin.top;\n //限制的内框尺寸\n const limitRenderInnterHeight = ElementUtil.innerRectMaxHeight(cloneBlockContentRender, bodyAvailHeight);\n const cutRenderObject = this.cutRenderItem(cloneBlockContentRender, limitRenderInnterHeight);\n //至少有一个块级行元素被切割出来\n if (cutRenderObject) {\n appendToBody(cutRenderObject);\n }\n createBodyHolder();\n } else {\n appendToBody(cloneBlockContentRender);\n if (++i < bodyRender.length) {\n cloneBlockContentRender = bodyRender.getChild(i) as BlockContentRenderObject;\n } else {\n cloneBlockContentRender = null;\n }\n }\n }\n\n const docPages: Array<DocumentRenderObject> = [];\n let pageY: number = this.options.docSpace;\n for (let i = 0; i < bodyArray.length; i++) {\n const body = bodyArray[i];\n const documentRender = documentElement.createRenderObject(this.options);\n docPages.push(documentRender);\n documentRender.rect.y = pageY;\n const limitRect = documentRender.getInnnerRect();\n const cloneHeaderRender = headerRender.clone();\n cloneHeaderRender.rect.x = limitRect.x;\n cloneHeaderRender.rect.y = headerLine;\n documentRender.addChild(cloneHeaderRender);\n body.rect.x = limitRect.x;\n body.rect.y = bodyMarginTop;\n body.rect.height = bodyInnerLimitRect.maxHeight;\n documentRender.addChild(body);\n pageY += documentRender.rect.height + this.options.docSpace;\n const cloneFooterRender = footerRender.clone();\n cloneFooterRender.rect.x = limitRect.x;\n cloneFooterRender.rect.y = documentRender.rect.height - bodyMarginBottom;\n documentRender.addChild(cloneFooterRender);\n //审阅模式,添加审阅窗口\n if (this.options.showReviewWindow && commentsRender) {\n const commentsContainer = commentsRender.element.createRenderObject(this.options, this.renderContext) as CommsContainerRenderObject;\n commentsContainer.padding.top = bodyMarginTop;\n commentsContainer.rect.height = documentRender.rect.height;\n documentRender.addChild(commentsContainer);\n commentsContainer.rect.x = documentRender.rect.x + documentRender.rect.width;\n documentRender.rect.width += this.options.reviewWindowWidth;\n }\n }\n return docPages;\n }\n\n private checkPageBreak(item: RenderObject): boolean {\n if (item.element && item.element.type === 'p') {\n const p = item.element as ParagraphElement;\n if (p.props.pageBreak) {\n return true;\n }\n }\n return false;\n }\n\n getFullViewDocRender(documentRender: DocumentRenderObject, documentElement: DocumentElement): Array<DocumentRenderObject> {\n const commentsRender = documentRender.getChild(3) as CommsContainerRenderObject;\n const commentsContainer = commentsRender.element.createRenderObject(this.options, this.renderContext) as CommsContainerRenderObject;\n documentRender.rect.height -= commentsContainer.rect.height;\n const bodyRender = documentRender.getChild(1) as DocumentBodyRenderObject;\n if (this.options.showReviewWindow) {\n documentRender.removeChild(commentsRender);\n documentRender.addChild(commentsContainer);\n commentsContainer.padding.top = bodyRender.rect.y;\n commentsContainer.rect.height = documentRender.rect.height;\n commentsContainer.rect.x = documentRender.rect.x + documentRender.rect.width;\n documentRender.rect.width += this.options.reviewWindowWidth;\n }\n return [documentRender as DocumentRenderObject]\n }\n\n createEmptyBodyRender(bodyRender: DocumentBodyRenderObject, limitRect: Rect): { emptyBody: DocumentBodyRenderObject, innerRect: Rect & { prevMargin: number } } {\n const pageBodyRender = bodyRender.element.createRenderObject(this.options, this.renderContext) as DocumentBodyRenderObject;\n ElementUtil.setBlockElementLimitSize(pageBodyRender, limitRect);\n const bodyInnerLimitRect = pageBodyRender.getInnnerRect();\n if (this.options.fullPageView) {\n bodyInnerLimitRect.height = Number.MAX_VALUE;\n }\n return { emptyBody: pageBodyRender, innerRect: { ...bodyInnerLimitRect, prevMargin: 0 } };\n }\n\n /**\n * 切割渲染元素\n * @param render 被切割的对象\n * @param limitHeight \n * @param addFunc \n * @returns \n */\n cutRenderItem(render: BlockContentRenderObject, limitHeight: number): BlockContentRenderObject | null {\n if (render instanceof TableRowRenderObject) {\n return this.cutRowRenderItem(render, limitHeight);\n }\n if (render instanceof TableRenderObject) {\n return this.cutTable(render, limitHeight);\n }\n const cloneRender = render.element.createRenderObject(this.options, this.renderContext) as MuiltBlockLineRenderObject;\n cloneRender.setRenderWidth(render.rect.width);\n if (render instanceof MuiltBlockLineRenderObject) {\n let sumHeight = 0;\n const children = [...render.getItems()];\n let j = 0;\n let blockLine = children[j];\n while (blockLine) {\n //sumHeight = ElementUtil.remeasure(cloneRender);\n const calcBlockLineHeight = this.getBlockLineHeight(blockLine);\n if (calcBlockLineHeight + sumHeight > limitHeight) {\n if (blockLine instanceof MuiltBlockLineRenderObject) {\n //限制的外框尺寸\n const availHeight = limitHeight - sumHeight;\n //限制的内框尺寸\n const limitRenderInnterHeight = ElementUtil.innerRectMaxHeight(render, availHeight);\n const cutRenderObject = this.cutRenderItem(blockLine, limitRenderInnterHeight);\n if (cutRenderObject) {\n cloneRender.addChild(cutRenderObject);\n sumHeight += cutRenderObject.rect.height;\n blockLine = children[++j];\n } else {\n break;\n }\n } else {\n break;\n }\n } else {\n render.removeChild(blockLine);\n cloneRender.addChild(blockLine);\n sumHeight += blockLine.rect.height;\n blockLine = children[++j];\n }\n }\n ElementUtil.remeasure(cloneRender);\n ElementUtil.remeasure(render);\n if (cloneRender.length === 0) {\n return null;\n } else {\n return cloneRender;\n }\n } else {\n throw new Error('未实现');\n }\n }\n\n /**\n * 切割渲染元素\n * @param tbRender 被切割的对象\n * @param limitHeight \n * @param addFunc \n * @returns \n */\n cutTable(tbRender: TableRenderObject, limitHeight: number): BlockContentRenderObject | null {\n const cloneTbRender = tbRender.element.createRenderObject(this.options, this.renderContext) as TableRenderObject;\n cloneTbRender.setRenderWidth(tbRender.rect.width);\n let sumHeight = 0;\n const rows = [...tbRender.getItems()];\n //获取跨页需要重复显示的行\n const headerRows = this.getHeaderRows(tbRender);\n //跨页头的高度\n const headerHeight = headerRows.reduce((prev, curr) => prev + curr.rect.height, 0);\n if (headerHeight > limitHeight) {\n return null;\n }\n const copyHeaderRows = headerRows.map(item => item.clone());\n //获取最后一个截断行,需要根据截断行判断最后一个截断的行位置\n const cutOffRows = rows.filter(row => limitHeight >= row.rect.y && limitHeight <= row.rect.y + row.rect.height)\n .map((row) => ({ rowIndex: (<TableRowElement>row.element).getIndex(), row }))\n .sort((first, second) => second.rowIndex - first.rowIndex);\n if (cutOffRows.length === 0) {\n throw new Error('无法获取截断行');\n }\n const joinRow = cutOffRows[0].row;\n let j = 0;\n let currRow = rows[j];\n const cutRows: Array<TableRowRenderObject> = [];\n while (currRow) {\n const rowContentHeight = this.getBlockLineHeight(currRow);\n if (rowContentHeight + sumHeight > limitHeight) {\n if (currRow instanceof MuiltBlockLineRenderObject) {\n //限制的外框尺寸\n const availHeight = limitHeight - sumHeight;\n //限制的内框尺寸\n const limitRenderInnterHeight = ElementUtil.innerRectMaxHeight(tbRender, availHeight);\n const cutRow = this.cutRowRenderItem(currRow, limitRenderInnterHeight) as TableRowRenderObject;\n if (cutRow) {\n cloneTbRender.addChild(cutRow);\n sumHeight += cutRow.rect.height;\n cutRows.push(currRow);\n if (currRow === joinRow) {\n break;\n }\n currRow = rows[++j];\n } else {\n break;\n }\n } else {\n break;\n }\n } else {\n tbRender.removeChild(currRow);\n cloneTbRender.addChild(currRow);\n sumHeight += currRow.rect.height;\n currRow = rows[++j];\n }\n }\n this.fixCutTable(tbRender, cutRows);\n ElementUtil.remeasure(cloneTbRender);\n //存在跨页需要重复显示的行头,则需要重新放置行头\n if (copyHeaderRows.length) {\n copyHeaderRows.forEach((r, i) => tbRender.insertChild(r, i))\n }\n ElementUtil.remeasure(tbRender);\n if (cloneTbRender.length === 0) {\n return null;\n } else {\n return cloneTbRender;\n }\n }\n\n cutRowRenderItem(render: TableRowRenderObject, limitHeight: number): TableRowRenderObject | null {\n if (render.element.props.minHeight > 0 && render.rect.height > limitHeight) {\n return null;\n }\n const cloneRowRender = render.element.createRenderObject() as TableRowRenderObject;\n cloneRowRender.rect.width = render.rect.width;\n cloneRowRender.rect.maxWidth = render.rect.height;\n const cellRenders = [...render.getItems()] as Array<TableCellRenderObject>;\n const cutCellRenders: Array<RenderObject | null> = [];\n for (let i = 0; i < cellRenders.length; i++) {\n const cellRender = cellRenders[i];\n if (cellRender.rect.height > limitHeight) {\n //限制的外框尺寸\n const availHeight = limitHeight;\n //限制的内框尺寸\n const limitRenderInnterHeight = ElementUtil.innerRectMaxHeight(cellRender, availHeight);\n const cutCellRender = this.cutRenderItem(cellRender, limitRenderInnterHeight);\n if (cutCellRender) {\n cutCellRenders.push(cutCellRender)\n } else {\n cutCellRenders.push(null)\n }\n } else {\n const cloneCellRender = cellRender as BlockLineRectRenderObject;\n render.removeChild(cellRender);\n cutCellRenders.push(cloneCellRender);\n }\n }\n ElementUtil.remeasure(render);\n if (cutCellRenders.filter(item => item).length === 0) {\n return null;\n } else {\n //补齐单元格\n for (let i = 0; i < cutCellRenders.length; i++) {\n let cellRender = cutCellRenders[i] as TableCellRenderObject;\n if (!cellRender) {\n cellRender = cellRenders[i].clone() as TableCellRenderObject;\n ElementUtil.remeasure(cellRender);\n }\n cloneRowRender.addChild(cellRender);\n }\n ElementUtil.remeasure(cloneRowRender);\n return cloneRowRender;\n }\n }\n /**\n * 修复->已经截断的合并单元格要向下移动到合适的位置\n * @param tbRender \n * @param cutRows \n * @returns \n */\n private fixCutTable(tbRender: TableRenderObject, cutRows: Array<TableRowRenderObject>): void {\n if (!cutRows.length) {\n return;\n }\n const tbEle = tbRender.element as TableElement;\n const belowMergeRows = new Set<TableRowRenderObject>();\n for (let i = 0; i < tbRender.length; i++) {\n const row = tbRender.getChild(i) as TableRowRenderObject;\n const nextRow = tbRender.getChild(i + 1) as TableRowRenderObject;\n if (!nextRow) {\n break;\n }\n if (!cutRows.some(item => item === row)) {\n break;\n }\n if (row.length === tbEle.getColsCount()) {\n break;\n }\n if (this.checkFullRow(row)) {\n break;\n }\n for (let j = 0; j < row.length; j++) {\n const cell = row.getChild(j) as TableCellRenderObject;\n const cellEle = cell.element as TableCellElement;\n const colIndex = cellEle.getIndex();\n if (!this.existsCellRender(nextRow, colIndex)) {\n const insertColIndex = this.getRowInsertCellIndex(cell, nextRow);\n if (insertColIndex === -1) {\n const insertColIndex2 = this.getRowInsertCellIndex(cell, nextRow);\n throw new Error('未在紧挨下方找到可以放置的位置');\n }\n //row.removeChild(cell);\n nextRow.insertChild(cell, insertColIndex);\n belowMergeRows.add(row);\n ElementUtil.remeasure(nextRow);\n }\n }\n }\n if (belowMergeRows.size) {\n for (const row of belowMergeRows) {\n tbRender.removeChild(row);\n row.clear();\n }\n ElementUtil.remeasure(tbRender);\n }\n }\n\n /**\n * 校验当前是否是一个完整的行,没有Null单元格,检查当前是否还需要向下合并\n * @param row \n */\n private checkFullRow(row: TableRowRenderObject): boolean {\n let x = 0;\n for (let i = 0; i < row.length; i++) {\n const cell = row.getChild(i);\n if (cell.rect.x !== x) {\n return false;\n }\n x += cell.rect.width;\n }\n return x === row.rect.width;\n }\n\n private existsCellRender(rowRender: TableRowRenderObject, cellIndex: number): boolean {\n for (let i = 0; i < rowRender.length; i++) {\n const cellRender = rowRender.getChild(i) as TableCellRenderObject;\n const cellEle = cellRender.element as TableCellElement;\n if (cellEle.getIndex() === cellIndex) {\n return true;\n }\n }\n return false;\n }\n\n private getBlockLineHeight(render: RenderObject): number {\n if (render instanceof TableRowRenderObject) {\n let maxCellHeight = 0;\n for (let i = 0; i < render.length; i++) {\n const itemHeight = render.getChild(i).rect.height;\n if (itemHeight > maxCellHeight) {\n maxCellHeight = itemHeight;\n }\n }\n return maxCellHeight;\n }\n return render.rect.height;\n }\n\n\n getRowInsertCellIndex(sourceCell: TableCellRenderObject, destRow: TableRowRenderObject): number {\n for (let i = 0; i < destRow.length; i++) {\n const cell = destRow.getChild(i) as TableCellRenderObject;\n const rect = cell.rect;\n if (sourceCell.rect.x < rect.x) {\n return i;\n }\n }\n const lastCell = destRow.getChild(destRow.length - 1);\n if (sourceCell.rect.x >= lastCell.rect.x + lastCell.rect.width) {\n return destRow.length;\n }\n return -1;\n }\n\n private getHeaderRows(tb: TableRenderObject): Array<TableRowRenderObject> {\n const rows: Array<TableRowRenderObject> = [];\n for (let i = 0; i < tb.length; i++) {\n const rowRender = tb.getChild(i) as TableRowRenderObject;\n const rowEle = rowRender.element as TableRowElement;\n if (rowEle.props.headerRow) {\n rows.push(rowRender);\n } else {\n break;\n }\n }\n return rows;\n }\n}\n"]}
@@ -1,113 +0,0 @@
1
- import { BranchElement } from "./element-define";
2
- import { ElementUtil } from "./element-util";
3
- import { validateDataEle } from "./impl/data-element/data-element-base-impl";
4
- import { TextGroupElement } from "./impl/text/text-impl";
5
- import { TrackRunElement, TrackRunTypeEnum } from "./impl/text/track-run-impl";
6
- export class ElementSerialize {
7
- static serialize(element, viewOptions) {
8
- if (element instanceof BranchElement) {
9
- const result = element.serialize(viewOptions);
10
- if (!result || result.complete) {
11
- return result;
12
- }
13
- result.children = [];
14
- let prevEle = null;
15
- for (let i = 0; i < element.length; i++) {
16
- const child = element.getChild(i);
17
- const serializeChild = this.serialize(child, viewOptions);
18
- if (child.type === 'text' && prevEle && prevEle.ele.type === 'text') {
19
- if (child.props.equals(prevEle.ele.props)) {
20
- prevEle.props.content += serializeChild.content;
21
- continue;
22
- }
23
- }
24
- if (serializeChild) {
25
- delete serializeChild.complete;
26
- serializeChild.props = serializeChild.props || {};
27
- if (Object.keys(serializeChild.props).length === 0) {
28
- delete serializeChild.props;
29
- }
30
- if (serializeChild.children && serializeChild.children.length === 0) {
31
- delete serializeChild.children;
32
- }
33
- result.children.push(serializeChild);
34
- prevEle = { ele: child, props: serializeChild };
35
- }
36
- }
37
- return result;
38
- }
39
- else {
40
- return element.serialize(viewOptions);
41
- }
42
- }
43
- static serializeString(element, options = { all: false }) {
44
- if (!options.all && element instanceof TrackRunElement && element.type === TrackRunTypeEnum.Deleted) {
45
- return '';
46
- }
47
- if (element instanceof TextGroupElement && !element.isDecorate) {
48
- return element.text;
49
- }
50
- if (element instanceof BranchElement) {
51
- const items = [];
52
- for (let i = 0; i < element.length; i++) {
53
- const item = element.getChild(i);
54
- items.push(this.serializeString(item, options));
55
- }
56
- return items.join('');
57
- }
58
- return "";
59
- }
60
- /**
61
- * 获取选中的结构
62
- * @param ss
63
- * @param viewOptions
64
- */
65
- static getSelectedStruct(ss, viewOptions) {
66
- if (ss.collapsed || !ss.startControl || !ss.selectedRange) {
67
- return null;
68
- }
69
- const range = ss.selectedRange;
70
- return ElementUtil.cloneRange(range, false, 'copy');
71
- }
72
- /**
73
- * 选中的文本
74
- * @param ss
75
- * @param viewOptions
76
- */
77
- static getSelectedText(ss, viewOptions) {
78
- const selectedStruct = this.getSelectedStruct(ss, viewOptions);
79
- if (selectedStruct) {
80
- return this.serializeString(selectedStruct);
81
- }
82
- else {
83
- return '';
84
- }
85
- }
86
- static getSelectedJSON(ss, viewOptions) {
87
- const selectedStruct = this.getSelectedStruct(ss, viewOptions);
88
- if (selectedStruct) {
89
- return JSON.stringify(this.serialize(selectedStruct, viewOptions));
90
- }
91
- else {
92
- return '';
93
- }
94
- }
95
- /**
96
- * 遍历指定元素内部所有数据元列表
97
- */
98
- static getDataElements(element) {
99
- const array = [];
100
- for (let i = 0; i < element.length; i++) {
101
- const item = element.getChild(i);
102
- if (validateDataEle(item)) {
103
- array.push(item);
104
- continue;
105
- }
106
- if (item instanceof BranchElement) {
107
- array.push(...this.getDataElements(item));
108
- }
109
- }
110
- return array;
111
- }
112
- }
113
- //# sourceMappingURL=element-serialize.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"element-serialize.js","sourceRoot":"lib/","sources":["framework/element-serialize.ts"],"names":[],"mappings":"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","sourcesContent":["import { SelectionState } from \"./document-selection\";\nimport { BranchElement, Element, SerializeProps, ViewOptions } from \"./element-define\";\nimport { ElementUtil } from \"./element-util\";\nimport { validateDataEle } from \"./impl/data-element/data-element-base-impl\";\nimport { TextGroupElement } from \"./impl/text/text-impl\";\nimport { TrackRunElement, TrackRunTypeEnum } from \"./impl/text/track-run-impl\";\n\nexport class ElementSerialize {\n static serialize(element: Element, viewOptions: ViewOptions): SerializeProps | null {\n if (element instanceof BranchElement) {\n const result = element.serialize(viewOptions);\n if (!result || result.complete) {\n return result;\n }\n result.children = [];\n let prevEle: { ele: Element, props: any } | null = null;\n for (let i = 0; i < element.length; i++) {\n const child = element.getChild(i);\n const serializeChild = this.serialize(child, viewOptions);\n if (child.type === 'text' && prevEle && prevEle.ele.type === 'text') {\n if ((<TextGroupElement>child).props.equals((<TextGroupElement>prevEle.ele).props)) {\n prevEle.props.content += (<any>serializeChild).content;\n continue;\n }\n }\n if (serializeChild) {\n delete serializeChild.complete;\n serializeChild.props = serializeChild.props || {};\n if (Object.keys(serializeChild.props).length === 0) {\n delete serializeChild.props\n }\n if (serializeChild.children && serializeChild.children.length === 0) {\n delete serializeChild.children;\n }\n result.children.push(serializeChild);\n prevEle = { ele: child, props: serializeChild };\n }\n }\n return result;\n } else {\n return element.serialize(viewOptions);\n }\n }\n\n static serializeString(element: Element, options: { all: boolean } = { all: false }): string {\n if (!options.all && element instanceof TrackRunElement && element.type === TrackRunTypeEnum.Deleted) {\n return '';\n }\n if (element instanceof TextGroupElement && !element.isDecorate) {\n return element.text;\n }\n if (element instanceof BranchElement) {\n const items: Array<string> = [];\n for (let i = 0; i < element.length; i++) {\n const item = element.getChild(i);\n items.push(this.serializeString(item, options));\n }\n return items.join('');\n }\n return \"\";\n }\n\n\n /**\n * 获取选中的结构\n * @param ss\n * @param viewOptions\n */\n static getSelectedStruct(ss: SelectionState, viewOptions: ViewOptions): Element | null {\n if (ss.collapsed || !ss.startControl || !ss.selectedRange) {\n return null;\n }\n const range = ss.selectedRange;\n return ElementUtil.cloneRange(range, false, 'copy');\n }\n\n /**\n * 选中的文本\n * @param ss\n * @param viewOptions\n */\n static getSelectedText(ss: SelectionState, viewOptions: ViewOptions): string {\n const selectedStruct = this.getSelectedStruct(ss, viewOptions) as BranchElement;\n if (selectedStruct) {\n return this.serializeString(selectedStruct,);\n } else {\n return '';\n }\n }\n\n static getSelectedJSON(ss: SelectionState, viewOptions: ViewOptions): string {\n const selectedStruct = this.getSelectedStruct(ss, viewOptions) as BranchElement;\n if (selectedStruct) {\n return JSON.stringify(this.serialize(selectedStruct, viewOptions));\n } else {\n return '';\n }\n }\n\n /**\n * 遍历指定元素内部所有数据元列表\n */\n static getDataElements(element: BranchElement): Array<Element> {\n const array: Array<Element> = [];\n for (let i = 0; i < element.length; i++) {\n const item = element.getChild(i);\n if (validateDataEle(item)) {\n array.push(item);\n continue;\n }\n if (item instanceof BranchElement) {\n array.push(...this.getDataElements(item))\n }\n }\n return array;\n }\n\n\n\n}\n\nexport interface DataElementValueStruct {\n id: string,\n name: string,\n value: string\n}\n"]}