@saooti/octopus-sdk 41.0.2-SNAPSHOT → 41.0.2

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 (47) hide show
  1. package/index.ts +2 -1
  2. package/package.json +3 -1
  3. package/src/App.vue +3 -7
  4. package/src/components/composable/player/usePlayerLive.ts +1 -1
  5. package/src/components/composable/player/usePlayerVast.ts +7 -7
  6. package/src/components/composable/radio/usefetchRadioData.ts +29 -12
  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 +2 -0
  11. package/src/components/display/emission/EmissionList.vue +5 -8
  12. package/src/components/display/filter/AdvancedSearch.vue +0 -3
  13. package/src/components/display/list/ListPaginate.vue +4 -12
  14. package/src/components/display/live/LiveItem.vue +2 -3
  15. package/src/components/display/live/RadioCurrently.vue +2 -5
  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 +1 -1
  22. package/src/components/display/sharing/SharePlayerTypes.vue +1 -1
  23. package/src/components/form/ClassicInputText.vue +1 -1
  24. package/src/components/form/ClassicMultiselect.vue +4 -1
  25. package/src/components/misc/ClassicPopover.vue +1 -1
  26. package/src/components/misc/FooterSection.vue +1 -24
  27. package/src/components/misc/TopBar.vue +2 -1
  28. package/src/components/misc/player/elements/PlayerTitle.vue +3 -3
  29. package/src/components/misc/player/radio/RadioHistory.vue +3 -2
  30. package/src/components/pages/EmissionPage.vue +14 -0
  31. package/src/components/pages/ParticipantPage.vue +14 -0
  32. package/src/components/pages/PlaylistPage.vue +17 -4
  33. package/src/components/pages/PodcastPage.vue +2 -1
  34. package/src/helper/loadScript.ts +4 -4
  35. package/src/locale/de.ts +1 -0
  36. package/src/locale/en.ts +1 -0
  37. package/src/locale/es.ts +1 -0
  38. package/src/locale/fr.ts +1 -0
  39. package/src/locale/it.ts +1 -0
  40. package/src/locale/sl.ts +1 -0
  41. package/src/router/router.ts +17 -4
  42. package/src/stores/AuthStore.ts +12 -12
  43. package/src/stores/FilterStore.ts +1 -1
  44. package/src/stores/PlayerStore.ts +1 -1
  45. package/src/stores/VastStore.ts +2 -2
  46. package/src/stores/class/general/player.ts +2 -2
  47. package/src/helper/radio/radioHelper.ts +0 -15
@@ -3,9 +3,10 @@
3
3
  <h3 class="mb-2">
4
4
  {{ titleFilter }}
5
5
  </h3>
6
- <div class="d-flex align-items-center flex-wrap mb-2">
6
+ <div class="d-flex align-items-stretch flex-wrap mb-2">
7
7
  <div id="podcast-filter-list-category-chooser" class="w-50-responsive pe-3">
8
8
  <CategoryChooser
9
+ height="100%"
9
10
  :defaultanswer="t('No category filter')"
10
11
  @selected="onCategorySelected"
11
12
  />
@@ -18,17 +19,19 @@
18
19
  />
19
20
  </div>
20
21
  <PodcastList
21
- :first="first"
22
- :size="size"
22
+ :first="dfirst"
23
+ :size="dsize"
23
24
  :iab-id="iabId"
24
25
  :query="query"
25
26
  :participant-id="participantId"
26
27
  :emission-id="emissionId"
27
28
  :organisation-id="productorId"
29
+ :sort-criteria="sort"
28
30
  :reload="reloadList"
29
31
  :include-hidden="editRight"
30
32
  :show-count="showCount"
31
33
  :display-sort-text="false"
34
+ :force-update-parameters="forceUpdateParameters"
32
35
  @fetch="fetch"
33
36
  />
34
37
  </section>
@@ -47,6 +50,9 @@ const CategoryChooser = defineAsyncComponent(
47
50
 
48
51
  //Props
49
52
  const props = defineProps({
53
+ first: { default: 0, type: Number },
54
+ size: { default: 30, type: Number },
55
+ query: { default: undefined, type: String },
50
56
  participantId: { default: undefined, type: Number },
51
57
  name: { default: undefined, type: String },
52
58
  emissionId: { default: undefined, type: Number },
@@ -55,15 +61,16 @@ const props = defineProps({
55
61
  editRight: { default: false, type: Boolean },
56
62
  productorId: { default: () => [], type: Array as () => Array<string> },
57
63
  showCount: { default: false, type: Boolean },
64
+ forceUpdateParameters: { default: false, type: Boolean },
58
65
  })
59
66
 
60
67
  //Emits
61
- const emit = defineEmits(["fetch"]);
68
+ const emit = defineEmits(["fetch", "update:query"]);
62
69
 
63
70
  //Data
64
- const first = ref(0);
65
- const size = ref(30);
66
- const searchPattern = ref("");
71
+ const dfirst = ref(props.first);
72
+ const dsize = ref(props.size);
73
+ const searchPattern = ref(props.query ?? "");
67
74
  const reloadList = ref(false);
68
75
  const iabId : Ref<number | undefined>= ref(undefined);
69
76
 
@@ -76,12 +83,16 @@ const titleFilter = computed(() => {
76
83
  ? t("All podcast button", { name: props.name })
77
84
  : t("All podcast emission button");
78
85
  });
79
- const query = computed(() => searchPattern.value.length >= 3 ? searchPattern.value : "");
86
+ const query = computed(() => searchPattern.value.length > 3 ? searchPattern.value : "");
87
+ const sort = computed(() => !query.value.length ? "DATE" : "SCORE");
80
88
 
81
89
  //Watch
82
90
  watch(()=>props.reload, () => {
83
91
  reloadList.value = !reloadList.value;
84
92
  });
93
+ watch(searchPattern, () => {
94
+ emit('update:query', searchPattern.value);
95
+ });
85
96
 
86
97
  //Methods
87
98
  function onCategorySelected(category: Category | undefined): void {
@@ -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) {
@@ -252,7 +252,7 @@ const isDebriefing = computed(() => {
252
252
  );
253
253
  });
254
254
  const isOctopusAndAnimator = computed(() => {
255
- return !isPodcastmaker && editRight && authStore.isRoleLive;
255
+ return !isPodcastmaker.value && editRight.value && authStore.isRoleLive;
256
256
  });
257
257
  const podcastNotValid = computed(() => {
258
258
  return (
@@ -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;
@@ -216,7 +216,7 @@ watch(textValue, () => {
216
216
  });
217
217
  watch(()=>props.textInit, () => {
218
218
  if (props.textInit !== textValue.value) {
219
- emit("update:textInit", textValue.value);
219
+ textValue.value = props.textInit;
220
220
  }
221
221
  });
222
222
 
@@ -5,7 +5,7 @@
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
10
  <label :class="displayLabel ? '' : 'd-none'" :for="id" class="form-label">{{
11
11
  label
@@ -28,6 +28,7 @@
28
28
  "
29
29
  :filter="fakeSearch"
30
30
  :selectable="() => !maxOptionsSelected"
31
+ :style="{height: height }"
31
32
  :class="{ 'border border-danger': textDanger?.length }"
32
33
  @open="onSearch"
33
34
  @search="onSearch"
@@ -93,6 +94,7 @@ const props = defineProps({
93
94
  multiple: { default: false, type: Boolean },
94
95
  isDisabled: { default: false, type: Boolean },
95
96
  width: { default: "100%", type: String },
97
+ height: { default: undefined, type: String },
96
98
  maxElement: { default: 50, type: Number },
97
99
  minSearchLength: { default: 3, type: Number },
98
100
  optionChosen: { default: undefined, type: Object as () => unknown },
@@ -209,6 +211,7 @@ defineExpose({
209
211
 
210
212
  .vs__dropdown-toggle {
211
213
  padding: 0;
214
+ height: 100%;
212
215
  }
213
216
 
214
217
  .vs__search:focus {
@@ -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
@@ -19,10 +19,7 @@
19
19
  >
20
20
  <router-link
21
21
  class="link-hover special-select-align-magic-trick"
22
- :to="{
23
- name: link.routeName,
24
- query: getQueriesRouter(link.routeName),
25
- }"
22
+ :to="link.routeName"
26
23
  >
27
24
  {{ link.title }}
28
25
  </router-link>
@@ -77,7 +74,6 @@
77
74
 
78
75
  <script setup lang="ts">
79
76
  import cookiesHelper from "../../helper/cookiesHelper";
80
- import { useRubriquesFilterComputed } from "../composable/route/useRubriquesFilterComputed";
81
77
  import ClassicSelect from "../form/ClassicSelect.vue";
82
78
  import AcpmImage from "./AcpmImage.vue";
83
79
  import { state } from "../../stores/ParamSdkStore";
@@ -106,7 +102,6 @@ const reset = ref(false);
106
102
  const organisationId: Ref<string | undefined> = ref(undefined);
107
103
 
108
104
  //Composables
109
- const { rubriqueQueryParam } = useRubriquesFilterComputed();
110
105
  const generalStore = useGeneralStore();
111
106
  const filterStore = useFilterStore();
112
107
  const authStore = useAuthStore();
@@ -143,20 +138,6 @@ watch(()=>filterStore.filterOrgaId, () => {
143
138
 
144
139
 
145
140
  //Methods
146
- function getQueriesRouter(routeName: string) {
147
- if (
148
- "podcasts" !== routeName &&
149
- "emissions" !== routeName &&
150
- "home" !== routeName
151
- ) {
152
- return { productor: filterStore.filterOrgaId };
153
- }
154
- return {
155
- productor: filterStore.filterOrgaId,
156
- iabId: filterStore.filterIab?.id,
157
- rubriquesId: rubriqueQueryParam.value,
158
- };
159
- }
160
141
  function changeLanguage(): void {
161
142
  cookiesHelper.setCookie("octopus-language", language.value);
162
143
  loadLocaleMessages(
@@ -195,10 +176,6 @@ async function onOrganisationSelected( organisation: Organisation | undefined):
195
176
  });
196
177
  }
197
178
  }
198
- //Expose
199
- defineExpose({
200
- updateComment
201
- });
202
179
  </script>
203
180
 
204
181
  <style lang="scss">
@@ -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}');`;
@@ -89,7 +89,7 @@ onUnmounted(()=>{
89
89
  async function fetchCurrentlyPlaying(): Promise<void> {
90
90
  fetchRadioMetadata(
91
91
  playerStore.playerRadio?.canalId ?? 0,
92
- playerStore.playerRadio?.metadata.title ?? "",
92
+ playerStore.playerRadio?.metadata?.title ?? "",
93
93
  updateMetadata,
94
94
  updateAdvertising,
95
95
  );
@@ -98,11 +98,11 @@ function updateAdvertising(nextAdvertising: NextAdvertising): void {
98
98
  playerStore.playerRadioUpdateNextAdvertising(nextAdvertising);
99
99
  }
100
100
  function updateMetadata(
101
- metadata: MediaRadio,
101
+ metadata: MediaRadio|undefined,
102
102
  podcast: Podcast | undefined,
103
103
  history: Array<MediaRadio>,
104
104
  ): void {
105
- playerStore.playerMetadata(metadata, history);
105
+ playerStore.playerMetadata(metadata, history); //TODO
106
106
  playerStore.playerRadioPodcast(podcast);
107
107
  }
108
108
  </script>
@@ -40,10 +40,10 @@ import ChevronLeftIcon from "vue-material-design-icons/ChevronLeft.vue";
40
40
  import ChevronRightIcon from "vue-material-design-icons/ChevronRight.vue";
41
41
  import { usePlayerStore } from "../../../../stores/PlayerStore";
42
42
  import dayjs from "dayjs";
43
- import radioHelper from "../../../../helper/radio/radioHelper";
44
43
  import { computed, nextTick, onMounted, onUnmounted, ref, useTemplateRef, watch } from "vue";
45
44
  import { MediaRadio } from "@/stores/class/general/player";
46
45
  import { useI18n } from "vue-i18n";
46
+ import { useFetchRadio } from "../../../composable/radio/usefetchRadioData";
47
47
 
48
48
 
49
49
  //Data
@@ -54,6 +54,7 @@ const historyListContainerRef = useTemplateRef('historyListContainer');
54
54
  //Composables
55
55
  const { t } = useI18n();
56
56
  const playerStore = usePlayerStore();
57
+ const {displayTitle} = useFetchRadio();
57
58
 
58
59
 
59
60
  //Computed
@@ -119,7 +120,7 @@ function displayPreviousItem(item: MediaRadio): string {
119
120
  if (item.podcastId) {
120
121
  return item.title;
121
122
  }
122
- return radioHelper.displayTitle(item);
123
+ return displayTitle(item);
123
124
  }
124
125
  </script>
125
126
  <style lang="scss">
@@ -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
@@ -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
@@ -414,4 +414,5 @@ export default {
414
414
  "Code copied!":"Code kopiert!",
415
415
  "Copied!":"Kopiert!",
416
416
  "Color of the QR Code": "Farbe des QR-Codes",
417
+ "Silent stream":"Stiller Fluss",
417
418
  }
package/src/locale/en.ts CHANGED
@@ -417,4 +417,5 @@ export default {
417
417
  "Code copied!":"Code copied!",
418
418
  "Copied!":"Copied!",
419
419
  "Color of the QR Code": "Color of the QR Code",
420
+ "Silent stream":"Silent stream",
420
421
  };
package/src/locale/es.ts CHANGED
@@ -415,4 +415,5 @@ export default {
415
415
  "Code copied!":"¡Código copiado!",
416
416
  "Copied!":"¡Copiado!",
417
417
  "Color of the QR Code": "Color del código QR",
418
+ "Silent stream":"Flujo silencioso",
418
419
  }
package/src/locale/fr.ts CHANGED
@@ -424,4 +424,5 @@ export default {
424
424
  "Code copied!":"Code copié !",
425
425
  "Copied!":"Copié !",
426
426
  "Color of the QR Code": "Couleur du Qr Code",
427
+ "Silent stream":"Flux silencieux",
427
428
  };
package/src/locale/it.ts CHANGED
@@ -411,4 +411,5 @@ export default{
411
411
  "Code copied!":"Codice copiato!",
412
412
  "Copied!":"Copiato!",
413
413
  "Color of the QR Code": "Colore del codice QR",
414
+ "Silent stream":"Flusso silenzioso",
414
415
  };
package/src/locale/sl.ts CHANGED
@@ -406,4 +406,5 @@ export default {
406
406
  "Code copied!":"Koda kopirana!",
407
407
  "Copied!":"Kopirano!",
408
408
  "Color of the QR Code": "Barva kode QR",
409
+ "Silent stream":"Tihi tok",
409
410
  }
@@ -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
  });