@saooti/octopus-sdk 41.6.1 → 41.7.1
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/.serena/project.yml +9 -0
- package/CHANGELOG.md +29 -0
- package/index.ts +1 -0
- package/package.json +1 -1
- package/src/api/podcastApi.ts +2 -6
- package/src/components/composable/player/usePlayerLive.ts +2 -6
- package/src/components/composable/player/usePlayerLogic.ts +18 -17
- package/src/components/composable/share/useSharePlatforms.ts +10 -5
- package/src/components/composable/useImageProxy.ts +4 -0
- package/src/components/display/filter/AdvancedSearch.vue +1 -1
- package/src/components/display/podcasts/PodcastList.vue +1 -1
- package/src/components/display/podcasts/PodcastPlayButton.vue +1 -1
- package/src/components/icons/RadioFranceIcon.vue +162 -0
- package/src/components/misc/ClassicAccordion.vue +18 -3
- package/src/components/misc/TopBar.vue +8 -3
- package/src/components/pages/SmartLinkPage.vue +21 -3
- package/src/locale/de.json +2 -1
- package/src/locale/en.json +2 -1
- package/src/locale/es.json +2 -1
- package/src/locale/fr.json +1 -0
- package/src/locale/it.json +2 -1
- package/src/locale/sl.json +2 -1
- package/src/router/utils.ts +3 -4
- package/src/stores/ParamSdkStore.ts +13 -0
- package/src/style/_variables.scss +4 -0
package/.serena/project.yml
CHANGED
|
@@ -120,3 +120,12 @@ symbol_info_budget:
|
|
|
120
120
|
# Note: the backend is fixed at startup. If a project with a different backend
|
|
121
121
|
# is activated post-init, an error will be returned.
|
|
122
122
|
language_backend:
|
|
123
|
+
|
|
124
|
+
# list of regex patterns which, when matched, mark a memory entry as read‑only.
|
|
125
|
+
# Extends the list from the global configuration, merging the two lists.
|
|
126
|
+
read_only_memory_patterns: []
|
|
127
|
+
|
|
128
|
+
# line ending convention to use when writing source files.
|
|
129
|
+
# Possible values: unset (use global setting), "lf", "crlf", or "native" (platform default)
|
|
130
|
+
# This does not affect Serena's own files (e.g. memories and configuration files), which always use native line endings.
|
|
131
|
+
line_ending:
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,34 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
|
+
## 41.7.1 (En cours)
|
|
4
|
+
|
|
5
|
+
**Fix**
|
|
6
|
+
|
|
7
|
+
- Correction lecture épisodes sur organisations sécurisées
|
|
8
|
+
- Correction prise en compte paramètres SDK smartlink
|
|
9
|
+
|
|
10
|
+
## 41.7.0 (09/03/2026)
|
|
11
|
+
|
|
12
|
+
**Features**
|
|
13
|
+
|
|
14
|
+
- **14298** - Les épisodes à valider sont visibles par défaut quand
|
|
15
|
+
l'utilisateur a les droits nécessaires
|
|
16
|
+
- **14299** - Ajout de la plateforme 'Radio France'
|
|
17
|
+
- **14301** - Ajout option `smartLink.showOnlyFirstParagraphInDescription` pour
|
|
18
|
+
tronquer la description à un paragraphe dans le SmartLink
|
|
19
|
+
|
|
20
|
+
**Fix**
|
|
21
|
+
|
|
22
|
+
- **14235** - Correction affichage images avec caractères spéciaux dans leur nom
|
|
23
|
+
- Correctifs visuels smartlink :
|
|
24
|
+
- Force le style du titre pour éviter overrides involontaires
|
|
25
|
+
- Amélioration de l'affichage si le contenu est long
|
|
26
|
+
- Ajout du paramètre de recherche `validity`/`vl` dans les props de route
|
|
27
|
+
|
|
28
|
+
**Misc**
|
|
29
|
+
|
|
30
|
+
- Mise à jour des dépéndances
|
|
31
|
+
|
|
3
32
|
## 41.6.1 (04/03/2026)
|
|
4
33
|
|
|
5
34
|
**Fix**
|
package/index.ts
CHANGED
|
@@ -183,6 +183,7 @@ export const getPodcastAddictIcon = () => import("./src/components/icons/Podcast
|
|
|
183
183
|
export const getRadiolineIcon = () => import("./src/components/icons/RadiolineIcon.vue");
|
|
184
184
|
export const getTuninIcon = () => import("./src/components/icons/TuninIcon.vue");
|
|
185
185
|
export const getXIcon = () => import("./src/components/icons/XIcon.vue");
|
|
186
|
+
export const getRadioFranceIcon = () => import("./src/components/icons/RadioFranceIcon.vue");
|
|
186
187
|
|
|
187
188
|
// Podcastmaker
|
|
188
189
|
export const PodcastmakerHeader = defineAsyncComponent(() => import("./src/components/display/podcastmaker/PodcastmakerHeader.vue"));
|
package/package.json
CHANGED
package/src/api/podcastApi.ts
CHANGED
|
@@ -79,12 +79,8 @@ async function downloadRegister(podcastId: number, parameters?: Record<string,un
|
|
|
79
79
|
}>({
|
|
80
80
|
api: ModuleApi.DEFAULT,
|
|
81
81
|
path:"podcast/download/register/" + podcastId + ".mp3",
|
|
82
|
-
parameters
|
|
83
|
-
|
|
84
|
-
...parameters
|
|
85
|
-
},
|
|
86
|
-
headers: {'X-Extra-UA':'Saooti Player'},
|
|
87
|
-
isNotAuth:true
|
|
82
|
+
parameters,
|
|
83
|
+
headers: {'X-Extra-UA':'Saooti Player'}
|
|
88
84
|
});
|
|
89
85
|
}
|
|
90
86
|
|
|
@@ -62,14 +62,10 @@ export const usePlayerLive = (hlsReady: Ref<boolean>)=>{
|
|
|
62
62
|
async function playHls(): Promise<void> {
|
|
63
63
|
try {
|
|
64
64
|
if(null===audioElement.value){
|
|
65
|
-
audioElement.value = document.getElementById(
|
|
66
|
-
"audio-player",
|
|
67
|
-
) as HTMLAudioElement;
|
|
65
|
+
audioElement.value = document.getElementById("audio-player") as HTMLAudioElement;
|
|
68
66
|
}
|
|
69
67
|
if (null === audioElement.value || !playerStore.playerHlsUrl) {
|
|
70
|
-
setTimeout(
|
|
71
|
-
playHls();
|
|
72
|
-
}, 1000);
|
|
68
|
+
setTimeout(playHls, 1000);
|
|
73
69
|
return;
|
|
74
70
|
}
|
|
75
71
|
const ua = navigator.userAgent.toLowerCase();
|
|
@@ -9,9 +9,9 @@ import { useGeneralStore } from "../../../stores/GeneralStore";
|
|
|
9
9
|
import { useVastStore } from "../../../stores/VastStore";
|
|
10
10
|
import { state as sdkParams } from "../../../stores/ParamSdkStore";
|
|
11
11
|
import fetchHelper from "../../../helper/fetchHelper";
|
|
12
|
-
import classicApi from "../../../api/classicApi";
|
|
13
12
|
import dayjs from "dayjs";
|
|
14
13
|
import { FetchParam } from "@/stores/class/general/fetchParam";
|
|
14
|
+
import { podcastApi } from "../../../api/podcastApi";
|
|
15
15
|
|
|
16
16
|
export const usePlayerLogic = (forceHide: Ref<boolean, boolean>) => {
|
|
17
17
|
const hlsReady= ref(false);
|
|
@@ -45,15 +45,7 @@ export const usePlayerLogic = (forceHide: Ref<boolean, boolean>) => {
|
|
|
45
45
|
audioUrlToPlay.value = getAudioUrl();
|
|
46
46
|
return;
|
|
47
47
|
}
|
|
48
|
-
const response = await
|
|
49
|
-
location: string;
|
|
50
|
-
downloadId: number;
|
|
51
|
-
}>({
|
|
52
|
-
api:0,
|
|
53
|
-
path:"podcast/download/register/"+playerStore.playerPodcast.podcastId + ".mp3",
|
|
54
|
-
parameters:getAudioUrlParameters(),
|
|
55
|
-
headers: {'X-Extra-UA':'Saooti Player'}
|
|
56
|
-
});
|
|
48
|
+
const response = await podcastApi.downloadRegister(playerStore.playerPodcast.podcastId, getAudioUrlParameters());
|
|
57
49
|
setDownloadId(response.downloadId.toString());
|
|
58
50
|
audioUrlToPlay.value = response.location;
|
|
59
51
|
});
|
|
@@ -120,8 +112,11 @@ export const usePlayerLogic = (forceHide: Ref<boolean, boolean>) => {
|
|
|
120
112
|
}
|
|
121
113
|
}
|
|
122
114
|
|
|
123
|
-
function getAudioUrlParameters(): FetchParam {
|
|
124
|
-
if (!playerStore.playerPodcast)
|
|
115
|
+
function getAudioUrlParameters(addToken?: boolean): FetchParam {
|
|
116
|
+
if (!playerStore.playerPodcast) {
|
|
117
|
+
return {};
|
|
118
|
+
}
|
|
119
|
+
|
|
125
120
|
const parameters: FetchParam = {
|
|
126
121
|
origin: "octopus",
|
|
127
122
|
accepted: vastStore.useVastPlayerPodcast
|
|
@@ -133,10 +128,11 @@ export const usePlayerLogic = (forceHide: Ref<boolean, boolean>) => {
|
|
|
133
128
|
parameters.consent = generalStore.consentTcf;
|
|
134
129
|
}
|
|
135
130
|
if (
|
|
131
|
+
addToken &&
|
|
136
132
|
"SECURED" === playerStore.playerPodcast.organisation.privacy &&
|
|
137
133
|
authStore.authParam.accessToken
|
|
138
134
|
) {
|
|
139
|
-
parameters.access_token =authStore.authParam.accessToken;
|
|
135
|
+
parameters.access_token = authStore.authParam.accessToken;
|
|
140
136
|
}
|
|
141
137
|
return parameters;
|
|
142
138
|
}
|
|
@@ -145,14 +141,19 @@ export const usePlayerLogic = (forceHide: Ref<boolean, boolean>) => {
|
|
|
145
141
|
if (playerStore.playerMedia){
|
|
146
142
|
return playerStore.playerMedia.audioUrl ?? "";
|
|
147
143
|
}
|
|
148
|
-
if (!playerStore.playerPodcast || playerStore.playerVideo)
|
|
144
|
+
if (!playerStore.playerPodcast || playerStore.playerVideo) {
|
|
145
|
+
return "";
|
|
146
|
+
}
|
|
149
147
|
if (
|
|
150
148
|
!playerStore.playerPodcast.availability.visibility ||
|
|
151
149
|
"PROCESSING" === playerStore.playerPodcast.processingStatus
|
|
152
|
-
)
|
|
150
|
+
) {
|
|
153
151
|
return playerStore.playerPodcast.audioStorageUrl;
|
|
154
|
-
|
|
155
|
-
|
|
152
|
+
}
|
|
153
|
+
if (listenError.value) {
|
|
154
|
+
return playerStore.playerPodcast.audioStorageUrl;
|
|
155
|
+
}
|
|
156
|
+
return playerStore.playerPodcast.podcastId + ".mp3?"+fetchHelper.getUriSearchParams(getAudioUrlParameters(), true);
|
|
156
157
|
}
|
|
157
158
|
|
|
158
159
|
function reInitPlayer(force=false): void {
|
|
@@ -10,6 +10,7 @@ import ApplePodcastIcon from "../../icons/ApplePodcastIcon.vue";
|
|
|
10
10
|
import CastboxIcon from "../../icons/CastboxIcon.vue";
|
|
11
11
|
import PodcastRepublicIcon from "../../icons/PodcastRepublicIcon.vue";
|
|
12
12
|
import PodbeanIcon from "../../icons/PodbeanIcon.vue";
|
|
13
|
+
import RadioFranceIcon from "../../icons/RadioFranceIcon.vue";
|
|
13
14
|
import YoutubeIcon from "vue-material-design-icons/Youtube.vue";
|
|
14
15
|
import SpotifyIcon from "vue-material-design-icons/Spotify.vue";
|
|
15
16
|
import { Annotations } from "@/stores/class/general";
|
|
@@ -29,7 +30,8 @@ export enum SharePlatformName {
|
|
|
29
30
|
YOUTUBE = "youtube",
|
|
30
31
|
CASTBOX = "castbox",
|
|
31
32
|
PODBEAN = "podbean",
|
|
32
|
-
PODCAST_REPUBLIC = "podcastrepublic"
|
|
33
|
+
PODCAST_REPUBLIC = "podcastrepublic",
|
|
34
|
+
RADIO_FRANCE = "radiofrance"
|
|
33
35
|
}
|
|
34
36
|
|
|
35
37
|
export interface SharePlatform {
|
|
@@ -121,6 +123,11 @@ export const useSharePlatforms = () => {
|
|
|
121
123
|
icon: PodcastRepublicIcon,
|
|
122
124
|
title: "Podcast Republic",
|
|
123
125
|
color: "#5c85dd",
|
|
126
|
+
}, {
|
|
127
|
+
name: SharePlatformName.RADIO_FRANCE,
|
|
128
|
+
icon: RadioFranceIcon,
|
|
129
|
+
title: "Radio France",
|
|
130
|
+
color: "#a90041",
|
|
124
131
|
}];
|
|
125
132
|
});
|
|
126
133
|
|
|
@@ -139,7 +146,7 @@ export const useSharePlatforms = () => {
|
|
|
139
146
|
* @param annotations The annotations of the element for which to get the
|
|
140
147
|
platforms links
|
|
141
148
|
*/
|
|
142
|
-
function getPlatformsWithLinks(annotations:Annotations|undefined): Array<SharePlatformUrl> {
|
|
149
|
+
function getPlatformsWithLinks(annotations: Annotations|undefined): Array<SharePlatformUrl> {
|
|
143
150
|
const ary: Array<SharePlatformUrl> = [];
|
|
144
151
|
platforms.value.forEach(p => {
|
|
145
152
|
const url = getUrl(p.name, annotations);
|
|
@@ -154,9 +161,7 @@ export const useSharePlatforms = () => {
|
|
|
154
161
|
}
|
|
155
162
|
|
|
156
163
|
function getUrl(sub: string, annotations: Annotations|undefined): string | undefined {
|
|
157
|
-
return externaliseLinks(
|
|
158
|
-
annotations?.[sub] as string | undefined,
|
|
159
|
-
);
|
|
164
|
+
return externaliseLinks(annotations?.[sub] as string | undefined);
|
|
160
165
|
}
|
|
161
166
|
|
|
162
167
|
function externaliseLinks(link?: string): string | undefined {
|
|
@@ -7,6 +7,10 @@ export const useImageProxy = ()=>{
|
|
|
7
7
|
if (!url) {
|
|
8
8
|
return "";
|
|
9
9
|
}
|
|
10
|
+
|
|
11
|
+
// Encode URL to prevent some display issues
|
|
12
|
+
url = encodeURI(url);
|
|
13
|
+
|
|
10
14
|
if (apiStore.imageUrl && url.includes("http")) {
|
|
11
15
|
const size = height ? "height=" + height : "width=" + width;
|
|
12
16
|
const encode = btoa(url).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
|
|
@@ -183,7 +183,7 @@ const classicPodcastPlay = computed(() => {
|
|
|
183
183
|
});
|
|
184
184
|
|
|
185
185
|
const displayBanner = computed(() => {
|
|
186
|
-
return !(
|
|
186
|
+
return props.justButtons !== true && !(
|
|
187
187
|
isLiveValidAndVisible.value &&
|
|
188
188
|
!isLiveToBeRecorded.value &&
|
|
189
189
|
ProcessingStatus.Planned !== props.podcast.processingStatus
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<span
|
|
3
|
+
:aria-hidden="!title"
|
|
4
|
+
class="material-design-icon"
|
|
5
|
+
:title="title"
|
|
6
|
+
>
|
|
7
|
+
<svg
|
|
8
|
+
:width="size"
|
|
9
|
+
:height="size"
|
|
10
|
+
viewBox="0 0 58 58"
|
|
11
|
+
fill="none"
|
|
12
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
13
|
+
>
|
|
14
|
+
<path
|
|
15
|
+
fill-rule="evenodd"
|
|
16
|
+
clip-rule="evenodd"
|
|
17
|
+
d="M37.0892 33.8774C37.0892 35.7523 36.5961 37.5174 35.7265 39.0643H50.1862C50.5743 37.3938 50.7809 35.6586 50.7809 33.8774C50.7809 23.6473 44.0269 14.9123 34.5121 11.4499V0.596397H21.9553V23.3202C23.0498 22.9984 24.2131 22.8248 25.419 22.8248C31.8644 22.8248 37.0892 27.7733 37.0892 33.8774Z"
|
|
18
|
+
fill="url(#paint0_linear_75_103)"
|
|
19
|
+
/>
|
|
20
|
+
<path
|
|
21
|
+
fill-rule="evenodd"
|
|
22
|
+
clip-rule="evenodd"
|
|
23
|
+
d="M29.5724 44.3362C28.2958 44.7861 26.9145 45.0321 25.4717 45.0321C18.9987 45.0321 13.7507 40.0835 13.7507 33.9785C13.7507 32.2762 14.1593 30.664 14.8881 29.2236H0.500687C0.173332 30.7608 0 32.3507 0 33.9785C0 47.2455 11.404 58 25.4717 58C26.8678 58 28.2374 57.8924 29.5724 57.6889V44.3362Z"
|
|
24
|
+
fill="url(#paint1_linear_75_103)"
|
|
25
|
+
/>
|
|
26
|
+
<path
|
|
27
|
+
fill-rule="evenodd"
|
|
28
|
+
clip-rule="evenodd"
|
|
29
|
+
d="M37.1502 33.909C37.1502 35.7895 36.6555 37.5598 35.7831 39.1113H50.2891C50.6784 37.4358 50.8857 35.6954 50.8857 33.909C50.8857 23.6484 44.1101 14.8873 34.5649 11.4146V0.528656H21.9678V23.3202C23.0658 22.9975 24.2329 22.8234 25.4426 22.8234C31.9087 22.8234 37.1502 27.7867 37.1502 33.909Z"
|
|
30
|
+
fill="url(#paint2_linear_75_103)"
|
|
31
|
+
/>
|
|
32
|
+
<path
|
|
33
|
+
fill-rule="evenodd"
|
|
34
|
+
clip-rule="evenodd"
|
|
35
|
+
d="M29.5386 44.2967C28.2634 44.7479 26.8837 44.9945 25.4426 44.9945C18.977 44.9945 13.735 40.0316 13.735 33.9089C13.735 32.2017 14.1431 30.5848 14.8711 29.1403H0.500114C0.173133 30.682 0 32.2764 0 33.9089C0 47.2143 11.3909 58 25.4426 58C26.8371 58 28.2051 57.8921 29.5386 57.688V44.2967Z"
|
|
36
|
+
fill="url(#paint3_linear_75_103)"
|
|
37
|
+
/>
|
|
38
|
+
<path
|
|
39
|
+
fill-rule="evenodd"
|
|
40
|
+
clip-rule="evenodd"
|
|
41
|
+
d="M60.6053 19.1855C60.6053 16.4375 60.6053 14.0587 60.5519 11.7338H68.0196C68.1254 12.3676 68.2313 15.0632 68.2313 16.5431C69.4495 13.4249 72.3623 11.1523 77.0225 11.0995V18.3403C71.5145 18.1814 68.2313 19.6613 68.2313 27.1663V39.1113H60.6053V19.1855Z"
|
|
42
|
+
fill="url(#paint4_linear_75_103)"
|
|
43
|
+
/>
|
|
44
|
+
<path
|
|
45
|
+
fill-rule="evenodd"
|
|
46
|
+
clip-rule="evenodd"
|
|
47
|
+
d="M115.556 33.6677C120.746 33.6677 121.381 29.3333 121.381 25.4223C121.381 20.7186 120.693 17.1774 115.714 17.1774C111.743 17.1774 109.73 20.2956 109.73 25.4751C109.73 30.8136 111.796 33.6677 115.556 33.6677ZM128.637 0.528656V31.6059C128.637 34.0902 128.637 36.627 128.69 39.1113H121.434C121.275 38.2657 121.116 36.8915 121.064 36.2572C119.739 38.4242 117.356 39.7456 113.278 39.7456C106.34 39.7456 101.945 34.1963 101.945 25.6341C101.945 17.2302 106.606 11.0995 114.39 11.0995C118.362 11.0995 120.481 12.5261 121.064 13.7418V0.528656H128.637Z"
|
|
48
|
+
fill="url(#paint5_linear_75_103)"
|
|
49
|
+
/>
|
|
50
|
+
<path
|
|
51
|
+
fill-rule="evenodd"
|
|
52
|
+
clip-rule="evenodd"
|
|
53
|
+
d="M131.681 39.1113H139.308V11.7338H131.681V39.1113ZM131.681 7.2937H139.308V0.528656H131.681V7.2937Z"
|
|
54
|
+
fill="url(#paint6_linear_75_103)"
|
|
55
|
+
/>
|
|
56
|
+
<path
|
|
57
|
+
fill-rule="evenodd"
|
|
58
|
+
clip-rule="evenodd"
|
|
59
|
+
d="M148.596 25.4223C148.596 30.7079 150.874 33.8257 154.528 33.8257C158.288 33.8257 160.353 30.7079 160.353 25.4751C160.353 19.7669 158.235 17.0718 154.422 17.0718C150.926 17.0718 148.596 19.6613 148.596 25.4223ZM168.032 25.3695C168.032 33.6677 163.054 39.7456 154.369 39.7456C145.895 39.7456 140.917 33.6677 140.917 25.528C140.917 17.0718 146.054 11.0995 154.739 11.0995C162.789 11.0995 168.032 16.8076 168.032 25.3695Z"
|
|
60
|
+
fill="url(#paint7_linear_75_103)"
|
|
61
|
+
/>
|
|
62
|
+
<path
|
|
63
|
+
fill-rule="evenodd"
|
|
64
|
+
clip-rule="evenodd"
|
|
65
|
+
d="M170.69 39.1113V17.4415H168.46V11.7338H170.69V9.35504C170.69 3.70012 173.497 0 179.429 0C180.647 0 182.235 0.105641 182.924 0.31737V6.28966C182.5 6.23684 181.917 6.18358 181.335 6.18358C179.111 6.18358 178.263 6.97678 178.263 9.93651V11.7338H182.133V17.4415H178.263V39.1113H170.69Z"
|
|
66
|
+
fill="url(#paint8_linear_75_103)"
|
|
67
|
+
/>
|
|
68
|
+
<path
|
|
69
|
+
fill-rule="evenodd"
|
|
70
|
+
clip-rule="evenodd"
|
|
71
|
+
d="M183.316 19.1855C183.316 16.4375 183.316 14.0587 183.263 11.7338H190.73C190.836 12.3676 190.942 15.0632 190.942 16.5431C192.16 13.4249 195.073 11.1523 199.733 11.0995V18.3403C194.226 18.1814 190.942 19.6613 190.942 27.1663V39.1113H183.316V19.1855Z"
|
|
72
|
+
fill="url(#paint9_linear_75_103)"
|
|
73
|
+
/>
|
|
74
|
+
<path
|
|
75
|
+
fill-rule="evenodd"
|
|
76
|
+
clip-rule="evenodd"
|
|
77
|
+
d="M226.106 11.7338H233.468C233.627 12.4732 233.732 14.3761 233.785 15.2217C234.686 13.5305 236.91 11.0995 241.729 11.0995C247.237 11.0995 250.785 14.8519 250.785 21.7226V39.1113H243.213V22.5682C243.213 19.45 242.207 17.2302 238.817 17.2302C235.586 17.2302 233.785 19.0274 233.785 23.8896V39.1113H226.159V18.6573C226.159 16.3314 226.159 13.7946 226.106 11.7338Z"
|
|
78
|
+
fill="url(#paint10_linear_75_103)"
|
|
79
|
+
/>
|
|
80
|
+
<path
|
|
81
|
+
fill-rule="evenodd"
|
|
82
|
+
clip-rule="evenodd"
|
|
83
|
+
d="M277.529 30.2849C276.63 34.8306 273.398 39.7456 265.243 39.7456C256.717 39.7456 252.321 33.879 252.321 25.634C252.321 17.5471 257.246 11.0995 265.614 11.0995C274.829 11.0995 277.424 17.7589 277.529 20.8242H270.168C269.692 18.6044 268.421 17.0718 265.455 17.0718C261.96 17.0718 260 20.0843 260 25.3695C260 31.2361 262.118 33.879 265.402 33.879C268.05 33.879 269.427 32.3463 270.115 30.2849H277.529Z"
|
|
84
|
+
fill="url(#paint11_linear_75_103)"
|
|
85
|
+
/>
|
|
86
|
+
<path d="M296.374 22.4102C296.321 19.2387 295.05 16.5431 291.342 16.5431C287.742 16.5431 286.258 19.0275 285.941 22.4102H296.374ZM285.782 27.0606C285.782 30.4962 287.529 33.8257 291.29 33.8257C294.467 33.8257 295.368 32.5576 296.109 30.9192H303.682C302.729 34.2492 299.711 39.7456 291.131 39.7456C282.075 39.7456 278.156 33.0334 278.156 25.8453C278.156 17.2302 282.552 11.0995 291.396 11.0995C300.77 11.0995 304 17.9173 304 24.7356C304 25.6869 304 26.2683 303.894 27.0606H285.782Z" fill="url(#paint12_linear_75_103)" />
|
|
87
|
+
<path
|
|
88
|
+
fill-rule="evenodd"
|
|
89
|
+
clip-rule="evenodd"
|
|
90
|
+
d="M92.9792 27.378C92.9792 30.9716 92.397 34.3543 87.5775 34.3543C84.8235 34.3543 83.6053 32.6632 83.6053 30.7079C83.6053 28.0651 85.3003 26.6381 89.9076 26.6381H92.9792V27.378ZM100.393 32.0294V20.5601C100.393 14.0064 96.3687 11.1523 89.0603 11.0995C81.5344 11.0995 78.3368 14.2638 77.4998 18.4379L84.5059 19.873C84.8235 17.8645 85.5649 16.5431 88.7428 16.5431C92.2907 16.5431 92.9792 18.446 92.9792 20.4012V22.0396H89.0603C81.0105 22.0396 76.0322 24.9469 76.0322 31.1833C76.0322 35.4116 78.7862 39.7456 85.4061 39.7456C90.2781 39.7456 92.1319 37.9484 93.1379 36.4161C93.1379 37.1032 93.2967 38.5827 93.5089 39.1113H100.764C100.606 38.477 100.393 34.6717 100.393 32.0294Z"
|
|
91
|
+
fill="url(#paint13_linear_75_103)"
|
|
92
|
+
/>
|
|
93
|
+
<path
|
|
94
|
+
fill-rule="evenodd"
|
|
95
|
+
clip-rule="evenodd"
|
|
96
|
+
d="M215.69 27.378C215.69 30.9716 215.108 34.3543 210.288 34.3543C207.534 34.3543 206.316 32.6632 206.316 30.7079C206.316 28.0651 208.01 26.6381 212.618 26.6381H215.69V27.378ZM223.104 32.0294V20.5601C223.104 14.0064 219.079 11.1523 211.771 11.0995C204.245 11.0995 201.047 14.2638 200.21 18.4379L207.217 19.873C207.534 17.8645 208.275 16.5431 211.453 16.5431C215.001 16.5431 215.69 18.446 215.69 20.4012V22.0396H211.771C203.721 22.0396 198.743 24.9469 198.743 31.1833C198.743 35.4116 201.497 39.7456 208.117 39.7456C212.989 39.7456 214.842 37.9484 215.849 36.4161C215.849 37.1032 216.007 38.5827 216.219 39.1113H223.475C223.316 38.477 223.104 34.6717 223.104 32.0294Z"
|
|
97
|
+
fill="url(#paint14_linear_75_103)"
|
|
98
|
+
/>
|
|
99
|
+
<defs>
|
|
100
|
+
<linearGradient
|
|
101
|
+
id="paint0_linear_75_103"
|
|
102
|
+
x1="37.483"
|
|
103
|
+
y1="3.20798"
|
|
104
|
+
x2="21.3118"
|
|
105
|
+
y2="32.4338"
|
|
106
|
+
gradientUnits="userSpaceOnUse"
|
|
107
|
+
>
|
|
108
|
+
<stop stop-color="#8D044F" />
|
|
109
|
+
<stop offset="0.278736" stop-color="#AC47B6" />
|
|
110
|
+
<stop offset="0.419307" stop-color="#986BAA" />
|
|
111
|
+
<stop offset="0.677775" stop-color="#FF6C5B" />
|
|
112
|
+
<stop offset="1" stop-color="#FD0323" />
|
|
113
|
+
</linearGradient>
|
|
114
|
+
<linearGradient
|
|
115
|
+
id="paint1_linear_75_103"
|
|
116
|
+
x1="8.26123"
|
|
117
|
+
y1="34.1806"
|
|
118
|
+
x2="25.2003"
|
|
119
|
+
y2="57.7245"
|
|
120
|
+
gradientUnits="userSpaceOnUse"
|
|
121
|
+
>
|
|
122
|
+
<stop stop-color="#B800C4" />
|
|
123
|
+
<stop offset="0.427705" stop-color="#E0008C" />
|
|
124
|
+
<stop offset="1" stop-color="#FF0101" />
|
|
125
|
+
</linearGradient>
|
|
126
|
+
<linearGradient
|
|
127
|
+
id="paint2_linear_75_103"
|
|
128
|
+
x1="37.5457"
|
|
129
|
+
y1="3.14803"
|
|
130
|
+
x2="21.3224"
|
|
131
|
+
y2="32.4618"
|
|
132
|
+
gradientUnits="userSpaceOnUse"
|
|
133
|
+
>
|
|
134
|
+
<stop stop-color="#8D044F" />
|
|
135
|
+
<stop offset="0.278736" stop-color="#AC47B6" />
|
|
136
|
+
<stop offset="0.419307" stop-color="#986BAA" />
|
|
137
|
+
<stop offset="0.677775" stop-color="#FF6C5B" />
|
|
138
|
+
<stop offset="1" stop-color="#FD0323" />
|
|
139
|
+
</linearGradient>
|
|
140
|
+
<linearGradient
|
|
141
|
+
id="paint3_linear_75_103"
|
|
142
|
+
x1="8.25178"
|
|
143
|
+
y1="34.035"
|
|
144
|
+
x2="25.2587"
|
|
145
|
+
y2="57.7687"
|
|
146
|
+
gradientUnits="userSpaceOnUse"
|
|
147
|
+
>
|
|
148
|
+
<stop stop-color="#B800C4" />
|
|
149
|
+
<stop offset="0.427705" stop-color="#E0008C" />
|
|
150
|
+
<stop offset="1" stop-color="#FF0101" />
|
|
151
|
+
</linearGradient>
|
|
152
|
+
</defs>
|
|
153
|
+
</svg>
|
|
154
|
+
</span>
|
|
155
|
+
</template>
|
|
156
|
+
|
|
157
|
+
<script setup lang="ts">
|
|
158
|
+
defineProps({
|
|
159
|
+
size: { default: 50, type: Number },
|
|
160
|
+
title: { default: undefined, type: String },
|
|
161
|
+
})
|
|
162
|
+
</script>
|
|
@@ -23,7 +23,14 @@
|
|
|
23
23
|
alt=""
|
|
24
24
|
>
|
|
25
25
|
<span>{{ title }}</span>
|
|
26
|
-
<slot name="afterTitle"/>
|
|
26
|
+
<slot name="afterTitle" />
|
|
27
|
+
|
|
28
|
+
<span
|
|
29
|
+
v-if="subtitle && !isOpen"
|
|
30
|
+
class="subtitle"
|
|
31
|
+
>
|
|
32
|
+
- {{ subtitle }}
|
|
33
|
+
</span>
|
|
27
34
|
<ChevronDownIcon class="ms-auto" :class="{ 'arrow-transform': isOpen }" />
|
|
28
35
|
</button>
|
|
29
36
|
<div v-show="isOpen" class="body p-2">
|
|
@@ -44,6 +51,8 @@ const AlertIcon = defineAsyncComponent(
|
|
|
44
51
|
//Props
|
|
45
52
|
const props = defineProps({
|
|
46
53
|
title: { default: "", type: String },
|
|
54
|
+
/** Message displayed next to the title when closed */
|
|
55
|
+
subtitle: { default: undefined, type: String },
|
|
47
56
|
idComposer: { default: "", type: String },
|
|
48
57
|
isWarning: { default: false, type: Boolean },
|
|
49
58
|
imageUrl: { default: undefined, type: String },
|
|
@@ -65,9 +74,8 @@ onMounted(()=>{
|
|
|
65
74
|
})
|
|
66
75
|
|
|
67
76
|
</script>
|
|
68
|
-
<style lang="scss">
|
|
69
|
-
|
|
70
77
|
|
|
78
|
+
<style scoped lang="scss">
|
|
71
79
|
.octopus-accordion {
|
|
72
80
|
> button {
|
|
73
81
|
min-height: 50px;
|
|
@@ -110,5 +118,12 @@ onMounted(()=>{
|
|
|
110
118
|
justify-content: center;
|
|
111
119
|
align-items: center;
|
|
112
120
|
}
|
|
121
|
+
|
|
122
|
+
.subtitle {
|
|
123
|
+
color: var(--octopus-gray);
|
|
124
|
+
font-weight: 600;
|
|
125
|
+
font-style: italic;
|
|
126
|
+
font-size: 0.75rem;
|
|
127
|
+
}
|
|
113
128
|
}
|
|
114
129
|
</style>
|
|
@@ -104,14 +104,19 @@ watch(()=>generalStore.contentToDisplay, async () => {
|
|
|
104
104
|
return;
|
|
105
105
|
}
|
|
106
106
|
const widthAsked = window.innerWidth > 960 ? "1600":"1000";
|
|
107
|
-
const proxyUrl = useProxyImageUrl(generalStore.contentToDisplay.imageUrl,widthAsked, undefined, true);
|
|
107
|
+
const proxyUrl = useProxyImageUrl(generalStore.contentToDisplay.imageUrl, widthAsked, undefined, true);
|
|
108
108
|
try {
|
|
109
109
|
const result = await axios.get(proxyUrl);
|
|
110
110
|
headerBackgroundImage.value = `background-image: url('${result.data}');`;
|
|
111
111
|
needToBlur.value = result.data === generalStore.contentToDisplay.imageUrl;
|
|
112
112
|
} catch {
|
|
113
|
-
|
|
114
|
-
|
|
113
|
+
if (generalStore.contentToDisplay.imageUrl) {
|
|
114
|
+
const url = encodeURI(generalStore.contentToDisplay.imageUrl);
|
|
115
|
+
headerBackgroundImage.value = `background-image: url('${url}');`;
|
|
116
|
+
needToBlur.value = true;
|
|
117
|
+
} else {
|
|
118
|
+
headerBackgroundImage.value = '';
|
|
119
|
+
}
|
|
115
120
|
}
|
|
116
121
|
}, {deep: true, immediate: true});
|
|
117
122
|
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
</button>
|
|
26
26
|
</div>
|
|
27
27
|
<h1>{{ title }}</h1>
|
|
28
|
-
<div v-html="
|
|
28
|
+
<div v-html="description" />
|
|
29
29
|
|
|
30
30
|
<!-- Play button when viewing with phone -->
|
|
31
31
|
<button
|
|
@@ -104,6 +104,7 @@ import { usePlayerStore } from '../../stores/PlayerStore';
|
|
|
104
104
|
import { podcastApi, PodcastSort } from '../../api/podcastApi';
|
|
105
105
|
import { useSharePath } from '../composable/share/useSharePath';
|
|
106
106
|
import displayHelper from '../../helper/displayHelper';
|
|
107
|
+
import { state } from '../../stores/ParamSdkStore';
|
|
107
108
|
|
|
108
109
|
const { updatePathParams } = useSeoTitleUrl();
|
|
109
110
|
const { useProxyImageUrl } = useImageProxy();
|
|
@@ -158,6 +159,21 @@ const title = computed((): string => {
|
|
|
158
159
|
return '';
|
|
159
160
|
});
|
|
160
161
|
|
|
162
|
+
/** Description of the element displayed */
|
|
163
|
+
const description = computed((): string => {
|
|
164
|
+
let description = element.value.description;
|
|
165
|
+
if (state.smartLink.showOnlyFirstParagraphInDescription === true) {
|
|
166
|
+
// Find everything up to the end of the first paragraph, including newlines
|
|
167
|
+
const pattern = /^(.+?(?:\n+.*?)*<\/p>)/;
|
|
168
|
+
const matches = description.match(pattern);
|
|
169
|
+
if (matches && matches.length >= 2) {
|
|
170
|
+
description = matches[1];
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
return displayHelper.urlify(description);
|
|
175
|
+
});
|
|
176
|
+
|
|
161
177
|
/** The organisation associated with the element */
|
|
162
178
|
const organisation = computed((): Organisation|undefined => {
|
|
163
179
|
if (!element.value) {
|
|
@@ -251,7 +267,7 @@ function playLatestPodcast(): void {
|
|
|
251
267
|
height: 100%;
|
|
252
268
|
overflow: hidden;
|
|
253
269
|
// Do not take place in page
|
|
254
|
-
position:
|
|
270
|
+
position: fixed;
|
|
255
271
|
// Make rest of page appear in front of image
|
|
256
272
|
z-index: -1;
|
|
257
273
|
|
|
@@ -276,7 +292,7 @@ article {
|
|
|
276
292
|
--background: white;
|
|
277
293
|
--border-radius: 20px;
|
|
278
294
|
|
|
279
|
-
margin: 8rem auto
|
|
295
|
+
margin: 8rem auto 2rem;
|
|
280
296
|
padding: 20px;
|
|
281
297
|
width: 900px;
|
|
282
298
|
border-radius: var(--border-radius);
|
|
@@ -345,6 +361,8 @@ article {
|
|
|
345
361
|
|
|
346
362
|
h1 {
|
|
347
363
|
text-align: start !important;
|
|
364
|
+
font-size: var(--octopus-smartlink-title-fontsize);
|
|
365
|
+
color: var(--octopus-smartlink-title-color);
|
|
348
366
|
|
|
349
367
|
@media (width <= 960px) {
|
|
350
368
|
text-align: center !important;
|
package/src/locale/de.json
CHANGED
|
@@ -416,5 +416,6 @@
|
|
|
416
416
|
"Edit": "Bearbeiten",
|
|
417
417
|
"Podcast": "Folge",
|
|
418
418
|
"Player - Transcription - AI Warning": "Die Transkription basiert auf KI und kann Fehler enthalten, bitte teilen Sie uns dies mit.",
|
|
419
|
-
"All organisations": "Alle Organisationen"
|
|
419
|
+
"All organisations": "Alle Organisationen",
|
|
420
|
+
"Emission subtitle": "Untertitel der Sendung"
|
|
420
421
|
}
|
package/src/locale/en.json
CHANGED
|
@@ -416,5 +416,6 @@
|
|
|
416
416
|
"Edit": "Edit",
|
|
417
417
|
"Podcast": "Episode",
|
|
418
418
|
"Player - Transcription - AI Warning": "The transcription is based on AI and may contain errors, please let us know.",
|
|
419
|
-
"All organisations": "All organizations"
|
|
419
|
+
"All organisations": "All organizations",
|
|
420
|
+
"Emission subtitle": "Subtitle of the show"
|
|
420
421
|
}
|
package/src/locale/es.json
CHANGED
|
@@ -416,5 +416,6 @@
|
|
|
416
416
|
"Edit": "Editar",
|
|
417
417
|
"Podcast": "Episodio",
|
|
418
418
|
"Player - Transcription - AI Warning": "La transcripción se basa en IA y puede contener errores, háganoslo saber.",
|
|
419
|
-
"All organisations": "Todas las organizaciones"
|
|
419
|
+
"All organisations": "Todas las organizaciones",
|
|
420
|
+
"Emission subtitle": "Subtítulo del programa"
|
|
420
421
|
}
|
package/src/locale/fr.json
CHANGED
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
"Emission description": "Description de l'émission",
|
|
35
35
|
"Emission image": "Image de l'émission",
|
|
36
36
|
"Emission name": "Titre de l'émission",
|
|
37
|
+
"Emission subtitle": "Sous-titre de l'émission",
|
|
37
38
|
"No elements found. Consider changing the search query.":
|
|
38
39
|
"Aucun élement ne correspond à votre recherche",
|
|
39
40
|
"Podcast is not visible for listeners":
|
package/src/locale/it.json
CHANGED
|
@@ -417,5 +417,6 @@
|
|
|
417
417
|
"Edit": "Modificare",
|
|
418
418
|
"Podcast": "Episodio",
|
|
419
419
|
"Player - Transcription - AI Warning": "La trascrizione si basa sull'intelligenza artificiale e potrebbe contenere errori, faccelo sapere.",
|
|
420
|
-
"All organisations": "Tutte le organizzazioni"
|
|
420
|
+
"All organisations": "Tutte le organizzazioni",
|
|
421
|
+
"Emission subtitle": "Sottotitolo dello spettacolo"
|
|
421
422
|
}
|
package/src/locale/sl.json
CHANGED
|
@@ -415,5 +415,6 @@
|
|
|
415
415
|
"Edit": "Uredi",
|
|
416
416
|
"Podcast": "Epizoda",
|
|
417
417
|
"Player - Transcription - AI Warning": "Transkripcija temelji na umetni inteligenci in lahko vsebuje napake, zato nas obvestite.",
|
|
418
|
-
"All organisations": "Vse organizacije"
|
|
418
|
+
"All organisations": "Vse organizacije",
|
|
419
|
+
"Emission subtitle": "Podnaslov oddaje"
|
|
419
420
|
}
|
package/src/router/utils.ts
CHANGED
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
import { Router, RouteRecordRaw, RouteRecordSingleView, RouteRecordSingleViewWithChildren } from "vue-router";
|
|
1
|
+
import { Router, RouteRecordRaw, RouteRecordSingleView, RouteRecordSingleViewWithChildren, RouteLocationNormalized } from "vue-router";
|
|
2
2
|
import { useFilterStore, FilterStore } from "../stores/FilterStore";
|
|
3
3
|
import { useSaveFetchStore } from "../stores/SaveFetchStore";
|
|
4
4
|
import { Rubriquage } from "../stores/class/rubrique/rubriquage";
|
|
5
5
|
import classicApi from "../api/classicApi";
|
|
6
6
|
import { useAuthStore, AuthStore } from "../stores/AuthStore";
|
|
7
7
|
import { deepEqual } from "../helper/equals";
|
|
8
|
-
import {
|
|
9
|
-
import { RouteProps } from "../components/composable/route/types";
|
|
10
|
-
import { ROUTE_PARAMS } from "../components/composable/route/types";
|
|
8
|
+
import { RouteProps, ROUTE_PARAMS } from "../components/composable/route/types";
|
|
11
9
|
import { type Component } from "vue";
|
|
12
10
|
import { state as sdkParams } from "../stores/ParamSdkStore";
|
|
13
11
|
|
|
@@ -46,6 +44,7 @@ export function getRouteProps(route: RouteLocationNormalized): RouteProps {
|
|
|
46
44
|
routeRubriques :route.query.r as string ?? route.query.rubriquesId as string|undefined,
|
|
47
45
|
routeBeneficiaries: route.query[ROUTE_PARAMS.Beneficiaries] as string[]|undefined,
|
|
48
46
|
routeOnlyVideo: route.query.v as string|undefined ?? "",
|
|
47
|
+
routeValidity: route.query.vl as string ?? "",
|
|
49
48
|
routeEmissionGroups
|
|
50
49
|
}
|
|
51
50
|
}
|
|
@@ -29,6 +29,9 @@ const state: ParamStore = {
|
|
|
29
29
|
searchPage: {
|
|
30
30
|
sortCriteria: undefined,
|
|
31
31
|
},
|
|
32
|
+
smartLink: {
|
|
33
|
+
showOnlyFirstParagraphInDescription: false
|
|
34
|
+
}
|
|
32
35
|
};
|
|
33
36
|
|
|
34
37
|
export interface ParamStore {
|
|
@@ -90,6 +93,12 @@ export interface ParamStore {
|
|
|
90
93
|
/** The default sort criteria for search results */
|
|
91
94
|
sortCriteria?: PodcastSort;
|
|
92
95
|
};
|
|
96
|
+
|
|
97
|
+
/** Smartlink configuration */
|
|
98
|
+
smartLink: {
|
|
99
|
+
/** Truncate the description to the first paragraph */
|
|
100
|
+
showOnlyFirstParagraphInDescription?: boolean;
|
|
101
|
+
}
|
|
93
102
|
}
|
|
94
103
|
|
|
95
104
|
function definedProps<T>(obj: Partial<T>|undefined): Partial<T> {
|
|
@@ -122,6 +131,10 @@ const initialize = function initialize(initObject: Partial<ParamStore>): void {
|
|
|
122
131
|
state.searchPage,
|
|
123
132
|
definedProps(initObject.searchPage),
|
|
124
133
|
);
|
|
134
|
+
state.smartLink = Object.assign(
|
|
135
|
+
state.smartLink,
|
|
136
|
+
definedProps(initObject.smartLink)
|
|
137
|
+
);
|
|
125
138
|
};
|
|
126
139
|
|
|
127
140
|
export default { initialize, state };
|
|
@@ -46,4 +46,8 @@
|
|
|
46
46
|
// Player
|
|
47
47
|
// Color for the transcript background
|
|
48
48
|
--octopus-player-transcript-bg-color: oklch(from var(--octopus-player-color) calc(l + 0.1) c h);
|
|
49
|
+
|
|
50
|
+
// Smartlink
|
|
51
|
+
--octopus-smartlink-title-color: var(--octopus-gray-text);
|
|
52
|
+
--octopus-smartlink-title-fontsize: 1.5rem;
|
|
49
53
|
}
|