@saooti/octopus-sdk 40.0.3 → 40.1.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 (174) hide show
  1. package/index.ts +31 -31
  2. package/package.json +1 -1
  3. package/plateform.conf +1 -1
  4. package/src/App.vue +9 -3
  5. package/src/api/classicApi.ts +1 -1
  6. package/src/components/composable/player/usePlayerDisplayTime.ts +33 -0
  7. package/src/components/composable/player/usePlayerLive.ts +150 -0
  8. package/src/components/composable/player/usePlayerLogic.ts +265 -0
  9. package/src/components/composable/player/usePlayerLogicProgress.ts +135 -0
  10. package/src/components/composable/player/usePlayerStitching.ts +213 -0
  11. package/src/components/composable/player/usePlayerTranscript.ts +120 -0
  12. package/src/components/composable/player/usePlayerVast.ts +207 -0
  13. package/src/components/composable/podcasts/useCountdown.ts +53 -0
  14. package/src/components/composable/podcasts/usePodcastView.ts +85 -0
  15. package/src/components/composable/radio/usefetchRadioData.ts +75 -0
  16. package/src/components/composable/route/useAdvancedParamInit.ts +165 -0
  17. package/src/components/composable/route/useRouteUpdateParams.ts +48 -0
  18. package/src/components/composable/route/useRubriquesFilterComputed.ts +24 -0
  19. package/src/components/composable/route/useRubriquesFilterParam.ts +32 -0
  20. package/src/components/composable/route/useSeoTitleUrl.ts +30 -0
  21. package/src/components/composable/route/useSimplePageParam.ts +50 -0
  22. package/src/components/composable/useErrorHandler.ts +25 -0
  23. package/src/components/composable/useImageProxy.ts +28 -0
  24. package/src/components/composable/useInit.ts +38 -0
  25. package/src/components/composable/useMetaTitle.ts +19 -0
  26. package/src/components/composable/useMetaTitleWatch.ts +14 -0
  27. package/src/components/composable/useOrgaComputed.ts +23 -0
  28. package/src/components/composable/useOrganisationFilter.ts +65 -0
  29. package/src/components/composable/useResizePhone.ts +27 -0
  30. package/src/components/composable/useSelenium.ts +10 -0
  31. package/src/components/composable/useTagOf.ts +21 -0
  32. package/src/components/display/accessibility/AccessibilityModal.vue +136 -0
  33. package/src/components/display/aggregator/RssSection.vue +1 -4
  34. package/src/components/display/categories/CategoryChooser.vue +1 -1
  35. package/src/components/display/categories/CategoryFilter.vue +7 -3
  36. package/src/components/display/categories/CategoryList.vue +5 -2
  37. package/src/components/display/comments/CommentInput.vue +0 -3
  38. package/src/components/display/comments/CommentList.vue +6 -2
  39. package/src/components/display/comments/CommentPlayer.vue +5 -2
  40. package/src/components/display/comments/CommentSection.vue +0 -2
  41. package/src/components/display/comments/item/CommentBasicView.vue +4 -4
  42. package/src/components/display/comments/item/CommentItem.vue +0 -4
  43. package/src/components/display/comments/item/CommentMoreActions.vue +6 -2
  44. package/src/components/display/emission/EmissionInlineList.vue +6 -6
  45. package/src/components/display/emission/EmissionItem.vue +13 -6
  46. package/src/components/display/emission/EmissionList.vue +5 -2
  47. package/src/components/display/emission/EmissionPlayerItem.vue +8 -5
  48. package/src/components/display/emission/EmissionPresentationItem.vue +16 -7
  49. package/src/components/display/emission/EmissionPresentationList.vue +10 -7
  50. package/src/components/display/filter/AdvancedSearch.vue +9 -6
  51. package/src/components/display/filter/CategorySearchFilter.vue +0 -2
  52. package/src/components/display/filter/ProductorSearch.vue +8 -3
  53. package/src/components/display/filter/RubriqueFilter.vue +6 -2
  54. package/src/components/display/list/ListPaginate.vue +9 -6
  55. package/src/components/display/list/SwiperList.vue +6 -5
  56. package/src/components/display/live/CountDown.vue +7 -15
  57. package/src/components/display/live/CountdownOctopus.vue +10 -30
  58. package/src/components/display/live/LiveItem.vue +0 -2
  59. package/src/components/display/live/LiveList.vue +9 -4
  60. package/src/components/display/live/RadioCurrently.vue +9 -5
  61. package/src/components/display/live/RadioImage.vue +6 -4
  62. package/src/components/display/live/RadioItem.vue +1 -2
  63. package/src/components/display/live/RadioList.vue +5 -3
  64. package/src/components/display/live/RadioPlanning.vue +10 -7
  65. package/src/components/display/organisation/OrganisationChooser.vue +8 -4
  66. package/src/components/display/participant/ParticipantInlineList.vue +5 -5
  67. package/src/components/display/participant/ParticipantItem.vue +13 -5
  68. package/src/components/display/participant/ParticipantList.vue +6 -3
  69. package/src/components/display/playlist/PlaylistItem.vue +12 -5
  70. package/src/components/display/playlist/PlaylistList.vue +6 -3
  71. package/src/components/display/playlist/PodcastList.vue +8 -4
  72. package/src/components/display/podcastmaker/PodcastmakerHeader.vue +6 -3
  73. package/src/components/display/podcasts/DownloadPodcastButton.vue +2 -4
  74. package/src/components/display/podcasts/PodcastImage.vue +6 -3
  75. package/src/components/display/podcasts/PodcastInlineListTemplate.vue +7 -4
  76. package/src/components/display/podcasts/PodcastItem.vue +1 -1
  77. package/src/components/display/podcasts/PodcastItemInfo.vue +6 -3
  78. package/src/components/display/podcasts/PodcastList.vue +6 -3
  79. package/src/components/display/podcasts/PodcastModuleBox.vue +22 -9
  80. package/src/components/display/podcasts/PodcastPlayBar.vue +1 -3
  81. package/src/components/display/podcasts/PodcastPlayButton.vue +1 -3
  82. package/src/components/display/podcasts/PodcastRawTranscript.vue +79 -10
  83. package/src/components/display/podcasts/PodcastRubriqueList.vue +4 -3
  84. package/src/components/display/podcasts/TagList.vue +5 -2
  85. package/src/components/display/podcasts/VideoModuleBox.vue +6 -3
  86. package/src/components/display/rubriques/RubriqueChooser.vue +0 -2
  87. package/src/components/display/rubriques/RubriqueList.vue +7 -5
  88. package/src/components/display/sharing/ShareButtons.vue +4 -2
  89. package/src/components/display/sharing/ShareDistribution.vue +4 -2
  90. package/src/components/form/ClassicEmojiPicker.vue +5 -3
  91. package/src/components/misc/ClassicLazy.vue +2 -2
  92. package/src/components/misc/FooterGarSection.vue +2 -3
  93. package/src/components/misc/FooterSection.vue +9 -5
  94. package/src/components/misc/MobileMenu.vue +5 -3
  95. package/src/components/misc/TopBar.vue +8 -6
  96. package/src/components/misc/TopBarMainContent.vue +8 -4
  97. package/src/components/misc/modal/ClassicModalInBody.vue +2 -3
  98. package/src/components/misc/modal/ClipboardModal.vue +4 -3
  99. package/src/components/misc/modal/NewsletterModal.vue +4 -3
  100. package/src/components/misc/modal/ShareModalPlayer.vue +4 -2
  101. package/src/components/misc/player/PlayerCompact.vue +30 -41
  102. package/src/components/misc/player/PlayerComponent.vue +69 -84
  103. package/src/components/misc/player/PlayerLarge.vue +43 -58
  104. package/src/components/misc/player/elements/PlayerImage.vue +6 -3
  105. package/src/components/misc/player/elements/PlayerTitle.vue +6 -2
  106. package/src/components/misc/player/radio/RadioHistory.vue +2 -4
  107. package/src/components/misc/player/video/PlayerVideoHls.vue +6 -7
  108. package/src/components/pages/EmissionPage.vue +19 -7
  109. package/src/components/pages/EmissionsPage.vue +31 -23
  110. package/src/components/pages/HomePage.vue +5 -2
  111. package/src/components/pages/PageLogout.vue +0 -2
  112. package/src/components/pages/PageNotFound.vue +11 -15
  113. package/src/components/pages/ParticipantPage.vue +18 -7
  114. package/src/components/pages/ParticipantsPage.vue +16 -21
  115. package/src/components/pages/PlaylistPage.vue +18 -7
  116. package/src/components/pages/PlaylistsPage.vue +20 -29
  117. package/src/components/pages/PodcastPage.vue +12 -6
  118. package/src/components/pages/PodcastsPage.vue +46 -48
  119. package/src/components/pages/RadioPage.vue +9 -6
  120. package/src/components/pages/RubriquePage.vue +41 -52
  121. package/src/components/pages/VideoPage.vue +152 -166
  122. package/src/helper/cookiesHelper.ts +20 -0
  123. package/src/helper/displayHelper.ts +15 -0
  124. package/src/helper/downloadHelper.ts +30 -0
  125. package/src/helper/{fetch.ts → fetchHelper.ts} +0 -1
  126. package/src/helper/loadScript.ts +22 -0
  127. package/src/helper/radio/radioHelper.ts +15 -0
  128. package/src/helper/{string.ts → stringHelper.ts} +5 -0
  129. package/src/locale/de.ts +4 -0
  130. package/src/locale/en.ts +4 -0
  131. package/src/locale/es.ts +4 -0
  132. package/src/locale/fr.ts +4 -0
  133. package/src/locale/it.ts +4 -0
  134. package/src/locale/sl.ts +4 -0
  135. package/src/stores/AuthStore.ts +1 -2
  136. package/src/stores/CommentStore.ts +8 -8
  137. package/src/stores/PlayerStore.ts +1 -1
  138. package/src/style/general.scss +15 -1
  139. package/src/components/mixins/cookies.ts +0 -22
  140. package/src/components/mixins/displayMethods.ts +0 -17
  141. package/src/components/mixins/download.ts +0 -33
  142. package/src/components/mixins/fetchParameters.ts +0 -16
  143. package/src/components/mixins/handle403.ts +0 -22
  144. package/src/components/mixins/imageProxy.ts +0 -28
  145. package/src/components/mixins/init.ts +0 -34
  146. package/src/components/mixins/loadScript.ts +0 -25
  147. package/src/components/mixins/metaTitle.ts +0 -15
  148. package/src/components/mixins/metaTitleWatch.ts +0 -26
  149. package/src/components/mixins/orgaComputed.ts +0 -23
  150. package/src/components/mixins/organisationFilter.ts +0 -56
  151. package/src/components/mixins/player/playerDisplayTime.ts +0 -35
  152. package/src/components/mixins/player/playerLive.ts +0 -144
  153. package/src/components/mixins/player/playerLogic.ts +0 -275
  154. package/src/components/mixins/player/playerLogicProgress.ts +0 -135
  155. package/src/components/mixins/player/playerStitching.ts +0 -202
  156. package/src/components/mixins/player/playerTranscript.ts +0 -113
  157. package/src/components/mixins/player/playerVast.ts +0 -198
  158. package/src/components/mixins/podcast/countdown.ts +0 -45
  159. package/src/components/mixins/podcast/podcastView.ts +0 -63
  160. package/src/components/mixins/radio/fetchRadioData.ts +0 -77
  161. package/src/components/mixins/resizePhone.ts +0 -26
  162. package/src/components/mixins/routeParam/advancedParamInit.ts +0 -202
  163. package/src/components/mixins/routeParam/paginateParamInit.ts +0 -43
  164. package/src/components/mixins/routeParam/routeParams.ts +0 -33
  165. package/src/components/mixins/routeParam/rubriquesFilterComputed.ts +0 -22
  166. package/src/components/mixins/routeParam/rubriquesFilterParam.ts +0 -29
  167. package/src/components/mixins/selenium.ts +0 -7
  168. package/src/components/mixins/seoTitleUrl.ts +0 -26
  169. package/src/components/mixins/tagOfMixins.ts +0 -19
  170. package/src/helper/uuidGenerator.ts +0 -7
  171. /package/src/{helper → components/composable}/useEventListener.ts +0 -0
  172. /package/src/{components/mixins/debounce.ts → helper/debounceHelper.ts} +0 -0
  173. /package/src/helper/{dom.ts → domHelper.ts} +0 -0
  174. /package/src/helper/{duration.ts → durationHelper.ts} +0 -0
@@ -39,60 +39,49 @@
39
39
  </button>
40
40
  </div>
41
41
  </template>
42
- <script lang="ts">
42
+ <script setup lang="ts">
43
43
  import ChevronUpIcon from "vue-material-design-icons/ChevronUp.vue";
44
44
  import WindowCloseIcon from "vue-material-design-icons/WindowClose.vue";
45
- import { playerDisplayTime } from "../../mixins/player/playerDisplayTime";
46
- import imageProxy from "../../mixins/imageProxy";
45
+ import {usePlayerDisplayTime} from "../../composable/player/usePlayerDisplayTime";
47
46
  import PlayerTitle from "./elements/PlayerTitle.vue";
48
47
  import PlayerChaptering from "./chaptering/PlayerChaptering.vue";
49
48
  import PlayerImage from "./elements/PlayerImage.vue";
50
49
  import PlayerPlayButton from "./elements/PlayerPlayButton.vue";
51
50
  import PlayerSpeedButton from "./elements/PlayerSpeedButton.vue";
52
- import { defineAsyncComponent, defineComponent } from "vue";
51
+ import { defineAsyncComponent} from "vue";
53
52
  const PlayerProgressBar = defineAsyncComponent(
54
53
  () => import("./progressbar/PlayerProgressBar.vue"),
55
54
  );
56
- export default defineComponent({
57
- name: "PlayerCompact",
55
+ //Props
56
+ defineProps( {
57
+ playerError: { default: false, type: Boolean },
58
+ displayAlertBar: { default: false, type: Boolean },
59
+ percentLiveProgress: { default: 0, type: Number },
60
+ durationLivePosition: { default: 0, type: Number },
61
+ listenTime: { default: 0, type: Number },
62
+ hlsReady: { default: false, type: Boolean },
63
+ });
58
64
 
59
- components: {
60
- PlayerProgressBar,
61
- PlayerChaptering,
62
- PlayerImage,
63
- PlayerPlayButton,
64
- PlayerTitle,
65
- PlayerSpeedButton,
66
- WindowCloseIcon,
67
- ChevronUpIcon,
68
- /* AdsSkipButton */
69
- },
70
- mixins: [playerDisplayTime, imageProxy],
65
+ //Emits
66
+ const emit = defineEmits(['stopPlayer', 'changePlayerLargeVersion']);
67
+
68
+ //Composables
69
+ const {
70
+ transcriptText,
71
+ radioUrl,
72
+ isAdPlaying,
73
+ displayPlayTime,
74
+ displayTotalTime,
75
+ } = usePlayerDisplayTime();
76
+
77
+ function stopPlayer() {
78
+ emit("stopPlayer");
79
+ }
80
+ function changePlayerLargeVersion() {
81
+ emit("changePlayerLargeVersion");
82
+ }
71
83
 
72
- props: {
73
- playerError: { default: false, type: Boolean },
74
- displayAlertBar: { default: false, type: Boolean },
75
- percentLiveProgress: { default: 0, type: Number },
76
- durationLivePosition: { default: 0, type: Number },
77
- listenTime: { default: 0, type: Number },
78
- hlsReady: { default: false, type: Boolean },
79
- },
80
84
 
81
- emits: ["stopPlayer", "changePlayerLargeVersion"],
82
- data() {
83
- return {
84
- showTimeline: false as boolean,
85
- };
86
- },
87
- methods: {
88
- stopPlayer() {
89
- this.$emit("stopPlayer");
90
- },
91
- changePlayerLargeVersion() {
92
- this.$emit("changePlayerLargeVersion");
93
- },
94
- },
95
- });
96
85
  </script>
97
86
 
98
87
  <style lang="scss">
@@ -3,15 +3,15 @@
3
3
  id="octopus-player-component"
4
4
  class="player-container"
5
5
  :class="{
6
- 'player-video': playerVideo,
6
+ 'player-video': playerStore.playerVideo,
7
7
  'overflow-hidden': !display
8
8
  }"
9
- :style="{ height: playerHeight }"
9
+ :style="{ height: playerStore.playerHeight }"
10
10
  @transitionend="onHidden"
11
11
  >
12
12
  <audio
13
13
  id="audio-player"
14
- :src="!playerLive && !playerRadio ? audioUrlToPlay : undefined"
14
+ :src="!playerStore.playerLive && !playerStore.playerRadio ? audioUrlToPlay : undefined"
15
15
  autoplay
16
16
  @timeupdate="onTimeUpdate"
17
17
  @ended="onFinished"
@@ -24,10 +24,10 @@
24
24
  />
25
25
  <div id="ad-container"></div>
26
26
  <template v-if="displayWithTimeout">
27
- <PlayerVideo v-if="playerVideo && isNotVideoPage" />
28
- <template v-else-if="!playerVideo">
27
+ <PlayerVideo v-if="playerStore.playerVideo && isNotVideoPage" />
28
+ <template v-else-if="!playerStore.playerVideo">
29
29
  <PlayerCompact
30
- v-if="!playerLargeVersion"
30
+ v-if="!playerStore.playerLargeVersion"
31
31
  :player-error="playerError"
32
32
  :display-alert-bar="displayAlertBar"
33
33
  :percent-live-progress="percentLiveProgress"
@@ -35,7 +35,7 @@
35
35
  :listen-time="listenTime"
36
36
  :hls-ready="hlsReady"
37
37
  @stop-player="stopPlayer"
38
- @change-player-large-version="playerUpdateLargeVersion(true)"
38
+ @change-player-large-version="playerStore.playerUpdateLargeVersion(true)"
39
39
  />
40
40
  <PlayerLarge
41
41
  v-else
@@ -46,17 +46,19 @@
46
46
  :listen-time="listenTime"
47
47
  :hls-ready="hlsReady"
48
48
  @stop-player="stopPlayer"
49
- @change-player-large-version="playerUpdateLargeVersion(false)"
49
+ @change-player-large-version="playerStore.playerUpdateLargeVersion(false)"
50
50
  />
51
51
  </template>
52
52
  </template>
53
53
  </section>
54
54
  </template>
55
- <script lang="ts">
56
- import { playerLogic } from "../../mixins/player/playerLogic";
55
+ <script setup lang="ts">
56
+ import {usePlayerLogic} from "../../composable/player/usePlayerLogic";
57
57
  import { usePlayerStore } from "../../../stores/PlayerStore";
58
- import { mapState, mapActions } from "pinia";
59
- import { defineComponent, defineAsyncComponent } from "vue";
58
+ import { defineAsyncComponent, ref, computed, watch } from "vue";
59
+ import { useRoute } from "vue-router";
60
+
61
+ //Components
60
62
  const PlayerVideo = defineAsyncComponent(
61
63
  () => import("./video/PlayerVideo.vue"),
62
64
  );
@@ -66,82 +68,65 @@ const PlayerCompact = defineAsyncComponent(
66
68
  const PlayerLarge = defineAsyncComponent(
67
69
  () => import("../player/PlayerLarge.vue"),
68
70
  );
69
- export default defineComponent({
70
- name: "PlayerComponent",
71
+ // Define stores
72
+ const playerStore = usePlayerStore();
73
+ const route = useRoute();
71
74
 
72
- components: {
73
- PlayerCompact,
74
- PlayerLarge,
75
- PlayerVideo,
76
- },
77
- mixins: [playerLogic],
78
- emits: ["hide"],
79
- data() {
80
- return {
81
- forceHide: false as boolean,
82
- listenTime: 0 as number,
83
- notListenTime: 0 as number,
84
- lastSend: 0 as number,
85
- downloadId: null as string | null,
86
- playerError: false as boolean,
87
- listenError: false as boolean,
88
- percentLiveProgress: 0 as number,
89
- durationLivePosition: 0 as number,
90
- displayAlertBar: false as boolean,
91
- audioUrlToPlay: "" as string,
92
- hlsReady: false as boolean,
93
- displayWithTimeout: false as boolean,
94
- };
95
- },
96
- computed: {
97
- ...mapState(usePlayerStore, [
98
- "playerStatus",
99
- "playerHeight",
100
- "playerLargeVersion",
101
- "playerVideo",
102
- ]),
103
- display() {
104
- return "STOPPED" !== this.playerStatus;
105
- },
106
- isNotVideoPage() {
107
- return "video" !== this.$route.name;
108
- },
109
- },
75
+ // Variables
76
+ const displayWithTimeout= ref(false);
77
+ const forceHide= ref(false);
110
78
 
111
- watch: {
112
- playerHeight(): void {
113
- this.$emit("hide", 0 === this.playerHeight);
114
- },
115
- display(): void {
116
- if (this.display) {
117
- this.displayWithTimeout = this.display;
118
- } else {
119
- setTimeout(() => {
120
- this.displayWithTimeout = this.display;
121
- }, 3000);
122
- }
123
- },
124
- },
79
+ //Composable
80
+ const {
81
+ audioUrlToPlay,
82
+ listenTime,
83
+ playerError,
84
+ percentLiveProgress,
85
+ durationLivePosition,
86
+ displayAlertBar,
87
+ hlsReady,
88
+ checkDelaytWithStitching,
89
+ stopPlayer,
90
+ onError,
91
+ onTimeUpdate,
92
+ onSeeked,
93
+ onFinished,
94
+ onPlay
95
+ } = usePlayerLogic(forceHide);
125
96
 
126
- methods: {
127
- ...mapActions(usePlayerStore, [
128
- "playerPlay",
129
- "playerUpdateLargeVersion",
130
- "playerChangeStatus",
131
- ]),
132
- onHidden(): void {
133
- if (this.forceHide) {
134
- this.playerPlay();
135
- this.forceHide = false;
136
- }
137
- },
138
- onPause() {
139
- if ("PLAYING" === this.playerStatus) {
140
- this.playerChangeStatus(true);
141
- }
142
- },
143
- },
97
+ // Emits
98
+ const emit = defineEmits(['hide']);
99
+
100
+ // Computed
101
+ const display = computed(() => { return "STOPPED" !== playerStore.playerStatus;});
102
+ const isNotVideoPage = computed(() => { return "video" !== route.name});
103
+
104
+ // Watch
105
+ watch(()=>playerStore.playerHeight, async () => {
106
+ emit("hide", 0 === playerStore.playerHeight);
144
107
  });
108
+ watch(display, async () => {
109
+ if (display.value) {
110
+ displayWithTimeout.value = display.value;
111
+ } else {
112
+ setTimeout(() => {
113
+ displayWithTimeout.value = display.value;
114
+ }, 3000);
115
+ }
116
+ });
117
+
118
+ // Functions
119
+ function onHidden(): void {
120
+ if (forceHide.value) {
121
+ playerStore.playerPlay();
122
+ forceHide.value = false;
123
+ }
124
+ }
125
+ function onPause() {
126
+ if ("PLAYING" === playerStore.playerStatus) {
127
+ playerStore.playerChangeStatus(true);
128
+ }
129
+ }
145
130
  </script>
146
131
 
147
132
  <style lang="scss">
@@ -66,18 +66,17 @@
66
66
  </div>
67
67
  </div>
68
68
  </template>
69
- <script lang="ts">
69
+
70
+ <script setup lang="ts">
70
71
  import Rewind15Icon from "vue-material-design-icons/Rewind15.vue";
71
72
  import FastForward15Icon from "vue-material-design-icons/FastForward15.vue";
72
73
  import ChevronDownIcon from "vue-material-design-icons/ChevronDown.vue";
73
- import { playerDisplayTime } from "../../mixins/player/playerDisplayTime";
74
- import imageProxy from "../../mixins/imageProxy";
74
+ import {usePlayerDisplayTime} from "../../composable/player/usePlayerDisplayTime";
75
75
  import PlayerChaptering from "./chaptering/PlayerChaptering.vue";
76
76
  import PlayerImage from "./elements/PlayerImage.vue";
77
77
  import PlayerTitle from "./elements/PlayerTitle.vue";
78
78
  import PlayerPlayButton from "./elements/PlayerPlayButton.vue";
79
- import { defineAsyncComponent, defineComponent } from "vue";
80
- import { mapState, mapActions } from "pinia";
79
+ import { defineAsyncComponent } from "vue";
81
80
  import { usePlayerStore } from "../../../stores/PlayerStore";
82
81
  const RadioHistory = defineAsyncComponent(
83
82
  () => import("./radio/RadioHistory.vue"),
@@ -85,62 +84,48 @@ const RadioHistory = defineAsyncComponent(
85
84
  const PlayerProgressBar = defineAsyncComponent(
86
85
  () => import("./progressbar/PlayerProgressBar.vue"),
87
86
  );
88
- export default defineComponent({
89
- name: "PlayerLarge",
90
87
 
91
- components: {
92
- PlayerProgressBar,
93
- RadioHistory,
94
- PlayerChaptering,
95
- PlayerImage,
96
- PlayerPlayButton,
97
- PlayerTitle,
98
- ChevronDownIcon,
99
- Rewind15Icon,
100
- FastForward15Icon,
101
- },
102
- mixins: [playerDisplayTime, imageProxy],
88
+ //Props
89
+ defineProps( {
90
+ playerError: { default: false, type: Boolean },
91
+ displayAlertBar: { default: false, type: Boolean },
92
+ percentLiveProgress: { default: 0, type: Number },
93
+ durationLivePosition: { default: 0, type: Number },
94
+ listenTime: { default: 0, type: Number },
95
+ hlsReady: { default: false, type: Boolean },
96
+ });
103
97
 
104
- props: {
105
- playerError: { default: false, type: Boolean },
106
- displayAlertBar: { default: false, type: Boolean },
107
- percentLiveProgress: { default: 0, type: Number },
108
- durationLivePosition: { default: 0, type: Number },
109
- listenTime: { default: 0, type: Number },
110
- hlsReady: { default: false, type: Boolean },
111
- },
98
+ //Emits
99
+ const emit = defineEmits(['changePlayerLargeVersion']);
112
100
 
113
- emits: ["stopPlayer", "changePlayerLargeVersion"],
114
- data() {
115
- return {
116
- showTimeline: false as boolean,
117
- };
118
- },
119
- computed: {
120
- ...mapState(usePlayerStore, ["playerPodcast", "playerLive"]),
121
- },
122
- methods: {
123
- ...mapActions(usePlayerStore, ["playerUpdateSeekTime"]),
124
- stopPlayer() {
125
- this.$emit("stopPlayer");
126
- },
127
- changePlayerLargeVersion() {
128
- this.$emit("changePlayerLargeVersion");
129
- },
130
- seekClick(addTime: number): void {
131
- const audioPlayer: HTMLAudioElement | null =
132
- document.querySelector("#audio-player");
133
- if (!audioPlayer) {
134
- return;
135
- }
136
- const seekTo = audioPlayer.currentTime + addTime;
137
- if (this.playerPodcast || this.playerLive) {
138
- this.playerUpdateSeekTime(seekTo > 0 ? seekTo : 0);
139
- }
140
- audioPlayer.currentTime = seekTo > 0 ? seekTo : 0;
141
- },
142
- },
143
- });
101
+ const playerStore = usePlayerStore();
102
+
103
+ //Composables
104
+ const {
105
+ transcriptText,
106
+ radioUrl,
107
+ isAdPlaying,
108
+ displayPlayTime,
109
+ displayTotalTime,
110
+ } = usePlayerDisplayTime();
111
+
112
+ function changePlayerLargeVersion() {
113
+ emit("changePlayerLargeVersion");
114
+ }
115
+
116
+
117
+ function seekClick(addTime: number): void {
118
+ const audioPlayer: HTMLAudioElement | null =
119
+ document.querySelector("#audio-player");
120
+ if (!audioPlayer) {
121
+ return;
122
+ }
123
+ const seekTo = audioPlayer.currentTime + addTime;
124
+ if (playerStore.playerPodcast || playerStore.playerLive) {
125
+ playerStore.playerUpdateSeekTime(seekTo > 0 ? seekTo : 0);
126
+ }
127
+ audioPlayer.currentTime = seekTo > 0 ? seekTo : 0;
128
+ }
144
129
  </script>
145
130
 
146
131
  <style lang="scss">
@@ -17,7 +17,7 @@
17
17
  :title="$t('Episode name page', { name: podcastDisplay?.title })"
18
18
  >
19
19
  <img
20
- v-lazy="proxyImageUrl(podcastImage, imageWidth)"
20
+ v-lazy="useProxyImageUrl(podcastImage, imageWidth)"
21
21
  :width="imageWidth"
22
22
  :height="imageWidth"
23
23
  role="presentation"
@@ -31,7 +31,7 @@
31
31
  </template>
32
32
  <script lang="ts">
33
33
  import LinkVariantIcon from "vue-material-design-icons/LinkVariant.vue";
34
- import imageProxy from "../../../mixins/imageProxy";
34
+ import {useImageProxy} from "../../../composable/useImageProxy";
35
35
  import { defineComponent } from "vue";
36
36
  import { RouteLocationRaw } from "vue-router";
37
37
  import { mapState } from "pinia";
@@ -43,10 +43,13 @@ export default defineComponent({
43
43
 
44
44
  components: { LinkVariantIcon },
45
45
 
46
- mixins: [imageProxy],
47
46
  props: {
48
47
  imageWidth: { default: 48, type: Number },
49
48
  },
49
+ setup(){
50
+ const { useProxyImageUrl } = useImageProxy();
51
+ return { useProxyImageUrl }
52
+ },
50
53
  computed: {
51
54
  ...mapState(usePlayerStore, [
52
55
  "playerPodcast",
@@ -15,7 +15,7 @@
15
15
  </component>
16
16
  </template>
17
17
  <script lang="ts">
18
- import { fetchRadioData } from "../../../mixins/radio/fetchRadioData";
18
+ import {useFetchRadio} from "../../../composable/radio/usefetchRadioData";
19
19
  import { state } from "../../../../stores/ParamSdkStore";
20
20
  import { usePlayerStore } from "../../../../stores/PlayerStore";
21
21
  import { useVastStore } from "../../../../stores/VastStore";
@@ -25,7 +25,6 @@ import { MediaRadio, NextAdvertising } from "@/stores/class/general/player";
25
25
  import { Podcast } from "@/stores/class/general/podcast";
26
26
  export default defineComponent({
27
27
  name: "PlayerTitle",
28
- mixins: [fetchRadioData],
29
28
 
30
29
  props: {
31
30
  playerError: { default: false, type: Boolean },
@@ -33,6 +32,11 @@ export default defineComponent({
33
32
  titleClass: { default: "", type: String },
34
33
  },
35
34
 
35
+ setup(){
36
+ const { fetchRadioMetadata, displayTitle } = useFetchRadio();
37
+ return { fetchRadioMetadata, displayTitle };
38
+ },
39
+
36
40
  data() {
37
41
  return {
38
42
  radioInterval: undefined as ReturnType<typeof setTimeout> | undefined,
@@ -41,7 +41,7 @@ import ChevronRightIcon from "vue-material-design-icons/ChevronRight.vue";
41
41
  import { usePlayerStore } from "../../../../stores/PlayerStore";
42
42
  import { mapState } from "pinia";
43
43
  import dayjs from "dayjs";
44
- import { fetchRadioData } from "../../../mixins/radio/fetchRadioData";
44
+ import radioHelper from "../../../../helper/radio/radioHelper";
45
45
  import { defineComponent } from "vue";
46
46
  import { MediaRadio } from "@/stores/class/general/player";
47
47
  export default defineComponent({
@@ -51,8 +51,6 @@ export default defineComponent({
51
51
  ChevronLeftIcon,
52
52
  ChevronRightIcon,
53
53
  },
54
-
55
- mixins: [fetchRadioData],
56
54
  emits: ["updateNotListenTime"],
57
55
  data() {
58
56
  return {
@@ -138,7 +136,7 @@ export default defineComponent({
138
136
  if (item.podcastId) {
139
137
  return item.title;
140
138
  }
141
- return this.displayTitle(item);
139
+ return radioHelper.displayTitle(item);
142
140
  },
143
141
  },
144
142
  });
@@ -16,7 +16,7 @@
16
16
  <script lang="ts">
17
17
  import { usePlayerStore } from "../../../../stores/PlayerStore";
18
18
  import { mapActions } from "pinia";
19
- import { playerLogicProgress } from "../../../mixins/player/playerLogicProgress";
19
+ import {usePlayerLogicProgress} from "../../../composable/player/usePlayerLogicProgress";
20
20
  import videojs, { VideoJsPlayer } from "video.js";
21
21
  import qualitySelectorHls from "videojs-quality-selector-hls";
22
22
  if (undefined === videojs.getPlugin("qualitySelectorHls")) {
@@ -25,13 +25,17 @@ if (undefined === videojs.getPlugin("qualitySelectorHls")) {
25
25
  import { defineComponent } from "vue";
26
26
  export default defineComponent({
27
27
  name: "PlayerVideoHls",
28
- mixins: [playerLogicProgress],
29
28
 
30
29
  props: {
31
30
  hlsUrl: { default: "", type: String },
32
31
  responsive: { default: false, type: Boolean },
33
32
  },
34
33
  emits: ["changeValid"],
34
+
35
+ setup(){
36
+ const { downloadId, initLiveDownloadId, onTimeUpdateProgress} = usePlayerLogicProgress();
37
+ return { downloadId, initLiveDownloadId, onTimeUpdateProgress }
38
+ },
35
39
  data() {
36
40
  return {
37
41
  errorPlay: "" as string,
@@ -40,11 +44,6 @@ export default defineComponent({
40
44
  playing: false as boolean,
41
45
  isPaused: false as boolean,
42
46
  stalledTimout: undefined as ReturnType<typeof setTimeout> | undefined,
43
- //playerLive mixins
44
- downloadId: null as string | null,
45
- listenTime: 0 as number,
46
- notListenTime: 0 as number,
47
- lastSend: 0 as number,
48
47
  };
49
48
  },
50
49
  computed: {
@@ -14,7 +14,7 @@
14
14
  <div class="d-flex mb-2">
15
15
  <div class="w-100">
16
16
  <img
17
- v-lazy="proxyImageUrl(emission.imageUrl, '250')"
17
+ v-lazy="useProxyImageUrl(emission.imageUrl, '250')"
18
18
  width="250"
19
19
  height="250"
20
20
  role="presentation"
@@ -97,11 +97,11 @@
97
97
  <script lang="ts">
98
98
  import classicApi from "../../api/classicApi";
99
99
  import { state } from "../../stores/ParamSdkStore";
100
- import displayMethods from "../mixins/displayMethods";
101
- import imageProxy from "../mixins/imageProxy";
102
- import { orgaComputed } from "../mixins/orgaComputed";
103
- import { seoTitleUrl } from "../mixins/seoTitleUrl";
104
- import { handle403 } from "../mixins/handle403";
100
+ import displayHelper from "../../helper/displayHelper";
101
+ import {useImageProxy} from "../composable/useImageProxy";
102
+ import {useOrgaComputed} from "../composable/useOrgaComputed";
103
+ import {useSeoTitleUrl} from "../composable/route/useSeoTitleUrl";
104
+ import {useErrorHandler} from "../composable/useErrorHandler";
105
105
  import { Emission } from "@/stores/class/general/emission";
106
106
  import ClassicLoading from "../form/ClassicLoading.vue";
107
107
  import { defineComponent, defineAsyncComponent } from "vue";
@@ -109,6 +109,7 @@ import { AxiosError } from "axios";
109
109
  import { mapActions, mapState } from "pinia";
110
110
  import { useAuthStore } from "../../stores/AuthStore";
111
111
  import { useGeneralStore } from "../../stores/GeneralStore";
112
+ import { useFilterStore } from "../../stores/FilterStore";
112
113
  import { useApiStore } from "../../stores/ApiStore";
113
114
  import { Podcast } from "@/stores/class/general/podcast";
114
115
  const PodcastFilterList = defineAsyncComponent(
@@ -151,11 +152,18 @@ export default defineComponent({
151
152
  PodcastPlayButton,
152
153
  PodcastmakerHeader,
153
154
  },
154
- mixins: [displayMethods, handle403, orgaComputed, imageProxy, seoTitleUrl],
155
155
  props: {
156
156
  emissionId: { default: undefined, type: Number },
157
157
  },
158
158
 
159
+ setup(){
160
+ const { useProxyImageUrl } = useImageProxy();
161
+ const { isPodcastmaker, isEditRights, authOrgaId } = useOrgaComputed();
162
+ const { updatePathParams } = useSeoTitleUrl();
163
+ const {handle403} = useErrorHandler();
164
+ return { useProxyImageUrl, isPodcastmaker, isEditRights, authOrgaId, updatePathParams, handle403 }
165
+ },
166
+
159
167
  data() {
160
168
  return {
161
169
  loaded: false as boolean,
@@ -172,6 +180,7 @@ export default defineComponent({
172
180
  computed: {
173
181
  ...mapState(useAuthStore, ["isGarRole"]),
174
182
  ...mapState(useApiStore, ["apiUrl"]),
183
+ ...mapState(useFilterStore, ["filterOrgaId"]),
175
184
  pageParameters() {
176
185
  return {
177
186
  isShareButtons: state.podcastPage.ShareButtons as boolean,
@@ -211,6 +220,9 @@ export default defineComponent({
211
220
 
212
221
  methods: {
213
222
  ...mapActions(useGeneralStore, ["contentToDisplayUpdate"]),
223
+ urlify(text:string|undefined){
224
+ return displayHelper.urlify(text);
225
+ },
214
226
  initError(): void {
215
227
  this.error = true;
216
228
  this.loaded = true;