@saooti/octopus-sdk 33.1.3 → 33.2.0

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/README.md +1 -0
  2. package/package.json +1 -3
  3. package/src/App.vue +1 -1
  4. package/src/assets/_utilities.scss +522 -0
  5. package/src/assets/bootstrap.scss +181 -0
  6. package/src/assets/form.scss +0 -20
  7. package/src/assets/general.scss +1 -0
  8. package/src/assets/modal.scss +49 -8
  9. package/src/assets/octopus-library.scss +2 -3
  10. package/src/components/display/categories/CategoryChooser.vue +1 -1
  11. package/src/components/display/categories/CategoryFilter.vue +60 -46
  12. package/src/components/display/categories/CategoryList.vue +22 -19
  13. package/src/components/display/comments/AddCommentModal.vue +60 -67
  14. package/src/components/display/comments/CommentBasicView.vue +2 -3
  15. package/src/components/display/emission/EmissionItem.vue +2 -1
  16. package/src/components/display/emission/EmissionPlayerItem.vue +0 -11
  17. package/src/components/display/participant/ParticipantItem.vue +2 -1
  18. package/src/components/display/playlist/PlaylistItem.vue +2 -1
  19. package/src/components/display/podcasts/PodcastInlineList.vue +1 -1
  20. package/src/components/display/podcasts/PodcastInlineListClassic.vue +1 -1
  21. package/src/components/display/podcasts/PodcastInlineListTemplate.vue +6 -2
  22. package/src/components/display/podcasts/PodcastPlayBar.vue +9 -35
  23. package/src/components/display/podcasts/TagList.vue +0 -2
  24. package/src/components/display/rubriques/RubriqueList.vue +25 -20
  25. package/src/components/display/sharing/PlayerParameters.vue +76 -99
  26. package/src/components/display/sharing/ShareButtons.vue +3 -5
  27. package/src/components/display/sharing/ShareButtonsIntern.vue +1 -1
  28. package/src/components/display/sharing/ShareDistribution.vue +11 -10
  29. package/src/components/display/sharing/SubscribeButtons.vue +1 -1
  30. package/src/components/form/ClassicLoading.vue +5 -1
  31. package/src/components/misc/Accordion.vue +48 -0
  32. package/src/components/misc/ErrorMessage.vue +2 -1
  33. package/src/components/misc/HomeDropdown.vue +66 -63
  34. package/src/components/misc/Nav.vue +92 -0
  35. package/src/components/misc/Popover.vue +137 -98
  36. package/src/components/misc/ProgressBar.vue +96 -0
  37. package/src/components/misc/Spinner.vue +26 -0
  38. package/src/components/misc/modal/ClassicModal.vue +141 -0
  39. package/src/components/misc/modal/ClipboardModal.vue +25 -40
  40. package/src/components/misc/modal/MessageModal.vue +45 -60
  41. package/src/components/misc/modal/NewsletterModal.vue +84 -92
  42. package/src/components/misc/modal/QrCodeModal.vue +19 -36
  43. package/src/components/misc/modal/ShareModalPlayer.vue +69 -133
  44. package/src/components/misc/player/Player.vue +0 -6
  45. package/src/components/misc/player/PlayerCompact.vue +4 -3
  46. package/src/components/misc/player/PlayerLarge.vue +12 -8
  47. package/src/components/misc/player/PlayerProgressBar.vue +10 -48
  48. package/src/components/pages/Podcast.vue +1 -1
  49. package/src/assets/bootstrap-diff.scss +0 -195
@@ -251,17 +251,6 @@ export default defineComponent({
251
251
  height: min-content;
252
252
  border-radius: 0.8rem;
253
253
  overflow: hidden;
254
- .progress{
255
- height: 6px;
256
- }
257
- .progress-bar-cursor{
258
- width: 10px;
259
- height: 10px;
260
- border-radius: 50%;
261
- background: black;
262
- align-self: center;
263
- position: absolute;
264
- }
265
254
  .emission-item-border-color {
266
255
  border-color: #ddd;
267
256
  }
@@ -22,7 +22,8 @@
22
22
  <span
23
23
  v-if="!activeParticipant && !isPodcastmaker && editRight"
24
24
  :title="$t('Participant have not podcasts')"
25
- class="saooti-warning text-danger me-1"/>
25
+ class="saooti-warning text-danger me-1"
26
+ />
26
27
  <div class="participant-name">
27
28
  {{ name }}
28
29
  </div>
@@ -23,7 +23,8 @@
23
23
  <span
24
24
  v-if="!activePlaylist && !isPodcastmaker"
25
25
  :title="$t('Playlist have not podcasts')"
26
- class="saooti-warning text-danger me-1"/>
26
+ class="saooti-warning text-danger me-1"
27
+ />
27
28
  <div class="emission-name">
28
29
  {{ name }}
29
30
  </div>
@@ -14,7 +14,7 @@
14
14
  :rubriquage-id="rubriquageId"
15
15
  :no-rubriquage-id="noRubriquageId"
16
16
  :query="query"
17
- :podcastId="podcastId"
17
+ :podcast-id="podcastId"
18
18
  @update:isArrow="$emit('update:isArrow',$event)"
19
19
  />
20
20
  <PodcastSwiperList
@@ -12,7 +12,7 @@
12
12
  :previous-available="previousAvailable"
13
13
  :next-available="nextAvailable"
14
14
  :no-rubriquage-id="noRubriquageId"
15
- :podcastId="podcastId"
15
+ :podcast-id="podcastId"
16
16
  @sortChrono="sortChrono"
17
17
  @sortPopular="sortPopular"
18
18
  @displayPrevious="displayPrevious"
@@ -4,7 +4,8 @@
4
4
  >
5
5
  <div
6
6
  class="d-flex align-items-center"
7
- :class="podcastId?'mb-4':'mb-2'">
7
+ :class="podcastId?'mb-4':'mb-2'"
8
+ >
8
9
  <h2 class="mb-0">
9
10
  {{ title }}
10
11
  </h2>
@@ -16,7 +17,10 @@
16
17
  @click="handleSeeMoreButton"
17
18
  />
18
19
  </div>
19
- <div class="d-flex justify-content-between" v-if="!podcastId">
20
+ <div
21
+ v-if="!podcastId"
22
+ class="d-flex justify-content-between"
23
+ >
20
24
  <div class="d-flex">
21
25
  <button
22
26
  class="btn btn-underline"
@@ -7,23 +7,11 @@
7
7
  {{ playedTime }}
8
8
  </div>
9
9
  <div class="position-relative flex-grow-1">
10
- <div
11
- class="progress flex-grow-1 c-hand"
10
+ <ProgressBar
11
+ :main-progress="percentProgress"
12
+ class="medium"
12
13
  @mouseup="seekTo"
13
- >
14
- <div
15
- class="progress-bar primary-bg"
16
- role="progressbar"
17
- aria-valuenow="0"
18
- aria-valuemin="0"
19
- aria-valuemax="100"
20
- :style="'width: ' + percentProgress + '%'"
21
- />
22
- <div
23
- class="progress-bar-cursor"
24
- :style="'left:' + percentProgress + '%'"
25
- />
26
- </div>
14
+ />
27
15
  </div>
28
16
  <div class="ms-2">
29
17
  {{ totalTime }}
@@ -32,12 +20,16 @@
32
20
  </template>
33
21
 
34
22
  <script lang="ts">
23
+ import ProgressBar from '../../misc/ProgressBar.vue';
35
24
  import DurationHelper from '../../../helper/duration';
36
25
  import displayMethods from '../../mixins/displayMethods';
37
26
  import { state } from '../../../store/paramStore';
38
27
  import { defineComponent } from 'vue'
39
28
  export default defineComponent({
40
29
  name: 'PodcastPlayBar',
30
+ components:{
31
+ ProgressBar
32
+ },
41
33
  mixins: [displayMethods],
42
34
  props: {
43
35
  podcastId: { default: undefined, type: Number},
@@ -80,22 +72,4 @@ export default defineComponent({
80
72
  }
81
73
  },
82
74
  })
83
- </script>
84
-
85
- <style lang="scss">
86
- .octopus-app{
87
- .podcast-play-bar {
88
- .progress{
89
- height: 6px;
90
- }
91
- .progress-bar-cursor{
92
- width: 10px;
93
- height: 10px;
94
- border-radius: 50%;
95
- background: black;
96
- align-self: center;
97
- position: absolute;
98
- }
99
- }
100
- }
101
- </style>
75
+ </script>
@@ -26,9 +26,7 @@
26
26
  <Popover
27
27
  v-if="isOuestFranceTag(tag)"
28
28
  :target="'tag-list-from-podcast-page'+index"
29
- triggers="hover"
30
29
  :content="tag.substring(4,tag.length)"
31
- placement="bottom"
32
30
  />
33
31
  </div>
34
32
  </div>
@@ -7,7 +7,7 @@
7
7
  <label
8
8
  for="rubrique-list-select"
9
9
  class="hid"
10
- >{{$t('By topic')}}</label>
10
+ >{{ $t('By topic') }}</label>
11
11
  <select
12
12
  id="rubrique-list-select"
13
13
  v-model="rubriquage"
@@ -32,31 +32,32 @@
32
32
  {{ rubrique.name }}
33
33
  </button>
34
34
  </div>
35
- <div
35
+ <button
36
36
  v-show="hidenRubriques.length"
37
- class="dropdown btn-group"
37
+ id="rubriques-dropdown"
38
+ class="btn admin-button saooti-more"
39
+ :title="$t('See more')"
40
+ />
41
+ <Popover
42
+ target="rubriques-dropdown"
43
+ :only-click="true"
44
+ :is-fixed="true"
45
+ :left-pos="true"
38
46
  >
39
47
  <button
40
- class="btn dropdown-toggle admin-button dropdown-toggle-no-caret saooti-more"
41
- data-bs-toggle="dropdown"
42
- aria-expanded="false"
43
- :title="$t('See more')"
44
- />
45
- <div class="dropdown-menu dropdown-menu-right px-4">
46
- <div
47
- v-for="rubrique in hidenRubriques"
48
- :key="rubrique.rubriqueId"
49
- class="me-3 dropdown-item"
50
- @click="addFilter(rubrique)"
51
- >
52
- {{ rubrique.name }}
53
- </div>
54
- </div>
55
- </div>
48
+ v-for="rubrique in hidenRubriques"
49
+ :key="rubrique.rubriqueId"
50
+ class="me-3 octopus-dropdown-item"
51
+ @mousedown="addFilter(rubrique)"
52
+ >
53
+ {{ rubrique.name }}
54
+ </button>
55
+ </Popover>
56
56
  </div>
57
57
  </template>
58
58
 
59
59
  <script lang="ts">
60
+ import Popover from '../../misc/Popover.vue';
60
61
  import { Rubrique } from '@/store/class/rubrique/rubrique';
61
62
  import { Rubriquage } from '@/store/class/rubrique/rubriquage';
62
63
  import { RubriquageFilter } from '@/store/class/rubrique/rubriquageFilter';
@@ -64,9 +65,14 @@ import { defineComponent } from 'vue'
64
65
  export default defineComponent({
65
66
  name: 'RubriqueList',
66
67
 
68
+ components:{
69
+ Popover
70
+ },
71
+
67
72
  props: {
68
73
  rubriquages: { default: () => [], type: Array as ()=>Array<Rubriquage>},
69
74
  },
75
+
70
76
 
71
77
  data() {
72
78
  return {
@@ -114,7 +120,6 @@ export default defineComponent({
114
120
  window.removeEventListener('resize', this.resizeWindow);
115
121
  },
116
122
  methods: {
117
-
118
123
  initRubriques(): void{
119
124
  if(!this.rubriquage){ return ;}
120
125
  this.$store.commit('filterRubriqueDisplay', this.rubriquage.rubriques);
@@ -1,118 +1,95 @@
1
1
  <template>
2
- <div
3
- id="accordionParameters"
4
- class="accordion mt-3"
2
+ <Accordion
3
+ class="mt-3"
4
+ :title="$t('player parameters')"
5
+ id-composer="playerParameters"
5
6
  >
6
- <div class="accordion-item">
7
- <h2
8
- id="labelPlayerParameter"
9
- class="accordion-header mb-0"
7
+ <div
8
+ v-if="choseNumberEpisode"
9
+ class="d-flex flex-column flex-grow-1"
10
+ >
11
+ <div
12
+ v-if="displayChoiceAllEpisodes"
13
+ class="d-flex align-items-center flex-wrap mt-1"
10
14
  >
11
- <button
12
- class="accordion-button collapsed"
13
- type="button"
14
- data-bs-toggle="collapse"
15
- data-bs-target="#playerParameters"
16
- aria-expanded="false"
17
- aria-controls="playerParameters"
15
+ <input
16
+ v-model="episodeNumbers"
17
+ class="form-check-input"
18
+ type="radio"
19
+ name="episodeNumbers"
20
+ value="all"
18
21
  >
19
- {{ $t('player parameters') }}
20
- </button>
21
- </h2>
22
+ <span class="flex-shrink-0">{{ $t('Show every episode') }}</span>
23
+ </div>
22
24
  <div
23
- id="playerParameters"
24
- class="accordion-collapse collapse"
25
- titleledby="labelPlayerParameter"
26
- data-bs-parent="#accordionParameters"
25
+ class="d-flex align-items-center flex-wrap"
26
+ :class="displayChoiceAllEpisodes ? '' : 'mt-3'"
27
27
  >
28
- <div class="accordion-body">
29
- <div
30
- v-if="choseNumberEpisode"
31
- class="d-flex flex-column flex-grow-1"
32
- >
33
- <div
34
- v-if="displayChoiceAllEpisodes"
35
- class="d-flex align-items-center flex-wrap mt-1"
36
- >
37
- <input
38
- v-model="episodeNumbers"
39
- class="form-check-input"
40
- type="radio"
41
- name="episodeNumbers"
42
- value="all"
43
- >
44
- <span class="flex-shrink-0">{{ $t('Show every episode') }}</span>
45
- </div>
46
- <div
47
- class="d-flex align-items-center flex-wrap"
48
- :class="displayChoiceAllEpisodes ? '' : 'mt-3'"
49
- >
50
- <input
51
- v-if="displayChoiceAllEpisodes"
52
- v-model="episodeNumbers"
53
- class="form-check-input"
54
- type="radio"
55
- name="episodeNumbers"
56
- value="number"
57
- >
58
- <span class="flex-shrink-0">{{ $t('Show') }}</span>
59
- <input
60
- id="number-input"
61
- v-model="iFrameNumber"
62
- type="number"
63
- min="1"
64
- max="50"
65
- class="input-share-player text-center m-2"
66
- >
67
- <label
68
- for="number-input"
69
- :title="$t('Number of player podcasts')"
70
- />
71
- <span class="flex-shrink-0">{{ $t('Last podcasts') }}</span>
72
- </div>
73
- <ClassicCheckbox
74
- v-model:textInit="proceedReading"
75
- id-checkbox="proceed-reading-checkbox"
76
- :label="$t('Proceed reading')"
77
- />
78
- <ClassicCheckbox
79
- v-model:textInit="isVisibleTemp"
80
- id-checkbox="is-visible-checkbox"
81
- :label="$t('Podcasts still available')"
82
- />
83
- </div>
84
- <div
85
- v-if="displayArticleParam"
86
- class="d-flex flex-column flex-grow-1"
87
- >
88
- <ClassicCheckbox
89
- v-model:textInit="displayArticle"
90
- id-checkbox="display-article-checkbox"
91
- :label="$t('Display associated article')"
92
- />
93
- </div>
94
- <div
95
- v-if="displayTranscriptParam"
96
- class="d-flex flex-column flex-grow-1"
97
- >
98
- <ClassicCheckbox
99
- v-model:textInit="displayTranscript"
100
- id-checkbox="display-transcript-checkbox"
101
- :label="$t('If the transcript is available, show it')"
102
- />
103
- </div>
104
- </div>
28
+ <input
29
+ v-if="displayChoiceAllEpisodes"
30
+ v-model="episodeNumbers"
31
+ class="form-check-input"
32
+ type="radio"
33
+ name="episodeNumbers"
34
+ value="number"
35
+ >
36
+ <span class="flex-shrink-0">{{ $t('Show') }}</span>
37
+ <input
38
+ id="number-input"
39
+ v-model="iFrameNumber"
40
+ type="number"
41
+ min="1"
42
+ max="50"
43
+ class="input-share-player text-center m-2"
44
+ >
45
+ <label
46
+ for="number-input"
47
+ :title="$t('Number of player podcasts')"
48
+ />
49
+ <span class="flex-shrink-0">{{ $t('Last podcasts') }}</span>
105
50
  </div>
51
+ <ClassicCheckbox
52
+ v-model:textInit="proceedReading"
53
+ id-checkbox="proceed-reading-checkbox"
54
+ :label="$t('Proceed reading')"
55
+ />
56
+ <ClassicCheckbox
57
+ v-model:textInit="isVisibleTemp"
58
+ id-checkbox="is-visible-checkbox"
59
+ :label="$t('Podcasts still available')"
60
+ />
61
+ </div>
62
+ <div
63
+ v-if="displayArticleParam"
64
+ class="d-flex flex-column flex-grow-1"
65
+ >
66
+ <ClassicCheckbox
67
+ v-model:textInit="displayArticle"
68
+ id-checkbox="display-article-checkbox"
69
+ :label="$t('Display associated article')"
70
+ />
71
+ </div>
72
+ <div
73
+ v-if="displayTranscriptParam"
74
+ class="d-flex flex-column flex-grow-1"
75
+ >
76
+ <ClassicCheckbox
77
+ v-model:textInit="displayTranscript"
78
+ id-checkbox="display-transcript-checkbox"
79
+ :label="$t('If the transcript is available, show it')"
80
+ />
106
81
  </div>
107
- </div>
82
+ </Accordion>
108
83
  </template>
109
84
 
110
85
  <script lang="ts">
111
86
  import ClassicCheckbox from '../../form/ClassicCheckbox.vue';
87
+ import Accordion from '../../misc/Accordion.vue';
112
88
  import { defineComponent } from 'vue'
113
89
  export default defineComponent({
114
90
  components:{
115
91
  ClassicCheckbox,
92
+ Accordion
116
93
  },
117
94
  props: {
118
95
  isVisible: { default: false, type: Boolean},
@@ -13,15 +13,13 @@
13
13
  role="button"
14
14
  tabindex="0"
15
15
  class="saooti-help ms-2 align-items-start"
16
- :title="$t('Help')"
17
16
  />
18
17
  <Popover
19
18
  v-if="authenticated"
20
19
  target="popover-share-help"
21
- placement="right"
22
- >
23
- {{ $t('Share this page without edit and share blocks') }}
24
- </Popover>
20
+ :title="$t('Help')"
21
+ :content="$t('Share this page without edit and share blocks')"
22
+ />
25
23
  </div>
26
24
  <div class="d-flex align-items-center">
27
25
  <ShareButtonsIntern
@@ -20,7 +20,7 @@
20
20
  :class="getClass(button.className)"
21
21
  :title="button.title"
22
22
  >
23
- <div :class="button.icon"/>
23
+ <div :class="button.icon" />
24
24
  </a>
25
25
  </template>
26
26
  <a
@@ -3,15 +3,16 @@
3
3
  <h3>{{ $t('Distribute') }}</h3>
4
4
  <p class="sharing-distribution-container">
5
5
  {{ $t('Rss feed:') }}
6
- <div class="primary-darker hide-small-screen text-break">{{ rss }}</div>
7
- <input
8
- type="button"
9
- :value="$t('Copy')"
10
- class="btn btn-primary"
11
- :title="$t('Copy')"
12
- @click="onCopyCode(rss, afterCopy)"
13
- >
14
- </p>
6
+ </p><div class="primary-darker hide-small-screen text-break">
7
+ {{ rss }}
8
+ </div>
9
+ <input
10
+ type="button"
11
+ :value="$t('Copy')"
12
+ class="btn btn-primary"
13
+ :title="$t('Copy')"
14
+ @click="onCopyCode(rss, afterCopy)"
15
+ />
15
16
  <RssSection
16
17
  v-if="emission"
17
18
  :emission="emission"
@@ -23,7 +24,7 @@
23
24
  :to="platform.url"
24
25
  class="text-dark"
25
26
  >
26
- <span :class="platform.icon"></span>{{ platform.title }}
27
+ <span :class="platform.icon" />{{ platform.title }}
27
28
  </router-link>
28
29
  </div>
29
30
  <Snackbar
@@ -18,7 +18,7 @@
18
18
  :href="sub.url"
19
19
  :title="sub.title"
20
20
  >
21
- <span :class="sub.icon"></span>
21
+ <span :class="sub.icon" />
22
22
  </a>
23
23
  </template>
24
24
  </div>
@@ -3,7 +3,7 @@
3
3
  v-if="loadingText"
4
4
  class="d-flex align-items-center justify-content-center"
5
5
  >
6
- <div class="spinner-border me-3 flex-shrink-0" />
6
+ <Spinner class="me-3" />
7
7
  <div class="h3 mt-2">
8
8
  {{ loadingText }}
9
9
  </div>
@@ -17,9 +17,13 @@
17
17
  </template>
18
18
 
19
19
  <script lang="ts">
20
+ import Spinner from '../misc/Spinner.vue';
20
21
  import { defineComponent } from 'vue';
21
22
  export default defineComponent({
22
23
  name: "ClassicLoading",
24
+ components:{
25
+ Spinner
26
+ },
23
27
  props: {
24
28
  loadingText: { default: undefined, type: String},
25
29
  errorText: { default: undefined, type: String},
@@ -0,0 +1,48 @@
1
+ <template>
2
+ <div
3
+ class="octopus-accordion"
4
+ >
5
+ <button
6
+ class="btn-transparent w-100 p-2 text-start d-flex align-items-center"
7
+ @click="isOpen=!isOpen"
8
+ >
9
+ <span class="flex-grow-1">{{ title }}</span>
10
+ <span class="saooti-down" />
11
+ </button>
12
+ <div
13
+ v-show="isOpen"
14
+ class="body p-2"
15
+ >
16
+ <slot />
17
+ </div>
18
+ </div>
19
+ </template>
20
+
21
+ <script lang="ts">
22
+ import { defineComponent } from 'vue';
23
+ export default defineComponent({
24
+ name: "Accordion",
25
+ props: {
26
+ title: { default: '', type: String },
27
+ },
28
+ emits:['open'],
29
+ data () {
30
+ return {
31
+ isOpen: false as boolean,
32
+ }
33
+ },
34
+ watch:{
35
+ isOpen(){
36
+ this.$emit('open');
37
+ }
38
+ }
39
+ });
40
+ </script>
41
+ <style lang="scss">
42
+ .octopus-accordion{
43
+ border: 1px solid #ccc;
44
+ .body{
45
+ border-top: 1px solid #ccc;
46
+ }
47
+ }
48
+ </style>
@@ -8,7 +8,8 @@
8
8
  >
9
9
  <span
10
10
  :title="$t('Warning')"
11
- class="saooti-warning text-danger me-1"/>
11
+ class="saooti-warning text-danger me-1"
12
+ />
12
13
  <div class="alert-text">
13
14
  {{ message }}
14
15
  </div>