@saooti/octopus-sdk 41.0.3-SNAPSHOT → 41.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/index.ts +2 -1
- package/package.json +3 -1
- package/src/App.vue +3 -7
- package/src/components/composable/player/usePlayerLive.ts +1 -1
- 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/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/PodcastModuleBox.vue +1 -1
- package/src/components/display/sharing/SharePlayerTypes.vue +1 -1
- package/src/components/form/ClassicInputText.vue +4 -1
- 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 +1 -20
- package/src/components/misc/TopBar.vue +4 -11
- 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 +2 -1
- package/src/helper/loadScript.ts +4 -4
- package/src/router/router.ts +17 -4
- package/src/stores/AuthStore.ts +12 -12
- package/src/stores/FilterStore.ts +1 -1
- package/src/stores/VastStore.ts +2 -2
- package/src/style/_variables.scss +3 -0
- package/src/style/general.scss +5 -0
|
@@ -137,7 +137,7 @@ onMounted(()=>{
|
|
|
137
137
|
function isNumeric(value: string): boolean {
|
|
138
138
|
return /^-?\d+$/.test(value);
|
|
139
139
|
}
|
|
140
|
-
function selectChange($event:
|
|
140
|
+
function selectChange($event: Event) {
|
|
141
141
|
const val = $event.target.value;
|
|
142
142
|
if (!val) {
|
|
143
143
|
return;
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
>{{ label }}
|
|
13
13
|
<AsteriskIcon v-if="displayRequired" :size="10" class="ms-1 mb-2" :title="t('Mandatory input')"/>
|
|
14
14
|
</component>
|
|
15
|
+
<slot name="afterTitle"/>
|
|
15
16
|
<template v-if="popover">
|
|
16
17
|
<button
|
|
17
18
|
:id="'popover' + inputId"
|
|
@@ -31,7 +32,9 @@
|
|
|
31
32
|
<!-- eslint-enable -->
|
|
32
33
|
</ClassicPopover>
|
|
33
34
|
</template>
|
|
35
|
+
<slot name="afterHelp"/>
|
|
34
36
|
</div>
|
|
37
|
+
<slot name="betweenTitleInput"/>
|
|
35
38
|
<input
|
|
36
39
|
v-if="!isWysiwyg && !isTextarea"
|
|
37
40
|
v-show="showField"
|
|
@@ -216,7 +219,7 @@ watch(textValue, () => {
|
|
|
216
219
|
});
|
|
217
220
|
watch(()=>props.textInit, () => {
|
|
218
221
|
if (props.textInit !== textValue.value) {
|
|
219
|
-
|
|
222
|
+
textValue.value = props.textInit;
|
|
220
223
|
}
|
|
221
224
|
});
|
|
222
225
|
|
|
@@ -5,13 +5,33 @@
|
|
|
5
5
|
'multiselect-no-deselect': noDeselect,
|
|
6
6
|
'form-margin': displayLabel,
|
|
7
7
|
}"
|
|
8
|
-
:style="{ width: width }"
|
|
8
|
+
:style="{ width: width, height: height }"
|
|
9
9
|
>
|
|
10
|
-
<
|
|
11
|
-
label
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
<div class="d-flex align-items-center">
|
|
11
|
+
<label :class="displayLabel ? '' : 'd-none'" :for="id" class="form-label">{{
|
|
12
|
+
label
|
|
13
|
+
}}
|
|
14
|
+
<AsteriskIcon v-if="displayRequired" :size="10" class="ms-1 mb-2" :title="t('Mandatory input')"/>
|
|
15
|
+
</label>
|
|
16
|
+
<template v-if="popover">
|
|
17
|
+
<button
|
|
18
|
+
:id="'popover' + id"
|
|
19
|
+
:title="t('Help')"
|
|
20
|
+
class="btn-transparent"
|
|
21
|
+
>
|
|
22
|
+
<HelpCircleIcon :size="30" />
|
|
23
|
+
</button>
|
|
24
|
+
<ClassicPopover
|
|
25
|
+
:target="'popover' + id"
|
|
26
|
+
popover-class="popover-z-index"
|
|
27
|
+
:relative-class="popoverRelativeClass"
|
|
28
|
+
>
|
|
29
|
+
<!-- eslint-disable vue/no-v-html -->
|
|
30
|
+
<div v-html="popover" />
|
|
31
|
+
<!-- eslint-enable -->
|
|
32
|
+
</ClassicPopover>
|
|
33
|
+
</template>
|
|
34
|
+
</div>
|
|
15
35
|
<vSelect
|
|
16
36
|
v-model="optionSelected"
|
|
17
37
|
:input-id="id"
|
|
@@ -28,6 +48,7 @@
|
|
|
28
48
|
"
|
|
29
49
|
:filter="fakeSearch"
|
|
30
50
|
:selectable="() => !maxOptionsSelected"
|
|
51
|
+
:style="{height: height }"
|
|
31
52
|
:class="{ 'border border-danger': textDanger?.length }"
|
|
32
53
|
@open="onSearch"
|
|
33
54
|
@search="onSearch"
|
|
@@ -76,12 +97,15 @@
|
|
|
76
97
|
</template>
|
|
77
98
|
|
|
78
99
|
<script setup lang="ts">
|
|
79
|
-
import { computed, ref, Ref, watch } from "vue";
|
|
100
|
+
import { computed, defineAsyncComponent, ref, Ref, watch } from "vue";
|
|
80
101
|
import { useI18n } from "vue-i18n";
|
|
81
102
|
import AsteriskIcon from "vue-material-design-icons/Asterisk.vue";
|
|
82
103
|
import ChevronDownIcon from "vue-material-design-icons/ChevronDown.vue";
|
|
83
104
|
import vSelect from "vue-select";
|
|
84
|
-
|
|
105
|
+
import HelpCircleIcon from "vue-material-design-icons/HelpCircle.vue";
|
|
106
|
+
const ClassicPopover = defineAsyncComponent(
|
|
107
|
+
() => import("../misc/ClassicPopover.vue"),
|
|
108
|
+
);
|
|
85
109
|
|
|
86
110
|
//Props
|
|
87
111
|
const props = defineProps({
|
|
@@ -93,6 +117,7 @@ const props = defineProps({
|
|
|
93
117
|
multiple: { default: false, type: Boolean },
|
|
94
118
|
isDisabled: { default: false, type: Boolean },
|
|
95
119
|
width: { default: "100%", type: String },
|
|
120
|
+
height: { default: undefined, type: String },
|
|
96
121
|
maxElement: { default: 50, type: Number },
|
|
97
122
|
minSearchLength: { default: 3, type: Number },
|
|
98
123
|
optionChosen: { default: undefined, type: Object as () => unknown },
|
|
@@ -104,6 +129,8 @@ const props = defineProps({
|
|
|
104
129
|
allowEmpty: { default: true, type: Boolean },
|
|
105
130
|
textDanger :{ default: undefined, type: String },
|
|
106
131
|
displayRequired: { default: false, type: Boolean },
|
|
132
|
+
popover: { default: undefined, type: String },
|
|
133
|
+
popoverRelativeClass: { default: undefined, type: String },
|
|
107
134
|
})
|
|
108
135
|
|
|
109
136
|
//Emits
|
|
@@ -209,6 +236,7 @@ defineExpose({
|
|
|
209
236
|
|
|
210
237
|
.vs__dropdown-toggle {
|
|
211
238
|
padding: 0;
|
|
239
|
+
height: 100%;
|
|
212
240
|
}
|
|
213
241
|
|
|
214
242
|
.vs__search:focus {
|
|
@@ -20,11 +20,11 @@
|
|
|
20
20
|
class="img-accordion"
|
|
21
21
|
:src="imageUrl"
|
|
22
22
|
aria-hidden="true"
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
alt=""
|
|
25
24
|
/>
|
|
26
|
-
<span
|
|
27
|
-
<
|
|
25
|
+
<span>{{ title }}</span>
|
|
26
|
+
<slot name="afterTitle"/>
|
|
27
|
+
<ChevronDownIcon class="ms-auto" :class="{ 'arrow-transform': isOpen }" />
|
|
28
28
|
</button>
|
|
29
29
|
<div v-show="isOpen" class="body p-2">
|
|
30
30
|
<slot />
|
|
@@ -72,7 +72,7 @@ const router= useRouter();
|
|
|
72
72
|
const popoverId = computed(() => "popover" + props.target);
|
|
73
73
|
const positionInlineStyle = computed(() => `left: ${posX.value}px; top: ${posY.value}px;max-height:${maxHeight.value}`);
|
|
74
74
|
const displayPopover = computed(() => show.value && !props.disable);
|
|
75
|
-
const isTopLayerPopover = computed(() => (props.isTopLayer || "octopus-modal"===props.relativeClass) && HTMLElement.prototype
|
|
75
|
+
const isTopLayerPopover = computed(() => (props.isTopLayer || "octopus-modal"===props.relativeClass) && Object.hasOwn(HTMLElement.prototype, "popover"));
|
|
76
76
|
|
|
77
77
|
|
|
78
78
|
//Watch
|
|
@@ -19,10 +19,7 @@
|
|
|
19
19
|
>
|
|
20
20
|
<router-link
|
|
21
21
|
class="link-hover special-select-align-magic-trick"
|
|
22
|
-
:to="
|
|
23
|
-
name: link.routeName,
|
|
24
|
-
query: getQueriesRouter(link.routeName),
|
|
25
|
-
}"
|
|
22
|
+
:to="link.routeName"
|
|
26
23
|
>
|
|
27
24
|
{{ link.title }}
|
|
28
25
|
</router-link>
|
|
@@ -77,7 +74,6 @@
|
|
|
77
74
|
|
|
78
75
|
<script setup lang="ts">
|
|
79
76
|
import cookiesHelper from "../../helper/cookiesHelper";
|
|
80
|
-
import { useRubriquesFilterComputed } from "../composable/route/useRubriquesFilterComputed";
|
|
81
77
|
import ClassicSelect from "../form/ClassicSelect.vue";
|
|
82
78
|
import AcpmImage from "./AcpmImage.vue";
|
|
83
79
|
import { state } from "../../stores/ParamSdkStore";
|
|
@@ -106,7 +102,6 @@ const reset = ref(false);
|
|
|
106
102
|
const organisationId: Ref<string | undefined> = ref(undefined);
|
|
107
103
|
|
|
108
104
|
//Composables
|
|
109
|
-
const { rubriqueQueryParam } = useRubriquesFilterComputed();
|
|
110
105
|
const generalStore = useGeneralStore();
|
|
111
106
|
const filterStore = useFilterStore();
|
|
112
107
|
const authStore = useAuthStore();
|
|
@@ -143,20 +138,6 @@ watch(()=>filterStore.filterOrgaId, () => {
|
|
|
143
138
|
|
|
144
139
|
|
|
145
140
|
//Methods
|
|
146
|
-
function getQueriesRouter(routeName: string) {
|
|
147
|
-
if (
|
|
148
|
-
"podcasts" !== routeName &&
|
|
149
|
-
"emissions" !== routeName &&
|
|
150
|
-
"home" !== routeName
|
|
151
|
-
) {
|
|
152
|
-
return { productor: filterStore.filterOrgaId };
|
|
153
|
-
}
|
|
154
|
-
return {
|
|
155
|
-
productor: filterStore.filterOrgaId,
|
|
156
|
-
iabId: filterStore.filterIab?.id,
|
|
157
|
-
rubriquesId: rubriqueQueryParam.value,
|
|
158
|
-
};
|
|
159
|
-
}
|
|
160
141
|
function changeLanguage(): void {
|
|
161
142
|
cookiesHelper.setCookie("octopus-language", language.value);
|
|
162
143
|
loadLocaleMessages(
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
role="banner"
|
|
4
4
|
class="header-saooti-play"
|
|
5
5
|
:style="headerBackgroundImage"
|
|
6
|
-
:class="[generalStore.contentToDisplay ? 'header-img-bg':'
|
|
6
|
+
:class="[generalStore.contentToDisplay ? 'header-img-bg':'bg-gradient', scrolled? 'scrolled':'', needToBlur ? 'header-force-blur':'']"
|
|
7
7
|
>
|
|
8
8
|
<TopBarMainContent
|
|
9
9
|
:is-phone="isPhone"
|
|
@@ -93,7 +93,8 @@ watch(()=>generalStore.contentToDisplay, async () => {
|
|
|
93
93
|
needToBlur.value = false;
|
|
94
94
|
return;
|
|
95
95
|
}
|
|
96
|
-
const
|
|
96
|
+
const widthAsked = window.innerWidth > 960 ? "1600":"1000";
|
|
97
|
+
const proxyUrl = useProxyImageUrl(generalStore.contentToDisplay.imageUrl,widthAsked, undefined, true);
|
|
97
98
|
try {
|
|
98
99
|
const result = await axios.get(proxyUrl);
|
|
99
100
|
headerBackgroundImage.value = `background-image: url('${result.data}');`;
|
|
@@ -159,15 +160,7 @@ function handleScroll(): void {
|
|
|
159
160
|
background-repeat: no-repeat;
|
|
160
161
|
background-size: cover;
|
|
161
162
|
}
|
|
162
|
-
&.
|
|
163
|
-
background: var(--octopus-primary);
|
|
164
|
-
background: linear-gradient(
|
|
165
|
-
90deg,
|
|
166
|
-
var(--octopus-primary) 0%,
|
|
167
|
-
var(--octopus-tertiary) 100%
|
|
168
|
-
);
|
|
169
|
-
}
|
|
170
|
-
&.header-color-bg, &.scrolled{
|
|
163
|
+
&.bg-gradient, &.scrolled{
|
|
171
164
|
box-shadow: 0 2px 15px 5px var(--octopus-shadow) !important;
|
|
172
165
|
}
|
|
173
166
|
}
|
|
@@ -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,8 @@ async function fetchConferenceStatus() {
|
|
|
255
255
|
api: 9,
|
|
256
256
|
path: "conference/info/" + podcast.value?.conferenceId,
|
|
257
257
|
});
|
|
258
|
-
|
|
258
|
+
|
|
259
|
+
fetchConference.value = {...fetchConference.value, ...data};
|
|
259
260
|
} catch {
|
|
260
261
|
//Do nothing
|
|
261
262
|
}
|
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/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;
|
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
|
},
|
|
@@ -27,6 +27,9 @@
|
|
|
27
27
|
--octopus-background-transparent: oklch(from var(--octopus-background) l c h / 40%);
|
|
28
28
|
--octopus-tertiary-really-transparent: oklch(from var(--octopus-tertiary) l c h / 30%);
|
|
29
29
|
|
|
30
|
+
//Gradient
|
|
31
|
+
--octopus-gradient : linear-gradient(90deg,var(--octopus-primary) 0%, var(--octopus-tertiary) 100%);
|
|
32
|
+
|
|
30
33
|
// Size
|
|
31
34
|
--octopus-image-size: 12.5rem;
|
|
32
35
|
--octopus-podcast-size: 13.5rem;
|
package/src/style/general.scss
CHANGED
|
@@ -114,6 +114,11 @@ main, #app{
|
|
|
114
114
|
background: var(--octopus-complementary-color) !important;
|
|
115
115
|
}
|
|
116
116
|
|
|
117
|
+
.bg-gradient{
|
|
118
|
+
background: var(--octopus-primary);
|
|
119
|
+
background:var(--octopus-gradient);
|
|
120
|
+
}
|
|
121
|
+
|
|
117
122
|
.text-blue-octopus{
|
|
118
123
|
color: var(--octopus-tertiary) !important
|
|
119
124
|
}
|