@saooti/octopus-sdk 40.2.19 → 41.0.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 (214) hide show
  1. package/index.ts +2 -1
  2. package/package.json +4 -3
  3. package/src/App.vue +71 -95
  4. package/src/components/composable/player/usePlayerLive.ts +13 -4
  5. package/src/components/composable/player/usePlayerLogic.ts +6 -6
  6. package/src/components/composable/player/usePlayerVast.ts +7 -7
  7. package/src/components/composable/podcasts/usePodcastView.ts +3 -3
  8. package/src/components/composable/route/useAdvancedParamInit.ts +1 -1
  9. package/src/components/composable/route/useRouteUpdateParams.ts +4 -4
  10. package/src/components/composable/route/useSimplePageParam.ts +15 -8
  11. package/src/components/composable/useInit.ts +2 -2
  12. package/src/components/composable/useMetaTitleWatch.ts +2 -2
  13. package/src/components/display/accessibility/AccessibilityModal.vue +56 -68
  14. package/src/components/display/categories/CategoryChooser.vue +144 -145
  15. package/src/components/display/categories/CategoryFilter.vue +172 -198
  16. package/src/components/display/categories/CategoryList.vue +122 -147
  17. package/src/components/display/comments/CommentInput.vue +100 -122
  18. package/src/components/display/comments/CommentList.vue +169 -191
  19. package/src/components/display/comments/CommentName.vue +35 -45
  20. package/src/components/display/comments/CommentParentInfo.vue +28 -34
  21. package/src/components/display/comments/CommentPlayer.vue +38 -50
  22. package/src/components/display/comments/CommentSection.vue +85 -103
  23. package/src/components/display/comments/item/CommentBasicView.vue +48 -61
  24. package/src/components/display/comments/item/CommentItem.vue +104 -115
  25. package/src/components/display/comments/item/CommentMoreActions.vue +174 -189
  26. package/src/components/display/comments/item/CommentMoreActionsAdmin.vue +1 -3
  27. package/src/components/display/comments/like/LikeButton.vue +36 -41
  28. package/src/components/display/comments/like/LikeSection.vue +128 -136
  29. package/src/components/display/comments/modal/CheckIdentityModal.vue +35 -40
  30. package/src/components/display/comments/modal/EditCommentModal.vue +72 -78
  31. package/src/components/display/comments/modal/RecaptchaModal.vue +58 -63
  32. package/src/components/display/comments/modal/ReportAbuseModal.vue +59 -66
  33. package/src/components/display/edit/EditBox.vue +9 -8
  34. package/src/components/display/edit/EditBoxRadio.vue +1 -5
  35. package/src/components/display/emission/EmissionInlineList.vue +82 -97
  36. package/src/components/display/emission/EmissionItem.vue +57 -69
  37. package/src/components/display/emission/EmissionList.vue +189 -218
  38. package/src/components/display/emission/EmissionPlayerItem.vue +47 -64
  39. package/src/components/display/emission/EmissionPresentationItem.vue +44 -54
  40. package/src/components/display/emission/EmissionPresentationList.vue +51 -61
  41. package/src/components/display/filter/AdvancedSearch.vue +151 -176
  42. package/src/components/display/filter/CategorySearchFilter.vue +43 -46
  43. package/src/components/display/filter/DateFilter.vue +76 -91
  44. package/src/components/display/filter/MonetizableFilter.vue +27 -30
  45. package/src/components/display/filter/ProductorSearch.vue +87 -90
  46. package/src/components/display/filter/RubriqueChoice.vue +58 -63
  47. package/src/components/display/filter/RubriqueFilter.vue +154 -169
  48. package/src/components/display/filter/SearchOrder.vue +35 -35
  49. package/src/components/display/list/ListPaginate.vue +72 -93
  50. package/src/components/display/list/PaginateParams.vue +36 -40
  51. package/src/components/display/list/PaginateSection.vue +113 -124
  52. package/src/components/display/list/SwiperList.vue +97 -109
  53. package/src/components/display/live/CountDown.vue +15 -9
  54. package/src/components/display/live/CountdownOctopus.vue +16 -10
  55. package/src/components/display/live/LiveHorizontalList.vue +95 -103
  56. package/src/components/display/live/LiveItem.vue +64 -73
  57. package/src/components/display/live/LiveList.vue +125 -137
  58. package/src/components/display/live/RadioCurrently.vue +66 -73
  59. package/src/components/display/live/RadioImage.vue +39 -50
  60. package/src/components/display/live/RadioItem.vue +9 -14
  61. package/src/components/display/live/RadioList.vue +39 -53
  62. package/src/components/display/live/RadioPlanning.vue +210 -222
  63. package/src/components/display/organisation/OrganisationChooser.vue +116 -122
  64. package/src/components/display/organisation/OrganisationChooserLight.vue +44 -52
  65. package/src/components/display/participant/ParticipantInlineList.vue +42 -58
  66. package/src/components/display/participant/ParticipantItem.vue +66 -74
  67. package/src/components/display/participant/ParticipantList.vue +116 -141
  68. package/src/components/display/playlist/PlaylistItem.vue +33 -46
  69. package/src/components/display/playlist/PlaylistList.vue +115 -144
  70. package/src/components/display/playlist/PodcastList.vue +90 -103
  71. package/src/components/display/playlist/PodcastPlaylistInlineList.vue +58 -70
  72. package/src/components/display/podcastmaker/PodcastmakerHeader.vue +21 -22
  73. package/src/components/display/podcasts/AnimatorsItem.vue +15 -16
  74. package/src/components/display/podcasts/DownloadPodcastButton.vue +21 -29
  75. package/src/components/display/podcasts/ParticipantDescription.vue +22 -24
  76. package/src/components/display/podcasts/PodcastFilterList.vue +62 -56
  77. package/src/components/display/podcasts/PodcastImage.vue +96 -99
  78. package/src/components/display/podcasts/PodcastInlineList.vue +30 -28
  79. package/src/components/display/podcasts/PodcastInlineListTemplate.vue +107 -114
  80. package/src/components/display/podcasts/PodcastIsPlaying.vue +4 -12
  81. package/src/components/display/podcasts/PodcastItem.vue +48 -63
  82. package/src/components/display/podcasts/PodcastItemInfo.vue +19 -35
  83. package/src/components/display/podcasts/PodcastList.vue +182 -206
  84. package/src/components/display/podcasts/PodcastModuleBox.vue +100 -137
  85. package/src/components/display/podcasts/PodcastPlannedSpinner.vue +4 -6
  86. package/src/components/display/podcasts/PodcastPlayBar.vue +50 -61
  87. package/src/components/display/podcasts/PodcastPlayBasicButton.vue +38 -41
  88. package/src/components/display/podcasts/PodcastPlayButton.vue +164 -175
  89. package/src/components/display/podcasts/PodcastRawTranscript.vue +69 -80
  90. package/src/components/display/podcasts/PodcastRubriqueList.vue +35 -38
  91. package/src/components/display/podcasts/PodcastSwiperList.vue +100 -110
  92. package/src/components/display/podcasts/TagList.vue +48 -50
  93. package/src/components/display/podcasts/VideoModuleBox.vue +13 -24
  94. package/src/components/display/rubriques/RubriqueChooser.vue +135 -140
  95. package/src/components/display/rubriques/RubriqueList.vue +140 -160
  96. package/src/components/display/sharing/ChooseEpisodesNumber.vue +34 -33
  97. package/src/components/display/sharing/FormatSwitch.vue +16 -11
  98. package/src/components/display/sharing/PlayerAnonymousModal.vue +24 -27
  99. package/src/components/display/sharing/PlayerCommonParameters.vue +20 -13
  100. package/src/components/display/sharing/PlayerParameters.vue +69 -71
  101. package/src/components/display/sharing/QrCode.vue +55 -67
  102. package/src/components/display/sharing/ShareAnonymous.vue +160 -178
  103. package/src/components/display/sharing/ShareDistribution.vue +103 -117
  104. package/src/components/display/sharing/ShareNewsletter.vue +154 -161
  105. package/src/components/display/sharing/SharePlayer.vue +273 -295
  106. package/src/components/display/sharing/SharePlayerColors.vue +25 -16
  107. package/src/components/display/sharing/SharePlayerRadio.vue +61 -69
  108. package/src/components/display/sharing/SharePlayerTypes.vue +176 -176
  109. package/src/components/display/sharing/ShareSocialsButtons.vue +63 -75
  110. package/src/components/display/sharing/SubscribeButtons.vue +184 -207
  111. package/src/components/display/studio/RecordingItemButton.vue +1 -4
  112. package/src/components/form/ClassicCheckbox.vue +26 -30
  113. package/src/components/form/ClassicContentEditable.vue +37 -33
  114. package/src/components/form/ClassicCopyButton.vue +40 -44
  115. package/src/components/form/ClassicDatePicker.vue +114 -114
  116. package/src/components/form/ClassicEmojiPicker.vue +20 -28
  117. package/src/components/form/ClassicInputText.vue +116 -120
  118. package/src/components/form/ClassicLoading.vue +7 -12
  119. package/src/components/form/ClassicMultiselect.vue +115 -117
  120. package/src/components/form/ClassicRadio.vue +21 -16
  121. package/src/components/form/ClassicRadioLabel.vue +23 -22
  122. package/src/components/form/ClassicSearch.vue +24 -19
  123. package/src/components/form/ClassicSelect.vue +47 -38
  124. package/src/components/form/ClassicWysiwyg.vue +116 -123
  125. package/src/components/icons/AmazonMusicIcon.vue +7 -10
  126. package/src/components/icons/ApplePodcastIcon.vue +7 -11
  127. package/src/components/icons/BlueSkyIcon.vue +8 -11
  128. package/src/components/icons/DeezerIcon.vue +8 -11
  129. package/src/components/icons/EditFtpIcon.vue +8 -11
  130. package/src/components/icons/IHeartIcon.vue +8 -11
  131. package/src/components/icons/PlayVideoIcon.vue +7 -10
  132. package/src/components/icons/PlayerFmIcon.vue +7 -10
  133. package/src/components/icons/PocketCastIcon.vue +8 -11
  134. package/src/components/icons/PodcastAddictIcon.vue +7 -10
  135. package/src/components/icons/RadiolineIcon.vue +8 -11
  136. package/src/components/icons/TuninIcon.vue +8 -11
  137. package/src/components/icons/XIcon.vue +7 -10
  138. package/src/components/misc/AcpmImage.vue +6 -7
  139. package/src/components/misc/ClassicAccordion.vue +26 -31
  140. package/src/components/misc/ClassicLazy.vue +86 -90
  141. package/src/components/misc/ClassicNav.vue +16 -20
  142. package/src/components/misc/ClassicPopover.vue +271 -282
  143. package/src/components/misc/ClassicSpinner.vue +5 -27
  144. package/src/components/misc/ErrorMessage.vue +11 -12
  145. package/src/components/misc/FooterGarSection.vue +33 -41
  146. package/src/components/misc/FooterSection.vue +94 -131
  147. package/src/components/misc/HomeDropdown.vue +83 -105
  148. package/src/components/misc/MobileMenu.vue +101 -111
  149. package/src/components/misc/ProgressBar.vue +53 -62
  150. package/src/components/misc/TopBar.vue +98 -120
  151. package/src/components/misc/TopBarMainContent.vue +114 -133
  152. package/src/components/misc/modal/ClassicModal.vue +40 -33
  153. package/src/components/misc/modal/ClassicModalInBody.vue +34 -28
  154. package/src/components/misc/modal/ClipboardModal.vue +27 -30
  155. package/src/components/misc/modal/ContractPreviewModal.vue +64 -62
  156. package/src/components/misc/modal/MessageModal.vue +50 -47
  157. package/src/components/misc/modal/NewsletterModal.vue +30 -31
  158. package/src/components/misc/modal/QrCodeModal.vue +21 -21
  159. package/src/components/misc/modal/ShareModalPlayer.vue +43 -52
  160. package/src/components/misc/player/PlayerCompact.vue +6 -4
  161. package/src/components/misc/player/PlayerComponent.vue +8 -9
  162. package/src/components/misc/player/PlayerLarge.vue +9 -8
  163. package/src/components/misc/player/ads/AdsProgressBar.vue +8 -11
  164. package/src/components/misc/player/ads/AdsSkipButton.vue +24 -30
  165. package/src/components/misc/player/chaptering/ChapteringModal.vue +44 -54
  166. package/src/components/misc/player/chaptering/PlayerChaptering.vue +50 -62
  167. package/src/components/misc/player/elements/PlayerImage.vue +51 -57
  168. package/src/components/misc/player/elements/PlayerPlayButton.vue +81 -92
  169. package/src/components/misc/player/elements/PlayerSpeedButton.vue +23 -27
  170. package/src/components/misc/player/elements/PlayerTitle.vue +85 -111
  171. package/src/components/misc/player/progressbar/PlayerProgressBar.vue +18 -29
  172. package/src/components/misc/player/progressbar/PodcastProgressBar.vue +45 -56
  173. package/src/components/misc/player/radio/RadioHistory.vue +80 -99
  174. package/src/components/misc/player/radio/RadioProgressBar.vue +43 -54
  175. package/src/components/misc/player/video/PlayerVideo.vue +27 -40
  176. package/src/components/misc/player/video/PlayerVideoDigiteka.vue +32 -37
  177. package/src/components/misc/player/video/PlayerVideoHls.vue +199 -198
  178. package/src/components/misc/player/video/PlayerYoutubeEmbed.vue +10 -12
  179. package/src/components/pages/CategoryPage.vue +28 -33
  180. package/src/components/pages/EmissionPage.vue +113 -132
  181. package/src/components/pages/EmissionsPage.vue +2 -0
  182. package/src/components/pages/Error403Page.vue +21 -20
  183. package/src/components/pages/HomePage.vue +91 -100
  184. package/src/components/pages/LivesPage.vue +35 -37
  185. package/src/components/pages/MapPage.vue +209 -241
  186. package/src/components/pages/PageLogout.vue +8 -11
  187. package/src/components/pages/PageNotFound.vue +9 -5
  188. package/src/components/pages/ParticipantPage.vue +96 -110
  189. package/src/components/pages/ParticipantsPage.vue +3 -0
  190. package/src/components/pages/PlaylistPage.vue +112 -117
  191. package/src/components/pages/PlaylistsPage.vue +9 -2
  192. package/src/components/pages/PodcastPage.vue +224 -238
  193. package/src/components/pages/PodcastsPage.vue +9 -2
  194. package/src/components/pages/RadioPage.vue +56 -70
  195. package/src/components/pages/RubriquePage.vue +7 -3
  196. package/src/components/pages/SearchPage.vue +31 -36
  197. package/src/components/pages/TagPage.vue +11 -9
  198. package/src/components/pages/VideoPage.vue +14 -11
  199. package/src/helper/displayHelper.ts +1 -1
  200. package/src/helper/loadScript.ts +4 -4
  201. package/src/i18n.ts +2 -2
  202. package/src/main.ts +1 -1
  203. package/src/router/router.ts +17 -4
  204. package/src/stores/AuthStore.ts +12 -12
  205. package/src/stores/FilterStore.ts +1 -1
  206. package/src/stores/VastStore.ts +2 -2
  207. package/src/stores/class/general/player.ts +1 -0
  208. package/public/css/fonts/icomoon.eot +0 -0
  209. package/public/css/fonts/icomoon.svg +0 -113
  210. package/public/css/fonts/icomoon.ttf +0 -0
  211. package/public/css/fonts/icomoon.woff +0 -0
  212. package/public/css/fonts/icomoon.woff2 +0 -0
  213. package/public/css/fonts/style.css +0 -352
  214. package/sonarqube-scanner.js +0 -10
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <div v-if="playerRadioHistory.length" class="d-flex align-items-center mt-3">
3
3
  <div class="fw-bold me-3">
4
- {{ $t("Previously") + ":" }}
4
+ {{ t("Previously") + ":" }}
5
5
  </div>
6
6
  <button
7
7
  v-if="indexStart !== 0"
@@ -13,8 +13,8 @@
13
13
  <div ref="historyListContainer" class="history-list-container">
14
14
  <div
15
15
  v-for="(pastItem, index) in playerRadioHistory"
16
+ :id="'history' + index"
16
17
  :key="pastItem.title"
17
- :ref="'history' + index"
18
18
  class="d-flex flex-shrink-0"
19
19
  >
20
20
  <div class="d-flex flex-shrink-0 align-items-end">
@@ -35,111 +35,92 @@
35
35
  </div>
36
36
  </template>
37
37
 
38
- <script lang="ts">
38
+ <script setup lang="ts">
39
39
  import ChevronLeftIcon from "vue-material-design-icons/ChevronLeft.vue";
40
40
  import ChevronRightIcon from "vue-material-design-icons/ChevronRight.vue";
41
41
  import { usePlayerStore } from "../../../../stores/PlayerStore";
42
- import { mapState } from "pinia";
43
42
  import dayjs from "dayjs";
44
43
  import radioHelper from "../../../../helper/radio/radioHelper";
45
- import { defineComponent } from "vue";
44
+ import { computed, nextTick, onMounted, onUnmounted, ref, useTemplateRef, watch } from "vue";
46
45
  import { MediaRadio } from "@/stores/class/general/player";
47
- export default defineComponent({
48
- name: "RadioHistory",
46
+ import { useI18n } from "vue-i18n";
49
47
 
50
- components: {
51
- ChevronLeftIcon,
52
- ChevronRightIcon,
53
- },
54
- emits: ["updateNotListenTime"],
55
- data() {
56
- return {
57
- indexStart: 0 as number,
58
- indexNotDisplay: 100 as number,
59
- };
60
- },
61
48
 
62
- computed: {
63
- ...mapState(usePlayerStore, ["playerRadio"]),
64
- playerRadioHistory() {
65
- return this.playerRadio?.history ?? [];
66
- },
67
- },
68
- watch: {
69
- playerRadioHistory: {
70
- deep: true,
71
- immediate: true,
72
- handler() {
73
- this.$nextTick(() => {
74
- this.handleResize(0);
75
- });
76
- },
77
- },
78
- },
79
- created() {
80
- window.addEventListener("resize", () => {
81
- this.handleResize(0);
82
- });
83
- },
84
- unmounted() {
85
- window.removeEventListener("resize", () => {
86
- this.handleResize(0);
87
- });
88
- },
89
- mounted() {
90
- this.handleResize(0);
91
- },
92
- methods: {
93
- displayEverythingAfterIndex(indexAsked: number) {
94
- for (let index = 0; index < this.playerRadioHistory.length; index++) {
95
- const el = (this.$refs["history" + index] as Array<HTMLElement>)[0];
96
- if (!el) continue;
97
- if (index < indexAsked && !el.classList.contains("hid")) {
98
- el.classList.add("hid");
99
- continue;
100
- }
101
- if (index >= indexAsked && el.classList.contains("hid")) {
102
- el.classList.remove("hid");
103
- }
104
- }
105
- },
106
- handleResize(indexAsked: number): void {
107
- const historyList = this.$refs.historyListContainer as HTMLElement;
108
- if (null === historyList || !historyList) {
109
- return;
110
- }
111
- this.indexStart = indexAsked;
112
- this.indexNotDisplay = this.playerRadioHistory.length;
113
- this.displayEverythingAfterIndex(indexAsked);
114
- for (
115
- let index = this.indexStart + 1;
116
- index < this.playerRadioHistory.length;
117
- index++
118
- ) {
119
- const el = (this.$refs["history" + index] as Array<HTMLElement>)[0];
120
- if (!el) continue;
121
- if (index > this.indexNotDisplay && !el.classList.contains("hid")) {
122
- el.classList.add("hid");
123
- continue;
124
- }
125
- const parent = el.parentElement;
126
- if (parent && el.offsetLeft + el.clientWidth > parent.clientWidth) {
127
- this.indexNotDisplay = index;
128
- el.classList.add("hid");
129
- }
130
- }
131
- },
132
- displayTimeItem(item: MediaRadio): string {
133
- return dayjs(item.startDate).format("HH:mm");
134
- },
135
- displayPreviousItem(item: MediaRadio): string {
136
- if (item.podcastId) {
137
- return item.title;
138
- }
139
- return radioHelper.displayTitle(item);
140
- },
141
- },
142
- });
49
+ //Data
50
+ const indexStart = ref(0);
51
+ const indexNotDisplay = ref(100);
52
+ const historyListContainerRef = useTemplateRef('historyListContainer');
53
+
54
+ //Composables
55
+ const { t } = useI18n();
56
+ const playerStore = usePlayerStore();
57
+
58
+
59
+ //Computed
60
+ const playerRadioHistory = computed(() => playerStore.playerRadio?.history ?? []);
61
+
62
+
63
+ //Watch
64
+ watch(playerRadioHistory, () => {
65
+ nextTick(() => {
66
+ handleResize(0);
67
+ });
68
+ }, {deep: true,immediate: true});
69
+
70
+
71
+ onMounted(()=>window.addEventListener("resize", () => {handleResize(0);}))
72
+ onUnmounted(()=>window.removeEventListener("resize", () => {handleResize(0);}))
73
+
74
+
75
+ //Methods
76
+ function displayEverythingAfterIndex(indexAsked: number) {
77
+ for (let index = 0; index < playerRadioHistory.value.length; index++) {
78
+ const el = historyListContainerRef?.value?.querySelector('#history' + index);
79
+ if (!el) continue;
80
+ if (index < indexAsked && !el.classList.contains("hid")) {
81
+ el.classList.add("hid");
82
+ continue;
83
+ }
84
+ if (index >= indexAsked && el.classList.contains("hid")) {
85
+ el.classList.remove("hid");
86
+ }
87
+ }
88
+ }
89
+ function handleResize(indexAsked: number): void {
90
+ const historyList = historyListContainerRef?.value as HTMLElement;
91
+ if (null === historyList || !historyList) {
92
+ return;
93
+ }
94
+ indexStart.value = indexAsked;
95
+ indexNotDisplay.value = playerRadioHistory.value.length;
96
+ displayEverythingAfterIndex(indexAsked);
97
+ for (
98
+ let index = indexStart.value + 1;
99
+ index < playerRadioHistory.value.length;
100
+ index++
101
+ ) {
102
+ const el = historyListContainerRef?.value?.querySelector('#history' + index);
103
+ if (!el) continue;
104
+ if (index > indexNotDisplay.value && !el.classList.contains("hid")) {
105
+ el.classList.add("hid");
106
+ continue;
107
+ }
108
+ const parent = el.parentElement;
109
+ if (parent && el.offsetLeft + el.clientWidth > parent.clientWidth) {
110
+ indexNotDisplay.value = index;
111
+ el.classList.add("hid");
112
+ }
113
+ }
114
+ }
115
+ function displayTimeItem(item: MediaRadio): string {
116
+ return dayjs(item.startDate).format("HH:mm");
117
+ }
118
+ function displayPreviousItem(item: MediaRadio): string {
119
+ if (item.podcastId) {
120
+ return item.title;
121
+ }
122
+ return radioHelper.displayTitle(item);
123
+ }
143
124
  </script>
144
125
  <style lang="scss">
145
126
  .octopus-app {
@@ -4,67 +4,56 @@
4
4
  min="0"
5
5
  max="100"
6
6
  :value="percentProgress"
7
- :aria-label="$t('Radio')"
7
+ :aria-label="t('Radio')"
8
8
  :class="isAmbiance ? 'ambiance-progress' : ''"
9
9
  />
10
10
  </template>
11
11
 
12
- <script lang="ts">
12
+ <script setup lang="ts">
13
13
  import { usePlayerStore } from "../../../../stores/PlayerStore";
14
- import { mapState, mapActions } from "pinia";
15
14
  import dayjs from "dayjs";
16
- import { defineComponent } from "vue";
17
- export default defineComponent({
18
- name: "RadioProgressBar",
15
+ import { useI18n } from "vue-i18n";
16
+ import { computed, onMounted, onUnmounted, ref, Ref } from "vue";
19
17
 
20
- components: {},
21
- emits: ["updateNotListenTime"],
22
- data() {
23
- return {
24
- percentInterval: undefined as ReturnType<typeof setTimeout> | undefined,
25
- };
26
- },
18
+ //Data
19
+ const percentInterval: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined);
27
20
 
28
- computed: {
29
- ...mapState(usePlayerStore, ["playerRadio", "playerElapsed"]),
30
- isAmbiance(): boolean {
31
- return !this.playerRadio?.podcast?.podcastId;
32
- },
33
- percentProgress(): number {
34
- if (!this.playerElapsed) {
35
- return 0;
36
- }
37
- return this.playerElapsed * 100;
38
- },
39
- },
40
- mounted() {
41
- this.handlePercentInterval();
42
- },
43
- unmounted() {
44
- clearInterval(this.percentInterval as unknown as number);
45
- },
46
- methods: {
47
- ...mapActions(usePlayerStore, ["playerUpdateElapsed"]),
48
- handlePercentInterval(): void {
49
- this.percentInterval = setInterval(() => {
50
- this.calculatePercent();
51
- }, 1000);
52
- },
53
- calculatePercent(): void {
54
- if (!this.playerRadio?.metadata) {
55
- return;
56
- }
57
- const actualMilliSecondsPlayed = dayjs()
58
- .subtract(18, "second")
59
- .diff(dayjs(this.playerRadio.metadata.startDate));
60
- const percentPlayed =
61
- actualMilliSecondsPlayed /
62
- (this.playerRadio?.metadata.playDuration * 1000);
63
- this.playerUpdateElapsed(
64
- percentPlayed,
65
- this.playerRadio?.metadata.playDuration,
66
- );
67
- },
68
- },
21
+ //Composables
22
+ const { t } = useI18n();
23
+ const playerStore = usePlayerStore();
24
+
25
+
26
+ //Computed
27
+ const isAmbiance = computed(() => !playerStore.playerRadio?.podcast?.podcastId);
28
+ const percentProgress = computed(() => {
29
+ if (!playerStore.playerElapsed) {
30
+ return 0;
31
+ }
32
+ return playerStore.playerElapsed * 100;
69
33
  });
34
+
35
+
36
+ onMounted(()=>handlePercentInterval())
37
+ onUnmounted(()=>clearInterval(percentInterval.value as unknown as number))
38
+
39
+
40
+ //Methods
41
+ function handlePercentInterval(): void {
42
+ percentInterval.value = setInterval(() => {calculatePercent();}, 1000);
43
+ }
44
+ function calculatePercent(): void {
45
+ if (!playerStore.playerRadio?.metadata) {
46
+ return;
47
+ }
48
+ const actualMilliSecondsPlayed = dayjs()
49
+ .subtract(18, "second")
50
+ .diff(dayjs(playerStore.playerRadio.metadata.startDate));
51
+ const percentPlayed =
52
+ actualMilliSecondsPlayed /
53
+ (playerStore.playerRadio?.metadata.playDuration * 1000);
54
+ playerStore.playerUpdateElapsed(
55
+ percentPlayed,
56
+ playerStore.playerRadio?.metadata.playDuration,
57
+ );
58
+ }
70
59
  </script>
@@ -1,24 +1,23 @@
1
1
  <template>
2
2
  <teleport to=".octopus-app">
3
- <template v-if="playerVideo">
3
+ <template v-if="playerStore.playerVideo">
4
4
  <button class="btn btn-transparent video-close" @click="closePlayer">
5
5
  <WindowCloseIcon />
6
6
  </button>
7
7
  <div class="video-wrapper">
8
8
  <PlayerYoutubeEmbed v-if="youtubeId" :youtube-id="youtubeId" />
9
- <PlayerVideoDigiteka v-else-if="!playerLive" :video-id="playerPodcast?.video?.videoId" />
9
+ <PlayerVideoDigiteka v-else-if="!playerStore.playerLive" :video-id="playerStore.playerPodcast?.video?.videoId" />
10
10
  <PlayerVideoHls v-else :hls-url="hlsVideoUrl" :is-secured="isSecured"/>
11
11
  </div>
12
12
  </template>
13
13
  </teleport>
14
14
  </template>
15
- <script lang="ts">
15
+ <script setup lang="ts">
16
16
  import youtubeVideoHelper from "../../../../helper/youtubeVideoHelper";
17
17
  import WindowCloseIcon from "vue-material-design-icons/WindowClose.vue";
18
18
  import { usePlayerStore } from "../../../../stores/PlayerStore";
19
19
  import { useApiStore } from "../../../../stores/ApiStore";
20
- import { mapState, mapActions } from "pinia";
21
- import { defineComponent, defineAsyncComponent } from "vue";
20
+ import { defineAsyncComponent, ref, Ref, computed, onMounted } from "vue";
22
21
  const PlayerVideoDigiteka = defineAsyncComponent(
23
22
  () => import("../video/PlayerVideoDigiteka.vue"),
24
23
  );
@@ -28,44 +27,32 @@ const PlayerVideoHls = defineAsyncComponent(
28
27
  const PlayerYoutubeEmbed = defineAsyncComponent(
29
28
  () => import("../video/PlayerYoutubeEmbed.vue"),
30
29
  );
31
- export default defineComponent({
32
- name: "PlayerVideo",
33
30
 
34
- components: {
35
- PlayerVideoDigiteka,
36
- PlayerVideoHls,
37
- PlayerYoutubeEmbed,
38
- WindowCloseIcon,
39
- },
40
- data() {
41
- return {
42
- youtubeId: undefined as string|undefined,
43
- };
44
- },
45
- computed: {
46
- ...mapState(useApiStore, ["hlsUrl"]),
47
- ...mapState(usePlayerStore, ["playerVideo", "playerLive", "playerPodcast"]),
48
- isSecured(): boolean{
49
- return "SECURED" === this.playerLive?.organisation?.privacy;
50
- },
51
- hlsVideoUrl(): string {
52
- if (!this.playerLive) {
53
- return "";
54
- }
55
- return `${this.hlsUrl}live/video_dev.${this.playerLive.conferenceId}/index.m3u8`;
56
- },
57
- },
58
- created(){
59
- this.youtubeId = youtubeVideoHelper.getYoutubeId((this.playerPodcast ?? this.playerLive )?.tags ?? []);
60
- },
31
+ //Data
32
+ const youtubeId: Ref<string|undefined> = ref(undefined);
61
33
 
62
- methods: {
63
- ...mapActions(usePlayerStore, ["playerPlay"]),
64
- closePlayer() {
65
- this.playerPlay();
66
- },
67
- },
34
+ //Composables
35
+ const apiStore = useApiStore();
36
+ const playerStore = usePlayerStore();
37
+
38
+
39
+ //Computed
40
+ const isSecured = computed(() => "SECURED" === playerStore.playerLive?.organisation?.privacy);
41
+ const hlsVideoUrl = computed(() => {
42
+ if (!playerStore.playerLive) {
43
+ return "";
44
+ }
45
+ return `${apiStore.hlsUrl}live/video_dev.${playerStore.playerLive.conferenceId}/index.m3u8`;
68
46
  });
47
+
48
+ onMounted(()=>{
49
+ youtubeId.value = youtubeVideoHelper.getYoutubeId((playerStore.playerPodcast ?? playerStore.playerLive )?.tags ?? []);
50
+ })
51
+
52
+ //Methods
53
+ function closePlayer() {
54
+ playerStore.playerPlay();
55
+ }
69
56
  </script>
70
57
 
71
58
  <style lang="scss">
@@ -4,7 +4,7 @@
4
4
  v-if="videoId"
5
5
  ref="iframeVideo"
6
6
  :src="srcVideo"
7
- :title="$t('Video')"
7
+ :title="t('Video')"
8
8
  width="500"
9
9
  height="281"
10
10
  style="z-index: 1"
@@ -18,44 +18,39 @@
18
18
  </div>
19
19
  </template>
20
20
 
21
- <script lang="ts">
21
+ <script setup lang="ts">
22
+ import { useI18n } from "vue-i18n";
22
23
  import SnackBar from "../../SnackBar.vue";
23
- import { defineComponent } from "vue";
24
- export default defineComponent({
25
- name: "PlayerVideo",
26
- components: {
27
- SnackBar,
28
- },
29
- props: {
30
- videoId: { default: undefined, type: String },
31
- responsive: { default: false, type: Boolean },
32
- },
33
-
34
- computed: {
35
- srcVideo(): string {
36
- return (
37
- "//www.ultimedia.com/deliver/generic/iframe/mdtk/01009833/zone/1/showtitle/1/src/" +
38
- this.videoId +
39
- "/sound/yes/autoplay/1"
40
- );
41
- },
42
- },
43
- mounted() {
44
- if (undefined === this.videoId) {
45
- (this.$refs.snackbar as InstanceType<typeof SnackBar>).open(
46
- this.$t("Podcast play error"),
47
- );
48
- }
49
- },
50
- methods: {
51
- goFullScreen() {
52
- if ("" === this.srcVideo) {
53
- return;
54
- }
55
- (this.$refs.iframeVideo as Element).requestFullscreen();
56
- },
57
- },
24
+ import { computed, onMounted, useTemplateRef } from "vue";
25
+
26
+ //Props
27
+ const props = defineProps({
28
+ videoId: { default: undefined, type: String },
29
+ responsive: { default: false, type: Boolean },
30
+ })
31
+
32
+ //Data
33
+ const snackBarRef = useTemplateRef('snackbar');
34
+
35
+ //Composables
36
+ const { t } = useI18n();
37
+
38
+
39
+ //Computed
40
+ const srcVideo = computed(() => {
41
+ return (
42
+ "//www.ultimedia.com/deliver/generic/iframe/mdtk/01009833/zone/1/showtitle/1/src/" +
43
+ props.videoId +
44
+ "/sound/yes/autoplay/1"
45
+ );
58
46
  });
47
+
48
+ onMounted(()=>{
49
+ if (undefined === props.videoId) {
50
+ (snackBarRef?.value as InstanceType<typeof SnackBar>).open(t("Podcast play error"));
51
+ }
52
+ })
53
+
59
54
  </script>
60
55
  <style lang="scss">
61
56
  @use "../../../../style/videoPlayer";