@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
@@ -1,101 +1,72 @@
1
1
  <template>
2
- <div>
3
- <div
4
- id="share-modal"
5
- class="modal"
6
- >
7
- <div class="modal-backdrop" />
8
- <div class="modal-dialog">
9
- <div class="modal-content">
10
- <div class="modal-header">
11
- <h5 class="modal-title">
12
- {{ $t('Share the player') }}
13
- </h5>
14
- <button
15
- ref="focusElement"
16
- type="button"
17
- class="btn-close btn-close-white"
18
- title="Close"
19
- @click="closePopup"
20
- />
21
- </div>
22
- <div class="modal-body">
23
- <ul class="nav nav-tabs">
24
- <li
25
- v-for="(tab, index) in tabs"
26
- :key="tab"
27
- class="nav-item"
28
- >
29
- <div
30
- class="nav-link"
31
- :class="activeTab === index? 'active':''"
32
- @click="activeTab = index"
33
- >
34
- {{ tab }}
35
- </div>
36
- </li>
37
- </ul>
38
- <div class="tab-content p-2 share-modal-border">
39
- <div
40
- class="tab-pane tab-pane"
41
- :class="activeTab === 0? 'active':''"
42
- >
43
- <p>{{ embedLink }}</p>
44
- <div
45
- class="saooti-copy"
46
- @click="onCopyCode(embedLink, afterCopy)"
47
- />
48
- </div>
2
+ <ClassicModal
3
+ id-modal="share-modal"
4
+ :title-modal="$t('Share the player')"
5
+ @close="closePopup"
6
+ >
7
+ <template #body>
8
+ <Nav :tab-number="tabs.length">
9
+ <template
10
+ v-for="(tab, index) in tabs"
11
+ #[index]
12
+ >
13
+ {{ tab }}
14
+ </template>
15
+ <template
16
+ #tab0
17
+ >
18
+ <p>{{ embedLink }}</p>
19
+ <div
20
+ class="saooti-copy"
21
+ @click="onCopyCode(embedLink, afterCopy)"
22
+ />
23
+ </template>
24
+ <template
25
+ #tab1
26
+ >
27
+ <div class="d-flex flex-column">
28
+ <div class="d-flex">
29
+ <p>{{ embedlyLink }}</p>
49
30
  <div
50
- class="tab-pane tab-pane"
51
- :class="activeTab === 1? 'active':''"
52
- >
53
- <div class="d-flex flex-column">
54
- <div class="d-flex">
55
- <p>{{ embedlyLink }}</p>
56
- <div
57
- class="saooti-copy"
58
- @click="onCopyCode(embedlyLink, afterCopy)"
59
- />
60
- </div>
61
- <QrCode :url="embedlyLink" />
62
- </div>
63
- </div>
64
- <div
65
- v-if="directLink"
66
- class="tab-pane tab-pane"
67
- :class="activeTab === 2? 'active':''"
68
- >
69
- <p>{{ directLink.audioUrl }}</p>
70
- <div
71
- class="saooti-copy"
72
- @click="onCopyCode(directLink.audioUrl, snackbarRef)"
73
- />
74
- </div>
31
+ class="saooti-copy"
32
+ @click="onCopyCode(embedlyLink, afterCopy)"
33
+ />
75
34
  </div>
35
+ <QrCode :url="embedlyLink" />
76
36
  </div>
77
- <div class="modal-footer">
78
- <button
79
- class="btn btn-primary m-1"
80
- @click="closePopup"
81
- >
82
- {{ $t('Close') }}
83
- </button>
84
- </div>
85
- </div>
86
- </div>
87
- </div>
88
- <Snackbar
89
- ref="snackbar"
90
- position="bottom-left"
91
- />
92
- </div>
37
+ </template>
38
+ <template
39
+ v-if="directLink"
40
+ #tab2
41
+ >
42
+ <p>{{ directLink.audioUrl }}</p>
43
+ <div
44
+ class="saooti-copy"
45
+ @click="onCopyCode(directLink.audioUrl, snackbarRef)"
46
+ />
47
+ </template>
48
+ </Nav>
49
+ </template>
50
+ <template #footer>
51
+ <button
52
+ class="btn btn-primary m-1"
53
+ @click="closePopup"
54
+ >
55
+ {{ $t('Close') }}
56
+ </button>
57
+ </template>
58
+ </ClassicModal>
59
+ <Snackbar
60
+ ref="snackbar"
61
+ position="bottom-left"
62
+ />
93
63
  </template>
94
64
 
95
65
  <script lang="ts">
96
66
  import Snackbar from '../Snackbar.vue';
97
67
  import displayMethods from '../../mixins/displayMethods';
98
-
68
+ import ClassicModal from '../modal/ClassicModal.vue';
69
+ import Nav from '../Nav.vue';
99
70
  import QrCode from '../../display/sharing/QrCode.vue';
100
71
  import { defineComponent } from 'vue'
101
72
  import { Podcast } from '@/store/class/general/podcast';
@@ -104,7 +75,9 @@ export default defineComponent({
104
75
 
105
76
  components: {
106
77
  Snackbar,
107
- QrCode
78
+ QrCode,
79
+ ClassicModal,
80
+ Nav
108
81
  },
109
82
  mixins: [displayMethods],
110
83
  props: {
@@ -126,12 +99,8 @@ export default defineComponent({
126
99
  return [this.$t('Embed link'),this.$t('Embedly link')];
127
100
  }
128
101
  },
129
- mounted(){
130
- (this.$refs.focusElement as HTMLElement)?.focus();
131
- },
132
102
  methods: {
133
- closePopup(event: { preventDefault: () => void }): void {
134
- event.preventDefault();
103
+ closePopup(): void {
135
104
  this.$emit('close');
136
105
  },
137
106
  afterCopy(): void{
@@ -143,44 +112,11 @@ export default defineComponent({
143
112
 
144
113
  <style lang="scss">
145
114
  .octopus-app{
146
- .share-modal-border {
147
- border-right: solid 1px rgb(222, 226, 230);
148
- border-left: solid 1px rgb(222, 226, 230);
149
- border-bottom: solid 1px rgb(222, 226, 230);
150
- background-color: #f8fafc;
151
- p {
152
- margin-top: 0.5rem;
153
- margin-bottom: 0.5rem;
154
- overflow-wrap: break-word;
155
- word-wrap: break-word;
156
- -ms-word-break: break-all;
157
- word-break: break-all;
158
- word-break: break-word;
159
- -ms-hyphens: auto;
160
- -moz-hyphens: auto;
161
- -webkit-hyphens: auto;
162
- hyphens: auto;
163
- margin-right: 0.5rem;
164
- }
165
- }
166
- .nav-tabs {
167
- .nav-item {
168
- border-right: solid 1px rgb(222, 226, 230);
169
- border-left: solid 1px rgb(222, 226, 230);
170
- border-top: solid 1px rgb(222, 226, 230);
171
- border-top-left-radius: 0.25rem;
172
- border-top-right-radius: 0.25rem;
173
- }
174
- }
175
- .tab-content {
176
- .tab-pane.active {
177
- display: flex;
178
- justify-content: space-between;
179
- }
180
- .saooti-copy {
181
- cursor: pointer;
182
- align-self: center;
115
+ #share-modal{
116
+ .saooti-copy {
117
+ cursor: pointer;
118
+ align-self: center;
119
+ }
183
120
  }
184
121
  }
185
- }
186
122
  </style>
@@ -126,12 +126,6 @@ export default defineComponent({
126
126
  background: #282828 !important;
127
127
  font-size: 1rem;
128
128
 
129
- .player-progress-border {
130
- height: 10px;
131
- width: 3px;
132
- background: black;
133
- }
134
-
135
129
  @media (max-width: 960px) {
136
130
  .d-flex {
137
131
  flex-wrap: nowrap !important;
@@ -23,9 +23,8 @@
23
23
  class="btn play-button-box text-light primary-bg"
24
24
  @click="switchPausePlay"
25
25
  >
26
- <span
26
+ <Spinner
27
27
  v-if="!isPaused&&!isPlaying"
28
- class="spinner-border flex-shrink-0"
29
28
  />
30
29
  </button>
31
30
  <div class="text-light player-grow-content">
@@ -78,6 +77,7 @@
78
77
  import { CommentPodcast } from '@/store/class/general/comment';
79
78
  import { playerDisplay } from '../../mixins/player/playerDisplay';
80
79
  import imageProxy from '../../mixins/imageProxy';
80
+ import Spinner from '../Spinner.vue';
81
81
  import PlayerProgressBar from './PlayerProgressBar.vue';
82
82
  import PlayerTimeline from './PlayerTimeline.vue';
83
83
  import { defineComponent } from 'vue';
@@ -86,7 +86,8 @@ export default defineComponent({
86
86
 
87
87
  components: {
88
88
  PlayerProgressBar,
89
- PlayerTimeline
89
+ PlayerTimeline,
90
+ Spinner
90
91
  },
91
92
  mixins:[playerDisplay, imageProxy],
92
93
 
@@ -31,6 +31,7 @@
31
31
  <div class="player-grow-large-content">
32
32
  <PlayerProgressBar
33
33
  ref="progressbar"
34
+ class-progress="large"
34
35
  :hls-ready="hlsReady"
35
36
  :show-timeline="showTimeline"
36
37
  :comments="comments"
@@ -46,8 +47,13 @@
46
47
  <div>{{ totalTime }}</div>
47
48
  </div>
48
49
  </div>
49
- <div class="flex-grow-1 d-flex align-items-center w-100" v-if="''!=transcriptText">
50
- <div class="flex-grow-1 p-1 text-center mx-3 transcript-bg rounded">{{transcriptText}}</div>
50
+ <div
51
+ v-if="''!=transcriptText"
52
+ class="flex-grow-1 d-flex align-items-center w-100"
53
+ >
54
+ <div class="flex-grow-1 p-1 text-center mx-3 transcript-bg rounded">
55
+ {{ transcriptText }}
56
+ </div>
51
57
  </div>
52
58
  <div class="d-flex align-items-center flex-grow-1">
53
59
  <button
@@ -65,9 +71,8 @@
65
71
  class="btn play-big-button-box text-light primary-bg"
66
72
  @click="switchPausePlay"
67
73
  >
68
- <span
74
+ <Spinner
69
75
  v-if="!isPaused&&!isPlaying"
70
- class="spinner-border flex-shrink-0"
71
76
  />
72
77
  </button>
73
78
  <button
@@ -82,6 +87,7 @@
82
87
  </div>
83
88
  </template>
84
89
  <script lang="ts">
90
+ import Spinner from '../Spinner.vue';
85
91
  import { playerDisplay } from '../../mixins/player/playerDisplay';
86
92
  import imageProxy from '../../mixins/imageProxy';
87
93
  import PlayerProgressBar from './PlayerProgressBar.vue';
@@ -93,7 +99,8 @@ export default defineComponent({
93
99
 
94
100
  components: {
95
101
  PlayerProgressBar,
96
- PlayerTimeline
102
+ PlayerTimeline,
103
+ Spinner
97
104
  },
98
105
  mixins:[playerDisplay, imageProxy],
99
106
 
@@ -148,9 +155,6 @@ export default defineComponent({
148
155
  @media (max-width: 960px) {
149
156
  padding: 0.5rem;
150
157
  }
151
- .progress, .progress-bar{
152
- height: 15px !important;
153
- }
154
158
  }
155
159
  .play-big-button-box {
156
160
  height: 5rem;
@@ -1,31 +1,12 @@
1
1
  <template>
2
- <div
2
+ <ProgressBar
3
3
  v-if="!playerError"
4
- class="progress c-hand"
4
+ :main-progress="percentProgress"
5
+ :secondary-progress="percentLiveProgress"
6
+ :alert-bar="displayAlertBar?durationLivePosition:undefined"
7
+ :class="classProgress"
5
8
  @mouseup="seekTo"
6
- >
7
- <div
8
- class="progress-bar bg-light"
9
- role="progressbar"
10
- aria-valuenow="0"
11
- aria-valuemin="0"
12
- aria-valuemax="100"
13
- :style="'width: ' + percentLiveProgress + '%'"
14
- />
15
- <div
16
- class="progress-bar primary-bg"
17
- role="progressbar"
18
- aria-valuenow="0"
19
- aria-valuemin="0"
20
- aria-valuemax="100"
21
- :style="'width: ' + percentProgress + '%'"
22
- />
23
- <div
24
- v-if="displayAlertBar"
25
- class="progress-bar progress-bar-duration bg-danger"
26
- :style="'left: ' + durationLivePosition + '%'"
27
- />
28
- </div>
9
+ />
29
10
  <CommentPlayer
30
11
  v-if="showTimeline"
31
12
  :total-time="totalSecondes"
@@ -34,6 +15,7 @@
34
15
  </template>
35
16
 
36
17
  <script lang="ts">
18
+ import ProgressBar from '../ProgressBar.vue'
37
19
  import { CommentPodcast } from '@/store/class/general/comment';
38
20
  import { defineComponent, defineAsyncComponent } from 'vue';
39
21
  const CommentPlayer = defineAsyncComponent(() => import('../../display/comments/CommentPlayer.vue'));
@@ -42,8 +24,10 @@ export default defineComponent({
42
24
 
43
25
  components: {
44
26
  CommentPlayer,
27
+ ProgressBar
45
28
  },
46
29
  props: {
30
+ classProgress:{ default: "", type: String},
47
31
  hlsReady: { default: false, type: Boolean},
48
32
  showTimeline: { default: false, type: Boolean},
49
33
  comments: { default: ()=>[], type: Array as ()=>Array<CommentPodcast>},
@@ -87,26 +71,4 @@ export default defineComponent({
87
71
 
88
72
  },
89
73
  })
90
- </script>
91
-
92
- <style lang="scss">
93
- .octopus-app{
94
- .progress {
95
- height: 4px;
96
- position: relative;
97
- @media (max-width: 960px) {
98
- height: 8px;
99
- }
100
- }
101
- .progress-bar-duration {
102
- width: 10px;
103
- }
104
- .progress-bar {
105
- height: 4px;
106
- position: absolute;
107
- @media (max-width: 960px) {
108
- height: 8px;
109
- }
110
- }
111
- }
112
- </style>
74
+ </script>
@@ -72,7 +72,7 @@
72
72
  :button-text="$t('All podcast emission button')"
73
73
  />
74
74
  <PodcastInlineList
75
- :podcastId="podcastId"
75
+ :podcast-id="podcastId"
76
76
  title="Les recommendations de Vincent !"
77
77
  />
78
78
  <PodcastInlineList
@@ -1,195 +0,0 @@
1
- // Bootstrap styles overload
2
- .octopus-app{
3
- .btn-group {
4
- > .btn:not(:first-child),
5
- > .btn-group:not(:first-child) {
6
- margin-left: 5px;
7
- display: flex;
8
- }
9
- }
10
- .btn{
11
- font-size:.7rem;
12
- border-radius: 4px;
13
- background: $octopus-secondary-color;
14
- text-decoration: none !important;
15
- white-space: nowrap;
16
- border-width: 0;
17
- @media (max-width: 960px) {
18
- white-space: normal;
19
- }
20
- &:hover,
21
- &:focus,
22
- &:active,
23
- &.active {
24
- box-shadow: none;
25
- }
26
- &:hover{
27
- background: $primaryColorMoreTransparent;
28
- }
29
- //Button disable halo after click
30
- &.btn-underline{
31
- background: none;
32
- padding: 0;
33
- margin: 0 2rem 1rem 0;
34
- border-radius: 0;
35
- @media (max-width: 600px) {
36
- margin: 0 1rem 1rem 0;
37
- font-size: 0.8em;
38
- }
39
- position: relative;
40
- &:after {
41
- bottom: 0;
42
- content: "";
43
- display: block;
44
- height: 2px;
45
- left: 50%;
46
- position: absolute;
47
- background: $octopus-primary-color;
48
- transition: width 0.3s ease 0s, left 0.3s ease 0s;
49
- width: 0;
50
- }
51
- &:hover:after,&.active:after {
52
- width: 100%;
53
- left: 0;
54
- }
55
- }
56
-
57
- &.btn-primary {
58
- display: flex;
59
- align-items: center;
60
- justify-content: center;
61
- background: $octopus-primary-color;
62
- border: 1px solid $octopus-primary-color;
63
- border-radius: 4px !important;
64
- color: white !important;
65
- font-weight: bold;
66
- &:focus,
67
- &:hover,
68
- &:active,
69
- &.active {
70
- background: transparent;
71
- color: $octopus-primary-color !important;
72
- }
73
- &:disabled{
74
- background-color: #cccccc;
75
- border: black;
76
- cursor: default;
77
- color: gray !important;
78
- }
79
- @media (max-width: 500px){
80
- margin: 0.3rem;
81
- }
82
- }
83
-
84
- &.btn-more{
85
- background: $octopus-primary-color;
86
- color: $octopus-background;
87
- width: 2rem;
88
- height: 2rem;
89
- display: flex;
90
- align-items: center;
91
- justify-content: center;
92
- border-radius: 50px;
93
- margin: 1rem;
94
- }
95
-
96
- &.admin-button{
97
- padding: 0.3rem;
98
- height: 2.2rem !important;
99
- width: 2.2rem !important;
100
- font-size: 1.1rem;
101
- display: inline-flex;
102
- align-items: center;
103
- justify-content: center;
104
- color : $octopus-primary-color;
105
- flex-shrink: 0;
106
- font-weight: normal;
107
- border-radius: 50% !important;
108
- }
109
-
110
- }
111
- .share-btn {
112
- font-size: 1.3rem;
113
- width: 2.5rem !important;
114
- height: 2.5rem !important;
115
- padding: 0.5rem;
116
- display: inline-flex;
117
- align-items: center;
118
- justify-content: center;
119
- color : $octopus-primary-color;
120
- flex-shrink: 0;
121
- border-radius: 50% !important;
122
- }
123
-
124
- .btn-rss {
125
- background: #ddd !important;
126
- &:hover {
127
- border: 0;
128
- background: #ccc !important;
129
- }
130
- }
131
- .btn-facebook {
132
- background: #d8dfea !important;
133
- color: #3b5998 !important;
134
- &:hover {
135
- background: #afbdd4 !important;
136
- }
137
- }
138
- .btn-twitter {
139
- background: #d2ecfc !important;
140
- color: #1da1f2 !important;
141
- &:hover {
142
- background: #bbe3fb !important;
143
- }
144
- }
145
- .btn-linkedin {
146
- background: #0077b550 !important;
147
- color: #0077b5 !important;
148
- &:hover {
149
- background: #00a0dc !important;
150
- }
151
- }
152
- .btn-whatsapp {
153
- background: #25d36645 !important;
154
- color: #25D366 !important;
155
- &:hover {
156
- background: #25d36563 !important;
157
- }
158
- }
159
-
160
- .dropdown-toggle-no-caret::after{
161
- display: none;
162
- }
163
- .dropdown-menu {
164
- padding: 0.5rem;
165
- }
166
- .dropdown-item {
167
- cursor: pointer;
168
- font-size: 0.8rem;
169
- @media (max-width: 450px) {
170
- padding: 0.25rem 0;
171
- }
172
- }
173
- .dropdown-header {
174
- @media (max-width: 450px) {
175
- margin: 1rem 0 0;
176
- }
177
- }
178
-
179
- .accordion-button {
180
- padding: 0.5rem;
181
- }
182
- .accordion-item:not(:first-of-type) {
183
- border-top: 0.1rem solid rgba(0, 0, 0, 0.125);
184
- }
185
- .breadcrumb{
186
- padding: 1rem;
187
- align-items: center;
188
- background: #FAFAFA;
189
- }
190
- .bg-secondary{
191
- background: #eee !important;
192
- }
193
- }
194
-
195
-