@saooti/octopus-sdk 29.0.7 → 29.0.11
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 +4 -0
- package/package.json +1 -1
- package/src/assets/general.scss +12 -12
- package/src/components/display/categories/CategoryFilter.vue +4 -2
- package/src/components/display/podcasts/PodcastImage.vue +1 -0
- package/src/components/display/podcasts/PodcastModuleBox.vue +306 -0
- package/src/components/display/rubriques/RubriqueChooser.vue +1 -1
- package/src/components/display/sharing/QrCode.vue +2 -2
- package/src/components/display/sharing/ShareButtons.vue +1 -2
- package/src/components/display/sharing/SharePlayer.vue +19 -112
- package/src/components/display/sharing/SharePlayerColors.vue +109 -0
- package/src/components/display/sharing/SharePlayerTypes.vue +79 -0
- package/src/components/misc/Player.vue +26 -334
- package/src/components/misc/PlayerButtons.vue +155 -0
- package/src/components/misc/PlayerClockAndTimeline.vue +85 -0
- package/src/components/misc/PlayerProgressBar.vue +202 -0
- package/src/components/misc/Popover.vue +36 -14
- package/src/components/misc/modal/ShareModalPlayer.vue +1 -1
- package/src/components/pages/Podcast.vue +9 -244
|
@@ -33,155 +33,11 @@
|
|
|
33
33
|
:is-ready="isReady"
|
|
34
34
|
@validatePodcast="updatePodcast"
|
|
35
35
|
/>
|
|
36
|
-
<
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
{{ podcast.title }}
|
|
42
|
-
</h2>
|
|
43
|
-
<router-link
|
|
44
|
-
v-else
|
|
45
|
-
:to="{
|
|
46
|
-
name: 'emission',
|
|
47
|
-
params: { emissionId: podcast.emission.emissionId },
|
|
48
|
-
query: { productor: $store.state.filter.organisationId },
|
|
49
|
-
}"
|
|
50
|
-
>
|
|
51
|
-
<h1>{{ podcast.emission.name }}</h1>
|
|
52
|
-
</router-link>
|
|
53
|
-
<div class="mb-5 mt-3 d-flex">
|
|
54
|
-
<div class="w-100">
|
|
55
|
-
<PodcastImage
|
|
56
|
-
:class="[
|
|
57
|
-
!isOuestFrance && !isLiveReadyToRecord
|
|
58
|
-
? 'shadow-element'
|
|
59
|
-
: '',
|
|
60
|
-
isLiveReadyToRecord &&
|
|
61
|
-
fetchConference &&
|
|
62
|
-
'null' !== fetchConference &&
|
|
63
|
-
fetchConference.status
|
|
64
|
-
? fetchConference.status.toLowerCase() + '-shadow'
|
|
65
|
-
: '',
|
|
66
|
-
]"
|
|
67
|
-
class="me-3"
|
|
68
|
-
:podcast="podcast"
|
|
69
|
-
:hide-play="!isLiveReadyToRecord"
|
|
70
|
-
:playing-podcast="playingPodcast"
|
|
71
|
-
:fetch-conference="fetchConference"
|
|
72
|
-
:is-animator-live="isOctopusAndAnimator"
|
|
73
|
-
@playPodcast="playPodcast"
|
|
74
|
-
/>
|
|
75
|
-
<h3 v-if="isOuestFrance">
|
|
76
|
-
{{ podcast.title }}
|
|
77
|
-
</h3>
|
|
78
|
-
<div
|
|
79
|
-
class="date-text-zone"
|
|
80
|
-
:class="isLiveReady ? 'justify-content-between' : ''"
|
|
81
|
-
>
|
|
82
|
-
<div
|
|
83
|
-
v-if="!isOuestFrance && 0 !== date.length"
|
|
84
|
-
:class="!isLiveReady ? 'me-5' : ''"
|
|
85
|
-
>
|
|
86
|
-
{{ date }}
|
|
87
|
-
</div>
|
|
88
|
-
<div class="ms-2 me-2 duration">
|
|
89
|
-
<span
|
|
90
|
-
v-if="isOuestFrance"
|
|
91
|
-
class="saooti-clock3"
|
|
92
|
-
/>{{ $t('Duration', { duration: duration }) }}
|
|
93
|
-
</div>
|
|
94
|
-
<div
|
|
95
|
-
v-if="isLiveReady"
|
|
96
|
-
class="text-danger"
|
|
97
|
-
>
|
|
98
|
-
{{ $t('Episode record in live') }}
|
|
99
|
-
</div>
|
|
100
|
-
</div>
|
|
101
|
-
<div
|
|
102
|
-
class="descriptionText html-wysiwyg-content"
|
|
103
|
-
v-html="urlify(podcast.description)"
|
|
104
|
-
/>
|
|
105
|
-
<div class="mt-3 mb-3">
|
|
106
|
-
<ParticipantDescription :participants="podcast.animators" />
|
|
107
|
-
<div v-if="!isOuestFrance">
|
|
108
|
-
{{ $t('Emission') + ' : ' }}
|
|
109
|
-
<router-link
|
|
110
|
-
class="link-info"
|
|
111
|
-
:to="{
|
|
112
|
-
name: 'emission',
|
|
113
|
-
params: { emissionId: podcast.emission.emissionId },
|
|
114
|
-
query: {
|
|
115
|
-
productor: $store.state.filter.organisationId,
|
|
116
|
-
},
|
|
117
|
-
}"
|
|
118
|
-
>
|
|
119
|
-
{{ podcast.emission.name }}
|
|
120
|
-
</router-link>
|
|
121
|
-
</div>
|
|
122
|
-
<div v-if="!isPodcastmaker">
|
|
123
|
-
{{ $t('Producted by : ') }}
|
|
124
|
-
<router-link
|
|
125
|
-
class="link-info"
|
|
126
|
-
:to="{
|
|
127
|
-
name: 'productor',
|
|
128
|
-
params: { productorId: podcast.organisation.id },
|
|
129
|
-
query: {
|
|
130
|
-
productor: $store.state.filter.organisationId,
|
|
131
|
-
},
|
|
132
|
-
}"
|
|
133
|
-
>
|
|
134
|
-
{{ podcast.organisation.name }}
|
|
135
|
-
</router-link>
|
|
136
|
-
</div>
|
|
137
|
-
<a
|
|
138
|
-
v-if="podcast.article"
|
|
139
|
-
class="btn d-flex align-items-center my-2 width-fit-content"
|
|
140
|
-
:href="podcast.article"
|
|
141
|
-
rel="noopener"
|
|
142
|
-
target="_blank"
|
|
143
|
-
>
|
|
144
|
-
<span class="saooti-newspaper me-1" />
|
|
145
|
-
<div>{{ $t('See associated article') }}</div>
|
|
146
|
-
</a>
|
|
147
|
-
<ParticipantDescription
|
|
148
|
-
:participants="podcast.guests"
|
|
149
|
-
:is-guest="true"
|
|
150
|
-
/>
|
|
151
|
-
<div v-if="editRight && !isPodcastmaker">
|
|
152
|
-
<div
|
|
153
|
-
v-if="podcast.annotations && podcast.annotations.RSS"
|
|
154
|
-
class="me-5"
|
|
155
|
-
>
|
|
156
|
-
{{ $t('From RSS') }}
|
|
157
|
-
</div>
|
|
158
|
-
<ErrorMessage
|
|
159
|
-
v-if="!podcast.availability.visibility"
|
|
160
|
-
:message="$t('Podcast is not visible for listeners')"
|
|
161
|
-
/>
|
|
162
|
-
<ErrorMessage
|
|
163
|
-
v-if="'ERROR' === podcast.processingStatus"
|
|
164
|
-
:message="$t('Podcast in ERROR, please contact Saooti')"
|
|
165
|
-
/>
|
|
166
|
-
<ErrorMessage
|
|
167
|
-
v-if="podcastNotValid"
|
|
168
|
-
:message="$t('Podcast not validated')"
|
|
169
|
-
/>
|
|
170
|
-
</div>
|
|
171
|
-
<ShareButtons
|
|
172
|
-
v-if="isDownloadButton"
|
|
173
|
-
:podcast="podcast"
|
|
174
|
-
:big-round="true"
|
|
175
|
-
:audio-url="podcast.audioUrl"
|
|
176
|
-
/>
|
|
177
|
-
</div>
|
|
178
|
-
</div>
|
|
179
|
-
</div>
|
|
180
|
-
<TagList
|
|
181
|
-
v-if="isTagList"
|
|
182
|
-
:tag-list="podcast.tags"
|
|
183
|
-
/>
|
|
184
|
-
</div>
|
|
36
|
+
<PodcastModuleBox
|
|
37
|
+
:playing-podcast="playingPodcast"
|
|
38
|
+
:podcast="podcast"
|
|
39
|
+
:fetch-conference="fetchConference"
|
|
40
|
+
/>
|
|
185
41
|
<SubscribeButtons
|
|
186
42
|
v-if="isShareButtons && countLink >= 1"
|
|
187
43
|
:emission="podcast.emission"
|
|
@@ -250,14 +106,11 @@
|
|
|
250
106
|
|
|
251
107
|
<script lang="ts">
|
|
252
108
|
import PodcastInlineList from '../display/podcasts/PodcastInlineList.vue';
|
|
253
|
-
import
|
|
254
|
-
import ParticipantDescription from '../display/podcasts/ParticipantDescription.vue';
|
|
109
|
+
import PodcastModuleBox from '../display/podcasts/PodcastModuleBox.vue';
|
|
255
110
|
const octopusApi = require('@saooti/octopus-api');
|
|
256
111
|
import studioApi from '@/api/studio';
|
|
257
112
|
import { state } from '../../store/paramStore';
|
|
258
113
|
const moment = require('moment');
|
|
259
|
-
const humanizeDuration = require('humanize-duration');
|
|
260
|
-
import { displayMethods } from '../mixins/functions';
|
|
261
114
|
import { Podcast } from '@/store/class/podcast';
|
|
262
115
|
import { Conference } from '@/store/class/conference';
|
|
263
116
|
|
|
@@ -265,31 +118,24 @@ import { defineComponent, defineAsyncComponent } from 'vue';
|
|
|
265
118
|
const ShareButtons = defineAsyncComponent(() => import('../display/sharing/ShareButtons.vue'));
|
|
266
119
|
const SharePlayer = defineAsyncComponent(() => import('../display/sharing/SharePlayer.vue'));
|
|
267
120
|
const EditBox = defineAsyncComponent(() => import('@/components/display/edit/EditBox.vue'));
|
|
268
|
-
const TagList = defineAsyncComponent(() => import('../display/podcasts/TagList.vue'));
|
|
269
121
|
const SubscribeButtons = defineAsyncComponent(() => import('../display/sharing/SubscribeButtons.vue'));
|
|
270
122
|
const RecordingItemButton = defineAsyncComponent(() => import('@/components/display/studio/RecordingItemButton.vue'));
|
|
271
123
|
const Countdown = defineAsyncComponent(() => import('../display/live/CountDown.vue'));
|
|
272
124
|
const CommentSection = defineAsyncComponent(() => import('../display/comments/CommentSection.vue'));
|
|
273
|
-
const ErrorMessage = defineAsyncComponent(() => import('../misc/ErrorMessage.vue'));
|
|
274
125
|
export default defineComponent({
|
|
275
126
|
name: "Podcast",
|
|
276
127
|
components: {
|
|
277
128
|
PodcastInlineList,
|
|
278
|
-
PodcastImage,
|
|
279
|
-
ParticipantDescription,
|
|
280
129
|
ShareButtons,
|
|
281
130
|
SharePlayer,
|
|
282
131
|
EditBox,
|
|
283
|
-
TagList,
|
|
284
132
|
SubscribeButtons,
|
|
285
133
|
RecordingItemButton,
|
|
286
134
|
Countdown,
|
|
287
135
|
CommentSection,
|
|
288
|
-
|
|
136
|
+
PodcastModuleBox
|
|
289
137
|
},
|
|
290
138
|
|
|
291
|
-
mixins:[displayMethods],
|
|
292
|
-
|
|
293
139
|
props: {
|
|
294
140
|
updateStatus: { default: undefined, type: String},
|
|
295
141
|
playingPodcast: { default: undefined, type: Object as ()=> Podcast},
|
|
@@ -297,7 +143,7 @@ export default defineComponent({
|
|
|
297
143
|
isEducation: { default: false, type: Boolean},
|
|
298
144
|
},
|
|
299
145
|
|
|
300
|
-
emits: ['initConferenceId', 'podcastTitle'
|
|
146
|
+
emits: ['initConferenceId', 'podcastTitle'],
|
|
301
147
|
|
|
302
148
|
data() {
|
|
303
149
|
return {
|
|
@@ -335,12 +181,6 @@ export default defineComponent({
|
|
|
335
181
|
isOuestFrance(): boolean {
|
|
336
182
|
return state.podcastPage.ouestFranceStyle;
|
|
337
183
|
},
|
|
338
|
-
isTagList(): boolean {
|
|
339
|
-
return state.podcastPage.tagList;
|
|
340
|
-
},
|
|
341
|
-
isDownloadButton(): boolean {
|
|
342
|
-
return state.podcastPage.downloadButton;
|
|
343
|
-
},
|
|
344
184
|
emissionMainCategory(): number {
|
|
345
185
|
if(!this.podcast){return 0;}
|
|
346
186
|
if (
|
|
@@ -371,30 +211,6 @@ export default defineComponent({
|
|
|
371
211
|
return 0;
|
|
372
212
|
});
|
|
373
213
|
},
|
|
374
|
-
date(): string {
|
|
375
|
-
if (this.podcast && 1970 !== moment(this.podcast.pubDate).year()){
|
|
376
|
-
if('fr' === this.$i18n.locale){
|
|
377
|
-
return moment(this.podcast.pubDate).format('D MMMM YYYY [à] HH[h]mm');
|
|
378
|
-
}
|
|
379
|
-
return moment(this.podcast.pubDate).format('D MMMM YYYY [at] HH[h]mm');
|
|
380
|
-
}
|
|
381
|
-
return '';
|
|
382
|
-
},
|
|
383
|
-
duration(): string {
|
|
384
|
-
if (!this.podcast || this.podcast.duration <= 1) return '';
|
|
385
|
-
if (this.podcast.duration > 600000) {
|
|
386
|
-
return humanizeDuration(this.podcast.duration, {
|
|
387
|
-
language: this.$i18n.locale,
|
|
388
|
-
largest: 1,
|
|
389
|
-
round: true,
|
|
390
|
-
});
|
|
391
|
-
}
|
|
392
|
-
return humanizeDuration(this.podcast.duration, {
|
|
393
|
-
language: this.$i18n.locale,
|
|
394
|
-
largest: 2,
|
|
395
|
-
round: true,
|
|
396
|
-
});
|
|
397
|
-
},
|
|
398
214
|
editRight(): boolean {
|
|
399
215
|
if ( this.podcast &&
|
|
400
216
|
(this.authenticated &&
|
|
@@ -405,11 +221,6 @@ export default defineComponent({
|
|
|
405
221
|
return false;
|
|
406
222
|
},
|
|
407
223
|
isReady(): boolean {
|
|
408
|
-
/* if(this.podcast && this.podcast.processingStatus !== "PLANNED" && this.podcast.processingStatus !== "PROCESSING"){
|
|
409
|
-
return true;
|
|
410
|
-
}else{
|
|
411
|
-
return false;
|
|
412
|
-
} */
|
|
413
224
|
return true;
|
|
414
225
|
},
|
|
415
226
|
countLink(): number {
|
|
@@ -431,14 +242,6 @@ export default defineComponent({
|
|
|
431
242
|
isLiveReadyToRecord(): boolean {
|
|
432
243
|
return (undefined!==this.podcast && undefined!==this.podcast.conferenceId && 0 !== this.podcast.conferenceId && 'READY_TO_RECORD' === this.podcast.processingStatus);
|
|
433
244
|
},
|
|
434
|
-
isLiveReady(): boolean {
|
|
435
|
-
return (
|
|
436
|
-
undefined!==this.podcast &&
|
|
437
|
-
undefined!==this.podcast.conferenceId &&
|
|
438
|
-
0 !== this.podcast.conferenceId &&
|
|
439
|
-
'READY' === this.podcast.processingStatus
|
|
440
|
-
);
|
|
441
|
-
},
|
|
442
245
|
isCounter(): boolean {
|
|
443
246
|
return (
|
|
444
247
|
this.isLiveReadyToRecord &&
|
|
@@ -469,15 +272,6 @@ export default defineComponent({
|
|
|
469
272
|
if(!this.podcast){return "";}
|
|
470
273
|
return moment(this.podcast.pubDate).diff(moment(), 'seconds');
|
|
471
274
|
},
|
|
472
|
-
podcastNotValid(): boolean {
|
|
473
|
-
if (
|
|
474
|
-
this.podcast &&
|
|
475
|
-
this.podcast.availability &&
|
|
476
|
-
false === this.podcast.valid
|
|
477
|
-
)
|
|
478
|
-
return true;
|
|
479
|
-
return false;
|
|
480
|
-
},
|
|
481
275
|
},
|
|
482
276
|
watch: {
|
|
483
277
|
updateStatus(): void {
|
|
@@ -567,14 +361,6 @@ export default defineComponent({
|
|
|
567
361
|
this.loaded = true;
|
|
568
362
|
}
|
|
569
363
|
},
|
|
570
|
-
getName(person: any): string {
|
|
571
|
-
const first = person.firstName || '';
|
|
572
|
-
const last = person.lastName || '';
|
|
573
|
-
return (first + ' ' + last).trim();
|
|
574
|
-
},
|
|
575
|
-
playPodcast(podcast: Podcast): void {
|
|
576
|
-
this.$emit('playPodcast', podcast);
|
|
577
|
-
},
|
|
578
364
|
removeDeleted(): void {
|
|
579
365
|
if (window.history.length > 1) {
|
|
580
366
|
this.$router.go(-1);
|
|
@@ -587,25 +373,4 @@ export default defineComponent({
|
|
|
587
373
|
},
|
|
588
374
|
},
|
|
589
375
|
})
|
|
590
|
-
</script>
|
|
591
|
-
|
|
592
|
-
<style lang="scss">
|
|
593
|
-
.title-page-podcast {
|
|
594
|
-
font-size: 0.9rem;
|
|
595
|
-
}
|
|
596
|
-
.width-fit-content{
|
|
597
|
-
width: fit-content;
|
|
598
|
-
}
|
|
599
|
-
|
|
600
|
-
.date-text-zone {
|
|
601
|
-
display: flex;
|
|
602
|
-
flex-wrap: wrap;
|
|
603
|
-
margin-bottom: 1rem;
|
|
604
|
-
@media (max-width: 600px) {
|
|
605
|
-
display: initial;
|
|
606
|
-
.duration {
|
|
607
|
-
margin-left: 0 !important;
|
|
608
|
-
}
|
|
609
|
-
}
|
|
610
|
-
}
|
|
611
|
-
</style>
|
|
376
|
+
</script>
|