@saooti/octopus-sdk 31.0.0 → 31.0.3

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 (73) hide show
  1. package/README.md +23 -0
  2. package/index.ts +8 -2
  3. package/package.json +4 -3
  4. package/src/assets/general.scss +8 -0
  5. package/src/assets/share.scss +40 -0
  6. package/src/components/display/categories/CategoryChooser.vue +2 -14
  7. package/src/components/display/categories/CategoryFilter.vue +10 -8
  8. package/src/components/display/categories/CategoryList.vue +26 -24
  9. package/src/components/display/comments/AddCommentModal.vue +2 -5
  10. package/src/components/display/comments/CommentBasicView.vue +1 -1
  11. package/src/components/display/comments/CommentInput.vue +21 -19
  12. package/src/components/display/comments/CommentList.vue +2 -0
  13. package/src/components/display/comments/CommentPlayer.vue +2 -0
  14. package/src/components/display/emission/EmissionChooser.vue +0 -9
  15. package/src/components/display/emission/EmissionInlineList.vue +36 -53
  16. package/src/components/display/emission/EmissionList.vue +12 -8
  17. package/src/components/display/emission/EmissionPlayerItem.vue +16 -1
  18. package/src/components/display/filter/AdvancedSearch.vue +2 -0
  19. package/src/components/display/filter/ProductorSearch.vue +6 -1
  20. package/src/components/display/live/LiveHorizontalList.vue +1 -1
  21. package/src/components/display/live/LiveItem.vue +2 -1
  22. package/src/components/display/live/LiveList.vue +51 -41
  23. package/src/components/display/organisation/OrganisationChooser.vue +1 -10
  24. package/src/components/display/organisation/OrganisationChooserLight.vue +28 -19
  25. package/src/components/display/participant/ParticipantItem.vue +2 -0
  26. package/src/components/display/participant/ParticipantList.vue +30 -19
  27. package/src/components/display/playlist/PlaylistList.vue +12 -3
  28. package/src/components/display/playlist/PodcastList.vue +26 -16
  29. package/src/components/display/playlist/PodcastPlaylistInlineList.vue +204 -0
  30. package/src/components/display/podcasts/AnimatorsItem.vue +2 -0
  31. package/src/components/display/podcasts/ParticipantDescription.vue +1 -5
  32. package/src/components/display/podcasts/PodcastImage.vue +2 -1
  33. package/src/components/display/podcasts/PodcastInlineList.vue +52 -30
  34. package/src/components/display/podcasts/PodcastItem.vue +12 -0
  35. package/src/components/display/podcasts/PodcastList.vue +11 -3
  36. package/src/components/display/podcasts/PodcastPlayBar.vue +5 -3
  37. package/src/components/display/podcasts/TagList.vue +2 -0
  38. package/src/components/display/rubriques/RubriqueChooser.vue +2 -6
  39. package/src/components/display/rubriques/RubriqueList.vue +3 -1
  40. package/src/components/display/sharing/PlayerParameters.vue +2 -0
  41. package/src/components/display/sharing/QrCode.vue +7 -0
  42. package/src/components/display/sharing/ShareDistribution.vue +2 -0
  43. package/src/components/display/sharing/SharePlayer.vue +2 -0
  44. package/src/components/display/sharing/SubscribeButtons.vue +15 -0
  45. package/src/components/form/ClassicSearch.vue +2 -0
  46. package/src/components/misc/ErrorMessage.vue +2 -0
  47. package/src/components/misc/Footer.vue +2 -0
  48. package/src/components/misc/LeftMenu.vue +2 -0
  49. package/src/components/misc/Player.vue +58 -40
  50. package/src/components/misc/PlayerButtons.vue +6 -14
  51. package/src/components/misc/PlayerClockAndTimeline.vue +2 -0
  52. package/src/components/misc/PlayerProgressBar.vue +2 -0
  53. package/src/components/misc/Popover.vue +5 -0
  54. package/src/components/misc/Snackbar.vue +2 -0
  55. package/src/components/misc/TopBar.vue +2 -0
  56. package/src/components/misc/modal/NewsletterModal.vue +11 -3
  57. package/src/components/misc/modal/ShareModalPlayer.vue +2 -0
  58. package/src/components/mixins/handle403.ts +17 -0
  59. package/src/components/pages/Emission.vue +18 -4
  60. package/src/components/pages/Error403Page.vue +24 -0
  61. package/src/components/pages/Participant.vue +19 -4
  62. package/src/components/pages/Playlist.vue +17 -3
  63. package/src/components/pages/Podcast.vue +29 -12
  64. package/src/components/pages/Podcasts.vue +4 -0
  65. package/src/locale/en.ts +1 -0
  66. package/src/locale/fr.ts +1 -0
  67. package/src/locale/it.ts +298 -0
  68. package/src/locale/messages.ts +2 -0
  69. package/src/main.ts +18 -1
  70. package/src/router/router.ts +6 -0
  71. package/src/store/class/general/organisation.ts +1 -0
  72. package/src/store/paramStore.ts +19 -14
  73. package/src/store/typeAppStore.ts +0 -4
@@ -0,0 +1,204 @@
1
+ <template>
2
+ <div
3
+ v-if="loading || (!loading && 0 !== allPodcasts.length)"
4
+ class="d-flex flex-column p-3 playlist-inline-podcast"
5
+ >
6
+ <h2>{{ title }}</h2>
7
+ <div
8
+ v-if="!overflowScroll"
9
+ class="d-flex justify-content-end hide-phone"
10
+ >
11
+ <button
12
+ class="btn admin-button m-1"
13
+ :class="{ disabled: !previousAvailable }"
14
+ :title="$t('Display previous')"
15
+ @click="displayPrevious()"
16
+ >
17
+ <div class="saooti-left fw-bold" />
18
+ </button>
19
+ <button
20
+ class="btn admin-button m-1"
21
+ :class="{ disabled: !nextAvailable }"
22
+ :title="$t('Display next')"
23
+ @click="displayNext()"
24
+ >
25
+ <div class="saooti-right fw-bold" />
26
+ </button>
27
+ </div>
28
+ <ClassicLoading
29
+ :loading-text="loading?$t('Loading podcasts ...'):undefined"
30
+ />
31
+ <transition-group
32
+ :name="transitionName"
33
+ class="element-list-inline"
34
+ tag="ul"
35
+ :class="[
36
+ alignLeft ? 'justify-content-start' : '',
37
+ overflowScroll ? 'overflowScroll' : '',
38
+ ]"
39
+ :css="isInlineAnimation"
40
+ >
41
+ <PodcastItem
42
+ v-for="p in podcasts"
43
+ :key="p.podcastId"
44
+ class="flex-shrink-0 item-phone-margin"
45
+ :podcast="p"
46
+ :class="[alignLeft ? 'me-3' : '']"
47
+ />
48
+ </transition-group>
49
+ <router-link
50
+ class="btn btn-link align-self-center width-fit-content m-4"
51
+ :to="{
52
+ name: 'playlist',
53
+ params: { playlistId: playlistId.toString() },
54
+ }"
55
+ >
56
+ {{ $t('See more') }}
57
+ <div
58
+ class="ms-1 saooti-more"
59
+ />
60
+ </router-link>
61
+ </div>
62
+ </template>
63
+
64
+ <script lang="ts">
65
+ import octopusApi from '@saooti/octopus-api';
66
+ import domHelper from '../../../helper/dom';
67
+ import PodcastItem from '../podcasts/PodcastItem.vue';
68
+ import ClassicLoading from '../../form/ClassicLoading.vue';
69
+ const PHONE_WIDTH = 960;
70
+ import { state } from '../../../store/paramStore';
71
+ import { Podcast } from '@/store/class/general/podcast';
72
+ import { defineComponent } from 'vue'
73
+ import { Playlist } from '@saooti/octopus-api/class/playlist';
74
+ export default defineComponent({
75
+ name: 'PodcastPlaylistInlineList',
76
+
77
+ components: {
78
+ PodcastItem,
79
+ ClassicLoading
80
+ },
81
+
82
+ props: {
83
+ playlistId: { default: undefined, type: Number},
84
+ },
85
+
86
+ data() {
87
+ return {
88
+ loading: true as boolean,
89
+ index: 0 as number,
90
+ first: 0 as number,
91
+ size: 5 as number,
92
+ totalCount: 0 as number,
93
+ playlist: undefined as Playlist|undefined,
94
+ allPodcasts: [] as Array<Podcast>,
95
+ direction: 1 as number,
96
+ alignLeft: false as boolean,
97
+ };
98
+ },
99
+ computed: {
100
+ title(): string{
101
+ if(this.playlist){
102
+ return this.playlist.title;
103
+ }
104
+ return "";
105
+ },
106
+ podcasts(): Array<Podcast> {
107
+ return this.allPodcasts.slice(this.index, this.index + this.size);
108
+ },
109
+ sizeItem(): number {
110
+ return state.generalParameters.podcastItem ? (state.generalParameters.podcastItem as number): 13;
111
+ },
112
+ overflowScroll(): boolean {
113
+ return (state.emissionPage.overflowScroll as boolean);
114
+ },
115
+ isInlineAnimation(): boolean {
116
+ return (state.generalParameters.isInlineAnimation as boolean);
117
+ },
118
+ previousAvailable(): boolean {
119
+ return this.index > 0;
120
+ },
121
+ nextAvailable(): boolean {
122
+ return this.index + this.size < this.totalCount;
123
+ },
124
+ transitionName(): string {
125
+ return this.direction > 0 ? 'out-left' : 'out-right';
126
+ },
127
+ },
128
+ watch: {
129
+ playlistId(): void {
130
+ this.reset();
131
+ this.fetchContent();
132
+ },
133
+ },
134
+
135
+ created() {
136
+ window.addEventListener('resize', this.handleResize);
137
+ },
138
+
139
+ unmounted() {
140
+ window.removeEventListener('resize', this.handleResize);
141
+ },
142
+
143
+ mounted() {
144
+ this.handleResize();
145
+ this.fetchContent();
146
+ },
147
+ methods: {
148
+ async fetchContent(): Promise<void> {
149
+ this.allPodcasts.length = 0;
150
+ this.loading = true;
151
+ this.playlist = await octopusApi.fetchPlaylist(this.playlistId ? this.playlistId.toString(): "");
152
+ this.allPodcasts = await octopusApi.fetchPlaylistContent(
153
+ this.playlist.playlistId.toString()
154
+ );
155
+ if (!((state.generalParameters.authenticated && state.generalParameters.organisationId === this.playlist.organisation.id) ||
156
+ state.generalParameters.isAdmin)) {
157
+ this.allPodcasts = this.allPodcasts.filter((p: Podcast|null) => {
158
+ return (
159
+ null !== p &&
160
+ (!p.availability || true === p.availability.visibility)
161
+ );
162
+ });
163
+ }
164
+ if (this.allPodcasts.length <= 3) {
165
+ this.alignLeft = true;
166
+ } else {
167
+ this.alignLeft = false;
168
+ }
169
+ this.loading = false;
170
+ },
171
+ displayPrevious(): void {
172
+ this.direction = -1;
173
+ if (this.previousAvailable) {
174
+ this.index -= 1;
175
+ }
176
+ },
177
+ displayNext(): void {
178
+ this.direction = 1;
179
+ if (!this.nextAvailable) return;
180
+ this.index += 1;
181
+ },
182
+ handleResize(): void {
183
+ if (!this.$el) return;
184
+ if (this.overflowScroll) {
185
+ this.size = 20;
186
+ return;
187
+ }
188
+ if (window.innerWidth <= PHONE_WIDTH) {
189
+ this.size = 10;
190
+ return;
191
+ }
192
+ const width = (this.$el as HTMLElement).offsetWidth;
193
+ const sixteen = domHelper.convertRemToPixels(this.sizeItem + 0.7);
194
+ this.size = Math.floor(width / sixteen);
195
+ },
196
+ reset(): void {
197
+ this.index = 0;
198
+ this.first = 0;
199
+ this.totalCount = 0;
200
+ this.allPodcasts.length = 0;
201
+ },
202
+ },
203
+ })
204
+ </script>
@@ -48,6 +48,7 @@ export default defineComponent({
48
48
  </script>
49
49
 
50
50
  <style lang="scss">
51
+ .octopus-app{
51
52
  .podcast-item-animator {
52
53
  display: flex;
53
54
  align-items: flex-start;
@@ -58,4 +59,5 @@ export default defineComponent({
58
59
  text-transform: capitalize;
59
60
  margin: 00.25rem 0.5rem 0;
60
61
  }
62
+ }
61
63
  </style>
@@ -8,16 +8,12 @@
8
8
  :id="idPopover"
9
9
  tabindex="-1"
10
10
  class="saooti-help m-0"
11
- :title="$t('Help')"
11
+ :title="title"
12
12
  />
13
13
  <span class="mx-1">:</span>
14
14
  <Popover
15
15
  :target="idPopover"
16
16
  >
17
- <div class="text-center font-weight-bold">
18
- {{ title }}
19
- </div>
20
- <hr>
21
17
  <div
22
18
  v-for="participant in participants"
23
19
  :key="'desc-'+participant.participantId"
@@ -286,6 +286,7 @@ export default defineComponent({
286
286
 
287
287
 
288
288
  <style lang="scss">
289
+ .octopus-app{
289
290
  .live-image-status {
290
291
  text-align: center;
291
292
  width: 100%;
@@ -363,5 +364,5 @@ export default defineComponent({
363
364
  z-index: 2;
364
365
  }
365
366
  }
366
-
367
+ }
367
368
  </style>
@@ -22,7 +22,7 @@
22
22
  </button>
23
23
  </div>
24
24
  <div
25
- v-if="!isArrow"
25
+ v-if="!isArrow && !overflowScroll"
26
26
  class="hide-phone"
27
27
  >
28
28
  <button
@@ -51,7 +51,11 @@
51
51
  :name="transitionName"
52
52
  class="element-list-inline"
53
53
  tag="ul"
54
- :class="[alignLeft ? 'justify-content-start' : '']"
54
+ :class="[
55
+ alignLeft ? 'justify-content-start' : '',
56
+ overflowScroll ? 'overflowScroll' : '',
57
+ ]"
58
+ :css="isInlineAnimation"
55
59
  >
56
60
  <PodcastItem
57
61
  v-for="p in podcasts"
@@ -68,13 +72,14 @@
68
72
  {{ buttonText }}
69
73
  <div
70
74
  v-if="buttonPlus"
71
- class="ms-1 saooti-plus"
75
+ class="ms-1 saooti-more"
72
76
  />
73
77
  </router-link>
74
78
  </div>
75
79
  </template>
76
80
 
77
81
  <script lang="ts">
82
+ import { handle403 } from '../../mixins/handle403';
78
83
  import octopusApi from '@saooti/octopus-api';
79
84
  import domHelper from '../../../helper/dom';
80
85
  import PodcastItem from './PodcastItem.vue';
@@ -85,6 +90,7 @@ import { Podcast } from '@/store/class/general/podcast';
85
90
  import { RubriquageFilter } from '@/store/class/rubrique/rubriquageFilter';
86
91
  import { defineComponent } from 'vue'
87
92
  import { RouteLocationRaw } from 'vue-router';
93
+ import { AxiosError } from 'axios';
88
94
  export default defineComponent({
89
95
  name: 'PodcastInlineList',
90
96
 
@@ -93,6 +99,8 @@ export default defineComponent({
93
99
  ClassicLoading
94
100
  },
95
101
 
102
+ mixins: [handle403],
103
+
96
104
  props: {
97
105
  organisationId: { default: undefined, type: String},
98
106
  emissionId: { default: undefined, type: Number},
@@ -131,6 +139,12 @@ export default defineComponent({
131
139
  sizeItem(): number {
132
140
  return state.generalParameters.podcastItem ? (state.generalParameters.podcastItem as number): 13;
133
141
  },
142
+ overflowScroll(): boolean {
143
+ return (state.emissionPage.overflowScroll as boolean);
144
+ },
145
+ isInlineAnimation(): boolean {
146
+ return (state.generalParameters.isInlineAnimation as boolean);
147
+ },
134
148
  filterOrga(): string {
135
149
  return this.$store.state.filter.organisationId;
136
150
  },
@@ -201,34 +215,38 @@ export default defineComponent({
201
215
  },
202
216
  methods: {
203
217
  async fetchNext(): Promise<void> {
204
- const data = await octopusApi.fetchPodcasts({
205
- first: this.first,
206
- size: this.size + 1,
207
- organisationId: this.organisation,
208
- emissionId: this.emissionId,
209
- iabId: this.iabId,
210
- rubriqueId: this.rubriqueId.length ?this.rubriqueId:undefined,
211
- rubriquageId: this.rubriquageId.length ?this.rubriquageId : undefined,
212
- noRubriquageId: this.noRubriquageId.length ? this.noRubriquageId : undefined,
213
- sort: this.popularSort ? 'POPULARITY' : 'DATE',
214
- query: this.query,
215
- });
216
- this.loading = false;
217
- this.loaded = true;
218
- this.totalCount = data.count;
219
- if (this.allPodcasts.length + data.result.length < this.totalCount) {
220
- const nexEl = data.result.pop() as Podcast;
221
- this.preloadImage(nexEl.imageUrl?nexEl.imageUrl:'');
218
+ try {
219
+ const data = await octopusApi.fetchPodcasts({
220
+ first: this.first,
221
+ size: this.size + 1,
222
+ organisationId: this.organisation,
223
+ emissionId: this.emissionId,
224
+ iabId: this.iabId,
225
+ rubriqueId: this.rubriqueId.length ?this.rubriqueId:undefined,
226
+ rubriquageId: this.rubriquageId.length ?this.rubriquageId : undefined,
227
+ noRubriquageId: this.noRubriquageId.length ? this.noRubriquageId : undefined,
228
+ sort: this.popularSort ? 'POPULARITY' : 'DATE',
229
+ query: this.query,
230
+ });
231
+ this.loading = false;
232
+ this.loaded = true;
233
+ this.totalCount = data.count;
234
+ if (this.allPodcasts.length + data.result.length < this.totalCount) {
235
+ const nexEl = data.result.pop() as Podcast;
236
+ this.preloadImage(nexEl.imageUrl?nexEl.imageUrl:'');
237
+ }
238
+ this.allPodcasts = this.allPodcasts.concat(
239
+ data.result.filter((pod: Podcast|null) => null !== pod)
240
+ );
241
+ if (this.allPodcasts.length <= 3) {
242
+ this.alignLeft = true;
243
+ } else {
244
+ this.alignLeft = false;
245
+ }
246
+ this.first += this.size;
247
+ } catch (error) {
248
+ this.handle403((error as AxiosError));
222
249
  }
223
- this.allPodcasts = this.allPodcasts.concat(
224
- data.result.filter((pod: Podcast|null) => null !== pod)
225
- );
226
- if (this.allPodcasts.length <= 3) {
227
- this.alignLeft = true;
228
- } else {
229
- this.alignLeft = false;
230
- }
231
- this.first += this.size;
232
250
  },
233
251
  displayPrevious(): void {
234
252
  this.direction = -1;
@@ -249,6 +267,10 @@ export default defineComponent({
249
267
  },
250
268
  handleResize(): void {
251
269
  if (!this.$el) return;
270
+ if (this.overflowScroll) {
271
+ this.size = 20;
272
+ return;
273
+ }
252
274
  if (window.innerWidth <= PHONE_WIDTH) {
253
275
  this.size = 10;
254
276
  return;
@@ -197,6 +197,16 @@ export default defineComponent({
197
197
  s: () => 'sec',
198
198
  ms: () => 'ms',
199
199
  },
200
+ shortIt: {
201
+ y: () => 'anni',
202
+ mo: () => 'mesi',
203
+ w: () => 'settimane',
204
+ d: () => 'giorni',
205
+ h: () => 'h',
206
+ m: () => 'min',
207
+ s: () => 'sec',
208
+ ms: () => 'ms',
209
+ },
200
210
  },
201
211
  });
202
212
  }
@@ -243,6 +253,7 @@ export default defineComponent({
243
253
  </script>
244
254
 
245
255
  <style lang="scss">
256
+ .octopus-app{
246
257
  .podcast-item-container {
247
258
  border-radius: 0.8rem;
248
259
  list-style: none;
@@ -308,4 +319,5 @@ export default defineComponent({
308
319
  margin: 0.5rem !important;
309
320
  }
310
321
  }
322
+ }
311
323
  </style>
@@ -33,13 +33,14 @@
33
33
  </template>
34
34
  <div
35
35
  :class="buttonPlus?'ms-1':''"
36
- class="saooti-plus"
36
+ class="saooti-more"
37
37
  />
38
38
  </button>
39
39
  </div>
40
40
  </template>
41
41
 
42
42
  <script lang="ts">
43
+ import { handle403 } from '../../mixins/handle403';
43
44
  import octopusApi from '@saooti/octopus-api';
44
45
  import PodcastItem from './PodcastItem.vue';
45
46
  import { state } from '../../../store/paramStore';
@@ -47,6 +48,7 @@ import ClassicLoading from '../../form/ClassicLoading.vue';
47
48
  import { Podcast } from '@/store/class/general/podcast';
48
49
  import { defineComponent } from 'vue'
49
50
  import { FetchParam } from '@/store/class/general/fetchParam';
51
+ import { AxiosError } from 'axios';
50
52
  export default defineComponent({
51
53
  name: 'PodcastList',
52
54
 
@@ -55,6 +57,8 @@ export default defineComponent({
55
57
  ClassicLoading
56
58
  },
57
59
 
60
+ mixins: [handle403],
61
+
58
62
  props: {
59
63
  first: { default: 0, type: Number},
60
64
  size: { default: 12, type: Number},
@@ -174,8 +178,12 @@ export default defineComponent({
174
178
  if (this.notValid && !this.isProduction) {
175
179
  param.publisherId = this.$store.state.profile.userId;
176
180
  }
177
- const data = await octopusApi.fetchPodcasts(param);
178
- this.afterFetching(reset, data);
181
+ try {
182
+ const data = await octopusApi.fetchPodcasts(param);
183
+ this.afterFetching(reset, data);
184
+ } catch (error) {
185
+ this.handle403((error as AxiosError));
186
+ }
179
187
  },
180
188
  afterFetching(reset: boolean, data: {count: number, result: Array<Podcast>, sort: string}): void {
181
189
  if (reset) {
@@ -48,14 +48,14 @@ export default defineComponent({
48
48
  return (state.emissionsPage.progressBar as boolean);
49
49
  },
50
50
  percentProgress(): number{
51
- if(this.podcast !== this.$store.state.player.podcast){
51
+ if(!this.$store.state.player.podcast || this.podcast.podcastId !== this.$store.state.player.podcast.podcastId){
52
52
  return 0;
53
53
  }
54
54
  if(!this.$store.state.player.elapsed){return 0;}
55
55
  return this.$store.state.player.elapsed * 100;
56
56
  },
57
57
  playedTime(): string{
58
- if(this.podcast === this.$store.state.player.podcast){
58
+ if(this.$store.state.player.podcast && this.podcast.podcastId === this.$store.state.player.podcast.podcastId){
59
59
  if (this.$store.state.player.elapsed && this.$store.state.player.elapsed > 0 && this.$store.state.player.total && this.$store.state.player.total > 0) {
60
60
  return DurationHelper.formatDuration(
61
61
  Math.round(this.$store.state.player.elapsed * this.$store.state.player.total)
@@ -70,7 +70,7 @@ export default defineComponent({
70
70
  },
71
71
  methods: {
72
72
  seekTo(event: MouseEvent): void {
73
- if(this.podcast!== this.$store.state.player.podcast){return;}
73
+ if(!this.$store.state.player.podcast || this.podcast.podcastId !== this.$store.state.player.podcast.podcastId){return;}
74
74
  const rect = (event.currentTarget as Element).getBoundingClientRect();
75
75
  const barWidth = (event.currentTarget as Element).clientWidth;
76
76
  const x = event.clientX - rect.left;
@@ -84,6 +84,7 @@ export default defineComponent({
84
84
  </script>
85
85
 
86
86
  <style lang="scss">
87
+ .octopus-app{
87
88
  .podcast-play-bar {
88
89
  .progress{
89
90
  height: 6px;
@@ -97,4 +98,5 @@ export default defineComponent({
97
98
  position: absolute;
98
99
  }
99
100
  }
101
+ }
100
102
  </style>
@@ -51,6 +51,7 @@ export default defineComponent({
51
51
  </script>
52
52
 
53
53
  <style lang="scss">
54
+ .octopus-app{
54
55
  .tag-list-component{
55
56
  .ouest-france-logo{
56
57
  width: 20px;
@@ -65,4 +66,5 @@ export default defineComponent({
65
66
  border-radius: 0.5rem;
66
67
  }
67
68
  }
69
+ }
68
70
  </style>
@@ -29,9 +29,8 @@
29
29
  :show-no-results="true"
30
30
  :hide-selected="true"
31
31
  :show-labels="false"
32
- @open="clearAll"
32
+ @open="onOpen"
33
33
  @search-change="onSearchRubrique"
34
- @close="onClose"
35
34
  @select="onRubriqueSelected"
36
35
  >
37
36
  <template #singleLabel="{ option }">
@@ -187,14 +186,11 @@ export default defineComponent({
187
186
  );
188
187
  }
189
188
  },
190
- clearAll(): void {
189
+ onOpen(): void {
191
190
  (this.$refs.multiselectRef as VueMultiselect).$refs.search.setAttribute(
192
191
  'autocomplete',
193
192
  'off'
194
193
  );
195
- if (undefined === this.rubriqueArray) {
196
- this.rubrique = undefined;
197
- }
198
194
  this.rubriques = this.initRubriquesArray();
199
195
  },
200
196
  onClose(): void {
@@ -31,7 +31,7 @@
31
31
  class="dropdown btn-group"
32
32
  >
33
33
  <button
34
- class="btn dropdown-toggle admin-button dropdown-toggle-no-caret saooti-plus"
34
+ class="btn dropdown-toggle admin-button dropdown-toggle-no-caret saooti-more"
35
35
  data-bs-toggle="dropdown"
36
36
  aria-expanded="false"
37
37
  :title="$t('See more')"
@@ -179,6 +179,7 @@ export default defineComponent({
179
179
  </script>
180
180
 
181
181
  <style lang="scss">
182
+ .octopus-app{
182
183
  #rubrique-list-container {
183
184
  display: flex;
184
185
  justify-content: flex-start;
@@ -210,4 +211,5 @@ export default defineComponent({
210
211
  background: #eee !important;
211
212
  }
212
213
  }
214
+ }
213
215
  </style>
@@ -157,9 +157,11 @@ export default defineComponent({
157
157
  </script>
158
158
 
159
159
  <style lang="scss">
160
+ .octopus-app{
160
161
  .input-share-player {
161
162
  border: 1px solid #ddd;
162
163
  border-radius: 50px;
163
164
  width: 60px;
164
165
  }
166
+ }
165
167
  </style>
@@ -50,6 +50,9 @@ export default defineComponent({
50
50
  return (state.generalParameters.authenticated as boolean);
51
51
  },
52
52
  },
53
+ created(){
54
+ this.initColor();
55
+ },
53
56
  methods:{
54
57
  download(): void{
55
58
  const link = document.createElement('a');
@@ -62,6 +65,10 @@ export default defineComponent({
62
65
  }
63
66
  },
64
67
  async initColor(): Promise<void> {
68
+ if(state.generalParameters.podcastmaker && state.generalParameters.podcastmakerColor){
69
+ this.color = state.generalParameters.podcastmakerColor;
70
+ return;
71
+ }
65
72
  if (!this.authenticated) return;
66
73
  let data;
67
74
  if(this.$store.state.organisation && this.$store.state.organisation.attributes && Object.keys(this.$store.state.organisation.attributes).length > 1){
@@ -170,6 +170,7 @@ export default defineComponent({
170
170
  </script>
171
171
 
172
172
  <style lang="scss">
173
+ .octopus-app{
173
174
  .sharing-distribution-container {
174
175
  border: 0.05rem solid #dee2e6;
175
176
  border-radius: 0.3rem;
@@ -214,4 +215,5 @@ export default defineComponent({
214
215
  margin: 0.2rem 0.5rem;
215
216
  }
216
217
  }
218
+ }
217
219
  </style>
@@ -364,6 +364,7 @@ export default defineComponent({
364
364
 
365
365
  <style lang="scss">
366
366
  @import '../../../sass/_variables.scss';
367
+ .octopus-app{
367
368
  .sticker {
368
369
  align-self: center;
369
370
  background: $octopus-primary-dark;
@@ -385,4 +386,5 @@ export default defineComponent({
385
386
  .max-iframe {
386
387
  max-width: 300px;
387
388
  }
389
+ }
388
390
  </style>
@@ -66,6 +66,16 @@
66
66
  >
67
67
  <span class="saooti-playerfm" />
68
68
  </a>
69
+ <a
70
+ v-if="pocketCasts"
71
+ rel="noopener"
72
+ target="_blank"
73
+ class="btn me-3 mb-2 share-btn"
74
+ :href="pocketCasts"
75
+ title="pocketCasts"
76
+ >
77
+ <span class="saooti-pocket-casts" />
78
+ </a>
69
79
  <a
70
80
  v-if="podcastAddict"
71
81
  rel="noopener"
@@ -189,6 +199,10 @@ export default defineComponent({
189
199
  (this.emission && this.emission.annotations
190
200
  ? this.emission.annotations.googlePodcasts
191
201
  : undefined) as string | undefined,
202
+ pocketCasts:
203
+ (this.emission && this.emission.annotations
204
+ ? this.emission.annotations.pocketCasts
205
+ : undefined) as string | undefined,
192
206
  };
193
207
  },
194
208
 
@@ -205,6 +219,7 @@ export default defineComponent({
205
219
  this.stitcher = this.externaliseLinks(this.stitcher);
206
220
  this.amazon = this.externaliseLinks(this.amazon);
207
221
  this.googlePodcasts = this.externaliseLinks(this.googlePodcasts);
222
+ this.pocketCasts = this.externaliseLinks(this.pocketCasts);
208
223
  },
209
224
 
210
225
  methods: {