@shijiu/jsview 1.9.719

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 (148) hide show
  1. package/dom/bin/jsview-browser-debug-dom.min.js +1 -0
  2. package/dom/bin/jsview-dom.min.js +1 -0
  3. package/dom/bin/jsview-engine-js-browser.min.js +1 -0
  4. package/dom/bin/jsview-forge-define.min.js +1 -0
  5. package/dom/browser-root-style.css +21 -0
  6. package/dom/jsv-browser-debug-dom.js +8 -0
  7. package/dom/jsv-dom.js +6 -0
  8. package/dom/jsv-engine-js-browser.js +6 -0
  9. package/dom/jsv-forge-define.js +6 -0
  10. package/dom/jsview-dom/README.md +5 -0
  11. package/dom/jsview-dom/package-lock.json-perfect +3898 -0
  12. package/dom/jsview-dom/package.json +23 -0
  13. package/dom/jsview-dom/rollup/browser-debug-dom.rollup.config.js +15 -0
  14. package/dom/jsview-dom/rollup/dom.rollup.config.js +14 -0
  15. package/dom/jsview-dom/rollup/engine-js-browser.rollup.config.js +14 -0
  16. package/dom/jsview-dom/rollup/forge-define.rollup.config.js +14 -0
  17. package/dom/jsview-dom/scripts/release_dist.sh +36 -0
  18. package/dom/jsview-dom/src/dom-browser-hook/HookDocument.js +118 -0
  19. package/dom/jsview-dom/src/dom-browser-hook/OriginDocument.js +19 -0
  20. package/dom/jsview-dom/src/dom-browser-hook/StyleFormatCheck.js +559 -0
  21. package/dom/jsview-dom/src/dom-browser-hook/index.js +6 -0
  22. package/dom/jsview-dom/src/dom-wrapper/ForgeExtension.js +226 -0
  23. package/dom/jsview-dom/src/dom-wrapper/JsViewForgeApp.js +85 -0
  24. package/dom/jsview-dom/src/dom-wrapper/JsViewProxy.js +51 -0
  25. package/dom/jsview-dom/src/dom-wrapper/event/AnimationEvent.js +7 -0
  26. package/dom/jsview-dom/src/dom-wrapper/event/Event.js +12 -0
  27. package/dom/jsview-dom/src/dom-wrapper/event/FocusEvent.js +9 -0
  28. package/dom/jsview-dom/src/dom-wrapper/event/KeyboardEvent.js +43 -0
  29. package/dom/jsview-dom/src/dom-wrapper/event/LoadEvent.js +8 -0
  30. package/dom/jsview-dom/src/dom-wrapper/index.js +16 -0
  31. package/dom/jsview-dom/src/dom-wrapper/node/AnchorElement.js +24 -0
  32. package/dom/jsview-dom/src/dom-wrapper/node/AudioElement.js +60 -0
  33. package/dom/jsview-dom/src/dom-wrapper/node/Comment.js +10 -0
  34. package/dom/jsview-dom/src/dom-wrapper/node/DivElement.js +498 -0
  35. package/dom/jsview-dom/src/dom-wrapper/node/Document.js +274 -0
  36. package/dom/jsview-dom/src/dom-wrapper/node/Element.js +852 -0
  37. package/dom/jsview-dom/src/dom-wrapper/node/FDivElement.js +48 -0
  38. package/dom/jsview-dom/src/dom-wrapper/node/HeadElement.js +47 -0
  39. package/dom/jsview-dom/src/dom-wrapper/node/ImageElement.js +203 -0
  40. package/dom/jsview-dom/src/dom-wrapper/node/JsvAudioTrackElement.js +22 -0
  41. package/dom/jsview-dom/src/dom-wrapper/node/JsvElement.js +40 -0
  42. package/dom/jsview-dom/src/dom-wrapper/node/LinkElement.js +48 -0
  43. package/dom/jsview-dom/src/dom-wrapper/node/MediaElement.js +230 -0
  44. package/dom/jsview-dom/src/dom-wrapper/node/Node.js +178 -0
  45. package/dom/jsview-dom/src/dom-wrapper/node/SVGElement.js +9 -0
  46. package/dom/jsview-dom/src/dom-wrapper/node/ScriptElement.js +45 -0
  47. package/dom/jsview-dom/src/dom-wrapper/node/StyleElement.js +33 -0
  48. package/dom/jsview-dom/src/dom-wrapper/node/StyleElementCache.js +41 -0
  49. package/dom/jsview-dom/src/dom-wrapper/node/Text.js +22 -0
  50. package/dom/jsview-dom/src/dom-wrapper/node/UnknownElement.js +4 -0
  51. package/dom/jsview-dom/src/dom-wrapper/node/VideoElement.js +237 -0
  52. package/dom/jsview-dom/src/dom-wrapper/style/BorderImage.js +25 -0
  53. package/dom/jsview-dom/src/dom-wrapper/style/Inset.js +26 -0
  54. package/dom/jsview-dom/src/dom-wrapper/style/JsvStyleVariable.js +65 -0
  55. package/dom/jsview-dom/src/dom-wrapper/style/KeyframeRule.js +11 -0
  56. package/dom/jsview-dom/src/dom-wrapper/style/StyleDeclaration.js +609 -0
  57. package/dom/jsview-dom/src/dom-wrapper/style/StyleSheet.js +51 -0
  58. package/dom/jsview-dom/src/dom-wrapper/style/StyleValue.js +385 -0
  59. package/dom/jsview-dom/src/dom-wrapper/style/TextStylePackMap.js +43 -0
  60. package/dom/jsview-dom/src/dom-wrapper/style/URL.js +144 -0
  61. package/dom/jsview-dom/src/dom-wrapper/utils/EventHandler.js +42 -0
  62. package/dom/jsview-dom/src/dom-wrapper/utils/FDivRoot.js +86 -0
  63. package/dom/jsview-dom/src/dom-wrapper/utils/JsvLazySyncCache.js +64 -0
  64. package/dom/jsview-dom/src/dom-wrapper/utils/Log.js +42 -0
  65. package/dom/jsview-dom/src/dom-wrapper/utils/MutationObserver.js +32 -0
  66. package/dom/jsview-dom/src/dom-wrapper/utils/focusableNode.js +715 -0
  67. package/dom/jsview-dom/src/engine-js/ForgeDefine.js +8 -0
  68. package/dom/jsview-dom/src/engine-js/ForgeExtensionDefine.js +14 -0
  69. package/dom/jsview-dom/src/engine-js/browser/PlatformUtils.js +100 -0
  70. package/dom/jsview-dom/src/engine-js/browser/animation_base.js +313 -0
  71. package/dom/jsview-dom/src/engine-js/browser/animation_keyframe.js +64 -0
  72. package/dom/jsview-dom/src/engine-js/browser/animation_progress.js +287 -0
  73. package/dom/jsview-dom/src/engine-js/browser/animation_proxy.js +906 -0
  74. package/dom/jsview-dom/src/engine-js/browser/apic_decoder/demux.js +143 -0
  75. package/dom/jsview-dom/src/engine-js/browser/apic_decoder/gifDecoder.js +12 -0
  76. package/dom/jsview-dom/src/engine-js/browser/apic_decoder/libwebp-0.6.0.min.js +160 -0
  77. package/dom/jsview-dom/src/engine-js/browser/console_log.js +25 -0
  78. package/dom/jsview-dom/src/engine-js/browser/dynamic_key_frames.js +95 -0
  79. package/dom/jsview-dom/src/engine-js/browser/easing.js +114 -0
  80. package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/element_transform.js +122 -0
  81. package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/gjk.js +450 -0
  82. package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/mat.js +102 -0
  83. package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/range_model.js +296 -0
  84. package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/test_collide.js +10 -0
  85. package/dom/jsview-dom/src/engine-js/browser/index.js +38 -0
  86. package/dom/jsview-dom/src/engine-js/browser/latex_parse.js +336 -0
  87. package/dom/jsview-dom/src/engine-js/browser/layout_params.js +113 -0
  88. package/dom/jsview-dom/src/engine-js/browser/layout_view.js +3545 -0
  89. package/dom/jsview-dom/src/engine-js/browser/layout_view_debug.js +15 -0
  90. package/dom/jsview-dom/src/engine-js/browser/media.js +379 -0
  91. package/dom/jsview-dom/src/engine-js/browser/page_base.js +941 -0
  92. package/dom/jsview-dom/src/engine-js/browser/particle_view.js +526 -0
  93. package/dom/jsview-dom/src/engine-js/browser/platform_timer.js +61 -0
  94. package/dom/jsview-dom/src/engine-js/browser/react_utils.js +5 -0
  95. package/dom/jsview-dom/src/engine-js/browser/rect_utils.js +91 -0
  96. package/dom/jsview-dom/src/engine-js/browser/render_bridge.js +128 -0
  97. package/dom/jsview-dom/src/engine-js/browser/render_texture_proxy.js +155 -0
  98. package/dom/jsview-dom/src/engine-js/browser/renderer_deprecated.js +75 -0
  99. package/dom/jsview-dom/src/engine-js/browser/sound_pool.js +139 -0
  100. package/dom/jsview-dom/src/engine-js/browser/steps_animation.js +192 -0
  101. package/dom/jsview-dom/src/engine-js/browser/text_style_cache.js +454 -0
  102. package/dom/jsview-dom/src/engine-js/browser/text_utils.js +299 -0
  103. package/dom/jsview-dom/src/engine-js/browser/text_view.js +428 -0
  104. package/dom/jsview-dom/src/engine-js/browser/texture_manager.js +1060 -0
  105. package/dom/jsview-dom/src/engine-js/browser/url.js +69 -0
  106. package/dom/jsview-dom/src/engine-js/browser/velocity.js +40 -0
  107. package/dom/jsview-dom/src/engine-js/browser/view_sensor/autofroze_sensor.js +77 -0
  108. package/dom/jsview-dom/src/engine-js/browser/view_sensor/drag_impact_sensor.js +67 -0
  109. package/dom/jsview-dom/src/engine-js/browser/view_sensor/impact_sensor.js +98 -0
  110. package/dom/jsview-dom/src/engine-js/browser/view_sensor/impact_sensor_callback.js +21 -0
  111. package/dom/jsview-dom/src/engine-js/browser/view_sensor/impact_sensor_manager.js +24 -0
  112. package/dom/jsview-dom/src/engine-js/browser/view_sensor/index.js +9 -0
  113. package/dom/jsview-dom/src/engine-js/browser/view_sensor/view_sensor.js +268 -0
  114. package/dom/jsview-dom/src/engine-js/browser/view_sensor/view_sensor_manager.js +84 -0
  115. package/dom/jsview-dom/src/engine-js/browser/view_sensor/visible_sensor.js +213 -0
  116. package/dom/jsview-dom/src/engine-js/browser/view_store.js +41 -0
  117. package/dom/jsview-dom/src/engine-js/index.js +2 -0
  118. package/dom/jsview-dom/src/engine-js/native/README.md +1 -0
  119. package/dom/target_core_revision.mjs +15 -0
  120. package/index.js +0 -0
  121. package/loader/header_script_loader.js +134 -0
  122. package/loader/jsview-main.js +42 -0
  123. package/loader/jsview.config.default.js +37 -0
  124. package/loader/jsview.default.config.js +37 -0
  125. package/loader/loader.js +183 -0
  126. package/loader/loader_webkit.js +40 -0
  127. package/package.json +31 -0
  128. package/patches/node_modules/@vitejs/plugin-react/dist/index.cjs +520 -0
  129. package/patches/node_modules/@vue/compiler-sfc/dist/compiler-sfc.cjs.js +17609 -0
  130. package/patches/node_modules/@vue/compiler-sfc/dist/jsview-css-to-js.js +335 -0
  131. package/patches/node_modules/@vue/compiler-sfc/dist/jsview-style-format.js +446 -0
  132. package/patches/node_modules/@vue/compiler-sfc/dist/jsview-style-types.js +91 -0
  133. package/patches/node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js +8038 -0
  134. package/patches/node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js +1700 -0
  135. package/patches/node_modules/postcss-js/objectifier.js +90 -0
  136. package/patches/node_modules/vite/dist/node/chunks/dep-0fc8e132.js +63175 -0
  137. package/patches/node_modules/vite/dist/node/jsview-react.vite.config.js +7 -0
  138. package/patches/node_modules/vite/dist/node/jsview-vue.vite.config.js +7 -0
  139. package/patches/node_modules/vite/dist/node/jsview.vite.config.js +56 -0
  140. package/patches/node_modules/vue-router/dist/vue-router.mjs +3595 -0
  141. package/tools/common.js +58 -0
  142. package/tools/jsview-jsmap-serve.js +105 -0
  143. package/tools/jsview-post-build.js +184 -0
  144. package/tools/jsview-post-install-react.js +13 -0
  145. package/tools/jsview-post-install-vue.js +16 -0
  146. package/tools/jsview-post-install.js +116 -0
  147. package/tools/jsview-run-android.js +67 -0
  148. package/tsconfig.json +34 -0
@@ -0,0 +1,84 @@
1
+ /* eslint-disable */
2
+ import Forge from "../../ForgeDefine";
3
+
4
+ {
5
+ const ACK_EVENT_ID_ARRAY = "ID";
6
+ const ACK_EVENT_STATUS_ARRAY = "STA";
7
+
8
+ /**********************************************
9
+ * Forge.sViewSensorManager
10
+ **********************************************/
11
+ class ViewSensorManager {
12
+ constructor() {
13
+ this._SensorMaps = {};
14
+ this.IdTokenGenerator = 77;
15
+ }
16
+
17
+ HtmlDoWorkOnFrame() {
18
+ for (let key in this._SensorMaps) {
19
+ let sensor = this._SensorMaps[key];
20
+ if (sensor.Expired()) {
21
+ delete this._SensorMaps[key];
22
+ } else {
23
+ sensor.HtmlDoWorkOnFrame();
24
+ }
25
+ }
26
+ }
27
+
28
+ HtmlHasActiveSensor() {
29
+ for (let key in this._SensorMaps) {
30
+ if (this._SensorMaps[key].HtmlNeedWorkOnFrame()) {
31
+ return true;
32
+ }
33
+ }
34
+ return false;
35
+ }
36
+
37
+ /**
38
+ * 激活一个View Sensor(加入Render端同步队列)
39
+ * @param {Forge.ViewSensor} view_sensor 需要激活的sensor
40
+ */
41
+ AddSensor(view_sensor) {
42
+ if (view_sensor) {
43
+ let valid = view_sensor.OnManaged(this); // 进行挂载
44
+ if (valid) {
45
+ this._SensorMaps[view_sensor.IdToken] = view_sensor; // 加入map管理
46
+ }
47
+
48
+ this.RequestSwap();
49
+ }
50
+ }
51
+
52
+ /**
53
+ * 内部函数,把一个View Sensor加入Render端同步列表中
54
+ * @param {Forge.ViewSensor} view_sensor 需要激活的sensor
55
+ */
56
+ AddToSyncList(view_sensor) {
57
+ if (this._SensorMaps.hasOwnProperty(view_sensor.IdToken)) {
58
+ } else {
59
+ console.error("Error: (Add)No in map", this._SensorMaps, view_sensor);
60
+ }
61
+ }
62
+
63
+ /**
64
+ * 内部函数,删除一个View Sensor(加入Render端删除队列)
65
+ * @param {Forge.ViewSensor} view_sensor 需要删除的sensor
66
+ */
67
+ RecycleSensor(view_sensor) {
68
+ if (this._SensorMaps.hasOwnProperty(view_sensor.IdToken)) {
69
+ delete this._SensorMaps[view_sensor.IdToken];
70
+
71
+ this.RequestSwap();
72
+ } else {
73
+ console.error("Error: (del)No in map", this._SensorMaps, view_sensor);
74
+ }
75
+ }
76
+
77
+ RequestSwap() {
78
+ Forge.sRenderBridge.BeginHtmlFrameLoop(); // Html版本触发屏幕刷新
79
+ // Forge.sRenderBridge.RequestSwap(); // 触发Layout同步处理,促使屏幕刷新
80
+ }
81
+ }
82
+
83
+ Forge.sViewSensorManager = new ViewSensorManager();
84
+ }
@@ -0,0 +1,213 @@
1
+ import Forge from "../../ForgeDefine";
2
+ import { getCoverSize } from "../html_shared_tools/element_transform";
3
+ import { SingleRangeModel } from "../html_shared_tools/range_model";
4
+
5
+ {
6
+ const ACK_EVENT_OLD_VERTICAL_VISIBLE = "OV";
7
+ const ACK_EVENT_NEW_VERTICAL_VISIBLE = "NV";
8
+ const ACK_EVENT_OLD_HORIZONTAL_VISIBLE = "OH";
9
+ const ACK_EVENT_NEW_HORIZONTAL_VISIBLE = "NH";
10
+
11
+ class VisibleSensor extends Forge.ViewSensor {
12
+ /***********************************
13
+ * target_layout_view: Forge.LayoutView
14
+ * callback: function(old_hor_visible, new_hor_visible, old_ver_visible, new_ver_visible) 横向的可见状态,纵向的可见状态
15
+ **********************************/
16
+ constructor(test_view, callback) {
17
+ super(Forge.ViewSensor.TypeDefines.TYPE_ON_SCREEN);
18
+
19
+ this._HtmlConfig = {
20
+ view: test_view,
21
+ container: null,
22
+ enable: false, // 默认不开启
23
+
24
+ testRange: null,
25
+
26
+ // 内部碰撞状态记录
27
+ status: {
28
+ horizonVisible: false,
29
+ verticalVisible: false
30
+ }
31
+ }
32
+
33
+ this._Callback = callback;
34
+
35
+ // 登录自动销毁的关联LayoutView, 当view1或者view2销毁时,触发sensor自我销毁
36
+ this.ResetAutoRecycleViewsRef([test_view], []);
37
+
38
+ // Add to sensor manager
39
+ Forge.sViewSensorManager.AddSensor(this);
40
+ }
41
+
42
+ // override
43
+ HtmlDoWorkOnFrame() {
44
+ if (!this.Expired() && this._HtmlConfig.enable
45
+ && this._HtmlConfig.testRange && this._HtmlConfig.view) {
46
+ let designe_width = Forge.sRenderBridge.GetScreenInfo().designedWidth;
47
+ let designe_height = Math.floor(designe_width * 9 / 16); // 默认按照16:9假定PC上的显示区域
48
+
49
+ // 计算view的位置信息
50
+ let view_rect = {
51
+ top: 0,
52
+ bottom: 0,
53
+ left: 0,
54
+ right: 0
55
+ };
56
+ let ele_cover = getCoverSize(this._HtmlConfig.view.Element);
57
+ [view_rect.top, view_rect.bottom, view_rect.left, view_rect.right] = ele_cover;
58
+
59
+ // 计算container的位置信息
60
+ let container_rect = {
61
+ top: 0,
62
+ bottom: designe_height,
63
+ left: 0,
64
+ right: designe_width
65
+ };
66
+ let container_visible = true; // container为可视时才算可视, 默认container为全屏, 所以默认container可视
67
+ let container_h_range;
68
+ let container_v_range;
69
+ if (this._HtmlConfig.container) {
70
+ let container_cover = getCoverSize(this._HtmlConfig.container.Element);
71
+ [
72
+ container_rect.top,
73
+ container_rect.bottom,
74
+ container_rect.left,
75
+ container_rect.right
76
+ ] = container_cover;
77
+
78
+ // 检测container是否可视
79
+ container_h_range = new SingleRangeModel(container_rect.left, container_rect.right);
80
+ container_v_range = new SingleRangeModel(container_rect.top, container_rect.bottom);
81
+ let screen_h_range = new SingleRangeModel(0, designe_width);
82
+ let screen_v_range = new SingleRangeModel(0, designe_height);
83
+ // 只要一小部分可视,即为可视
84
+ container_visible = screen_h_range.IsInterAct(container_h_range)
85
+ && screen_v_range.IsInterAct(container_v_range);
86
+ } else {
87
+ container_h_range = new SingleRangeModel(container_rect.left, container_rect.right);
88
+ container_v_range = new SingleRangeModel(container_rect.top, container_rect.bottom);
89
+ }
90
+
91
+ // 计算visible test range
92
+ let fullview_h_range = new SingleRangeModel(view_rect.left, view_rect.right);
93
+ let fullview_v_range = new SingleRangeModel(view_rect.top, view_rect.bottom);
94
+ let view_h_left_range;
95
+ let view_h_right_range;
96
+ let view_v_top_range;
97
+ let view_v_bottom_range;
98
+ let test_range = this._HtmlConfig.testRange;
99
+ {
100
+ let length = Math.floor((view_rect.right - view_rect.left) * test_range.horizon);
101
+ view_h_left_range = new SingleRangeModel(
102
+ view_rect.left,
103
+ view_rect.left + length);
104
+
105
+ view_h_right_range = new SingleRangeModel(
106
+ view_rect.right - length,
107
+ view_rect.right);
108
+ }
109
+ {
110
+ let length = Math.floor((view_rect.bottom - view_rect.top) * test_range.vertical);
111
+ view_v_top_range = new SingleRangeModel(
112
+ view_rect.top,
113
+ view_rect.top + length);
114
+
115
+ view_v_bottom_range = new SingleRangeModel(
116
+ view_rect.bottom - length,
117
+ view_rect.bottom);
118
+ }
119
+
120
+ // 进行可视校验
121
+ let h_visible =
122
+ (container_h_range.IsInclude(view_h_left_range)
123
+ || container_h_range.IsInclude(view_h_right_range))
124
+ && container_v_range.IsInterAct(fullview_v_range) // view在container可见
125
+ && container_visible; // 横向范围可见,纵向部分可见
126
+ let v_visible =
127
+ (container_v_range.IsInclude(view_v_top_range)
128
+ || container_v_range.IsInclude(view_v_bottom_range))
129
+ && container_h_range.IsInterAct(fullview_h_range) // view在container可见
130
+ && container_visible; // 纵向范围可见,横向部分可见
131
+ if (h_visible != this._HtmlConfig.status.horizonVisible
132
+ || v_visible != this._HtmlConfig.status.verticalVisible) {
133
+ let ack = {};
134
+ ack[ACK_EVENT_OLD_HORIZONTAL_VISIBLE] = this._HtmlConfig.status.horizonVisible;
135
+ ack[ACK_EVENT_NEW_HORIZONTAL_VISIBLE] = h_visible;
136
+ ack[ACK_EVENT_OLD_VERTICAL_VISIBLE] = this._HtmlConfig.status.verticalVisible;
137
+ ack[ACK_EVENT_NEW_VERTICAL_VISIBLE] = v_visible;
138
+
139
+ this._HtmlConfig.status.horizonVisible = h_visible;
140
+ this._HtmlConfig.status.verticalVisible = v_visible;
141
+
142
+ this.OnCallback(ack);
143
+ }
144
+ }
145
+ }
146
+
147
+ // 记录是否需要每一帧执行,默认是true(需要)
148
+ HtmlNeedWorkOnFrame() {
149
+ return this._HtmlConfig.enable;
150
+ }
151
+
152
+ HtmlRequestSync() {
153
+ Forge.sRenderBridge.BeginHtmlFrameLoop(); // Html版本触发屏幕刷新
154
+ }
155
+
156
+ /***********************************
157
+ * area: {horizon, verical}
158
+ * 露出百分比触发状态切换的阀值,当可视区域大于或等于给定可视区域时,可视状态切换
159
+ * 默认为0: 当有一点点被遮挡则为'不可见'状态,完全露出后才变为'可见状态'
160
+ * 一个坐标轴,只能有一个设置,另一个应该为0
161
+ **********************************/
162
+ ResetArea(area) {
163
+ if (typeof area.horizon != "number") {
164
+ console.log("horizon not set, default to 1.0");
165
+ area.horizon = 1.0;
166
+ }
167
+
168
+ if (typeof area.vertical != "number") {
169
+ console.log("vertical not set, default to 1.0");
170
+ area.vertical = 1.0;
171
+ }
172
+
173
+ this._HtmlConfig.testRange = area;
174
+
175
+ this.HtmlRequestSync();
176
+ }
177
+
178
+ Enable(to_enable) {
179
+ this._HtmlConfig.enable = to_enable;
180
+ this.HtmlRequestSync();
181
+ }
182
+
183
+ ResetContainer(container_layout_view) {
184
+ this._HtmlConfig.container = container_layout_view;
185
+
186
+ this.HtmlRequestSync();
187
+ }
188
+
189
+ /**
190
+ * (Override) 触发碰撞回调,当状态变化时被回调
191
+ * @func OnCallback
192
+ * @param {object} status {OH:xxx, NH:xxx, OV:xxx, NV:xxx}
193
+ **/
194
+ OnCallback(status) {
195
+ // console.log("TestImpact Docallback status=" + status);
196
+ if (this._Callback) {
197
+ this._Callback(
198
+ status[ACK_EVENT_OLD_HORIZONTAL_VISIBLE],
199
+ status[ACK_EVENT_NEW_HORIZONTAL_VISIBLE],
200
+ status[ACK_EVENT_OLD_VERTICAL_VISIBLE],
201
+ status[ACK_EVENT_NEW_VERTICAL_VISIBLE]
202
+ );
203
+ }
204
+ }
205
+
206
+ // Override
207
+ OnSelfRecycle() {
208
+ this._HtmlConfig = null; // unref all, 释放内存
209
+ }
210
+ }
211
+
212
+ Forge.VisibleSensor = VisibleSensor;
213
+ }
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Created by luocf on 2020/3/26.
3
+ */
4
+ import Forge from "../ForgeDefine";
5
+
6
+ class ViewStore {
7
+ constructor() {
8
+ this._InnerViews = {};
9
+ this._ViewToken = 1; // 避免从0开始导致,0为基础无效值
10
+ }
11
+
12
+ add(view_info) {
13
+ const view_token = ++this._ViewToken;
14
+ this._InnerViews[`${view_token}`] = view_info;
15
+ return view_token;
16
+ }
17
+
18
+ remove(view_token) {
19
+ if (this._InnerViews[view_token]) {
20
+ delete this._InnerViews[view_token];
21
+ }
22
+ }
23
+
24
+ get(view_token) {
25
+ return this._InnerViews[view_token];
26
+ }
27
+
28
+ clear() {
29
+ this._InnerViews = {};
30
+ this._ViewToken = 1; // 避免从0开始导致,0为基础无效值
31
+ }
32
+ }
33
+ Forge.ViewStore = ViewStore;
34
+ Forge.sViewStore = new ViewStore();
35
+ class ViewInfo {
36
+ constructor(view, layout_params) {
37
+ this.view = view;
38
+ this.layout_params = layout_params;
39
+ }
40
+ }
41
+ Forge.ViewInfo = ViewInfo;
@@ -0,0 +1,2 @@
1
+ export {default as ForgeExtension} from "./ForgeExtensionDefine"
2
+ export {default as Forge} from "./ForgeDefine"
@@ -0,0 +1 @@
1
+ Engine-js Native部分集成外部工程forge-all中,作为engineJs被android的apk预先加载
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Created by ludl on 1/27/21.
3
+ */
4
+
5
+ const TargetRevision = {
6
+ "CoreRevision": 1021230,
7
+ "CoreRevisionAndBranch": "1021230",
8
+ "JseRevision": "1.0.824",
9
+ "JseUrl":
10
+ "http://cdn.release.qcast.cn/forge_js/master/JsViewES6_react_r824.jsv.a2da4803.js"
11
+ };
12
+
13
+ // 不要用export default,update-env脚本不能解析
14
+ // module.exports = TargetRevision;
15
+ export default TargetRevision;
package/index.js ADDED
File without changes
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Created by ludl on 3/30/20.
3
+ */
4
+
5
+ function alterUrl(origin_url, js_sub_path) {
6
+ console.log(`++++++++ origin_url=${origin_url} js_sub_path = ${js_sub_path}`);
7
+ let schema_idx = origin_url.indexOf("://");
8
+ if (schema_idx < 0 || schema_idx > 10) {
9
+ // 非schema打头方式,认为是相对路径
10
+ if (!origin_url.startsWith('./') && !origin_url.startsWith('/')) {
11
+ origin_url = "./" + origin_url; // 补充相对路径头信息
12
+ }
13
+ }
14
+
15
+ if (origin_url.startsWith('./') || origin_url.startsWith('/')) {
16
+ const main_js_path = window.JsView.getAppUrl();
17
+ let idx = main_js_path.indexOf('?');
18
+ const host_path = (idx > 0 ? main_js_path.substring(0, idx) : main_js_path);
19
+ idx = host_path.lastIndexOf(js_sub_path);
20
+ const path_header = host_path.substring(0, idx);
21
+
22
+ let ret;
23
+ if (origin_url.startsWith('./')) {
24
+ ret = path_header + origin_url.substring(1);
25
+ } else {
26
+ // start with '/'
27
+ // remove protocal
28
+ let host_parser = main_js_path;
29
+ idx = host_parser.indexOf('://');
30
+ const protocol = (idx > 0 ? host_parser.substring(0, idx) : "");
31
+ host_parser = (idx > 1 ? host_parser.substring(idx + 3) : "");
32
+
33
+ // Get host
34
+ idx = host_parser.indexOf('/');
35
+ const host = (idx > 0 ? host_parser.substring(0, idx) : "");
36
+
37
+ ret = `${protocol}://${host}${origin_url}`;
38
+ }
39
+
40
+ return ret;
41
+ }
42
+ return origin_url;
43
+ }
44
+
45
+ class LoadingScriptElement {
46
+ constructor(js_sub_path) {
47
+ console.log(`++++++++ js_sub_path=${js_sub_path}`);
48
+ this.src = null;
49
+ this.onerror = null;
50
+ this.onload = null;
51
+ this.charset = null;
52
+ this.timeout = 120;
53
+ this._JsSubPath = js_sub_path;
54
+ }
55
+
56
+ setAttribute(name, value) {
57
+ console.log(`ScriptElement.setAttribute() name=${name}, value=`, value);
58
+ this[name] = value;
59
+ }
60
+
61
+ jsvActiveScript() {
62
+ if (this.src !== null) {
63
+ const url_href = alterUrl(this.src, this._JsSubPath);
64
+ console.log(`load script with url=${url_href}`);
65
+ const _this = this;
66
+ window.JsView.runJsWithUrl(url_href, false, (is_success, err_code) => {
67
+ _this.onLoadResult(is_success, err_code);
68
+ });
69
+ }
70
+ }
71
+
72
+ onLoadResult(is_success, err_code) {
73
+ console.log(`[Head]onLoadResult ${is_success} ${err_code}`);
74
+ if (is_success) {
75
+ if (this.onload) {
76
+ this.onload();
77
+ }
78
+ } else {
79
+ if (this.onerror) {
80
+ this.onerror({ type: `[Head]jsvErr_${err_code}`, target: this });
81
+ }
82
+ }
83
+ }
84
+ }
85
+
86
+ class LoadingHeader {
87
+ constructor() {
88
+ console.log("Document header construct");
89
+ }
90
+
91
+ appendChild(node) {
92
+ if (node instanceof LoadingScriptElement) {
93
+ console.log("Found append script in head.");
94
+ node.jsvActiveScript();
95
+ }
96
+ }
97
+ }
98
+
99
+ class LoadingDocument {
100
+ constructor(js_sub_path) {
101
+ this.head = new LoadingHeader();
102
+ this._JsSubPath = js_sub_path;
103
+ }
104
+
105
+ createElement(name) {
106
+ console.log(`HeaderDocument.createElement() name=${name}`);
107
+ switch (name) {
108
+ case "script":
109
+ return new LoadingScriptElement(this._JsSubPath);
110
+ default:
111
+ console.warn(`HeaderDocument.createElement() name=${name}`);
112
+ return null;
113
+ }
114
+ }
115
+
116
+ getElementsByTagName(name) {
117
+ if (name.toLowerCase() === "head") {
118
+ return [this.head];
119
+ }
120
+ if (name.toLowerCase() === "link"
121
+ || name.toLowerCase() === "script"
122
+ || name.toLowerCase() === "style") {
123
+ return [];
124
+ }
125
+
126
+ throw Error("LoadingDocument.getElementsByTagName() name=" + name + " is UNIMPLEMENTED.");
127
+ }
128
+ }
129
+
130
+ function initHeaderScriptLoader(js_sub_path) {
131
+ window.document = new LoadingDocument(js_sub_path);
132
+ }
133
+
134
+ export default initHeaderScriptLoader;
@@ -0,0 +1,42 @@
1
+ import JsViewDefConfig from "./jsview.default.config"
2
+ import JsViewVendorConfig from "/src/appConfig/jsview.config"
3
+ import { loadJsViewEnv } from './loader'
4
+
5
+ function deepMerge(target, source) {
6
+ const isObject = (obj) => obj && typeof obj === 'object';
7
+
8
+ if (!isObject(target) || !isObject(source)) {
9
+ return source;
10
+ }
11
+
12
+ Object.keys(source).forEach(key => {
13
+ const targetValue = target[key];
14
+ const sourceValue = source[key];
15
+
16
+ if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {
17
+ target[key] = targetValue.concat(sourceValue);
18
+ } else if (isObject(targetValue) && isObject(sourceValue)) {
19
+ target[key] = deepMerge(Object.assign({}, targetValue), sourceValue);
20
+ } else {
21
+ target[key] = sourceValue;
22
+ }
23
+ });
24
+
25
+ return target;
26
+ }
27
+
28
+ function main() {
29
+ // 使用vendor配置值覆盖默认配置。
30
+ let config = JsViewDefConfig;
31
+ deepMerge(config, JsViewVendorConfig);
32
+ console.log("JsView config: " + JSON.stringify(config));
33
+
34
+ // 加载jsview运行环境。
35
+ loadJsViewEnv(config, () => {
36
+ // JsView环境加载完毕后,加载vue/react的main.js文件。
37
+ import('/src/main.tsx');
38
+ })
39
+ }
40
+
41
+ // webpack/vite运行入口
42
+ main();
@@ -0,0 +1,37 @@
1
+ export default {
2
+ jsviewConfig: {
3
+ // (可选配置)localStorage支持
4
+ // domain可以为任意字符串,各Domain的localStorage互相隔离, 默认值是hostname
5
+ // presetKeys为预置key,可以直接使用localStorage.xxx的形式,避免undefined错误
6
+ localStorage: {
7
+ domain: "default",
8
+ presetKeys: [
9
+ "value1",
10
+ "value2"
11
+ ],
12
+ },
13
+
14
+ // (可选配置)填写main.js或者bundle.js相对于index.html的相对位置,
15
+ // 用于image/import.then的相对寻址, vue3默认值是/js/
16
+ jsSubPath: "/js/",
17
+ },
18
+
19
+ vendorConfig: {
20
+ // (可选配置)设置屏幕坐标映射值,screenWidth为屏幕画布定义的宽度,displayScale为清晰度,
21
+ // 默认值是画布宽度1280px, 清晰度为1.0
22
+ designedMap: {
23
+ screenWidth: 1280,
24
+ displayScale: 1.0
25
+ },
26
+
27
+ // (可选配置)按键接受的扩展,例如将静音按键(JAVA键值为164)映射为JS键值20001,
28
+ // PS:注意"164"的引号
29
+ bindKeys: {
30
+ keys: {
31
+ "164": 20001
32
+ },
33
+ syncKeys: {
34
+ }
35
+ },
36
+ }
37
+ }
@@ -0,0 +1,37 @@
1
+ export default {
2
+ jsviewConfig: {
3
+ // (可选配置)localStorage支持
4
+ // domain可以为任意字符串,各Domain的localStorage互相隔离, 默认值是hostname
5
+ // presetKeys为预置key,可以直接使用localStorage.xxx的形式,避免undefined错误
6
+ localStorage: {
7
+ domain: "default",
8
+ presetKeys: [
9
+ "value1",
10
+ "value2"
11
+ ],
12
+ },
13
+
14
+ // (可选配置)填写main.js或者bundle.js相对于index.html的相对位置,
15
+ // 用于image/import.then的相对寻址, vue3默认值是/js/
16
+ jsSubPath: "/js/",
17
+ },
18
+
19
+ vendorConfig: {
20
+ // (可选配置)设置屏幕坐标映射值,screenWidth为屏幕画布定义的宽度,displayScale为清晰度,
21
+ // 默认值是画布宽度1280px, 清晰度为1.0
22
+ designedMap: {
23
+ screenWidth: 1280,
24
+ displayScale: 1.0
25
+ },
26
+
27
+ // (可选配置)按键接受的扩展,例如将静音按键(JAVA键值为164)映射为JS键值20001,
28
+ // PS:注意"164"的引号
29
+ bindKeys: {
30
+ keys: {
31
+ "164": 20001
32
+ },
33
+ syncKeys: {
34
+ }
35
+ },
36
+ }
37
+ }