@shijiu/jsview 1.9.731 → 1.9.759

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 (124) hide show
  1. package/dom/jsv-browser-debug-dom.js +12 -5
  2. package/dom/jsv-code-debug.mjs +14 -0
  3. package/dom/jsv-dom.js +12 -5
  4. package/dom/jsv-engine-js-browser.js +12 -5
  5. package/dom/jsv-forge-define.js +17 -5
  6. package/package.json +14 -17
  7. package/patches/node_modules/react-scripts/config/paths.js +161 -0
  8. package/patches/node_modules/react-scripts/config/webpack.config.js +825 -0
  9. package/patches/node_modules/react-scripts/package.json +108 -0
  10. package/patches/node_modules/vite/dist/node/chunks/dep-0fc8e132.js +8 -1
  11. package/patches/node_modules/vite/dist/node/jsview.vite.config.js +15 -7
  12. package/tools/common.js +7 -2
  13. package/tools/jsview-post-build.js +3 -3
  14. package/tools/jsview-post-install-react.js +1 -3
  15. package/tools/jsview-post-install.js +1 -1
  16. package/dom/jsview-dom/README.md +0 -5
  17. package/dom/jsview-dom/package-lock.json-perfect +0 -3898
  18. package/dom/jsview-dom/package.json +0 -23
  19. package/dom/jsview-dom/rollup/browser-debug-dom.rollup.config.js +0 -15
  20. package/dom/jsview-dom/rollup/dom.rollup.config.js +0 -14
  21. package/dom/jsview-dom/rollup/engine-js-browser.rollup.config.js +0 -14
  22. package/dom/jsview-dom/rollup/forge-define.rollup.config.js +0 -14
  23. package/dom/jsview-dom/scripts/release_dist.sh +0 -36
  24. package/dom/jsview-dom/src/dom-browser-hook/HookDocument.js +0 -118
  25. package/dom/jsview-dom/src/dom-browser-hook/OriginDocument.js +0 -19
  26. package/dom/jsview-dom/src/dom-browser-hook/StyleFormatCheck.js +0 -559
  27. package/dom/jsview-dom/src/dom-browser-hook/index.js +0 -6
  28. package/dom/jsview-dom/src/dom-wrapper/ForgeExtension.js +0 -226
  29. package/dom/jsview-dom/src/dom-wrapper/JsViewForgeApp.js +0 -85
  30. package/dom/jsview-dom/src/dom-wrapper/JsViewProxy.js +0 -51
  31. package/dom/jsview-dom/src/dom-wrapper/event/AnimationEvent.js +0 -7
  32. package/dom/jsview-dom/src/dom-wrapper/event/Event.js +0 -12
  33. package/dom/jsview-dom/src/dom-wrapper/event/FocusEvent.js +0 -9
  34. package/dom/jsview-dom/src/dom-wrapper/event/KeyboardEvent.js +0 -43
  35. package/dom/jsview-dom/src/dom-wrapper/event/LoadEvent.js +0 -8
  36. package/dom/jsview-dom/src/dom-wrapper/index.js +0 -16
  37. package/dom/jsview-dom/src/dom-wrapper/node/AnchorElement.js +0 -24
  38. package/dom/jsview-dom/src/dom-wrapper/node/AudioElement.js +0 -60
  39. package/dom/jsview-dom/src/dom-wrapper/node/Comment.js +0 -10
  40. package/dom/jsview-dom/src/dom-wrapper/node/DivElement.js +0 -498
  41. package/dom/jsview-dom/src/dom-wrapper/node/Document.js +0 -274
  42. package/dom/jsview-dom/src/dom-wrapper/node/Element.js +0 -852
  43. package/dom/jsview-dom/src/dom-wrapper/node/FDivElement.js +0 -48
  44. package/dom/jsview-dom/src/dom-wrapper/node/HeadElement.js +0 -47
  45. package/dom/jsview-dom/src/dom-wrapper/node/ImageElement.js +0 -203
  46. package/dom/jsview-dom/src/dom-wrapper/node/JsvAudioTrackElement.js +0 -22
  47. package/dom/jsview-dom/src/dom-wrapper/node/JsvElement.js +0 -40
  48. package/dom/jsview-dom/src/dom-wrapper/node/LinkElement.js +0 -48
  49. package/dom/jsview-dom/src/dom-wrapper/node/MediaElement.js +0 -230
  50. package/dom/jsview-dom/src/dom-wrapper/node/Node.js +0 -178
  51. package/dom/jsview-dom/src/dom-wrapper/node/SVGElement.js +0 -9
  52. package/dom/jsview-dom/src/dom-wrapper/node/ScriptElement.js +0 -45
  53. package/dom/jsview-dom/src/dom-wrapper/node/StyleElement.js +0 -33
  54. package/dom/jsview-dom/src/dom-wrapper/node/StyleElementCache.js +0 -41
  55. package/dom/jsview-dom/src/dom-wrapper/node/Text.js +0 -22
  56. package/dom/jsview-dom/src/dom-wrapper/node/UnknownElement.js +0 -4
  57. package/dom/jsview-dom/src/dom-wrapper/node/VideoElement.js +0 -237
  58. package/dom/jsview-dom/src/dom-wrapper/style/BorderImage.js +0 -25
  59. package/dom/jsview-dom/src/dom-wrapper/style/Inset.js +0 -26
  60. package/dom/jsview-dom/src/dom-wrapper/style/JsvStyleVariable.js +0 -65
  61. package/dom/jsview-dom/src/dom-wrapper/style/KeyframeRule.js +0 -11
  62. package/dom/jsview-dom/src/dom-wrapper/style/StyleDeclaration.js +0 -609
  63. package/dom/jsview-dom/src/dom-wrapper/style/StyleSheet.js +0 -51
  64. package/dom/jsview-dom/src/dom-wrapper/style/StyleValue.js +0 -385
  65. package/dom/jsview-dom/src/dom-wrapper/style/TextStylePackMap.js +0 -43
  66. package/dom/jsview-dom/src/dom-wrapper/style/URL.js +0 -144
  67. package/dom/jsview-dom/src/dom-wrapper/utils/EventHandler.js +0 -42
  68. package/dom/jsview-dom/src/dom-wrapper/utils/FDivRoot.js +0 -86
  69. package/dom/jsview-dom/src/dom-wrapper/utils/JsvLazySyncCache.js +0 -64
  70. package/dom/jsview-dom/src/dom-wrapper/utils/Log.js +0 -42
  71. package/dom/jsview-dom/src/dom-wrapper/utils/MutationObserver.js +0 -32
  72. package/dom/jsview-dom/src/dom-wrapper/utils/focusableNode.js +0 -715
  73. package/dom/jsview-dom/src/engine-js/ForgeDefine.js +0 -8
  74. package/dom/jsview-dom/src/engine-js/ForgeExtensionDefine.js +0 -14
  75. package/dom/jsview-dom/src/engine-js/browser/PlatformUtils.js +0 -100
  76. package/dom/jsview-dom/src/engine-js/browser/animation_base.js +0 -313
  77. package/dom/jsview-dom/src/engine-js/browser/animation_keyframe.js +0 -64
  78. package/dom/jsview-dom/src/engine-js/browser/animation_progress.js +0 -287
  79. package/dom/jsview-dom/src/engine-js/browser/animation_proxy.js +0 -906
  80. package/dom/jsview-dom/src/engine-js/browser/apic_decoder/demux.js +0 -143
  81. package/dom/jsview-dom/src/engine-js/browser/apic_decoder/gifDecoder.js +0 -12
  82. package/dom/jsview-dom/src/engine-js/browser/apic_decoder/libwebp-0.6.0.min.js +0 -160
  83. package/dom/jsview-dom/src/engine-js/browser/console_log.js +0 -25
  84. package/dom/jsview-dom/src/engine-js/browser/dynamic_key_frames.js +0 -95
  85. package/dom/jsview-dom/src/engine-js/browser/easing.js +0 -114
  86. package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/element_transform.js +0 -122
  87. package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/gjk.js +0 -450
  88. package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/mat.js +0 -102
  89. package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/range_model.js +0 -296
  90. package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/test_collide.js +0 -10
  91. package/dom/jsview-dom/src/engine-js/browser/index.js +0 -38
  92. package/dom/jsview-dom/src/engine-js/browser/latex_parse.js +0 -336
  93. package/dom/jsview-dom/src/engine-js/browser/layout_params.js +0 -113
  94. package/dom/jsview-dom/src/engine-js/browser/layout_view.js +0 -3545
  95. package/dom/jsview-dom/src/engine-js/browser/layout_view_debug.js +0 -15
  96. package/dom/jsview-dom/src/engine-js/browser/media.js +0 -379
  97. package/dom/jsview-dom/src/engine-js/browser/page_base.js +0 -941
  98. package/dom/jsview-dom/src/engine-js/browser/particle_view.js +0 -526
  99. package/dom/jsview-dom/src/engine-js/browser/platform_timer.js +0 -61
  100. package/dom/jsview-dom/src/engine-js/browser/react_utils.js +0 -5
  101. package/dom/jsview-dom/src/engine-js/browser/rect_utils.js +0 -91
  102. package/dom/jsview-dom/src/engine-js/browser/render_bridge.js +0 -128
  103. package/dom/jsview-dom/src/engine-js/browser/render_texture_proxy.js +0 -155
  104. package/dom/jsview-dom/src/engine-js/browser/renderer_deprecated.js +0 -75
  105. package/dom/jsview-dom/src/engine-js/browser/sound_pool.js +0 -139
  106. package/dom/jsview-dom/src/engine-js/browser/steps_animation.js +0 -192
  107. package/dom/jsview-dom/src/engine-js/browser/text_style_cache.js +0 -454
  108. package/dom/jsview-dom/src/engine-js/browser/text_utils.js +0 -299
  109. package/dom/jsview-dom/src/engine-js/browser/text_view.js +0 -428
  110. package/dom/jsview-dom/src/engine-js/browser/texture_manager.js +0 -1060
  111. package/dom/jsview-dom/src/engine-js/browser/url.js +0 -69
  112. package/dom/jsview-dom/src/engine-js/browser/velocity.js +0 -40
  113. package/dom/jsview-dom/src/engine-js/browser/view_sensor/autofroze_sensor.js +0 -77
  114. package/dom/jsview-dom/src/engine-js/browser/view_sensor/drag_impact_sensor.js +0 -67
  115. package/dom/jsview-dom/src/engine-js/browser/view_sensor/impact_sensor.js +0 -98
  116. package/dom/jsview-dom/src/engine-js/browser/view_sensor/impact_sensor_callback.js +0 -21
  117. package/dom/jsview-dom/src/engine-js/browser/view_sensor/impact_sensor_manager.js +0 -24
  118. package/dom/jsview-dom/src/engine-js/browser/view_sensor/index.js +0 -9
  119. package/dom/jsview-dom/src/engine-js/browser/view_sensor/view_sensor.js +0 -268
  120. package/dom/jsview-dom/src/engine-js/browser/view_sensor/view_sensor_manager.js +0 -84
  121. package/dom/jsview-dom/src/engine-js/browser/view_sensor/visible_sensor.js +0 -213
  122. package/dom/jsview-dom/src/engine-js/browser/view_store.js +0 -41
  123. package/dom/jsview-dom/src/engine-js/index.js +0 -2
  124. package/dom/jsview-dom/src/engine-js/native/README.md +0 -1
@@ -1,48 +0,0 @@
1
- /* eslint-disable no-unused-vars */
2
- /* eslint-disable no-extra-boolean-cast */
3
- import Element from './Element'
4
- import { FocusNode, FocusHub } from '../utils/focusableNode'
5
-
6
- let sFocusNodeIdGenerator = 1;
7
-
8
- class FDivElement extends Element {
9
- constructor() {
10
- super();
11
-
12
- this.FocusNodeRef = new FocusNode("__DEFAULT_ID_" + (sFocusNodeIdGenerator++)); // 以id为初始名
13
- this.HubRef = undefined;
14
- }
15
-
16
- jsvGetTagName() {
17
- return Element.TAG.FDIV;
18
- }
19
-
20
- setAttribute(name, value) {
21
- if (!name) {
22
- return;
23
- }
24
-
25
- if (name === "fname") {
26
- // 设置FDivHub查找用的名字
27
- if (value) { // value 可能为空
28
- this.FocusNodeRef.setBranchName(value);
29
- }
30
- } else if (name === "new-namespace") {
31
- // 建立路由hub分支,以支撑新的namespace路由
32
- if (value !== "" && !this.HubRef) {
33
- let router_hub = new FocusHub(false, value);
34
- this.HubRef = router_hub;
35
- this.FocusNodeRef.setHub(router_hub);
36
- this.FocusNodeRef.setBranchName(value);
37
- }
38
- } else {
39
- // 不接受其他属性,所以不用调用 super.setAttribute(name, value)
40
- }
41
- }
42
-
43
- jsvGetHub() {
44
- return this.HubRef;
45
- }
46
- }
47
-
48
- export default FDivElement;
@@ -1,47 +0,0 @@
1
- /* eslint-disable no-unused-vars */
2
- import Element from './Element'
3
- import LinkElement from './LinkElement'
4
- import ScriptElement from './ScriptElement'
5
-
6
- class HeaderElement extends Element {
7
- constructor() {
8
- super();
9
- // console.log("Document header construct");
10
- }
11
-
12
- appendChild(node) {
13
- // console.log("HeadElement.appendChild", node);
14
-
15
- if(node.constructor.name == "HTMLScriptElement"
16
- || node.constructor.name == "HTMLStyleElement"
17
- || node.constructor.name == "HTMLLinkElement") {
18
- window.originDocument.headAppendChild(node);
19
- } else {
20
- super.appendChild(node);
21
- }
22
-
23
- // if(node.constructor.name == "HTMLScriptElement") {
24
- // const htmlNode = node;
25
- // node = document.createElement("script");
26
- // node.src = htmlNode.src;
27
- // }
28
-
29
- if(node instanceof LinkElement
30
- || node instanceof ScriptElement) {
31
- // console.log("Found append script in head.");
32
- node.jsvLoadResource();
33
- }
34
- }
35
-
36
- removeChild(node) {
37
- if(node.constructor.name == "HTMLScriptElement"
38
- || node.constructor.name == "HTMLStyleElement"
39
- || node.constructor.name == "HTMLLinkElement") {
40
- window.originDocument.headRemoveChild(node);
41
- } else {
42
- super.removeChild(node);
43
- }
44
- }
45
- }
46
-
47
- export default HeaderElement;
@@ -1,203 +0,0 @@
1
- /* eslint-disable no-extra-boolean-cast */
2
- import Element from "./Element"
3
- import StyleDeclaration from "../style/StyleDeclaration"
4
- import ForgeExtension from "../ForgeExtension"
5
- import LoadEvent from "../event/LoadEvent"
6
- import Forge from "../../engine-js/ForgeDefine"
7
-
8
- class ImageElement extends Element {
9
- constructor(tag) {
10
- super(tag);
11
-
12
- this.jsvImageView = new Forge.LayoutView(null, "img");
13
- this.jsvMainView.AddView(this.jsvImageView);
14
- this._ImageInLoading = false;
15
- this.jsvColorSpace = Forge.ColorSpace.RGBA_8888;
16
- this.jsvScaleDownTex = null;
17
- this._HasUserOnLoad = false;
18
- this._OnLoadSeq = 1; // 记录请求请求图片次序,用于防止onLoad多次调用
19
- this._LoadedSrc = null;
20
- this.jsvApicAutoPlay = true;
21
- }
22
-
23
- jsvGetTagName() {
24
- return Element.TAG.IMAGE;
25
- }
26
-
27
- setAttribute(name, value) {
28
- // console.log("ImageElement.setAttribute() name=", name, ", value=", value);
29
- //拦截图片texutre信息
30
- if (this.jsvTakeTextureAttribute(name, value)) {
31
- return;
32
- }
33
-
34
- super.setAttribute(name, value);
35
-
36
- if (name === Element.ATTRIBUTE.SRC) {
37
- this.jsvSetAttrLazySync(name, Element.ATTRTYPE.CSS);
38
- }
39
- }
40
-
41
- //Override
42
- jsvSetElementProp(caches) {
43
- this.jsvImageView.SetElementProp(caches, ForgeExtension.RootActivity);
44
- }
45
-
46
- // Override
47
- // 当View从Root脱离时,需要通过jsvOnUnloadForgeView调用jsvRelease来释放播放器
48
- jsvCallbackOnUnloadForgeView() {
49
- return () => {
50
- if (this._HasUserOnLoad) {
51
- let image_texture = this.jsvImageView?.TextureSetting?.Texture;
52
- if (image_texture) {
53
- image_texture.DisableBackgroundLoad(this);
54
- }
55
- }
56
- };
57
- }
58
-
59
- // Override
60
- jsvFlushEventHandlers() {
61
- super.jsvFlushEventHandlers(); // 调用Super确保Handler获取成功
62
- if (this.eventHandlers.onLoad) {
63
- // 用户监听了onload事件,启用Texture的后台加载逻辑,即使Texture不可见也会进行加载
64
- let image_texture = this.jsvImageView?.TextureSetting?.Texture;
65
- if (image_texture) {
66
- this._HasUserOnLoad = true;
67
- image_texture.EnableBackgroundLoad(this);
68
- }
69
- } else if (this._HasUserOnLoad) {
70
- // 用户取消了Onload回调(从有->无)
71
- let image_texture = this.jsvImageView?.TextureSetting?.Texture;
72
- if (image_texture) {
73
- image_texture.DisableBackgroundLoad(this);
74
- }
75
- this._HasUserOnLoad = false;
76
- }
77
- }
78
-
79
- jsvTakeTextureAttribute(name, value) {
80
- //console.log("ImageElement.jsvTakeTextureAttribute() name=" + name);
81
- if (name == "jsv_img_color_space"
82
- || name == "jsvImgColorSpace"
83
- || name == "jsv-img-color-space") {
84
- this.jsvColorSpace = value;
85
- return true;
86
- } else if (name == "jsv_img_scaledown_tex"
87
- || name == "jsvImgScaledownTex"
88
- || name == "jsv-img-scaledown-tex") {
89
- if (value === "" || typeof value === 'undefined') {
90
- value = "true";
91
- }
92
- this.jsvScaleDownTex = value;
93
- return true;
94
- } else if (name == "jsv_disable_apic_autoplay") {
95
- this.jsvApicAutoPlay = false;
96
- return true;
97
- }
98
- return false
99
- }
100
-
101
- jsvFlushViewLayout() {
102
- //console.log("ImageElement.jsvFlushViewLayout()");
103
- if (this._ImageInLoading) {
104
- // 将View放置为最小化,但仍然描画状态
105
- this.jsvImageView.WaitTextureToResize(true);
106
- // 设置view的尺寸信息,以便于渲染系统判断该view是否在屏幕上
107
- this.jsvImageView.ResetLayoutParams({ x: 0, y: 0, width: this.style.width, height: this.style.height });
108
- } else {
109
- // 解除View等待Texture时处于的尺寸最小化状态
110
- this.jsvImageView.WaitTextureToResize(false);
111
- }
112
-
113
- super.jsvFlushViewLayout();
114
- }
115
-
116
- jsvOnLoaded(imageSize) {
117
- console.log("ImageElement.jsvOnLoaded() imageSize=" + JSON.stringify(imageSize));
118
- this._ImageInLoading = false;
119
- this._LoadedSrc = this.src;
120
-
121
- this.jsvStore.textureWidth = imageSize.width;
122
- this.jsvStore.textureHeight = imageSize.height;
123
-
124
- // 触发view进行resize调整
125
- //console.log("===========" + JSON.stringify(this.style));
126
- this.style.jsvLazySyncCache.setCacheProperty(StyleDeclaration.TYPE.LAYOUT_SIZE, true);
127
-
128
- // 触发onload事件
129
- if (this._HasUserOnLoad) {
130
- let event = new LoadEvent();
131
- event.target = this;
132
- document.dispatchEvent(event);
133
- }
134
- }
135
-
136
- // override
137
- jsvOnAttrLazySync(attri_changes) {
138
- if (attri_changes.hasOwnProperty(Element.ATTRIBUTE.SRC)) {
139
- // 当src有更新时,触发刷新
140
- // 注意测试: borderRadius被设置在class中的场景
141
- if (this.src != this._LoadedSrc) {
142
- this._ImageInLoading = true;
143
- this.jsvStore.textureWidth = NaN;
144
- this.jsvStore.textureHeight = NaN;
145
- this.jsvDrawImage();
146
- }
147
- }
148
- }
149
-
150
- // override
151
- jsvOnLoadForgeView() {
152
- //console.log("ImageElement.jsvOnLoadForgeView()");
153
- if (!this.style.objectFit) {
154
- // 设置默认ObjectFit以触发ClientWidth/ClientHeight自适配
155
- this.style.jsvSetPropertySilently("objectFit", StyleDeclaration.ObjectFit.FILL);
156
- }
157
- super.jsvOnLoadForgeView();
158
- }
159
-
160
- // Override
161
- jsvApplyObjectFit(origin_layout) {
162
- // origin_layout.width = 200;
163
- // origin_layout.height = 200;
164
- //console.log("ImageElement.jsvApplyObjectFit() " + JSON.stringify(origin_layout));
165
- if (this.jsvStore.textureWidth == 0 || this.jsvStore.textureHeight == 0) {
166
- console.warn("warning: size 0 not support object fit, src=" + this.src);
167
- }
168
-
169
- return Element.applyObjectFitCommon(this, origin_layout, this.jsvImageView);
170
- }
171
-
172
- jsvDrawImage() {
173
- if (!this.src) {
174
- return;
175
- }
176
-
177
- let target_size = null;
178
- if (this.jsvScaleDownTex === "true") {
179
- if (this.style && this.style.width) {
180
- target_size = {
181
- width: this.style.width,
182
- height: 0
183
- }
184
- } else {
185
- console.error("set jsvScaleDownTex while style.width is not set. you need to set 'src' prop at the end.")
186
- }
187
- }
188
- this._OnLoadSeq++;
189
- let load_seq = this._OnLoadSeq;
190
-
191
- ForgeExtension.SetBackgroundImage(this.jsvImageView, this.src,
192
- this.style.borderRadius,
193
- (imageSize) => {
194
- if (load_seq === this._OnLoadSeq) {
195
- this.jsvOnLoaded(imageSize);
196
- }
197
- },
198
- target_size,
199
- this.jsvColorSpace,
200
- this.jsvApicAutoPlay);
201
- }
202
- }
203
- export default ImageElement;
@@ -1,22 +0,0 @@
1
- import Element from "./Element.js";
2
- import AudioElement from "./AudioElement";
3
- import MediaElement from "./MediaElement";
4
-
5
- class JsvAudioTrackElement extends AudioElement {
6
- constructor(src) {
7
- super(src);
8
- console.log("AudioElement.constructor()", this);
9
- }
10
-
11
- jsvGetTagName() {
12
- return Element.TAG.AUDIOTRACK;
13
- }
14
-
15
- jsvInit() {
16
- // 覆盖Media的创建, 播放器使用AudioTrack, 对接短的本地化音频
17
- this.jsvMedia = new MediaElement.HOOKS.Audio("AudioTrack");
18
- this.jsvOverrideMedia = true;
19
- super.jsvInit();
20
- }
21
- }
22
- export default JsvAudioTrackElement;
@@ -1,40 +0,0 @@
1
- import Forge from "../../engine-js/ForgeDefine"
2
- import Element from "./Element"
3
- class JsvElement extends Element {
4
- constructor(name) {
5
- super();
6
- this.jsvMainView = new Forge.JsvElementView(name);
7
- }
8
-
9
- get textContent() {
10
- return this.jsvMainView.textContent;
11
- }
12
-
13
- set textContent(text) {
14
- this.jsvMainView.textContent = text;
15
- }
16
-
17
- setAttribute(name, value) {
18
- super.setAttribute(name, value);
19
- this.jsvMainView.setAttribute(name, value);
20
- }
21
-
22
- removeAttribute(name) {
23
- super.removeAttribute(name);
24
- this.jsvMainView.removeAttribute(name);
25
- }
26
-
27
- getAttribute(name) {
28
- return this.jsvMainView.getAttribute(name);
29
- }
30
-
31
- hasAttribute(name) {
32
- return this.jsvMainView.hasAttribute(name);
33
- }
34
-
35
- jsvOnStyleChanged(styleTypes) {
36
- super.jsvOnStyleChanged(styleTypes);
37
- }
38
- }
39
-
40
- export default JsvElement;
@@ -1,48 +0,0 @@
1
- import Element from "./Element"
2
- import Event from "../event/Event"
3
- import URL from "../style/URL"
4
-
5
- class LinkElement extends Element {
6
- constructor(tag) {
7
- super(tag);
8
- this.src = null;
9
- this.onerror = null;
10
- this.onload = null;
11
- }
12
-
13
- setAttribute(name, value) {
14
- console.log("LinkElement.setAttribute() name=" + name + ", value=", value);
15
- this[name] = value;
16
- }
17
-
18
- jsvLoadResource() {
19
- let isSuccess = false;
20
- let errCode = null
21
-
22
- if (this.href != null) {
23
- var url = new URL(this.href);
24
- console.log("Ignore to load link from url=" + url.href);
25
- isSuccess = true;
26
- } else {
27
- console.warn("Failed to load link, href is not exists.");
28
- errCode = "NoSrc";
29
- }
30
-
31
- this.jsvOnLoadResult(isSuccess, errCode);
32
- }
33
-
34
- jsvOnLoadResult(isSuccess, errCode) {
35
- console.log("jsvOnLoadResult isSuccess:" + isSuccess + ", errCode:" + errCode);
36
- if (isSuccess) {
37
- if (this.onload) {
38
- let event = new Event('load');
39
- this.onload(event);
40
- }
41
- } else {
42
- if (this.onerror) {
43
- this.onerror({ type: 'jsvErr_' + errCode, target:this });
44
- }
45
- }
46
- }
47
- }
48
- export default LinkElement;
@@ -1,230 +0,0 @@
1
- /* eslint-disable no-unused-vars */
2
- /* eslint-disable no-extra-boolean-cast */
3
- import Element from "./Element"
4
- import URL from "../style/URL"
5
-
6
-
7
- class MediaElement extends Element {
8
- constructor(src) {
9
- super();
10
- this.jsvMediaView = null;
11
- this.jsvMedia = null;
12
- this.onVisibilityChange = this.onVisibilityChange.bind(this);
13
- this.stopByOnHide = false;
14
- this.playBackground = false;
15
- if(!!src) {
16
- this.srcValue = src;
17
- }
18
- }
19
-
20
- addEventListener(event, func, useCapture) {
21
- event = event.replace(/-/g, ''); // Vue会将'onXxxYyy'(大写字母)转换为'xxx-yyy',在此处将'-'去除
22
- super.addEventListener(event, func, useCapture);
23
- this.jsvAddMediaListener(event);
24
- }
25
-
26
- jsvOnLoaded() {
27
- //need override
28
- }
29
-
30
- set src(value) {
31
- if (!!value) {
32
- if (value !== "about:null" && value !== "about:blank") {
33
- let url = new URL(value);
34
- value = url.href;
35
- } else {
36
- // 保持 value 为 about:null 或 about:blank, 用于停止播放行为
37
- }
38
- }
39
-
40
- if(!this.jsvMedia) {
41
- this.jsvInit();
42
- }
43
- if (value !== this.jsvMedia.src) {
44
- this.jsvMedia.src = value;
45
- this.srcValue = value;
46
- }
47
- }
48
-
49
- jsvOnLoadForgeView() {
50
- console.log("MediaElement jsvOnLoadForgeView");
51
- super.jsvOnLoadForgeView();
52
-
53
- if(!this.jsvMedia) {
54
- this.jsvInit();
55
- }
56
- this.registerOnVisibilityChange();
57
- }
58
-
59
- jsvInit() {
60
- // console.warn("MediaElement.jsvInit() this.jsvMedia=" + this.jsvMedia);
61
- let addedEventList = this.jsvEventListener;
62
- if(!!addedEventList) {
63
- for(var event in addedEventList.keys) {
64
- this.jsvAddMediaListener(event);
65
- }
66
- }
67
- Promise.resolve().then(() => {
68
- if (this.jsvMedia) {
69
- this.jsvMedia.confirmInitSetup?.();
70
- }
71
- });
72
- }
73
-
74
- // Override
75
- // 当View从Root脱离时,需要通过jsvOnUnloadForgeView调用jsvRelease来释放播放器
76
- jsvCallbackOnUnloadForgeView() {
77
- return this.jsvOnUnloadForgeView.bind(this);
78
- }
79
-
80
- jsvOnUnloadForgeView() {
81
- console.log("MediaElement jsvOnUnloadForgeView");
82
- this.unregisterOnVisibilityChange();
83
- if (this.jsvMediaView) {
84
- this.jsvMediaView = null;
85
- }
86
- this.jsvRelease();
87
- }
88
-
89
- jsvRelease() {
90
- if(this.jsvMedia) {
91
- this.jsvMedia.pause();
92
- if (this.jsvMedia.unload) {
93
- this.jsvMedia.unload();
94
- }
95
- if (this.jsvMedia.releaseResource) {
96
- this.jsvMedia.releaseResource();
97
- this.jsvMedia.onPlatformDestroy();
98
- }
99
- }
100
- this.jsvEventListener = undefined;
101
- }
102
-
103
- jsvAddMediaListener(event) {
104
- //need override
105
- }
106
-
107
- onJsViewHide() {
108
- if (this.jsvMedia) {
109
- //释放
110
- if (!this.jsvMedia.paused) {
111
- this.stopByOnHide = true;
112
- }
113
- this.jsvMedia.unload();
114
- }
115
- }
116
-
117
- onJsViewShow() {
118
- //重新加载
119
- if (!this.jsvMedia) {
120
- this.jsvInit();
121
- }
122
- this.jsvMedia.src = this.srcValue;
123
-
124
- if (this.stopByOnHide) {
125
- this.stopByOnHide = false;
126
- this.jsvMedia.play();
127
- }
128
- }
129
-
130
- onVisibilityChange(status) {
131
- if (this.playBackground) { return; }
132
- if (status.status === "show") {
133
- this.onJsViewShow();
134
- } else if (status.status === "hide") {
135
- this.onJsViewHide();
136
- }
137
- }
138
-
139
- registerOnVisibilityChange() {
140
- if (window.JsView) {
141
- window.JsView.onVisibilityChange(this.onVisibilityChange);
142
- }
143
- }
144
-
145
- unregisterOnVisibilityChange() {
146
- if (window.JsView) {
147
- window.JsView.removeEventCallback(this.onVisibilityChange);
148
- }
149
- }
150
-
151
- setAttribute(name, value) {
152
- if (name === "jsv_play_background") {
153
- this.playBackground = value === "true"
154
- return;
155
- }
156
- super.setAttribute(name, value);
157
- }
158
- }
159
-
160
- MediaElement.HOOKS = { // hook jsview的Audio和Video类,这两个类会被替换成AudioElement和VideoElement。
161
- Audio : Audio,
162
- Video : window._ExtVideo,
163
- OffscreenVideo: window._ExtOVP,
164
- };
165
-
166
- MediaElement.PROP = {
167
- SetOnly: [
168
- "autoplay",
169
- "loop",
170
- "timeupdateless",
171
- "predownload",
172
- ],
173
- GetOnly: [
174
- "duration",
175
- "paused",
176
- ],
177
- SetAndGet: [
178
- "currentTime",
179
- "muted",
180
- "playbackRate",
181
- "preload",
182
- "volume",
183
- ],
184
- Function: [
185
- "load",
186
- "pause",
187
- "play",
188
- "unload",
189
- "confirmInitSetup",
190
- ],
191
- };
192
-
193
- for(let propType in MediaElement.PROP) {
194
- let propArray = MediaElement.PROP[propType];
195
- for (let propName of propArray) {
196
- let propValue = {};
197
- if(propType === "SetOnly" || propType === "SetAndGet") {
198
- propValue.set = function (value) {
199
- if (!this.jsvMedia) {
200
- this.jsvInit();
201
- }
202
- // console.warn("MediaElement.set() name=" + propName + ", value=" + value);
203
- this.jsvMedia[propName] = value;
204
- }
205
- }
206
- if(propType === "GetOnly" || propType === "SetAndGet") {
207
- propValue.get = function () {
208
- if (!this.jsvMedia) {
209
- this.jsvInit();
210
- }
211
- return this.jsvMedia[propName];
212
- }
213
- }
214
- if(propType === "Function") {
215
- propValue = function(...args) {
216
- if (!this.jsvMedia) {
217
- this.jsvInit();
218
- }
219
- return this.jsvMedia[propName]?this.jsvMedia[propName](...args):null;
220
- }
221
- }
222
-
223
- if (propValue instanceof Function) {
224
- MediaElement.prototype[propName] = propValue;
225
- } else {
226
- Object.defineProperty(MediaElement.prototype, propName, propValue);
227
- }
228
- }
229
- }
230
- export default MediaElement;