@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 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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@saooti/octopus-sdk",
3
- "version": "39.3.10",
3
+ "version": "39.3.12",
4
4
  "private": false,
5
5
  "description": "Javascript SDK for using octopus",
6
6
  "author": "Saooti",
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
  }
@@ -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 {
@@ -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="image-play-button" @click="playRadio">
18
- <div class="multiple-play-buttons-container">
19
- <PlayIcon v-if="!playingRadio" :title="$t('Play')" :size="40" />
20
- <div
21
- v-else
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" v-if="isPhone" @click="showAllDays = !showAllDays">
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
- <button
3
- v-if="!hidePlay || recordingLive"
4
- class="image-play-button"
5
- :class="[
6
- classicPodcastPlay ? '' : 'transparent-background',
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
- <PlayIcon
22
- v-if="!playingPodcast || (playingPodcast && playerVideo)"
23
- :title="$t('Play')"
24
- :size="isVideoPodcast && 'audio' === hoverType ? 50 : 40"
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
- <span class="paddle1" />
33
- <span class="paddle2" />
34
- <span class="paddle3" />
35
- </div>
36
- <button
37
- v-if="isVideoPodcast && !playerVideo"
38
- :title="$t('Video')"
39
- class="btn-transparent d-flex align-items-center text-light"
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 = 'audio'"
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
- <div v-if="!classicPodcastPlay" class="live-image-status bg-dark">
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
- .image-play-button.not-image {
247
- position: relative;
248
- width: auto;
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
- left: 4.9rem;
272
- bottom: 2.3rem;
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
- .has-video .special-icon-play-button {
280
- left: 7.4rem;
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 &&
@@ -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
  {