@saooti/octopus-sdk 39.3.10 → 39.3.12
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 +5 -1
- package/package.json +1 -1
- package/src/App.vue +3 -2
- package/src/assets/general.scss +2 -2
- package/src/assets/share.scss +0 -29
- package/src/components/display/live/RadioImage.vue +25 -18
- package/src/components/display/live/RadioPlanning.vue +1 -1
- package/src/components/display/podcasts/PodcastIsPlaying.vue +24 -0
- package/src/components/display/podcasts/PodcastPlayButton.vue +57 -58
- package/src/components/mixins/metaTitle.ts +15 -0
- package/src/components/mixins/metaTitleWatch.ts +18 -0
- package/src/components/mixins/seoTitleUrl.ts +6 -1
- package/src/components/pages/CategoryPage.vue +9 -1
- package/src/components/pages/Error403Page.vue +0 -5
- package/src/components/pages/PageNotFound.vue +0 -5
- package/src/components/pages/RubriquePage.vue +6 -0
- package/src/components/pages/VideoPage.vue +3 -1
- package/src/router/router.ts +51 -0
package/index.ts
CHANGED
|
@@ -98,6 +98,8 @@ import tagOfMixins from "./src/components/mixins/tagOfMixins.ts";
|
|
|
98
98
|
import resizePhone from "./src/components/mixins/resizePhone.ts";
|
|
99
99
|
import debounce from "./src/components/mixins/debounce.ts";
|
|
100
100
|
import downloadMixins from "./src/components/mixins/download.ts";
|
|
101
|
+
import metaTitle from "./src/components/mixins/metaTitle.ts";
|
|
102
|
+
import metaTitleWatch from "./src/components/mixins/metaTitleWatch.ts";
|
|
101
103
|
|
|
102
104
|
|
|
103
105
|
//helper
|
|
@@ -159,5 +161,7 @@ export {
|
|
|
159
161
|
getApiUrl,
|
|
160
162
|
ModuleApi,
|
|
161
163
|
classicApi,
|
|
162
|
-
downloadMixins
|
|
164
|
+
downloadMixins,
|
|
165
|
+
metaTitle,
|
|
166
|
+
metaTitleWatch
|
|
163
167
|
};
|
package/package.json
CHANGED
package/src/App.vue
CHANGED
|
@@ -17,6 +17,7 @@ import TopBar from "@/components/misc/TopBar.vue";
|
|
|
17
17
|
import PlayerComponent from "@/components/misc/player/PlayerComponent.vue";
|
|
18
18
|
import ClassicLazy from "@/components/misc/ClassicLazy.vue";
|
|
19
19
|
import initSDK from "./components/mixins/init";
|
|
20
|
+
import metaTitle from "./components/mixins/metaTitle";
|
|
20
21
|
import { useAuthStore } from "./stores/AuthStore";
|
|
21
22
|
import { useFilterStore } from "./stores/FilterStore";
|
|
22
23
|
import { useGeneralStore } from "./stores/GeneralStore";
|
|
@@ -39,7 +40,7 @@ export default defineComponent({
|
|
|
39
40
|
ClassicLazy,
|
|
40
41
|
},
|
|
41
42
|
|
|
42
|
-
mixins: [initSDK],
|
|
43
|
+
mixins: [initSDK, metaTitle],
|
|
43
44
|
|
|
44
45
|
data() {
|
|
45
46
|
return {
|
|
@@ -57,9 +58,9 @@ export default defineComponent({
|
|
|
57
58
|
|
|
58
59
|
watch: {
|
|
59
60
|
$route: {
|
|
60
|
-
deep: true,
|
|
61
61
|
immediate: true,
|
|
62
62
|
async handler() {
|
|
63
|
+
this.updateMetaTitle();
|
|
63
64
|
if (this.firstDisplayCategoryFilter) {
|
|
64
65
|
return;
|
|
65
66
|
}
|
package/src/assets/general.scss
CHANGED
|
@@ -201,8 +201,8 @@ body{
|
|
|
201
201
|
}
|
|
202
202
|
}
|
|
203
203
|
.img-box-podcast{
|
|
204
|
-
height: octopusVariables.$octopus-item-podcast-size;
|
|
205
|
-
width: octopusVariables.$octopus-item-podcast-size;
|
|
204
|
+
height: calc(octopusVariables.$octopus-item-podcast-size - 4px);
|
|
205
|
+
width: calc(octopusVariables.$octopus-item-podcast-size - 4px);
|
|
206
206
|
}
|
|
207
207
|
|
|
208
208
|
.comma {
|
package/src/assets/share.scss
CHANGED
|
@@ -241,33 +241,4 @@
|
|
|
241
241
|
}
|
|
242
242
|
}
|
|
243
243
|
}
|
|
244
|
-
.image-play-button{
|
|
245
|
-
position: absolute;
|
|
246
|
-
display: flex;
|
|
247
|
-
justify-content: flex-end;
|
|
248
|
-
top: 0;
|
|
249
|
-
left: 0;
|
|
250
|
-
right: 0;
|
|
251
|
-
bottom: 0;
|
|
252
|
-
cursor: pointer;
|
|
253
|
-
flex-direction: column;
|
|
254
|
-
background: transparent;
|
|
255
|
-
border-width: 0;
|
|
256
|
-
width: 100%;
|
|
257
|
-
padding: 0;
|
|
258
|
-
&:focus{
|
|
259
|
-
background: rgba(0, 0, 0, 0.308);
|
|
260
|
-
}
|
|
261
|
-
.multiple-play-buttons-container{
|
|
262
|
-
background-color:octopusVariables.$primaryColorLessTransparent;
|
|
263
|
-
border-radius: octopusVariables.$octopus-borderradius;
|
|
264
|
-
color: white;
|
|
265
|
-
padding: 0.3rem;
|
|
266
|
-
width: fit-content;
|
|
267
|
-
font-size: 1rem;
|
|
268
|
-
margin: 0.2rem;
|
|
269
|
-
display: flex;
|
|
270
|
-
align-items: center;
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
244
|
}
|
|
@@ -14,23 +14,11 @@
|
|
|
14
14
|
class="img-box img-box-podcast"
|
|
15
15
|
:title="$t('Canal name image', { name: radio.name })"
|
|
16
16
|
/>
|
|
17
|
-
<button class="
|
|
18
|
-
<
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
class="bloc-paddle"
|
|
23
|
-
:class="
|
|
24
|
-
playingRadio && 'PLAYING' === playerStatus ? 'play-animation' : ''
|
|
25
|
-
"
|
|
26
|
-
>
|
|
27
|
-
<span class="paddle1" />
|
|
28
|
-
<span class="paddle2" />
|
|
29
|
-
<span class="paddle3" />
|
|
30
|
-
</div>
|
|
31
|
-
<div class="ms-2">
|
|
32
|
-
{{ playText }}
|
|
33
|
-
</div>
|
|
17
|
+
<button class="radio-play-button" @click="playRadio">
|
|
18
|
+
<PlayIcon v-if="!playingRadio" :title="$t('Play')" :size="40" />
|
|
19
|
+
<PodcastIsPlaying v-else/>
|
|
20
|
+
<div class="ms-2">
|
|
21
|
+
{{ playText }}
|
|
34
22
|
</div>
|
|
35
23
|
</button>
|
|
36
24
|
</div>
|
|
@@ -42,13 +30,15 @@ import { usePlayerStore } from "../../../stores/PlayerStore";
|
|
|
42
30
|
import { useFilterStore } from "../../../stores/FilterStore";
|
|
43
31
|
import { mapState, mapActions } from "pinia";
|
|
44
32
|
import imageProxy from "../../mixins/imageProxy";
|
|
45
|
-
import { defineComponent } from "vue";
|
|
33
|
+
import { defineAsyncComponent, defineComponent } from "vue";
|
|
46
34
|
import { Canal } from "@/stores/class/radio/canal";
|
|
35
|
+
const PodcastIsPlaying = defineAsyncComponent(() => import("../podcasts/PodcastIsPlaying.vue"));
|
|
47
36
|
export default defineComponent({
|
|
48
37
|
name: "RadioImage",
|
|
49
38
|
|
|
50
39
|
components: {
|
|
51
40
|
PlayIcon,
|
|
41
|
+
PodcastIsPlaying
|
|
52
42
|
},
|
|
53
43
|
|
|
54
44
|
mixins: [imageProxy],
|
|
@@ -89,3 +79,20 @@ export default defineComponent({
|
|
|
89
79
|
},
|
|
90
80
|
});
|
|
91
81
|
</script>
|
|
82
|
+
<style lang="scss">
|
|
83
|
+
@use '@scss/variables' as octopusVariables;
|
|
84
|
+
.octopus-app {
|
|
85
|
+
.radio-play-button{
|
|
86
|
+
display: flex;
|
|
87
|
+
align-items: center;
|
|
88
|
+
position: absolute;
|
|
89
|
+
bottom: 0;
|
|
90
|
+
font-size: 1rem;
|
|
91
|
+
color: white;
|
|
92
|
+
background-color: octopusVariables.$primaryColorLessTransparent;
|
|
93
|
+
border-radius: octopusVariables.$octopus-borderradius;
|
|
94
|
+
padding: 0.2rem;
|
|
95
|
+
border: 0;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
</style>
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
<span>{{ day.title }}</span>
|
|
17
17
|
</button>
|
|
18
18
|
</div>
|
|
19
|
-
<button class="btn btn-primary mb-3 mx-0"
|
|
19
|
+
<button v-if="isPhone" class="btn btn-primary mb-3 mx-0" @click="showAllDays = !showAllDays">
|
|
20
20
|
<template v-if="!showAllDays">{{ $t('Show more days') }}</template>
|
|
21
21
|
<template v-else>{{ $t('Show fewer days') }}</template>
|
|
22
22
|
</button>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div
|
|
3
|
+
:class="'PLAYING' === playerStatus ? 'play-animation' : ''"
|
|
4
|
+
class="bloc-paddle mx-1"
|
|
5
|
+
>
|
|
6
|
+
<span class="paddle1" />
|
|
7
|
+
<span class="paddle2" />
|
|
8
|
+
<span class="paddle3" />
|
|
9
|
+
</div>
|
|
10
|
+
</template>
|
|
11
|
+
|
|
12
|
+
<script lang="ts">
|
|
13
|
+
import { usePlayerStore } from "../../../stores/PlayerStore";
|
|
14
|
+
import { mapState } from "pinia";
|
|
15
|
+
import { defineComponent } from "vue";
|
|
16
|
+
export default defineComponent({
|
|
17
|
+
name: "PodcastIsPlaying",
|
|
18
|
+
computed: {
|
|
19
|
+
...mapState(usePlayerStore, [
|
|
20
|
+
"playerStatus",
|
|
21
|
+
])
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
</script>
|
|
@@ -1,61 +1,43 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<
|
|
3
|
-
v-if="!
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
justButtons ? 'not-image' : '',
|
|
8
|
-
]"
|
|
9
|
-
@mouseenter="hoverType = 'audio'"
|
|
10
|
-
@mouseleave="hoverType = ''"
|
|
11
|
-
@click="play(false)"
|
|
12
|
-
>
|
|
13
|
-
<div
|
|
14
|
-
class="multiple-play-buttons-container"
|
|
15
|
-
:class="[
|
|
16
|
-
hoverType ? 'hover-type-' + hoverType : '',
|
|
17
|
-
isVideoPodcast ? 'has-video' : '',
|
|
18
|
-
]"
|
|
19
|
-
>
|
|
2
|
+
<div v-if="!hidePlay || recordingLive" :class="classicPodcastPlay ? '' : 'img-blur-background'">
|
|
3
|
+
<div v-if="!classicPodcastPlay" class="live-image-status bg-dark">
|
|
4
|
+
{{ textVisible }}
|
|
5
|
+
</div>
|
|
6
|
+
<div class="multi-buttons-play" :class="justButtons ? 'play-button-relative' : ''">
|
|
20
7
|
<template v-if="!isLiveToBeRecorded">
|
|
21
|
-
<
|
|
22
|
-
|
|
23
|
-
:title="$t('Play')"
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
<div
|
|
28
|
-
v-if="playingPodcast"
|
|
29
|
-
:class="'PLAYING' === playerStatus ? 'play-animation' : ''"
|
|
30
|
-
class="bloc-paddle mx-1"
|
|
8
|
+
<button
|
|
9
|
+
class="d-flex"
|
|
10
|
+
:title="playingPodcast? $t('Pause') : $t('Play')"
|
|
11
|
+
@mouseenter="hoverType = 'audio'"
|
|
12
|
+
@mouseleave="hoverType = ''"
|
|
13
|
+
@click="play(false)"
|
|
31
14
|
>
|
|
32
|
-
<
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
v-if="isVideoPodcast
|
|
38
|
-
|
|
39
|
-
|
|
15
|
+
<PlayIcon
|
|
16
|
+
v-if="!playingPodcast || (playingPodcast && playerVideo)"
|
|
17
|
+
:size="'audio' === hoverType ? 50 : 40"
|
|
18
|
+
/>
|
|
19
|
+
<PodcastIsPlaying v-if="playingPodcast && !playerVideo"/>
|
|
20
|
+
<span v-if="!isVideoPodcast" class="ms-1">{{ durationString }}</span>
|
|
21
|
+
</button>
|
|
22
|
+
<button
|
|
23
|
+
v-if="isVideoPodcast"
|
|
24
|
+
:title="$t('Video')"
|
|
25
|
+
:disabled="playerVideo"
|
|
26
|
+
@click="play(true)"
|
|
40
27
|
@mouseenter="hoverType = 'video'"
|
|
41
|
-
@mouseleave="hoverType = '
|
|
42
|
-
@click.stop="play(true)"
|
|
28
|
+
@mouseleave="hoverType = ''"
|
|
43
29
|
>
|
|
44
|
-
<PlayVideoIcon :size="'video' === hoverType ? 50 : 40" />
|
|
30
|
+
<PlayVideoIcon v-if="!playerVideo" :size="'video' === hoverType ? 50 : 40" />
|
|
31
|
+
<PodcastIsPlaying v-if="playingPodcast && playerVideo"/>
|
|
32
|
+
<span class="ms-2">{{ durationString }}</span>
|
|
45
33
|
</button>
|
|
46
34
|
<div v-if="!classicPodcastPlay" class="special-icon-play-button">
|
|
47
35
|
<component :is="iconName" :size="16" />
|
|
48
36
|
</div>
|
|
49
|
-
<div>
|
|
50
|
-
{{ durationString }}
|
|
51
|
-
</div>
|
|
52
37
|
</template>
|
|
53
38
|
<component :is="iconName" v-else :size="50" :title="textVisible" />
|
|
54
39
|
</div>
|
|
55
|
-
|
|
56
|
-
{{ textVisible }}
|
|
57
|
-
</div>
|
|
58
|
-
</button>
|
|
40
|
+
</div>
|
|
59
41
|
</template>
|
|
60
42
|
|
|
61
43
|
<script lang="ts">
|
|
@@ -75,7 +57,8 @@ import imageProxy from "../../mixins/imageProxy";
|
|
|
75
57
|
import { useAuthStore } from "../../../stores/AuthStore";
|
|
76
58
|
import { usePlayerStore } from "../../../stores/PlayerStore";
|
|
77
59
|
import { mapState, mapActions } from "pinia";
|
|
78
|
-
import { defineComponent } from "vue";
|
|
60
|
+
import { defineAsyncComponent, defineComponent } from "vue";
|
|
61
|
+
const PodcastIsPlaying = defineAsyncComponent(() => import("./PodcastIsPlaying.vue"));
|
|
79
62
|
export default defineComponent({
|
|
80
63
|
name: "PodcastPlayButton",
|
|
81
64
|
components: {
|
|
@@ -87,6 +70,7 @@ export default defineComponent({
|
|
|
87
70
|
CancelIcon,
|
|
88
71
|
PlayIcon,
|
|
89
72
|
PlayVideoIcon,
|
|
73
|
+
PodcastIsPlaying
|
|
90
74
|
},
|
|
91
75
|
mixins: [imageProxy],
|
|
92
76
|
props: {
|
|
@@ -242,10 +226,12 @@ export default defineComponent({
|
|
|
242
226
|
</script>
|
|
243
227
|
|
|
244
228
|
<style lang="scss">
|
|
229
|
+
@use '@scss/variables' as octopusVariables;
|
|
245
230
|
.octopus-app {
|
|
246
|
-
.
|
|
247
|
-
position:
|
|
248
|
-
|
|
231
|
+
.img-blur-background{
|
|
232
|
+
position: absolute;
|
|
233
|
+
inset: 0;
|
|
234
|
+
background-color: #ffffff80;
|
|
249
235
|
}
|
|
250
236
|
.live-image-status {
|
|
251
237
|
text-align: center;
|
|
@@ -257,10 +243,6 @@ export default defineComponent({
|
|
|
257
243
|
position: absolute;
|
|
258
244
|
top: 0;
|
|
259
245
|
}
|
|
260
|
-
.transparent-background {
|
|
261
|
-
background-color: #ffffff80;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
246
|
.special-icon-play-button {
|
|
265
247
|
width: 30px;
|
|
266
248
|
height: 30px;
|
|
@@ -268,16 +250,33 @@ export default defineComponent({
|
|
|
268
250
|
color: black;
|
|
269
251
|
border-radius: 50%;
|
|
270
252
|
position: absolute;
|
|
271
|
-
|
|
272
|
-
|
|
253
|
+
right: -15px;
|
|
254
|
+
top: -20px;
|
|
273
255
|
font-size: 0.9rem;
|
|
274
256
|
font-weight: bold;
|
|
275
257
|
display: flex;
|
|
276
258
|
align-items: center;
|
|
277
259
|
justify-content: center;
|
|
278
260
|
}
|
|
279
|
-
.
|
|
280
|
-
|
|
261
|
+
.multi-buttons-play{
|
|
262
|
+
display: flex;
|
|
263
|
+
position: absolute;
|
|
264
|
+
bottom: 0;
|
|
265
|
+
font-size: 1rem;
|
|
266
|
+
color: white;
|
|
267
|
+
background-color: octopusVariables.$primaryColorLessTransparent;
|
|
268
|
+
border-radius: octopusVariables.$octopus-borderradius;
|
|
269
|
+
button{
|
|
270
|
+
color: white;
|
|
271
|
+
background-color: transparent;
|
|
272
|
+
border: 0;
|
|
273
|
+
display: flex;
|
|
274
|
+
align-items: center;
|
|
275
|
+
padding: 0.2rem;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
.play-button-relative.multi-buttons-play{
|
|
279
|
+
position: relative;
|
|
281
280
|
}
|
|
282
281
|
}
|
|
283
282
|
</style>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { mapState } from "pinia";
|
|
2
|
+
import { defineComponent } from "vue";
|
|
3
|
+
import { useGeneralStore } from "../../stores/GeneralStore";
|
|
4
|
+
export default defineComponent({
|
|
5
|
+
computed: {
|
|
6
|
+
...mapState(useGeneralStore, ["metaTitle"]),
|
|
7
|
+
},
|
|
8
|
+
methods: {
|
|
9
|
+
updateMetaTitle(){
|
|
10
|
+
if(""!==this.$route.meta.title){
|
|
11
|
+
document.title = this.$route.meta.title ? this.$t(this.$route.meta.title) +' - '+ this.metaTitle: this.metaTitle;
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
});
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { mapState } from "pinia";
|
|
2
|
+
import { defineComponent } from "vue";
|
|
3
|
+
import { useGeneralStore } from "../../stores/GeneralStore";
|
|
4
|
+
export default defineComponent({
|
|
5
|
+
computed: {
|
|
6
|
+
...mapState(useGeneralStore, ["metaTitle"]),
|
|
7
|
+
},
|
|
8
|
+
watch: {
|
|
9
|
+
$route: {
|
|
10
|
+
immediate: true,
|
|
11
|
+
async handler() {
|
|
12
|
+
if(""!==this.$route.meta.title){
|
|
13
|
+
document.title = this.$route.meta.title ? this.$t(this.$route.meta.title) +' - '+ this.metaTitle: this.metaTitle;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
});
|
|
@@ -1,12 +1,17 @@
|
|
|
1
|
+
import { mapState } from 'pinia';
|
|
2
|
+
import { useGeneralStore } from '../../stores/GeneralStore';
|
|
1
3
|
import { defineComponent } from 'vue';
|
|
2
4
|
export const seoTitleUrl = defineComponent({
|
|
5
|
+
computed:{
|
|
6
|
+
...mapState(useGeneralStore, ["metaTitle"]),
|
|
7
|
+
},
|
|
3
8
|
methods: {
|
|
4
9
|
updatePathParams(text: string) {
|
|
5
|
-
document.title = text;
|
|
6
10
|
const seoText = this.stringUrlEncode(text);
|
|
7
11
|
if(seoText !== this.$route.params.title){
|
|
8
12
|
this.$router.replace({ params: { ...this.$route.params, ...{title:seoText}}, query: this.$route.query});
|
|
9
13
|
}
|
|
14
|
+
document.title = text + " - "+ this.metaTitle;
|
|
10
15
|
},
|
|
11
16
|
stringUrlEncode(text: string): string {
|
|
12
17
|
if(!text.length){
|
|
@@ -26,7 +26,7 @@ export default defineComponent({
|
|
|
26
26
|
},
|
|
27
27
|
|
|
28
28
|
computed: {
|
|
29
|
-
...mapState(useGeneralStore, ["storedCategories"]),
|
|
29
|
+
...mapState(useGeneralStore, ["storedCategories", "metaTitle"]),
|
|
30
30
|
...mapState(useFilterStore, ["filterOrgaId"]),
|
|
31
31
|
orgaArray(): Array<string> {
|
|
32
32
|
return this.filterOrgaId ? [this.filterOrgaId] : [];
|
|
@@ -39,5 +39,13 @@ export default defineComponent({
|
|
|
39
39
|
return matchCategories[0]["name"];
|
|
40
40
|
},
|
|
41
41
|
},
|
|
42
|
+
watch:{
|
|
43
|
+
title: {
|
|
44
|
+
immediate: true,
|
|
45
|
+
async handler() {
|
|
46
|
+
document.title = this.title + ' - ' + this.metaTitle;
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
}
|
|
42
50
|
});
|
|
43
51
|
</script>
|
|
@@ -28,22 +28,17 @@
|
|
|
28
28
|
</template>
|
|
29
29
|
|
|
30
30
|
<script lang="ts">
|
|
31
|
-
import { useGeneralStore } from "../../stores/GeneralStore";
|
|
32
31
|
import { useAuthStore } from "../../stores/AuthStore";
|
|
33
32
|
import { mapState } from "pinia";
|
|
34
33
|
import { defineComponent } from "vue";
|
|
35
34
|
export default defineComponent({
|
|
36
35
|
name: "Error403Page",
|
|
37
36
|
computed: {
|
|
38
|
-
...mapState(useGeneralStore, ["metaTitle"]),
|
|
39
37
|
...mapState(useAuthStore, ["authOrgaId"]),
|
|
40
38
|
authText(): string {
|
|
41
39
|
return this.authOrgaId ? this.$t("Logout") : this.$t("Login");
|
|
42
40
|
},
|
|
43
41
|
},
|
|
44
|
-
mounted() {
|
|
45
|
-
document.title = this.metaTitle;
|
|
46
|
-
},
|
|
47
42
|
});
|
|
48
43
|
</script>
|
|
49
44
|
<style lang="scss">
|
|
@@ -25,22 +25,17 @@
|
|
|
25
25
|
<script lang="ts">
|
|
26
26
|
import { rubriquesFilterComputed } from "../mixins/routeParam/rubriquesFilterComputed";
|
|
27
27
|
import { useFilterStore } from "../../stores/FilterStore";
|
|
28
|
-
import { useGeneralStore } from "../../stores/GeneralStore";
|
|
29
28
|
import { mapState } from "pinia";
|
|
30
29
|
import { defineComponent } from "vue";
|
|
31
30
|
export default defineComponent({
|
|
32
31
|
name: "PageNotFound",
|
|
33
32
|
mixins: [rubriquesFilterComputed],
|
|
34
33
|
computed: {
|
|
35
|
-
...mapState(useGeneralStore, ["metaTitle"]),
|
|
36
34
|
...mapState(useFilterStore, ["filterIab"]),
|
|
37
35
|
backgroundStyle(): string {
|
|
38
36
|
return "background-image: url('/img/404.svg');";
|
|
39
37
|
},
|
|
40
38
|
},
|
|
41
|
-
mounted() {
|
|
42
|
-
document.title = this.metaTitle;
|
|
43
|
-
},
|
|
44
39
|
});
|
|
45
40
|
</script>
|
|
46
41
|
<style lang="scss">
|
|
@@ -14,6 +14,8 @@ import classicApi from "../../api/classicApi";
|
|
|
14
14
|
import PodcastList from "../display/podcasts/PodcastList.vue";
|
|
15
15
|
import { defineComponent } from "vue";
|
|
16
16
|
import { Rubrique } from "@/stores/class/rubrique/rubrique";
|
|
17
|
+
import { useGeneralStore } from "../../stores/GeneralStore";
|
|
18
|
+
import { mapState } from "pinia";
|
|
17
19
|
export default defineComponent({
|
|
18
20
|
name: "RubriquePage",
|
|
19
21
|
components: {
|
|
@@ -29,6 +31,9 @@ export default defineComponent({
|
|
|
29
31
|
title: "" as string,
|
|
30
32
|
};
|
|
31
33
|
},
|
|
34
|
+
computed:{
|
|
35
|
+
...mapState(useGeneralStore, ["metaTitle"]),
|
|
36
|
+
},
|
|
32
37
|
watch: {
|
|
33
38
|
rubriqueId: {
|
|
34
39
|
immediate: true,
|
|
@@ -38,6 +43,7 @@ export default defineComponent({
|
|
|
38
43
|
path: "rubrique/" + this.rubriqueId,
|
|
39
44
|
});
|
|
40
45
|
this.title = data.name;
|
|
46
|
+
document.title = this.title + ' - ' + this.metaTitle;
|
|
41
47
|
},
|
|
42
48
|
},
|
|
43
49
|
},
|
|
@@ -109,6 +109,7 @@ import {
|
|
|
109
109
|
ConferencePublicInfo,
|
|
110
110
|
} from "@/stores/class/conference/conference";
|
|
111
111
|
import { usePlayerStore } from "../../stores/PlayerStore";
|
|
112
|
+
import { useGeneralStore } from "../../stores/GeneralStore";
|
|
112
113
|
const PlayerVideoDigiteka = defineAsyncComponent(
|
|
113
114
|
() => import("../misc/player/video/PlayerVideoDigiteka.vue"),
|
|
114
115
|
);
|
|
@@ -157,6 +158,7 @@ export default defineComponent({
|
|
|
157
158
|
};
|
|
158
159
|
},
|
|
159
160
|
computed: {
|
|
161
|
+
...mapState(useGeneralStore, ["metaTitle"]),
|
|
160
162
|
...mapState(useFilterStore, ["filterOrgaId"]),
|
|
161
163
|
...mapState(useAuthStore, ["authOrgaId"]),
|
|
162
164
|
...mapState(useApiStore, ["hlsUrl"]),
|
|
@@ -229,7 +231,7 @@ export default defineComponent({
|
|
|
229
231
|
api: 0,
|
|
230
232
|
path: "podcast/" + this.podcastId,
|
|
231
233
|
});
|
|
232
|
-
document.title = this.podcast.title;
|
|
234
|
+
document.title = this.podcast.title + " - "+this.metaTitle;
|
|
233
235
|
const orga = this.podcast.organisation;
|
|
234
236
|
const privateAccess =
|
|
235
237
|
"PUBLIC" !== orga.privacy &&
|
package/src/router/router.ts
CHANGED
|
@@ -40,6 +40,9 @@ const routes: Array<RouteRecordRaw> = [
|
|
|
40
40
|
path: "/",
|
|
41
41
|
name: "",
|
|
42
42
|
component: Home,
|
|
43
|
+
meta:{
|
|
44
|
+
title: "Home"
|
|
45
|
+
}
|
|
43
46
|
},
|
|
44
47
|
{
|
|
45
48
|
path: "/main/pub/error",
|
|
@@ -50,11 +53,17 @@ const routes: Array<RouteRecordRaw> = [
|
|
|
50
53
|
path: "/main/pub/home",
|
|
51
54
|
name: "home",
|
|
52
55
|
component: Home,
|
|
56
|
+
meta:{
|
|
57
|
+
title: "Home",
|
|
58
|
+
}
|
|
53
59
|
},
|
|
54
60
|
{
|
|
55
61
|
path: "/main/pub/map",
|
|
56
62
|
name: "map",
|
|
57
63
|
component: MapPage,
|
|
64
|
+
meta:{
|
|
65
|
+
title: "Site map",
|
|
66
|
+
}
|
|
58
67
|
},
|
|
59
68
|
{
|
|
60
69
|
path: "/main/pub/search/:query?",
|
|
@@ -63,6 +72,9 @@ const routes: Array<RouteRecordRaw> = [
|
|
|
63
72
|
props: (route: RouteLocationNormalized) => ({
|
|
64
73
|
queryRoute: route.params.query,
|
|
65
74
|
}),
|
|
75
|
+
meta:{
|
|
76
|
+
title: "Search",
|
|
77
|
+
}
|
|
66
78
|
},
|
|
67
79
|
{
|
|
68
80
|
path: "/main/pub/podcasts/",
|
|
@@ -83,6 +95,9 @@ const routes: Array<RouteRecordRaw> = [
|
|
|
83
95
|
routeOrga:route.query.o,
|
|
84
96
|
routeRubriques :route.query.r,
|
|
85
97
|
}),
|
|
98
|
+
meta:{
|
|
99
|
+
title: "Podcasts",
|
|
100
|
+
}
|
|
86
101
|
},
|
|
87
102
|
{
|
|
88
103
|
path: "/main/pub/emissions/",
|
|
@@ -101,6 +116,9 @@ const routes: Array<RouteRecordRaw> = [
|
|
|
101
116
|
routeOrga:route.query.o,
|
|
102
117
|
routeRubriques :route.query.r,
|
|
103
118
|
}),
|
|
119
|
+
meta:{
|
|
120
|
+
title: "Emissions",
|
|
121
|
+
}
|
|
104
122
|
},
|
|
105
123
|
{
|
|
106
124
|
path: "/main/pub/participants",
|
|
@@ -110,6 +128,9 @@ const routes: Array<RouteRecordRaw> = [
|
|
|
110
128
|
pr: route.query.pr ? parseInt(route.query.pr.toString(), 10) : undefined,
|
|
111
129
|
ps: route.query.ps ? parseInt(route.query.ps.toString(), 10) : undefined,
|
|
112
130
|
}),
|
|
131
|
+
meta:{
|
|
132
|
+
title: "Speakers",
|
|
133
|
+
}
|
|
113
134
|
},
|
|
114
135
|
{
|
|
115
136
|
path: "/main/pub/emission/:emissionId(\\d+):title([^?]*)?:productor?",
|
|
@@ -118,6 +139,9 @@ const routes: Array<RouteRecordRaw> = [
|
|
|
118
139
|
props: (route: RouteLocationNormalized) => ({
|
|
119
140
|
emissionId: parseInt(route.params.emissionId.toString(), 10),
|
|
120
141
|
}),
|
|
142
|
+
meta:{
|
|
143
|
+
title: ""
|
|
144
|
+
}
|
|
121
145
|
},
|
|
122
146
|
{
|
|
123
147
|
path: "/main/pub/podcast/:podcastId(\\d+):title([^?]*)?:productor?",
|
|
@@ -126,6 +150,9 @@ const routes: Array<RouteRecordRaw> = [
|
|
|
126
150
|
props: (route: RouteLocationNormalized) => ({
|
|
127
151
|
podcastId: parseInt(route.params.podcastId.toString(), 10)
|
|
128
152
|
}),
|
|
153
|
+
meta:{
|
|
154
|
+
title: ""
|
|
155
|
+
}
|
|
129
156
|
},
|
|
130
157
|
{
|
|
131
158
|
path: "/main/pub/video/:podcastId(\\d+):title([^?]*)?:productor?",
|
|
@@ -134,6 +161,9 @@ const routes: Array<RouteRecordRaw> = [
|
|
|
134
161
|
props: (route: RouteLocationNormalized) => ({
|
|
135
162
|
podcastId: parseInt(route.params.podcastId.toString(), 10),
|
|
136
163
|
}),
|
|
164
|
+
meta:{
|
|
165
|
+
title: ""
|
|
166
|
+
}
|
|
137
167
|
},
|
|
138
168
|
{
|
|
139
169
|
path: "/main/pub/participant/:participantId(\\d+):title([^?]*)?:productor?",
|
|
@@ -142,6 +172,9 @@ const routes: Array<RouteRecordRaw> = [
|
|
|
142
172
|
props: (route: RouteLocationNormalized) => ({
|
|
143
173
|
participantId: parseInt(route.params.participantId.toString(), 10),
|
|
144
174
|
}),
|
|
175
|
+
meta:{
|
|
176
|
+
title: ""
|
|
177
|
+
}
|
|
145
178
|
},
|
|
146
179
|
{
|
|
147
180
|
path: "/main/pub/category/:iabId/:productor?",
|
|
@@ -151,6 +184,9 @@ const routes: Array<RouteRecordRaw> = [
|
|
|
151
184
|
iabId: parseInt(route.params.iabId.toString(), 10),
|
|
152
185
|
productor: route.params.productor,
|
|
153
186
|
}),
|
|
187
|
+
meta:{
|
|
188
|
+
title: "",
|
|
189
|
+
}
|
|
154
190
|
},
|
|
155
191
|
{
|
|
156
192
|
path: "/main/pub/rubrique/:rubriqueId/:productor?",
|
|
@@ -166,6 +202,9 @@ const routes: Array<RouteRecordRaw> = [
|
|
|
166
202
|
rubriqueId: parseInt(route.params.rubriqueId.toString(), 10),
|
|
167
203
|
productor: route.params.productor,
|
|
168
204
|
}),
|
|
205
|
+
meta:{
|
|
206
|
+
title: "",
|
|
207
|
+
}
|
|
169
208
|
},
|
|
170
209
|
{
|
|
171
210
|
path: "/main/pub/lives/:productor?",
|
|
@@ -174,6 +213,9 @@ const routes: Array<RouteRecordRaw> = [
|
|
|
174
213
|
props: (route: RouteLocationNormalized) => ({
|
|
175
214
|
productor: route.params.productor,
|
|
176
215
|
}),
|
|
216
|
+
meta:{
|
|
217
|
+
title: "Radio & Live",
|
|
218
|
+
}
|
|
177
219
|
},
|
|
178
220
|
{
|
|
179
221
|
path: "/main/pub/radio/:canalId(\\d+):title([^?]*)?:productor?",
|
|
@@ -182,6 +224,9 @@ const routes: Array<RouteRecordRaw> = [
|
|
|
182
224
|
props: (route: RouteLocationNormalized) => ({
|
|
183
225
|
canalId: parseInt(route.params.canalId.toString(), 10),
|
|
184
226
|
}),
|
|
227
|
+
meta:{
|
|
228
|
+
title: ""
|
|
229
|
+
}
|
|
185
230
|
},
|
|
186
231
|
{
|
|
187
232
|
path: "/main/pub/playlists/",
|
|
@@ -191,6 +236,9 @@ const routes: Array<RouteRecordRaw> = [
|
|
|
191
236
|
pr: route.query.pr ? parseInt(route.query.pr.toString(), 10) : undefined,
|
|
192
237
|
ps: route.query.ps ? parseInt(route.query.ps.toString(), 10) : undefined,
|
|
193
238
|
}),
|
|
239
|
+
meta:{
|
|
240
|
+
title: "Playlists"
|
|
241
|
+
}
|
|
194
242
|
},
|
|
195
243
|
{
|
|
196
244
|
path: "/main/pub/playlist/:playlistId(\\d+):title([^?]*)?:productor?",
|
|
@@ -199,6 +247,9 @@ const routes: Array<RouteRecordRaw> = [
|
|
|
199
247
|
props: (route: RouteLocationNormalized) => ({
|
|
200
248
|
playlistId: parseInt(route.params.playlistId.toString(), 10),
|
|
201
249
|
}),
|
|
250
|
+
meta:{
|
|
251
|
+
title: ""
|
|
252
|
+
}
|
|
202
253
|
},
|
|
203
254
|
//Fake route to avoid errors
|
|
204
255
|
{
|