@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,226 @@
1
+ /* eslint-disable no-extra-boolean-cast */
2
+ import Forge from "../engine-js/ForgeDefine"
3
+ import URL from "./style/URL"
4
+ class ForgeExtension {
5
+ static SetBackgroundColor(view, color, corner) {
6
+ // console.log("Forge.LayoutView.setColor(). color=" + color);
7
+ const colorTexture = ForgeExtension.TextureManager.GetColorTextureCached(color);
8
+ let cornerMask;
9
+ if (!!corner) {
10
+ cornerMask = new Forge.ViewRoundCornerMask(corner.topLeft, corner.topRight,
11
+ corner.bottomLeft, corner.bottomRight);
12
+ }
13
+ const textureSetting = new Forge.ExternalTextureSetting(colorTexture, cornerMask);
14
+ view.ResetTexture(textureSetting);
15
+ }
16
+
17
+ static SetBackgroundImage(view, backgroundImage, corner, onLoaded, tex_scale_down, color_type, apic_autoplay) {
18
+ let info = {};
19
+ if (typeof (backgroundImage) === "string") {
20
+ const url = new URL(backgroundImage);
21
+ if ((url instanceof URL) === false) {
22
+ throw Error("Bad Argument.", url)
23
+ }
24
+ info.url = url.href;
25
+ } else if (backgroundImage?.type == 'linear-gradient') {
26
+ info.gradient = backgroundImage;
27
+ }
28
+ // console.log("Forge.LayoutView.SetBackgroundImage(). url=", url);
29
+ let imageTexture;
30
+ if (info.gradient) {
31
+ if (info.gradient.colors?.length > 2) {
32
+ const colors = info.gradient.colors;
33
+ const bothEnds = [
34
+ colors[0], colors[colors.length - 1]
35
+ ];
36
+ const stepPoints = colors.slice(1, colors.length - 1);
37
+ // console.log("ForgeExtension.SetBackgroundImage() multi color linear gradient.", info.gradient.colors);
38
+ imageTexture = ForgeExtension.TextureManager.CreateLinearGradientTexture(bothEnds, stepPoints);
39
+ } else if (info.gradient.colors?.length == 2) {
40
+ // console.log("ForgeExtension.SetBackgroundImage() two color linear gradient.", info.gradient.colors);
41
+ imageTexture = ForgeExtension.TextureManager.CreateMiniGradientTexture(true, info.gradient.colors[0], info.gradient.colors[1], info.gradient.rawValue);
42
+ } else {
43
+ console.warn("Failed to create backgroundImage gradient, bad colors.", info.gradient.colors)
44
+ }
45
+
46
+ } else if (info.url) {
47
+ if (info.url.includes(".gif") || info.url.includes(".webp")) {
48
+ imageTexture = ForgeExtension.TextureManager.GetGifImage(info.url, false, null, apic_autoplay);
49
+ } else {
50
+ imageTexture = ForgeExtension.TextureManager.GetImage2(info.url, false, tex_scale_down, color_type ? color_type : Forge.ColorSpace.RGBA_8888);
51
+ }
52
+ }
53
+
54
+ if (imageTexture) {
55
+ let cornerMask;
56
+ if (!!corner) {
57
+ cornerMask = new Forge.ViewRoundCornerMask(corner.topLeft, corner.topRight,
58
+ corner.bottomLeft, corner.bottomRight);
59
+ }
60
+ const textureSetting = new Forge.ExternalTextureSetting(imageTexture, cornerMask);
61
+ view.ResetTexture(textureSetting);
62
+ if (!!onLoaded) {
63
+ let callback_token = imageTexture.RegisterLoadImageCallback(null, function () {
64
+ // console.log("Forge.LayoutView.SetBackgroundImage(). ====== onLoaded=");
65
+ onLoaded({ width: imageTexture.Width, height: imageTexture.Height });
66
+ });
67
+ view.RegisterDetachCallback(()=>{
68
+ imageTexture.UnregisterLoadImageCallback(callback_token);
69
+ });
70
+ }
71
+ } else {
72
+ // 无效的url.href制作不出 imageTexture
73
+ }
74
+ }
75
+
76
+ static SetMaskedBackgroundImage(view, url, mask_url, url_color_type) {
77
+ if (typeof (url) === "string") {
78
+ url = new URL(url);
79
+ }
80
+ if ((url instanceof URL) === false) {
81
+ throw Error("Bad Argument.", url)
82
+ }
83
+
84
+ if (typeof (mask_url) === "string") {
85
+ mask_url = new URL(mask_url);
86
+ }
87
+ if ((mask_url instanceof URL) === false) {
88
+ throw Error("Bad Argument(MaskURL).", mask_url)
89
+ }
90
+
91
+ const image_texture = ForgeExtension.TextureManager.GetImage2(url.href, false, null, url_color_type ? url_color_type : Forge.ColorSpace.RGBA_8888);
92
+ if (image_texture) {
93
+ const mask_texture = ForgeExtension.TextureManager.GetImage2(mask_url.href, false, null, Forge.ColorSpace.RGBA_8888);
94
+ const texture_setting = new Forge.ExternalTextureSetting(image_texture, new Forge.ViewTextureMask(mask_texture));
95
+ view.ResetTexture(texture_setting);
96
+ } else {
97
+ // 无效的imageUrl制作不出 image_texture
98
+ }
99
+ }
100
+
101
+ static SetVideoTexture(view, color, corner) {
102
+ // console.log("Forge.LayoutView.setColor(). color=" + color);
103
+ const colorTexture = ForgeExtension.TextureManager.GetColorTexture(color);
104
+ let cornerMask;
105
+ if (!!corner) {
106
+ cornerMask = new Forge.ViewRoundCornerMask(corner.topLeft, corner.topRight,
107
+ corner.bottomLeft, corner.bottomRight);
108
+ }
109
+ const textureSetting = new Forge.TextureSetting(colorTexture, cornerMask);
110
+ view.ResetTexture(textureSetting);
111
+ }
112
+
113
+ static GetTextWidth(textParams) {
114
+ if (!textParams.str) {
115
+ textParams.str = "";
116
+ }
117
+ if (!textParams.font) {
118
+ textParams.font = Forge.TextUtils._sDefaultFont;
119
+ }
120
+ if (!textParams.size) {
121
+ textParams.size = Forge.TextUtils._sDefaultFontSize;
122
+ }
123
+ if (textParams.italic !== 'italic') {
124
+ textParams.italic = "";
125
+ }
126
+ if (textParams.bold !== 'bold') {
127
+ textParams.bold = "";
128
+ }
129
+
130
+ return window.PlatformUtils.GetTextWidth(textParams);
131
+ }
132
+
133
+ static RequestSwap() {
134
+ Forge.sRenderBridge.RequestSwap();
135
+ }
136
+
137
+ static SetImgTexSize(imgTex, imageSize) {
138
+ let newTexInfo = {
139
+ size: imageSize,
140
+ refNum: 0,
141
+ };
142
+ ForgeExtension.TextureInfo.Cache[imgTex.Source] = newTexInfo;
143
+ }
144
+
145
+ static RefImgTexSize(imgTex, onImageLoaded) {
146
+ let cachedTexInfo = ForgeExtension.TextureInfo.Cache[imgTex.Source];
147
+ if (!!cachedTexInfo) {
148
+ if (cachedTexInfo.refNum > 0) {
149
+ cachedTexInfo.refNum++;
150
+ } else {
151
+ cachedTexInfo.refNum = 1;
152
+ }
153
+ // console.log("ForgeExtension.RefImgTexSize(). sync call onImageLoaded()");
154
+ onImageLoaded(cachedTexInfo.size);
155
+ } else {
156
+ imgTex.RegisterLoadImageCallback(null, function () {
157
+ const imageSize = {
158
+ width: imgTex.Width,
159
+ height: imgTex.Height,
160
+ };
161
+ // console.log("ForgeExtension.RefImgTexSize(). async call onImageLoaded()");
162
+ onImageLoaded(imageSize);
163
+
164
+ let cachedTexInfo = ForgeExtension.TextureInfo.Cache[imgTex.Source];
165
+ if (!!cachedTexInfo) {
166
+ if (cachedTexInfo.refNum > 0) {
167
+ cachedTexInfo.refNum++;
168
+ } else {
169
+ cachedTexInfo.refNum = 1;
170
+ }
171
+ } else {
172
+ let newTexInfo = {
173
+ size: imageSize,
174
+ refNum: 1,
175
+ };
176
+ ForgeExtension.TextureInfo.Cache[imgTex.Source] = newTexInfo;
177
+ }
178
+ });
179
+ }
180
+ }
181
+
182
+ static UnrefImgTexSize(imgTex) {
183
+ if (!imgTex) {
184
+ return;
185
+ }
186
+
187
+ let cachedTexInfo = ForgeExtension.TextureInfo.Cache[imgTex.Source];
188
+ if (!!cachedTexInfo) {
189
+ cachedTexInfo.refNum--;
190
+ if (cachedTexInfo.refNum <= 0) {
191
+ ForgeExtension.TextureInfo.Unused.add(imgTex.Source);
192
+ }
193
+ // console.log("ForgeExtension.UnrefImgTexSize(). refNum=" + cachedTexInfo.refNum);
194
+ }
195
+ }
196
+
197
+ static ClearUnusedTexSize() { // 未测试, 慎用
198
+ for (let key of ForgeExtension.TextureInfo.Unused) {
199
+ let item = ForgeExtension.TextureInfo.Cache[key];
200
+ if (item.refNum < -2) { // 3次清除
201
+ delete ForgeExtension.TextureInfo.Cache[key];
202
+ ForgeExtension.TextureInfo.Unused.delete(key);
203
+ // console.log("ForgeExtension.ClearUnusedTexSize().", item);
204
+ continue;
205
+ }
206
+
207
+ if (item.refNum <= 0) {
208
+ item.refNum--;
209
+ } else { // 被重新使用
210
+ ForgeExtension.TextureInfo.Unused.delete(key);
211
+ }
212
+ }
213
+ }
214
+ }
215
+
216
+ ForgeExtension.TextureInfo = {
217
+ Cache: {},
218
+ Unused: new Set(),
219
+ };
220
+ ForgeExtension.TextureManager = null;
221
+ ForgeExtension.RootView = null;
222
+ ForgeExtension.RootActivity = null;
223
+ ForgeExtension.HaltKeyEvent = false;
224
+
225
+ export default ForgeExtension;
226
+
@@ -0,0 +1,85 @@
1
+ /* eslint-disable no-extra-boolean-cast */
2
+ import Forge from "../engine-js/ForgeDefine"
3
+ import ForgeExtension from "./ForgeExtension"
4
+ import KeyboardEvent from "./event/KeyboardEvent"
5
+ import {JsvLazySyncCache} from "./utils/JsvLazySyncCache"
6
+ import URL from "./style/URL"
7
+
8
+ class JsViewForgeActivity {
9
+ constructor(manager) {
10
+ this.activity = new Forge.ReactActivity("JsViewForgeActivity", manager, this.OnKeyDown.bind(this), this.OnKeyUp.bind(this));
11
+ this._Init();
12
+ }
13
+
14
+ _Init() {
15
+ console.log("JsViewForgeActivity.OnCreate().");
16
+ ForgeExtension.TextureManager = this.activity.GetTextureManager();
17
+ ForgeExtension.RootView = new Forge.LayoutView();
18
+ ForgeExtension.RootActivity = this.activity;
19
+ document.jsvUpdateRootElement(ForgeExtension.RootView);
20
+ // SetContentView
21
+ let designed_map_set = null;
22
+ if (Forge.DesignMap) {
23
+ designed_map_set = Forge.DesignMap();
24
+ }
25
+ let rootWidth = (designed_map_set ? designed_map_set.width : 1280);
26
+ let rootHeight = Math.floor(rootWidth * 9 / 16);
27
+ this.activity.SetContentView(ForgeExtension.RootView, {x: 0, y: 0, width: rootWidth, height: rootHeight});
28
+
29
+ Forge.sRenderBridge.AddWillSwapListener("forgeSwap", () => {
30
+ JsvLazySyncCache.SyncAllCachedProperty();
31
+ ForgeExtension.ClearUnusedTexSize();
32
+ });
33
+ window.JsView.Dom.Render();
34
+ }
35
+
36
+ OnKeyDown(ev) {
37
+ if (!ForgeExtension.HaltKeyEvent) {
38
+ return false;
39
+ } else {
40
+ let event = new KeyboardEvent(KeyboardEvent.Type.KEYDOWN);
41
+ event.keyCode = ev.keyCode;
42
+ event.repeat = ev.repeat;
43
+ document.dispatchEvent(event);
44
+ return true;
45
+ }
46
+ }
47
+
48
+ OnKeyUp(ev) {
49
+ if (!ForgeExtension.HaltKeyEvent) {
50
+ return false;
51
+ } else {
52
+ let event = new KeyboardEvent(KeyboardEvent.Type.KEYUP);
53
+ event.keyCode = ev.keyCode;
54
+ event.key = KeyboardEvent.JsvGetKeyFromCode(event.keyCode);
55
+ event.repeat = ev.repeat;
56
+ document.dispatchEvent(event);
57
+ return true;
58
+ }
59
+ }
60
+ }
61
+
62
+ class JsViewForgeApp {
63
+ constructor(activity_manager) {
64
+ this._ActivityManager = activity_manager;
65
+ let jsvForgeActivity = new JsViewForgeActivity(activity_manager);
66
+ // Register activities
67
+ activity_manager.RegisterActivity(jsvForgeActivity.activity); // Home page activity
68
+
69
+ // Start home page
70
+ activity_manager.StartActivity(new Forge.Intent("JsViewForgeActivity"));
71
+ }
72
+ }
73
+
74
+ if (!!window.JsView) {
75
+ window.JsView.Dom = {
76
+ DesignMap: null, // Deprecated
77
+ Render: null,
78
+ Extension:ForgeExtension,
79
+ UrlRef: URL,
80
+ };
81
+
82
+ // Deprecated: 为了兼容已发布代码。
83
+ window.JsView.React = window.JsView.Dom;
84
+ }
85
+ export default JsViewForgeApp;
@@ -0,0 +1,51 @@
1
+ /* eslint-disable no-unused-vars */
2
+ /* eslint-disable no-extra-boolean-cast */
3
+ import AudioElement from "./node/AudioElement"
4
+ import VideoElement from "./node/VideoElement"
5
+ import MutationObserver from "./utils/MutationObserver"
6
+ import Document from "./node/Document"
7
+ import SVGElement from "./node/SVGElement"
8
+ import Element from "./node/Element"
9
+ import URL from "./style/URL"
10
+
11
+ // 定义内部开发用的space
12
+ window.JsvCode = {
13
+ Dom: {
14
+ StyleSheets: {}
15
+ }
16
+ };
17
+
18
+ // 将接口对接到浏览器标准API
19
+ window.Audio = AudioElement;
20
+ window.Video = VideoElement;
21
+ window.MutationObserver = MutationObserver;
22
+
23
+ if (!!window.JsView) {
24
+ console.log("Declare Dom Proxy.");
25
+
26
+ global.SVGElement = SVGElement;
27
+ global.Element = Element;
28
+
29
+ let url_ref = new URL(window.JsView.getAppUrl(), true);
30
+ if (window.location.applyUrlInfo) {
31
+ window.location.applyUrlInfo(url_ref);
32
+ } else {
33
+ window.location = url_ref;
34
+ }
35
+
36
+ window.addEventListener = function(type, listener) {
37
+ // console.log("window.addEventListener() type=" + type);
38
+ }
39
+
40
+ window.document = new Document();
41
+
42
+ // 为了支持MemoryHistory方式的Router而添加,JsView不支持WebHistory/WebHashHistory
43
+ window.history = {};
44
+
45
+ window.navigator = {
46
+ userAgent: "jsview-runtime"
47
+ }
48
+
49
+ window.HTMLIFrameElement = function() {
50
+ }
51
+ }
@@ -0,0 +1,7 @@
1
+ import Event from "./Event"
2
+ class AnimationEvent extends Event {
3
+ stopPropagation() {
4
+ // TODO: 目前不确定需要做什么...
5
+ }
6
+ }
7
+ export default AnimationEvent;
@@ -0,0 +1,12 @@
1
+ /* eslint-disable no-unused-vars */
2
+ class Event {
3
+ constructor(type) {
4
+ this.target = null;
5
+ this.timeStamp = Date.now();
6
+ this.type = type;
7
+ }
8
+ initEvent(eventTypeArg, canBubbleArg, cancelableArg) {
9
+ this.type = eventTypeArg;
10
+ }
11
+ }
12
+ export default Event;
@@ -0,0 +1,9 @@
1
+ import Event from "./Event"
2
+ class FocusEvent extends Event {
3
+ }
4
+
5
+ FocusEvent.Type = {
6
+ FOCUS : 'focus',
7
+ BLUR : 'blur',
8
+ }
9
+ export default FocusEvent;
@@ -0,0 +1,43 @@
1
+ import Event from "./Event"
2
+ class KeyboardEvent extends Event {
3
+ constructor(type) {
4
+ super(type);
5
+ this.keyCode = -1;
6
+ this.key = -1;
7
+ this.repeat = 0;
8
+ }
9
+
10
+ static JsvGetKeyFromCode(keyCode) {
11
+ const keyMap = new Map([
12
+ [KeyboardEvent.KeyCode.Enter, KeyboardEvent.Key.Enter],
13
+ [KeyboardEvent.KeyCode.ArrowUp, KeyboardEvent.Key.ArrowUp],
14
+ [KeyboardEvent.KeyCode.ArrowDown, KeyboardEvent.Key.ArrowDown],
15
+ [KeyboardEvent.KeyCode.ArrowLeft, KeyboardEvent.Key.ArrowLeft],
16
+ [KeyboardEvent.KeyCode.ArrowRight, KeyboardEvent.Key.ArrowRight],
17
+ ]);
18
+
19
+ return keyMap[keyCode];
20
+ }
21
+ }
22
+
23
+ KeyboardEvent.Type = {
24
+ KEYDOWN: 'keydown',
25
+ KEYUP: 'keyup',
26
+ }
27
+
28
+ KeyboardEvent.Key = {
29
+ Enter: 'Enter',
30
+ ArrowUp: 'ArrowUp',
31
+ ArrowDown: 'ArrowDown',
32
+ ArrowLeft: 'ArrowLeft',
33
+ ArrowRight: 'ArrowRight',
34
+ }
35
+
36
+ KeyboardEvent.KeyCode = {
37
+ Enter: 13,
38
+ ArrowUp: 38,
39
+ ArrowDown: 40,
40
+ ArrowLeft: 37,
41
+ ArrowRight: 39,
42
+ }
43
+ export default KeyboardEvent;
@@ -0,0 +1,8 @@
1
+ /* eslint-disable no-unused-vars */
2
+ import Event from "./Event"
3
+ class LoadEvent extends Event {
4
+ constructor(type) {
5
+ super("load");
6
+ }
7
+ }
8
+ export default LoadEvent;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Created by luocf on 2020/1/17.
3
+ */
4
+ export {default as JsViewForgeApp} from "./JsViewForgeApp"
5
+ export {default as Document} from "./node/Document"
6
+ export {default as HeadElement} from "./node/HeadElement"
7
+ export {default as ForgeExtension} from "./ForgeExtension"
8
+ export {default as Log } from "./utils/Log"
9
+ export * from "./utils/JsvLazySyncCache"
10
+
11
+ import Log from "./utils/Log"
12
+ // Log.SetLevel(Log.Level.Debug);
13
+
14
+ import "./JsViewProxy"
15
+
16
+ Log.I("Using JsView Runtime");
@@ -0,0 +1,24 @@
1
+ import Element from "./Element"
2
+
3
+ class AnchorElement extends Element {
4
+ constructor() {
5
+ super();
6
+
7
+ console.warn("Warnig: <a> is fake in JsView system");
8
+
9
+ this.href = ""
10
+ this.protocol = ""
11
+ this.host = ""
12
+ this.search = ""
13
+ this.hash = ""
14
+ this.hostname = ""
15
+ this.port = ""
16
+ this.pathname = ""
17
+ }
18
+
19
+ jsvGetTagName() {
20
+ return Element.TAG.ANCHOR;
21
+ }
22
+ }
23
+
24
+ export default AnchorElement;
@@ -0,0 +1,60 @@
1
+ import Element from "./Element.js";
2
+ import MediaElement from "./MediaElement";
3
+ import Event from "../event/Event";
4
+ import Forge from "../../engine-js/ForgeDefine";
5
+
6
+ class AudioElement extends MediaElement {
7
+ constructor(src) {
8
+ super(src);
9
+ this.jsvOverrideMedia = false;
10
+ console.log("AudioElement.constructor()", this);
11
+ }
12
+
13
+ jsvGetTagName() {
14
+ return Element.TAG.AUDIO;
15
+ }
16
+
17
+ jsvInit() {
18
+ if (!this.jsvOverrideMedia) {
19
+ this.jsvMedia = new MediaElement.HOOKS.Audio();
20
+ }
21
+ super.jsvInit();
22
+ this.jsvOnLoaded();
23
+ }
24
+
25
+ jsvOnLoaded() {
26
+ this.jsvMediaView = new Forge.LayoutView();
27
+ this.jsvMainView.AddView(this.jsvMediaView);
28
+ }
29
+
30
+ jsvAddMediaListener(event) {
31
+ if (!this.jsvMedia) {
32
+ this.jsvInit();
33
+ }
34
+ this.jsvMedia.addEventListener(event, () => {
35
+ let ev = new Event(event);
36
+ ev.target = this;
37
+ this.dispatchEvent(ev);
38
+ });
39
+ }
40
+
41
+ jsvRelease() {
42
+ super.jsvRelease();
43
+ this.jsvMedia = null;
44
+ }
45
+
46
+ setAttribute(name, value) {
47
+ if (name == "data-jsv-audio-predownload") {
48
+ // 启用predownload模式,先下载再使用本地文件进行播放
49
+ // 解决一些平台audio无法直接播放网络文件的问题
50
+ if (!this.jsvMedia) {
51
+ this.jsvInit();
52
+ }
53
+ this.jsvMedia.predownload = true;
54
+ return;
55
+ }
56
+
57
+ super.setAttribute(name, value);
58
+ }
59
+ }
60
+ export default AudioElement;
@@ -0,0 +1,10 @@
1
+ import Node from "./Node"
2
+ class Comment extends Node {
3
+ constructor(content) {
4
+ // console.log("Comment.Comment() content=" + content);
5
+ super(Node.COMMENT_NODE)
6
+ this.textContent = content
7
+ }
8
+ }
9
+
10
+ export default Comment