@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
@@ -1,12 +1,22 @@
1
1
  <template>
2
2
  <div>
3
- <button
4
- class="btn btn-transcript"
5
- :class="{ open: isOpen }"
6
- @click="isOpen = !isOpen"
7
- >
8
- {{ buttonText }}
9
- </button>
3
+ <AccessibilityModal
4
+ v-if="isAccessibilityModal"
5
+ @save="saveAccessibility"
6
+ @close="isAccessibilityModal = false"
7
+ />
8
+ <div class="transcription-section-buttons">
9
+ <button v-if="isOpen" class="btn btn-primary m-0" @click="isAccessibilityModal = true">
10
+ <EyeOutlineIcon class="me-1"/> {{ $t('Transcript Accessibility') }}
11
+ </button>
12
+ <button
13
+ class="btn btn-transcript"
14
+ :class="{ open: isOpen }"
15
+ @click="isOpen = !isOpen"
16
+ >
17
+ {{ buttonText }}
18
+ </button>
19
+ </div>
10
20
  <div v-if="isOpen" class="transcription-body">
11
21
  <ClassicLoading
12
22
  :loading-text="!firstLoaded ? $t('Loading content ...') : undefined"
@@ -24,14 +34,21 @@
24
34
  </template>
25
35
 
26
36
  <script lang="ts">
37
+ import cookiesHelper from "../../../helper/cookiesHelper";
38
+ import EyeOutlineIcon from "vue-material-design-icons/EyeOutline.vue";
27
39
  import classicApi from "../../../api/classicApi";
28
40
  import ClassicLoading from "../../form/ClassicLoading.vue";
29
- import { defineComponent } from "vue";
41
+ import { defineAsyncComponent, defineComponent } from "vue";
42
+ const AccessibilityModal = defineAsyncComponent(
43
+ () => import("../accessibility/AccessibilityModal.vue"),
44
+ );
30
45
  export default defineComponent({
31
46
  name: "PodcastRawTranscript",
32
47
 
33
48
  components: {
34
49
  ClassicLoading,
50
+ EyeOutlineIcon,
51
+ AccessibilityModal
35
52
  },
36
53
 
37
54
  props: {
@@ -42,6 +59,7 @@ export default defineComponent({
42
59
  isOpen: false as boolean,
43
60
  firstLoaded: false as boolean,
44
61
  transcript: undefined as string | undefined,
62
+ isAccessibilityModal : false as boolean,
45
63
  };
46
64
  },
47
65
 
@@ -56,10 +74,37 @@ export default defineComponent({
56
74
  async isOpen() {
57
75
  if (this.isOpen && !this.firstLoaded) {
58
76
  this.fetchTranscript();
77
+ this.getAccessibility();
59
78
  }
60
79
  },
61
80
  },
62
81
  methods: {
82
+ getAccessibility(){
83
+ let fontSize = cookiesHelper.getCookie("octopus-font-size");
84
+ if (null !== fontSize) {
85
+ this.setCssProperty('--octopus-accessibility-font-size', fontSize);
86
+ }
87
+ let background = cookiesHelper.getCookie("octopus-background");
88
+ if (null !== background) {
89
+ this.setCssProperty('--octopus-accessibility-background', background);
90
+ }
91
+ let color = cookiesHelper.getCookie("octopus-color");
92
+ if (null !== color) {
93
+ this.setCssProperty('--octopus-accessibility-color', color);
94
+ }
95
+ },
96
+ setCssProperty(name: string, value: string){
97
+ document.documentElement.style.setProperty(name,value);
98
+ },
99
+ saveAccessibility(accessibility: {fontSize: number,background: string,color: string}){
100
+ this.setCssProperty('--octopus-accessibility-font-size', accessibility.fontSize+'px');
101
+ cookiesHelper.setCookie("octopus-font-size", accessibility.fontSize+'px');
102
+ this.setCssProperty('--octopus-accessibility-background', accessibility.background);
103
+ cookiesHelper.setCookie("octopus-background",accessibility.background);
104
+ this.setCssProperty('--octopus-accessibility-color', accessibility.color);
105
+ cookiesHelper.setCookie("octopus-color",accessibility.color);
106
+ this.isAccessibilityModal = false;
107
+ },
63
108
  async fetchTranscript() {
64
109
  if (!this.podcastId) {
65
110
  return;
@@ -78,15 +123,36 @@ export default defineComponent({
78
123
  });
79
124
  </script>
80
125
  <style lang="scss">
81
-
82
-
126
+ :root {
127
+ --octopus-accessibility-font-size: 16px;
128
+ --octopus-accessibility-background: var(--octopus-background);
129
+ --octopus-accessibility-color: var(--octopus-color-text);
130
+ }
83
131
  .octopus-app {
132
+ .transcription-section-buttons{
133
+ display: flex;
134
+ justify-content: space-between;
135
+ flex-wrap: wrap;
136
+ @media (width <= 625px) {
137
+ flex-direction: column;
138
+ }
139
+ }
84
140
  .btn-transcript {
85
141
  position: relative;
86
142
  border-radius: var(--octopus-border-radius);
87
143
  overflow: hidden;
88
144
  background: var(--octopus-secondary);
89
145
  transition: all 0.2s linear 0s;
146
+
147
+ &.open{
148
+ margin-left:auto;
149
+ @media (width <= 625px) {
150
+ margin-top: 0.5rem;
151
+ }
152
+ }
153
+ &:not(.open){
154
+ margin-right: auto;
155
+ }
90
156
 
91
157
  &:not(.open)::before,
92
158
  &.open::after {
@@ -137,12 +203,15 @@ export default defineComponent({
137
203
  }
138
204
 
139
205
  .transcription-body {
206
+ font-size: var(--octopus-accessibility-font-size);
140
207
  position: relative;
141
208
  padding: 1rem;
142
209
  max-height: 250px;
143
210
  display: flex;
144
211
  justify-content: center;
145
212
  white-space: pre-wrap;
213
+ background: var(--octopus-accessibility-background);
214
+ color: var(--octopus-accessibility-color);
146
215
 
147
216
  .transcription-text {
148
217
  overflow: hidden auto;
@@ -41,9 +41,7 @@ export default defineComponent({
41
41
  init: false as boolean,
42
42
  };
43
43
  },
44
- created() {
45
- this.fetchRubriquages();
46
- },
44
+
47
45
  computed:{
48
46
  ...mapState(useFilterStore, ["filterOrgaId"]),
49
47
  organisationQuery(){
@@ -53,6 +51,9 @@ export default defineComponent({
53
51
  return { o: this.orgaId};
54
52
  }
55
53
  },
54
+ created() {
55
+ this.fetchRubriquages();
56
+ },
56
57
  methods:{
57
58
  ...mapActions(useSaveFetchStore, ["getOrgaRubriques"]),
58
59
  async fetchRubriquages(){
@@ -44,13 +44,12 @@ import { defineAsyncComponent, defineComponent } from "vue";
44
44
  const ClassicPopover = defineAsyncComponent(
45
45
  () => import("../../misc/ClassicPopover.vue"),
46
46
  );
47
- import tagOfMixins from "../../mixins/tagOfMixins";
47
+ import {useTagOf} from "../../composable/useTagOf";
48
48
  export default defineComponent({
49
49
  name: "TagList",
50
50
  components: {
51
51
  ClassicPopover,
52
52
  },
53
- mixins: [tagOfMixins],
54
53
  props: {
55
54
  tagList: { default: () => [], type: Array as () => Array<string> },
56
55
  podcastAnnotations: {
@@ -60,6 +59,10 @@ export default defineComponent({
60
59
  },
61
60
  },
62
61
  },
62
+ setup(){
63
+ const { isOuestFranceTag, formateOfTag } = useTagOf();
64
+ return { isOuestFranceTag, formateOfTag }
65
+ },
63
66
  computed: {
64
67
  ouestFranceMainTag(): string | undefined {
65
68
  if (this.podcastAnnotations?.["mainOfTag"]) {
@@ -24,7 +24,7 @@
24
24
 
25
25
  <script lang="ts">
26
26
  import { Podcast } from "@/stores/class/general/podcast";
27
- import displayMethods from "../../mixins/displayMethods";
27
+ import displayHelper from "../../../helper/displayHelper";
28
28
  import PodcastRawTranscript from "./PodcastRawTranscript.vue";
29
29
  import { defineAsyncComponent, defineComponent } from "vue";
30
30
  const ParticipantDescription = defineAsyncComponent(
@@ -37,8 +37,6 @@ export default defineComponent({
37
37
  PodcastRawTranscript,
38
38
  },
39
39
 
40
- mixins: [displayMethods],
41
-
42
40
  props: {
43
41
  podcast: { default: undefined, type: Object as () => Podcast },
44
42
  date: { default: "", type: String },
@@ -50,5 +48,10 @@ export default defineComponent({
50
48
  return {};
51
49
  },
52
50
  computed: {},
51
+ methods: {
52
+ urlify(text:string|undefined){
53
+ return displayHelper.urlify(text);
54
+ },
55
+ }
53
56
  });
54
57
  </script>
@@ -21,7 +21,6 @@
21
21
  </template>
22
22
 
23
23
  <script lang="ts">
24
- import selenium from "../../mixins/selenium";
25
24
  import { Rubrique } from "@/stores/class/rubrique/rubrique";
26
25
  import ClassicMultiselect from "../../form/ClassicMultiselect.vue";
27
26
  import { defineComponent } from "vue";
@@ -29,7 +28,6 @@ export default defineComponent({
29
28
  components: {
30
29
  ClassicMultiselect,
31
30
  },
32
- mixins: [selenium],
33
31
  props: {
34
32
  defaultanswer: { default: "", type: String },
35
33
  width: { default: "100%", type: String },
@@ -51,7 +51,7 @@
51
51
 
52
52
  <script lang="ts">
53
53
  import PlusIcon from "vue-material-design-icons/Plus.vue";
54
- import { rubriquesFilterParam } from "../../mixins/routeParam/rubriquesFilterParam";
54
+ import { useRubriquesFilterParam } from "../../composable/route/useRubriquesFilterParam";
55
55
  import ClassicPopover from "../../misc/ClassicPopover.vue";
56
56
  import { Rubrique } from "@/stores/class/rubrique/rubrique";
57
57
  import { Rubriquage } from "@/stores/class/rubrique/rubriquage";
@@ -70,12 +70,15 @@ export default defineComponent({
70
70
  PlusIcon,
71
71
  },
72
72
 
73
- mixins: [rubriquesFilterParam],
74
-
75
73
  props: {
76
74
  rubriquages: { default: () => [], type: Array as () => Array<Rubriquage> },
77
75
  },
78
76
 
77
+ setup(){
78
+ const { modifyRubriquesFilter } = useRubriquesFilterParam();
79
+ return { modifyRubriquesFilter }
80
+ },
81
+
79
82
  data() {
80
83
  return {
81
84
  hidenRubriques: [] as Array<Rubrique>,
@@ -104,8 +107,7 @@ export default defineComponent({
104
107
  return !rubriquageIdToNotShow.includes(element.rubriquageId);
105
108
  });
106
109
  }
107
- const rubriquagesOrdered = Array.from(this.rubriquages);
108
- return rubriquagesOrdered.sort((a,b) => (a.title > b.title) ? 1 : ((b.title > a.title) ? -1 : 0));
110
+ return Array.from(this.rubriquages).toSorted((a,b) => (a.title > b.title) ? 1 : ((b.title > a.title) ? -1 : 0));
109
111
  },
110
112
  },
111
113
  watch: {
@@ -143,7 +143,7 @@ import { Podcast } from "@/stores/class/general/podcast";
143
143
  import { state } from "../../../stores/ParamSdkStore";
144
144
  import { useAuthStore } from "../../../stores/AuthStore";
145
145
  import classicApi from "../../../api/classicApi";
146
- import displayMethods from "../../mixins/displayMethods";
146
+ import displayHelper from "../../../helper/displayHelper";
147
147
  import { defineAsyncComponent, defineComponent } from "vue";
148
148
  import { Playlist } from "@/stores/class/general/playlist";
149
149
  const ClipboardModal = defineAsyncComponent(
@@ -172,7 +172,6 @@ export default defineComponent({
172
172
  XIcon,
173
173
  CreationIcon,
174
174
  },
175
- mixins: [displayMethods],
176
175
  props: {
177
176
  podcast: { default: undefined, type: Object as () => Podcast },
178
177
  emission: { default: undefined, type: Object as () => Emission },
@@ -283,6 +282,9 @@ export default defineComponent({
283
282
  },
284
283
  methods: {
285
284
  ...mapActions(useSaveFetchStore, ["getOrgaAttributes"]),
285
+ onCopyCode(link: string, callback: () => void){
286
+ displayHelper.onCopyCode(link, callback);
287
+ },
286
288
  async initShareButtons() {
287
289
  if (undefined !== this.participantId) {
288
290
  this.displayRss = await classicApi.fetchData<boolean>({
@@ -50,7 +50,7 @@ import SpotifyIcon from "vue-material-design-icons/Spotify.vue";
50
50
  import { useApiStore } from "../../../stores/ApiStore";
51
51
  import classicApi from "../../../api/classicApi";
52
52
  import SnackBar from "../../misc/SnackBar.vue";
53
- import displayMethods from "../../mixins/displayMethods";
53
+ import displayHelper from "../../../helper/displayHelper";
54
54
  import { Emission } from "@/stores/class/general/emission";
55
55
 
56
56
  import { defineComponent, defineAsyncComponent } from "vue";
@@ -74,7 +74,6 @@ export default defineComponent({
74
74
  TuninIcon,
75
75
  RadiolineIcon,
76
76
  },
77
- mixins: [displayMethods],
78
77
  props: {
79
78
  emissionId: { default: undefined, type: Number },
80
79
  },
@@ -160,6 +159,9 @@ export default defineComponent({
160
159
  },
161
160
 
162
161
  methods: {
162
+ onCopyCode(link: string, callback: () => void){
163
+ displayHelper.onCopyCode(link, callback);
164
+ },
163
165
  getUrl(platform: string): string {
164
166
  return `/main/priv/distribution/${platform}/${this.emissionId}`;
165
167
  },
@@ -28,7 +28,7 @@
28
28
  </template>
29
29
 
30
30
  <script lang="ts">
31
- import resizePhone from "../mixins/resizePhone";
31
+ import {useResizePhone} from "../composable/useResizePhone";
32
32
  import EmoticonExcitedOutlineIcon from "vue-material-design-icons/EmoticonExcitedOutline.vue";
33
33
  import ClassicPopover from "../misc/ClassicPopover.vue";
34
34
  import data from "emoji-mart-vue-fast/data/all.json";
@@ -43,18 +43,20 @@ export default defineComponent({
43
43
  ClassicPopover,
44
44
  EmoticonExcitedOutlineIcon,
45
45
  },
46
- mixins:[resizePhone],
47
46
  props: {
48
47
  popoverRelativeClass: { default: undefined, type: String },
49
48
  isTopPosition: { default: false, type: Boolean },
50
49
  id: { default: "", type: String },
51
50
  },
52
51
  emits: ["emojiSelected"],
52
+ setup(){
53
+ const { isPhone } = useResizePhone();
54
+ return { isPhone }
55
+ },
53
56
 
54
57
  data() {
55
58
  return {
56
59
  emojiIndex: emojiIndex,
57
- isPhone: false as boolean,
58
60
  };
59
61
  },
60
62
  });
@@ -45,7 +45,7 @@ export default {
45
45
  setTimeout(() => {
46
46
  waitBeforeInit.value = false;
47
47
  }, props.initRenderDelay);
48
- const { isActive, pause, resume } = useIntersectionObserver(
48
+ const { pause, resume } = useIntersectionObserver(
49
49
  targetEl,
50
50
  ([{ isIntersecting }]) => {
51
51
  if (waitBeforeInit.value) {
@@ -91,7 +91,7 @@ export default {
91
91
  }
92
92
  watch(
93
93
  () => props.unrender,
94
- (newValue, _) => {
94
+ (newValue) => {
95
95
  if (newValue) {
96
96
  clearTimeout(renderTimer);
97
97
  unrenderTimer = setTimeout(() => {
@@ -18,7 +18,7 @@
18
18
  </template>
19
19
 
20
20
  <script lang="ts">
21
- import download from "../mixins/download";
21
+ import downloadHelper from "../../helper/downloadHelper";
22
22
  import classicApi from "../../api/classicApi";
23
23
  import { Contract } from "../../stores/class/contract/contract";
24
24
  import { defineAsyncComponent, defineComponent } from "vue";
@@ -32,7 +32,6 @@ export default defineComponent({
32
32
  components: {
33
33
  ContractPreviewModal,
34
34
  },
35
- mixins: [download],
36
35
  props: {
37
36
  authOrgaId: { default: undefined, type: String },
38
37
  },
@@ -62,7 +61,7 @@ export default defineComponent({
62
61
  downloadContract(contract: Contract) {
63
62
  if (contract) {
64
63
  const url = this.keycloakUrl + "contract/" + contract.id;
65
- this.onDownload(url, "download" + contract.name + ".pdf");
64
+ downloadHelper.onDownload(url, "download" + contract.name + ".pdf");
66
65
  }
67
66
  },
68
67
  },
@@ -73,9 +73,9 @@
73
73
  </template>
74
74
 
75
75
  <script lang="ts">
76
- import cookies from "../mixins/cookies";
77
- import { rubriquesFilterComputed } from "../mixins/routeParam/rubriquesFilterComputed";
78
- import orgaFilter from "../mixins/organisationFilter";
76
+ import cookiesHelper from "../../helper/cookiesHelper";
77
+ import { useRubriquesFilterComputed } from "../composable/route/useRubriquesFilterComputed";
78
+ import { useOrganisationFilter } from "../composable/useOrganisationFilter";
79
79
  import ClassicSelect from "../form/ClassicSelect.vue";
80
80
  import AcpmImage from "./AcpmImage.vue";
81
81
  import { state } from "../../stores/ParamSdkStore";
@@ -103,7 +103,11 @@ export default defineComponent({
103
103
  FooterGarSection,
104
104
  },
105
105
 
106
- mixins: [cookies, orgaFilter, rubriquesFilterComputed],
106
+ setup(){
107
+ const { rubriqueQueryParam } = useRubriquesFilterComputed();
108
+ const {selectOrganisation, removeSelectedOrga} = useOrganisationFilter();
109
+ return { rubriqueQueryParam , selectOrganisation, removeSelectedOrga}
110
+ },
107
111
  data() {
108
112
  return {
109
113
  language: this.$i18n.locale,
@@ -170,7 +174,7 @@ export default defineComponent({
170
174
  };
171
175
  },
172
176
  changeLanguage(): void {
173
- this.setCookie("octopus-language", this.language);
177
+ cookiesHelper.setCookie("octopus-language", this.language);
174
178
  loadLocaleMessages(
175
179
  this.$i18n,
176
180
  this.language,
@@ -58,9 +58,8 @@
58
58
 
59
59
  <script lang="ts">
60
60
  import MenuIcon from "vue-material-design-icons/Menu.vue";
61
- import { rubriquesFilterComputed } from "../mixins/routeParam/rubriquesFilterComputed";
61
+ import { useRubriquesFilterComputed } from "../composable/route/useRubriquesFilterComputed";
62
62
  import { state } from "../../stores/ParamSdkStore";
63
- import orgaFilter from "../mixins/organisationFilter";
64
63
  import { defineComponent, defineAsyncComponent } from "vue";
65
64
  import { useFilterStore } from "../../stores/FilterStore";
66
65
  import { useAuthStore } from "../../stores/AuthStore";
@@ -74,13 +73,16 @@ export default defineComponent({
74
73
  ClassicPopover,
75
74
  MenuIcon,
76
75
  },
77
- mixins: [orgaFilter, rubriquesFilterComputed],
78
76
  props: {
79
77
  isEducation: { default: false, type: Boolean },
80
78
  show: { default: false, type: Boolean },
81
79
  notPodcastAndEmission: { default: false, type: Boolean },
82
80
  scrolled: { default: false, type: Boolean },
83
81
  },
82
+ setup(){
83
+ const { rubriqueQueryParam } = useRubriquesFilterComputed();
84
+ return { rubriqueQueryParam }
85
+ },
84
86
  data() {
85
87
  return {
86
88
  firstLoaded: false as boolean,
@@ -27,7 +27,7 @@
27
27
  </template>
28
28
 
29
29
  <script lang="ts">
30
- import imageProxy from "../mixins/imageProxy";
30
+ import {useImageProxy} from "../composable/useImageProxy";
31
31
  import TopBarMainContent from "./TopBarMainContent.vue";
32
32
  import { mapState } from "pinia";
33
33
  import { defineAsyncComponent, defineComponent } from "vue";
@@ -35,7 +35,7 @@ import { useAuthStore } from "../../stores/AuthStore";
35
35
  import { useGeneralStore } from "../../stores/GeneralStore";
36
36
  import { Podcast } from "@/stores/class/general/podcast";
37
37
  import { Emission } from "@/stores/class/general/emission";
38
- import resizePhone from "../mixins/resizePhone";
38
+ import {useResizePhone} from "../composable/useResizePhone";
39
39
  import { Playlist } from "@/stores/class/general/playlist";
40
40
  import { Canal } from "@/stores/class/radio/canal";
41
41
  const SubscribeButtons = defineAsyncComponent(
@@ -47,15 +47,17 @@ export default defineComponent({
47
47
  TopBarMainContent,
48
48
  SubscribeButtons,
49
49
  },
50
+ setup(){
51
+ const { isPhone, windowWidth } = useResizePhone();
52
+ const { useProxyImageUrl } = useImageProxy();
53
+ return { isPhone, windowWidth, useProxyImageUrl }
54
+ },
50
55
 
51
- mixins: [imageProxy, resizePhone],
52
56
  data() {
53
57
  return {
54
58
  scrolled: false as boolean,
55
59
  oldScrollY: 0 as number,
56
60
  minScroll: 0 as number,
57
- isPhone: false as boolean,
58
- windowWidth: 0 as number,
59
61
  };
60
62
  },
61
63
  computed: {
@@ -73,7 +75,7 @@ export default defineComponent({
73
75
  if (!this.contentToDisplay) {
74
76
  return "";
75
77
  }
76
- return `background-image: url('${this.proxyImageUrl(
78
+ return `background-image: url('${this.useProxyImageUrl(
77
79
  this.contentToDisplay.imageUrl,
78
80
  "270",
79
81
  )}');`;
@@ -22,7 +22,7 @@
22
22
  />
23
23
  <img
24
24
  v-else
25
- :src="proxyImageUrl(imgUrl, '', '80')"
25
+ :src="useProxyImageUrl(imgUrl, '', '80')"
26
26
  role="presentation"
27
27
  alt=""
28
28
  class="client-logo"
@@ -157,10 +157,10 @@
157
157
  <script lang="ts">
158
158
  import ChevronDownIcon from "vue-material-design-icons/ChevronDown.vue";
159
159
  import MagnifyIcon from "vue-material-design-icons/Magnify.vue";
160
- import { rubriquesFilterComputed } from "../mixins/routeParam/rubriquesFilterComputed";
160
+ import { useRubriquesFilterComputed } from "../composable/route/useRubriquesFilterComputed";
161
161
  import { state } from "../../stores/ParamSdkStore";
162
162
  import HomeDropdown from "./HomeDropdown.vue";
163
- import imageProxy from "../mixins/imageProxy";
163
+ import {useImageProxy} from "../composable/useImageProxy";
164
164
  import { useFilterStore } from "../../stores/FilterStore";
165
165
  import { useAuthStore } from "../../stores/AuthStore";
166
166
  import { mapState } from "pinia";
@@ -177,12 +177,16 @@ export default defineComponent({
177
177
  MagnifyIcon,
178
178
  ChevronDownIcon,
179
179
  },
180
- mixins: [imageProxy, rubriquesFilterComputed],
181
180
  props: {
182
181
  isPhone: { default: false, type: Boolean },
183
182
  titleDisplay: { default: "", type: String },
184
183
  scrolled: { default: false, type: Boolean },
185
184
  },
185
+ setup(){
186
+ const { useProxyImageUrl } = useImageProxy();
187
+ const { rubriqueQueryParam } = useRubriquesFilterComputed();
188
+ return { useProxyImageUrl, rubriqueQueryParam }
189
+ },
186
190
  data() {
187
191
  return {};
188
192
  },
@@ -89,8 +89,8 @@ export default defineComponent({
89
89
  position: fixed;
90
90
  top: 0;
91
91
  left: 0;
92
- width: 100vw;
93
- height: 100dvh;
92
+ width: 100%;
93
+ height: 100%;
94
94
  background-color: black;
95
95
  }
96
96
 
@@ -110,7 +110,6 @@ export default defineComponent({
110
110
 
111
111
  @media (width <= 500px) {
112
112
  width: 95%;
113
- margin: 2.5% !important;
114
113
  }
115
114
  }
116
115
 
@@ -23,7 +23,7 @@
23
23
  <script lang="ts">
24
24
  import ClassicModal from "../modal/ClassicModal.vue";
25
25
  import { Emission } from "@/stores/class/general/emission";
26
- import displayMethods from "../../mixins/displayMethods";
26
+ import displayHelper from "../../../helper/displayHelper";
27
27
  import { defineComponent, defineAsyncComponent } from "vue";
28
28
  import { useAuthStore } from "../../../stores/AuthStore";
29
29
  import { mapState } from "pinia";
@@ -36,8 +36,6 @@ export default defineComponent({
36
36
  RssSection,
37
37
  ClassicModal,
38
38
  },
39
- mixins: [displayMethods],
40
-
41
39
  props: {
42
40
  link: { default: "", type: String },
43
41
  emission: { default: undefined, type: Object as () => Emission },
@@ -47,6 +45,9 @@ export default defineComponent({
47
45
  ...mapState(useAuthStore, ["authOrgaId"]),
48
46
  },
49
47
  methods: {
48
+ onCopyCode(link: string, callback: () => void){
49
+ displayHelper.onCopyCode(link, callback);
50
+ },
50
51
  closePopup(): void {
51
52
  this.$emit("close");
52
53
  },
@@ -62,7 +62,7 @@ import ClassicModal from "../modal/ClassicModal.vue";
62
62
  import SnackBar from "../../misc/SnackBar.vue";
63
63
  import { VSwatches } from "vue3-swatches";
64
64
  import "vue3-swatches/dist/style.css";
65
- import displayMethods from "../../mixins/displayMethods";
65
+ import displayHelper from "../../../helper/displayHelper";
66
66
  import { Podcast } from "@/stores/class/general/podcast";
67
67
  import { defineComponent } from "vue";
68
68
  import { useSaveFetchStore } from "../../../stores/SaveFetchStore";
@@ -80,8 +80,6 @@ export default defineComponent({
80
80
  ContentCopyIcon,
81
81
  },
82
82
 
83
- mixins: [displayMethods],
84
-
85
83
  props: {
86
84
  podcast: { default: undefined, type: Object as () => Podcast },
87
85
  emission: { default: undefined, type: Object as () => Emission },
@@ -207,6 +205,9 @@ export default defineComponent({
207
205
  },
208
206
  methods: {
209
207
  ...mapActions(useSaveFetchStore, ["getOrgaAttributes"]),
208
+ onCopyCode(link: string, callback: () => void){
209
+ displayHelper.onCopyCode(link, callback);
210
+ },
210
211
  closePopup(): void {
211
212
  this.$emit("close");
212
213
  },
@@ -58,7 +58,7 @@
58
58
  <script lang="ts">
59
59
  import ContentCopyIcon from "vue-material-design-icons/ContentCopy.vue";
60
60
  import SnackBar from "../SnackBar.vue";
61
- import displayMethods from "../../mixins/displayMethods";
61
+ import displayHelper from "../../../helper/displayHelper";
62
62
  import ClassicModal from "../modal/ClassicModal.vue";
63
63
  import ClassicNav from "../ClassicNav.vue";
64
64
  import QrCode from "../../display/sharing/QrCode.vue";
@@ -74,7 +74,6 @@ export default defineComponent({
74
74
  ClassicNav,
75
75
  ContentCopyIcon,
76
76
  },
77
- mixins: [displayMethods],
78
77
  props: {
79
78
  embedLink: { default: undefined, type: String },
80
79
  embedlyLink: { default: undefined, type: String },
@@ -99,6 +98,9 @@ export default defineComponent({
99
98
  },
100
99
  },
101
100
  methods: {
101
+ onCopyCode(link: string, callback: () => void){
102
+ displayHelper.onCopyCode(link, callback);
103
+ },
102
104
  closePopup(): void {
103
105
  this.$emit("close");
104
106
  },