@shijiu/jsview-vue 0.9.502 → 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 (215) 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 +16 -5
  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 +32 -33
  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/Preload/App.vue +61 -63
  112. package/samples/Preload/Item.vue +21 -29
  113. package/samples/QrcodeDemo/App.vue +24 -29
  114. package/samples/SoundPool/App.vue +77 -106
  115. package/samples/SprayView/App.vue +10 -8
  116. package/samples/SpriteImage/App.vue +1 -2
  117. package/samples/TextBox/App.vue +86 -101
  118. package/samples/TextBox/RenderCenter.vue +1 -1
  119. package/samples/TextBox/RenderLeft.vue +1 -1
  120. package/samples/TextBox/RenderOneLine.vue +1 -1
  121. package/samples/TextBox/RenderRight.vue +1 -1
  122. package/samples/TextShadowDemo/App.vue +1 -2
  123. package/samples/TextureAnimation/App.vue +16 -13
  124. package/samples/TextureSize/App.vue +15 -25
  125. package/samples/ThrowMoveDemo/AccelerateDemo.vue +2 -4
  126. package/samples/ThrowMoveDemo/LRParabolicDemo.vue +2 -3
  127. package/samples/ThrowMoveDemo/TargetDemo.vue +3 -4
  128. package/samples/ThrowMoveDemo/UDParabolicDemo.vue +2 -3
  129. package/samples/TouchSample/App.vue +2 -3
  130. package/samples/TouchSample/Item.vue +15 -13
  131. package/samples/TouchSample/MetroWidgetHorizontal.vue +2 -2
  132. package/samples/TouchSample/MetroWidgetVertical.vue +1 -1
  133. package/samples/TouchSample/TouchContainerHorizontal.vue +4 -3
  134. package/samples/TouchSample/TouchContainerVertical.vue +3 -2
  135. package/samples/TransitPage/App.vue +20 -32
  136. package/samples/VideoDemo/App.vue +65 -81
  137. package/samples/VideoDemo/components/Button.vue +41 -52
  138. package/samples/VideoDemo/components/Controllor.vue +171 -169
  139. package/samples/VideoDemo/components/VideoFrame.vue +87 -99
  140. package/samples/VisibleSensorDemo/App.vue +167 -0
  141. package/scripts/jsview-jsmap-serve.js +42 -0
  142. package/scripts/jsview-post-install.js +1 -1
  143. package/tsconfig.json +3 -0
  144. package/utils/JsViewEngineWidget/JsvFocusBlock.vue +204 -193
  145. package/utils/JsViewEngineWidget/JsvFocusManager.js +30 -17
  146. package/utils/JsViewEngineWidget/MetroWidget/MetroWidget.vue +1555 -1656
  147. package/utils/JsViewEngineWidget/MetroWidget/PageUpdater.js +136 -0
  148. package/utils/JsViewEngineWidget/MetroWidget/ToolFunctions.js +18 -0
  149. package/utils/JsViewEngineWidget/TemplateParser.js +111 -1
  150. package/utils/JsViewEngineWidget/WidgetCommon.js +8 -2
  151. package/utils/JsViewEngineWidget/index.js +4 -4
  152. package/utils/JsViewPlugin/JsvPlayer/GetVersion.js +1 -1
  153. package/utils/JsViewPlugin/JsvPlayer/JsvMedia.js +264 -54
  154. package/utils/JsViewPlugin/JsvPlayer/JsvPlayer.vue +5 -1
  155. package/utils/JsViewPlugin/JsvPlayer/version.js +5 -5
  156. package/utils/JsViewVueTools/JsvRefTaker.js +35 -0
  157. package/utils/JsViewVueTools/index.js +19 -0
  158. package/utils/JsViewVueWidget/BrowserDebugWidget/BrowserQrcode.vue +8 -4
  159. package/utils/JsViewVueWidget/JsvFilterView.vue +59 -51
  160. package/utils/JsViewVueWidget/JsvGrid.vue +139 -41
  161. package/utils/JsViewVueWidget/JsvMaskClipDiv.vue +3 -1
  162. package/utils/JsViewVueWidget/JsvNativeSharedDiv.vue +8 -17
  163. package/utils/JsViewVueWidget/JsvNinePatch.vue +1 -1
  164. package/utils/JsViewVueWidget/JsvPosterDiv.vue +37 -7
  165. package/utils/JsViewVueWidget/JsvPosterImage.vue +34 -13
  166. package/utils/JsViewVueWidget/JsvPreload/JsvPreload.vue +2 -12
  167. package/utils/JsViewVueWidget/JsvQrcode/JsvQrcode.vue +1 -1
  168. package/utils/JsViewVueWidget/JsvSpray/JsvSpray.vue +13 -10
  169. package/utils/JsViewVueWidget/JsvSpriteAnim/index.js +2 -3
  170. package/utils/JsViewVueWidget/JsvTextureAnim/JsvTextureAnim.vue +25 -21
  171. package/utils/JsViewVueWidget/JsvTransparentDiv.vue +7 -8
  172. package/utils/JsViewVueWidget/JsvVisibleSensor/JsvVisibleSensor.vue +141 -0
  173. package/utils/JsViewVueWidget/JsvVisibleSensor/index.js +9 -0
  174. package/utils/JsViewVueWidget/index.js +42 -0
  175. package/samples/AdvanceMetroWidget/App.vue +0 -123
  176. package/samples/AdvanceMetroWidget/Frame.vue +0 -102
  177. package/samples/AdvanceMetroWidget/Item.vue +0 -63
  178. package/samples/AdvanceMetroWidget/data.js +0 -137
  179. package/samples/ClassNameDemo/App.vue +0 -119
  180. package/samples/ClassNameDemo/components/ContentItem.vue +0 -253
  181. package/samples/ClassNameDemo/components/LoadingView.vue +0 -43
  182. package/samples/ClassNameDemo/components/TitleView.vue +0 -24
  183. package/samples/ClassNameDemo/data.js +0 -24
  184. package/samples/FlowMultiWidget/App.vue +0 -91
  185. package/samples/FlowMultiWidget/assets/nine_patch_focus.png +0 -0
  186. package/samples/FlowMultiWidget/components/Block.vue +0 -107
  187. package/samples/FlowMultiWidget/components/FlowPage.vue +0 -60
  188. package/samples/FlowMultiWidget/components/Item.vue +0 -103
  189. package/samples/FlowMultiWidget/components/MenuItem.vue +0 -72
  190. package/samples/FlowMultiWidget/components/MyMenu.vue +0 -90
  191. package/samples/FlowMultiWidget/data.js +0 -446
  192. package/samples/HashHistory/views/BasePage.vue +0 -19
  193. package/samples/HashHistory/views/SubPageFirst.vue +0 -10
  194. package/samples/HashHistory/views/SubPageSecond.vue +0 -10
  195. package/samples/SimpleWidgetDemo/assets/bg.jpg +0 -0
  196. package/samples/SimpleWidgetDemo/assets/coupon_content.png +0 -0
  197. package/samples/SimpleWidgetDemo/assets/coupon_left.png +0 -0
  198. package/samples/SimpleWidgetDemo/assets/coupon_mid.png +0 -0
  199. package/samples/SimpleWidgetDemo/assets/coupon_right.png +0 -0
  200. package/samples/SimpleWidgetDemo/assets/focus_border.png +0 -0
  201. package/samples/SimpleWidgetDemo/assets/holder_logo.png +0 -0
  202. package/samples/SimpleWidgetDemo/assets/jrbm.png +0 -0
  203. package/samples/SimpleWidgetDemo/assets/line_left.png +0 -0
  204. package/samples/SimpleWidgetDemo/assets/line_mid.png +0 -0
  205. package/samples/SimpleWidgetDemo/assets/line_right.png +0 -0
  206. package/samples/SimpleWidgetDemo/assets/loading.png +0 -0
  207. package/samples/SimpleWidgetDemo/assets/logo.png +0 -0
  208. package/samples/SimpleWidgetDemo/assets/mcjx.png +0 -0
  209. package/samples/SimpleWidgetDemo/assets/tao.png +0 -0
  210. package/samples/SimpleWidgetDemo/assets/tmall.png +0 -0
  211. package/samples/SimpleWidgetDemo/data.js +0 -124
  212. package/utils/JsViewEngineWidget/MetroWidget/ContentView.vue +0 -63
  213. package/utils/JsViewEngineWidget/MetroWidget/DivWrapper.vue +0 -51
  214. package/utils/JsViewEngineWidget/MetroWidget/ItemView.vue +0 -213
  215. package/utils/JsViewEngineWidget/MetroWidget/RootView.vue +0 -154
@@ -1,41 +1,49 @@
1
+ <script setup>
2
+ import ContentBlock from "../ContentBlock";
3
+ import TextAlign from "./TextAlign";
4
+ import TextFontStyle from "./TextFontStyle";
5
+ import TextOverflow from "./TextOverflow";
6
+
7
+ const props = defineProps({
8
+ contentClass: String,
9
+ itemSides: Object,
10
+ });
11
+
12
+ const contentBlockProps = {
13
+ colIndex: 0,
14
+ itemSides: props.itemSides,
15
+ };
16
+ </script>
17
+
1
18
  <template>
2
- <div id='item-root'>
3
- <ContentBlock :class=contentClass :style="{ top: itemSides.height*0}" :=contentBlockProps :index=0 title="文字对齐">
4
- <TextAlign/>
5
- </ContentBlock>
6
- <ContentBlock :class=contentClass :style="{ top: itemSides.height*1}" :=contentBlockProps :index=1 title="字体和字号">
7
- <TextFontStyle/>
8
- </ContentBlock>
9
- <ContentBlock :class=contentClass :style="{ top: itemSides.height*2}" :="{...contentBlockProps, itemSides: {...itemSides, height:290}}" :index=2 title="文字折行">
10
- <TextOverflow/>
11
- </ContentBlock>
12
- </div>
19
+ <div id="item-root">
20
+ <ContentBlock
21
+ :class="contentClass"
22
+ :style="{ top: itemSides.height * 0 }"
23
+ :="contentBlockProps"
24
+ :index="0"
25
+ title="文字对齐"
26
+ >
27
+ <TextAlign />
28
+ </ContentBlock>
29
+ <ContentBlock
30
+ :class="contentClass"
31
+ :style="{ top: itemSides.height * 1 }"
32
+ :="contentBlockProps"
33
+ :index="1"
34
+ title="字体和字号"
35
+ >
36
+ <TextFontStyle />
37
+ </ContentBlock>
38
+ <ContentBlock
39
+ :class="contentClass"
40
+ :style="{ top: itemSides.height * 2 }"
41
+ :="{ ...contentBlockProps, itemSides: { ...itemSides, height: 290 } }"
42
+ :index="2"
43
+ title="文字折行"
44
+ >
45
+ <TextOverflow />
46
+ </ContentBlock>
47
+ </div>
13
48
  </template>
14
49
 
15
- <script>
16
- import ContentBlock from '../ContentBlock';
17
- import TextAlign from './TextAlign';
18
- import TextFontStyle from './TextFontStyle';
19
- import TextOverflow from './TextOverflow';
20
-
21
- export default {
22
- props: {
23
- contentClass: String,
24
- itemSides: Object
25
- },
26
- components: {
27
- ContentBlock,
28
- TextAlign,
29
- TextFontStyle,
30
- TextOverflow
31
- },
32
- computed: {
33
- contentBlockProps() {
34
- return {
35
- colIndex: 0,
36
- itemSides: this.itemSides
37
- }
38
- }
39
- }
40
- }
41
- </script>
@@ -1,31 +1,28 @@
1
+ <script setup>
2
+ import ContentBlock from "../ContentBlock";
3
+ import TextEmoji from "./TextEmoji";
4
+
5
+ const props = defineProps({
6
+ contentClass: String,
7
+ itemSides: Object,
8
+ });
9
+
10
+ const contentBlockProps = {
11
+ colIndex: 0,
12
+ itemSides: props.itemSides,
13
+ };
14
+ </script>
1
15
  <template>
2
- <div id='item-root'>
3
- <ContentBlock :class=contentClass :style="{ top: itemSides.height*0}" :=contentBlockProps :index=0 title="文字对齐">
4
- <TextEmoji/>
5
- </ContentBlock>
6
- </div>
16
+ <div id="item-root">
17
+ <ContentBlock
18
+ :class="contentClass"
19
+ :style="{ top: itemSides.height * 0 }"
20
+ :="contentBlockProps"
21
+ :index="0"
22
+ title="文字对齐"
23
+ >
24
+ <TextEmoji />
25
+ </ContentBlock>
26
+ </div>
7
27
  </template>
8
28
 
9
- <script>
10
- import ContentBlock from '../ContentBlock';
11
- import TextEmoji from './TextEmoji';
12
-
13
- export default {
14
- props: {
15
- contentClass: String,
16
- itemSides: Object
17
- },
18
- components: {
19
- ContentBlock,
20
- TextEmoji,
21
- },
22
- computed: {
23
- contentBlockProps() {
24
- return {
25
- colIndex: 0,
26
- itemSides: this.itemSides
27
- }
28
- }
29
- }
30
- }
31
- </script>
@@ -1,86 +1,105 @@
1
+ <script setup>
2
+ const gap = 5;
3
+ const blockSize = {
4
+ width: 180,
5
+ height: 35,
6
+ };
7
+ const baseStyle = {
8
+ width: blockSize.width,
9
+ height: blockSize.height,
10
+ backgroundColor: "rgba(255, 255, 0, 0.5)",
11
+ color: "rgba(255, 0, 0, 1)",
12
+ };
13
+ const multiLine =
14
+ "多行文字(末尾省略):" +
15
+ '\n第一行:我末尾有个"\\n"' +
16
+ "\n第二行:一二三四五六七八九十,一二三四五六七八九十,一二三四五六七八九十" +
17
+ "\n第三行:一二三四五六七八九十,一二三四五六七八九十,一二三四五六七八九十";
18
+ </script>
19
+
1
20
  <template>
2
- <div id='layout-root'>
3
- <div class="content-font" :style="{ ...baseStyle,
21
+ <div id="layout-root">
22
+ <div
23
+ class="content-font"
24
+ :style="{
25
+ ...baseStyle,
4
26
  whiteSpace: 'nowrap',
5
27
  textOverflow: 'clip',
6
- overflow: 'hidden'}">
7
- 1.长文字截断,后面的文字你可能看不到
28
+ overflow: 'hidden',
29
+ }"
30
+ >
31
+ 1.长文字截断,后面的文字你可能看不到
8
32
  </div>
9
33
 
10
- <div class="content-font" :style="{ ...baseStyle,
11
- top: blockSize.height+gap,
34
+ <div
35
+ class="content-font"
36
+ :style="{
37
+ ...baseStyle,
38
+ top: blockSize.height + gap,
12
39
  whiteSpace: 'nowrap',
13
40
  textOverflow: 'ellipsis',
14
- overflow: 'hidden'}">
15
- 2.长文字省略,后面的文字你可能看不到
41
+ overflow: 'hidden',
42
+ }"
43
+ >
44
+ 2.长文字省略,后面的文字你可能看不到
16
45
  </div>
17
46
 
18
- <div class="content-font" :style="{ ...baseStyle,
19
- top: (blockSize.height+gap)*2,
47
+ <div
48
+ class="content-font"
49
+ :style="{
50
+ ...baseStyle,
51
+ top: (blockSize.height + gap) * 2,
20
52
  whiteSpace: 'pre-wrap',
21
53
  textOverflow: 'clip',
22
- overflow: 'hidden'}">
23
- 3.长文字折行+截断,后面的文字你可能看不到,与PC效果有区别,一二三四五六七八九十
54
+ overflow: 'hidden',
55
+ }"
56
+ >
57
+ 3.长文字折行+截断,后面的文字你可能看不到,与PC效果有区别,一二三四五六七八九十
24
58
  </div>
25
59
 
26
- <div class="content-font" :style="{ ...baseStyle,
27
- top: (blockSize.height+gap)*3,
60
+ <div
61
+ class="content-font"
62
+ :style="{
63
+ ...baseStyle,
64
+ top: (blockSize.height + gap) * 3,
28
65
  whiteSpace: 'pre-wrap',
29
66
  textOverflow: 'ellipsis',
30
- overflow: 'hidden'}">
31
- 4.长文字折行+省略,后面的文字你可能看不到,与PC效果有区别,一二三四五六七八九十
67
+ overflow: 'hidden',
68
+ }"
69
+ >
70
+ 4.长文字折行+省略,后面的文字你可能看不到,与PC效果有区别,一二三四五六七八九十
32
71
  </div>
33
72
 
34
- <div class="content-font" :style="{ ...baseStyle,
35
- top: (blockSize.height+gap)*4, height: 65,
73
+ <div
74
+ class="content-font"
75
+ :style="{
76
+ ...baseStyle,
77
+ top: (blockSize.height + gap) * 4,
78
+ height: 65,
36
79
  whiteSpace: 'pre-wrap',
37
80
  textOverflow: 'ellipsis',
38
- overflow: 'hidden'}">
39
- 5.{{multiLine}}
81
+ overflow: 'hidden',
82
+ }"
83
+ >
84
+ 5.{{ multiLine }}
40
85
  </div>
41
86
 
42
- <div class="content-font" :style="{ ...baseStyle,
43
- top: (blockSize.height+gap)*4+67, height: 65,
87
+ <div
88
+ class="content-font"
89
+ :style="{
90
+ ...baseStyle,
91
+ top: (blockSize.height + gap) * 4 + 67,
92
+ height: 65,
44
93
  whiteSpace: 'pre-wrap',
45
94
  textOverflow: 'clip',
46
- overflow: 'hidden'}">
47
- 6.{{multiLine}}
95
+ overflow: 'hidden',
96
+ }"
97
+ >
98
+ 6.{{ multiLine }}
48
99
  </div>
49
-
50
- </div>
100
+ </div>
51
101
  </template>
52
102
 
53
- <script>
54
- export default {
55
- computed: {
56
- gap() {
57
- return 5;
58
- },
59
- blockSize() {
60
- return {
61
- width: 180,
62
- height: 35,
63
- }
64
- },
65
- baseStyle() {
66
- return {
67
- width: this.blockSize.width, height: this.blockSize.height,
68
- backgroundColor: 'rgba(255, 255, 0, 0.5)',
69
- color: 'rgba(255, 0, 0, 1)',
70
- }
71
- },
72
- // 多行的处理,在PC端依靠CSS属性 white-space: pre-line,在JsView平台不需要特别属性
73
- multiLine() {
74
- return "多行文字(末尾省略):"
75
- + "\n第一行:我末尾有个\"\\n\""
76
- + "\n第二行:一二三四五六七八九十,一二三四五六七八九十,一二三四五六七八九十"
77
- + "\n第三行:一二三四五六七八九十,一二三四五六七八九十,一二三四五六七八九十";
78
- }
79
- }
80
- }
81
-
82
- </script>
83
-
84
103
  <style>
85
104
  @import "../FontStyle.css";
86
105
  </style>
@@ -56,53 +56,32 @@
56
56
  *
57
57
  -->
58
58
 
59
- <script lang="ts">
60
- import { Options, Vue } from "vue-class-component";
61
- import MainArea from "./components/MainArea.vue"
62
- import SideBar from "./components/SideBar.vue"
59
+ <script setup>
60
+ import { useRouter } from "vue-router";
61
+ import MainArea from "./components/MainArea.vue";
62
+ import SideBar from "./components/SideBar.vue";
63
63
 
64
- @Options({
65
- components: {
66
- MainArea,
67
- SideBar
64
+ const router = useRouter();
65
+ const onKeyDown = (ev) => {
66
+ // 有router时,是从DemoHomepage进入,回退,和本demo功能无关
67
+ // 8:Backspace, 27:Escape, 10000:盒子返回键
68
+ if (ev.keyCode == 8 || ev.keyCode == 27 || ev.keyCode == 10000) {
69
+ router.go(-1);
70
+ return true;
68
71
  }
69
- })
70
- export default
71
- class App extends Vue {
72
- constructor(props: object) {
73
- super(props);
74
- }
75
-
76
- onDidRef(ref: any) {
77
- // 如果使用这种全局切换焦点的方式,请换一个唯一的函数名,防止二次集成时出现函数覆盖。
78
- (this.$root as any).changeFocusInDemoSpace = (relativeName: String) => {
79
- console.log('Change focus to: ' + relativeName)
80
- ref.findBlockByName(relativeName).requestFocus()
81
- }
82
- }
83
-
84
- onKeyDown(ev: any) {
85
- // 有router时,是从DemoHomepage进入,回退,和本demo功能无关
86
- // 8:Backspace, 27:Escape, 10000:盒子返回键
87
- if(ev.keyCode == 8 || ev.keyCode == 27 || ev.keyCode == 10000) {
88
- console.log("Basic has this.$router: ", !!(this as any).$router);
89
- (this as any).$router?.go(-1);
90
- return true
91
- }
92
- return false;
93
- }
94
- }
72
+ return false;
73
+ };
95
74
  </script>
96
75
 
97
76
  <template>
98
- <!-- 这里的jsv-focus-block只是为了获取到一个base focus节点,并不是必须的 -->
99
- <jsv-focus-block :ref="onDidRef" :onKeyDown="onKeyDown">
100
- <div class="title">可上下左右切换焦点</div>
101
- <div class="body">
102
- <MainArea :style="{left: 0}"/>
103
- <SideBar :style="{left: 300}"/>
104
- </div>
105
- </jsv-focus-block>
77
+ <!-- 这里的jsv-focus-block只是为了获取到一个base focus节点,并不是必须的 -->
78
+ <jsv-focus-block :onKeyDown="onKeyDown">
79
+ <div class="title">可上下左右切换焦点</div>
80
+ <div class="body">
81
+ <MainArea :style="{ left: 0 }" />
82
+ <SideBar :style="{ left: 300 }" />
83
+ </div>
84
+ </jsv-focus-block>
106
85
  </template>
107
86
 
108
87
  <style scoped>
@@ -115,7 +94,7 @@ class App extends Vue {
115
94
  top: 50;
116
95
  width: 400;
117
96
  height: 50;
118
- background-color: rgba(27,38,151,0.8);
97
+ background-color: rgba(27, 38, 151, 0.8);
119
98
  }
120
99
 
121
100
  .body {
@@ -1,51 +1,50 @@
1
- <script lang="ts">
2
- import { Options, Vue } from "vue-class-component";
3
-
4
- @Options({
5
- props: {
6
- name: String,
7
- style: { type:Object, default: {}},
8
- onKeyDown: Function
1
+ <script setup>
2
+ import { ref, onMounted } from "vue";
3
+ const props = defineProps({
4
+ name: String,
5
+ style: {
6
+ type: Object,
7
+ default() {
8
+ return {};
9
+ },
9
10
  },
10
- })
11
- export default
12
- class BaseBlock extends Vue {
13
- constructor(props: object) {
14
- super(props);
15
- }
16
-
17
- mounted() {
18
- this.fullName = this.blockRef.getName();
19
- }
20
-
21
- private getActionCallback() {
22
- const onAction = {
23
- onKeyDown: this.onKeyDown,
24
- onFocus: () => {
25
- this.hasFocused = true;
26
- },
27
- onBlur: () => {
28
- this.hasFocused = false;
29
- }
30
- }
11
+ onKeyDown: Function,
12
+ });
31
13
 
32
- return onAction;
33
- }
14
+ const fullName = ref("");
15
+ const blockRef = ref(null);
16
+ const hasFocused = ref(false);
34
17
 
35
- private onKeyDown?: Function = undefined;
36
- private hasFocused: Boolean = false;
37
- private fullName: String = "";
38
- private readonly blockRef: any = null;
39
- }
18
+ onMounted(() => {
19
+ fullName.value = blockRef.value.getName();
20
+ });
21
+ const onFocus = () => {
22
+ hasFocused.value = true;
23
+ };
24
+ const onBlur = () => {
25
+ hasFocused.value = false;
26
+ };
40
27
  </script>
41
28
 
42
29
  <template>
43
- <jsv-focus-block ref="blockRef" :name="name" :onAction="getActionCallback()">
44
- <div :style="{...$props.style,
45
- width: 100, height: 100,
46
- backgroundColor: (hasFocused ? 'rgba(255,0,0,1)' : 'rgba(0,255,0,1)')}"
30
+ <jsv-focus-block
31
+ ref="blockRef"
32
+ :name="name"
33
+ :onAction="{
34
+ onKeyDown,
35
+ onFocus,
36
+ onBlur,
37
+ }"
47
38
  >
48
- {{ fullName }}
49
- </div>
50
- </jsv-focus-block>
39
+ <div
40
+ :style="{
41
+ ...$props.style,
42
+ width: 100,
43
+ height: 100,
44
+ backgroundColor: hasFocused ? 'rgba(255,0,0,1)' : 'rgba(0,255,0,1)',
45
+ }"
46
+ >
47
+ {{ fullName }}
48
+ </div>
49
+ </jsv-focus-block>
51
50
  </template>
@@ -1,81 +1,66 @@
1
- <script lang="ts">
2
- import { JsvFocusEvent } from "jsview/utils/JsViewEngineWidget";
3
- import { Options, Vue } from "vue-class-component";
4
- import MainAreaLeftBlock from "./MainAreaLeftBlock.vue"
5
- import MainAreaRightBlock from "./MainAreaRightBlock.vue"
1
+ <script setup>
2
+ import MainAreaLeftBlock from "./MainAreaLeftBlock.vue";
3
+ import MainAreaRightBlock from "./MainAreaRightBlock.vue";
4
+ import { useFocusHub } from "jsview";
6
5
 
7
- @Options({
8
- components: {
9
- MainAreaLeftBlock,
10
- MainAreaRightBlock
6
+ const focusHub = useFocusHub();
7
+ window.focusHub = focusHub
8
+ let focusRow = 0;
9
+ let focusColumn = 0;
10
+ const onKeyDown = (ev) => {
11
+ // 子节点未处理的按键事件会流向此节点
12
+ let keyUsed = true;
13
+ switch (ev.keyCode) {
14
+ case 38: // Up
15
+ focusRow = 0;
16
+ break;
17
+ case 40: // Down
18
+ focusRow = 1;
19
+ break;
20
+ case 37: // Left
21
+ focusColumn = 0;
22
+ break;
23
+ case 39: // Right
24
+ focusColumn = 1;
25
+ break;
26
+ default:
27
+ keyUsed = false;
11
28
  }
12
- })
13
- export default
14
- class MainArea extends Vue {
15
- constructor(props: object) {
16
- super(props);
17
- }
18
-
19
- private getActionCallback() {
20
- const onAction = {
21
- onKeyDown: (ev: JsvFocusEvent) => {
22
- // 子节点未处理的按键事件会流向此节点
23
- let keyUsed = true;
24
- switch (ev.keyCode) {
25
- case 38: // Up
26
- this.focusRow = 0;
27
- break;
28
- case 40: // Down
29
- this.focusRow = 1;
30
- break;
31
- case 37: // Left
32
- this.focusColumn= 0;
33
- break;
34
- case 39: // Right
35
- this.focusColumn= 1;
36
- break;
37
- default:
38
- keyUsed = false;
39
- }
40
-
41
- if (keyUsed) {
42
- // 焦点与之前相同时也可以重复调用,焦点管理系统内容有是否变更的判断处理
43
- const name = `main.R${this.focusRow}C${this.focusColumn}`;
44
- (this.$root as any).changeFocusInDemoSpace(name);
45
- }
46
29
 
47
- return keyUsed;
48
- },
49
-
50
- onFocus: () => {
51
- // this.focusRow = 0;
52
- // this.focusColumn = 0;
53
- const name = `main.R${this.focusRow}C${this.focusColumn}`;
54
- (this.$root as any).changeFocusInDemoSpace(name);
55
- }
56
- };
57
- return onAction;
30
+ if (keyUsed) {
31
+ // 焦点与之前相同时也可以重复调用,焦点管理系统内容有是否变更的判断处理
32
+ const name = `main.R${focusRow}C${focusColumn}`;
33
+ focusHub.setFocus(name);
58
34
  }
59
35
 
60
- private focusRow: number = 0;
61
- private focusColumn: number = 0;
62
- }
36
+ return keyUsed;
37
+ };
38
+
39
+ const onFocus = () => {
40
+ const name = `main.R${focusRow}C${focusColumn}`;
41
+ focusHub.setFocus(name);
42
+ };
63
43
  </script>
64
44
 
65
45
  <template>
66
- <!--jsv-focus-block是不可描画节点,所以如果想接收style等属性,不要放在顶级-->
67
- <div>
68
- <!-- 这里的jsv-focus-block只是一个namesapce的样例,并不是必须的,
46
+ <!--jsv-focus-block是不可描画节点,所以如果想接收style等属性,不要放在顶级-->
47
+ <div>
48
+ <!-- 这里的jsv-focus-block只是一个namesapce的样例,并不是必须的,
69
49
  如果你App中的焦点在一个命名空间下,这里可以用name,参考SideBar。 -->
70
- <jsv-focus-block namespace="main"
71
- autoFocus :onAction="getActionCallback()"
72
- >
73
- <MainAreaLeftBlock name="R0C0" :style="{ left: 0, top: 0 }"/>
74
- <MainAreaLeftBlock name="R1C0" :style="{ left: 0, top: 120 }"/>
75
- <MainAreaRightBlock name="R0C1" :style="{ left: 120, top: 0 }"/>
76
- <MainAreaRightBlock name="R1C1" :style="{ left: 120, top: 120 }"/>
77
- </jsv-focus-block>
78
- </div>
50
+ <jsv-focus-block
51
+ namespace="main"
52
+ autoFocus
53
+ :onAction="{
54
+ onKeyDown,
55
+ onFocus,
56
+ }"
57
+ >
58
+ <MainAreaLeftBlock name="R0C0" :style="{ left: 0, top: 0 }" />
59
+ <MainAreaLeftBlock name="R1C0" :style="{ left: 0, top: 120 }" />
60
+ <MainAreaRightBlock name="R0C1" :style="{ left: 120, top: 0 }" />
61
+ <MainAreaRightBlock name="R1C1" :style="{ left: 120, top: 120 }" />
62
+ </jsv-focus-block>
63
+ </div>
79
64
  </template>
80
65
 
81
66
  <style scoped>
@@ -88,7 +73,7 @@ class MainArea extends Vue {
88
73
  top: 50;
89
74
  width: 400;
90
75
  height: 50;
91
- background-color: rgba(27,38,151,0.8);
76
+ background-color: rgba(27, 38, 151, 0.8);
92
77
  }
93
78
 
94
79
  .body {
@@ -1,21 +1,17 @@
1
- <script lang="ts">
2
- import { Options, Vue } from "vue-class-component";
3
- import BaseBlock from "./BaseBlock.vue"
1
+ <script setup>
2
+ import BaseBlock from "./BaseBlock.vue";
4
3
 
5
- @Options({
6
- props: {
7
- name: String,
8
- style: { type:Object, default: {}}
4
+ defineProps({
5
+ name: String,
6
+ style: {
7
+ type: Object,
8
+ default() {
9
+ return {};
10
+ },
9
11
  },
10
- components: {
11
- BaseBlock
12
- }
13
- })
14
- export default
15
- class MainAreaLeftBlock extends Vue {
16
- }
12
+ });
17
13
  </script>
18
14
 
19
15
  <template>
20
- <BaseBlock :name="$props.name" :style="$props.style"/>
16
+ <BaseBlock :name="name" :style="style" />
21
17
  </template>