@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
@@ -6,13 +6,13 @@
6
6
  :live="true"
7
7
  :recording="podcastConference"
8
8
  @delete-item="removeDeleted"
9
- @validate-podcast="$emit('updatePodcast', $event)"
9
+ @validate-podcast="emit('updatePodcast', $event)"
10
10
  />
11
11
  <EditBox
12
12
  v-else-if="editRight && isEditBox"
13
13
  :podcast="podcast"
14
14
  :display-studio-access="isDebriefing"
15
- @validate-podcast="$emit('updatePodcast', $event)"
15
+ @validate-podcast="emit('updatePodcast', $event)"
16
16
  />
17
17
  <div class="mb-2 w-100">
18
18
  <PodcastImage
@@ -38,7 +38,7 @@
38
38
  {{ date }}
39
39
  </time>
40
40
  <div v-if="isLiveReady" class="text-danger">
41
- {{ $t("Episode record in live") }}
41
+ {{ t("Episode record in live") }}
42
42
  </div>
43
43
  <div class="d-flex flex-column align-items-end">
44
44
  <time :datetime="durationIso">
@@ -60,13 +60,13 @@
60
60
  <!-- eslint-enable -->
61
61
  <div class="my-3">
62
62
  <div class="mb-1">
63
- {{ $t("Emission") + " : " }}
63
+ {{ t("Emission") + " : " }}
64
64
  <router-link
65
65
  :to="{
66
66
  name: 'emission',
67
67
  params: { emissionId: podcast.emission.emissionId },
68
68
  }"
69
- :title="$t('Series name page', { name: podcast.emission.name })"
69
+ :title="t('Series name page', { name: podcast.emission.name })"
70
70
  >
71
71
  {{ podcast.emission.name }}
72
72
  </router-link>
@@ -77,7 +77,7 @@
77
77
  :is-guest="true"
78
78
  />
79
79
  <div v-if="!isPodcastmaker" class="mb-1">
80
- {{ $t("Producted by : ") }}
80
+ {{ t("Producted by : ") }}
81
81
  <router-link
82
82
  :to="{
83
83
  name: 'productor',
@@ -88,27 +88,27 @@
88
88
  </router-link>
89
89
  </div>
90
90
  <div v-if="'' !== photoCredit" class="mb-1">
91
- {{ $t("Photo credits") + " : " + photoCredit }}
91
+ {{ t("Photo credits") + " : " + photoCredit }}
92
92
  </div>
93
93
  <div v-if="'' !== audioCredit" class="mb-1">
94
- {{ $t("Audio credits") + " : " + audioCredit }}
94
+ {{ t("Audio credits") + " : " + audioCredit }}
95
95
  </div>
96
96
  <div v-if="'' !== authorCredit" class="mb-1">
97
- {{ $t("Author credits") + " : " + authorCredit }}
97
+ {{ t("Author credits") + " : " + authorCredit }}
98
98
  </div>
99
99
  <a
100
- v-if="podcast.article && !isGarRole"
100
+ v-if="podcast.article && !authStore.isGarRole"
101
101
  class="btn d-flex align-items-center my-2 w-fit-content mb-1"
102
102
  :href="podcast.article"
103
103
  rel="noreferrer noopener"
104
104
  target="_blank"
105
- :title="$t('New window', {text : $t('See associated article')})"
105
+ :title="t('New window', {text : t('See associated article')})"
106
106
  >
107
107
  <NewspaperVariantOutlineIcon class="me-1" />
108
- <div>{{ $t("See associated article") }}</div>
108
+ <div>{{ t("See associated article") }}</div>
109
109
  </a>
110
110
  <PodcastPlayBar
111
- v-if="isProgressBar"
111
+ v-if="state.emissionsPage.progressBar"
112
112
  :podcast="podcast"
113
113
  />
114
114
  <div v-if="editRight && !isPodcastmaker">
@@ -118,13 +118,13 @@
118
118
  "
119
119
  class="me-5 text-secondary"
120
120
  >
121
- {{ $t("From RSS") }}
121
+ {{ t("From RSS") }}
122
122
  </div>
123
123
  <ErrorMessage v-if="'' !== errorMessage" :message="errorMessage" />
124
124
  </div>
125
125
  <div class="d-flex align-items-center flex-wrap">
126
126
  <LikeSection :edit-right="editRight" :podcast="podcast" />
127
- <DownloadPodcastButton v-if="isDownloadButton" :podcast="podcast" />
127
+ <DownloadPodcastButton v-if="state.podcastPage.downloadButton" :podcast="podcast" />
128
128
  </div>
129
129
  </div>
130
130
  </div>
@@ -150,7 +150,7 @@
150
150
  </section>
151
151
  </template>
152
152
 
153
- <script lang="ts">
153
+ <script setup lang="ts">
154
154
  import NewspaperVariantOutlineIcon from "vue-material-design-icons/NewspaperVariantOutline.vue";
155
155
  import PodcastImage from "./PodcastImage.vue";
156
156
  import ParticipantDescription from "./ParticipantDescription.vue";
@@ -162,7 +162,7 @@ import {usePodcastView} from "../../composable/podcasts/usePodcastView";
162
162
  import { Podcast } from "@/stores/class/general/podcast";
163
163
  import { Conference } from "@/stores/class/conference/conference";
164
164
 
165
- import { defineComponent, defineAsyncComponent, toRefs } from "vue";
165
+ import { defineAsyncComponent, toRefs, computed } from "vue";
166
166
  const ErrorMessage = defineAsyncComponent(
167
167
  () => import("../../misc/ErrorMessage.vue"),
168
168
  );
@@ -191,129 +191,92 @@ const Countdown = defineAsyncComponent(() => import("../live/CountDown.vue"));
191
191
  const TagList = defineAsyncComponent(() => import("./TagList.vue"));
192
192
  const ShareAnonymous = defineAsyncComponent(() => import("../sharing/ShareAnonymous.vue"));
193
193
  const PodcastRubriqueList = defineAsyncComponent(() => import("./PodcastRubriqueList.vue"));
194
- import { mapState } from "pinia";
195
- export default defineComponent({
196
- name: "PodcastModuleBox",
197
- components: {
198
- PodcastImage,
199
- ParticipantDescription,
200
- TagList,
201
- ErrorMessage,
202
- PodcastPlayBar,
203
- EditBox,
204
- RecordingItemButton,
205
- SubscribeButtons,
206
- Countdown,
207
- LikeSection,
208
- PodcastRawTranscript,
209
- DownloadPodcastButton,
210
- NewspaperVariantOutlineIcon,
211
- PodcastPlannedSpinner,
212
- PodcastRubriqueList,
213
- ShareAnonymous
214
- },
194
+ import { useI18n } from "vue-i18n";
195
+ import { useRouter } from "vue-router";
215
196
 
216
- props: {
217
- playingPodcast: { default: undefined, type: Object as () => Podcast },
218
- podcast: { default: undefined, type: Object as () => Podcast },
219
- podcastConference: { default: undefined, type: Object as () => Conference },
220
- },
197
+ //Props
198
+ const props = defineProps({
199
+ playingPodcast: { default: undefined, type: Object as () => Podcast },
200
+ podcast: { default: undefined, type: Object as () => Podcast },
201
+ podcastConference: { default: undefined, type: Object as () => Conference },
202
+ })
221
203
 
222
- emits: ["updatePodcast"],
204
+ //Emits
205
+ const emit = defineEmits(["updatePodcast"]);
223
206
 
224
- setup(props){
225
- const propsRef = toRefs(props);
226
- const {
227
- isLiveReadyToRecord,
228
- isCounter,
229
- timeRemaining,
230
- isPlannedInProcessor,
231
- date,
232
- duration,
233
- durationIso,
234
- isPodcastmaker,
235
- editRight
236
- } = usePodcastView(propsRef.podcast, propsRef.podcastConference);
237
- return { isPodcastmaker, editRight, isLiveReadyToRecord, isCounter, timeRemaining, isPlannedInProcessor, date, duration, durationIso }
238
- },
207
+ //Composables
208
+ const { t } = useI18n();
209
+ const propsRef = toRefs(props);
210
+ const {
211
+ isLiveReadyToRecord,
212
+ isCounter,
213
+ timeRemaining,
214
+ isPlannedInProcessor,
215
+ date,
216
+ duration,
217
+ durationIso,
218
+ isPodcastmaker,
219
+ editRight
220
+ } = usePodcastView(propsRef.podcast, propsRef.podcastConference);
221
+ const authStore = useAuthStore();
222
+ const router = useRouter();
239
223
 
240
- data() {
241
- return {
242
- };
243
- },
244
-
245
- computed: {
246
- ...mapState(useAuthStore, ["isRoleLive", "isGarRole"]),
247
- podcastRubriques(){
248
- let rubriques = this.podcast?.rubriqueIds ?? [];
249
- if(this.podcast?.emission?.rubriqueIds){
250
- rubriques = [...new Set(rubriques.concat(this.podcast?.emission?.rubriqueIds))];
251
- }
252
- return rubriques;
253
- },
254
- errorMessage(): string {
255
- if (!this.podcast?.availability.visibility) {
256
- return this.$t("Podcast is not visible for listeners");
257
- }
258
- if ("ERROR" === this.podcast?.processingStatus) {
259
- return this.$t("Podcast in ERROR, please contact Saooti");
260
- }
261
- return this.podcastNotValid ? this.$t("Podcast not validated") : "";
262
- },
263
- isProgressBar(): boolean {
264
- return state.emissionsPage.progressBar as boolean;
265
- },
266
- isLiveReady(): boolean {
267
- return (
268
- undefined !== this.podcast?.conferenceId &&
269
- 0 !== this.podcast?.conferenceId &&
270
- "READY" === this.podcast?.processingStatus
271
- );
272
- },
273
- isDebriefing(): boolean {
274
- return (
275
- undefined !== this.podcastConference &&
276
- "DEBRIEFING" === this.podcastConference.status
277
- );
278
- },
279
- isOctopusAndAnimator(): boolean {
280
- return !this.isPodcastmaker && this.editRight && this.isRoleLive;
281
- },
282
- podcastNotValid(): boolean {
283
- return (
284
- undefined !== this.podcast?.availability &&
285
- false === this.podcast?.valid
286
- );
287
- },
288
- photoCredit(): string {
289
- return (this.podcast?.annotations?.photoCredit as string) ?? "";
290
- },
291
- audioCredit(): string {
292
- return (this.podcast?.annotations?.audioCredit as string) ?? "";
293
- },
294
- authorCredit(): string {
295
- return (this.podcast?.annotations?.authorCredit as string) ?? "";
296
- },
297
- isEditBox(): boolean {
298
- return !((state.generalParameters.podcastmaker as boolean) ?? false);
299
- },
300
- isDownloadButton(): boolean {
301
- return state.podcastPage.downloadButton as boolean;
302
- },
303
- },
304
- methods: {
305
- urlify(text:string|undefined){
306
- return displayHelper.urlify(text);
307
- },
308
- removeDeleted(): void {
309
- if (this.isLiveReadyToRecord) {
310
- this.$router.push("/main/pub/lives");
311
- } else if (window.history.length > 1) {
312
- this.$router.go(-1);
313
- } else {
314
- this.$router.push("/");
315
- }
316
- },
317
- },
224
+ //Computed
225
+ const podcastRubriques = computed(() => {
226
+ let rubriques = props.podcast?.rubriqueIds ?? [];
227
+ if(props.podcast?.emission?.rubriqueIds){
228
+ rubriques = [...new Set(rubriques.concat(props.podcast?.emission?.rubriqueIds))];
229
+ }
230
+ return rubriques;
231
+ });
232
+ const errorMessage = computed(() => {
233
+ if (!props.podcast?.availability.visibility) {
234
+ return t("Podcast is not visible for listeners");
235
+ }
236
+ if ("ERROR" === props.podcast?.processingStatus) {
237
+ return t("Podcast in ERROR, please contact Saooti");
238
+ }
239
+ return podcastNotValid.value ? t("Podcast not validated") : "";
240
+ });
241
+ const isLiveReady = computed(() => {
242
+ return (
243
+ undefined !== props.podcast?.conferenceId &&
244
+ 0 !== props.podcast?.conferenceId &&
245
+ "READY" === props.podcast?.processingStatus
246
+ );
247
+ });
248
+ const isDebriefing = computed(() => {
249
+ return (
250
+ undefined !== props.podcastConference &&
251
+ "DEBRIEFING" === props.podcastConference.status
252
+ );
318
253
  });
254
+ const isOctopusAndAnimator = computed(() => {
255
+ return !isPodcastmaker.value && editRight.value && authStore.isRoleLive;
256
+ });
257
+ const podcastNotValid = computed(() => {
258
+ return (
259
+ undefined !== props.podcast?.availability &&
260
+ false === props.podcast?.valid
261
+ );
262
+ });
263
+ const photoCredit = computed(() => (props.podcast?.annotations?.photoCredit as string) ?? "");
264
+ const audioCredit = computed(() => (props.podcast?.annotations?.audioCredit as string) ?? "");
265
+ const authorCredit = computed(() => (props.podcast?.annotations?.authorCredit as string) ?? "");
266
+ const isEditBox = computed(() => !((state.generalParameters.podcastmaker as boolean) ?? false));
267
+
268
+
269
+ //Methods
270
+ function urlify(text:string|undefined){
271
+ return displayHelper.urlify(text);
272
+ }
273
+ function removeDeleted(): void {
274
+ if (isLiveReadyToRecord.value) {
275
+ router.push("/main/pub/lives");
276
+ } else if (window.history.length > 1) {
277
+ router.go(-1);
278
+ } else {
279
+ router.push("/");
280
+ }
281
+ }
319
282
  </script>
@@ -8,15 +8,13 @@
8
8
  <div class="side"></div>
9
9
  <div class="side"></div>
10
10
  </div>
11
- <div class="fw-bold">{{$t('The episode is being processed')}}</div>
11
+ <div class="fw-bold">{{t('The episode is being processed')}}</div>
12
12
  </div>
13
13
  </template>
14
14
 
15
- <script lang="ts">
16
- import { defineComponent } from "vue";
17
- export default defineComponent({
18
- name: "PodcastPlannedSpinner",
19
- });
15
+ <script setup lang="ts">
16
+ import { useI18n } from "vue-i18n";
17
+ const { t } = useI18n();
20
18
  </script>
21
19
  <style lang="scss">
22
20
 
@@ -19,71 +19,60 @@
19
19
  </div>
20
20
  </template>
21
21
 
22
- <script lang="ts">
22
+ <script setup lang="ts">
23
23
  import ProgressBar from "../../misc/ProgressBar.vue";
24
24
  import DurationHelper from "../../../helper/durationHelper";
25
25
  import { usePlayerStore } from "../../../stores/PlayerStore";
26
- import { mapState, mapActions } from "pinia";
27
- import { defineAsyncComponent, defineComponent } from "vue";
26
+ import { computed, defineAsyncComponent } from "vue";
28
27
  import { Podcast } from "@/stores/class/general/podcast";
29
28
  const PodcastPlayBasicButton = defineAsyncComponent(() => import("./PodcastPlayBasicButton.vue"));
30
- export default defineComponent({
31
- name: "PodcastPlayBar",
32
- components: {
33
- ProgressBar,
34
- PodcastPlayBasicButton
35
- },
36
- props: {
37
- podcast: { default: () => ({}), type: Object as () => Podcast },
38
- displayButonPlay:{ default: false, type: Boolean },
39
- },
40
- computed: {
41
- ...mapState(usePlayerStore, [
42
- "playerPodcast",
43
- "playerElapsed",
44
- "playerTotal",
45
- "playerStatus"
46
- ]),
47
- percentProgress(): number {
48
- if (this.podcast?.podcastId !== this.playerPodcast?.podcastId) {
49
- return 0;
50
- }
51
- return !this.playerElapsed ? 0 : this.playerElapsed * 100;
52
- },
53
- playedTime(): string {
54
- if (this.podcast?.podcastId === this.playerPodcast?.podcastId) {
55
- if (
56
- this.playerElapsed &&
57
- this.playerElapsed > 0 &&
58
- this.playerTotal &&
59
- this.playerTotal > 0
60
- ) {
61
- return DurationHelper.formatDuration(
62
- Math.round(this.playerElapsed * this.playerTotal),
63
- );
64
- }
65
- }
66
- return "00:00";
67
- },
68
- totalTime(): string {
69
- return DurationHelper.formatDuration(Math.round(this.podcast.duration / 1000));
70
- },
71
- },
72
- methods: {
73
- ...mapActions(usePlayerStore, ["playerUpdateSeekTime"]),
74
- seekTo(event: MouseEvent): void {
75
- if (
76
- !this.playerPodcast ||
77
- this.podcast?.podcastId !== this.playerPodcast.podcastId
78
- ) {
79
- return;
80
- }
81
- const rect = (event.currentTarget as Element).getBoundingClientRect();
82
- const barWidth = (event.currentTarget as Element).clientWidth;
83
- const x = event.clientX - rect.left;
84
- const percentPosition = x / barWidth;
85
- this.playerUpdateSeekTime(this.playerTotal * percentPosition);
86
- },
87
- },
29
+
30
+
31
+ //Props
32
+ const props = defineProps({
33
+ podcast: { default: () => ({}), type: Object as () => Podcast },
34
+ displayButonPlay:{ default: false, type: Boolean },
35
+ })
36
+
37
+ //Composables
38
+ const playerStore = usePlayerStore();
39
+
40
+ //Computed
41
+ const percentProgress = computed(() => {
42
+ if (props.podcast?.podcastId !== playerStore.playerPodcast?.podcastId) {
43
+ return 0;
44
+ }
45
+ return !playerStore.playerElapsed ? 0 : playerStore.playerElapsed * 100;
46
+ });
47
+ const playedTime = computed(() => {
48
+ if (props.podcast?.podcastId === playerStore.playerPodcast?.podcastId) {
49
+ if (
50
+ playerStore.playerElapsed &&
51
+ playerStore.playerElapsed > 0 &&
52
+ playerStore.playerTotal &&
53
+ playerStore.playerTotal > 0
54
+ ) {
55
+ return DurationHelper.formatDuration(
56
+ Math.round(playerStore.playerElapsed * playerStore.playerTotal),
57
+ );
58
+ }
59
+ }
60
+ return "00:00";
88
61
  });
62
+ const totalTime = computed(() => DurationHelper.formatDuration(Math.round(props.podcast.duration / 1000)));
63
+
64
+ //Methods
65
+ function seekTo(event: MouseEvent): void {
66
+ if (
67
+ !playerStore.playerPodcast ||
68
+ props.podcast?.podcastId !== playerStore.playerPodcast.podcastId
69
+ ) {
70
+ return;
71
+ }
72
+ const rect = (event.currentTarget as Element).getBoundingClientRect();
73
+ const barWidth = (event.currentTarget as Element).clientWidth;
74
+ const x = event.clientX - rect.left;
75
+ const percentPosition = x / barWidth;
76
+ playerStore.playerUpdateSeekTime(playerStore.playerTotal * percentPosition);
77
+ }
89
78
  </script>
@@ -3,54 +3,51 @@
3
3
  class="btn play-button-box bg-primary"
4
4
  @click="clickBtn(podcast)"
5
5
  >
6
- <PlayIcon v-if="btnPlay" class="text-light" :title="$t('Play')" />
7
- <PauseIcon v-else class="text-light" :title="$t('Pause')" />
6
+ <PlayIcon v-if="btnPlay" class="text-light" :title="t('Play')" />
7
+ <PauseIcon v-else class="text-light" :title="t('Pause')" />
8
8
  </button>
9
9
  </template>
10
10
 
11
- <script lang="ts">
11
+ <script setup lang="ts">
12
12
  import PlayIcon from "vue-material-design-icons/Play.vue";
13
13
  import PauseIcon from "vue-material-design-icons/Pause.vue";
14
14
  import { usePlayerStore } from "../../../stores/PlayerStore";
15
- import { mapState, mapActions } from "pinia";
16
- import { defineComponent } from "vue";
15
+ import { computed } from "vue";
17
16
  import { Podcast } from "@/stores/class/general/podcast";
18
- export default defineComponent({
19
- name: "PodcastPlayBasicButton",
20
- components: {
21
- PlayIcon,
22
- PauseIcon
23
- },
24
- props: {
25
- podcast: { default: () => ({}), type: Object as () => Podcast },
26
- },
27
- computed: {
28
- ...mapState(usePlayerStore, ["playerPodcast", "playerStatus"]),
29
- btnPlay(){
30
- return this.playerPodcast !== this.podcast || (this.playerPodcast === this.podcast && 'PAUSED' === this.playerStatus);
31
- }
32
- },
33
- methods: {
34
- ...mapActions(usePlayerStore, ["playerPlay", "playerChangeStatus"]),
35
- clickBtn(podcast: Podcast){
36
- if(this.btnPlay){
37
- this.play(podcast);
38
- return;
39
- }
40
- this.pause();
41
- },
42
- play(podcast: Podcast): void {
43
- if (podcast === this.playerPodcast) {
44
- this.playerChangeStatus(false);
45
- } else {
46
- this.playerPlay(podcast);
47
- }
48
- },
49
- pause(): void {
50
- this.playerChangeStatus(true);
51
- },
52
- },
53
- });
17
+ import { useI18n } from "vue-i18n";
18
+
19
+
20
+ //Props
21
+ const props = defineProps({
22
+ podcast: { default: () => ({}), type: Object as () => Podcast },
23
+ })
24
+
25
+ //Composables
26
+ const { t } = useI18n();
27
+ const playerStore = usePlayerStore();
28
+
29
+ //Computed
30
+ const btnPlay = computed(() => playerStore.playerPodcast !== props.podcast || (playerStore.playerPodcast === props.podcast && 'PAUSED' === playerStore.playerStatus));
31
+
32
+
33
+ //Methods
34
+ function clickBtn(podcast: Podcast){
35
+ if(btnPlay.value){
36
+ play(podcast);
37
+ return;
38
+ }
39
+ pause();
40
+ }
41
+ function play(podcast: Podcast): void {
42
+ if (podcast === playerStore.playerPodcast) {
43
+ playerStore.playerChangeStatus(false);
44
+ } else {
45
+ playerStore.playerPlay(podcast);
46
+ }
47
+ }
48
+ function pause(): void {
49
+ playerStore.playerChangeStatus(true);
50
+ }
54
51
  </script>
55
52
  <style lang="scss">
56
53
  @use "../../../style/playButton";