@shijiu/jsview-vue 0.0.1-beta.0

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 (252) hide show
  1. package/docs/IMPORT_CHANGE_LOG.txt +3 -0
  2. package/docs/git_commit.md +15 -0
  3. package/docs/test_version_up.txt +1 -0
  4. package/dom/bin/jsview-dom-1.0.313.tgz +0 -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-forge-define.js +6 -0
  9. package/dom/target_core_revision.js +14 -0
  10. package/load/header_script_loader.js +134 -0
  11. package/load/jsview-main.js +42 -0
  12. package/load/jsview.config.default.js +37 -0
  13. package/load/jsview.default.config.js +37 -0
  14. package/load/loader.js +172 -0
  15. package/load/loader_webkit.js +40 -0
  16. package/package.json +27 -0
  17. package/patch/node_modules/@babel/preset-env/lib/available-plugins.js +219 -0
  18. package/patch/node_modules/@vue/cli-plugin-typescript/index.js +100 -0
  19. package/patch/node_modules/@vue/cli-service/lib/commands/serve.js +395 -0
  20. package/patch/node_modules/@vue/cli-service/lib/config/app.js +272 -0
  21. package/patch/node_modules/@vue/cli-service/lib/config/assets.js +70 -0
  22. package/patch/node_modules/@vue/cli-service/lib/config/base.js +212 -0
  23. package/patch/node_modules/@vue/compiler-sfc/dist/compiler-sfc.cjs.js +2566 -0
  24. package/patch/node_modules/@vue/compiler-sfc/dist/jsview-css-to-js.js +274 -0
  25. package/patch/node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js +1596 -0
  26. package/patch/node_modules/postcss-js/objectifier.js +90 -0
  27. package/patch/node_modules/vue-loader/dist/resolveScript.js +70 -0
  28. package/patch/package-lock.json +30051 -0
  29. package/samples/AdvanceMetroWidget/App.vue +123 -0
  30. package/samples/AdvanceMetroWidget/Frame.vue +101 -0
  31. package/samples/AdvanceMetroWidget/Item.vue +58 -0
  32. package/samples/AdvanceMetroWidget/data.js +137 -0
  33. package/samples/AnimPicture/App.vue +224 -0
  34. package/samples/AnimPicture/assets/animated_webp.webp +0 -0
  35. package/samples/AnimPicture/assets/ball_3.webp +0 -0
  36. package/samples/AnimPicture/assets/girl_run.gif +0 -0
  37. package/samples/AnimPicture/assets/quan.webp +0 -0
  38. package/samples/Basic/App.vue +129 -0
  39. package/samples/Basic/assets/border.png +0 -0
  40. package/samples/Basic/assets/border2.png +0 -0
  41. package/samples/Basic/assets/icon.png +0 -0
  42. package/samples/Basic/assets/test.jpg +0 -0
  43. package/samples/Basic/components/ContentBlock.vue +36 -0
  44. package/samples/Basic/components/FontStyle.css +10 -0
  45. package/samples/Basic/components/TitleBar.vue +29 -0
  46. package/samples/Basic/components/anim/AnimGroup.vue +68 -0
  47. package/samples/Basic/components/anim/AnimKeyframeBasic.vue +102 -0
  48. package/samples/Basic/components/anim/AnimKeyframeComposite.vue +53 -0
  49. package/samples/Basic/components/anim/AnimTransition.vue +116 -0
  50. package/samples/Basic/components/div/DivBackground.vue +15 -0
  51. package/samples/Basic/components/div/DivClip.vue +81 -0
  52. package/samples/Basic/components/div/DivCssScoped.vue +27 -0
  53. package/samples/Basic/components/div/DivCssVar.vue +50 -0
  54. package/samples/Basic/components/div/DivGroup1.vue +33 -0
  55. package/samples/Basic/components/div/DivGroup2.vue +41 -0
  56. package/samples/Basic/components/div/DivLayout.vue +12 -0
  57. package/samples/Basic/components/div/DivRadius.vue +47 -0
  58. package/samples/Basic/components/text/TextAlign.vue +48 -0
  59. package/samples/Basic/components/text/TextFontStyle.vue +58 -0
  60. package/samples/Basic/components/text/TextGroup.vue +32 -0
  61. package/samples/Basic/components/text/TextOverflow.vue +78 -0
  62. package/samples/BasicFocusControl/App.vue +125 -0
  63. package/samples/BasicFocusControl/components/BaseBlock.vue +51 -0
  64. package/samples/BasicFocusControl/components/MainArea.vue +98 -0
  65. package/samples/BasicFocusControl/components/MainAreaLeftBlock.vue +21 -0
  66. package/samples/BasicFocusControl/components/MainAreaRightBlock.vue +30 -0
  67. package/samples/BasicFocusControl/components/SideBar.vue +73 -0
  68. package/samples/BasicFocusControl/components/SideBarBlock.vue +30 -0
  69. package/samples/ClassNameDemo/App.vue +119 -0
  70. package/samples/ClassNameDemo/assets/bg.jpg +0 -0
  71. package/samples/ClassNameDemo/assets/coupon_content.png +0 -0
  72. package/samples/ClassNameDemo/assets/coupon_left.png +0 -0
  73. package/samples/ClassNameDemo/assets/coupon_mid.png +0 -0
  74. package/samples/ClassNameDemo/assets/coupon_right.png +0 -0
  75. package/samples/ClassNameDemo/assets/focus_border.png +0 -0
  76. package/samples/ClassNameDemo/assets/holder_logo.png +0 -0
  77. package/samples/ClassNameDemo/assets/jrbm.png +0 -0
  78. package/samples/ClassNameDemo/assets/line_left.png +0 -0
  79. package/samples/ClassNameDemo/assets/line_mid.png +0 -0
  80. package/samples/ClassNameDemo/assets/line_right.png +0 -0
  81. package/samples/ClassNameDemo/assets/loading.png +0 -0
  82. package/samples/ClassNameDemo/assets/logo.png +0 -0
  83. package/samples/ClassNameDemo/assets/mcjx.png +0 -0
  84. package/samples/ClassNameDemo/assets/tao.png +0 -0
  85. package/samples/ClassNameDemo/assets/tmall.png +0 -0
  86. package/samples/ClassNameDemo/components/ContentItem.vue +253 -0
  87. package/samples/ClassNameDemo/components/LoadingView.vue +43 -0
  88. package/samples/ClassNameDemo/components/TitleView.vue +24 -0
  89. package/samples/ClassNameDemo/data.js +24 -0
  90. package/samples/ColorSpace/App.vue +135 -0
  91. package/samples/ColorSpace/bmpDemo.bmp +0 -0
  92. package/samples/ColorSpace/jpegDemo.jpeg +0 -0
  93. package/samples/ColorSpace/pngDemo.png +0 -0
  94. package/samples/ColorSpace/pngNoAlphaDemo.png +0 -0
  95. package/samples/DemoHomepage/App.vue +31 -0
  96. package/samples/DemoHomepage/components/BodyFrame.vue +82 -0
  97. package/samples/DemoHomepage/components/Dialog.vue +94 -0
  98. package/samples/DemoHomepage/components/Item.vue +77 -0
  99. package/samples/DemoHomepage/components/TabFrame.vue +86 -0
  100. package/samples/DemoHomepage/router.js +132 -0
  101. package/samples/DemoHomepage/views/Homepage.vue +186 -0
  102. package/samples/FlipCard/App.vue +80 -0
  103. package/samples/FlipCard/FlipCard.vue +124 -0
  104. package/samples/FlipCard/assets/blue_egg.png +0 -0
  105. package/samples/FlipCard/assets/red_egg.png +0 -0
  106. package/samples/FlipCard/data.js +13 -0
  107. package/samples/FlowMultiWidget/App.vue +91 -0
  108. package/samples/FlowMultiWidget/assets/nine_patch_focus.png +0 -0
  109. package/samples/FlowMultiWidget/components/Block.vue +107 -0
  110. package/samples/FlowMultiWidget/components/FlowPage.vue +60 -0
  111. package/samples/FlowMultiWidget/components/Item.vue +103 -0
  112. package/samples/FlowMultiWidget/components/MenuItem.vue +72 -0
  113. package/samples/FlowMultiWidget/components/MyMenu.vue +90 -0
  114. package/samples/FlowMultiWidget/data.js +446 -0
  115. package/samples/HashHistory/App.vue +124 -0
  116. package/samples/HashHistory/components/HorizontalButtonList.vue +114 -0
  117. package/samples/HashHistory/components/Item.vue +74 -0
  118. package/samples/HashHistory/router.js +30 -0
  119. package/samples/HashHistory/views/BasePage.vue +19 -0
  120. package/samples/HashHistory/views/MainPage.vue +68 -0
  121. package/samples/HashHistory/views/SubPage.vue +79 -0
  122. package/samples/HashHistory/views/SubPageFirst.vue +10 -0
  123. package/samples/HashHistory/views/SubPageSecond.vue +10 -0
  124. package/samples/LongImage/App.vue +96 -0
  125. package/samples/LongImage/Button.vue +153 -0
  126. package/samples/LongImage/LongImageScroll.vue +127 -0
  127. package/samples/LongImage/Scroll.vue +16 -0
  128. package/samples/LongImage/assets/1280x7200.jpg +0 -0
  129. package/samples/LongText/App.vue +111 -0
  130. package/samples/LongText/Button.vue +153 -0
  131. package/samples/LongText/LongTextScroll.vue +225 -0
  132. package/samples/LongText/Scroll.vue +16 -0
  133. package/samples/Preload/App.vue +146 -0
  134. package/samples/Preload/data.js +23 -0
  135. package/samples/Preload/images/awesomeface.png +0 -0
  136. package/samples/Preload/images/cat.jpg +0 -0
  137. package/samples/Preload/images/rank.png +0 -0
  138. package/samples/Preload/images/rank_focus.png +0 -0
  139. package/samples/Preload/images/rule.png +0 -0
  140. package/samples/Preload/images/rule_focus.png +0 -0
  141. package/samples/Preload/images/start.png +0 -0
  142. package/samples/Preload/images/start_focus.png +0 -0
  143. package/samples/Preload/preloadItem.vue +22 -0
  144. package/samples/QrcodeDemo/App.vue +73 -0
  145. package/samples/SimpleWidgetDemo/App.vue +204 -0
  146. package/samples/SimpleWidgetDemo/Item.vue +83 -0
  147. package/samples/SimpleWidgetDemo/assets/bg.jpg +0 -0
  148. package/samples/SimpleWidgetDemo/assets/coupon_content.png +0 -0
  149. package/samples/SimpleWidgetDemo/assets/coupon_left.png +0 -0
  150. package/samples/SimpleWidgetDemo/assets/coupon_mid.png +0 -0
  151. package/samples/SimpleWidgetDemo/assets/coupon_right.png +0 -0
  152. package/samples/SimpleWidgetDemo/assets/focus_border.png +0 -0
  153. package/samples/SimpleWidgetDemo/assets/holder_logo.png +0 -0
  154. package/samples/SimpleWidgetDemo/assets/jrbm.png +0 -0
  155. package/samples/SimpleWidgetDemo/assets/line_left.png +0 -0
  156. package/samples/SimpleWidgetDemo/assets/line_mid.png +0 -0
  157. package/samples/SimpleWidgetDemo/assets/line_right.png +0 -0
  158. package/samples/SimpleWidgetDemo/assets/loading.png +0 -0
  159. package/samples/SimpleWidgetDemo/assets/logo.png +0 -0
  160. package/samples/SimpleWidgetDemo/assets/mcjx.png +0 -0
  161. package/samples/SimpleWidgetDemo/assets/tao.png +0 -0
  162. package/samples/SimpleWidgetDemo/assets/tmall.png +0 -0
  163. package/samples/SimpleWidgetDemo/border.png +0 -0
  164. package/samples/SimpleWidgetDemo/components/ContentItem.vue +412 -0
  165. package/samples/SimpleWidgetDemo/components/MyTab.vue +117 -0
  166. package/samples/SimpleWidgetDemo/data.js +110 -0
  167. package/samples/SprayView/App.vue +270 -0
  168. package/samples/SprayView/assets/snow.png +0 -0
  169. package/samples/SpriteImage/App.vue +174 -0
  170. package/samples/SpriteImage/images/cat_run.png +0 -0
  171. package/samples/SpriteImage/images/egg_break.json +116 -0
  172. package/samples/SpriteImage/images/egg_break.png +0 -0
  173. package/samples/SpriteImage/images/sprite.png +0 -0
  174. package/samples/TextBox/App.vue +179 -0
  175. package/samples/TextBox/RenderCenter.vue +109 -0
  176. package/samples/TextBox/RenderLeft.vue +109 -0
  177. package/samples/TextBox/RenderOneLine.vue +120 -0
  178. package/samples/TextBox/RenderRight.vue +107 -0
  179. package/samples/TextShadowDemo/App.vue +98 -0
  180. package/samples/TextureSize/App.vue +142 -0
  181. package/samples/TextureSize/bmpDemo.bmp +0 -0
  182. package/samples/TextureSize/jpegDemo.jpeg +0 -0
  183. package/samples/TextureSize/jpgDemo.jpg +0 -0
  184. package/samples/TextureSize/pngDemo.png +0 -0
  185. package/samples/TextureSize/pngNoAlphaDemo.png +0 -0
  186. package/samples/ThrowMoveDemo/AccelerateDemo.vue +118 -0
  187. package/samples/ThrowMoveDemo/App.vue +114 -0
  188. package/samples/ThrowMoveDemo/LRParabolicDemo.vue +116 -0
  189. package/samples/ThrowMoveDemo/TargetDemo.vue +117 -0
  190. package/samples/ThrowMoveDemo/UDParabolicDemo.vue +122 -0
  191. package/samples/TransitPage/App.vue +41 -0
  192. package/samples/VideoDemo/App.vue +137 -0
  193. package/samples/VideoDemo/components/Button.vue +69 -0
  194. package/samples/VideoDemo/components/Controllor.vue +195 -0
  195. package/samples/VideoDemo/components/VideoFrame.vue +152 -0
  196. package/scripts/git-commit-empty.js +21 -0
  197. package/scripts/install-local-packages.js +121 -0
  198. package/scripts/make-js.sh +181 -0
  199. package/scripts/post-build.js +132 -0
  200. package/scripts/post-install.js +127 -0
  201. package/scripts/pre-pack.js +2 -0
  202. package/scripts/run-android.js +64 -0
  203. package/utils/JsViewEngineWidget/bin/shijiu-jsview-vue-widget-1.0.1.tgz +0 -0
  204. package/utils/JsViewEngineWidget/index.d.ts +32 -0
  205. package/utils/JsViewEngineWidget/index.js +6 -0
  206. package/utils/JsViewVueTools/DebugContentShellJBridge.js +16 -0
  207. package/utils/JsViewVueTools/DebugTool.js +21 -0
  208. package/utils/JsViewVueTools/DefaultKeyMap.js +12 -0
  209. package/utils/JsViewVueTools/JsvDynamicCssStyle.js +73 -0
  210. package/utils/JsViewVueTools/JsvDynamicKeyFrames.js +128 -0
  211. package/utils/JsViewVueTools/JsvHashHistory.js +112 -0
  212. package/utils/JsViewVueTools/JsvRuntimeBridge.js +417 -0
  213. package/utils/JsViewVueTools/JsvStyleClass.js +290 -0
  214. package/utils/JsViewVueWidget/BrowserDebugWidget/BrowserPreload.vue +80 -0
  215. package/utils/JsViewVueWidget/BrowserDebugWidget/BrowserQrcode.vue +148 -0
  216. package/utils/JsViewVueWidget/BrowserDebugWidget/BrowserSpray.vue +55 -0
  217. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/ApicDataBase.js +29 -0
  218. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/BrowserApic.vue +124 -0
  219. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/GifData.js +83 -0
  220. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/LoopToolBase.js +25 -0
  221. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/NormalLoopTool.js +61 -0
  222. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/PartLoopTool.js +119 -0
  223. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/Viewer.js +106 -0
  224. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/WebpData.js +141 -0
  225. package/utils/JsViewVueWidget/BrowserDebugWidget/WidgetLoader.js +20 -0
  226. package/utils/JsViewVueWidget/BrowserDebugWidget/WidgetWrapper.js +11 -0
  227. package/utils/JsViewVueWidget/JsvActorMove/ActorControlBase.js +204 -0
  228. package/utils/JsViewVueWidget/JsvActorMove/JsvActorMove.vue +64 -0
  229. package/utils/JsViewVueWidget/JsvActorMove/JsvActorMoveControl.js +427 -0
  230. package/utils/JsViewVueWidget/JsvActorMove/index.js +12 -0
  231. package/utils/JsViewVueWidget/JsvApic/JsvApic.vue +179 -0
  232. package/utils/JsViewVueWidget/JsvApic/index.js +17 -0
  233. package/utils/JsViewVueWidget/JsvMarquee.vue +197 -0
  234. package/utils/JsViewVueWidget/JsvNativeSharedDiv.vue +92 -0
  235. package/utils/JsViewVueWidget/JsvNinePatch.vue +76 -0
  236. package/utils/JsViewVueWidget/JsvPreload/JsvPreload.vue +351 -0
  237. package/utils/JsViewVueWidget/JsvPreload/index.js +21 -0
  238. package/utils/JsViewVueWidget/JsvQrcode/JsvQrcode.vue +140 -0
  239. package/utils/JsViewVueWidget/JsvQrcode/index.js +18 -0
  240. package/utils/JsViewVueWidget/JsvSpray/JsvSpray.vue +140 -0
  241. package/utils/JsViewVueWidget/JsvSpray/index.js +15 -0
  242. package/utils/JsViewVueWidget/JsvSpriteAnim/JsvSpriteAnim.vue +448 -0
  243. package/utils/JsViewVueWidget/JsvSpriteAnim/SpriteController.js +57 -0
  244. package/utils/JsViewVueWidget/JsvSpriteAnim/index.js +6 -0
  245. package/utils/JsViewVueWidget/JsvSwiper/Indicator.vue +35 -0
  246. package/utils/JsViewVueWidget/JsvSwiper/JsvSwiper.vue +495 -0
  247. package/utils/JsViewVueWidget/JsvSwiper/index.js +10 -0
  248. package/utils/JsViewVueWidget/JsvSwiper3D/Indicator.vue +35 -0
  249. package/utils/JsViewVueWidget/JsvSwiper3D/JsvSwiper.vue +404 -0
  250. package/utils/JsViewVueWidget/JsvSwiper3D/index.js +10 -0
  251. package/utils/JsViewVueWidget/JsvTextBox.vue +111 -0
  252. package/utils/JsViewVueWidget/JsvVideo.vue +36 -0
@@ -0,0 +1,351 @@
1
+ <!--
2
+ * 【模块 export 内容】
3
+ * JsvPreload:Vue高阶组件,图片预加载的控件
4
+ * preloadList {ObjectArray}: 预加载的信息列表,单个内容通过buildPreloadInfo构建
5
+ * downloadList {ObjectArray}: 预下载的信息列表,单个内容通过buildDownloadInfo构建
6
+ * onPreloading {Function(float percent)}: 预加载中回调,返回预加载进度
7
+ * onPreloadDone {Function()}: 预加载完成回调
8
+ * onDownloadDone {Function(pathes)}: 预下载完成回调,pathes为下载好回调的地址
9
+ *
10
+ * 注意事项:
11
+ * 指定加载时的尺寸(0为不指定),与img标签中的 jsv_img_scaledown_tex 属性一起使用
12
+ * 指定加载色空间,与div标签中的 jsv_img_color_space 一起使用。
13
+ * 因为,同样url情况下,jsv_img_scaledown_tex 和 jsv_img_color_space 启用后,不同的尺寸不同颜色空间
14
+ * 对应着各自不同的图片内存缓存
15
+ *
16
+ * 静态函数:
17
+ * buildPreloadInfo: 静态函数,创建预加载信息项,用于制作JsvPreload的preloadList属性列表信息
18
+ * 参数:
19
+ * url {string}: (必填)图片url
20
+ * width {int}: 图片内存存储区域宽度,默认为0(同图片源文件宽度)
21
+ * height {int}: 图片内存存储区域宽度,默认为0(同图片源文件宽度)
22
+ * color_type {string}: 图片存储颜色空间,去掉alpha通道可节省内存,例如"RGB_565"等,与img标签jsv_img_color_space配合,默认值"RGBA_8888"
23
+ * net_setting {object}: (未实现)网络加载参数,cookie, refer等,默认值 null
24
+ *
25
+ * buildDownloadInfo: 函数,创建预下载信息项,用于制作JsvPreload的downloadList属性列表信息
26
+ * 参数:
27
+ * url {string}: (必填)图片url
28
+ * width {int}: 图片内存存储区域宽度,默认为0(同图片源文件宽度)
29
+ * height {int}: 图片内存存储区域宽度,默认为0(同图片源文件宽度)
30
+ * color_type {string}: 图片存储颜色空间,去掉alpha通道可节省内存,例如"RGB_565"等,与img标签jsv_img_color_space配合,默认值"RGBA_8888"
31
+ * net_setting {object}: (未实现)网络加载参数,cookie, refer等,默认值 null
32
+ -->
33
+ <script>
34
+ import { Forge, ForgeExtension } from "../../../dom/jsv-forge-define";
35
+
36
+ const CONST_FORMAT_TOKEN = "_JsvP_";
37
+ const buildPreloadInfo = (
38
+ url,
39
+ width = 0,
40
+ height = 0,
41
+ color_type = "RGBA_8888",
42
+ net_setting = null
43
+ ) => {
44
+ return {
45
+ url,
46
+ width,
47
+ height,
48
+ colorType: color_type,
49
+ netSetting: net_setting,
50
+ magicToken: CONST_FORMAT_TOKEN, // 用于格式校验
51
+ };
52
+ };
53
+
54
+ const buildDownloadInfo = (url, net_setting = null) => {
55
+ return {
56
+ url,
57
+ netSetting: net_setting,
58
+ magicToken: CONST_FORMAT_TOKEN, // 用于格式校验
59
+ };
60
+ };
61
+
62
+ export { buildPreloadInfo, buildDownloadInfo };
63
+
64
+ export default {
65
+ props: {
66
+ preloadList: Object,
67
+ downloadList: Object,
68
+ onPreloading: Function,
69
+ onPreloadDone: Function,
70
+ onDownloadDone: Function,
71
+ sprayStyle: Object,
72
+ },
73
+ data() {
74
+ return {
75
+ preloadViewList: [],
76
+ downloadViewList: [],
77
+ preloadStateList: [],
78
+ downloadStateList: [],
79
+ preloadResultMap: {},
80
+ CONST_FORMAT_TOKEN: "_JsvP_",
81
+ preloadIsNullNum: 0, // 纪录传入的preload为null的数量,由于vue不支持在子组件修改props值,所有在删除值为null时,需要++,这样才能保证与传入数据的length相等从而触发回调
82
+ };
83
+ },
84
+ methods: {
85
+ _releaseForgeView() {
86
+ if (window.JsView) {
87
+ if (this.preloadViewList.length > 0) {
88
+ for (const view_info of this.preloadViewList) {
89
+ if (view_info) {
90
+ // 当预加载url为null时view_info为null
91
+ const id = view_info.viewId;
92
+ // UnMarkImportant & UnregisterLoadImageCallback(这两个API同版本加入)
93
+ if (
94
+ view_info.textureRef &&
95
+ view_info.textureRef.DisableBackgroundLoad
96
+ ) {
97
+ view_info.textureRef.DisableBackgroundLoad(this);
98
+ view_info.textureRef.UnregisterLoadImageCallback(
99
+ view_info.callToken
100
+ );
101
+ }
102
+ ForgeExtension.RootActivity.ViewStore.remove(id);
103
+ }
104
+ }
105
+ this.preloadViewList = [];
106
+ }
107
+
108
+ if (this.downloadViewList.length > 0) {
109
+ for (const view_info of this.downloadViewList) {
110
+ if (view_info) {
111
+ // 当预加载url为null时view_info为null
112
+ const id = view_info.viewId;
113
+ // UnMarkImportant & UnregisterLoadImageCallback(这两个API同版本加入)
114
+ if (
115
+ view_info.textureRef &&
116
+ view_info.textureRef.DisableBackgroundLoad
117
+ ) {
118
+ view_info.textureRef.DisableBackgroundLoad(this);
119
+ view_info.textureRef.UnregisterLoadImageCallback(
120
+ view_info.callToken
121
+ );
122
+ }
123
+ ForgeExtension.RootActivity.ViewStore.remove(id);
124
+ }
125
+ }
126
+ this.downloadViewList = [];
127
+ }
128
+ } else {
129
+ this.preloadViewList = [];
130
+ this.downloadViewList = [];
131
+ this.preloadStateList = [];
132
+ this.downloadStateList = [];
133
+ }
134
+ },
135
+
136
+ // shouldComponentUpdate(nextProps, nextState) {
137
+ // if (
138
+ // nextProps.preloadList.length === this.preloadList.length &&
139
+ // nextProps.downloadList.length === this.downloadList.length
140
+ // ) {
141
+ // let same = true;
142
+ // for (let i = 0; i < nextProps.preloadList.length; i++) {
143
+ // if (nextProps.preloadList[i].url !== this.preloadList[i].url) {
144
+ // same = false;
145
+ // break;
146
+ // }
147
+ // }
148
+ // for (let i = 0; i < nextProps.downloadList.length; i++) {
149
+ // if (nextProps.downloadList[i].url !== this.downloadList[i].url) {
150
+ // same = false;
151
+ // break;
152
+ // }
153
+ // }
154
+ // return !same;
155
+ // }
156
+ // return true;
157
+ // },
158
+
159
+ _checkPreload() {
160
+ let loadedNum = 0;
161
+ this.preloadStateList.forEach((state) => {
162
+ loadedNum = state ? ++loadedNum : loadedNum;
163
+ });
164
+ if (this.onPreloading) {
165
+ this.onPreloading(loadedNum / this.preloadStateList.length);
166
+ }
167
+ if (
168
+ this.onPreloadDone &&
169
+ loadedNum === this.preloadStateList.length - this.preloadIsNullNum
170
+ ) {
171
+ this.onPreloadDone(this.preloadResultMap);
172
+ }
173
+ },
174
+
175
+ _getPreloadViewIdList() {
176
+ if (!this.preloadList) {
177
+ return;
178
+ }
179
+ this.preloadStateList = new Array(this.preloadList.length).fill(false);
180
+ // 直接在map前将为null的值删除掉
181
+ let preloadListData = this.preloadList;
182
+ for (let i = 0; i < preloadListData.length; i++) {
183
+ if (!preloadListData[i]) {
184
+ preloadListData.splice(i, 1);
185
+ this.preloadIsNullNum++;
186
+ }
187
+ }
188
+ this.preloadViewList = preloadListData.map((item, index) => {
189
+ if (item.magicToken !== this.CONST_FORMAT_TOKEN) {
190
+ console.error(
191
+ "Error:format mismatch, data should comes from function buildPreloadInfo()"
192
+ );
193
+ }
194
+ const base_url = item.url;
195
+ let image_url = base_url;
196
+ if (base_url && base_url.indexOf("http") < 0) {
197
+ // 包含http和https两种请求
198
+ if (window.JsView.React.UrlRef) {
199
+ image_url = new window.JsView.React.UrlRef(base_url).href;
200
+ }
201
+ }
202
+ let target_size = null;
203
+ if (item.width !== 0 && item.height !== 0) {
204
+ target_size = { width: item.width, height: item.height };
205
+ }
206
+ let texture = null;
207
+ if (
208
+ image_url &&
209
+ (image_url.toLowerCase().indexOf(".webp") >= 0 ||
210
+ image_url.toLowerCase().indexOf(".gif") >= 0)
211
+ ) {
212
+ texture = ForgeExtension.TextureManager.GetGifImage(image_url, false);
213
+ } else {
214
+ texture = ForgeExtension.TextureManager.GetImage2(
215
+ image_url,
216
+ false,
217
+ target_size,
218
+ item.colorType
219
+ );
220
+ }
221
+ if (!texture) {
222
+ console.error(
223
+ "Error: Preload view build texture failed for " + image_url
224
+ );
225
+ this.preloadStateList[index] = true; // 无法创建texture的图片先认为加载完成
226
+ return;
227
+ }
228
+ const callback_token = texture.RegisterLoadImageCallback(
229
+ null,
230
+ (params) => {
231
+ console.log(`preload succeed ${image_url}`, params);
232
+ this.preloadStateList[index] = true;
233
+ this.preloadResultMap[item.url] = {
234
+ width: params.width,
235
+ height: params.height,
236
+ };
237
+ console.log(`preload succeed ${item.url}, params:${params}`);
238
+ this._checkPreload();
239
+ }
240
+ );
241
+ if (texture.EnableBackgroundLoad) {
242
+ texture.EnableBackgroundLoad(this);
243
+ }
244
+ const texture_setting = new Forge.ExternalTextureSetting(texture);
245
+ const preload_view = new Forge.PreloadView(texture_setting);
246
+ return {
247
+ viewId: ForgeExtension.RootActivity.ViewStore.add(
248
+ new Forge.ViewInfo(preload_view, {
249
+ x: 0,
250
+ y: 0,
251
+ width: 0,
252
+ height: 0,
253
+ })
254
+ ),
255
+ textureRef: texture,
256
+ callToken: callback_token,
257
+ };
258
+ });
259
+ },
260
+
261
+ _checkDownload() {
262
+ for (const state of this.downloadStateList) {
263
+ if (!state) return;
264
+ }
265
+ if (this.$props.onDownloadDone) {
266
+ console.log("zhang $props downloadStateList =",this.downloadStateList)
267
+ this.$props.onDownloadDone(this.downloadStateList);
268
+ }
269
+ },
270
+
271
+ _getDownloadViewIdList() {
272
+ if (!this.downloadList) {
273
+ return;
274
+ }
275
+ this.downloadStateList = new Array(this.downloadList.length).fill(null);
276
+ // 直接在map前将url为null的值清除掉
277
+ let downloadListData = this.downloadList;
278
+ for (let i = 0; i < downloadListData.length; i++) {
279
+ if (!downloadListData[i].url) {
280
+ downloadListData.splice(i, 1);
281
+ }
282
+ }
283
+ this.downloadViewList = downloadListData.map((item, index) => {
284
+ if (item.magicToken !== this.CONST_FORMAT_TOKEN) {
285
+ console.error(
286
+ "Error:format mismatch, data should comes from function buildDownloadInfo()"
287
+ );
288
+ }
289
+ const base_url = item.url;
290
+ let image_url = base_url;
291
+ if (base_url && base_url.indexOf("http") < 0) {
292
+ // 包含http和https两种请求
293
+ if (window.JsView.React.UrlRef) {
294
+ image_url = new window.JsView.React.UrlRef(base_url).href;
295
+ }
296
+ }
297
+ const texture =
298
+ ForgeExtension.TextureManager.GetDownloadTexture(image_url);
299
+ if (!texture) {
300
+ console.error("Error: Down view build texture failed for " + image_url);
301
+ // 无法创建texture的图片先认为加载完成
302
+ this.downloadStateList[index] = "invalid";
303
+ return;
304
+ }
305
+ const callback_token = texture.RegisterLoadImageCallback(null, (texture_info) => {
306
+ console.log("zhang texture_info =",texture_info);
307
+ this.downloadStateList[index] = texture_info.extra.absolutePath;
308
+ this._checkDownload();
309
+ });
310
+ if (texture.EnableBackgroundLoad) {
311
+ texture.EnableBackgroundLoad(this);
312
+ }
313
+ const texture_setting = new Forge.TextureSetting(texture); // Download类型的释放跟随view一同释放
314
+ const preload_view = new Forge.PreloadView(texture_setting);
315
+
316
+ return {
317
+ viewId: ForgeExtension.RootActivity.ViewStore.add(
318
+ new Forge.ViewInfo(preload_view, {
319
+ x: 0,
320
+ y: 0,
321
+ width: 0,
322
+ height: 0,
323
+ })
324
+ ),
325
+ textureRef: texture,
326
+ callToken: callback_token,
327
+ };
328
+ });
329
+ },
330
+ },
331
+ created() {
332
+ this._releaseForgeView();
333
+ this._getPreloadViewIdList();
334
+ this._getDownloadViewIdList();
335
+ },
336
+ beforeUnmount() {
337
+ this._releaseForgeView();
338
+ },
339
+ };
340
+ </script>
341
+
342
+ <template>
343
+ <div>
344
+ <div v-for="item in preloadViewList" :key="item.viewId" :id="item.viewId">
345
+ <div v-if="item.viewId" :jsv_innerview="item.viewId"></div>
346
+ </div>
347
+ <div v-for="item in downloadViewList" :key="item.viewId" :id="item.viewId">
348
+ <div v-if="item.viewId" :jsv_innerview="item.viewId"></div>
349
+ </div>
350
+ </div>
351
+ </template>
@@ -0,0 +1,21 @@
1
+ /*
2
+ * @Author: ChenChanghua
3
+ * @Date: 2021-10-13 15:12:45
4
+ * @LastEditors: ChenChanghua
5
+ * @LastEditTime: 2021-11-22 14:24:36
6
+ * @Description: file content
7
+ */
8
+ //考虑到.vue文件除了export default的component外,还有可能export其他对象,因此使用import * as
9
+ import * as JsvPreload from "./JsvPreload.vue";
10
+ let _JsvPreload = JsvPreload;
11
+ if (
12
+ window.JsvWidgetWrapperGroup &&
13
+ window.JsvWidgetWrapperGroup.BrowserPreload
14
+ ) {
15
+ _JsvPreload = window.JsvWidgetWrapperGroup.BrowserPreload;
16
+ }
17
+ let component = _JsvPreload.default;
18
+ let buildPreloadInfo = JsvPreload.buildPreloadInfo;
19
+ let buildDownloadInfo = JsvPreload.buildDownloadInfo;
20
+ export default component;
21
+ export { buildPreloadInfo, buildDownloadInfo };
@@ -0,0 +1,140 @@
1
+ <!--
2
+ * 【模块 export 内容】
3
+ * QRCode:Vue高阶组件,描绘二维码,
4
+ * props说明:
5
+ * value {string} (必须) 二维码代表的字符串
6
+ * size {int} (必须) 二维码展示尺寸,二维码为正方形,所以改值代表宽和高,默认值:128
7
+ * fgColor {string} 二维码前景色,默认值"#000000",黑色
8
+ * bgColor {string} 二维码背景色,默认值"#ffffff",白色
9
+ * level {string} 二维码的容错能力,可选值{'L':低, 'M':中, 'H':高, 'Q':最精细},默认值'L'
10
+ * imageSettings {Object} 设置中心logo图片,默认值为null,设置格式为:
11
+ * {
12
+ * src {string} logo的url地址
13
+ * height {int} logo的宽度
14
+ * height {int} logo的高度
15
+ * }
16
+ */
17
+ -->
18
+ <script>
19
+ import { Forge, ForgeExtension } from "../../../dom/jsv-forge-define";
20
+
21
+ export default {
22
+ props: {
23
+ value: String,
24
+ size: Number,
25
+ fgColor: String,
26
+ bgColor: String,
27
+ level: String, // ,容错级别,分别是L(7%)、M(15%)、Q(25%)、H(30%),
28
+ imageSettings: Object,
29
+ },
30
+ methods: {
31
+ getImageSettings() {
32
+ const imageSettings = this.imageSettings;
33
+ if (!imageSettings) {
34
+ return null;
35
+ }
36
+ const w = imageSettings.width;
37
+ const h = imageSettings.height;
38
+ const x = !imageSettings.x ? this.size / 2 - w / 2 : imageSettings.x;
39
+ const y = !imageSettings.y ? this.size / 2 - h / 2 : imageSettings.y;
40
+
41
+ return { x, y, h, w };
42
+ },
43
+ renderJsvQRCode() {
44
+ // Remove old QRCode
45
+ if (this.qrCodeView !== null) {
46
+ this.jsvBaseView.RemoveView(this.qrCodeView);
47
+ }
48
+
49
+ let view = null;
50
+ let lp_params = null;
51
+ const texture_manager = ForgeExtension.TextureManager;
52
+ const qrcode_texture = texture_manager.GetQRCodeTexture(
53
+ this.value,
54
+ this.size,
55
+ this.size,
56
+ Forge.QRCodeLevel[this.level],
57
+ this.bgColor,
58
+ this.fgColor
59
+ );
60
+ // 构建二维码底部数据
61
+ view = new Forge.LayoutView(new Forge.TextureSetting(qrcode_texture));
62
+ const calculatedImageSettings = this.getImageSettings();
63
+ // 构建二维码中心图片
64
+ if (this.imageSettings && calculatedImageSettings) {
65
+ let url = this.imageSettings.src;
66
+ if (typeof url === "string") {
67
+ url = new window.JsView.React.UrlRef(this.imageSettings.src).href;
68
+ }
69
+ const img_texture = texture_manager.GetImage(url);
70
+ const img_view = new Forge.LayoutView(
71
+ new Forge.TextureSetting(img_texture)
72
+ );
73
+ view.AddView(
74
+ img_view,
75
+ new Forge.LayoutParams({
76
+ x: calculatedImageSettings.x,
77
+ y: calculatedImageSettings.y,
78
+ width: calculatedImageSettings.w,
79
+ height: calculatedImageSettings.h,
80
+ })
81
+ );
82
+ console.log("view = " + view);
83
+ }
84
+ // 二维码都位置与大小
85
+ lp_params = new Forge.LayoutParams({
86
+ x: 0,
87
+ y: 0,
88
+ width: this.size,
89
+ height: this.size,
90
+ });
91
+
92
+ // Add new QRCode
93
+ this.qrCodeView = view;
94
+ this.jsvBaseView.AddView(this.qrCodeView, lp_params);
95
+ },
96
+ },
97
+ created() {
98
+ // 构建二维码父View
99
+ const propsData = {
100
+ value: this.value,
101
+ size: this.size,
102
+ level: this.level,
103
+ bgColor: this.bgColor,
104
+ fgColor: this.fgColor,
105
+ imageSettings: this.imageSettings,
106
+ };
107
+ if (this.jsvBaseView === null) {
108
+ this.jsvBaseView = new Forge.LayoutView();
109
+ this.innerViewId = ForgeExtension.RootActivity.ViewStore.add(
110
+ new Forge.ViewInfo(this.jsvBaseView, { x: 0, y: 0 })
111
+ );
112
+ }
113
+ // 构建QRCdoe view
114
+ if (this.oldProps !== propsData) {
115
+ this.renderJsvQRCode();
116
+ }
117
+ // return this.innerViewId;
118
+ },
119
+ data() {
120
+ return {
121
+ oldProps: null,
122
+ innerViewId: -1,
123
+ jsvBaseView: null,
124
+ qrCodeView: null,
125
+ };
126
+ },
127
+ mounted() {
128
+ if (this.innerViewId !== -1) {
129
+ ForgeExtension.RootActivity.ViewStore.remove(this.innerViewId);
130
+ this.innerViewId = -1;
131
+ this.jsvBaseView = null;
132
+ }
133
+ },
134
+ };
135
+ </script>
136
+
137
+ <template>
138
+ <div :jsv_innerview="innerViewId"></div>
139
+ </template>
140
+
@@ -0,0 +1,18 @@
1
+ /*
2
+ * @Author: ChenChanghua
3
+ * @Date: 2021-10-13 15:12:45
4
+ * @LastEditors: ChenChanghua
5
+ * @LastEditTime: 2021-10-13 17:41:34
6
+ * @Description: file content
7
+ */
8
+ //考虑到.vue文件除了export default的component外,还有可能export其他对象,因此使用import * as
9
+ import * as JsvQrcode from "./JsvQrcode.vue";
10
+ let _JsvQrcode = JsvQrcode;
11
+ if (
12
+ window.JsvWidgetWrapperGroup &&
13
+ window.JsvWidgetWrapperGroup.BrowserQrcode
14
+ ) {
15
+ _JsvQrcode = window.JsvWidgetWrapperGroup.BrowserQrcode;
16
+ }
17
+ let component = _JsvQrcode.default;
18
+ export default component;
@@ -0,0 +1,140 @@
1
+ <!--
2
+ * @Author: ChenChanghua
3
+ * @Date: 2021-10-12 18:20:43
4
+ * @LastEditors: ChenChanghua
5
+ * @LastEditTime: 2021-11-18 16:42:20
6
+ * @Description: file content
7
+ -->
8
+
9
+ <!--
10
+ * 【模块 export 内容】
11
+ * JsvSpray:Vue高阶组件,粒子效果控件
12
+ * prop说明:
13
+ * pointRes {string} (必需)粒子图案 可选值: 绝对路径url|url(相对路径url)|#FFFFFF|rbga(255,0,0,1.0)
14
+ * sprayStyle {object} (必需)粒子效果配置
15
+ *
16
+ * prop中的sprayStyle说明:
17
+ * type {int} (必需)喷射类型 0: 一次喷射 1: 持续喷射
18
+ * particleNum {int} (必需)粒子个数
19
+ * deltaAngle {int} (必需)粒子喷射角度范围。如设30则粒子喷射范围为div上边法向正负30度
20
+ * deltaWidth {int} (必需)粒子喷射位置宽度范围
21
+ * deltaHeight {int} (必需)粒子喷射位置高度范围
22
+ * pointSizeMin {int} (必需)粒子尺寸下限(像素)
23
+ * pointSizeMax {int} (必需)粒子尺寸上限(像素)
24
+ * speedMin {float} (必需)粒子速度下限
25
+ * speedMax {float} (必需)粒子速度上限
26
+ * lifeMin {int} (必需)粒子生命周期下限(ms)
27
+ * lifeMax {int} (必需)粒子生命周期上限(ms)
28
+ * accelerateX {float} (必需)水平方向加速度
29
+ * accelerateY {float} (必需)垂直方向加速度
30
+ * addNumSpeed {float} 持续喷射时,起始粒子添加速度(个/ms), 默认为0.001
31
+ * enableFade {boolean} 粒子淡出开关, 默认为false
32
+ * enableShrink {boolean} 粒子缩小开关, 默认为false
33
+ -->
34
+ <script>
35
+ import { Forge, ForgeExtension } from "../../../dom/jsv-forge-define";
36
+
37
+ let buildForgeView = (pointRes, sprayStyle) => {
38
+ if (!pointRes) {
39
+ return -1;
40
+ }
41
+ const texture_manager = ForgeExtension.TextureManager;
42
+ let texture_setting;
43
+ if (pointRes.trim().startsWith("#") || pointRes.trim().startsWith("rgba")) {
44
+ texture_setting = new Forge.TextureSetting(
45
+ texture_manager.GetColorTexture(pointRes)
46
+ );
47
+ } else {
48
+ const base_url = pointRes;
49
+ let image_url = base_url;
50
+ if (base_url && base_url.indexOf("http") === 0) {
51
+ image_url = base_url;
52
+ } else if (window.JsView.React.UrlRef) {
53
+ image_url = new window.JsView.React.UrlRef(pointRes).href;
54
+ }
55
+ texture_setting = new Forge.ExternalTextureSetting(
56
+ texture_manager.GetImage2(image_url, false, null, "RGB_8888", null)
57
+ );
58
+ }
59
+ const spray_view = new Forge.SprayView(texture_setting);
60
+ const add_num_per_frame = sprayStyle.addNumSpeed
61
+ ? sprayStyle.addNumSpeed
62
+ : 0.001;
63
+ const accelerate_x =
64
+ typeof sprayStyle.accelerateX !== "undefined" ? sprayStyle.accelerateX : 0;
65
+ const accelerate_y =
66
+ typeof sprayStyle.accelerateY !== "undefined"
67
+ ? sprayStyle.accelerateY
68
+ : -100;
69
+ spray_view.SetSprayInfo(
70
+ sprayStyle.type,
71
+ sprayStyle.particleNum,
72
+ add_num_per_frame,
73
+ (sprayStyle.deltaAngle / 180) * 3.1415,
74
+ sprayStyle.deltaWidth,
75
+ sprayStyle.deltaHeight,
76
+ sprayStyle.pointSizeMin,
77
+ sprayStyle.pointSizeMax,
78
+ sprayStyle.speedMin,
79
+ sprayStyle.speedMax,
80
+ sprayStyle.lifeMin,
81
+ sprayStyle.lifeMax,
82
+ accelerate_x,
83
+ accelerate_y,
84
+ sprayStyle.enableFade,
85
+ sprayStyle.enableShrink
86
+ );
87
+ const view_width =
88
+ sprayStyle.deltaWidth === 0 ? 1 : 2 * sprayStyle.deltaWidth;
89
+ const view_height =
90
+ sprayStyle.deltaHeight === 0 ? 1 : 2 * sprayStyle.deltaHeight;
91
+ return ForgeExtension.RootActivity.ViewStore.add(
92
+ new Forge.ViewInfo(spray_view, {
93
+ x: 0,
94
+ y: 0,
95
+ width: view_width,
96
+ height: view_height,
97
+ })
98
+ );
99
+ };
100
+
101
+ export default {
102
+ props: {
103
+ pointRes: {
104
+ type: String,
105
+ required: true,
106
+ },
107
+ sprayStyle: {
108
+ type: Object,
109
+ required: true,
110
+ },
111
+ },
112
+ data() {
113
+ return {
114
+ viewId: -1,
115
+ };
116
+ },
117
+ methods: {
118
+ unloadView() {
119
+ if (this.viewId >= 0) {
120
+ ForgeExtension.RootActivity.ViewStore.remove(this.viewId);
121
+ this.viewId = -1;
122
+ }
123
+ },
124
+ },
125
+ created() {
126
+ this.viewId = buildForgeView(this.pointRes, this.sprayStyle);
127
+ },
128
+ updated() {
129
+ this.unloadView();
130
+ this.viewId = buildForgeView(this.pointRes, this.sprayStyle);
131
+ },
132
+ beforeUnmount() {
133
+ this.unloadView();
134
+ },
135
+ };
136
+ </script>
137
+
138
+ <template>
139
+ <div :jsv_innerview="viewId"></div>
140
+ </template>
@@ -0,0 +1,15 @@
1
+ /*
2
+ * @Author: ChenChanghua
3
+ * @Date: 2021-10-13 15:14:29
4
+ * @LastEditors: ChenChanghua
5
+ * @LastEditTime: 2021-10-18 14:09:04
6
+ * @Description: file content
7
+ */
8
+ //考虑到.vue文件除了export default的component外,还有可能export其他对象,因此使用import * as
9
+ import * as JsvSpray from "./JsvSpray.vue";
10
+ let _JsvSpray = JsvSpray;
11
+ if (window.JsvWidgetWrapperGroup && window.JsvWidgetWrapperGroup.BrowserSpray) {
12
+ _JsvSpray = window.JsvWidgetWrapperGroup.BrowserSpray;
13
+ }
14
+ let component = _JsvSpray.default;
15
+ export default component;