@shijiu/jsview-vue 0.9.490 → 0.9.590

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 (220) hide show
  1. package/dom/bin/jsview-browser-debug-dom.min.js +1 -1
  2. package/dom/bin/jsview-dom.min.js +1 -1
  3. package/dom/target_core_revision.js +4 -3
  4. package/index.js +10 -0
  5. package/package.json +8 -1
  6. package/patches/node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js +20 -6
  7. package/samples/AnimPicture/App.vue +89 -106
  8. package/samples/Basic/App.vue +65 -68
  9. package/samples/Basic/components/ContentBlock.vue +31 -36
  10. package/samples/Basic/components/anim/AnimGroup.vue +61 -75
  11. package/samples/Basic/components/anim/AnimKeyframeBasic.vue +54 -43
  12. package/samples/Basic/components/anim/AnimKeyframeComposite.vue +25 -31
  13. package/samples/Basic/components/anim/AnimTransition.vue +142 -105
  14. package/samples/Basic/components/div/DivBackground.vue +38 -16
  15. package/samples/Basic/components/div/DivClip.vue +143 -78
  16. package/samples/Basic/components/div/DivCssScoped.vue +10 -10
  17. package/samples/Basic/components/div/DivCssVar.vue +40 -42
  18. package/samples/Basic/components/div/DivGroup1.vue +45 -39
  19. package/samples/Basic/components/div/DivGroup2.vue +56 -45
  20. package/samples/Basic/components/div/DivLayout.vue +34 -5
  21. package/samples/Basic/components/div/DivRadius.vue +51 -42
  22. package/samples/Basic/components/div/DivTransform.vue +21 -16
  23. package/samples/Basic/components/panel/Panel1.vue +46 -44
  24. package/samples/Basic/components/panel/Panel2.vue +22 -26
  25. package/samples/Basic/components/panel/TitleBar.vue +12 -12
  26. package/samples/Basic/components/text/TextAlign.vue +54 -44
  27. package/samples/Basic/components/text/TextEmoji.vue +16 -20
  28. package/samples/Basic/components/text/TextFontStyle.vue +77 -53
  29. package/samples/Basic/components/text/TextGroup1.vue +46 -38
  30. package/samples/Basic/components/text/TextGroup2.vue +25 -28
  31. package/samples/Basic/components/text/TextOverflow.vue +76 -57
  32. package/samples/BasicFocusControl/App.vue +22 -43
  33. package/samples/BasicFocusControl/components/BaseBlock.vue +42 -43
  34. package/samples/BasicFocusControl/components/MainArea.vue +55 -70
  35. package/samples/BasicFocusControl/components/MainAreaLeftBlock.vue +11 -15
  36. package/samples/BasicFocusControl/components/MainAreaRightBlock.vue +21 -24
  37. package/samples/BasicFocusControl/components/SideBar.vue +32 -47
  38. package/samples/BasicFocusControl/components/SideBarBlock.vue +20 -23
  39. package/samples/ColorSpace/App.vue +15 -24
  40. package/samples/DemoHomepage/App.vue +7 -11
  41. package/samples/DemoHomepage/components/BodyFrame.vue +19 -9
  42. package/samples/DemoHomepage/components/TabFrame.vue +7 -8
  43. package/samples/DemoHomepage/router.js +33 -34
  44. package/samples/DemoHomepage/views/Homepage.vue +24 -8
  45. package/samples/FilterDemo/AnimatePic.vue +58 -0
  46. package/samples/FilterDemo/App.vue +99 -61
  47. package/samples/FilterDemo/VideoLayer.vue +62 -0
  48. package/samples/FlipCard/App.vue +32 -41
  49. package/samples/FlipCard/FlipCard.vue +48 -54
  50. package/samples/GridDemo/App.vue +109 -77
  51. package/samples/GridDemo/ButtonBlock.vue +50 -49
  52. package/samples/GridDemo/FocusItem.vue +19 -38
  53. package/samples/GridDemo/Item.vue +46 -54
  54. package/samples/HashHistory/App.vue +63 -79
  55. package/samples/HashHistory/components/HorizontalButtonList.vue +72 -95
  56. package/samples/HashHistory/components/Item.vue +42 -56
  57. package/samples/HashHistory/router.js +23 -12
  58. package/samples/HashHistory/views/MainPage.vue +35 -46
  59. package/samples/HashHistory/views/SubPage.vue +34 -47
  60. package/samples/Input/App.vue +2 -3
  61. package/samples/Input/FullKeyboard.vue +2 -6
  62. package/samples/Input/InputPanel.vue +2 -3
  63. package/samples/Input/KeyboardItem.vue +1 -1
  64. package/samples/LongImage/App.vue +11 -27
  65. package/samples/LongImage/Button.vue +50 -145
  66. package/samples/LongImage/ButtonItem.vue +44 -0
  67. package/samples/LongImage/LongImageScroll.vue +71 -106
  68. package/samples/LongImage/Scroll.vue +7 -9
  69. package/samples/LongText/App.vue +13 -28
  70. package/samples/LongText/Button.vue +43 -145
  71. package/samples/LongText/ButtonItem.vue +44 -0
  72. package/samples/LongText/LongTextScroll.vue +68 -101
  73. package/samples/LongText/Scroll.vue +7 -9
  74. package/samples/Marquee/App.vue +34 -37
  75. package/samples/MaskClip/App.vue +17 -30
  76. package/samples/MetroWidgetDemos/Advanced/App.vue +211 -0
  77. package/samples/MetroWidgetDemos/Advanced/ButtonItem.vue +90 -0
  78. package/samples/MetroWidgetDemos/Item.vue +67 -0
  79. package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/App.vue +80 -104
  80. package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/Item.vue +7 -0
  81. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/bg.jpg +0 -0
  82. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/coupon_content.png +0 -0
  83. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/coupon_left.png +0 -0
  84. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/coupon_mid.png +0 -0
  85. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/coupon_right.png +0 -0
  86. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/focus_border.png +0 -0
  87. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/holder_logo.png +0 -0
  88. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/jrbm.png +0 -0
  89. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/line_left.png +0 -0
  90. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/line_mid.png +0 -0
  91. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/line_right.png +0 -0
  92. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/loading.png +0 -0
  93. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/logo.png +0 -0
  94. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/mcjx.png +0 -0
  95. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/tao.png +0 -0
  96. package/samples/{ClassNameDemo → MetroWidgetDemos/PerformanceTest}/assets/tmall.png +0 -0
  97. package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/border.png +0 -0
  98. package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/components/ContentItem.vue +60 -86
  99. package/samples/{SimpleWidgetDemo → MetroWidgetDemos/PerformanceTest}/components/MyTab.vue +0 -0
  100. package/samples/MetroWidgetDemos/PerformanceTest/data.js +45 -0
  101. package/samples/MetroWidgetDemos/PingPong/App.vue +135 -0
  102. package/samples/MetroWidgetDemos/PingPong/AppPage.vue +58 -0
  103. package/samples/MetroWidgetDemos/PingPong/AppTab.vue +69 -0
  104. package/samples/MetroWidgetDemos/PingPong/Item.vue +92 -0
  105. package/samples/MetroWidgetDemos/PingPong/ViewSwiper.vue +214 -0
  106. package/samples/MetroWidgetDemos/Simple/App.vue +194 -0
  107. package/samples/MetroWidgetDemos/WidgetItem.vue +89 -0
  108. package/samples/MetroWidgetDemos/data.js +204 -0
  109. package/samples/NinePatchDemo/App.vue +114 -115
  110. package/samples/NinePatchDemo/Item.vue +7 -8
  111. package/samples/NinePatchDemo/assets/border.png +0 -0
  112. package/samples/Preload/App.vue +61 -63
  113. package/samples/Preload/Item.vue +21 -29
  114. package/samples/QrcodeDemo/App.vue +24 -29
  115. package/samples/SoundPool/App.vue +77 -106
  116. package/samples/SprayView/App.vue +10 -8
  117. package/samples/SpriteImage/App.vue +1 -2
  118. package/samples/TextBox/App.vue +86 -101
  119. package/samples/TextBox/RenderCenter.vue +1 -1
  120. package/samples/TextBox/RenderLeft.vue +1 -1
  121. package/samples/TextBox/RenderOneLine.vue +1 -1
  122. package/samples/TextBox/RenderRight.vue +1 -1
  123. package/samples/TextShadowDemo/App.vue +1 -2
  124. package/samples/TextureAnimation/App.vue +16 -13
  125. package/samples/TextureSize/App.vue +15 -25
  126. package/samples/ThrowMoveDemo/AccelerateDemo.vue +2 -4
  127. package/samples/ThrowMoveDemo/LRParabolicDemo.vue +2 -3
  128. package/samples/ThrowMoveDemo/TargetDemo.vue +3 -4
  129. package/samples/ThrowMoveDemo/UDParabolicDemo.vue +2 -3
  130. package/samples/TouchSample/App.vue +2 -3
  131. package/samples/TouchSample/Item.vue +15 -13
  132. package/samples/TouchSample/MetroWidgetHorizontal.vue +2 -2
  133. package/samples/TouchSample/MetroWidgetVertical.vue +1 -1
  134. package/samples/TouchSample/TouchContainerHorizontal.vue +4 -3
  135. package/samples/TouchSample/TouchContainerVertical.vue +3 -2
  136. package/samples/TransitPage/App.vue +20 -32
  137. package/samples/VideoDemo/App.vue +65 -81
  138. package/samples/VideoDemo/components/Button.vue +41 -52
  139. package/samples/VideoDemo/components/Controllor.vue +171 -169
  140. package/samples/VideoDemo/components/VideoFrame.vue +87 -99
  141. package/samples/VisibleSensorDemo/App.vue +167 -0
  142. package/scripts/jsview-jsmap-serve.js +42 -0
  143. package/scripts/jsview-post-build.js +6 -1
  144. package/scripts/jsview-post-install.js +1 -1
  145. package/tsconfig.json +3 -0
  146. package/utils/JsViewEngineWidget/JsvFocusBlock.vue +204 -193
  147. package/utils/JsViewEngineWidget/JsvFocusManager.js +30 -17
  148. package/utils/JsViewEngineWidget/MetroWidget/MetroWidget.vue +1557 -1656
  149. package/utils/JsViewEngineWidget/MetroWidget/PageUpdater.js +136 -0
  150. package/utils/JsViewEngineWidget/MetroWidget/ToolFunctions.js +18 -0
  151. package/utils/JsViewEngineWidget/SimpleWidget/SimpleWidget.vue +2 -0
  152. package/utils/JsViewEngineWidget/TemplateParser.js +111 -1
  153. package/utils/JsViewEngineWidget/WidgetCommon.js +8 -2
  154. package/utils/JsViewEngineWidget/index.js +4 -4
  155. package/utils/JsViewPlugin/JsvPlayer/GetVersion.js +1 -1
  156. package/utils/JsViewPlugin/JsvPlayer/JsvMedia.js +284 -57
  157. package/utils/JsViewPlugin/JsvPlayer/JsvPlayer.vue +5 -1
  158. package/utils/JsViewPlugin/JsvPlayer/JsvPlayerBrowser.vue +25 -12
  159. package/utils/JsViewPlugin/JsvPlayer/version.js +5 -5
  160. package/utils/JsViewVueTools/JsvRefTaker.js +35 -0
  161. package/utils/JsViewVueTools/index.js +19 -0
  162. package/utils/JsViewVueWidget/BrowserDebugWidget/BrowserQrcode.vue +25 -10
  163. package/utils/JsViewVueWidget/BrowserDebugWidget/JsvApic/BrowserApic.vue +1 -1
  164. package/utils/JsViewVueWidget/JsvFilterView.vue +59 -51
  165. package/utils/JsViewVueWidget/JsvGrid.vue +140 -42
  166. package/utils/JsViewVueWidget/JsvMaskClipDiv.vue +3 -1
  167. package/utils/JsViewVueWidget/JsvNativeSharedDiv.vue +8 -17
  168. package/utils/JsViewVueWidget/JsvNinePatch.vue +1 -1
  169. package/utils/JsViewVueWidget/JsvPosterDiv.vue +37 -7
  170. package/utils/JsViewVueWidget/JsvPosterImage.vue +34 -13
  171. package/utils/JsViewVueWidget/JsvPreload/JsvPreload.vue +2 -12
  172. package/utils/JsViewVueWidget/JsvQrcode/JsvQrcode.vue +13 -4
  173. package/utils/JsViewVueWidget/JsvSpray/JsvSpray.vue +13 -10
  174. package/utils/JsViewVueWidget/JsvSpriteAnim/index.js +2 -3
  175. package/utils/JsViewVueWidget/JsvTextureAnim/JsvTextureAnim.vue +25 -21
  176. package/utils/JsViewVueWidget/JsvTransparentDiv.vue +7 -8
  177. package/utils/JsViewVueWidget/JsvVisibleSensor/JsvVisibleSensor.vue +141 -0
  178. package/utils/JsViewVueWidget/JsvVisibleSensor/index.js +9 -0
  179. package/utils/JsViewVueWidget/index.js +42 -0
  180. package/samples/AdvanceMetroWidget/App.vue +0 -123
  181. package/samples/AdvanceMetroWidget/Frame.vue +0 -102
  182. package/samples/AdvanceMetroWidget/Item.vue +0 -63
  183. package/samples/AdvanceMetroWidget/data.js +0 -137
  184. package/samples/ClassNameDemo/App.vue +0 -119
  185. package/samples/ClassNameDemo/components/ContentItem.vue +0 -253
  186. package/samples/ClassNameDemo/components/LoadingView.vue +0 -43
  187. package/samples/ClassNameDemo/components/TitleView.vue +0 -24
  188. package/samples/ClassNameDemo/data.js +0 -24
  189. package/samples/FlowMultiWidget/App.vue +0 -91
  190. package/samples/FlowMultiWidget/assets/nine_patch_focus.png +0 -0
  191. package/samples/FlowMultiWidget/components/Block.vue +0 -107
  192. package/samples/FlowMultiWidget/components/FlowPage.vue +0 -60
  193. package/samples/FlowMultiWidget/components/Item.vue +0 -103
  194. package/samples/FlowMultiWidget/components/MenuItem.vue +0 -72
  195. package/samples/FlowMultiWidget/components/MyMenu.vue +0 -90
  196. package/samples/FlowMultiWidget/data.js +0 -446
  197. package/samples/HashHistory/views/BasePage.vue +0 -19
  198. package/samples/HashHistory/views/SubPageFirst.vue +0 -10
  199. package/samples/HashHistory/views/SubPageSecond.vue +0 -10
  200. package/samples/SimpleWidgetDemo/assets/bg.jpg +0 -0
  201. package/samples/SimpleWidgetDemo/assets/coupon_content.png +0 -0
  202. package/samples/SimpleWidgetDemo/assets/coupon_left.png +0 -0
  203. package/samples/SimpleWidgetDemo/assets/coupon_mid.png +0 -0
  204. package/samples/SimpleWidgetDemo/assets/coupon_right.png +0 -0
  205. package/samples/SimpleWidgetDemo/assets/focus_border.png +0 -0
  206. package/samples/SimpleWidgetDemo/assets/holder_logo.png +0 -0
  207. package/samples/SimpleWidgetDemo/assets/jrbm.png +0 -0
  208. package/samples/SimpleWidgetDemo/assets/line_left.png +0 -0
  209. package/samples/SimpleWidgetDemo/assets/line_mid.png +0 -0
  210. package/samples/SimpleWidgetDemo/assets/line_right.png +0 -0
  211. package/samples/SimpleWidgetDemo/assets/loading.png +0 -0
  212. package/samples/SimpleWidgetDemo/assets/logo.png +0 -0
  213. package/samples/SimpleWidgetDemo/assets/mcjx.png +0 -0
  214. package/samples/SimpleWidgetDemo/assets/tao.png +0 -0
  215. package/samples/SimpleWidgetDemo/assets/tmall.png +0 -0
  216. package/samples/SimpleWidgetDemo/data.js +0 -124
  217. package/utils/JsViewEngineWidget/MetroWidget/ContentView.vue +0 -63
  218. package/utils/JsViewEngineWidget/MetroWidget/DivWrapper.vue +0 -51
  219. package/utils/JsViewEngineWidget/MetroWidget/ItemView.vue +0 -213
  220. package/utils/JsViewEngineWidget/MetroWidget/RootView.vue +0 -154
@@ -22,6 +22,10 @@ export default {
22
22
  * 属性,int类型,底层使用的播放器类型。1:系统播放器;2:jsv播放器。默认2。
23
23
  */
24
24
  playerType: {type: Number, default: 2},
25
+ /**
26
+ * 属性,int类型,播放器解码方式。0:根据硬件能力自动匹配;1:硬解码;2:软解码。默认0(根据芯片能力自动匹配)。
27
+ */
28
+ decodeType: {type: Number, default: 0},
25
29
  /**
26
30
  * 属性,Boolean类型,层级关系,true表示在界面的下面,false表示在界面上面,默认true。
27
31
  */
@@ -222,7 +226,7 @@ export default {
222
226
  let first_create = true;
223
227
 
224
228
  if(!this.video){
225
- this.video = new JsvMediaVideo(this.holeId, player_type, key, background, designMap.width);
229
+ this.video = new JsvMediaVideo(this.holeId, player_type, key, background, designMap.width, this.decodeType);
226
230
  }else{
227
231
  this.video.setRef();
228
232
  first_create = false;
@@ -8,25 +8,38 @@ export default {
8
8
  playerType: {type: Number, default: 1}, // PC 模拟时,不对接本功能
9
9
  background: {type: Boolean, default: true}, // PC 模拟时,不对接本功能
10
10
  },
11
+ setup() {
12
+ return {
13
+ VideoRef: null
14
+ };
15
+ },
11
16
  methods: {
12
17
  onRefProxy(video_ref) {
13
- if (video_ref) {
14
- // 补充插件扩展出来的接口
15
- for (let method_name in playerExMethods) {
16
- video_ref[method_name] = playerExMethods[method_name].bind(video_ref);
17
- }
18
- } else {
19
- // video_ref为null,代表video标签卸载处理
20
- }
18
+ this.VideoRef = video_ref;
21
19
 
22
- // 将修改好的video回调返回给使用者
23
- if (this.onRef) {
24
- this.onRef(video_ref);
25
- }
20
+ // 不在此直接回调 onRef,因为onRefProxy可能会因为 .src的设置导致重新触发一次调用(vue本身问题)
21
+ // 参照vue-core处理的 componentUpdateFn处理, onMounted 一次, src设置后会再次 onPatch 一次
26
22
  }
27
23
  },
28
24
  mounted() {
25
+ if (this.VideoRef && this.onRef) {
26
+ let video_ref = this.VideoRef;
27
+ this.VideoRef = null;
28
+
29
+ // 补充插件扩展出来的接口
30
+ for (let method_name in playerExMethods) {
31
+ video_ref[method_name] = playerExMethods[method_name].bind(video_ref);
32
+ }
29
33
 
34
+ // 将修改好的video回调返回给使用者
35
+ this.onRef(video_ref);
36
+ }
37
+ },
38
+ beforeUnmount() {
39
+ if (this.onRef) {
40
+ // video_ref为null,代表video标签卸载处理
41
+ this.onRef(null);
42
+ }
30
43
  }
31
44
  };
32
45
 
@@ -1,17 +1,17 @@
1
1
  let PluginInfo={
2
- //downloadUrl:"http://192.168.0.37:8080/plugin/JsvPlayer-6.0.zip", //插件下载地址
2
+ // downloadUrl:"http://192.168.0.34:8080/plugin/JsvPlayer-160.dat", //插件下载地址
3
3
  packageName:"com.qcode.jsvplayer",
4
4
  name:"播放器插件",
5
- version:"1.4.8", //插件需要的版本号
6
- versionCodeMin:148,
7
- versionCodeMax:148,
5
+ version:"1.6.2", //插件需要的版本号
6
+ versionCodeMin:162,
7
+ versionCodeMax:162,
8
8
  bridgeName:"jsvPlayerBridge", //插件bridge注册到jsview的名称
9
9
  className:"com.qcode.jsvplayer.JsvPlayer", //插件初始化类名称
10
10
  initMethod:"createInstance", //插件初始化方法
11
11
  listener:"top.JsvPlayerPluginLoadResult", //插件加载结果回调
12
12
  listener2: "top.JsvPlayerPluginStatus",
13
13
  // debug:true,
14
- md5:"68be07d505e34d120ee95c5595ba6d73"
14
+ md5:"3efdfaa94325d7dbf81ae80fb4834143"
15
15
  };
16
16
 
17
17
  // 不要用export default,update-env脚本不能解析
@@ -0,0 +1,35 @@
1
+
2
+ /********************
3
+ * JsvRefTaker模块
4
+ *
5
+ * 用于解决 script setup 写法,不容易通过 this.$ref.xxxx 拿到子模块的句柄,
6
+ * 但使用ref(null)的方式构筑的深度reactive对象又会严重影响element的内部处理性能的问题
7
+ *
8
+ * 使用方法:
9
+ * <script setup>
10
+ * const element_ref = buildTaker();
11
+ *
12
+ * onMounted(()=>{
13
+ * // onMounted以后,可以用 .current 访问到引用
14
+ * console.log(element.current)
15
+ * })
16
+ * </script>
17
+ *
18
+ * <template>
19
+ * <div :ref="element_ref.fnc" />
20
+ * </template>
21
+ *
22
+ ********************/
23
+
24
+ function buildTaker() {
25
+ let pack = {
26
+ fnc: null,
27
+ current: null
28
+ }
29
+ pack.fnc = (r)=>{
30
+ pack.current = r;
31
+ }
32
+ return pack;
33
+ }
34
+
35
+ export default buildTaker;
@@ -0,0 +1,19 @@
1
+ /*
2
+ * @Author: ChenChanghua
3
+ * @Date: 2022-07-05 14:09:55
4
+ * @LastEditors: ChenChanghua
5
+ * @LastEditTime: 2022-07-06 11:03:34
6
+ * @Description: file content
7
+ */
8
+
9
+ export * from "./JsvHashHistory";
10
+ export * from "./JsvDynamicCssStyle.js";
11
+ export * from "./JsvDynamicKeyFrames.js";
12
+ export * from "./JsvRuntimeBridge.js";
13
+ export * from "./NinePatchHelper";
14
+ export * from "./TypeCheckAndSet";
15
+ export * from "./JsvRefTaker.js";
16
+ export * from "./JsvStyleClass.js";
17
+ export * from "./DebugContentShellJBridge.js";
18
+ export * from "./DebugTool.js";
19
+ export { default as DefaultKeyCodeMap } from "./DefaultKeyMap.js";
@@ -4,16 +4,29 @@ export default {
4
4
  props: {
5
5
  value: String,
6
6
  size: Number,
7
- fgColor: String,
8
- bgColor: String,
9
- level: String, // ,容错级别,分别是L(7%)、M(15%)、Q(25%)、H(30%),
7
+ fgColor: {
8
+ type: String,
9
+ default: "#000000"
10
+ },
11
+ bgColor: {
12
+ type: String,
13
+ default: "#ffffff"
14
+ },
15
+ level: {
16
+ type: String, // ,容错级别,分别是L(7%)、M(15%)、Q(25%)、H(30%),
17
+ default: "L"
18
+ },
10
19
  imageSettings: Object
11
20
  },
12
- data() {
21
+ setup() {
13
22
  return {
14
23
  imageStyle: null,
24
+ qrcodeRes: null,
15
25
  }
16
26
  },
27
+ created() {
28
+ this.qrcodeRes = this.renderQrcode();
29
+ },
17
30
  methods: {
18
31
  convertStr(str) {
19
32
  let out = "";
@@ -90,7 +103,7 @@ export default {
90
103
  const imageSettings = props.imageSettings;
91
104
  const size = props.size;
92
105
  if (!imageSettings) {
93
- return null;
106
+ return null;
94
107
  }
95
108
  const w = imageSettings.width;
96
109
  const h = imageSettings.height;
@@ -123,6 +136,8 @@ export default {
123
136
  left: calculatedImageSettings.x + margin,
124
137
  top: calculatedImageSettings.y + margin
125
138
  }
139
+ } else {
140
+ this.imageStyle = {}
126
141
  }
127
142
  const fgPath = this.generatePath(cells, margin);
128
143
  return {numCells, fgPath};
@@ -133,16 +148,16 @@ export default {
133
148
 
134
149
  <template>
135
150
  <div>
136
- <jsvsvg
151
+ <jsve-svg
137
152
  :type="'qrcode'"
138
153
  :shapeRendering="'crispEdges'"
139
154
  :height="size"
140
155
  :width="size"
141
- :viewBox="'0 0 ' + renderQrcode().numCells + ' ' + renderQrcode().numCells"
156
+ :viewBox="'0 0 ' + qrcodeRes.numCells + ' ' + qrcodeRes.numCells"
142
157
  >
143
- <jsvpath :fill="bgColor" :d="'M0,0 h' + renderQrcode().numCells + 'v' + renderQrcode().numCells + 'H0z'" />
144
- <jsvpath :fill="fgColor" :d="renderQrcode().fgPath" />
145
- </jsvsvg>
158
+ <jsve-path :fill="bgColor" :d="'M0,0 h' + qrcodeRes.numCells + 'v' + qrcodeRes.numCells + 'H0z'" />
159
+ <jsve-path :fill="fgColor" :d="qrcodeRes.fgPath" />
160
+ </jsve-svg>
146
161
  <div :style="imageStyle"></div>
147
162
  </div>
148
163
  </template>
@@ -120,5 +120,5 @@ export { LoopType };
120
120
  </script>
121
121
 
122
122
  <template>
123
- <jsvcanvas :id="canvasId" :style="style" />
123
+ <jsve-canvas :id="canvasId" :style="style" />
124
124
  </template>
@@ -6,68 +6,76 @@
6
6
  * height {int} 高
7
7
  * left {int} left位置
8
8
  * top {int} top位置
9
- * methods说明:
10
- * enableFilter
11
- @description 开关滤镜
12
- @params {boolean} enable 滤镜是否生效
9
+ * filterType {String} 滤镜设置:
10
+ * null: 无滤镜
11
+ * "gray-down": 黑白滤镜(公祭日滤镜)
13
12
  -->
14
- <script>
13
+ <script setup>
15
14
  import { Forge, ForgeExtension } from "../../dom/jsv-forge-define";
15
+ import { onBeforeUnmount, watchEffect } from "vue";
16
16
 
17
- export default {
18
- props: {
19
- width: {
20
- type: Number,
21
- },
22
- height: {
23
- type: Number,
24
- },
25
- left: {
26
- type: Number,
27
- default: 0,
28
- },
29
- top: {
30
- type: Number,
31
- default: 0,
32
- },
17
+ const props = defineProps({
18
+ width: {
19
+ type: Number,
33
20
  },
34
- setup() {
35
- return {
36
- filterView: null,
37
- };
21
+ height: {
22
+ type: Number,
38
23
  },
39
- created() {
40
- this.filterView = new Forge.FilterView();
41
- const view_store = ForgeExtension.RootActivity
42
- ? ForgeExtension.RootActivity.ViewStore
43
- : Forge.sViewStore;
44
- this.viewId = view_store.add(
45
- new Forge.ViewInfo(this.filterView, {
46
- x: this.left,
47
- y: this.top,
48
- width: this.width,
49
- height: this.height,
50
- })
51
- );
24
+ left: {
25
+ type: Number,
26
+ default: 0,
27
+ },
28
+ top: {
29
+ type: Number,
30
+ default: 0,
52
31
  },
53
- beforeUnmount() {
54
- const view_store = ForgeExtension.RootActivity
32
+ filterType: {
33
+ type: String,
34
+ default: null,
35
+ }
36
+ });
37
+
38
+ let filterView = new Forge.FilterView();
39
+ const view_store = ForgeExtension.RootActivity
40
+ ? ForgeExtension.RootActivity.ViewStore
41
+ : Forge.sViewStore;
42
+
43
+ let viewId = view_store.add(
44
+ new Forge.ViewInfo(filterView)
45
+ );
46
+
47
+ // 监控filter改变
48
+ watchEffect(() => {
49
+ if (filterView) {
50
+ console.log(`filterType change to ${props.filterType}`)
51
+ switch (props.filterType) {
52
+ case "gray-down":
53
+ filterView.FilterSwitch(true);
54
+ break;
55
+ default:
56
+ filterView.FilterSwitch(false);
57
+ }
58
+ }
59
+ });
60
+
61
+ onBeforeUnmount(() => {
62
+ const view_store = ForgeExtension.RootActivity
55
63
  ? ForgeExtension.RootActivity.ViewStore
56
64
  : Forge.sViewStore;
57
- view_store.remove(this.viewId);
58
- },
59
- methods: {
60
- enableFilter(enable) {
61
- if (this.filterView) {
62
- this.filterView.FilterSwitch(enable);
63
- }
64
- },
65
- },
66
- };
65
+ view_store.remove(viewId);
66
+ });
67
+
67
68
  </script>
68
69
 
69
70
  <template>
70
- <div :jsv_innerview="viewId">
71
+ <div
72
+ :style="{
73
+ left: left,
74
+ top: top,
75
+ width: width,
76
+ height: height
77
+ }"
78
+ :jsv_innerview="viewId">
71
79
  <slot></slot>
72
80
  </div>
73
81
  </template>
@@ -17,11 +17,18 @@
17
17
  * gapInfo {Object} 格子间隔设置 {row: 行间距, colum: 列间距}
18
18
  * verticalUpdate {boolean} 是否纵向滚动
19
19
  * columnFirst {boolean} 单页是否列优先排布
20
+ * loopUpdate {boolean} 焦点移动到边界时循环滚动
20
21
  * onEdge {function} 焦点移动到边缘时的回调
21
22
  * @params {object} edgeInfo {
22
23
  "direction": {EdgeDirection}边缘方向,
23
24
  "rect": 到达边缘时的区域{x: 0, y: 0, width: 0,height: 0}
24
25
  }
26
+ * focusMoveType {int} 焦点移动的模式, 可通过 | 运算进行组合
27
+ NO_ADJUST: 无特殊处理
28
+ COLUMN_LOOP: 到达列首/尾后跳转到上/下一列, 只在水平滚动时生效
29
+ ROW_LOOP: 到达行首/尾后跳转到上/下一行, 只在竖直滚动时生效
30
+ COLUMN_FIND_NEAR: 一列中没有下一个元素时是否跳转到相邻列
31
+ ROW_FIND_NEAR: 一行中没有下一个元素时是否跳转到相邻行
25
32
  * methods:
26
33
  getFocusBlockRef
27
34
  @description 获取focusBlock的引用
@@ -38,7 +45,9 @@
38
45
  {
39
46
  dataIndex: {int} 当前格子数据的index,
40
47
  gridIndex: {int} 当前格子的index,
48
+ selected: {boolean} 格子是否选中
41
49
  getCurrentFocusId: {function} 获取widget的当前焦点的dataIndex
50
+ gridCoord: {{row: 0, column: 0}} 获取当前格子的行列坐标
42
51
  }
43
52
  * onAction: 单元格内控件需要通过onAction.register方法注册 item 的回调,回调函数有
44
53
  onFocus, onBlur, onClick
@@ -84,7 +93,15 @@ class LineType extends UpdateType {
84
93
  }
85
94
  }
86
95
 
87
- export { PageType, LineType };
96
+ const FocusMoveType = {
97
+ NO_ADJUST: 0x00000000,
98
+ COLUMN_LOOP: 0x00000001,
99
+ ROW_LOOP: 0x00000001 << 1,
100
+ COLUMN_FIND_NEAR: 0x00000001 << 2,
101
+ ROW_FIND_NEAR: 0x00000001 << 3,
102
+ };
103
+
104
+ export { PageType, LineType, FocusMoveType };
88
105
 
89
106
  export default {
90
107
  props: {
@@ -141,6 +158,14 @@ export default {
141
158
  onEdge: {
142
159
  type: Function,
143
160
  },
161
+ loopUpdate: {
162
+ type: Boolean,
163
+ default: false,
164
+ },
165
+ focusMoveType: {
166
+ type: Number,
167
+ default: FocusMoveType.NO_ADJUST,
168
+ },
144
169
  },
145
170
  setup(props) {
146
171
  return {
@@ -166,6 +191,11 @@ export default {
166
191
  this.focusDataIndex = this._indexConvert(this.initFocusId);
167
192
  }
168
193
  this._updateData(this._getStartIndex(this.focusDataIndex, 1));
194
+ if (this.divInfoList[this._getDivIndex(this.focusDataIndex)]) {
195
+ this.divInfoList[
196
+ this._getDivIndex(this.focusDataIndex)
197
+ ].widgetData.selected = true;
198
+ }
169
199
  },
170
200
  methods: {
171
201
  _getCurrentFocusId() {
@@ -196,6 +226,11 @@ export default {
196
226
  dataIndex: -1,
197
227
  gridIndex: i,
198
228
  getCurrentFocusId: this._getCurrentFocusId,
229
+ gridCoord: {
230
+ column: i % this.column,
231
+ row: Math.floor(i / this.column),
232
+ },
233
+ selected: false,
199
234
  }),
200
235
  userData: reactive({}),
201
236
  };
@@ -218,6 +253,11 @@ export default {
218
253
  dataIndex: -1,
219
254
  gridIndex: i,
220
255
  getCurrentFocusId: this._getCurrentFocusId,
256
+ gridCoord: {
257
+ column: Math.floor(i / this.row),
258
+ row: i % this.row,
259
+ },
260
+ selected: false,
221
261
  }),
222
262
  userData: reactive({}),
223
263
  };
@@ -349,56 +389,86 @@ export default {
349
389
  },
350
390
  _moveTo(hOffset, vOffset) {
351
391
  let nextIndex = -1;
392
+ let mainOffset, subOffset, lineNum, mainFindNear, subFindNear, lineLoop;
352
393
  if (this.verticalUpdate) {
353
- if (hOffset != 0) {
354
- if (
355
- !(this.focusDataIndex % this.column == 0 && hOffset < 0) &&
356
- !(
357
- this.focusDataIndex % this.column == this.column - 1 &&
358
- hOffset > 0
359
- ) &&
360
- this.dataList[this.focusDataIndex + hOffset]
361
- ) {
362
- nextIndex = this.focusDataIndex + hOffset;
363
- }
364
- }
365
- if (vOffset != 0) {
366
- nextIndex = this.focusDataIndex + vOffset * this.column;
367
- if (nextIndex > 0 && !this.dataList[nextIndex]) {
368
- if (nextIndex <= this.dataInfo.endIndex) {
369
- nextIndex--;
370
- while (!this.dataList[nextIndex]) {
371
- nextIndex--;
394
+ mainOffset = vOffset;
395
+ subOffset = hOffset;
396
+ lineNum = this.column;
397
+ mainFindNear = this.focusMoveType & FocusMoveType.COLUMN_FIND_NEAR;
398
+ subFindNear = this.focusMoveType & FocusMoveType.ROW_FIND_NEAR;
399
+ lineLoop = this.focusMoveType & FocusMoveType.ROW_LOOP;
400
+ } else {
401
+ mainOffset = hOffset;
402
+ subOffset = vOffset;
403
+ lineNum = this.row;
404
+ mainFindNear = this.focusMoveType & FocusMoveType.ROW_FIND_NEAR;
405
+ subFindNear = this.focusMoveType & FocusMoveType.COLUMN_FIND_NEAR;
406
+ lineLoop = this.focusMoveType & FocusMoveType.COLUMN_LOOP;
407
+ }
408
+ if (mainOffset != 0) {
409
+ let i = this.focusDataIndex + mainOffset * lineNum;
410
+ if (this.dataList[i]) {
411
+ nextIndex = i;
412
+ } else if (i >= 0) {
413
+ //下一个为null, 找下一行的最后一个
414
+ if (mainFindNear) {
415
+ i = i - (i % this.column);
416
+ if (this.dataList[i]) {
417
+ while (this.dataList[i]) {
418
+ nextIndex = i;
419
+ i++;
372
420
  }
373
- } else {
374
- nextIndex = -1;
375
421
  }
376
422
  }
377
423
  }
378
- } else {
379
- if (vOffset != 0) {
380
- if (
381
- !(this.focusDataIndex % this.row == 0 && vOffset < 0) &&
382
- !(this.focusDataIndex % this.row == this.row - 1 && vOffset > 0) &&
383
- this.dataList[this.focusDataIndex + vOffset]
384
- ) {
385
- nextIndex = this.focusDataIndex + vOffset;
386
- }
387
- }
388
- if (hOffset != 0) {
389
- nextIndex = this.focusDataIndex + hOffset * this.row;
390
- if (nextIndex >= 0 && !this.dataList[nextIndex]) {
391
- if (nextIndex <= this.dataInfo.endIndex) {
392
- nextIndex--;
393
- while (!this.dataList[nextIndex]) {
394
- nextIndex--;
424
+ }
425
+
426
+ if (subOffset != 0) {
427
+ let i = (this.focusDataIndex % lineNum) + subOffset;
428
+ if (
429
+ i >= 0 &&
430
+ i < lineNum &&
431
+ this.dataList[this.focusDataIndex + subOffset]
432
+ ) {
433
+ nextIndex = this.focusDataIndex + subOffset;
434
+ } else {
435
+ if (lineLoop) {
436
+ i =
437
+ this.focusDataIndex +
438
+ subOffset * lineNum -
439
+ (this.focusDataIndex % lineNum);
440
+ if (subOffset < 0) {
441
+ //往前是到上一行末尾
442
+ i = i + lineNum - 1;
443
+ }
444
+ if (this.dataList[i]) {
445
+ nextIndex = i;
446
+ }
447
+ } else if (subFindNear) {
448
+ //只有未到边界时才找临近
449
+ if (i >= 0 && i < lineNum) {
450
+ for (
451
+ i = this.focusDataIndex + subOffset;
452
+ i >= this.startIndex;
453
+ i -= lineNum
454
+ ) {
455
+ if (this.dataList[i]) {
456
+ nextIndex = i;
457
+ break;
458
+ }
395
459
  }
396
- } else {
397
- nextIndex = -1;
398
460
  }
399
461
  }
400
462
  }
401
463
  }
464
+
465
+ if (nextIndex < 0 && this.loopUpdate) {
466
+ if (this.verticalUpdate && vOffset != 0) {
467
+ nextIndex = vOffset > 0 ? 0 : this.dataInfo.endIndex;
468
+ } else if (!this.verticalUpdate && hOffset != 0) {
469
+ nextIndex = hOffset > 0 ? 0 : this.dataInfo.endIndex;
470
+ }
471
+ }
402
472
  if (nextIndex >= 0) {
403
473
  let offset;
404
474
  if (hOffset !== 0) {
@@ -414,10 +484,16 @@ export default {
414
484
  this._getDivIndex(this.preFocusDataIndex)
415
485
  ]?.onAction.onBlur?.();
416
486
  }
487
+ this.divInfoList[
488
+ this._getDivIndex(this.preFocusDataIndex)
489
+ ].widgetData.selected = false;
417
490
  this._updateData(this._getStartIndex(nextIndex, offset));
418
491
  this.divInfoList[
419
492
  this._getDivIndex(this.focusDataIndex)
420
493
  ]?.onAction.onFocus?.();
494
+ this.divInfoList[
495
+ this._getDivIndex(this.focusDataIndex)
496
+ ].widgetData.selected = true;
421
497
  } else {
422
498
  let edgeDirection;
423
499
  if (hOffset > 0) {
@@ -503,12 +579,23 @@ export default {
503
579
  //焦点跳跃时之前的焦点可能不在divInfoList中
504
580
  this.divInfoList[this._getDivIndex(preIndex)]?.onAction.onBlur?.();
505
581
  }
582
+ if (this.divInfoList[this._getDivIndex(preIndex)]) {
583
+ this.divInfoList[
584
+ this._getDivIndex(preIndex)
585
+ ].widgetData.selected = false;
586
+ }
587
+
506
588
  this._updateData(this._getStartIndex(this.focusDataIndex, 1));
507
589
  if (this.focused) {
508
590
  this.divInfoList[
509
591
  this._getDivIndex(this.focusDataIndex)
510
592
  ]?.onAction.onFocus?.();
511
593
  }
594
+ if (this.divInfoList[this._getDivIndex(this.focusDataIndex)]) {
595
+ this.divInfoList[
596
+ this._getDivIndex(this.focusDataIndex)
597
+ ].widgetData.selected = true;
598
+ }
512
599
  }
513
600
  },
514
601
 
@@ -519,6 +606,12 @@ export default {
519
606
  this._getDivIndex(this.focusDataIndex)
520
607
  ]?.onAction.onBlur?.();
521
608
  }
609
+ if (this.divInfoList[this._getDivIndex(this.focusDataIndex)]) {
610
+ this.divInfoList[
611
+ this._getDivIndex(this.focusDataIndex)
612
+ ].widgetData.selected = false;
613
+ }
614
+
522
615
  this._formatData();
523
616
  this.startIndex = -1;
524
617
  this._cleanOldData();
@@ -532,6 +625,11 @@ export default {
532
625
  this._getDivIndex(this.focusDataIndex)
533
626
  ]?.onAction.onFocus?.();
534
627
  }
628
+ if (this.divInfoList[this._getDivIndex(this.focusDataIndex)]) {
629
+ this.divInfoList[
630
+ this._getDivIndex(this.focusDataIndex)
631
+ ].widgetData.selected = true;
632
+ }
535
633
  },
536
634
  },
537
635
  };
@@ -559,7 +657,7 @@ export default {
559
657
  top: item.top,
560
658
  width: itemSize.width,
561
659
  height: itemSize.height,
562
- visibility: item.widgetData.visibility ? 'visible' : 'hidden',
660
+ visibility: item.widgetData.visibility ? 'inherit' : 'hidden',
563
661
  }"
564
662
  >
565
663
  <slot
@@ -134,7 +134,7 @@ export default {
134
134
  // 初始化View
135
135
  this.innerView = new Forge.LayoutView();
136
136
  this.innerViewId = ForgeExtension.RootActivity.ViewStore.add(
137
- new Forge.ViewInfo(this.innerView, null)
137
+ new Forge.ViewInfo(this.innerView)
138
138
  );
139
139
  }
140
140
 
@@ -211,6 +211,8 @@ export default {
211
211
  :style="{
212
212
  top: style.top,
213
213
  left: style.left,
214
+ width: style.width,
215
+ height: style.height
214
216
  }"
215
217
  ></div>
216
218
  </template>