@saooti/octopus-sdk 40.2.18 → 41.0.0-SNAPSHOT

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 (204) hide show
  1. package/package.json +38 -39
  2. package/src/App.vue +68 -88
  3. package/src/components/composable/player/usePlayerLive.ts +12 -3
  4. package/src/components/composable/player/usePlayerLogic.ts +6 -6
  5. package/src/components/composable/podcasts/usePodcastView.ts +3 -3
  6. package/src/components/composable/useInit.ts +2 -2
  7. package/src/components/composable/useMetaTitleWatch.ts +2 -2
  8. package/src/components/display/accessibility/AccessibilityModal.vue +56 -68
  9. package/src/components/display/categories/CategoryChooser.vue +142 -145
  10. package/src/components/display/categories/CategoryFilter.vue +172 -198
  11. package/src/components/display/categories/CategoryList.vue +122 -147
  12. package/src/components/display/comments/CommentInput.vue +100 -122
  13. package/src/components/display/comments/CommentList.vue +169 -191
  14. package/src/components/display/comments/CommentName.vue +35 -45
  15. package/src/components/display/comments/CommentParentInfo.vue +28 -34
  16. package/src/components/display/comments/CommentPlayer.vue +38 -50
  17. package/src/components/display/comments/CommentSection.vue +85 -103
  18. package/src/components/display/comments/item/CommentBasicView.vue +48 -61
  19. package/src/components/display/comments/item/CommentItem.vue +101 -116
  20. package/src/components/display/comments/item/CommentMoreActions.vue +174 -189
  21. package/src/components/display/comments/item/CommentMoreActionsAdmin.vue +1 -3
  22. package/src/components/display/comments/like/LikeButton.vue +36 -41
  23. package/src/components/display/comments/like/LikeSection.vue +128 -136
  24. package/src/components/display/comments/modal/CheckIdentityModal.vue +35 -40
  25. package/src/components/display/comments/modal/EditCommentModal.vue +72 -78
  26. package/src/components/display/comments/modal/RecaptchaModal.vue +58 -63
  27. package/src/components/display/comments/modal/ReportAbuseModal.vue +59 -66
  28. package/src/components/display/edit/EditBox.vue +6 -9
  29. package/src/components/display/edit/EditBoxRadio.vue +1 -5
  30. package/src/components/display/emission/EmissionInlineList.vue +82 -97
  31. package/src/components/display/emission/EmissionItem.vue +56 -69
  32. package/src/components/display/emission/EmissionList.vue +192 -218
  33. package/src/components/display/emission/EmissionPlayerItem.vue +48 -65
  34. package/src/components/display/emission/EmissionPresentationItem.vue +44 -54
  35. package/src/components/display/emission/EmissionPresentationList.vue +51 -61
  36. package/src/components/display/filter/AdvancedSearch.vue +154 -176
  37. package/src/components/display/filter/CategorySearchFilter.vue +43 -46
  38. package/src/components/display/filter/DateFilter.vue +76 -91
  39. package/src/components/display/filter/MonetizableFilter.vue +27 -30
  40. package/src/components/display/filter/ProductorSearch.vue +87 -90
  41. package/src/components/display/filter/RubriqueChoice.vue +58 -63
  42. package/src/components/display/filter/RubriqueFilter.vue +154 -169
  43. package/src/components/display/filter/SearchOrder.vue +35 -35
  44. package/src/components/display/list/ListPaginate.vue +80 -93
  45. package/src/components/display/list/PaginateParams.vue +36 -40
  46. package/src/components/display/list/PaginateSection.vue +113 -124
  47. package/src/components/display/list/SwiperList.vue +97 -109
  48. package/src/components/display/live/CountDown.vue +15 -9
  49. package/src/components/display/live/CountdownOctopus.vue +16 -10
  50. package/src/components/display/live/LiveHorizontalList.vue +95 -103
  51. package/src/components/display/live/LiveItem.vue +65 -73
  52. package/src/components/display/live/LiveList.vue +125 -137
  53. package/src/components/display/live/RadioCurrently.vue +66 -73
  54. package/src/components/display/live/RadioImage.vue +40 -51
  55. package/src/components/display/live/RadioItem.vue +9 -14
  56. package/src/components/display/live/RadioList.vue +39 -53
  57. package/src/components/display/live/RadioPlanning.vue +211 -223
  58. package/src/components/display/organisation/OrganisationChooser.vue +117 -123
  59. package/src/components/display/organisation/OrganisationChooserLight.vue +44 -52
  60. package/src/components/display/participant/ParticipantInlineList.vue +42 -58
  61. package/src/components/display/participant/ParticipantItem.vue +66 -74
  62. package/src/components/display/participant/ParticipantList.vue +119 -141
  63. package/src/components/display/playlist/PlaylistItem.vue +33 -46
  64. package/src/components/display/playlist/PlaylistList.vue +118 -144
  65. package/src/components/display/playlist/PodcastList.vue +79 -101
  66. package/src/components/display/playlist/PodcastPlaylistInlineList.vue +58 -70
  67. package/src/components/display/podcastmaker/PodcastmakerHeader.vue +21 -22
  68. package/src/components/display/podcasts/AnimatorsItem.vue +15 -16
  69. package/src/components/display/podcasts/DownloadPodcastButton.vue +21 -29
  70. package/src/components/display/podcasts/ParticipantDescription.vue +22 -24
  71. package/src/components/display/podcasts/PodcastFilterList.vue +48 -53
  72. package/src/components/display/podcasts/PodcastImage.vue +96 -99
  73. package/src/components/display/podcasts/PodcastInlineList.vue +30 -28
  74. package/src/components/display/podcasts/PodcastInlineListTemplate.vue +107 -114
  75. package/src/components/display/podcasts/PodcastIsPlaying.vue +4 -12
  76. package/src/components/display/podcasts/PodcastItem.vue +48 -63
  77. package/src/components/display/podcasts/PodcastItemInfo.vue +19 -35
  78. package/src/components/display/podcasts/PodcastList.vue +183 -206
  79. package/src/components/display/podcasts/PodcastModuleBox.vue +100 -137
  80. package/src/components/display/podcasts/PodcastPlannedSpinner.vue +4 -6
  81. package/src/components/display/podcasts/PodcastPlayBar.vue +50 -61
  82. package/src/components/display/podcasts/PodcastPlayBasicButton.vue +38 -41
  83. package/src/components/display/podcasts/PodcastPlayButton.vue +164 -175
  84. package/src/components/display/podcasts/PodcastRawTranscript.vue +69 -80
  85. package/src/components/display/podcasts/PodcastRubriqueList.vue +35 -38
  86. package/src/components/display/podcasts/PodcastSwiperList.vue +100 -110
  87. package/src/components/display/podcasts/TagList.vue +49 -51
  88. package/src/components/display/podcasts/VideoModuleBox.vue +13 -24
  89. package/src/components/display/rubriques/RubriqueChooser.vue +135 -140
  90. package/src/components/display/rubriques/RubriqueList.vue +140 -160
  91. package/src/components/display/sharing/ChooseEpisodesNumber.vue +34 -33
  92. package/src/components/display/sharing/FormatSwitch.vue +16 -11
  93. package/src/components/display/sharing/PlayerAnonymousModal.vue +24 -27
  94. package/src/components/display/sharing/PlayerCommonParameters.vue +20 -13
  95. package/src/components/display/sharing/PlayerParameters.vue +69 -71
  96. package/src/components/display/sharing/QrCode.vue +55 -67
  97. package/src/components/display/sharing/ShareAnonymous.vue +160 -178
  98. package/src/components/display/sharing/ShareDistribution.vue +103 -117
  99. package/src/components/display/sharing/ShareNewsletter.vue +154 -161
  100. package/src/components/display/sharing/SharePlayer.vue +273 -295
  101. package/src/components/display/sharing/SharePlayerColors.vue +25 -16
  102. package/src/components/display/sharing/SharePlayerRadio.vue +61 -69
  103. package/src/components/display/sharing/SharePlayerTypes.vue +176 -176
  104. package/src/components/display/sharing/ShareSocialsButtons.vue +63 -75
  105. package/src/components/display/sharing/SubscribeButtons.vue +185 -209
  106. package/src/components/display/studio/RecordingItemButton.vue +1 -4
  107. package/src/components/form/ClassicCheckbox.vue +26 -30
  108. package/src/components/form/ClassicContentEditable.vue +37 -33
  109. package/src/components/form/ClassicCopyButton.vue +40 -44
  110. package/src/components/form/ClassicDatePicker.vue +114 -114
  111. package/src/components/form/ClassicEmojiPicker.vue +20 -28
  112. package/src/components/form/ClassicInputText.vue +116 -120
  113. package/src/components/form/ClassicLoading.vue +7 -12
  114. package/src/components/form/ClassicMultiselect.vue +106 -116
  115. package/src/components/form/ClassicRadio.vue +21 -16
  116. package/src/components/form/ClassicRadioLabel.vue +23 -22
  117. package/src/components/form/ClassicSearch.vue +24 -19
  118. package/src/components/form/ClassicSelect.vue +47 -38
  119. package/src/components/form/ClassicWysiwyg.vue +116 -123
  120. package/src/components/icons/AmazonMusicIcon.vue +7 -10
  121. package/src/components/icons/ApplePodcastIcon.vue +7 -11
  122. package/src/components/icons/BlueSkyIcon.vue +8 -11
  123. package/src/components/icons/DeezerIcon.vue +8 -11
  124. package/src/components/icons/EditFtpIcon.vue +8 -11
  125. package/src/components/icons/IHeartIcon.vue +8 -11
  126. package/src/components/icons/PlayVideoIcon.vue +7 -10
  127. package/src/components/icons/PlayerFmIcon.vue +7 -10
  128. package/src/components/icons/PocketCastIcon.vue +8 -11
  129. package/src/components/icons/PodcastAddictIcon.vue +7 -10
  130. package/src/components/icons/RadiolineIcon.vue +8 -11
  131. package/src/components/icons/TuninIcon.vue +8 -11
  132. package/src/components/icons/XIcon.vue +7 -10
  133. package/src/components/misc/AcpmImage.vue +6 -7
  134. package/src/components/misc/ClassicAccordion.vue +27 -32
  135. package/src/components/misc/ClassicLazy.vue +86 -90
  136. package/src/components/misc/ClassicNav.vue +16 -20
  137. package/src/components/misc/ClassicPopover.vue +266 -282
  138. package/src/components/misc/ClassicSpinner.vue +5 -27
  139. package/src/components/misc/ErrorMessage.vue +11 -12
  140. package/src/components/misc/FooterGarSection.vue +33 -41
  141. package/src/components/misc/FooterSection.vue +109 -130
  142. package/src/components/misc/HomeDropdown.vue +85 -108
  143. package/src/components/misc/MobileMenu.vue +102 -113
  144. package/src/components/misc/ProgressBar.vue +53 -62
  145. package/src/components/misc/TopBar.vue +97 -120
  146. package/src/components/misc/TopBarMainContent.vue +116 -135
  147. package/src/components/misc/modal/ClassicModal.vue +40 -33
  148. package/src/components/misc/modal/ClassicModalInBody.vue +34 -28
  149. package/src/components/misc/modal/ClipboardModal.vue +27 -30
  150. package/src/components/misc/modal/ContractPreviewModal.vue +64 -62
  151. package/src/components/misc/modal/MessageModal.vue +50 -47
  152. package/src/components/misc/modal/NewsletterModal.vue +30 -31
  153. package/src/components/misc/modal/QrCodeModal.vue +21 -21
  154. package/src/components/misc/modal/ShareModalPlayer.vue +43 -52
  155. package/src/components/misc/player/PlayerCompact.vue +6 -4
  156. package/src/components/misc/player/PlayerComponent.vue +8 -9
  157. package/src/components/misc/player/PlayerLarge.vue +9 -8
  158. package/src/components/misc/player/ads/AdsProgressBar.vue +8 -11
  159. package/src/components/misc/player/ads/AdsSkipButton.vue +24 -30
  160. package/src/components/misc/player/chaptering/ChapteringModal.vue +44 -54
  161. package/src/components/misc/player/chaptering/PlayerChaptering.vue +50 -62
  162. package/src/components/misc/player/elements/PlayerImage.vue +51 -57
  163. package/src/components/misc/player/elements/PlayerPlayButton.vue +81 -92
  164. package/src/components/misc/player/elements/PlayerSpeedButton.vue +23 -27
  165. package/src/components/misc/player/elements/PlayerTitle.vue +85 -111
  166. package/src/components/misc/player/progressbar/PlayerProgressBar.vue +18 -29
  167. package/src/components/misc/player/progressbar/PodcastProgressBar.vue +45 -56
  168. package/src/components/misc/player/radio/RadioHistory.vue +80 -99
  169. package/src/components/misc/player/radio/RadioProgressBar.vue +43 -54
  170. package/src/components/misc/player/video/PlayerVideo.vue +27 -40
  171. package/src/components/misc/player/video/PlayerVideoDigiteka.vue +32 -37
  172. package/src/components/misc/player/video/PlayerVideoHls.vue +199 -198
  173. package/src/components/misc/player/video/PlayerYoutubeEmbed.vue +10 -12
  174. package/src/components/pages/CategoryPage.vue +28 -33
  175. package/src/components/pages/EmissionPage.vue +98 -131
  176. package/src/components/pages/EmissionsPage.vue +2 -0
  177. package/src/components/pages/Error403Page.vue +22 -21
  178. package/src/components/pages/HomePage.vue +91 -100
  179. package/src/components/pages/LivesPage.vue +35 -37
  180. package/src/components/pages/MapPage.vue +209 -241
  181. package/src/components/pages/PageLogout.vue +8 -11
  182. package/src/components/pages/PageNotFound.vue +9 -5
  183. package/src/components/pages/ParticipantPage.vue +83 -111
  184. package/src/components/pages/ParticipantsPage.vue +3 -0
  185. package/src/components/pages/PlaylistPage.vue +98 -116
  186. package/src/components/pages/PlaylistsPage.vue +9 -2
  187. package/src/components/pages/PodcastPage.vue +223 -238
  188. package/src/components/pages/PodcastsPage.vue +9 -2
  189. package/src/components/pages/RadioPage.vue +56 -70
  190. package/src/components/pages/RubriquePage.vue +7 -3
  191. package/src/components/pages/SearchPage.vue +31 -36
  192. package/src/components/pages/TagPage.vue +11 -9
  193. package/src/components/pages/VideoPage.vue +14 -11
  194. package/src/helper/displayHelper.ts +1 -1
  195. package/src/i18n.ts +2 -2
  196. package/src/main.ts +1 -1
  197. package/src/stores/class/general/player.ts +1 -0
  198. package/public/css/fonts/icomoon.eot +0 -0
  199. package/public/css/fonts/icomoon.svg +0 -113
  200. package/public/css/fonts/icomoon.ttf +0 -0
  201. package/public/css/fonts/icomoon.woff +0 -0
  202. package/public/css/fonts/icomoon.woff2 +0 -0
  203. package/public/css/fonts/style.css +0 -352
  204. 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";