@shijiu/jsview 1.9.730 → 1.9.747

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 (116) hide show
  1. package/dom/jsv-browser-debug-dom.js +1 -1
  2. package/dom/jsv-dom.js +1 -1
  3. package/dom/jsv-engine-js-browser.js +1 -1
  4. package/dom/jsv-forge-define.js +1 -1
  5. package/package.json +14 -17
  6. package/patches/node_modules/vite/dist/node/chunks/dep-0fc8e132.js +8 -1
  7. package/patches/node_modules/vite/dist/node/jsview.vite.config.js +12 -6
  8. package/dom/jsview-dom/README.md +0 -5
  9. package/dom/jsview-dom/package-lock.json-perfect +0 -3898
  10. package/dom/jsview-dom/package.json +0 -23
  11. package/dom/jsview-dom/rollup/browser-debug-dom.rollup.config.js +0 -15
  12. package/dom/jsview-dom/rollup/dom.rollup.config.js +0 -14
  13. package/dom/jsview-dom/rollup/engine-js-browser.rollup.config.js +0 -14
  14. package/dom/jsview-dom/rollup/forge-define.rollup.config.js +0 -14
  15. package/dom/jsview-dom/scripts/release_dist.sh +0 -36
  16. package/dom/jsview-dom/src/dom-browser-hook/HookDocument.js +0 -118
  17. package/dom/jsview-dom/src/dom-browser-hook/OriginDocument.js +0 -19
  18. package/dom/jsview-dom/src/dom-browser-hook/StyleFormatCheck.js +0 -559
  19. package/dom/jsview-dom/src/dom-browser-hook/index.js +0 -6
  20. package/dom/jsview-dom/src/dom-wrapper/ForgeExtension.js +0 -226
  21. package/dom/jsview-dom/src/dom-wrapper/JsViewForgeApp.js +0 -85
  22. package/dom/jsview-dom/src/dom-wrapper/JsViewProxy.js +0 -51
  23. package/dom/jsview-dom/src/dom-wrapper/event/AnimationEvent.js +0 -7
  24. package/dom/jsview-dom/src/dom-wrapper/event/Event.js +0 -12
  25. package/dom/jsview-dom/src/dom-wrapper/event/FocusEvent.js +0 -9
  26. package/dom/jsview-dom/src/dom-wrapper/event/KeyboardEvent.js +0 -43
  27. package/dom/jsview-dom/src/dom-wrapper/event/LoadEvent.js +0 -8
  28. package/dom/jsview-dom/src/dom-wrapper/index.js +0 -16
  29. package/dom/jsview-dom/src/dom-wrapper/node/AnchorElement.js +0 -24
  30. package/dom/jsview-dom/src/dom-wrapper/node/AudioElement.js +0 -60
  31. package/dom/jsview-dom/src/dom-wrapper/node/Comment.js +0 -10
  32. package/dom/jsview-dom/src/dom-wrapper/node/DivElement.js +0 -498
  33. package/dom/jsview-dom/src/dom-wrapper/node/Document.js +0 -274
  34. package/dom/jsview-dom/src/dom-wrapper/node/Element.js +0 -852
  35. package/dom/jsview-dom/src/dom-wrapper/node/FDivElement.js +0 -48
  36. package/dom/jsview-dom/src/dom-wrapper/node/HeadElement.js +0 -47
  37. package/dom/jsview-dom/src/dom-wrapper/node/ImageElement.js +0 -203
  38. package/dom/jsview-dom/src/dom-wrapper/node/JsvAudioTrackElement.js +0 -22
  39. package/dom/jsview-dom/src/dom-wrapper/node/JsvElement.js +0 -40
  40. package/dom/jsview-dom/src/dom-wrapper/node/LinkElement.js +0 -48
  41. package/dom/jsview-dom/src/dom-wrapper/node/MediaElement.js +0 -230
  42. package/dom/jsview-dom/src/dom-wrapper/node/Node.js +0 -178
  43. package/dom/jsview-dom/src/dom-wrapper/node/SVGElement.js +0 -9
  44. package/dom/jsview-dom/src/dom-wrapper/node/ScriptElement.js +0 -45
  45. package/dom/jsview-dom/src/dom-wrapper/node/StyleElement.js +0 -33
  46. package/dom/jsview-dom/src/dom-wrapper/node/StyleElementCache.js +0 -41
  47. package/dom/jsview-dom/src/dom-wrapper/node/Text.js +0 -22
  48. package/dom/jsview-dom/src/dom-wrapper/node/UnknownElement.js +0 -4
  49. package/dom/jsview-dom/src/dom-wrapper/node/VideoElement.js +0 -237
  50. package/dom/jsview-dom/src/dom-wrapper/style/BorderImage.js +0 -25
  51. package/dom/jsview-dom/src/dom-wrapper/style/Inset.js +0 -26
  52. package/dom/jsview-dom/src/dom-wrapper/style/JsvStyleVariable.js +0 -65
  53. package/dom/jsview-dom/src/dom-wrapper/style/KeyframeRule.js +0 -11
  54. package/dom/jsview-dom/src/dom-wrapper/style/StyleDeclaration.js +0 -609
  55. package/dom/jsview-dom/src/dom-wrapper/style/StyleSheet.js +0 -51
  56. package/dom/jsview-dom/src/dom-wrapper/style/StyleValue.js +0 -385
  57. package/dom/jsview-dom/src/dom-wrapper/style/TextStylePackMap.js +0 -43
  58. package/dom/jsview-dom/src/dom-wrapper/style/URL.js +0 -144
  59. package/dom/jsview-dom/src/dom-wrapper/utils/EventHandler.js +0 -42
  60. package/dom/jsview-dom/src/dom-wrapper/utils/FDivRoot.js +0 -86
  61. package/dom/jsview-dom/src/dom-wrapper/utils/JsvLazySyncCache.js +0 -64
  62. package/dom/jsview-dom/src/dom-wrapper/utils/Log.js +0 -42
  63. package/dom/jsview-dom/src/dom-wrapper/utils/MutationObserver.js +0 -32
  64. package/dom/jsview-dom/src/dom-wrapper/utils/focusableNode.js +0 -715
  65. package/dom/jsview-dom/src/engine-js/ForgeDefine.js +0 -8
  66. package/dom/jsview-dom/src/engine-js/ForgeExtensionDefine.js +0 -14
  67. package/dom/jsview-dom/src/engine-js/browser/PlatformUtils.js +0 -100
  68. package/dom/jsview-dom/src/engine-js/browser/animation_base.js +0 -313
  69. package/dom/jsview-dom/src/engine-js/browser/animation_keyframe.js +0 -64
  70. package/dom/jsview-dom/src/engine-js/browser/animation_progress.js +0 -287
  71. package/dom/jsview-dom/src/engine-js/browser/animation_proxy.js +0 -906
  72. package/dom/jsview-dom/src/engine-js/browser/apic_decoder/demux.js +0 -143
  73. package/dom/jsview-dom/src/engine-js/browser/apic_decoder/gifDecoder.js +0 -12
  74. package/dom/jsview-dom/src/engine-js/browser/apic_decoder/libwebp-0.6.0.min.js +0 -160
  75. package/dom/jsview-dom/src/engine-js/browser/console_log.js +0 -25
  76. package/dom/jsview-dom/src/engine-js/browser/dynamic_key_frames.js +0 -95
  77. package/dom/jsview-dom/src/engine-js/browser/easing.js +0 -114
  78. package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/element_transform.js +0 -122
  79. package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/gjk.js +0 -450
  80. package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/mat.js +0 -102
  81. package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/range_model.js +0 -296
  82. package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/test_collide.js +0 -10
  83. package/dom/jsview-dom/src/engine-js/browser/index.js +0 -38
  84. package/dom/jsview-dom/src/engine-js/browser/latex_parse.js +0 -336
  85. package/dom/jsview-dom/src/engine-js/browser/layout_params.js +0 -113
  86. package/dom/jsview-dom/src/engine-js/browser/layout_view.js +0 -3545
  87. package/dom/jsview-dom/src/engine-js/browser/layout_view_debug.js +0 -15
  88. package/dom/jsview-dom/src/engine-js/browser/media.js +0 -379
  89. package/dom/jsview-dom/src/engine-js/browser/page_base.js +0 -941
  90. package/dom/jsview-dom/src/engine-js/browser/particle_view.js +0 -526
  91. package/dom/jsview-dom/src/engine-js/browser/platform_timer.js +0 -61
  92. package/dom/jsview-dom/src/engine-js/browser/react_utils.js +0 -5
  93. package/dom/jsview-dom/src/engine-js/browser/rect_utils.js +0 -91
  94. package/dom/jsview-dom/src/engine-js/browser/render_bridge.js +0 -128
  95. package/dom/jsview-dom/src/engine-js/browser/render_texture_proxy.js +0 -155
  96. package/dom/jsview-dom/src/engine-js/browser/renderer_deprecated.js +0 -75
  97. package/dom/jsview-dom/src/engine-js/browser/sound_pool.js +0 -139
  98. package/dom/jsview-dom/src/engine-js/browser/steps_animation.js +0 -192
  99. package/dom/jsview-dom/src/engine-js/browser/text_style_cache.js +0 -454
  100. package/dom/jsview-dom/src/engine-js/browser/text_utils.js +0 -299
  101. package/dom/jsview-dom/src/engine-js/browser/text_view.js +0 -428
  102. package/dom/jsview-dom/src/engine-js/browser/texture_manager.js +0 -1060
  103. package/dom/jsview-dom/src/engine-js/browser/url.js +0 -69
  104. package/dom/jsview-dom/src/engine-js/browser/velocity.js +0 -40
  105. package/dom/jsview-dom/src/engine-js/browser/view_sensor/autofroze_sensor.js +0 -77
  106. package/dom/jsview-dom/src/engine-js/browser/view_sensor/drag_impact_sensor.js +0 -67
  107. package/dom/jsview-dom/src/engine-js/browser/view_sensor/impact_sensor.js +0 -98
  108. package/dom/jsview-dom/src/engine-js/browser/view_sensor/impact_sensor_callback.js +0 -21
  109. package/dom/jsview-dom/src/engine-js/browser/view_sensor/impact_sensor_manager.js +0 -24
  110. package/dom/jsview-dom/src/engine-js/browser/view_sensor/index.js +0 -9
  111. package/dom/jsview-dom/src/engine-js/browser/view_sensor/view_sensor.js +0 -268
  112. package/dom/jsview-dom/src/engine-js/browser/view_sensor/view_sensor_manager.js +0 -84
  113. package/dom/jsview-dom/src/engine-js/browser/view_sensor/visible_sensor.js +0 -213
  114. package/dom/jsview-dom/src/engine-js/browser/view_store.js +0 -41
  115. package/dom/jsview-dom/src/engine-js/index.js +0 -2
  116. 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;