@saooti/octopus-sdk 30.0.6 → 30.0.10

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 (87) hide show
  1. package/README.md +5 -1
  2. package/index.ts +13 -2
  3. package/package.json +1 -1
  4. package/src/assets/bootstrap-diff.scss +17 -25
  5. package/src/assets/form.scss +7 -37
  6. package/src/assets/general.scss +56 -170
  7. package/src/assets/live.scss +39 -0
  8. package/src/assets/modal.scss +14 -18
  9. package/src/assets/multiselect.scss +30 -77
  10. package/src/assets/octopus-library.scss +1 -0
  11. package/src/assets/share.scss +149 -267
  12. package/src/assets/transition.scss +95 -1
  13. package/src/components/display/categories/CategoryChooser.vue +1 -1
  14. package/src/components/display/categories/CategoryList.vue +2 -4
  15. package/src/components/display/comments/CommentInput.vue +2 -2
  16. package/src/components/display/comments/CommentItem.vue +6 -6
  17. package/src/components/display/comments/CommentParentInfo.vue +1 -1
  18. package/src/components/display/comments/CommentPlayer.vue +1 -1
  19. package/src/components/display/edit/EditCommentBox.vue +8 -16
  20. package/src/components/display/emission/EmissionChooser.vue +1 -3
  21. package/src/components/display/emission/EmissionInlineList.vue +12 -3
  22. package/src/components/display/emission/EmissionItem.vue +22 -64
  23. package/src/components/display/emission/EmissionList.vue +59 -68
  24. package/src/components/display/emission/EmissionPlayerItem.vue +10 -9
  25. package/src/components/display/filter/AdvancedSearch.vue +50 -146
  26. package/src/components/display/filter/CategoryFilter.vue +9 -13
  27. package/src/components/display/filter/MonetizableFilter.vue +3 -5
  28. package/src/components/display/filter/ProductorSearch.vue +20 -40
  29. package/src/components/display/filter/RubriqueChoice.vue +6 -8
  30. package/src/components/display/filter/RubriqueFilter.vue +8 -13
  31. package/src/components/display/live/CountDown.vue +4 -2
  32. package/src/components/display/live/LiveHorizontalList.vue +1 -1
  33. package/src/components/display/live/LiveItem.vue +4 -4
  34. package/src/components/display/live/LiveList.vue +84 -214
  35. package/src/components/display/organisation/OrganisationChooser.vue +5 -23
  36. package/src/components/display/organisation/OrganisationChooserLight.vue +8 -2
  37. package/src/components/display/participant/ParticipantItem.vue +7 -19
  38. package/src/components/display/participant/ParticipantList.vue +39 -52
  39. package/src/components/display/playlist/PlaylistItem.vue +2 -2
  40. package/src/components/display/playlist/PlaylistList.vue +8 -14
  41. package/src/components/display/playlist/PodcastList.vue +21 -40
  42. package/src/components/display/podcasts/AnimatorsItem.vue +0 -1
  43. package/src/components/display/podcasts/ParticipantDescription.vue +4 -16
  44. package/src/components/display/podcasts/PodcastFilterList.vue +20 -63
  45. package/src/components/display/podcasts/PodcastImage.vue +27 -84
  46. package/src/components/display/podcasts/PodcastInlineList.vue +14 -36
  47. package/src/components/display/podcasts/PodcastItem.vue +5 -5
  48. package/src/components/display/podcasts/PodcastList.vue +7 -14
  49. package/src/components/display/podcasts/PodcastModuleBox.vue +9 -28
  50. package/src/components/display/podcasts/TagList.vue +2 -3
  51. package/src/components/display/rubriques/RubriqueChooser.vue +2 -2
  52. package/src/components/display/rubriques/RubriqueList.vue +5 -25
  53. package/src/components/display/sharing/PlayerParameters.vue +30 -71
  54. package/src/components/display/sharing/ShareButtons.vue +21 -45
  55. package/src/components/display/sharing/ShareDistribution.vue +1 -7
  56. package/src/components/display/sharing/SharePlayer.vue +10 -19
  57. package/src/components/display/sharing/SharePlayerColors.vue +4 -8
  58. package/src/components/display/sharing/SharePlayerTypes.vue +1 -2
  59. package/src/components/display/sharing/SubscribeButtons.vue +2 -4
  60. package/src/components/form/ClassicCheckbox.vue +61 -0
  61. package/src/components/form/ClassicLoading.vue +28 -0
  62. package/src/components/form/ClassicRadio.vue +61 -0
  63. package/src/components/form/ClassicSearch.vue +82 -0
  64. package/src/components/misc/ErrorMessage.vue +4 -1
  65. package/src/components/misc/Footer.vue +26 -35
  66. package/src/components/misc/HomeDropdown.vue +42 -91
  67. package/src/components/misc/LeftMenu.vue +108 -141
  68. package/src/components/misc/Player.vue +15 -29
  69. package/src/components/misc/PlayerButtons.vue +14 -37
  70. package/src/components/misc/PlayerClockAndTimeline.vue +1 -1
  71. package/src/components/misc/PlayerProgressBar.vue +15 -50
  72. package/src/components/misc/TopBar.vue +140 -222
  73. package/src/components/misc/modal/NewsletterModal.vue +13 -27
  74. package/src/components/pages/Category.vue +3 -8
  75. package/src/components/pages/Emission.vue +12 -24
  76. package/src/components/pages/Emissions.vue +8 -17
  77. package/src/components/pages/Home.vue +1 -3
  78. package/src/components/pages/Lives.vue +1 -4
  79. package/src/components/pages/Participant.vue +19 -27
  80. package/src/components/pages/Participants.vue +7 -15
  81. package/src/components/pages/Playlist.vue +16 -29
  82. package/src/components/pages/Playlists.vue +1 -11
  83. package/src/components/pages/Podcast.vue +16 -30
  84. package/src/components/pages/Podcasts.vue +9 -23
  85. package/src/components/pages/Search.vue +26 -64
  86. package/src/sass/_variables.scss +0 -1
  87. package/src/store/class/general/media.ts +1 -1
@@ -131,7 +131,6 @@ export default defineComponent({
131
131
  data() {
132
132
  return {
133
133
  emission: undefined as Emission|undefined,
134
- error: false as boolean,
135
134
  rss: '' as string,
136
135
  };
137
136
  },
@@ -143,12 +142,7 @@ export default defineComponent({
143
142
 
144
143
  methods: {
145
144
  async getEmissionDetails(): Promise<void> {
146
- try {
147
- const data = await octopusApi.fetchEmission(this.emissionId);
148
- this.emission = data;
149
- } catch {
150
- this.error = true;
151
- }
145
+ this.emission = await octopusApi.fetchEmission(this.emissionId);
152
146
  },
153
147
  getRSS(): void {
154
148
  if (!this.$props.emissionId || this.$props.emissionId <= 0) return;
@@ -18,7 +18,7 @@
18
18
  frameborder="0"
19
19
  :width="iFrameWidth"
20
20
  :height="iFrameHeight"
21
- class="maxIframe"
21
+ class="max-iframe"
22
22
  />
23
23
  <div class="d-flex flex-column">
24
24
  <button
@@ -40,23 +40,12 @@
40
40
  v-model:color="color"
41
41
  v-model:theme="theme"
42
42
  />
43
- <div
43
+ <ClassicCheckbox
44
44
  v-if="isPodcastNotVisible || playlist"
45
- class="d-flex align-items-center flex-wrap"
46
- >
47
- <div>
48
- <input
49
- id="isVisibleCheckbox"
50
- v-model="isVisible"
51
- type="checkbox"
52
- class="form-check-input"
53
- >
54
- <label
55
- class="form-check-label me-2"
56
- for="isVisibleCheckbox"
57
- >{{ titleStillAvailable }}</label>
58
- </div>
59
- </div>
45
+ v-model:textInit="isVisible"
46
+ id-checkbox="is-visible-checkbox"
47
+ :label="titleStillAvailable"
48
+ />
60
49
  </div>
61
50
  <PlayerParameters
62
51
  v-if="isPlayerParameter"
@@ -99,12 +88,14 @@ const ShareModalPlayer = defineAsyncComponent(() => import('../../misc/modal/Sha
99
88
  const PlayerParameters = defineAsyncComponent(() => import('./PlayerParameters.vue'));
100
89
  const SharePlayerTypes = defineAsyncComponent(() => import('./SharePlayerTypes.vue'));
101
90
  const SharePlayerColors = defineAsyncComponent(() => import('./SharePlayerColors.vue'));
91
+ const ClassicCheckbox = defineAsyncComponent(() => import('../../form/ClassicCheckbox.vue'));
102
92
  export default defineComponent({
103
93
  components: {
104
94
  ShareModalPlayer,
105
95
  SharePlayerColors,
106
96
  PlayerParameters,
107
- SharePlayerTypes
97
+ SharePlayerTypes,
98
+ ClassicCheckbox
108
99
  },
109
100
 
110
101
  props: {
@@ -388,7 +379,7 @@ export default defineComponent({
388
379
  box-shadow: 2px 8px 4px -6px hsla(0, 0%, 0%, 0.3);
389
380
  }
390
381
  }
391
- .maxIframe {
382
+ .max-iframe {
392
383
  max-width: 300px;
393
384
  }
394
385
  </style>
@@ -1,9 +1,7 @@
1
1
  <template>
2
- <div class="d-flex justify-content-around mt-3 flex-grow w-100">
3
- <div class="d-flex flex-column align-items-center flex-shrink me-3">
4
- <div class="fw-600">
5
- {{ $t('Choose color') }}
6
- </div>
2
+ <div class="d-flex justify-content-around mt-3 w-100">
3
+ <div class="d-flex flex-column align-items-center flex-shrink-0 me-3">
4
+ <div>{{ $t('Choose color') }}</div>
7
5
  <VSwatches
8
6
  v-model="internColor"
9
7
  class="c-hand input-no-outline"
@@ -14,9 +12,7 @@
14
12
  />
15
13
  </div>
16
14
  <div class="d-flex flex-column align-items-center">
17
- <div class="fw-600">
18
- {{ $t('Choose theme') }}
19
- </div>
15
+ <div>{{ $t('Choose theme') }}</div>
20
16
  <VSwatches
21
17
  v-model="internTheme"
22
18
  class="c-hand input-no-outline"
@@ -2,13 +2,12 @@
2
2
  <div class="d-flex flex-column">
3
3
  <label
4
4
  for="iframe-select"
5
- class="d-inline"
6
5
  aria-label="select miniplayer"
7
6
  />
8
7
  <select
9
8
  id="iframe-select"
10
9
  :value="iFrameModel"
11
- class="frame-select input-no-outline"
10
+ class="input-no-outline"
12
11
  @change="$emit('update:iFrameModel',$event.target.value)"
13
12
  >
14
13
  <option value="default">
@@ -1,7 +1,7 @@
1
1
  <template>
2
- <div class="module-box flex-no-grow">
2
+ <div class="module-box flex-grow-0">
3
3
  <div class="d-flex align-items-center mb-3">
4
- <h3 class="mb-0 share-button-title">
4
+ <h3 class="mb-0">
5
5
  {{ $t('Subscribe emission') }}
6
6
  </h3>
7
7
  </div>
@@ -197,5 +197,3 @@ export default defineComponent({
197
197
  },
198
198
  })
199
199
  </script>
200
-
201
- <style lang="scss"></style>
@@ -0,0 +1,61 @@
1
+ <template>
2
+ <div
3
+ class="form-check"
4
+ :class="isSwitch?'form-switch':''"
5
+ >
6
+ <input
7
+ :id="idCheckbox"
8
+ v-model="textValue"
9
+ type="checkbox"
10
+ class="form-check-input"
11
+ :disabled="isDisabled"
12
+ @click="emitClickAction"
13
+ >
14
+ <label
15
+ class="form-check-label"
16
+ :for="idCheckbox"
17
+ >{{ label }}</label>
18
+ </div>
19
+ </template>
20
+
21
+ <script lang="ts">
22
+ import { defineComponent } from 'vue';
23
+ export default defineComponent({
24
+ name: 'ClassicCheckbox',
25
+
26
+ props: {
27
+ idCheckbox: { default: '', type: String },
28
+ label: { default: '', type: String },
29
+ isDisabled: { default: false, type: Boolean },
30
+ textInit: { default: false, type: Boolean },
31
+ isSwitch:{default:false, type:Boolean}
32
+ },
33
+ emits: ['update:textInit', 'clickAction'],
34
+
35
+ data() {
36
+ return {
37
+ textValue: false as boolean,
38
+ };
39
+ },
40
+ watch: {
41
+ textValue(){
42
+ if(this.textInit !== this.textValue){
43
+ this.$emit('update:textInit', this.textValue)
44
+ }
45
+ },
46
+ textInit(){
47
+ if(this.textInit !== this.textValue){
48
+ this.textValue =this.textInit;
49
+ }
50
+ }
51
+ },
52
+ mounted(){
53
+ this.textValue = this.textInit;
54
+ },
55
+ methods:{
56
+ emitClickAction():void{
57
+ this.$emit('clickAction');
58
+ }
59
+ }
60
+ });
61
+ </script>
@@ -0,0 +1,28 @@
1
+ <template>
2
+ <div
3
+ v-if="loadingText"
4
+ class="d-flex justify-content-center"
5
+ >
6
+ <div class="spinner-border me-3" />
7
+ <h3 class="mt-2">
8
+ {{ loadingText }}
9
+ </h3>
10
+ </div>
11
+ <div
12
+ v-else-if="errorText"
13
+ class="text-center"
14
+ >
15
+ <h3>{{ errorText }}</h3>
16
+ </div>
17
+ </template>
18
+
19
+ <script lang="ts">
20
+ import { defineComponent } from 'vue';
21
+ export default defineComponent({
22
+ name: "ClassicLoading",
23
+ props: {
24
+ loadingText: { default: undefined, type: String},
25
+ errorText: { default: undefined, type: String},
26
+ }
27
+ })
28
+ </script>
@@ -0,0 +1,61 @@
1
+ <template>
2
+ <div class="d-flex flex-column">
3
+ <div
4
+ v-for="option in options"
5
+ :key="option.title"
6
+ class="form-check"
7
+ >
8
+ <input
9
+ :id="idRadio + option.value"
10
+ v-model="textValue"
11
+ class="form-check-input"
12
+ type="radio"
13
+ :name="idRadio"
14
+ :value="option.value"
15
+ :disabled="isDisabled"
16
+ >
17
+ <label
18
+ class="form-check-label"
19
+ :for="idRadio + option.value"
20
+ >{{
21
+ option.title
22
+ }}</label>
23
+ </div>
24
+ </div>
25
+ </template>
26
+
27
+ <script lang="ts">
28
+ import { defineComponent } from 'vue';
29
+ export default defineComponent({
30
+ name: 'ClassicRadio',
31
+
32
+ props: {
33
+ idRadio: { default: '', type: String },
34
+ isDisabled: { default: false, type: Boolean },
35
+ options: { default: ()=>[], type: Array as () => Array<{title: string, value: string|undefined}> },
36
+ textInit: { default: undefined, type: String },
37
+ },
38
+ emits: ['update:textInit'],
39
+
40
+ data() {
41
+ return {
42
+ textValue: undefined as string|undefined,
43
+ };
44
+ },
45
+ watch: {
46
+ textValue(){
47
+ if(this.textInit !== this.textValue){
48
+ this.$emit('update:textInit', this.textValue)
49
+ }
50
+ },
51
+ textInit(){
52
+ if(this.textInit !== this.textValue){
53
+ this.textValue =this.textInit;
54
+ }
55
+ }
56
+ },
57
+ mounted(){
58
+ this.textValue = this.textInit;
59
+ }
60
+ });
61
+ </script>
@@ -0,0 +1,82 @@
1
+ <template>
2
+ <div class="position-relative champs-searchPage static-height">
3
+ <input
4
+ :id="idSearch"
5
+ ref="search"
6
+ v-model="textValue"
7
+ type="text"
8
+ class="search-input w-100 p-2 input-no-outline"
9
+ :placeholder="label"
10
+ :autofocus="autofocus"
11
+ >
12
+ <label
13
+ :for="idSearch"
14
+ :aria-label="label"
15
+ />
16
+ <div
17
+ v-if="!textValue"
18
+ class="saooti-search-bounty search-icon-container"
19
+ />
20
+ <div
21
+ v-else
22
+ class="saooti-cross search-icon-container c-hand"
23
+ @click="textValue = ''"
24
+ />
25
+ </div>
26
+ </template>
27
+
28
+ <script lang="ts">
29
+ import { defineComponent } from 'vue';
30
+ export default defineComponent({
31
+ name: 'ClassicSearch',
32
+ props: {
33
+ idSearch: { default: '', type: String },
34
+ label: { default: '', type: String },
35
+ textInit: { default: '', type: String },
36
+ autofocus: { default: false, type: Boolean },
37
+ },
38
+
39
+ emits: ['update:textInit'],
40
+
41
+ data() {
42
+ return {
43
+ textValue: '' as string,
44
+ };
45
+ },
46
+ watch: {
47
+ textValue(){
48
+ if(this.textInit !== this.textValue){
49
+ this.$emit('update:textInit', this.textValue)
50
+ }
51
+ },
52
+ textInit(){
53
+ if(this.textInit !== this.textValue){
54
+ this.textValue =this.textInit;
55
+ }
56
+ }
57
+ },
58
+ mounted(){
59
+ this.textValue = this.textInit;
60
+ }
61
+ });
62
+ </script>
63
+ <style lang="scss" scoped>
64
+ .champs-searchPage input {
65
+ border: 2px solid #dee2e6;
66
+ border-radius: 10px;
67
+ margin: 0 !important;
68
+ }
69
+ .saooti-search-bounty,
70
+ .saooti-cross {
71
+ font-size: 1rem;
72
+ }
73
+ .search-icon-container {
74
+ position: absolute;
75
+ top: 0;
76
+ bottom: 0;
77
+ right: 0;
78
+ display: flex;
79
+ align-items: center;
80
+ margin: 1rem;
81
+ }
82
+ </style>
@@ -4,7 +4,7 @@
4
4
  class="d-flex"
5
5
  >
6
6
  <div
7
- class="d-flex align-items-center bg-error-message p-2 rounded mt-1 mb-1"
7
+ class="d-flex align-items-center bg-error-message p-2 rounded my-1"
8
8
  >
9
9
  <img
10
10
  src="/img/caution.png"
@@ -31,4 +31,7 @@ export default defineComponent({
31
31
  .bg-error-message {
32
32
  background-color: #ffd84a9c;
33
33
  }
34
+ .alert-text{
35
+ color: darkred;
36
+ }
34
37
  </style>
@@ -2,9 +2,9 @@
2
2
  <div class="bg-dark">
3
3
  <div
4
4
  id="footer"
5
- class="d-flex p-3 secondary-bg border-top footer-display-phone"
5
+ class="d-flex-column p-3 secondary-bg border-top"
6
6
  >
7
- <div class="d-flex flex-grow align-items-end flex-column">
7
+ <div class="d-flex flex-column flex-grow-1 align-items-end">
8
8
  <div class="d-flex flex-column">
9
9
  <router-link
10
10
  :to="{
@@ -13,7 +13,7 @@
13
13
  iabId: $store.state.filter.iab ? $store.state.filter.iab.id : undefined,
14
14
  rubriquesId: rubriqueQueryParam },
15
15
  }"
16
- class="linkHover"
16
+ class="link-hover"
17
17
  >
18
18
  {{ $t('Home') }}
19
19
  </router-link>
@@ -24,7 +24,7 @@
24
24
  iabId: $store.state.filter.iab ? $store.state.filter.iab.id : undefined,
25
25
  rubriquesId: rubriqueQueryParam},
26
26
  }"
27
- class="linkHover"
27
+ class="link-hover"
28
28
  >
29
29
  {{ $t('Podcasts') }}
30
30
  </router-link>
@@ -34,7 +34,7 @@
34
34
  query: { productor: $store.state.filter.organisationId,
35
35
  iabId: $store.state.filter.iab ? $store.state.filter.iab.id : undefined },
36
36
  }"
37
- class="linkHover"
37
+ class="link-hover"
38
38
  >
39
39
  {{ $t('Emissions') }}
40
40
  </router-link>
@@ -44,7 +44,7 @@
44
44
  name: 'productors',
45
45
  query: { productor: $store.state.filter.organisationId },
46
46
  }"
47
- class="linkHover"
47
+ class="link-hover"
48
48
  >
49
49
  {{ $t('Productors') }}
50
50
  </router-link>
@@ -53,23 +53,23 @@
53
53
  name: 'participants',
54
54
  query: { productor: $store.state.filter.organisationId },
55
55
  }"
56
- class="linkHover"
56
+ class="link-hover"
57
57
  >
58
58
  {{ $t('Speakers') }}
59
59
  </router-link>
60
60
  </div>
61
61
  </div>
62
- <hr class="divided-line show-phone">
62
+ <hr class="show-phone">
63
63
  <div
64
64
  v-if="!isPodcastmaker"
65
- class="d-flex flex-grow align-items-center flex-column"
65
+ class="d-flex flex-grow-1 align-items-center flex-column"
66
66
  >
67
67
  <div class="d-flex flex-column">
68
68
  <div class="text-dark">
69
69
  &copy; Saooti 2019
70
70
  </div>
71
71
  <router-link
72
- class="linkHover"
72
+ class="link-hover"
73
73
  to="/main/pub/contact"
74
74
  >
75
75
  {{
@@ -77,7 +77,7 @@
77
77
  }}
78
78
  </router-link>
79
79
  <router-link
80
- class="linkHover"
80
+ class="link-hover"
81
81
  to="/main/pub/cgu"
82
82
  >
83
83
  {{
@@ -85,7 +85,7 @@
85
85
  }}
86
86
  </router-link>
87
87
  <router-link
88
- class="linkHover"
88
+ class="link-hover"
89
89
  to="/main/pub/libraries"
90
90
  >
91
91
  {{
@@ -93,15 +93,15 @@
93
93
  }}
94
94
  </router-link>
95
95
  <a
96
- class="linkHover c-hand"
96
+ class="link-hover c-hand"
97
97
  @click="changeLanguage"
98
98
  >{{
99
99
  $t('Change locale')
100
100
  }}</a>
101
101
  </div>
102
102
  </div>
103
- <hr class="divided-line show-phone">
104
- <div class="flex-grow">
103
+ <hr class="show-phone">
104
+ <div class="flex-grow-1">
105
105
  <a
106
106
  href="https://www.acpm.fr/L-ACPM/Certifications-et-Labels/Les-Podcasts"
107
107
  rel="noopener"
@@ -118,12 +118,12 @@
118
118
  </div>
119
119
  <div
120
120
  v-if="isPodcastmaker && isContactLink"
121
- class="d-flex flex-grow align-items-center flex-column"
121
+ class="d-flex flex-column flex-grow-1 align-items-center"
122
122
  >
123
123
  <div class="d-flex flex-column">
124
124
  <a
125
125
  id="footer-contact"
126
- class="linkHover"
126
+ class="link-hover"
127
127
  :href="isContactLink"
128
128
  rel="noopener"
129
129
  target="_blank"
@@ -201,33 +201,24 @@ export default defineComponent({
201
201
  </script>
202
202
 
203
203
  <style lang="scss">
204
- #footer {
204
+ #footer{
205
205
  font-size: 0.7rem;
206
- a {
207
- color: #666;
208
- }
209
206
  .acpm_image {
210
207
  width: 70px;
211
208
  height: 70px;
212
209
  }
213
- }
214
- .border-round {
215
- border-radius: 0 0 2rem 2rem;
216
- }
217
- /** PHONES*/
218
- @media (max-width: 960px) {
219
- .footer-display-phone {
220
- flex-direction: column;
210
+ a{
211
+ color: #666;
212
+ }
213
+ .border-round {
214
+ border-radius: 0 0 2rem 2rem;
215
+ }
216
+ /** PHONES*/
217
+ @media (max-width: 960px) {
221
218
  .align-items-center,
222
219
  .align-items-end {
223
220
  align-items: flex-start !important;
224
221
  }
225
222
  }
226
- .container {
227
- font-size: 0.6rem;
228
- .pages {
229
- margin-right: 3rem;
230
- }
231
- }
232
223
  }
233
224
  </style>