@hailin-zheng/editor-core 1.0.15 → 1.0.22

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 (149) hide show
  1. package/README.md +1613 -0
  2. package/lib/framework/element-props.d.ts +2 -2
  3. package/lib/framework/impl/index.d.ts +36 -0
  4. package/lib/index.d.ts +34 -0
  5. package/lib/index.js +15672 -0
  6. package/lib/texteditor.d.ts +3 -3
  7. package/package.json +27 -26
  8. package/lib/doc-ruler.js +0 -313
  9. package/lib/doc-ruler.js.map +0 -1
  10. package/lib/framework/common-util.js +0 -178
  11. package/lib/framework/common-util.js.map +0 -1
  12. package/lib/framework/document-change.js +0 -1342
  13. package/lib/framework/document-change.js.map +0 -1
  14. package/lib/framework/document-combine.js +0 -40
  15. package/lib/framework/document-combine.js.map +0 -1
  16. package/lib/framework/document-comment.js +0 -148
  17. package/lib/framework/document-comment.js.map +0 -1
  18. package/lib/framework/document-context.js +0 -330
  19. package/lib/framework/document-context.js.map +0 -1
  20. package/lib/framework/document-eval-func.js +0 -48
  21. package/lib/framework/document-eval-func.js.map +0 -1
  22. package/lib/framework/document-event.js +0 -1054
  23. package/lib/framework/document-event.js.map +0 -1
  24. package/lib/framework/document-history.js +0 -65
  25. package/lib/framework/document-history.js.map +0 -1
  26. package/lib/framework/document-images-loader.js +0 -66
  27. package/lib/framework/document-images-loader.js.map +0 -1
  28. package/lib/framework/document-input-cursor.js +0 -239
  29. package/lib/framework/document-input-cursor.js.map +0 -1
  30. package/lib/framework/document-paint.js +0 -103
  31. package/lib/framework/document-paint.js.map +0 -1
  32. package/lib/framework/document-print-offscreen.js +0 -128
  33. package/lib/framework/document-print-offscreen.js.map +0 -1
  34. package/lib/framework/document-print.js +0 -203
  35. package/lib/framework/document-print.js.map +0 -1
  36. package/lib/framework/document-segmenter.js +0 -106
  37. package/lib/framework/document-segmenter.js.map +0 -1
  38. package/lib/framework/document-selection.js +0 -358
  39. package/lib/framework/document-selection.js.map +0 -1
  40. package/lib/framework/document-template.js +0 -20
  41. package/lib/framework/document-template.js.map +0 -1
  42. package/lib/framework/document-textline-mode.js +0 -30
  43. package/lib/framework/document-textline-mode.js.map +0 -1
  44. package/lib/framework/element-define.js +0 -579
  45. package/lib/framework/element-define.js.map +0 -1
  46. package/lib/framework/element-event-define.js +0 -108
  47. package/lib/framework/element-event-define.js.map +0 -1
  48. package/lib/framework/element-measure.js +0 -551
  49. package/lib/framework/element-measure.js.map +0 -1
  50. package/lib/framework/element-paint.js +0 -170
  51. package/lib/framework/element-paint.js.map +0 -1
  52. package/lib/framework/element-props.js +0 -809
  53. package/lib/framework/element-props.js.map +0 -1
  54. package/lib/framework/element-reader.js +0 -151
  55. package/lib/framework/element-reader.js.map +0 -1
  56. package/lib/framework/element-render-cut.js +0 -449
  57. package/lib/framework/element-render-cut.js.map +0 -1
  58. package/lib/framework/element-serialize.js +0 -113
  59. package/lib/framework/element-serialize.js.map +0 -1
  60. package/lib/framework/element-util.js +0 -1463
  61. package/lib/framework/element-util.js.map +0 -1
  62. package/lib/framework/impl/checkbox/checkbox-impl.js +0 -64
  63. package/lib/framework/impl/checkbox/checkbox-impl.js.map +0 -1
  64. package/lib/framework/impl/comments/comment-content-impl.js +0 -105
  65. package/lib/framework/impl/comments/comment-content-impl.js.map +0 -1
  66. package/lib/framework/impl/comments/comment-element-impl.js +0 -62
  67. package/lib/framework/impl/comments/comment-element-impl.js.map +0 -1
  68. package/lib/framework/impl/comments/comments-container-impl.js +0 -62
  69. package/lib/framework/impl/comments/comments-container-impl.js.map +0 -1
  70. package/lib/framework/impl/comments/comments-util.js +0 -67
  71. package/lib/framework/impl/comments/comments-util.js.map +0 -1
  72. package/lib/framework/impl/comments/validate-msg-impl.js +0 -83
  73. package/lib/framework/impl/comments/validate-msg-impl.js.map +0 -1
  74. package/lib/framework/impl/data-element/data-decorate-impl.js +0 -91
  75. package/lib/framework/impl/data-element/data-decorate-impl.js.map +0 -1
  76. package/lib/framework/impl/data-element/data-element-barcode.js +0 -115
  77. package/lib/framework/impl/data-element/data-element-barcode.js.map +0 -1
  78. package/lib/framework/impl/data-element/data-element-base-impl.js +0 -205
  79. package/lib/framework/impl/data-element/data-element-base-impl.js.map +0 -1
  80. package/lib/framework/impl/data-element/data-element-check-impl.js +0 -133
  81. package/lib/framework/impl/data-element/data-element-check-impl.js.map +0 -1
  82. package/lib/framework/impl/data-element/data-element-date-impl.js +0 -111
  83. package/lib/framework/impl/data-element/data-element-date-impl.js.map +0 -1
  84. package/lib/framework/impl/data-element/data-element-group-impl.js +0 -130
  85. package/lib/framework/impl/data-element/data-element-group-impl.js.map +0 -1
  86. package/lib/framework/impl/data-element/data-element-image-impl.js +0 -137
  87. package/lib/framework/impl/data-element/data-element-image-impl.js.map +0 -1
  88. package/lib/framework/impl/data-element/data-element-list-impl.js +0 -131
  89. package/lib/framework/impl/data-element/data-element-list-impl.js.map +0 -1
  90. package/lib/framework/impl/data-element/data-element-text-impl.js +0 -103
  91. package/lib/framework/impl/data-element/data-element-text-impl.js.map +0 -1
  92. package/lib/framework/impl/decorate/fill-null-space-imple.js +0 -43
  93. package/lib/framework/impl/decorate/fill-null-space-imple.js.map +0 -1
  94. package/lib/framework/impl/document/doc-body-impl.js +0 -79
  95. package/lib/framework/impl/document/doc-body-impl.js.map +0 -1
  96. package/lib/framework/impl/document/doc-body-part-impl.js +0 -94
  97. package/lib/framework/impl/document/doc-body-part-impl.js.map +0 -1
  98. package/lib/framework/impl/document/doc-container-impl.js +0 -21
  99. package/lib/framework/impl/document/doc-container-impl.js.map +0 -1
  100. package/lib/framework/impl/document/doc-footer-impl.js +0 -77
  101. package/lib/framework/impl/document/doc-footer-impl.js.map +0 -1
  102. package/lib/framework/impl/document/doc-header-impl.js +0 -83
  103. package/lib/framework/impl/document/doc-header-impl.js.map +0 -1
  104. package/lib/framework/impl/document/doc-impl.js +0 -209
  105. package/lib/framework/impl/document/doc-impl.js.map +0 -1
  106. package/lib/framework/impl/media-formula/menstrual-history.js +0 -153
  107. package/lib/framework/impl/media-formula/menstrual-history.js.map +0 -1
  108. package/lib/framework/impl/paragraph/p-impl.js +0 -156
  109. package/lib/framework/impl/paragraph/p-impl.js.map +0 -1
  110. package/lib/framework/impl/picture/image-impl.js +0 -124
  111. package/lib/framework/impl/picture/image-impl.js.map +0 -1
  112. package/lib/framework/impl/radio/radio-impl.js +0 -72
  113. package/lib/framework/impl/radio/radio-impl.js.map +0 -1
  114. package/lib/framework/impl/symbol/br-symbol-impl.js +0 -54
  115. package/lib/framework/impl/symbol/br-symbol-impl.js.map +0 -1
  116. package/lib/framework/impl/symbol/p-symbol-impl.js +0 -54
  117. package/lib/framework/impl/symbol/p-symbol-impl.js.map +0 -1
  118. package/lib/framework/impl/table/table-cell-impl.js +0 -145
  119. package/lib/framework/impl/table/table-cell-impl.js.map +0 -1
  120. package/lib/framework/impl/table/table-impl.js +0 -363
  121. package/lib/framework/impl/table/table-impl.js.map +0 -1
  122. package/lib/framework/impl/table/table-row-impl.js +0 -75
  123. package/lib/framework/impl/table/table-row-impl.js.map +0 -1
  124. package/lib/framework/impl/table/table-split-cell-patch.js +0 -89
  125. package/lib/framework/impl/table/table-split-cell-patch.js.map +0 -1
  126. package/lib/framework/impl/table/table-split-cell.js +0 -464
  127. package/lib/framework/impl/table/table-split-cell.js.map +0 -1
  128. package/lib/framework/impl/table/table-util.js +0 -678
  129. package/lib/framework/impl/table/table-util.js.map +0 -1
  130. package/lib/framework/impl/text/text-impl.js +0 -149
  131. package/lib/framework/impl/text/text-impl.js.map +0 -1
  132. package/lib/framework/impl/text/track-run-impl.js +0 -112
  133. package/lib/framework/impl/text/track-run-impl.js.map +0 -1
  134. package/lib/framework/notify.js +0 -116
  135. package/lib/framework/notify.js.map +0 -1
  136. package/lib/framework/range-util.js +0 -312
  137. package/lib/framework/range-util.js.map +0 -1
  138. package/lib/framework/render-context.js +0 -384
  139. package/lib/framework/render-context.js.map +0 -1
  140. package/lib/framework/render-define.js +0 -195
  141. package/lib/framework/render-define.js.map +0 -1
  142. package/lib/framework/selection-overlays.js +0 -124
  143. package/lib/framework/selection-overlays.js.map +0 -1
  144. package/lib/texteditor.js +0 -913
  145. package/lib/texteditor.js.map +0 -1
  146. package/lib/util/subject.js +0 -88
  147. package/lib/util/subject.js.map +0 -1
  148. package/lib/util/table-bind.js +0 -6
  149. package/lib/util/table-bind.js.map +0 -1
@@ -1,330 +0,0 @@
1
- import { DocumentEvalFunc } from "./document-eval-func";
2
- import { DocumentImagesLoader } from "./document-images-loader";
3
- import { ModifyFlag } from "./element-define";
4
- import { ElementSerialize } from "./element-serialize";
5
- import { DataElementInlineGroup, DataElementLeaf, validateDataEle } from "./impl/data-element/data-element-base-impl";
6
- import { DataElementCheck } from "./impl/data-element/data-element-check-impl";
7
- import { DocumentElement } from "./impl/document/doc-impl";
8
- import { TrackRunElement } from "./impl/text/track-run-impl";
9
- import { ElementUtil } from "./element-util";
10
- import { DocumentBodyPartElement } from "./impl/document/doc-body-part-impl";
11
- import { CommonUtil } from "./common-util";
12
- /**
13
- * 当前打开的文档的上下文信息,当前文档所有的属性设置都暴露在上下文中
14
- */
15
- export class EditorContext {
16
- selectionState;
17
- viewOptions;
18
- isDirty = false;
19
- cursorRect;
20
- _document;
21
- //文档刷新的订阅事件
22
- //refSub!: Subscription;
23
- syncRefresh;
24
- imageLoader;
25
- dynamicFunc;
26
- docChange;
27
- clearPrevDocCb;
28
- constructor(selectionState, viewOptions) {
29
- this.selectionState = selectionState;
30
- this.viewOptions = viewOptions;
31
- this.dynamicFunc = new DocumentEvalFunc(this);
32
- this.imageLoader = new DocumentImagesLoader();
33
- this.selectionState.onChangedEvent.subscribe(() => {
34
- this.syncRefresh?.();
35
- });
36
- }
37
- get document() {
38
- return this._document;
39
- }
40
- set document(value) {
41
- this.clearPrevDocCb?.();
42
- this._document = value;
43
- this.initScripts();
44
- // this.refSub = this._document.refreshSubject.subscribe((data) => {
45
- // data = data ?? 'content';
46
- // this.isDirty = this.isDirty || data === 'content';
47
- // this.syncRefresh?.(data);
48
- // });
49
- const docRefreshSub = this._document.refreshSubject.subscribe(() => {
50
- this.syncRefresh?.();
51
- });
52
- const docChangedSub = this._document.onChangeSubject.subscribe(() => {
53
- this.syncRefresh?.();
54
- });
55
- this.syncRefresh();
56
- this.clearPrevDocCb = () => {
57
- docRefreshSub.unsubscribe();
58
- docChangedSub.unsubscribe();
59
- if (this._document) {
60
- this.selectionState?.renderContainer?.destroy();
61
- this.clear();
62
- this._document.destroy();
63
- }
64
- this.clearPrevDocCb = null;
65
- };
66
- }
67
- clear() {
68
- this.selectionState.clear();
69
- this.imageLoader.clear();
70
- ;
71
- this.dynamicFunc.destroyScripts();
72
- this.isDirty = false;
73
- }
74
- get defaultCtx() {
75
- return new DocumentContext(this._document, this.selectionState);
76
- }
77
- getCurrentCtx(ele) {
78
- const parentCtx = ElementUtil.getParent(ele, (item) => item instanceof DocumentElement || item instanceof DocumentBodyPartElement);
79
- return new DocumentContext(parentCtx, this.selectionState);
80
- }
81
- /**
82
- * 根据当前选区,返回所在的上下文元素,返回类型为DocumentElement|DocumentBodyPartElement
83
- */
84
- getCurrentEleCtx() {
85
- const { startControl } = this.selectionState;
86
- if (!startControl) {
87
- return null;
88
- }
89
- const parentCtx = ElementUtil.getParent(startControl, (item) => item instanceof DocumentElement || item instanceof DocumentBodyPartElement);
90
- return parentCtx;
91
- }
92
- getCtx(ele) {
93
- return new DocumentContext(ele, this.selectionState);
94
- }
95
- ele_types_handlers = [];
96
- registerTypeHandlers(elementType, eventName, handler, useCapture = false) {
97
- this.ele_types_handlers.push({
98
- elementType,
99
- eventName,
100
- handler,
101
- useCapture
102
- });
103
- }
104
- invokeTypeHandler(ele, eventName, e, useCapture = false) {
105
- for (const th of this.ele_types_handlers) {
106
- if (ele instanceof th.elementType && th.eventName === eventName && th.useCapture === useCapture) {
107
- th.handler(e);
108
- }
109
- }
110
- }
111
- destroy() {
112
- this.clear();
113
- this.document.destroy();
114
- this.clearPrevDocCb?.();
115
- this.ele_types_handlers.length = 0;
116
- this.imageLoader.clear();
117
- ;
118
- }
119
- /**
120
- * 切换到行打印模式
121
- */
122
- switchTextlineMode() {
123
- this.document.viewOptions.textRowLineMode = !this.document.viewOptions.textRowLineMode;
124
- this.syncRefresh();
125
- }
126
- /**
127
- * 实例化动态脚本
128
- */
129
- initScripts() {
130
- this.dynamicFunc.initScripts(this.document.props.scripts);
131
- }
132
- /**
133
- * 替换数据元
134
- */
135
- replaceDataElement(oldDataElement, newElement, ss) {
136
- //清除光标
137
- ss.clear();
138
- //执行刷新
139
- //插入新对象到旧对象之前
140
- oldDataElement.parent.addChild(newElement, oldDataElement.getIndex());
141
- //删除旧节点
142
- oldDataElement.remove();
143
- }
144
- get refreshType() {
145
- return this._document?.modifyFlag === ModifyFlag.None ? 'appearance' : 'content';
146
- }
147
- }
148
- /**
149
- * 文档上下文
150
- */
151
- export class DocumentContext {
152
- ctx;
153
- ss;
154
- constructor(ctx, ss) {
155
- this.ctx = ctx;
156
- this.ss = ss;
157
- }
158
- getControlIDList() {
159
- const dataEleList = this.ctx.treeFilter(item => validateDataEle(item));
160
- return dataEleList.map(item => item.props.id);
161
- }
162
- getControlInstanceList() {
163
- return this.ctx.treeFilter(item => validateDataEle(item));
164
- }
165
- getControlById(id) {
166
- return this.ctx.treeFind(item => validateDataEle(item) && item['props']['id'] === id);
167
- }
168
- getControlByName(name) {
169
- return this.ctx.treeFind(item => validateDataEle(item) && item['props']['name'] === name);
170
- }
171
- /**
172
- * 获取数据元值集合
173
- */
174
- getDataElementValues() {
175
- const structList = this.getDataElementModelList();
176
- return structList.map(item => ({
177
- id: item.id,
178
- name: item.name,
179
- value: item.getValue()
180
- }));
181
- }
182
- /**
183
- * 获取数据元结构以及get\set闭包调用函数
184
- * @returns
185
- */
186
- getDataElementModelList() {
187
- const dataEleList = this.ctx.treeFilter(item => validateDataEle(item));
188
- const dataInlineGroups = dataEleList.filter(item => item instanceof DataElementInlineGroup);
189
- const dataLeafs = dataEleList.filter(item => item instanceof DataElementLeaf);
190
- //复选框数据元
191
- const dataCheckList = dataLeafs.filter(item => item instanceof DataElementCheck);
192
- //除复选框之外的LeafDataElement
193
- const dataOtherLeafValues = CommonUtil.removeUnionSet(dataLeafs, dataCheckList).map(item => ({ id: item.props.id, name: item.props.name, fieldName: item.props.field, item, getValue: () => { return item.getValue(); }, setValue: (val) => { item.setValue(val); } }));
194
- const dataInlineStructList = dataInlineGroups.map(item => ({ id: item.props.id, name: item.props.name, fieldName: item.props.fieldName, item, getValue: () => { return item.getValue(); }, setValue: (val) => { item.setValue(val); } }));
195
- //复选框列表
196
- const dataCheckStructList = this.getDataCheckModelList(dataCheckList);
197
- return [...dataInlineStructList, ...dataCheckStructList, ...dataOtherLeafValues];
198
- }
199
- /**
200
- * 获取复选框数据元结构列表
201
- * @param dataCheckList
202
- * @returns
203
- */
204
- getDataCheckModelList(dataCheckList) {
205
- //不存在groupName的复选框
206
- const singleCheckList = dataCheckList.filter(item => !item.props.groupName);
207
- //存在groupName的复选框
208
- const groupNames = Array.from(new Set(dataCheckList.filter(item => item.props.groupName).map(item => item.props.groupName)));
209
- const groupCheckListValues = groupNames.map((groupName) => {
210
- const groupCheckItems = dataCheckList.filter(item => item.props.groupName === groupName);
211
- return {
212
- id: groupName,
213
- name: groupCheckItems[0].props.name,
214
- fieldName: groupCheckItems[0].props.fieldName,
215
- multiSelect: groupCheckItems[0].props.multiSelect,
216
- item: groupCheckItems,
217
- getValue: () => {
218
- let checkedValue = '';
219
- if (groupCheckItems[0].props.multiSelect) {
220
- checkedValue = groupCheckItems.filter(item => item.props.checked).map(item => item.getValue() + '').join(';');
221
- }
222
- else {
223
- const checkedSingleItem = groupCheckItems.find(item => item.props.checked);
224
- if (checkedSingleItem) {
225
- checkedValue = checkedSingleItem.props.checkedValue;
226
- }
227
- }
228
- ;
229
- return checkedValue;
230
- },
231
- setValue: (val) => {
232
- //为null时
233
- if (val === null || val === undefined) {
234
- groupCheckItems.forEach(item => item.props.checked = false);
235
- return;
236
- }
237
- if (groupCheckItems[0].props.multiSelect) {
238
- const valItems = typeof val === 'string' ? val.split(';') : val;
239
- groupCheckItems.forEach(item => {
240
- item.props.checked = valItems.indexOf(item.props.checkedValue + '') >= 0;
241
- });
242
- }
243
- else {
244
- groupCheckItems.forEach(item => {
245
- item.props.checked = item.props.checkedValue === val;
246
- });
247
- }
248
- ;
249
- }
250
- };
251
- });
252
- const singleCheckListValues = singleCheckList.map(item => ({ id: item.props.id, name: item.props.name, fieldName: item.props.fieldName, item, getValue: () => { return item.getValue(); }, setValue: (val) => { item.setValue(val); } }));
253
- return [...singleCheckListValues, ...groupCheckListValues];
254
- }
255
- /**
256
- * 获取留痕块元素列表
257
- */
258
- getTrackElements() {
259
- return this.ctx.treeFilter(item => item instanceof TrackRunElement);
260
- }
261
- getTrackElmeentById(id) {
262
- return this.ctx.treeFind(item => item instanceof TrackRunElement && item.props.id === id);
263
- }
264
- /**
265
- * 获取留痕块内数据
266
- */
267
- getTracksData() {
268
- const trackElements = this.getTrackElements();
269
- return trackElements.map(item => {
270
- const trackRun = item;
271
- const content = ElementSerialize.serializeString(trackRun, { all: true });
272
- return {
273
- //用户id
274
- userId: trackRun.props.userId,
275
- //用户名称
276
- userName: trackRun.props.userName,
277
- //日期
278
- date: trackRun.props.date,
279
- //类型,ins-run:插入,del-run:删除
280
- type: trackRun.type,
281
- //留痕块id
282
- id: trackRun.props.id,
283
- //内容
284
- content
285
- };
286
- });
287
- }
288
- setControlValue(id, value) {
289
- const dataEle = this.getControlById(id);
290
- if (dataEle) {
291
- dataEle.setValue(value);
292
- }
293
- this.ss.clear();
294
- }
295
- setControlValueByName(name, val) {
296
- const dataEle = this.getControlByName(name);
297
- dataEle.setValue(val);
298
- }
299
- /**
300
- * 获取复选框选中的值
301
- */
302
- getCheckBoxValues(groupName) {
303
- const ckbs = this.getCheckBoxList(groupName);
304
- return ckbs.filter(item => item.props.checked).map(item => item.props.checkedValue);
305
- }
306
- getCheckBoxList(groupName) {
307
- return this.getControlInstanceList().filter(item => item instanceof DataElementCheck && item.props.groupName === groupName);
308
- }
309
- /**
310
- * 当前上下文执行默认绑定
311
- * @param data
312
- */
313
- bindDataValues(data, predicateKey = 'fieldName') {
314
- this.ss.clear();
315
- let bindData = typeof data === 'string' ? JSON.parse(data) : data;
316
- if (Array.isArray(bindData)) {
317
- const obj = {};
318
- bindData.forEach(item => { obj[item.key] = item.value; });
319
- bindData = obj;
320
- }
321
- const dataList = this.getDataElementModelList();
322
- dataList.forEach(item => {
323
- const objKey = item[predicateKey];
324
- if (bindData.hasOwnProperty(objKey)) {
325
- item.setValue(bindData[objKey]);
326
- }
327
- });
328
- }
329
- }
330
- //# sourceMappingURL=document-context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"document-context.js","sourceRoot":"lib/","sources":["framework/document-context.ts"],"names":[],"mappings":"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","sourcesContent":["import { DocumentEvalFunc } from \"./document-eval-func\";\nimport { DocumentImagesLoader } from \"./document-images-loader\";\nimport { SelectionState } from \"./document-selection\";\nimport { BranchElement, Element, ImgLoadStatus, ModifyFlag, Rect, RefreshType, ViewOptions } from \"./element-define\";\nimport { ElementEvent, EventTypes } from \"./element-event-define\";\nimport { DataElementValueStruct, ElementSerialize } from \"./element-serialize\";\nimport { DataElementInlineGroup, DataElementLeaf, validateDataEle } from \"./impl/data-element/data-element-base-impl\";\nimport { DataElementCheck } from \"./impl/data-element/data-element-check-impl\";\nimport { DocumentElement } from \"./impl/document/doc-impl\";\nimport { TrackRunElement, TrackRunTypeEnum } from \"./impl/text/track-run-impl\";\nimport { ElementUtil } from \"./element-util\";\nimport { DocumentBodyPartElement } from \"./impl/document/doc-body-part-impl\";\nimport { DocumentChange } from \"./document-change\";\nimport { CommonUtil } from \"./common-util\";\n\ninterface RegisterTypeHandlerProps<T extends Element> {\n elementType: { new(...args: any): T },\n eventName: EventTypes,\n handler: <E extends ElementEvent>(e: E) => void,\n useCapture: boolean\n}\n/**\n * 当前打开的文档的上下文信息,当前文档所有的属性设置都暴露在上下文中\n */\nexport class EditorContext {\n isDirty: boolean = false;\n cursorRect!: Rect | null;\n private _document!: DocumentElement;\n //文档刷新的订阅事件\n //refSub!: Subscription;\n syncRefresh!: () => void;\n imageLoader: IImageLoader;\n dynamicFunc: DocumentEvalFunc;\n docChange!: DocumentChange;\n clearPrevDocCb!: (() => void) | null;\n constructor(public readonly selectionState: SelectionState, public readonly viewOptions: ViewOptions) {\n this.dynamicFunc = new DocumentEvalFunc(this);\n this.imageLoader = new DocumentImagesLoader();\n this.selectionState.onChangedEvent.subscribe(() => {\n this.syncRefresh?.();\n });\n }\n\n public get document(): DocumentElement {\n return this._document;\n }\n\n public set document(value: DocumentElement) {\n this.clearPrevDocCb?.();\n this._document = value;\n this.initScripts();\n // this.refSub = this._document.refreshSubject.subscribe((data) => {\n // data = data ?? 'content';\n // this.isDirty = this.isDirty || data === 'content';\n // this.syncRefresh?.(data);\n // });\n const docRefreshSub = this._document.refreshSubject.subscribe(() => {\n this.syncRefresh?.();\n });\n const docChangedSub = this._document.onChangeSubject.subscribe(() => {\n this.syncRefresh?.();\n });\n this.syncRefresh();\n this.clearPrevDocCb = () => {\n docRefreshSub.unsubscribe();\n docChangedSub.unsubscribe();\n if (this._document) {\n this.selectionState?.renderContainer?.destroy();\n this.clear();\n this._document.destroy();\n }\n this.clearPrevDocCb = null;\n }\n }\n\n clear(): void {\n this.selectionState.clear();\n this.imageLoader.clear();;\n this.dynamicFunc.destroyScripts();\n this.isDirty = false;\n }\n\n get defaultCtx(): DocumentContext {\n return new DocumentContext(this._document, this.selectionState);\n }\n\n getCurrentCtx(ele: Element): DocumentContext {\n const parentCtx = ElementUtil.getParent(ele, (item) => item instanceof DocumentElement || item instanceof DocumentBodyPartElement) as BranchElement;\n return new DocumentContext(parentCtx, this.selectionState);\n }\n\n /**\n * 根据当前选区,返回所在的上下文元素,返回类型为DocumentElement|DocumentBodyPartElement\n */\n getCurrentEleCtx(): BranchElement | null {\n const { startControl } = this.selectionState;\n if (!startControl) {\n return null;\n }\n const parentCtx = ElementUtil.getParent(startControl, (item) => item instanceof DocumentElement || item instanceof DocumentBodyPartElement) as BranchElement;\n return parentCtx;\n }\n\n getCtx(ele: BranchElement): DocumentContext {\n return new DocumentContext(ele, this.selectionState);\n }\n\n\n private ele_types_handlers: Array<RegisterTypeHandlerProps<Element>> = [];\n registerTypeHandlers<T extends Element>(elementType: { new(...args: any): T }, eventName: EventTypes, handler: (e: ElementEvent) => void, useCapture: boolean = false): void {\n this.ele_types_handlers.push({\n elementType,\n eventName,\n handler,\n useCapture\n })\n }\n\n invokeTypeHandler(ele: Element, eventName: EventTypes, e: ElementEvent, useCapture: boolean = false): void {\n for (const th of this.ele_types_handlers) {\n if (ele instanceof th.elementType && th.eventName === eventName && th.useCapture === useCapture) {\n th.handler(e);\n }\n }\n }\n\n destroy(): void {\n this.clear();\n this.document.destroy();\n this.clearPrevDocCb?.();\n this.ele_types_handlers.length = 0;\n this.imageLoader.clear();;\n }\n\n /**\n * 切换到行打印模式\n */\n switchTextlineMode(): void {\n this.document.viewOptions.textRowLineMode = !this.document.viewOptions.textRowLineMode;\n this.syncRefresh();\n }\n\n /**\n * 实例化动态脚本\n */\n private initScripts(): void {\n this.dynamicFunc.initScripts(this.document.props.scripts);\n }\n\n\n /**\n * 替换数据元\n */\n replaceDataElement(oldDataElement: DataElementLeaf | DataElementInlineGroup, newElement: DataElementLeaf | DataElementInlineGroup, ss: SelectionState): void {\n //清除光标\n ss.clear();\n //执行刷新\n //插入新对象到旧对象之前\n oldDataElement.parent.addChild(newElement, oldDataElement.getIndex());\n //删除旧节点\n oldDataElement.remove();\n }\n\n get refreshType(): RefreshType {\n return this._document?.modifyFlag === ModifyFlag.None ? 'appearance' : 'content'\n }\n}\n\nexport interface ImageSourceItem {\n src: string,\n task: Promise<void>;\n cbs: Array<(status: ImgLoadStatus) => void>;\n ele: HTMLImageElement,\n loadStatus: ImgLoadStatus\n}\n\nexport interface IImageLoader {\n clear(): void;\n loadImage(src: string, onCallback: (status: ImgLoadStatus) => void): void;\n getImage(src: string): HTMLImageElement | undefined;\n imagesLoadCompleted(): boolean;\n getLoadTasks(): Array<Promise<void>>;\n}\n\n/**\n * 文档上下文\n */\nexport class DocumentContext {\n constructor(private ctx: BranchElement, private ss: SelectionState) { }\n\n getControlIDList(): Array<string> {\n const dataEleList = <unknown>this.ctx.treeFilter(item => validateDataEle(item)) as Array<{ props: { id: string } }>;\n return dataEleList.map(item => item.props.id);\n }\n\n getControlInstanceList(): Array<DataElementInlineGroup | DataElementLeaf> {\n return this.ctx.treeFilter(item => validateDataEle(item)) as Array<DataElementInlineGroup | DataElementLeaf>;\n }\n\n getControlById(id: string): DataElementInlineGroup | DataElementLeaf {\n return this.ctx.treeFind(item => validateDataEle(item) && (<any>item)['props']['id'] === id) as DataElementInlineGroup | DataElementLeaf;\n }\n\n getControlByName(name: string): DataElementInlineGroup | DataElementLeaf {\n return this.ctx.treeFind(item => validateDataEle(item) && (<any>item)['props']['name'] === name) as DataElementInlineGroup | DataElementLeaf;\n }\n\n /**\n * 获取数据元值集合\n */\n getDataElementValues(): Array<DataElementValueStruct> {\n const structList = this.getDataElementModelList();\n return structList.map<DataElementValueStruct>(item => ({\n id: item.id,\n name: item.name,\n value: item.getValue()\n }));\n }\n\n /**\n * 获取数据元结构以及get\\set闭包调用函数\n * @returns \n */\n getDataElementModelList(): Array<DataCheckEleModel | DataInputEleModel | DataLeafEleModel> {\n const dataEleList = this.ctx.treeFilter(item => validateDataEle(item)) as Array<DataElementInlineGroup | DataElementLeaf>;\n\n const dataInlineGroups = dataEleList.filter(item => item instanceof DataElementInlineGroup) as Array<DataElementInlineGroup>;\n const dataLeafs = dataEleList.filter(item => item instanceof DataElementLeaf) as Array<DataElementLeaf>;\n\n //复选框数据元\n const dataCheckList = dataLeafs.filter(item => item instanceof DataElementCheck) as Array<DataElementCheck>;\n //除复选框之外的LeafDataElement\n const dataOtherLeafValues = CommonUtil.removeUnionSet(dataLeafs, dataCheckList).map<DataLeafEleModel>(item => (\n { id: item.props.id as string, name: item.props.name as string, fieldName: item.props.field as string, item, getValue: () => { return item.getValue() }, setValue: (val) => { item.setValue(val) } }));\n const dataInlineStructList = dataInlineGroups.map<DataInputEleModel>(item => (\n { id: item.props.id, name: item.props.name, fieldName: item.props.fieldName, item, getValue: () => { return item.getValue() }, setValue: (val) => { item.setValue(val) } }));\n //复选框列表\n const dataCheckStructList = this.getDataCheckModelList(dataCheckList);\n return [...dataInlineStructList, ...dataCheckStructList, ...dataOtherLeafValues];\n }\n\n /**\n * 获取复选框数据元结构列表\n * @param dataCheckList \n * @returns \n */\n private getDataCheckModelList(dataCheckList: Array<DataElementCheck>): Array<DataCheckEleModel | DataLeafEleModel> {\n //不存在groupName的复选框\n const singleCheckList = dataCheckList.filter(item => !item.props.groupName);\n //存在groupName的复选框\n const groupNames = Array.from(new Set(dataCheckList.filter(item => item.props.groupName).map(item => item.props.groupName)));\n const groupCheckListValues = groupNames.map<DataCheckEleModel>((groupName) => {\n const groupCheckItems = dataCheckList.filter(item => item.props.groupName === groupName);\n return {\n id: groupName,\n name: groupCheckItems[0].props.name,\n fieldName: groupCheckItems[0].props.fieldName,\n multiSelect: groupCheckItems[0].props.multiSelect,\n item: groupCheckItems,\n getValue: () => {\n let checkedValue = '';\n if (groupCheckItems[0].props.multiSelect) {\n checkedValue = groupCheckItems.filter(item => item.props.checked).map(item => item.getValue() + '').join(';');\n } else {\n const checkedSingleItem = groupCheckItems.find(item => item.props.checked)\n if (checkedSingleItem) {\n checkedValue = checkedSingleItem.props.checkedValue;\n }\n };\n return checkedValue;\n },\n setValue: (val: string | Array<string>) => {\n //为null时\n if (val === null || val === undefined) {\n groupCheckItems.forEach(item => item.props.checked = false);\n return;\n }\n if (groupCheckItems[0].props.multiSelect) {\n const valItems = typeof val === 'string' ? val.split(';') : val;\n\n groupCheckItems.forEach(item => {\n item.props.checked = valItems.indexOf(item.props.checkedValue + '') >= 0;\n });\n } else {\n groupCheckItems.forEach(item => {\n item.props.checked = item.props.checkedValue === val;\n });\n };\n }\n }\n })\n const singleCheckListValues = singleCheckList.map<DataLeafEleModel>(item => ({ id: item.props.id, name: item.props.name, fieldName: item.props.fieldName, item, getValue: () => { return item.getValue() }, setValue: (val) => { item.setValue(val) } }));\n return [...singleCheckListValues, ...groupCheckListValues];\n }\n\n /**\n * 获取留痕块元素列表\n */\n getTrackElements(): Array<TrackRunElement> {\n return this.ctx.treeFilter(item => item instanceof TrackRunElement) as Array<TrackRunElement>;\n }\n\n getTrackElmeentById(id: string): TrackRunElement | null {\n return this.ctx.treeFind(item => item instanceof TrackRunElement && item.props.id === id) as TrackRunElement | null;\n }\n\n /**\n * 获取留痕块内数据\n */\n getTracksData(): Array<TrackBlockData> {\n const trackElements = this.getTrackElements();\n return trackElements.map(item => {\n const trackRun = item as TrackRunElement;\n const content = ElementSerialize.serializeString(trackRun, { all: true });\n return {\n //用户id\n userId: trackRun.props.userId,\n //用户名称\n userName: trackRun.props.userName,\n //日期\n date: trackRun.props.date,\n //类型,ins-run:插入,del-run:删除\n type: trackRun.type as TrackRunTypeEnum,\n //留痕块id\n id: trackRun.props.id,\n //内容\n content\n }\n });\n }\n\n setControlValue(id: string, value: string): void {\n const dataEle = this.getControlById(id);\n if (dataEle) {\n dataEle.setValue(value);\n }\n this.ss.clear();\n }\n\n setControlValueByName(name: string, val: any): void {\n const dataEle = this.getControlByName(name)\n dataEle.setValue(val)\n }\n\n /**\n * 获取复选框选中的值\n */\n getCheckBoxValues(groupName: string): Array<string> {\n const ckbs = this.getCheckBoxList(groupName);\n return ckbs.filter(item => item.props.checked).map(item => item.props.checkedValue);\n }\n\n getCheckBoxList(groupName: string): Array<DataElementCheck> {\n return this.getControlInstanceList().filter(item => item instanceof DataElementCheck && item.props.groupName === groupName) as Array<DataElementCheck>;\n }\n\n /**\n * 当前上下文执行默认绑定\n * @param data \n */\n bindDataValues(data: string | Object | Array<{ key: string, value: any }>, predicateKey: 'id' | 'name' | 'fieldName' = 'fieldName'): void {\n this.ss.clear();\n let bindData = typeof data === 'string' ? JSON.parse(data) as Object : data;\n if (Array.isArray(bindData)) {\n const obj = {};\n bindData.forEach(item => { obj[item.key] = item.value });\n bindData = obj;\n }\n const dataList = this.getDataElementModelList();\n dataList.forEach(item => {\n const objKey = item[predicateKey];\n if (bindData.hasOwnProperty(objKey)) {\n item.setValue(bindData[objKey]);\n }\n });\n }\n}\n\n\ninterface DataEleBaseModel {\n id: string;\n name: string;\n fieldName: string;\n getValue: () => any;\n setValue: (val: any) => void;\n}\ninterface DataCheckEleModel extends DataEleBaseModel {\n item: Array<DataElementCheck>;\n multiSelect: boolean;\n}\n\ninterface DataInputEleModel extends DataEleBaseModel {\n item: DataElementInlineGroup\n}\n\ninterface DataLeafEleModel extends DataEleBaseModel {\n item: DataElementLeaf;\n}\n\n/**\n * 留痕块结构化数据\n */\ninterface TrackBlockData {\n userId: string;\n userName: string;\n date: string;\n type: TrackRunTypeEnum,\n content: string,\n id: string;\n}"]}
@@ -1,48 +0,0 @@
1
- export class DocumentEvalFunc {
2
- docCtx;
3
- constructor(docCtx) {
4
- this.docCtx = docCtx;
5
- }
6
- scriptsFunc;
7
- /**
8
- * 实例化动态脚本
9
- */
10
- initScripts(scripts) {
11
- this.destroyScripts();
12
- if (scripts) {
13
- try {
14
- const func = new Function("docCtx", scripts);
15
- this.scriptsFunc = func(this.docCtx);
16
- }
17
- catch (e) {
18
- console.error("自定义标本解析错误", e);
19
- }
20
- }
21
- // const func = (docCtx: DocumentContext) => {
22
- // const sexELe = docCtx.getControlById('NqoYI')
23
- // const dyEle = docCtx.getControlById('gTuBI');
24
- // return () => {
25
- // if (sexELe && dyEle) {
26
- // const sexValue = sexELe.getValue();
27
- // const dyValue = sexValue === '1' ? '男的吗' : sexValue === '2' ? '女的吗' : '难道是人妖吗';
28
- // dyEle.setValue(dyValue);
29
- // }
30
- // };
31
- // };
32
- }
33
- /**
34
- * 销毁动态脚本实例
35
- */
36
- destroyScripts() {
37
- if (this.scriptsFunc) {
38
- this.scriptsFunc = null;
39
- }
40
- }
41
- /**
42
- * 触发动态脚本
43
- */
44
- invokedScripts() {
45
- this.scriptsFunc?.();
46
- }
47
- }
48
- //# sourceMappingURL=document-eval-func.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"document-eval-func.js","sourceRoot":"lib/","sources":["framework/document-eval-func.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,gBAAgB;IACN;IAAnB,YAAmB,MAAqB;QAArB,WAAM,GAAN,MAAM,CAAe;IAExC,CAAC;IACD,WAAW,CAAuB;IAElC;;OAEG;IACH,WAAW,CAAC,OAAe;QACvB,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,OAAO,EAAE;YACT,IAAI;gBACA,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;gBAC5C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACxC;YAAC,OAAO,CAAC,EAAE;gBACR,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;aACjC;SAEJ;QACD,8CAA8C;QAC9C,oDAAoD;QACpD,oDAAoD;QACpD,qBAAqB;QACrB,iCAAiC;QACjC,kDAAkD;QAClD,8FAA8F;QAC9F,uCAAuC;QACvC,YAAY;QACZ,SAAS;QACT,KAAK;IACT,CAAC;IAED;;OAEG;IACH,cAAc;QACV,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;SAC3B;IACL,CAAC;IAED;;OAEG;IACH,cAAc;QACV,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;IACzB,CAAC;CAGJ","sourcesContent":["import { EditorContext } from \"./document-context\";\n\nexport class DocumentEvalFunc {\n constructor(public docCtx: EditorContext) {\n\n }\n scriptsFunc!: (() => void) | null;\n\n /**\n * 实例化动态脚本\n */\n initScripts(scripts: string): void {\n this.destroyScripts();\n if (scripts) {\n try {\n const func = new Function(\"docCtx\", scripts)\n this.scriptsFunc = func(this.docCtx);\n } catch (e) {\n console.error(\"自定义标本解析错误\", e);\n }\n\n }\n // const func = (docCtx: DocumentContext) => {\n // const sexELe = docCtx.getControlById('NqoYI')\n // const dyEle = docCtx.getControlById('gTuBI');\n // return () => {\n // if (sexELe && dyEle) {\n // const sexValue = sexELe.getValue();\n // const dyValue = sexValue === '1' ? '男的吗' : sexValue === '2' ? '女的吗' : '难道是人妖吗';\n // dyEle.setValue(dyValue);\n // }\n // };\n // };\n }\n\n /**\n * 销毁动态脚本实例\n */\n destroyScripts(): void {\n if (this.scriptsFunc) {\n this.scriptsFunc = null;\n }\n }\n\n /**\n * 触发动态脚本\n */\n invokedScripts(): void {\n this.scriptsFunc?.();\n }\n\n\n}\n"]}