@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.
- package/README.md +23 -0
- package/index.ts +8 -2
- package/package.json +4 -3
- package/src/assets/general.scss +8 -0
- package/src/assets/share.scss +40 -0
- package/src/components/display/categories/CategoryChooser.vue +2 -14
- package/src/components/display/categories/CategoryFilter.vue +10 -8
- package/src/components/display/categories/CategoryList.vue +26 -24
- package/src/components/display/comments/AddCommentModal.vue +2 -5
- package/src/components/display/comments/CommentBasicView.vue +1 -1
- package/src/components/display/comments/CommentInput.vue +21 -19
- package/src/components/display/comments/CommentList.vue +2 -0
- package/src/components/display/comments/CommentPlayer.vue +2 -0
- package/src/components/display/emission/EmissionChooser.vue +0 -9
- package/src/components/display/emission/EmissionInlineList.vue +36 -53
- package/src/components/display/emission/EmissionList.vue +12 -8
- package/src/components/display/emission/EmissionPlayerItem.vue +16 -1
- package/src/components/display/filter/AdvancedSearch.vue +2 -0
- package/src/components/display/filter/ProductorSearch.vue +6 -1
- package/src/components/display/live/LiveHorizontalList.vue +1 -1
- package/src/components/display/live/LiveItem.vue +2 -1
- package/src/components/display/live/LiveList.vue +51 -41
- package/src/components/display/organisation/OrganisationChooser.vue +1 -10
- package/src/components/display/organisation/OrganisationChooserLight.vue +28 -19
- package/src/components/display/participant/ParticipantItem.vue +2 -0
- package/src/components/display/participant/ParticipantList.vue +30 -19
- package/src/components/display/playlist/PlaylistList.vue +12 -3
- package/src/components/display/playlist/PodcastList.vue +26 -16
- package/src/components/display/playlist/PodcastPlaylistInlineList.vue +204 -0
- package/src/components/display/podcasts/AnimatorsItem.vue +2 -0
- package/src/components/display/podcasts/ParticipantDescription.vue +1 -5
- package/src/components/display/podcasts/PodcastImage.vue +2 -1
- package/src/components/display/podcasts/PodcastInlineList.vue +52 -30
- package/src/components/display/podcasts/PodcastItem.vue +12 -0
- package/src/components/display/podcasts/PodcastList.vue +11 -3
- package/src/components/display/podcasts/PodcastPlayBar.vue +5 -3
- package/src/components/display/podcasts/TagList.vue +2 -0
- package/src/components/display/rubriques/RubriqueChooser.vue +2 -6
- package/src/components/display/rubriques/RubriqueList.vue +3 -1
- package/src/components/display/sharing/PlayerParameters.vue +2 -0
- package/src/components/display/sharing/QrCode.vue +7 -0
- package/src/components/display/sharing/ShareDistribution.vue +2 -0
- package/src/components/display/sharing/SharePlayer.vue +2 -0
- package/src/components/display/sharing/SubscribeButtons.vue +15 -0
- package/src/components/form/ClassicSearch.vue +2 -0
- package/src/components/misc/ErrorMessage.vue +2 -0
- package/src/components/misc/Footer.vue +2 -0
- package/src/components/misc/LeftMenu.vue +2 -0
- package/src/components/misc/Player.vue +58 -40
- package/src/components/misc/PlayerButtons.vue +6 -14
- package/src/components/misc/PlayerClockAndTimeline.vue +2 -0
- package/src/components/misc/PlayerProgressBar.vue +2 -0
- package/src/components/misc/Popover.vue +5 -0
- package/src/components/misc/Snackbar.vue +2 -0
- package/src/components/misc/TopBar.vue +2 -0
- package/src/components/misc/modal/NewsletterModal.vue +11 -3
- package/src/components/misc/modal/ShareModalPlayer.vue +2 -0
- package/src/components/mixins/handle403.ts +17 -0
- package/src/components/pages/Emission.vue +18 -4
- package/src/components/pages/Error403Page.vue +24 -0
- package/src/components/pages/Participant.vue +19 -4
- package/src/components/pages/Playlist.vue +17 -3
- package/src/components/pages/Podcast.vue +29 -12
- package/src/components/pages/Podcasts.vue +4 -0
- package/src/locale/en.ts +1 -0
- package/src/locale/fr.ts +1 -0
- package/src/locale/it.ts +298 -0
- package/src/locale/messages.ts +2 -0
- package/src/main.ts +18 -1
- package/src/router/router.ts +6 -0
- package/src/store/class/general/organisation.ts +1 -0
- package/src/store/paramStore.ts +19 -14
- 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="
|
|
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="[
|
|
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-
|
|
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
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
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-
|
|
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
|
-
|
|
178
|
-
|
|
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="
|
|
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
|
-
|
|
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-
|
|
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>
|
|
@@ -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: {
|