@saooti/octopus-sdk 41.0.7-SNAPSHOT → 41.0.7
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/index.ts +2 -1
- package/package.json +3 -1
- package/plateform.conf +1 -1
- package/src/App.vue +3 -7
- package/src/api/classicApi.ts +1 -1
- package/src/components/composable/player/usePlayerLive.ts +3 -3
- package/src/components/composable/player/usePlayerVast.ts +7 -7
- package/src/components/composable/route/useAdvancedParamInit.ts +1 -1
- package/src/components/composable/route/useRouteUpdateParams.ts +4 -4
- package/src/components/composable/route/useSimplePageParam.ts +15 -8
- package/src/components/display/categories/CategoryChooser.vue +6 -0
- package/src/components/display/comments/CommentList.vue +1 -1
- package/src/components/display/emission/EmissionList.vue +5 -8
- package/src/components/display/filter/AdvancedSearch.vue +0 -3
- package/src/components/display/list/ListPaginate.vue +4 -12
- package/src/components/display/live/LiveItem.vue +2 -3
- package/src/components/display/participant/ParticipantList.vue +6 -9
- package/src/components/display/playlist/PlaylistList.vue +5 -8
- package/src/components/display/playlist/PodcastList.vue +16 -7
- package/src/components/display/podcasts/PodcastFilterList.vue +19 -8
- package/src/components/display/podcasts/PodcastList.vue +8 -9
- package/src/components/display/podcasts/PodcastPlayButton.vue +4 -1
- package/src/components/display/sharing/SharePlayerTypes.vue +1 -1
- package/src/components/display/sharing/SubscribeButtons.vue +4 -2
- package/src/components/form/ClassicInputText.vue +3 -0
- package/src/components/form/ClassicMultiselect.vue +36 -8
- package/src/components/misc/ClassicAccordion.vue +4 -4
- package/src/components/misc/ClassicPopover.vue +1 -1
- package/src/components/misc/ClassicSpinner.vue +1 -1
- package/src/components/misc/FooterSection.vue +0 -16
- package/src/components/misc/HomeDropdown.vue +3 -110
- package/src/components/misc/MobileMenu.vue +59 -64
- package/src/components/misc/TopBar.vue +4 -11
- package/src/components/misc/TopBarMainContent.vue +1 -2
- package/src/components/misc/UserButtonContent.vue +159 -0
- package/src/components/misc/player/elements/PlayerImage.vue +0 -1
- package/src/components/misc/player/video/PlayerVideo.vue +2 -2
- package/src/components/pages/EmissionPage.vue +14 -0
- package/src/components/pages/PageLogout.vue +1 -6
- package/src/components/pages/ParticipantPage.vue +14 -0
- package/src/components/pages/PlaylistPage.vue +17 -4
- package/src/components/pages/PodcastPage.vue +1 -1
- package/src/components/pages/VideoPage.vue +5 -2
- package/src/helper/loadScript.ts +4 -4
- package/src/locale/de.ts +2 -2
- package/src/locale/en.ts +2 -2
- package/src/locale/es.ts +2 -2
- package/src/locale/fr.ts +2 -2
- package/src/locale/it.ts +2 -2
- package/src/locale/sl.ts +2 -2
- package/src/router/router.ts +17 -4
- package/src/stores/AuthStore.ts +12 -12
- package/src/stores/FilterStore.ts +1 -1
- package/src/stores/PlayerStore.ts +5 -0
- package/src/stores/VastStore.ts +2 -2
- package/src/stores/class/conference/conference.ts +2 -0
- package/src/style/_variables.scss +3 -0
- package/src/style/general.scss +12 -0
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<nav :aria-label="navLabel">
|
|
3
|
+
<ul class="p-0 m-0">
|
|
4
|
+
<template v-if="specificRoutes.length">
|
|
5
|
+
<li v-for="routerBack in specificRoutes" :key="routerBack.path" class="li-style-none">
|
|
6
|
+
<router-link
|
|
7
|
+
v-if="!state.generalParameters.podcastmaker && routerBack.condition"
|
|
8
|
+
:class="routerBack.class"
|
|
9
|
+
:to="routerBack.path"
|
|
10
|
+
>
|
|
11
|
+
{{ routerBack.title }}
|
|
12
|
+
</router-link>
|
|
13
|
+
</li>
|
|
14
|
+
<hr v-if="displayUserContent"/>
|
|
15
|
+
</template>
|
|
16
|
+
<template v-if="displayUserContent">
|
|
17
|
+
<template v-if="!isAuthenticated">
|
|
18
|
+
<li class="li-style-none">
|
|
19
|
+
<a class="octopus-dropdown-item realLink" :href="pathLogin">
|
|
20
|
+
{{ t("Login") }}
|
|
21
|
+
</a>
|
|
22
|
+
</li>
|
|
23
|
+
<li class="li-style-none">
|
|
24
|
+
<router-link
|
|
25
|
+
v-if="!state.generalParameters.podcastmaker"
|
|
26
|
+
class="octopus-dropdown-item"
|
|
27
|
+
to="/main/pub/create"
|
|
28
|
+
>
|
|
29
|
+
{{ t("Create an account") }}
|
|
30
|
+
</router-link>
|
|
31
|
+
</li>
|
|
32
|
+
</template>
|
|
33
|
+
<template v-else>
|
|
34
|
+
<li v-for="routeBackoffice in routerBackoffice" :key="routeBackoffice.path" class="li-style-none">
|
|
35
|
+
<router-link
|
|
36
|
+
v-if="!state.generalParameters.podcastmaker && routeBackoffice.condition"
|
|
37
|
+
:class="routeBackoffice.class"
|
|
38
|
+
:to="routeBackoffice.path"
|
|
39
|
+
>
|
|
40
|
+
{{ routeBackoffice.title }}
|
|
41
|
+
</router-link>
|
|
42
|
+
</li>
|
|
43
|
+
<hr />
|
|
44
|
+
<template v-if="helpLinks.length">
|
|
45
|
+
<li v-for="helpLink in helpLinks" :key="helpLink.title" class="li-style-none">
|
|
46
|
+
<a
|
|
47
|
+
:href="helpLink.href"
|
|
48
|
+
class="octopus-dropdown-item realLink"
|
|
49
|
+
rel="noreferrer noopener"
|
|
50
|
+
target="_blank"
|
|
51
|
+
:title="t('New window', {text: helpLink.title})"
|
|
52
|
+
>
|
|
53
|
+
{{ helpLink.title }}
|
|
54
|
+
<OpenInNewIcon class="ms-1" :size="15"/>
|
|
55
|
+
</a>
|
|
56
|
+
</li>
|
|
57
|
+
<hr />
|
|
58
|
+
</template>
|
|
59
|
+
<li class="li-style-none">
|
|
60
|
+
<a class="octopus-dropdown-item c-hand" href="/logout">
|
|
61
|
+
{{ t("Logout") }}
|
|
62
|
+
</a>
|
|
63
|
+
</li>
|
|
64
|
+
</template>
|
|
65
|
+
<li class="li-style-none">
|
|
66
|
+
<router-link
|
|
67
|
+
v-if="!authStore.isGarRole"
|
|
68
|
+
class="octopus-dropdown-item"
|
|
69
|
+
to="/main/pub/contact"
|
|
70
|
+
>
|
|
71
|
+
{{ t("Contact") }}
|
|
72
|
+
</router-link>
|
|
73
|
+
</li>
|
|
74
|
+
</template>
|
|
75
|
+
</ul>
|
|
76
|
+
</nav>
|
|
77
|
+
</template>
|
|
78
|
+
|
|
79
|
+
<script setup lang="ts">
|
|
80
|
+
import OpenInNewIcon from "vue-material-design-icons/OpenInNew.vue";
|
|
81
|
+
import { state } from "../../stores/ParamSdkStore";
|
|
82
|
+
import { useAuthStore } from "../../stores/AuthStore";
|
|
83
|
+
import { computed } from "vue";
|
|
84
|
+
import { useApiStore } from "../../stores/ApiStore";
|
|
85
|
+
import { useI18n } from "vue-i18n";
|
|
86
|
+
import { RouteLocationAsPathGeneric, RouteLocationAsRelativeGeneric, useRoute } from "vue-router";
|
|
87
|
+
|
|
88
|
+
//Interface
|
|
89
|
+
interface RouteInfo{
|
|
90
|
+
title: string;
|
|
91
|
+
class: string;
|
|
92
|
+
path: string | RouteLocationAsRelativeGeneric | RouteLocationAsPathGeneric;
|
|
93
|
+
condition: boolean
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
//Props
|
|
97
|
+
const props = defineProps({
|
|
98
|
+
isEducation: { default: false, type: Boolean },
|
|
99
|
+
navLabel: { default: "", type: String },
|
|
100
|
+
specificRoutes: { default: ()=>[], type: Array as ()=> Array<RouteInfo> },
|
|
101
|
+
displayUserContent: { default: true, type: Boolean },
|
|
102
|
+
})
|
|
103
|
+
|
|
104
|
+
//Composables
|
|
105
|
+
const { t } = useI18n();
|
|
106
|
+
const authStore = useAuthStore();
|
|
107
|
+
const apiStore = useApiStore();
|
|
108
|
+
const route = useRoute();
|
|
109
|
+
|
|
110
|
+
//Computed
|
|
111
|
+
const isAuthenticated = computed(() => undefined !== authStore.authProfile?.userId);
|
|
112
|
+
const pathLogin = computed(() => "/sso/login?redirect_url="+encodeURI(apiStore.frontendUrl + route.fullPath));
|
|
113
|
+
const isAuthenticatedWithOrga = computed(() => undefined !== authStore.authOrgaId);
|
|
114
|
+
const organisationsAvailable = computed(() => authStore.authProfile?.organisations ?? []);
|
|
115
|
+
|
|
116
|
+
const helpLinks = computed(() => {
|
|
117
|
+
if (authStore.isGarRole || props.isEducation) {
|
|
118
|
+
return [];
|
|
119
|
+
}
|
|
120
|
+
return [
|
|
121
|
+
{ title:t("Help"), href: "https://help.octopus.saooti.com/Aide/"},
|
|
122
|
+
{ title: t("TutoMag"), href: "https://help.octopus.saooti.com/" },
|
|
123
|
+
];
|
|
124
|
+
});
|
|
125
|
+
const routerBackoffice = computed(() => {
|
|
126
|
+
if(!isAuthenticated.value){
|
|
127
|
+
return [];
|
|
128
|
+
}
|
|
129
|
+
return [
|
|
130
|
+
{
|
|
131
|
+
title: t("My space"),
|
|
132
|
+
class: "octopus-dropdown-item show-small-screen",
|
|
133
|
+
path: "/main/priv/backoffice",
|
|
134
|
+
condition: isAuthenticatedWithOrga.value,
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
title: t("Upload"),
|
|
138
|
+
class: "octopus-dropdown-item show-small-screen",
|
|
139
|
+
path: "/main/priv/upload",
|
|
140
|
+
condition: isAuthenticatedWithOrga.value && authStore.isRoleContribution,
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
title: t("Edit my profile"),
|
|
144
|
+
class: "octopus-dropdown-item",
|
|
145
|
+
path: "/main/priv/edit/profile",
|
|
146
|
+
condition: true,
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
title: t("Edit my organisation"),
|
|
150
|
+
class: "octopus-dropdown-item",
|
|
151
|
+
path: "/main/priv/edit/organisation",
|
|
152
|
+
condition:
|
|
153
|
+
isAuthenticatedWithOrga.value &&
|
|
154
|
+
(authStore.isRoleOrganisation || 1 < organisationsAvailable.value.length),
|
|
155
|
+
},
|
|
156
|
+
];
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
</script>
|
|
@@ -39,10 +39,10 @@ const playerStore = usePlayerStore();
|
|
|
39
39
|
//Computed
|
|
40
40
|
const isSecured = computed(() => "SECURED" === playerStore.playerLive?.organisation?.privacy);
|
|
41
41
|
const hlsVideoUrl = computed(() => {
|
|
42
|
-
if (!playerStore.
|
|
42
|
+
if (!playerStore.playerHlsIdentifier) {
|
|
43
43
|
return "";
|
|
44
44
|
}
|
|
45
|
-
return `${apiStore.hlsUrl}live/
|
|
45
|
+
return `${apiStore.hlsUrl}live/video_${playerStore.playerHlsIdentifier}/index.m3u8`;
|
|
46
46
|
});
|
|
47
47
|
|
|
48
48
|
onMounted(()=>{
|
|
@@ -70,12 +70,17 @@
|
|
|
70
70
|
:emission-id="emissionId"
|
|
71
71
|
/>
|
|
72
72
|
<PodcastFilterList
|
|
73
|
+
v-if="isInit"
|
|
74
|
+
v-model:query="searchPattern"
|
|
73
75
|
class="mx-2"
|
|
76
|
+
:first="paginateFirst"
|
|
77
|
+
:size="ps"
|
|
74
78
|
:show-count="true"
|
|
75
79
|
:emission-id="emissionId"
|
|
76
80
|
:category-filter="false"
|
|
77
81
|
:edit-right="editRight"
|
|
78
82
|
:productor-id="[emission.orga.id]"
|
|
83
|
+
:force-update-parameters="true"
|
|
79
84
|
@fetch="podcastsFetched"
|
|
80
85
|
/>
|
|
81
86
|
</section>
|
|
@@ -110,6 +115,7 @@ import { useFilterStore } from "../../stores/FilterStore";
|
|
|
110
115
|
import { Podcast } from "@/stores/class/general/podcast";
|
|
111
116
|
import { useI18n } from "vue-i18n";
|
|
112
117
|
import { useRoute } from "vue-router";
|
|
118
|
+
import { useSimplePageParam } from "../composable/route/useSimplePageParam";
|
|
113
119
|
const ShareAnonymous = defineAsyncComponent(() => import("../display/sharing/ShareAnonymous.vue"));
|
|
114
120
|
const PodcastFilterList = defineAsyncComponent(
|
|
115
121
|
() => import("../display/podcasts/PodcastFilterList.vue"),
|
|
@@ -143,6 +149,9 @@ const PodcastmakerHeader = defineAsyncComponent(
|
|
|
143
149
|
//Props
|
|
144
150
|
const props = defineProps({
|
|
145
151
|
emissionId: { default: undefined, type: Number },
|
|
152
|
+
pr: { default: 0, type: Number },
|
|
153
|
+
ps: { default: 30, type: Number },
|
|
154
|
+
routeQuery: { default: "", type: String },
|
|
146
155
|
})
|
|
147
156
|
|
|
148
157
|
|
|
@@ -163,6 +172,11 @@ const authStore = useAuthStore();
|
|
|
163
172
|
const filterStore = useFilterStore();
|
|
164
173
|
const generalStore= useGeneralStore();
|
|
165
174
|
const route= useRoute();
|
|
175
|
+
const {
|
|
176
|
+
searchPattern,
|
|
177
|
+
paginateFirst,
|
|
178
|
+
isInit
|
|
179
|
+
} = useSimplePageParam(props, true);
|
|
166
180
|
|
|
167
181
|
|
|
168
182
|
//Computed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<section
|
|
3
|
-
class="page-box page-box-absolute page-logout"
|
|
3
|
+
class="page-box page-box-absolute page-logout bg-gradient"
|
|
4
4
|
>
|
|
5
5
|
<div class="logout-section">
|
|
6
6
|
<h1 class="mb-3">{{ t("Logout") }}</h1>
|
|
@@ -19,11 +19,6 @@ const { t } = useI18n();
|
|
|
19
19
|
</script>
|
|
20
20
|
<style lang="scss">
|
|
21
21
|
.octopus-app .page-logout {
|
|
22
|
-
background: linear-gradient(
|
|
23
|
-
90deg,
|
|
24
|
-
var(--octopus-primary) 0%,
|
|
25
|
-
var(--octopus-tertiary) 100%
|
|
26
|
-
);
|
|
27
22
|
display: flex;
|
|
28
23
|
align-items: center;
|
|
29
24
|
justify-content: center;
|
|
@@ -47,12 +47,17 @@
|
|
|
47
47
|
</section>
|
|
48
48
|
<!-- productorId define to avoid overwrite #12817 -->
|
|
49
49
|
<PodcastFilterList
|
|
50
|
+
v-if="isInit"
|
|
51
|
+
v-model:query="searchPattern"
|
|
52
|
+
:first="paginateFirst"
|
|
53
|
+
:size="ps"
|
|
50
54
|
:participant-id="participantId"
|
|
51
55
|
:name="name"
|
|
52
56
|
:category-filter="true"
|
|
53
57
|
:productor-id="['']"
|
|
54
58
|
:reload="reload"
|
|
55
59
|
:show-count="true"
|
|
60
|
+
:force-update-parameters="true"
|
|
56
61
|
/>
|
|
57
62
|
</template>
|
|
58
63
|
<ClassicLoading
|
|
@@ -77,6 +82,7 @@ import { computed, defineAsyncComponent, ref, Ref, watch } from "vue";
|
|
|
77
82
|
import { AxiosError } from "axios";
|
|
78
83
|
import { useI18n } from "vue-i18n";
|
|
79
84
|
import { useRoute } from "vue-router";
|
|
85
|
+
import { useSimplePageParam } from "../composable/route/useSimplePageParam";
|
|
80
86
|
const ShareSocialsButtons = defineAsyncComponent(
|
|
81
87
|
() => import("../display/sharing/ShareSocialsButtons.vue"),
|
|
82
88
|
);
|
|
@@ -92,6 +98,9 @@ const ShareAnonymous = defineAsyncComponent(() => import("../display/sharing/Sha
|
|
|
92
98
|
//Props
|
|
93
99
|
const props = defineProps({
|
|
94
100
|
participantId: { default: undefined, type: Number },
|
|
101
|
+
pr: { default: 0, type: Number },
|
|
102
|
+
ps: { default: 30, type: Number },
|
|
103
|
+
routeQuery: { default: "", type: String },
|
|
95
104
|
});
|
|
96
105
|
|
|
97
106
|
|
|
@@ -110,6 +119,11 @@ const { isEditRights } = useOrgaComputed();
|
|
|
110
119
|
const { updatePathParams } = useSeoTitleUrl();
|
|
111
120
|
const {handle403} = useErrorHandler();
|
|
112
121
|
const filterStore = useFilterStore();
|
|
122
|
+
const {
|
|
123
|
+
searchPattern,
|
|
124
|
+
paginateFirst,
|
|
125
|
+
isInit
|
|
126
|
+
} = useSimplePageParam(props, true);
|
|
113
127
|
|
|
114
128
|
|
|
115
129
|
//Computed
|
|
@@ -18,8 +18,7 @@
|
|
|
18
18
|
width="250"
|
|
19
19
|
height="250"
|
|
20
20
|
aria-hidden="true"
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
alt=""
|
|
23
22
|
:title="t('Playlist name image', { name: name })"
|
|
24
23
|
class="img-box float-start me-3 mb-3"
|
|
25
24
|
/>
|
|
@@ -42,7 +41,13 @@
|
|
|
42
41
|
:organisation-id="playlist.organisation.id"
|
|
43
42
|
/>
|
|
44
43
|
<section class="module-box">
|
|
45
|
-
<PodcastList
|
|
44
|
+
<PodcastList
|
|
45
|
+
v-if="isInit"
|
|
46
|
+
v-model:query="searchPattern"
|
|
47
|
+
:first="paginateFirst"
|
|
48
|
+
:size="ps"
|
|
49
|
+
:playlist="playlist"
|
|
50
|
+
/>
|
|
46
51
|
</section>
|
|
47
52
|
</div>
|
|
48
53
|
</template>
|
|
@@ -71,6 +76,7 @@ import {defineAsyncComponent, ref, Ref, computed, watch, onBeforeUnmount } from
|
|
|
71
76
|
import { AxiosError } from "axios";
|
|
72
77
|
import { useI18n } from "vue-i18n";
|
|
73
78
|
import { useRoute } from "vue-router";
|
|
79
|
+
import { useSimplePageParam } from "../composable/route/useSimplePageParam";
|
|
74
80
|
const ShareSocialsButtons = defineAsyncComponent(
|
|
75
81
|
() => import("../display/sharing/ShareSocialsButtons.vue"),
|
|
76
82
|
);
|
|
@@ -89,6 +95,9 @@ const ShareAnonymous = defineAsyncComponent(() => import("../display/sharing/Sha
|
|
|
89
95
|
//Props
|
|
90
96
|
const props = defineProps({
|
|
91
97
|
playlistId: { default: undefined, type: Number },
|
|
98
|
+
pr: { default: 0, type: Number },
|
|
99
|
+
ps: { default: 30, type: Number },
|
|
100
|
+
routeQuery: { default: "", type: String },
|
|
92
101
|
});
|
|
93
102
|
|
|
94
103
|
|
|
@@ -108,7 +117,11 @@ const {handle403} = useErrorHandler();
|
|
|
108
117
|
const authStore = useAuthStore();
|
|
109
118
|
const filterStore = useFilterStore();
|
|
110
119
|
const generalStore = useGeneralStore();
|
|
111
|
-
|
|
120
|
+
const {
|
|
121
|
+
searchPattern,
|
|
122
|
+
paginateFirst,
|
|
123
|
+
isInit
|
|
124
|
+
} = useSimplePageParam(props, true);
|
|
112
125
|
|
|
113
126
|
|
|
114
127
|
//Computed
|
|
@@ -255,7 +255,7 @@ async function fetchConferenceStatus() {
|
|
|
255
255
|
api: 9,
|
|
256
256
|
path: "conference/info/" + podcast.value?.conferenceId,
|
|
257
257
|
});
|
|
258
|
-
fetchConference.value
|
|
258
|
+
fetchConference.value = {...fetchConference.value, ...data};
|
|
259
259
|
} catch {
|
|
260
260
|
//Do nothing
|
|
261
261
|
}
|
|
@@ -193,7 +193,7 @@ const hlsVideoUrl = computed(() => {
|
|
|
193
193
|
if (!recordingLive.value || !podcastConference.value) {
|
|
194
194
|
return "";
|
|
195
195
|
}
|
|
196
|
-
return `${apiStore.hlsUrl}live/
|
|
196
|
+
return `${apiStore.hlsUrl}live/video_${podcastConference.value.hlsIdentifier}/index.m3u8`;
|
|
197
197
|
});
|
|
198
198
|
const isSecured = computed(() => {
|
|
199
199
|
return "SECURED" === podcast.value?.organisation?.privacy;
|
|
@@ -255,7 +255,10 @@ async function getPodcastDetails(): Promise<void> {
|
|
|
255
255
|
playerStore.playerPlay(
|
|
256
256
|
{
|
|
257
257
|
...podcast.value,
|
|
258
|
-
...{
|
|
258
|
+
...{
|
|
259
|
+
conferenceId: podcast.value.conferenceId,
|
|
260
|
+
hlsIdentifier: podcastConference.value?.hlsIdentifier,
|
|
261
|
+
},
|
|
259
262
|
},
|
|
260
263
|
true,
|
|
261
264
|
);
|
package/src/helper/loadScript.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
function loadScript(src: string, async:boolean, callback:
|
|
1
|
+
function loadScript(src: string, async:boolean, callback: (isLoaded:boolean) => void) {
|
|
2
2
|
const firstElement = document.getElementsByTagName('head')[0] || document.documentElement,
|
|
3
3
|
scriptElement = document.createElement('script');
|
|
4
4
|
scriptElement.type = 'text/javascript';
|
|
@@ -6,13 +6,13 @@ function loadScript(src: string, async:boolean, callback: any) {
|
|
|
6
6
|
scriptElement.async = async;
|
|
7
7
|
scriptElement.addEventListener('load', function() {
|
|
8
8
|
if(callback && typeof callback === 'function') {
|
|
9
|
-
callback(true
|
|
9
|
+
callback(true);
|
|
10
10
|
}
|
|
11
11
|
}, false);
|
|
12
|
-
scriptElement.addEventListener('error', function(
|
|
12
|
+
scriptElement.addEventListener('error', function() {
|
|
13
13
|
firstElement.removeChild(scriptElement);
|
|
14
14
|
if(callback && typeof callback === 'function') {
|
|
15
|
-
callback(false
|
|
15
|
+
callback(false);
|
|
16
16
|
}
|
|
17
17
|
}, false);
|
|
18
18
|
firstElement.insertBefore(scriptElement, firstElement.firstChild);
|
package/src/locale/de.ts
CHANGED
|
@@ -146,8 +146,8 @@ export default {
|
|
|
146
146
|
"Sort score": "Nach Relevanz",
|
|
147
147
|
"Sort name": "Nach Titel",
|
|
148
148
|
"Sort last": "Nach Datum",
|
|
149
|
-
"Choose color": "
|
|
150
|
-
"Choose theme": "
|
|
149
|
+
"Choose color": "Akzentfarbe",
|
|
150
|
+
"Choose theme": "Thema (Spielerhintergrund)",
|
|
151
151
|
"Podcast no visible": "Podcast nicht sichtbar",
|
|
152
152
|
"Display episodes": "Folgen anzeigen",
|
|
153
153
|
"Podcast published in future": "Podcast geplant",
|
package/src/locale/en.ts
CHANGED
|
@@ -145,8 +145,8 @@ export default {
|
|
|
145
145
|
"Sort score": "Sorted by relevancy score",
|
|
146
146
|
"Sort name": "Sorted title",
|
|
147
147
|
"Sort last": "Sorted last",
|
|
148
|
-
"Choose color": "
|
|
149
|
-
"Choose theme": "
|
|
148
|
+
"Choose color": "Accent color",
|
|
149
|
+
"Choose theme": "Theme (player background)",
|
|
150
150
|
"Podcast no visible": "Podcast not visible",
|
|
151
151
|
"Display episodes": "Display episodes",
|
|
152
152
|
"Podcast published in future": "Podcast published in the future",
|
package/src/locale/es.ts
CHANGED
|
@@ -145,8 +145,8 @@ export default {
|
|
|
145
145
|
"Sort score": "Clasificación por pertinencia",
|
|
146
146
|
"Sort name": "Clasificación por título",
|
|
147
147
|
"Sort last": "Clasificación por fecha más reciente",
|
|
148
|
-
"Choose color": "
|
|
149
|
-
"Choose theme": "
|
|
148
|
+
"Choose color": "Color de acento",
|
|
149
|
+
"Choose theme": "Tema (fondo del jugador)",
|
|
150
150
|
"Podcast no visible": "Este pódcast no puede visualizarse",
|
|
151
151
|
"Display episodes": "Mostrar episodios",
|
|
152
152
|
"Podcast published in future": "Pódcast pendiente de publicación",
|
package/src/locale/fr.ts
CHANGED
|
@@ -146,8 +146,8 @@ export default {
|
|
|
146
146
|
"Sort score": "Pertinence",
|
|
147
147
|
"Sort name": "Alphabétique",
|
|
148
148
|
"Sort last": "Antéchronologique",
|
|
149
|
-
"Choose color": "Couleur",
|
|
150
|
-
"Choose theme": "Thème",
|
|
149
|
+
"Choose color": "Couleur d'accent",
|
|
150
|
+
"Choose theme": "Thème (fond du player)",
|
|
151
151
|
"Podcast no visible": "Épisode non visible actuellement",
|
|
152
152
|
"Display episodes": "Affichage des épisodes",
|
|
153
153
|
"Podcast publish in future": "Épisode publié dans le futur",
|
package/src/locale/it.ts
CHANGED
|
@@ -141,8 +141,8 @@ export default{
|
|
|
141
141
|
'Sort score': 'Suddiviso per grado di rilevanza',
|
|
142
142
|
'Sort name': 'Suddividi titolo',
|
|
143
143
|
'Sort last': 'Suddividi ultimo',
|
|
144
|
-
'Choose color': '
|
|
145
|
-
'Choose theme': '
|
|
144
|
+
'Choose color': 'Colore accento',
|
|
145
|
+
'Choose theme': 'Tema (sfondo del giocatore)',
|
|
146
146
|
'Podcast no visible': 'Podcast non visibile',
|
|
147
147
|
'Display episodes': 'Mostra episodi',
|
|
148
148
|
'Podcast published in future': 'Podcast pubblicato in futuro',
|
package/src/locale/sl.ts
CHANGED
|
@@ -142,8 +142,8 @@ export default {
|
|
|
142
142
|
"Sort score": "Razvrščeno po relevantnosti",
|
|
143
143
|
"Sort name": "Naslov",
|
|
144
144
|
"Sort last": "Zadnje",
|
|
145
|
-
"Choose color": "
|
|
146
|
-
"Choose theme": "
|
|
145
|
+
"Choose color": "Poudarjena barva",
|
|
146
|
+
"Choose theme": "Tema (ozadje igralca)",
|
|
147
147
|
"Podcast no visible": "Podkast je skrit",
|
|
148
148
|
"Display episodes": "Prikaži epizode",
|
|
149
149
|
"Podcast published in future": "Podkast bo objavljen v prihodnje",
|
package/src/router/router.ts
CHANGED
|
@@ -144,9 +144,13 @@ const routes: Array<RouteRecordRaw> = [
|
|
|
144
144
|
component: EmissionPage,
|
|
145
145
|
props: (route: RouteLocationNormalized) => ({
|
|
146
146
|
emissionId: parseInt(route.params.emissionId.toString(), 10),
|
|
147
|
+
pr: route.query.pr ? parseInt(route.query.pr.toString(), 10) : undefined,
|
|
148
|
+
ps: route.query.ps ? parseInt(route.query.ps.toString(), 10) : undefined,
|
|
149
|
+
routeQuery: route.query.q ?? "",
|
|
147
150
|
}),
|
|
148
151
|
meta:{
|
|
149
|
-
title: ""
|
|
152
|
+
title: "",
|
|
153
|
+
noScroll:true
|
|
150
154
|
}
|
|
151
155
|
},
|
|
152
156
|
{
|
|
@@ -177,9 +181,13 @@ const routes: Array<RouteRecordRaw> = [
|
|
|
177
181
|
component: ParticipantPage,
|
|
178
182
|
props: (route: RouteLocationNormalized) => ({
|
|
179
183
|
participantId: parseInt(route.params.participantId.toString(), 10),
|
|
184
|
+
pr: route.query.pr ? parseInt(route.query.pr.toString(), 10) : undefined,
|
|
185
|
+
ps: route.query.ps ? parseInt(route.query.ps.toString(), 10) : undefined,
|
|
186
|
+
routeQuery: route.query.q ?? "",
|
|
180
187
|
}),
|
|
181
188
|
meta:{
|
|
182
|
-
title: ""
|
|
189
|
+
title: "",
|
|
190
|
+
noScroll:true
|
|
183
191
|
}
|
|
184
192
|
},
|
|
185
193
|
{
|
|
@@ -266,9 +274,13 @@ const routes: Array<RouteRecordRaw> = [
|
|
|
266
274
|
component: PlaylistPage,
|
|
267
275
|
props: (route: RouteLocationNormalized) => ({
|
|
268
276
|
playlistId: parseInt(route.params.playlistId.toString(), 10),
|
|
277
|
+
pr: route.query.pr ? parseInt(route.query.pr.toString(), 10) : undefined,
|
|
278
|
+
ps: route.query.ps ? parseInt(route.query.ps.toString(), 10) : undefined,
|
|
279
|
+
routeQuery: route.query.q ?? "",
|
|
269
280
|
}),
|
|
270
281
|
meta:{
|
|
271
|
-
title: ""
|
|
282
|
+
title: "",
|
|
283
|
+
noScroll:true
|
|
272
284
|
}
|
|
273
285
|
},
|
|
274
286
|
//Fake route to avoid errors
|
|
@@ -321,7 +333,8 @@ const routes: Array<RouteRecordRaw> = [
|
|
|
321
333
|
const router = createRouter({
|
|
322
334
|
history: createWebHistory(),
|
|
323
335
|
routes: routes,
|
|
324
|
-
scrollBehavior()
|
|
336
|
+
scrollBehavior(to, from) {
|
|
337
|
+
if (to.name === from.name && to.meta.noScroll) return false;
|
|
325
338
|
return { left: 0, top: 0 };
|
|
326
339
|
},
|
|
327
340
|
});
|
package/src/stores/AuthStore.ts
CHANGED
|
@@ -5,19 +5,19 @@ import { defineStore } from "pinia";
|
|
|
5
5
|
import { KeycloakInfo } from "@/stores/class/user/person";
|
|
6
6
|
import { VideoConfig } from "@/stores/class/config/videoConfig";
|
|
7
7
|
import classicApi from "../api/classicApi";
|
|
8
|
-
|
|
8
|
+
interface AuthParam{
|
|
9
|
+
accessToken?: string;
|
|
10
|
+
refreshToken?: string;
|
|
11
|
+
expiration?: Date|string;
|
|
12
|
+
clientId?: string;
|
|
13
|
+
}
|
|
9
14
|
interface AuthState {
|
|
10
15
|
authReload: number;
|
|
11
16
|
authName: string;
|
|
12
17
|
authOrgaId?: string;
|
|
13
18
|
authOrgaName?: string;
|
|
14
19
|
authRole: Array<string>;
|
|
15
|
-
authParam:
|
|
16
|
-
accessToken?: string;
|
|
17
|
-
refreshToken?: string;
|
|
18
|
-
expiration?: Date;
|
|
19
|
-
clientId?: string;
|
|
20
|
-
};
|
|
20
|
+
authParam:AuthParam;
|
|
21
21
|
authProfile?: Profile;
|
|
22
22
|
authOrganisation: Organisation;
|
|
23
23
|
authVideoConfig: VideoConfig;
|
|
@@ -115,25 +115,25 @@ export const useAuthStore = defineStore("AuthStore", {
|
|
|
115
115
|
},
|
|
116
116
|
},
|
|
117
117
|
actions: {
|
|
118
|
-
authUpdate(authentication:
|
|
118
|
+
authUpdate(authentication: {name?:string, organisationId?:string,organisationName?:string, role?:Array<string>}) {
|
|
119
119
|
this.authName = authentication.name ?? this.authName;
|
|
120
120
|
this.authOrgaId = authentication.organisationId ?? this.authOrgaId;
|
|
121
121
|
this.authOrgaName = authentication.organisationName ?? this.authOrgaName;
|
|
122
122
|
this.authRole = authentication.role ?? this.authRole;
|
|
123
123
|
},
|
|
124
|
-
authUpdateParam(oAuthParam:
|
|
124
|
+
authUpdateParam(oAuthParam: AuthParam) {
|
|
125
125
|
this.authParam = oAuthParam;
|
|
126
126
|
},
|
|
127
|
-
authUpdateProfile(profile:
|
|
127
|
+
authUpdateProfile(profile: Profile) {
|
|
128
128
|
this.authProfile = profile;
|
|
129
129
|
this.authName = profile.firstname + " " + profile.lastname;
|
|
130
130
|
},
|
|
131
|
-
authUpdateOrganisation(organisation:
|
|
131
|
+
authUpdateOrganisation(organisation: Organisation) {
|
|
132
132
|
this.authOrganisation = organisation;
|
|
133
133
|
const saveFetchStore = useSaveFetchStore();
|
|
134
134
|
saveFetchStore.forceUpdateAttributes(
|
|
135
135
|
organisation.id,
|
|
136
|
-
organisation.attributes
|
|
136
|
+
organisation.attributes??{}
|
|
137
137
|
);
|
|
138
138
|
saveFetchStore.forceUpdateData(organisation.id, organisation);
|
|
139
139
|
},
|
|
@@ -52,7 +52,7 @@ export const useFilterStore = defineStore("FilterStore", {
|
|
|
52
52
|
this.filterRubrique = rubriqueFilter;
|
|
53
53
|
},
|
|
54
54
|
filterUpdateRubriqueDisplay(rubriques: Array<Rubrique>) {
|
|
55
|
-
this.filterRubriqueDisplay = rubriques;
|
|
55
|
+
this.filterRubriqueDisplay = rubriques.filter(rubrique=> rubrique);
|
|
56
56
|
},
|
|
57
57
|
filterUpdateMedia(filter: {
|
|
58
58
|
type?: string;
|
|
@@ -32,6 +32,7 @@ interface PlayerState {
|
|
|
32
32
|
playerChaptering?: Chaptering;
|
|
33
33
|
playerDelayStitching: number;
|
|
34
34
|
playerHlsUrl?: string;
|
|
35
|
+
playerHlsIdentifier?:string;
|
|
35
36
|
}
|
|
36
37
|
export const usePlayerStore = defineStore("PlayerStore", {
|
|
37
38
|
state: (): PlayerState => ({
|
|
@@ -49,6 +50,7 @@ export const usePlayerStore = defineStore("PlayerStore", {
|
|
|
49
50
|
playerVideo: false,
|
|
50
51
|
playerChaptering: undefined,
|
|
51
52
|
playerDelayStitching: 0,
|
|
53
|
+
playerHlsIdentifier: undefined,
|
|
52
54
|
}),
|
|
53
55
|
getters: {
|
|
54
56
|
playerChapteringPercent(): ChapteringPercent | undefined {
|
|
@@ -146,6 +148,7 @@ export const usePlayerStore = defineStore("PlayerStore", {
|
|
|
146
148
|
this.playerPodcast = undefined;
|
|
147
149
|
this.playerMedia = undefined;
|
|
148
150
|
this.playerLive = undefined;
|
|
151
|
+
this.playerHlsIdentifier = undefined;
|
|
149
152
|
this.playerRadio = undefined;
|
|
150
153
|
this.playerElapsed = 0;
|
|
151
154
|
this.playerVideo = false;
|
|
@@ -168,6 +171,7 @@ export const usePlayerStore = defineStore("PlayerStore", {
|
|
|
168
171
|
this.playerPodcast = undefined;
|
|
169
172
|
this.playerMedia = undefined;
|
|
170
173
|
this.playerLive = undefined;
|
|
174
|
+
this.playerHlsIdentifier = undefined;
|
|
171
175
|
this.playerRadio = undefined;
|
|
172
176
|
this.playerVideo = isVideo;
|
|
173
177
|
this.playerElapsed = 0;
|
|
@@ -177,6 +181,7 @@ export const usePlayerStore = defineStore("PlayerStore", {
|
|
|
177
181
|
(!param.podcastId || param.processingStatus !== "READY")
|
|
178
182
|
) {
|
|
179
183
|
this.playerLive = param;
|
|
184
|
+
this.playerHlsIdentifier = param.hlsIdentifier;
|
|
180
185
|
this.playerCurrentChange = null;
|
|
181
186
|
return;
|
|
182
187
|
}
|
package/src/stores/VastStore.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { defineStore } from "pinia";
|
|
|
2
2
|
import { AdPosition } from "./class/adserver/adPosition";
|
|
3
3
|
|
|
4
4
|
interface VastState {
|
|
5
|
-
currentAd:
|
|
5
|
+
currentAd: google.ima.Ad|undefined;
|
|
6
6
|
isAdPlaying: boolean;
|
|
7
7
|
isAdPaused: boolean;
|
|
8
8
|
isAdSkippable: boolean;
|
|
@@ -79,7 +79,7 @@ export const useVastStore = defineStore("VastStore", {
|
|
|
79
79
|
) {
|
|
80
80
|
this.adPositionsPodcasts[podcastId] = adPositions;
|
|
81
81
|
},
|
|
82
|
-
updateCurrentAd(currentAd:
|
|
82
|
+
updateCurrentAd(currentAd: google.ima.Ad) {
|
|
83
83
|
this.currentAd = currentAd;
|
|
84
84
|
this.isAdSkipped = false;
|
|
85
85
|
},
|