@saooti/octopus-sdk 41.0.5-SNAPSHOT → 41.0.5

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.
Files changed (49) hide show
  1. package/index.ts +2 -1
  2. package/package.json +3 -1
  3. package/src/App.vue +3 -7
  4. package/src/api/classicApi.ts +1 -1
  5. package/src/components/composable/player/usePlayerLive.ts +1 -1
  6. package/src/components/composable/player/usePlayerVast.ts +7 -7
  7. package/src/components/composable/route/useAdvancedParamInit.ts +1 -1
  8. package/src/components/composable/route/useRouteUpdateParams.ts +4 -4
  9. package/src/components/composable/route/useSimplePageParam.ts +15 -8
  10. package/src/components/display/categories/CategoryChooser.vue +6 -0
  11. package/src/components/display/comments/CommentList.vue +1 -1
  12. package/src/components/display/emission/EmissionList.vue +5 -8
  13. package/src/components/display/filter/AdvancedSearch.vue +0 -3
  14. package/src/components/display/list/ListPaginate.vue +4 -12
  15. package/src/components/display/live/LiveItem.vue +2 -3
  16. package/src/components/display/participant/ParticipantList.vue +6 -9
  17. package/src/components/display/playlist/PlaylistList.vue +5 -8
  18. package/src/components/display/playlist/PodcastList.vue +16 -7
  19. package/src/components/display/podcasts/PodcastFilterList.vue +19 -8
  20. package/src/components/display/podcasts/PodcastList.vue +8 -9
  21. package/src/components/display/podcasts/PodcastModuleBox.vue +0 -1
  22. package/src/components/display/sharing/SharePlayerTypes.vue +1 -1
  23. package/src/components/display/sharing/SubscribeButtons.vue +4 -2
  24. package/src/components/form/ClassicInputText.vue +4 -1
  25. package/src/components/form/ClassicMultiselect.vue +36 -8
  26. package/src/components/misc/ClassicAccordion.vue +4 -4
  27. package/src/components/misc/ClassicPopover.vue +1 -1
  28. package/src/components/misc/ClassicSpinner.vue +1 -1
  29. package/src/components/misc/FooterSection.vue +0 -16
  30. package/src/components/misc/TopBar.vue +4 -11
  31. package/src/components/misc/player/elements/PlayerImage.vue +0 -1
  32. package/src/components/pages/EmissionPage.vue +14 -0
  33. package/src/components/pages/PageLogout.vue +1 -6
  34. package/src/components/pages/ParticipantPage.vue +14 -0
  35. package/src/components/pages/PlaylistPage.vue +17 -4
  36. package/src/components/pages/PodcastPage.vue +2 -1
  37. package/src/helper/loadScript.ts +4 -4
  38. package/src/locale/de.ts +2 -2
  39. package/src/locale/en.ts +2 -2
  40. package/src/locale/es.ts +2 -2
  41. package/src/locale/fr.ts +2 -2
  42. package/src/locale/it.ts +2 -2
  43. package/src/locale/sl.ts +2 -2
  44. package/src/router/router.ts +17 -4
  45. package/src/stores/AuthStore.ts +12 -12
  46. package/src/stores/FilterStore.ts +1 -1
  47. package/src/stores/VastStore.ts +2 -2
  48. package/src/style/_variables.scss +3 -0
  49. package/src/style/general.scss +5 -0
@@ -19,6 +19,7 @@
19
19
  "
20
20
  :just-size-chosen="justSizeChosen"
21
21
  :player-responsive="true"
22
+ :force-update-parameters="forceUpdateParameters"
22
23
  >
23
24
  <template #list>
24
25
  <div class="octopus-element-list">
@@ -85,6 +86,7 @@ const props = defineProps({
85
86
  justSizeChosen: { default: false, type: Boolean },
86
87
  withVideo: { default: undefined, type: Boolean },
87
88
  includeTag:{ default: () => [], type: Array as () => Array<string> },
89
+ forceUpdateParameters: { default: false, type: Boolean },
88
90
  })
89
91
 
90
92
  //Emits
@@ -148,9 +150,9 @@ watch(changePaginate, () => {
148
150
  dfirst.value = props.first;
149
151
  dsize.value = props.size;
150
152
  });
151
- watch(changed, () => reloadList());
152
- watch(()=>props.reload, () => reloadList());
153
- watch(dsize, () => reloadList());
153
+ watch(changed, () => fetchContent(true));
154
+ watch(()=>props.reload, () => fetchContent(true));
155
+ watch(dsize, () => fetchContent(true));
154
156
  watch(dfirst, () => {
155
157
  if (
156
158
  !podcasts.value[dfirst.value] ||
@@ -160,17 +162,13 @@ watch(dfirst, () => {
160
162
  }
161
163
  });
162
164
 
163
- onBeforeMount(()=>fetchContent(true))
165
+ onBeforeMount(()=>fetchContent(false))
164
166
 
165
167
  //Methods
166
- function reloadList() {
167
- dfirst.value = 0;
168
- fetchContent(true);
169
- }
170
168
  async function fetchContent(reset: boolean): Promise<void> {
171
169
  loading.value = true;
172
170
  const param: FetchParam = {
173
- first: dfirst.value,
171
+ first: reset ? 0 : dfirst.value,
174
172
  size: dsize.value,
175
173
  organisationId: organisation.value,
176
174
  emissionId: props.emissionId,
@@ -213,6 +211,7 @@ function afterFetching(
213
211
  data: { count: number; result: Array<Podcast>; sort: string },
214
212
  ): void {
215
213
  if (reset) {
214
+ dfirst.value = 0;
216
215
  podcasts.value.length = 0;
217
216
  }
218
217
  if (dfirst.value > podcasts.value.length) {
@@ -1,6 +1,5 @@
1
1
  <template>
2
2
  <section v-if="podcast" class="module-box">
3
- {{ !!podcastConference && isLiveReadyToRecord && isOctopusAndAnimator }}
4
3
  <RecordingItemButton
5
4
  v-if="!!podcastConference && isLiveReadyToRecord && isOctopusAndAnimator"
6
5
  :podcast="podcast"
@@ -137,7 +137,7 @@ onMounted(()=>{
137
137
  function isNumeric(value: string): boolean {
138
138
  return /^-?\d+$/.test(value);
139
139
  }
140
- function selectChange($event: any) {
140
+ function selectChange($event: Event) {
141
141
  const val = $event.target.value;
142
142
  if (!val) {
143
143
  return;
@@ -78,7 +78,7 @@ import RssIcon from "vue-material-design-icons/Rss.vue";
78
78
  import { useApiStore } from "../../../stores/ApiStore";
79
79
  import ClassicPopover from "../../misc/ClassicPopover.vue";
80
80
  import { Emission } from "@/stores/class/general/emission";
81
- import { computed, Ref, ref, useTemplateRef, watch } from "vue";
81
+ import { computed, onMounted, Ref, ref, useTemplateRef, watch } from "vue";
82
82
  import { useI18n } from "vue-i18n";
83
83
  type Link = {
84
84
  name: string;
@@ -204,7 +204,9 @@ const rssUrl = computed(() => {
204
204
 
205
205
 
206
206
  //Watch
207
- watch(()=>props.windowWidth, () =>resizeWindow(), {immediate: true});
207
+ watch(()=>props.windowWidth, () =>resizeWindow());
208
+
209
+ onMounted(()=>resizeWindow());
208
210
 
209
211
 
210
212
  //Methods
@@ -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
- emit("update:textInit", textValue.value);
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
- <label :class="displayLabel ? '' : 'd-none'" :for="id" class="form-label">{{
11
- label
12
- }}
13
- <AsteriskIcon v-if="displayRequired" :size="10" class="ms-1 mb-2" :title="t('Mandatory input')"/>
14
- </label>
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
- alt=""
24
-
23
+ alt=""
25
24
  />
26
- <span class="flex-grow-1">{{ title }}</span>
27
- <ChevronDownIcon :class="{ 'arrow-transform': isOpen }" />
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.hasOwnProperty("popover"));
75
+ const isTopLayerPopover = computed(() => (props.isTopLayer || "octopus-modal"===props.relativeClass) && Object.hasOwn(HTMLElement.prototype, "popover"));
76
76
 
77
77
 
78
78
  //Watch
@@ -16,7 +16,7 @@ defineProps({
16
16
  --size-spinner: 3rem;
17
17
  --size-spinner-section: calc(var(--size-spinner) / 20);
18
18
  --half-size-spinner: calc(var(--size-spinner) / 2);
19
-
19
+
20
20
  color: #000000;
21
21
  display: inline-block;
22
22
  position: relative;
@@ -74,7 +74,6 @@
74
74
 
75
75
  <script setup lang="ts">
76
76
  import cookiesHelper from "../../helper/cookiesHelper";
77
- import { useRubriquesFilterComputed } from "../composable/route/useRubriquesFilterComputed";
78
77
  import ClassicSelect from "../form/ClassicSelect.vue";
79
78
  import AcpmImage from "./AcpmImage.vue";
80
79
  import { state } from "../../stores/ParamSdkStore";
@@ -103,7 +102,6 @@ const reset = ref(false);
103
102
  const organisationId: Ref<string | undefined> = ref(undefined);
104
103
 
105
104
  //Composables
106
- const { rubriqueQueryParam } = useRubriquesFilterComputed();
107
105
  const generalStore = useGeneralStore();
108
106
  const filterStore = useFilterStore();
109
107
  const authStore = useAuthStore();
@@ -140,20 +138,6 @@ watch(()=>filterStore.filterOrgaId, () => {
140
138
 
141
139
 
142
140
  //Methods
143
- function getQueriesRouter(routeName: string) {
144
- if (
145
- "podcasts" !== routeName &&
146
- "emissions" !== routeName &&
147
- "home" !== routeName
148
- ) {
149
- return { productor: filterStore.filterOrgaId };
150
- }
151
- return {
152
- productor: filterStore.filterOrgaId,
153
- iabId: filterStore.filterIab?.id,
154
- rubriquesId: rubriqueQueryParam.value,
155
- };
156
- }
157
141
  function changeLanguage(): void {
158
142
  cookiesHelper.setCookie("octopus-language", language.value);
159
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':'header-color-bg', scrolled? 'scrolled':'', needToBlur ? 'header-force-blur':'']"
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 proxyUrl = useProxyImageUrl(generalStore.contentToDisplay.imageUrl,"270", undefined, true);
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
- &.header-color-bg{
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
  }
@@ -22,7 +22,6 @@
22
22
  :height="imageWidth"
23
23
  aria-hidden="true"
24
24
  alt=""
25
-
26
25
  :title="t('Episode name image', { name: podcastDisplay?.title })"
27
26
  class="player-image"
28
27
  :class="imageWidth > 50 ? 'big-player-image' : ''"
@@ -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
- alt=""
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 :playlist="playlist" />
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
- fetchConference.value.status = data.status;
258
+
259
+ fetchConference.value = {...fetchConference.value, ...data};
259
260
  } catch {
260
261
  //Do nothing
261
262
  }
@@ -1,4 +1,4 @@
1
- function loadScript(src: string, async:boolean, callback: any) {
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, window);
9
+ callback(true);
10
10
  }
11
11
  }, false);
12
- scriptElement.addEventListener('error', function(error) {
12
+ scriptElement.addEventListener('error', function() {
13
13
  firstElement.removeChild(scriptElement);
14
14
  if(callback && typeof callback === 'function') {
15
- callback(false, error);
15
+ callback(false);
16
16
  }
17
17
  }, false);
18
18
  firstElement.insertBefore(scriptElement, firstElement.firstChild);
package/src/locale/de.ts CHANGED
@@ -146,8 +146,8 @@ export default {
146
146
  "Sort score": "Nach Relevanz",
147
147
  "Sort name": "Nach Titel",
148
148
  "Sort last": "Nach Datum",
149
- "Choose color": "Farbe wählen",
150
- "Choose theme": "Design wählen",
149
+ "Choose color": "Akzentfarbe",
150
+ "Choose theme": "Thema (Spielerhintergrund)",
151
151
  "Podcast no visible": "Podcast nicht sichtbar",
152
152
  "Display episodes": "Folgen anzeigen",
153
153
  "Podcast published in future": "Podcast geplant",
package/src/locale/en.ts CHANGED
@@ -145,8 +145,8 @@ export default {
145
145
  "Sort score": "Sorted by relevancy score",
146
146
  "Sort name": "Sorted title",
147
147
  "Sort last": "Sorted last",
148
- "Choose color": "Choose color",
149
- "Choose theme": "Choose theme",
148
+ "Choose color": "Accent color",
149
+ "Choose theme": "Theme (player background)",
150
150
  "Podcast no visible": "Podcast not visible",
151
151
  "Display episodes": "Display episodes",
152
152
  "Podcast published in future": "Podcast published in the future",
package/src/locale/es.ts CHANGED
@@ -145,8 +145,8 @@ export default {
145
145
  "Sort score": "Clasificación por pertinencia",
146
146
  "Sort name": "Clasificación por título",
147
147
  "Sort last": "Clasificación por fecha más reciente",
148
- "Choose color": "Elegir color",
149
- "Choose theme": "Elegir tema",
148
+ "Choose color": "Color de acento",
149
+ "Choose theme": "Tema (fondo del jugador)",
150
150
  "Podcast no visible": "Este pódcast no puede visualizarse",
151
151
  "Display episodes": "Mostrar episodios",
152
152
  "Podcast published in future": "Pódcast pendiente de publicación",
package/src/locale/fr.ts CHANGED
@@ -146,8 +146,8 @@ export default {
146
146
  "Sort score": "Pertinence",
147
147
  "Sort name": "Alphabétique",
148
148
  "Sort last": "Antéchronologique",
149
- "Choose color": "Couleur",
150
- "Choose theme": "Thème",
149
+ "Choose color": "Couleur d'accent",
150
+ "Choose theme": "Thème (fond du player)",
151
151
  "Podcast no visible": "Épisode non visible actuellement",
152
152
  "Display episodes": "Affichage des épisodes",
153
153
  "Podcast publish in future": "Épisode publié dans le futur",
package/src/locale/it.ts CHANGED
@@ -141,8 +141,8 @@ export default{
141
141
  'Sort score': 'Suddiviso per grado di rilevanza',
142
142
  'Sort name': 'Suddividi titolo',
143
143
  'Sort last': 'Suddividi ultimo',
144
- 'Choose color': 'Seleziona colore',
145
- 'Choose theme': 'Seleziona tema',
144
+ 'Choose color': 'Colore accento',
145
+ 'Choose theme': 'Tema (sfondo del giocatore)',
146
146
  'Podcast no visible': 'Podcast non visibile',
147
147
  'Display episodes': 'Mostra episodi',
148
148
  'Podcast published in future': 'Podcast pubblicato in futuro',
package/src/locale/sl.ts CHANGED
@@ -142,8 +142,8 @@ export default {
142
142
  "Sort score": "Razvrščeno po relevantnosti",
143
143
  "Sort name": "Naslov",
144
144
  "Sort last": "Zadnje",
145
- "Choose color": "Izberi barvo",
146
- "Choose theme": "Izberi temo",
145
+ "Choose color": "Poudarjena barva",
146
+ "Choose theme": "Tema (ozadje igralca)",
147
147
  "Podcast no visible": "Podkast je skrit",
148
148
  "Display episodes": "Prikaži epizode",
149
149
  "Podcast published in future": "Podkast bo objavljen v prihodnje",
@@ -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(): { left: number; top: number } {
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
  });