@saooti/octopus-sdk 31.0.23 → 31.0.26

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 (41) hide show
  1. package/README.md +12 -1
  2. package/index.ts +5 -2
  3. package/package.json +1 -1
  4. package/src/assets/live.scss +13 -13
  5. package/src/assets/multiselect.scss +1 -1
  6. package/src/components/display/categories/CategoryChooser.vue +1 -0
  7. package/src/components/display/categories/CategoryList.vue +5 -5
  8. package/src/components/display/comments/CommentBasicView.vue +1 -0
  9. package/src/components/display/emission/EmissionChooser.vue +1 -0
  10. package/src/components/display/emission/EmissionItem.vue +5 -8
  11. package/src/components/display/emission/EmissionPlayerItem.vue +9 -16
  12. package/src/components/display/filter/AdvancedSearch.vue +2 -12
  13. package/src/components/display/filter/ProductorSearch.vue +2 -3
  14. package/src/components/display/live/LiveItem.vue +4 -8
  15. package/src/components/display/organisation/OrganisationChooser.vue +1 -0
  16. package/src/components/display/organisation/OrganisationChooserLight.vue +18 -25
  17. package/src/components/display/participant/ParticipantItem.vue +5 -8
  18. package/src/components/display/playlist/PlaylistItem.vue +5 -8
  19. package/src/components/display/podcasts/ParticipantDescription.vue +1 -0
  20. package/src/components/display/podcasts/PodcastImage.vue +1 -0
  21. package/src/components/display/podcasts/PodcastItem.vue +5 -9
  22. package/src/components/display/podcasts/TagList.vue +2 -0
  23. package/src/components/display/rubriques/RubriqueChooser.vue +1 -0
  24. package/src/components/display/rubriques/RubriqueList.vue +6 -5
  25. package/src/components/display/sharing/ShareButtons.vue +1 -0
  26. package/src/components/display/sharing/SharePlayer.vue +1 -1
  27. package/src/components/form/ClassicCheckbox.vue +6 -1
  28. package/src/components/form/ClassicLoading.vue +2 -2
  29. package/src/components/form/ClassicRadio.vue +6 -1
  30. package/src/components/misc/ErrorMessage.vue +1 -0
  31. package/src/components/misc/Footer.vue +2 -1
  32. package/src/components/misc/LeftMenu.vue +1 -4
  33. package/src/components/misc/TopBar.vue +1 -4
  34. package/src/components/mixins/orgaComputed.ts +0 -0
  35. package/src/components/mixins/organisationFilter.ts +2 -0
  36. package/src/components/mixins/player/playerLogic.ts +1 -1
  37. package/src/components/pages/Emissions.vue +26 -1
  38. package/src/components/pages/Participant.vue +1 -0
  39. package/src/components/pages/Podcasts.vue +1 -0
  40. package/src/locale/en.ts +1 -1
  41. package/src/sass/_variables.scss +2 -0
package/README.md CHANGED
@@ -573,7 +573,14 @@ See [Configuration Reference](https://cli.vuejs.org/config/).
573
573
  * 30.0.74 Error locales en allemand (je sens que ça va être fun cette histoire)
574
574
  * 30.0.75 Parlement
575
575
  * 30.0.76 Space
576
-
576
+ * 30.0.77 V-Calendar bloque version
577
+ * 30.0.78 a -> word-break
578
+ * 30.0.79 DownloadId player
579
+ * 30.0.80 DownloadId player
580
+ * 30.0.81 DownloadId player
581
+ * 30.0.82 Cherry pick Color Qr code
582
+ * 30.0.83 Locales parlement
583
+ * 30.0.84 Une émission non visible n'apparaît pas dans la page émission
577
584
 
578
585
  * 31.0.0 Passage en 31
579
586
  * 31.0.1 Ajout pocket casts
@@ -599,3 +606,7 @@ See [Configuration Reference](https://cli.vuejs.org/config/).
599
606
  * 31.0.21 Player mobile
600
607
  * 31.0.22 Merge 30
601
608
  * 31.0.23 Qr Code option noir
609
+ * 31.0.24 Amélioration accessibilité
610
+ * 31.0.25 Erreur audioUrl
611
+ * 31.0.26 Erreur 403 page expose
612
+
package/index.ts CHANGED
@@ -12,6 +12,7 @@ import Search from "./src/components/pages/Search.vue";
12
12
  import Home from "./src/components/pages/Home.vue";
13
13
  import Category from "./src/components/pages/Category.vue";
14
14
  import Rubrique from "./src/components/pages/Rubrique.vue";
15
+ import Error403Page from "./src/components/pages/Error403Page.vue";
15
16
  //Misc
16
17
  import Footer from "./src/components/misc/Footer.vue";
17
18
  import LeftMenu from "./src/components/misc/LeftMenu.vue";
@@ -116,7 +117,8 @@ const components = {
116
117
  ClassicLoading,
117
118
  AdvancedSearch,
118
119
  PodcastPlaylistInlineList,
119
- ClassicSelect
120
+ ClassicSelect,
121
+ Error403Page
120
122
  }
121
123
 
122
124
  export default components;
@@ -171,5 +173,6 @@ export {
171
173
  ClassicLoading,
172
174
  AdvancedSearch,
173
175
  PodcastPlaylistInlineList,
174
- ClassicSelect
176
+ ClassicSelect,
177
+ Error403Page
175
178
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@saooti/octopus-sdk",
3
- "version": "31.0.23",
3
+ "version": "31.0.26",
4
4
  "private": false,
5
5
  "description": "Javascript SDK for using octopus",
6
6
  "author": "Saooti",
@@ -1,39 +1,39 @@
1
1
  .planned-bg {
2
- background: #f09653;
2
+ background: rgb(188, 88, 16);
3
3
  }
4
4
  .pending-bg {
5
- background: #f1643e;
5
+ background: rgb(216, 58, 14);
6
6
  }
7
7
  .recording-bg {
8
- background: #f34a4a;
8
+ background: rgb(233, 12, 12);
9
9
  }
10
10
  .error-bg {
11
- background: #ff0000;
11
+ background: rgb(173, 0, 0);
12
12
  }
13
13
  .debriefing-bg {
14
- background: #6ec66e;
14
+ background: rgb(54, 134, 54);
15
15
  }
16
16
  .done-bg {
17
- background: #679fe9;
17
+ background: rgb(42, 117, 218);
18
18
  }
19
19
  .publishing-bg {
20
- background: #7d7d7d;
20
+ background: rgb(112, 112, 112);
21
21
  }
22
22
  .planned-shadow {
23
- box-shadow: 0px 12px 48px 6px rgba(240, 151, 83, 0.2);
23
+ box-shadow: 0px 12px 48px 6px rgba(188, 88, 16, 0.2);
24
24
  }
25
25
  .pending-shadow {
26
- box-shadow: 0px 12px 48px 6px rgba(241, 101, 62, 0.2);
26
+ box-shadow: 0px 12px 48px 6px rgba(216, 58, 14, 0.2);
27
27
  }
28
28
  .recording-shadow {
29
- box-shadow: 0px 12px 48px 6px rgba(243, 74, 74, 0.2);
29
+ box-shadow: 0px 12px 48px 6px rgba(233, 12, 12, 0.2);
30
30
  }
31
31
  .debriefing-shadow {
32
- box-shadow: 0px 12px 48px 6px rgba(110, 198, 110, 0.2);
32
+ box-shadow: 0px 12px 48px 6px rgba(54, 134, 54, 0.2);
33
33
  }
34
34
  .publishing-shadow {
35
- box-shadow: 0px 12px 48px 6px rgba(125, 125, 125, 0.2);
35
+ box-shadow: 0px 12px 48px 6px rgba(112, 112, 112, 0.2);
36
36
  }
37
37
  .error-shadow {
38
- box-shadow: 0px 12px 48px 6px rgba(255, 0, 0, 0.2);
38
+ box-shadow: 0px 12px 48px 6px rgba(173, 0, 0, 0.2);
39
39
  }
@@ -315,7 +315,7 @@
315
315
  }
316
316
 
317
317
  .multiselect__placeholder {
318
- color: #adadad;
318
+ color: #757575;
319
319
  display: inline-block;
320
320
  margin-bottom: 10px;
321
321
  padding-top: 2px;
@@ -15,6 +15,7 @@
15
15
  :disabled="isDisabled"
16
16
  label="name"
17
17
  track-by="id"
18
+ :aria-expanded="false"
18
19
  :placeholder="$t('Type string to filter by categories')"
19
20
  :options="categories"
20
21
  :multiple="multiple"
@@ -4,12 +4,12 @@
4
4
  class="d-inline-flex w-100 mb-3 ps-3 pe-3 hide-phone category-list"
5
5
  >
6
6
  <div
7
- id="category-list-container"
7
+ ref="categoryListContainer"
8
8
  class="category-list-container"
9
9
  >
10
10
  <button
11
11
  v-for="category in categories"
12
- :id="'category' + category.id"
12
+ :ref="'category' + category.id"
13
13
  :key="category.id"
14
14
  class="category-item text-dark bg-white"
15
15
  @click="checkIfFilter(category)"
@@ -144,14 +144,14 @@ export default defineComponent({
144
144
  this.$store.commit('filterIab',category);
145
145
  },
146
146
  resizeWindow(): void {
147
- const categoryList = document.getElementById('category-list-container');
148
- if(null === categoryList){
147
+ const categoryList = (this.$refs.categoryListContainer as HTMLElement);
148
+ if(null === categoryList ||!categoryList){
149
149
  return;
150
150
  }
151
151
  categoryList.style.justifyContent = 'flex-start';
152
152
  this.hidenCategories.length = 0;
153
153
  this.categories.forEach((element: Category) => {
154
- const el = document.getElementById('category' + element.id);
154
+ const el = (this.$refs['category' + element.id] as Array<HTMLElement>)[0];
155
155
  if (!el) return;
156
156
  const parent = el.parentElement;
157
157
  if (parent && el.offsetLeft + el.clientWidth <= parent.clientWidth - 20) {
@@ -7,6 +7,7 @@
7
7
  >{{ $t('Live') }}</b>
8
8
  <b
9
9
  :id="'popover-comment' + comment.comId"
10
+ role="button"
10
11
  tabindex="-1"
11
12
  :class="editRight || isValid? '':'text-danger'"
12
13
  class="me-2"
@@ -14,6 +14,7 @@
14
14
  v-model="emission"
15
15
  label="name"
16
16
  track-by="emissionId"
17
+ :aria-expanded="false"
17
18
  :placeholder="$t('Type string to filter by emission')"
18
19
  :options="emissions"
19
20
  :multiple="false"
@@ -14,6 +14,7 @@
14
14
  <img
15
15
  v-lazy="emission.imageUrl"
16
16
  class="img-box"
17
+ :title="$t('Emission name image', {name:emission.name})"
17
18
  >
18
19
  <div class="emission-item-text">
19
20
  <div
@@ -27,12 +28,12 @@
27
28
  >{{ emission.name }}
28
29
  </div>
29
30
  <div
30
- :id="'description-emission-container-' + emission.emissionId"
31
+ ref="descriptionEmissionContainer"
31
32
  class="emission-description htms-wysiwyg-content"
32
33
  >
33
34
  <!-- eslint-disable vue/no-v-html -->
34
35
  <div
35
- :id="'description-emission-' + emission.emissionId"
36
+ ref="descriptionEmission"
36
37
  v-html="urlify(emission.description|| '')"
37
38
  />
38
39
  <!-- eslint-enable -->
@@ -107,12 +108,8 @@ export default defineComponent({
107
108
  this.hasPodcast();
108
109
  },
109
110
  mounted() {
110
- const emissionDesc = document.getElementById(
111
- 'description-emission-' + this.emission.emissionId
112
- );
113
- const emissionDescContainer = document.getElementById(
114
- 'description-emission-container-' + this.emission.emissionId
115
- );
111
+ const emissionDesc = (this.$refs.descriptionEmission as HTMLElement);
112
+ const emissionDescContainer = (this.$refs.descriptionEmissionContainer as HTMLElement);
116
113
  if (
117
114
  null !== emissionDesc && null !== emissionDescContainer &&
118
115
  emissionDesc.clientHeight > emissionDescContainer.clientHeight
@@ -21,6 +21,7 @@
21
21
  >
22
22
  <img
23
23
  v-lazy="emission.imageUrl"
24
+ :title="$t('Emission name image', {name:emission.name})"
24
25
  class="img-box rounded-0"
25
26
  >
26
27
  <div
@@ -35,12 +36,12 @@
35
36
  {{ emission.name }}
36
37
  </div>
37
38
  <div
38
- :id="'description-emission-container-' + emission.emissionId"
39
+ ref="descriptionEmissionContainer"
39
40
  class="emission-description html-wysiwyg-content"
40
41
  >
41
42
  <!-- eslint-disable vue/no-v-html -->
42
43
  <div
43
- :id="'description-emission-' + emission.emissionId"
44
+ ref="descriptionEmission"
44
45
  v-html="urlify(emission.description)"
45
46
  />
46
47
  <!-- eslint-enable -->
@@ -78,12 +79,12 @@
78
79
  {{ p.title }}
79
80
  </div>
80
81
  <div
81
- :id="'description-podcast-container-' + p.podcastId"
82
+ :ref="'descriptionPodcastContainer'+ p.podcastId"
82
83
  class="emission-description html-wysiwyg-content"
83
84
  >
84
85
  <!-- eslint-disable vue/no-v-html -->
85
86
  <div
86
- :id="'description-podcast-' + p.podcastId"
87
+ :ref="'descriptionPodcast'+ p.podcastId"
87
88
  v-html="urlify(p.description)"
88
89
  />
89
90
  <!-- eslint-enable -->
@@ -194,12 +195,8 @@ export default defineComponent({
194
195
  this.loadPodcasts();
195
196
  },
196
197
  mounted() {
197
- const emissionDesc = document.getElementById(
198
- 'description-emission-' + this.emission.emissionId
199
- );
200
- const emissionDescContainer = document.getElementById(
201
- 'description-emission-container-' + this.emission.emissionId
202
- );
198
+ const emissionDesc = (this.$refs.descriptionEmission as HTMLElement);
199
+ const emissionDescContainer = (this.$refs.descriptionEmissionContainer as HTMLElement);
203
200
  if (
204
201
  null !== emissionDesc && null !== emissionDescContainer &&
205
202
  emissionDesc.clientHeight > emissionDescContainer.clientHeight
@@ -220,12 +217,8 @@ export default defineComponent({
220
217
  this.podcasts = data.result;
221
218
  this.$nextTick(() => {
222
219
  for (let index = 0, len = this.podcasts.length; index < len; index++) {
223
- const podcastDesc = document.getElementById(
224
- 'description-podcast-' + this.podcasts[index].podcastId
225
- );
226
- const podcastDescContainer = document.getElementById(
227
- 'description-podcast-container-' + this.podcasts[index].podcastId
228
- );
220
+ const podcastDesc = (this.$refs['descriptionPodcast'+this.podcasts[index].podcastId] as Array<HTMLElement>)[0];
221
+ const podcastDescContainer = (this.$refs['descriptionPodcastContainer'+this.podcasts[index].podcastId] as Array<HTMLElement>)[0];
229
222
  if (
230
223
  null !== podcastDesc && null !== podcastDescContainer &&
231
224
  podcastDesc.clientHeight > podcastDescContainer.clientHeight
@@ -172,10 +172,10 @@ export default defineComponent({
172
172
  isTo: false as boolean,
173
173
  fromDate: moment().subtract(10, 'days').toISOString() as string,
174
174
  toDate: moment().toISOString() as string,
175
- isNotVisible: false as boolean,
175
+ isNotVisible: this.includeHidden as boolean,
176
176
  isNotValidate: false as boolean,
177
177
  showFilters: false as boolean,
178
- sort: '' as string,
178
+ sort: this.sortCriteria as string,
179
179
  };
180
180
  },
181
181
 
@@ -268,16 +268,6 @@ export default defineComponent({
268
268
  this.sort = this.sortCriteria;
269
269
  },
270
270
  },
271
-
272
- created() {
273
- if (!this.isEmission) {
274
- this.isNotVisible = this.includeHidden;
275
- }
276
- },
277
-
278
- mounted() {
279
- this.sort = this.sortCriteria;
280
- },
281
271
  methods: {
282
272
  updateFromDate(): void {
283
273
  if (
@@ -13,6 +13,8 @@
13
13
  v-if="!!organisationId"
14
14
  v-model:textInit="keepOrganisation"
15
15
  class="m-3"
16
+ :label="$t('check this box if you want to keep this filter for the rest of your visit')"
17
+ :display-label="false"
16
18
  id-checkbox="organisation-checkbox"
17
19
  @clickAction="onKeepOrganisation"
18
20
  />
@@ -136,9 +138,6 @@ export default defineComponent({
136
138
  async onKeepOrganisation(): Promise<void> {
137
139
  if(!this.organisationId){return}
138
140
  if (!this.keepOrganisation) {
139
- if (this.$route.query.productor !== this.organisationId) {
140
- this.$router.push({ query: { productor: this.organisationId } });
141
- }
142
141
  await this.selectOrganisation(this.organisationId);
143
142
  return;
144
143
  }
@@ -66,12 +66,12 @@
66
66
  {{ live.emission.name }}
67
67
  </router-link>
68
68
  <div
69
- :id="'description-live-container-' + live.podcastId"
69
+ ref="descriptionLiveContainer"
70
70
  class="live-description-container html-wysiwyg-content"
71
71
  >
72
72
  <!-- eslint-disable vue/no-v-html -->
73
73
  <div
74
- :id="'description-live-' + live.podcastId"
74
+ ref="descriptionLive"
75
75
  v-html="urlify(description)"
76
76
  />
77
77
  <!-- eslint-enable -->
@@ -251,12 +251,8 @@ export default defineComponent({
251
251
  if(!this.live){
252
252
  return;
253
253
  }
254
- const liveDesc = document.getElementById(
255
- 'description-live-' + this.live.podcastId
256
- );
257
- const liveDescContainer = document.getElementById(
258
- 'description-live-container-' + this.live.podcastId
259
- );
254
+ const liveDesc = (this.$refs.descriptionLive as HTMLElement);
255
+ const liveDescContainer = (this.$refs.descriptionLiveContainer as HTMLElement);
260
256
  if (
261
257
  null !== liveDesc && null !== liveDescContainer &&
262
258
  liveDesc.clientHeight > liveDescContainer.clientHeight
@@ -15,6 +15,7 @@
15
15
  v-model="organisation"
16
16
  label="name"
17
17
  track-by="id"
18
+ :aria-expanded="false"
18
19
  :placeholder="$t('Type string to filter by organisation')"
19
20
  :options="organisations"
20
21
  :multiple="false"
@@ -4,29 +4,24 @@
4
4
  class="default-multiselect-width organisation-chooser-light"
5
5
  :style="{ width: width }"
6
6
  >
7
- <template v-if="!privateOrganisation">
8
- <select
9
- :id="'organisation_chooser_light' + page"
10
- v-model="actual"
11
- class="mb-0 c-hand border-0"
12
- @change="onOrganisationSelected"
13
- >
14
- <option :value="organisation.id">
15
- {{ organisation.name }}
16
- </option>
17
- <option :value="-1">
18
- {{ $t('No organisation filter') }}
19
- </option>
20
- </select>
21
- <label
22
- :for="'organisation_chooser_light' + page"
23
- class="d-inline"
24
- :title="$t('select productor')"
25
- />
26
- </template>
27
- <template v-else>
28
- {{ organisation.name }}
29
- </template>
7
+ <select
8
+ :id="'organisation_chooser_light' + page"
9
+ v-model="actual"
10
+ class="mb-0 c-hand border-0"
11
+ @change="onOrganisationSelected"
12
+ >
13
+ <option :value="organisation.id">
14
+ {{ organisation.name }}
15
+ </option>
16
+ <option :value="-1">
17
+ {{ $t('No organisation filter') }}
18
+ </option>
19
+ </select>
20
+ <label
21
+ :for="'organisation_chooser_light' + page"
22
+ class="d-inline"
23
+ :title="$t('select productor')"
24
+ />
30
25
  </div>
31
26
  </template>
32
27
 
@@ -48,7 +43,6 @@ export default defineComponent({
48
43
  actual: -1 as number|string,
49
44
  organisation: undefined as Organisation|undefined,
50
45
  init: false as boolean,
51
- privateOrganisation: false as boolean
52
46
  };
53
47
  },
54
48
 
@@ -82,7 +76,6 @@ export default defineComponent({
82
76
  const data = await octopusApi.fetchOrganisation(this.value);
83
77
  this.organisation = data;
84
78
  this.actual = data.id;
85
- this.privateOrganisation = "PUBLIC"!==data.privacy;
86
79
  this.init = true;
87
80
  },
88
81
  },
@@ -14,6 +14,7 @@
14
14
  >
15
15
  <img
16
16
  v-lazy="participant.imageUrl"
17
+ :title="$t('Animator image')"
17
18
  class="img-box-circle"
18
19
  >
19
20
  <div class="participant-name">
@@ -25,12 +26,12 @@
25
26
  >{{ name }}
26
27
  </div>
27
28
  <div
28
- :id="'description-participant-container-' + participant.participantId"
29
+ ref="descriptionParticipantContainer"
29
30
  class="participant-description html-wysiwyg-content"
30
31
  >
31
32
  <!-- eslint-disable vue/no-v-html -->
32
33
  <div
33
- :id="'description-participant-' + participant.participantId"
34
+ ref="descriptionParticipant"
34
35
  v-html="urlify(participant.description|| '')"
35
36
  />
36
37
  <!-- eslint-enable -->
@@ -106,12 +107,8 @@ export default defineComponent({
106
107
  this.hasPodcast();
107
108
  },
108
109
  mounted() {
109
- const participantDesc = document.getElementById(
110
- 'description-participant-' + this.participant.participantId
111
- );
112
- const participantDescContainer = document.getElementById(
113
- 'description-participant-container-' + this.participant.participantId
114
- );
110
+ const participantDesc = (this.$refs.descriptionParticipant as HTMLElement);
111
+ const participantDescContainer = (this.$refs.descriptionParticipantContainer as HTMLElement);
115
112
  if (
116
113
  null !== participantDesc && null !==participantDescContainer &&
117
114
  participantDesc.clientHeight > participantDescContainer.clientHeight
@@ -14,6 +14,7 @@
14
14
  >
15
15
  <img
16
16
  v-lazy="playlist.imageUrl"
17
+ :title="$t('Playlist name image', {name:name})"
17
18
  class="img-box"
18
19
  >
19
20
  </router-link>
@@ -35,12 +36,12 @@
35
36
  >{{ name }}
36
37
  </div>
37
38
  <div
38
- :id="'description-playlist-container-' + playlist.playlistId"
39
+ ref="descriptionPlaylistContainer"
39
40
  class="emission-description html-wysiwyg-content"
40
41
  >
41
42
  <!-- eslint-disable vue/no-v-html -->
42
43
  <div
43
- :id="'description-playlist-' + playlist.playlistId"
44
+ ref="descriptionPlaylist"
44
45
  v-html="urlify(description)"
45
46
  />
46
47
  <!-- eslint-enable -->
@@ -119,12 +120,8 @@ export default defineComponent({
119
120
 
120
121
 
121
122
  mounted() {
122
- const playlistDesc = document.getElementById(
123
- 'description-playlist-' + this.playlist.playlistId
124
- );
125
- const playlistDescContainer = document.getElementById(
126
- 'description-playlist-container-' + this.playlist.playlistId
127
- );
123
+ const playlistDesc = (this.$refs.descriptionPlaylist as HTMLElement);
124
+ const playlistDescContainer = (this.$refs.descriptionPlaylistContainer as HTMLElement);
128
125
  if (
129
126
  null !== playlistDesc && null !== playlistDescContainer &&
130
127
  playlistDesc.clientHeight > playlistDescContainer.clientHeight
@@ -6,6 +6,7 @@
6
6
  {{ title }}
7
7
  <span
8
8
  :id="idPopover"
9
+ role="button"
9
10
  tabindex="-1"
10
11
  class="saooti-help m-0"
11
12
  :title="title"
@@ -6,6 +6,7 @@
6
6
  <img
7
7
  v-lazy="podcast.imageUrl"
8
8
  class="img-box"
9
+ :alt="$t('Episode name image', {name:podcast.title})"
9
10
  >
10
11
  <template v-if="isPodcastmaker">
11
12
  <div
@@ -17,7 +17,7 @@
17
17
  @showDescription="showDescription"
18
18
  />
19
19
  <div
20
- :id="'description-podcast-container-' + podcast.podcastId"
20
+ ref="descriptionPodcastContainer"
21
21
  class="description-podcast-item html-wysiwyg-content"
22
22
  :class="[
23
23
  hover && ''!==description ? 'visible' : 'invisible',
@@ -26,7 +26,7 @@
26
26
  >
27
27
  <!-- eslint-disable vue/no-v-html -->
28
28
  <div
29
- :id="'description-podcast-' + podcast.podcastId"
29
+ ref="descriptionPodcast"
30
30
  v-html="description"
31
31
  />
32
32
  <!-- eslint-enable -->
@@ -89,13 +89,9 @@ export default defineComponent({
89
89
  },
90
90
  },
91
91
 
92
- created() {
93
- const podcastDesc = document.getElementById(
94
- 'description-podcast-' + this.podcast.podcastId
95
- );
96
- const podcastDescContainer = document.getElementById(
97
- 'description-podcast-container-' + this.podcast.podcastId
98
- );
92
+ mounted() {
93
+ const podcastDesc = (this.$refs.descriptionPodcast as HTMLElement);
94
+ const podcastDescContainer = (this.$refs.descriptionPodcastContainer as HTMLElement);
99
95
  if (
100
96
  null !== podcastDesc && null !== podcastDescContainer &&
101
97
  podcastDesc.clientHeight > podcastDescContainer.clientHeight
@@ -13,10 +13,12 @@
13
13
  >
14
14
  <div
15
15
  :id="'tag-list-from-podcast-page'+index"
16
+ role="button"
16
17
  >
17
18
  <img
18
19
  v-if="isOuestFranceTag(tag)"
19
20
  class="ouest-france-logo"
21
+ alt="Logo Ouest France"
20
22
  src="/img/ouest_france_logo.svg"
21
23
  >
22
24
  {{ formateOfTag(tag) }}
@@ -16,6 +16,7 @@
16
16
  class="rubriqueChooser"
17
17
  label="name"
18
18
  track-by="rubriqueId"
19
+ :aria-expanded="false"
19
20
  :placeholder="$t('Type string to filter by rubrics')"
20
21
  :options="rubriques"
21
22
  :multiple="multiple"
@@ -1,7 +1,8 @@
1
1
  <template>
2
2
  <div class="d-inline-flex w-100 mb-3 px-3 hide-phone">
3
3
  <div
4
- id="rubrique-list-container"
4
+ ref="rubriqueListContainer"
5
+ class="rubrique-list-container"
5
6
  >
6
7
  <select
7
8
  v-model="rubriquage"
@@ -18,7 +19,7 @@
18
19
  </select>
19
20
  <button
20
21
  v-for="rubrique in rubriqueDisplay"
21
- :id="'rubrique' + rubrique.rubriqueId"
22
+ :ref="'rubrique' + rubrique.rubriqueId"
22
23
  :key="rubrique.rubriqueId"
23
24
  class="rubrique-item bg-white"
24
25
  @click="addFilter(rubrique)"
@@ -150,12 +151,12 @@ export default defineComponent({
150
151
  this.initRubriques();
151
152
  },
152
153
  resizeWindow(): void {
153
- const rubriqueList = document.getElementById('rubrique-list-container');
154
+ const rubriqueList = (this.$refs.rubriqueListContainer as HTMLElement);
154
155
  if(null === rubriqueList){return}
155
156
  rubriqueList.style.justifyContent = 'flex-start';
156
157
  this.hidenRubriques.length = 0;
157
158
  this.rubriqueDisplay.forEach((element: Rubrique) => {
158
- const el = document.getElementById('rubrique' + element.rubriqueId);
159
+ const el = (this.$refs['rubrique' + element.rubriqueId] as Array<HTMLElement>)[0];
159
160
  if (!el) return;
160
161
  const parent = el.parentElement;
161
162
  if (null !== parent && el.offsetLeft + el.clientWidth <= parent.clientWidth - 20) {
@@ -180,7 +181,7 @@ export default defineComponent({
180
181
 
181
182
  <style lang="scss">
182
183
  .octopus-app{
183
- #rubrique-list-container {
184
+ .rubrique-list-container {
184
185
  display: flex;
185
186
  justify-content: flex-start;
186
187
  align-items: center;
@@ -13,6 +13,7 @@
13
13
  <span
14
14
  v-if="authenticated"
15
15
  id="popover-share-help"
16
+ role="button"
16
17
  tabindex="-1"
17
18
  class="saooti-help ms-2"
18
19
  :title="$t('Help')"
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <div>
3
- <div class="module-box text-center-mobile">
3
+ <div class="module-box text-center-mobile overflow-visible">
4
4
  <h3>{{ $t('Embed') }}</h3>
5
5
  <template v-if="!exclusive && (authenticated || notExclusive)">
6
6
  <div class="d-flex flex-column align-items-center">
@@ -9,10 +9,13 @@
9
9
  type="checkbox"
10
10
  class="form-check-input"
11
11
  :disabled="isDisabled"
12
+ :title="displayLabel?'':label"
13
+ :data-selenium="selenium"
12
14
  @click="emitClickAction"
13
15
  >
14
16
  <label
15
17
  class="form-check-label"
18
+ :class="displayLabel? '': 'd-none'"
16
19
  :for="idCheckbox"
17
20
  >{{ label }}</label>
18
21
  </div>
@@ -28,7 +31,9 @@ export default defineComponent({
28
31
  label: { default: '', type: String },
29
32
  isDisabled: { default: false, type: Boolean },
30
33
  textInit: { default: false, type: Boolean },
31
- isSwitch:{default:false, type:Boolean}
34
+ isSwitch:{default:false, type:Boolean},
35
+ displayLabel: {default:true, type: Boolean},
36
+ selenium: { default: '', type: String },
32
37
  },
33
38
  emits: ['update:textInit', 'clickAction'],
34
39
 
@@ -4,9 +4,9 @@
4
4
  class="d-flex justify-content-center"
5
5
  >
6
6
  <div class="spinner-border me-3" />
7
- <h3 class="mt-2">
7
+ <div class="h3 mt-2">
8
8
  {{ loadingText }}
9
- </h3>
9
+ </div>
10
10
  </div>
11
11
  <div
12
12
  v-else-if="errorText"
@@ -1,9 +1,13 @@
1
1
  <template>
2
- <div class="d-flex flex-column">
2
+ <div
3
+ class="d-flex"
4
+ :class="isColumn? 'flex-column':''"
5
+ >
3
6
  <div
4
7
  v-for="option in options"
5
8
  :key="option.title"
6
9
  class="form-check"
10
+ :class="isColumn? '':'me-2'"
7
11
  >
8
12
  <input
9
13
  :id="idRadio + option.value"
@@ -34,6 +38,7 @@ export default defineComponent({
34
38
  isDisabled: { default: false, type: Boolean },
35
39
  options: { default: ()=>[], type: Array as () => Array<{title: string, value: string|undefined}> },
36
40
  textInit: { default: undefined, type: String },
41
+ isColumn: {default:true, type:Boolean}
37
42
  },
38
43
  emits: ['update:textInit'],
39
44
 
@@ -8,6 +8,7 @@
8
8
  >
9
9
  <img
10
10
  src="/img/caution.png"
11
+ alt="Caution"
11
12
  class="icon-caution"
12
13
  >
13
14
  <div class="alert-text">
@@ -2,6 +2,7 @@
2
2
  <div class="bg-dark">
3
3
  <div
4
4
  id="footer"
5
+ ref="footer"
5
6
  class="d-flex-column p-3 secondary-bg border-top"
6
7
  >
7
8
  <div class="d-flex flex-column flex-grow-1 align-items-end">
@@ -191,7 +192,7 @@ export default defineComponent({
191
192
 
192
193
  methods: {
193
194
  showBlackBorder(hide: boolean): void {
194
- const footerElement = document.getElementById('footer');
195
+ const footerElement = (this.$refs.footer as HTMLElement);
195
196
  if(null===footerElement){return}
196
197
  if (hide) {
197
198
  footerElement.classList.remove('border-round');
@@ -177,14 +177,11 @@ export default defineComponent({
177
177
  this.$emit('update:displayMenu', false);
178
178
  },
179
179
  async onOrganisationSelected(organisation: Organisation|undefined) {
180
- const queries = this.$route.query;
181
180
  if (organisation && organisation.id) {
182
- if (queries.productor !== organisation.id) {
183
- this.$router.push({ query: {...queries, ...{productor: organisation.id} } });
184
- }
185
181
  await this.selectOrganisation(organisation.id);
186
182
  } else {
187
183
  if (this.$route.query.productor) {
184
+ const queries = this.$route.query;
188
185
  this.$router.push({ query: {...queries, ...{productor: undefined} } });
189
186
  }
190
187
  this.$store.commit('filterOrga', { orgaId: undefined });
@@ -238,15 +238,12 @@ export default defineComponent({
238
238
  }
239
239
  },
240
240
  async onOrganisationSelected(organisation: Organisation | undefined): Promise<void> {
241
- const queries = this.$route.query;
242
241
  if (organisation && organisation.id) {
243
- if (this.$route.query.productor !== organisation.id) {
244
- this.$router.push({ query: {...queries, ...{productor: organisation.id} } });
245
- }
246
242
  await this.selectOrganisation(organisation.id);
247
243
  } else {
248
244
  this.organisationId = undefined;
249
245
  if (this.$route.query.productor) {
246
+ const queries = this.$route.query;
250
247
  this.$router.push({ query: { ...queries, ...{productor: undefined} } });
251
248
  }
252
249
  this.$store.commit('filterOrga', { orgaId: undefined });
File without changes
@@ -23,6 +23,8 @@ export const orgaFilter = defineComponent({
23
23
  }),
24
24
  isLive: isLive
25
25
  });
26
+ const queries = this.$route.query;
27
+ this.$router.replace({ query: {...queries, ...{productor: organisationId} } });
26
28
  } catch (error) {
27
29
  this.handle403((error as AxiosError));
28
30
  }
@@ -51,7 +51,7 @@ export const playerLogic = defineComponent({
51
51
  this.audioUrlToPlay = this.audioUrl;
52
52
  }
53
53
  if(!this.podcast){return;}
54
- const response = await octopusApi.fetchPodcastDownloadUrl("podcast/download/register/"+this.podcast.podcastId+".mp3"+ this.audioUrl);
54
+ const response = await octopusApi.fetchPodcastDownloadUrl("podcast/download/register/"+ this.audioUrl);
55
55
  this.setDownloadId(response.downloadId.toString());
56
56
  this.audioUrlToPlay = response.location;
57
57
  },
@@ -23,6 +23,7 @@
23
23
  :is-search-bar="isProductorSearch"
24
24
  :sort-criteria="sortEmission"
25
25
  :organisation-id="organisationId"
26
+ :includeHidden="includeHidden"
26
27
  @updateCategory="updateCategory"
27
28
  @updateRubriquageFilter="updateRubriquageFilter"
28
29
  @updateMonetization="updateMonetization"
@@ -43,7 +44,6 @@
43
44
  :sort="sortEmission"
44
45
  :include-hidden="includeHidden"
45
46
  :iab-id="iabId"
46
-
47
47
  :rubrique-id="rubriqueId"
48
48
  :rubriquage-id="rubriquageId"
49
49
  :no-rubriquage-id="noRubriquageId"
@@ -106,6 +106,28 @@ export default defineComponent({
106
106
  titlePage(): string|undefined {
107
107
  return state.emissionsPage.titlePage;
108
108
  },
109
+ authenticated(): boolean {
110
+ return (state.generalParameters.authenticated as boolean);
111
+ },
112
+ myOrganisationId(): string|undefined {
113
+ return state.generalParameters.organisationId;
114
+ },
115
+ organisationRight(): boolean {
116
+ if (
117
+ (this.authenticated && this.myOrganisationId === this.organisationId) ||
118
+ state.generalParameters.isAdmin
119
+ )
120
+ return true;
121
+ return false;
122
+ },
123
+ filterOrga(): string|undefined {
124
+ return this.$store.state.filter.organisationId;
125
+ },
126
+ organisation(): string|undefined {
127
+ if (this.organisationId) return this.organisationId;
128
+ if (this.filterOrga) return this.filterOrga;
129
+ return undefined;
130
+ },
109
131
  },
110
132
 
111
133
  created() {
@@ -117,6 +139,9 @@ export default defineComponent({
117
139
  } else if (this.$store.state.filter.organisationId) {
118
140
  this.organisationId = this.$store.state.filter.organisationId;
119
141
  }
142
+ if (this.organisation && this.organisationRight) {
143
+ this.includeHidden = true;
144
+ }
120
145
  if(this.rubriqueFilter.length){
121
146
  this.updateRubriquageFilter(this.rubriqueFilter);
122
147
  }
@@ -16,6 +16,7 @@
16
16
  >
17
17
  <img
18
18
  v-lazy="participant.imageUrl"
19
+ :title="$t('Animator image')"
19
20
  class="img-box-circle mb-3"
20
21
  >
21
22
  <h2 class="text-capitalize">
@@ -35,6 +35,7 @@
35
35
  :reset-rubriquage="resetRubriquage"
36
36
  :is-search-bar="isProductorSearch"
37
37
  :sort-criteria="sortCriteria"
38
+ :includeHidden="includeHidden"
38
39
  :organisation-id="organisationId"
39
40
  @updateCategory="updateCategory"
40
41
  @updateRubriquageFilter="updateRubriquageFilter"
package/src/locale/en.ts CHANGED
@@ -70,7 +70,7 @@ export default{
70
70
  'Episode name image': "Episode {name} image",
71
71
  'More episodes of this emission': "More episodes from this series",
72
72
  'More episodes of this category : {name}': "More episodes from this category : {name}",
73
- 'All podcast emission button': "All podcast from this series",
73
+ 'All podcast emission button': "All podcasts from this series",
74
74
  Duration: 'Duration : {duration}',
75
75
  Animator: 'Host',
76
76
  'No category filter': 'No category filter',
@@ -6,6 +6,8 @@ $font-family-sans-serif: 'Roboto', sans-serif;
6
6
  $font-size-base: 0.9rem;
7
7
  $line-height-base: 1.6;
8
8
  $primary: #32815C;
9
+ $secondary: #636C73;
10
+ $danger: #E22C27;
9
11
 
10
12
  // Colors
11
13
  $blue: #3490dc;