@saooti/octopus-sdk 1.0.0 → 29.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 (230) hide show
  1. package/README.md +73 -0
  2. package/index.d.ts +4 -0
  3. package/index.ts +12 -0
  4. package/package.json +61 -39
  5. package/public/css/fonts/saooti-ui.eot +0 -0
  6. package/public/css/fonts/saooti-ui.svg +30 -19
  7. package/public/css/fonts/saooti-ui.ttf +0 -0
  8. package/public/css/fonts/saooti-ui.woff +0 -0
  9. package/public/css/fonts/style.css +48 -5
  10. package/public/img/ACPM.png +0 -0
  11. package/public/img/article.png +0 -0
  12. package/src/App.vue +97 -31
  13. package/src/api/comments.ts +3 -1
  14. package/src/api/emissions.ts +5 -2
  15. package/src/api/initialize.ts +3 -2
  16. package/src/api/podcasts.ts +5 -2
  17. package/src/api/profile.ts +4 -2
  18. package/src/api/studio.ts +12 -1
  19. package/src/assets/bootstrap-diff.scss +265 -0
  20. package/src/assets/form.scss +23 -0
  21. package/src/assets/general.scss +47 -20
  22. package/src/assets/modal.scss +9 -10
  23. package/src/assets/multiselect.scss +19 -2
  24. package/src/assets/octopus-library.scss +16 -4
  25. package/src/assets/share.scss +343 -0
  26. package/src/components/display/aggregator/RssSection.vue +4 -4
  27. package/src/components/display/categories/CategoryChooser.vue +152 -105
  28. package/src/components/display/categories/CategoryFilter.vue +108 -0
  29. package/src/components/display/categories/CategoryList.vue +138 -109
  30. package/src/components/display/comments/AddCommentModal.vue +104 -87
  31. package/src/components/display/comments/CommentInput.vue +137 -118
  32. package/src/components/display/comments/CommentItem.vue +155 -137
  33. package/src/components/display/comments/CommentList.vue +142 -120
  34. package/src/components/display/comments/CommentParentInfo.vue +39 -35
  35. package/src/components/display/comments/CommentPlayer.vue +54 -48
  36. package/src/components/display/comments/CommentSection.vue +57 -58
  37. package/src/components/display/edit/EditBox.vue +4 -4
  38. package/src/components/display/edit/EditCommentBox.vue +25 -31
  39. package/src/components/display/emission/EmissionChooser.vue +82 -80
  40. package/src/components/display/emission/EmissionInlineList.vue +118 -105
  41. package/src/components/display/emission/EmissionItem.vue +66 -167
  42. package/src/components/display/emission/EmissionList.vue +96 -122
  43. package/src/components/display/emission/EmissionPlayerItem.vue +131 -126
  44. package/src/components/display/filter/AdvancedSearch.vue +306 -372
  45. package/src/components/display/filter/CategoryFilter.vue +117 -0
  46. package/src/components/display/filter/MonetizableFilter.vue +24 -10
  47. package/src/components/display/filter/ProductorSearch.vue +131 -135
  48. package/src/components/display/filter/RubriqueChoice.vue +104 -0
  49. package/src/components/display/filter/RubriqueFilter.vue +235 -0
  50. package/src/components/display/live/CountDown.vue +30 -29
  51. package/src/components/display/live/LiveHorizontalList.vue +40 -34
  52. package/src/components/display/live/LiveItem.vue +146 -158
  53. package/src/components/display/live/LiveList.vue +167 -154
  54. package/src/components/display/organisation/OrganisationChooser.vue +125 -124
  55. package/src/components/display/organisation/OrganisationChooserLight.vue +40 -47
  56. package/src/components/display/participant/ParticipantItem.vue +92 -108
  57. package/src/components/display/participant/ParticipantList.vue +76 -69
  58. package/src/components/display/playlist/PlaylistItem.vue +45 -56
  59. package/src/components/display/playlist/PlaylistList.vue +57 -48
  60. package/src/components/display/playlist/PodcastList.vue +94 -70
  61. package/src/components/display/podcasts/AnimatorsItem.vue +26 -23
  62. package/src/components/display/podcasts/ParticipantDescription.vue +115 -0
  63. package/src/components/display/podcasts/PodcastFilterList.vue +84 -85
  64. package/src/components/display/podcasts/PodcastImage.vue +244 -208
  65. package/src/components/display/podcasts/PodcastInlineList.vue +145 -207
  66. package/src/components/display/podcasts/PodcastItem.vue +150 -132
  67. package/src/components/display/podcasts/PodcastList.vue +89 -110
  68. package/src/components/display/podcasts/TagList.vue +23 -16
  69. package/src/components/display/rubriques/RubriqueChooser.vue +137 -123
  70. package/src/components/display/rubriques/RubriqueList.vue +227 -0
  71. package/src/components/display/sharing/PlayerParameters.vue +154 -106
  72. package/src/components/display/sharing/QrCode.vue +58 -0
  73. package/src/components/display/sharing/ShareButtons.vue +214 -92
  74. package/src/components/display/sharing/ShareDistribution.vue +110 -121
  75. package/src/components/display/sharing/SharePlayer.vue +245 -190
  76. package/src/components/display/sharing/SubscribeButtons.vue +130 -66
  77. package/src/components/display/studio/RecordingItemButton.vue +4 -4
  78. package/src/components/misc/ErrorMessage.vue +21 -16
  79. package/src/components/misc/Footer.vue +131 -66
  80. package/src/components/misc/HomeDropdown.vue +166 -123
  81. package/src/components/misc/LeftMenu.vue +151 -134
  82. package/src/components/misc/Player.vue +332 -328
  83. package/src/components/misc/Snackbar.vue +27 -29
  84. package/src/components/misc/TopBar.vue +204 -174
  85. package/src/components/misc/modal/ClipboardModal.vue +46 -26
  86. package/src/components/misc/modal/MessageModal.vue +67 -51
  87. package/src/components/misc/modal/NewsletterModal.vue +179 -136
  88. package/src/components/misc/modal/QrCodeModal.vue +83 -0
  89. package/src/components/misc/modal/ShareModalPlayer.vue +133 -74
  90. package/src/components/mixins/functions.ts +21 -18
  91. package/src/components/mixins/init.ts +24 -0
  92. package/src/components/mixins/organisationFilter.ts +24 -0
  93. package/src/components/pages/Category.vue +26 -26
  94. package/src/components/pages/Emission.vue +120 -92
  95. package/src/components/pages/Emissions.vue +109 -86
  96. package/src/components/pages/Home.vue +70 -16
  97. package/src/components/pages/Lives.vue +57 -47
  98. package/src/components/pages/Participant.vue +93 -77
  99. package/src/components/pages/Participants.vue +44 -31
  100. package/src/components/pages/Playlist.vue +63 -52
  101. package/src/components/pages/Playlists.vue +41 -39
  102. package/src/components/pages/Podcast.vue +265 -251
  103. package/src/components/pages/Podcasts.vue +135 -104
  104. package/src/components/pages/Rubrique.vue +25 -19
  105. package/src/components/pages/Search.vue +71 -67
  106. package/src/helper/dom.ts +2 -2
  107. package/src/helper/duration.ts +18 -8
  108. package/src/locale/educationen.ts +14 -0
  109. package/src/locale/en.ts +299 -1
  110. package/src/locale/fr.ts +25 -10
  111. package/src/locale/messages.ts +3 -2
  112. package/src/main.ts +54 -32
  113. package/src/router/router.ts +184 -159
  114. package/src/shims-tsx.d.ts +13 -0
  115. package/src/shims-vue-recaptcha-v3.d.ts +9 -0
  116. package/src/shims-vue.d.ts +5 -6
  117. package/src/store/AppStore.ts +36 -171
  118. package/src/store/class/category.ts +8 -0
  119. package/src/store/class/comment.ts +17 -0
  120. package/src/store/class/conference.ts +27 -0
  121. package/src/store/class/customPlayer.ts +8 -0
  122. package/src/store/class/emission.ts +20 -0
  123. package/src/store/class/fetchParam.ts +16 -0
  124. package/src/store/class/media.ts +13 -0
  125. package/src/store/class/organisation.ts +19 -0
  126. package/src/store/class/participant.ts +12 -0
  127. package/src/store/class/person.ts +13 -0
  128. package/src/store/class/player.ts +12 -0
  129. package/src/store/class/playlist.ts +15 -0
  130. package/src/store/class/podcast.ts +37 -0
  131. package/src/store/class/rubriquage.ts +9 -0
  132. package/src/store/class/rubriquageFilter.ts +5 -0
  133. package/src/store/class/rubrique.ts +8 -0
  134. package/src/store/paramStore.ts +70 -29
  135. package/src/store/typeAppStore.ts +171 -237
  136. package/src/vuex-shim.d.ts +8 -0
  137. package/tsconfig.json +4 -0
  138. package/vue.config.js +14 -0
  139. package/public/img/ACPM.PNG +0 -0
  140. package/src/assets/bootstrap_scss/_alert.scss +0 -51
  141. package/src/assets/bootstrap_scss/_badge.scss +0 -54
  142. package/src/assets/bootstrap_scss/_breadcrumb.scss +0 -42
  143. package/src/assets/bootstrap_scss/_button-group.scss +0 -164
  144. package/src/assets/bootstrap_scss/_buttons.scss +0 -291
  145. package/src/assets/bootstrap_scss/_card.scss +0 -278
  146. package/src/assets/bootstrap_scss/_carousel.scss +0 -197
  147. package/src/assets/bootstrap_scss/_close.scss +0 -41
  148. package/src/assets/bootstrap_scss/_code.scss +0 -48
  149. package/src/assets/bootstrap_scss/_custom-forms.scss +0 -522
  150. package/src/assets/bootstrap_scss/_dropdown.scss +0 -201
  151. package/src/assets/bootstrap_scss/_forms.scss +0 -352
  152. package/src/assets/bootstrap_scss/_functions.scss +0 -134
  153. package/src/assets/bootstrap_scss/_grid.scss +0 -69
  154. package/src/assets/bootstrap_scss/_images.scss +0 -42
  155. package/src/assets/bootstrap_scss/_input-group.scss +0 -191
  156. package/src/assets/bootstrap_scss/_jumbotron.scss +0 -17
  157. package/src/assets/bootstrap_scss/_list-group.scss +0 -158
  158. package/src/assets/bootstrap_scss/_media.scss +0 -8
  159. package/src/assets/bootstrap_scss/_mixins.scss +0 -47
  160. package/src/assets/bootstrap_scss/_modal.scss +0 -243
  161. package/src/assets/bootstrap_scss/_nav.scss +0 -120
  162. package/src/assets/bootstrap_scss/_navbar.scss +0 -324
  163. package/src/assets/bootstrap_scss/_pagination.scss +0 -74
  164. package/src/assets/bootstrap_scss/_popover.scss +0 -170
  165. package/src/assets/bootstrap_scss/_print.scss +0 -141
  166. package/src/assets/bootstrap_scss/_progress.scss +0 -46
  167. package/src/assets/bootstrap_scss/_reboot.scss +0 -482
  168. package/src/assets/bootstrap_scss/_root.scss +0 -20
  169. package/src/assets/bootstrap_scss/_spinners.scss +0 -55
  170. package/src/assets/bootstrap_scss/_tables.scss +0 -185
  171. package/src/assets/bootstrap_scss/_toasts.scss +0 -44
  172. package/src/assets/bootstrap_scss/_tooltip.scss +0 -115
  173. package/src/assets/bootstrap_scss/_transitions.scss +0 -20
  174. package/src/assets/bootstrap_scss/_type.scss +0 -125
  175. package/src/assets/bootstrap_scss/_utilities.scss +0 -17
  176. package/src/assets/bootstrap_scss/_variables.scss +0 -1145
  177. package/src/assets/bootstrap_scss/bootstrap-grid.scss +0 -29
  178. package/src/assets/bootstrap_scss/bootstrap-reboot.scss +0 -12
  179. package/src/assets/bootstrap_scss/bootstrap.scss +0 -44
  180. package/src/assets/bootstrap_scss/mixins/_alert.scss +0 -13
  181. package/src/assets/bootstrap_scss/mixins/_background-variant.scss +0 -22
  182. package/src/assets/bootstrap_scss/mixins/_badge.scss +0 -17
  183. package/src/assets/bootstrap_scss/mixins/_border-radius.scss +0 -63
  184. package/src/assets/bootstrap_scss/mixins/_box-shadow.scss +0 -20
  185. package/src/assets/bootstrap_scss/mixins/_breakpoints.scss +0 -123
  186. package/src/assets/bootstrap_scss/mixins/_buttons.scss +0 -110
  187. package/src/assets/bootstrap_scss/mixins/_caret.scss +0 -62
  188. package/src/assets/bootstrap_scss/mixins/_clearfix.scss +0 -7
  189. package/src/assets/bootstrap_scss/mixins/_deprecate.scss +0 -10
  190. package/src/assets/bootstrap_scss/mixins/_float.scss +0 -14
  191. package/src/assets/bootstrap_scss/mixins/_forms.scss +0 -177
  192. package/src/assets/bootstrap_scss/mixins/_gradients.scss +0 -45
  193. package/src/assets/bootstrap_scss/mixins/_grid-framework.scss +0 -71
  194. package/src/assets/bootstrap_scss/mixins/_grid.scss +0 -69
  195. package/src/assets/bootstrap_scss/mixins/_hover.scss +0 -37
  196. package/src/assets/bootstrap_scss/mixins/_image.scss +0 -36
  197. package/src/assets/bootstrap_scss/mixins/_list-group.scss +0 -21
  198. package/src/assets/bootstrap_scss/mixins/_lists.scss +0 -7
  199. package/src/assets/bootstrap_scss/mixins/_nav-divider.scss +0 -11
  200. package/src/assets/bootstrap_scss/mixins/_pagination.scss +0 -22
  201. package/src/assets/bootstrap_scss/mixins/_reset-text.scss +0 -17
  202. package/src/assets/bootstrap_scss/mixins/_resize.scss +0 -6
  203. package/src/assets/bootstrap_scss/mixins/_screen-reader.scss +0 -34
  204. package/src/assets/bootstrap_scss/mixins/_size.scss +0 -7
  205. package/src/assets/bootstrap_scss/mixins/_table-row.scss +0 -39
  206. package/src/assets/bootstrap_scss/mixins/_text-emphasis.scss +0 -17
  207. package/src/assets/bootstrap_scss/mixins/_text-hide.scss +0 -11
  208. package/src/assets/bootstrap_scss/mixins/_text-truncate.scss +0 -8
  209. package/src/assets/bootstrap_scss/mixins/_transition.scss +0 -16
  210. package/src/assets/bootstrap_scss/mixins/_visibility.scss +0 -8
  211. package/src/assets/bootstrap_scss/utilities/_align.scss +0 -8
  212. package/src/assets/bootstrap_scss/utilities/_background.scss +0 -19
  213. package/src/assets/bootstrap_scss/utilities/_borders.scss +0 -75
  214. package/src/assets/bootstrap_scss/utilities/_clearfix.scss +0 -3
  215. package/src/assets/bootstrap_scss/utilities/_display.scss +0 -26
  216. package/src/assets/bootstrap_scss/utilities/_embed.scss +0 -39
  217. package/src/assets/bootstrap_scss/utilities/_flex.scss +0 -51
  218. package/src/assets/bootstrap_scss/utilities/_float.scss +0 -11
  219. package/src/assets/bootstrap_scss/utilities/_overflow.scss +0 -5
  220. package/src/assets/bootstrap_scss/utilities/_position.scss +0 -32
  221. package/src/assets/bootstrap_scss/utilities/_screenreaders.scss +0 -11
  222. package/src/assets/bootstrap_scss/utilities/_shadows.scss +0 -6
  223. package/src/assets/bootstrap_scss/utilities/_sizing.scss +0 -20
  224. package/src/assets/bootstrap_scss/utilities/_spacing.scss +0 -73
  225. package/src/assets/bootstrap_scss/utilities/_stretched-link.scss +0 -19
  226. package/src/assets/bootstrap_scss/utilities/_text.scss +0 -72
  227. package/src/assets/bootstrap_scss/utilities/_visibility.scss +0 -13
  228. package/src/assets/bootstrap_scss/vendor/_rfs.scss +0 -204
  229. package/src/shims-vuex.d.ts +0 -7
  230. package/src/views/Home.vue +0 -18
@@ -19,9 +19,12 @@
19
19
  :width="iFrameWidth"
20
20
  :height="iFrameHeight"
21
21
  class="maxIframe"
22
- ></iframe>
22
+ />
23
23
  <div class="d-flex flex-column">
24
- <button class="btn mb-3" @click="isShareModal = true">
24
+ <button
25
+ class="btn mb-3"
26
+ @click="isShareModal = true"
27
+ >
25
28
  {{ $t('Share the player') }}
26
29
  </button>
27
30
  <template v-if="!isLiveReadyToRecord">
@@ -29,68 +32,78 @@
29
32
  for="iframe-select"
30
33
  class="d-inline"
31
34
  aria-label="select miniplayer"
32
- ></label>
35
+ />
33
36
  <select
34
- v-model="iFrameModel"
35
37
  id="iframe-select"
38
+ v-model="iFrameModel"
36
39
  class="frame-select input-no-outline"
37
40
  >
38
- <option value="default">{{ $t('Default version') }}</option>
39
- <option value="large">{{ $t('Large version') }}</option>
40
- <option value="emission" v-if="podcast && podcast.podcastId">{{
41
- $t('Emission version')
42
- }}</option>
41
+ <option value="default">
42
+ {{ $t('Default version') }}
43
+ </option>
44
+ <option value="large">
45
+ {{ $t('Large version') }}
46
+ </option>
47
+ <template v-if="isBeta">
48
+ <option
49
+ v-for="player in customPlayersDisplay"
50
+ :key="player.customId"
51
+ :value="player.customId"
52
+ >
53
+ {{ $t('Custom version') + " «" +player.name+"»" }}
54
+ </option>
55
+ </template>
43
56
  <option
44
- value="largeEmission"
45
57
  v-if="podcast && podcast.podcastId"
46
- >{{ $t('Large emission version') }}</option
58
+ value="emission"
47
59
  >
60
+ {{
61
+ $t('Emission version')
62
+ }}
63
+ </option>
64
+ <option
65
+ v-if="podcast && podcast.podcastId"
66
+ value="largeEmission"
67
+ >
68
+ {{ $t('Large emission version') }}
69
+ </option>
48
70
  <option
49
- value="largeSuggestion"
50
71
  v-if="podcast && podcast.podcastId"
51
- >{{ $t('Large suggestion version') }}</option
72
+ value="largeSuggestion"
52
73
  >
74
+ {{ $t('Large suggestion version') }}
75
+ </option>
53
76
  </select>
54
77
  </template>
55
78
  </div>
56
79
  <div class="d-flex justify-content-around mt-3 flex-grow w-100">
57
- <div class="d-flex flex-column align-items-center flex-shrink mr-3">
58
- <div class="font-weight-600">{{ $t('Choose color') }}</div>
59
- <swatches
80
+ <div class="d-flex flex-column align-items-center flex-shrink me-3">
81
+ <div class="fw-600">
82
+ {{ $t('Choose color') }}
83
+ </div>
84
+ <VSwatches
60
85
  v-model="color"
61
86
  class="c-hand input-no-outline"
62
87
  show-fallback
63
88
  colors="text-advanced"
64
89
  popover-to="right"
65
90
  :data-color="color"
66
- ></swatches>
91
+ />
67
92
  </div>
68
93
  <div class="d-flex flex-column align-items-center">
69
- <div class="font-weight-600">{{ $t('Choose theme') }}</div>
70
- <div class="d-flex">
71
- <swatches
72
- v-model="theme"
73
- :data-theme="theme"
74
- class="c-hand input-no-outline mr-1"
75
- :swatch-style="{
76
- padding: '0px 0px',
77
- marginRight: '0px',
78
- marginBottom: '0px',
79
- border: '1px gray solid',
80
- }"
81
- :wrapper-style="{
82
- paddingTop: '0px',
83
- paddingLeft: '0px',
84
- paddingRight: '0px',
85
- paddingBottom: '0px',
86
- }"
87
- :colors="['#000000']"
88
- inline
89
- ></swatches>
90
- <swatches
94
+ <div class="fw-600">
95
+ {{ $t('Choose theme') }}
96
+ </div>
97
+ <div
98
+ v-if="!isBeta"
99
+ class="d-flex"
100
+ >
101
+ <VSwatches
102
+ v-for="myColor in colors"
103
+ :key="myColor"
91
104
  v-model="theme"
92
105
  :data-theme="theme"
93
- class="c-hand input-no-outline"
106
+ class="c-hand input-no-outline me-1"
94
107
  :swatch-style="{
95
108
  padding: '0px 0px',
96
109
  marginRight: '0px',
@@ -103,37 +116,58 @@
103
116
  paddingRight: '0px',
104
117
  paddingBottom: '0px',
105
118
  }"
106
- :colors="['#ffffff']"
119
+ :swatches="[myColor]"
107
120
  inline
108
- ></swatches>
121
+ />
109
122
  </div>
123
+ <VSwatches
124
+ v-else
125
+ v-model="theme"
126
+ class="c-hand input-no-outline"
127
+ show-fallback
128
+ colors="text-advanced"
129
+ popover-to="right"
130
+ :data-color="theme"
131
+ />
110
132
  </div>
111
133
  </div>
134
+ <div v-if="displayBetaChoice">
135
+ <input
136
+ id="isBetaCheckbox"
137
+ v-model="isBeta"
138
+ type="checkbox"
139
+ class="form-check-input"
140
+ >
141
+ <label
142
+ class="form-check-label me-2"
143
+ for="isBetaCheckbox"
144
+ >{{ $t('Use beta version') }}</label>
145
+ </div>
112
146
  <div
113
- class="d-flex align-items-center flex-wrap"
114
147
  v-if="isPodcastNotVisible || playlist"
148
+ class="d-flex align-items-center flex-wrap"
115
149
  >
116
- <div class="checkbox-saooti">
150
+ <div>
117
151
  <input
118
- type="checkbox"
119
- class="custom-control-input"
120
152
  id="isVisibleCheckbox"
121
153
  v-model="isVisible"
122
- />
154
+ type="checkbox"
155
+ class="form-check-input"
156
+ >
123
157
  <label
124
- class="custom-control-label mr-2"
158
+ class="form-check-label me-2"
125
159
  for="isVisibleCheckbox"
126
- >{{ titleStillAvailable }}</label
127
- >
160
+ >{{ titleStillAvailable }}</label>
128
161
  </div>
129
162
  </div>
130
163
  </div>
131
164
  <PlayerParameters
132
- v-if="!podcast || isEmission || isLargeEmission || isLargeSuggestion"
165
+ v-if="isPlayerParameter"
133
166
  :podcast="podcast"
134
167
  :playlist="playlist"
135
- :iFrameModel="iFrameModel"
136
- :isVisible="isVisible"
168
+ :i-frame-model="iFrameModel"
169
+ :is-visible="isVisible"
170
+ @displayArticle="updateDisplayArticle"
137
171
  @episodeNumbers="updateEpisodeNumber"
138
172
  @proceedReading="updateProceedReading"
139
173
  @isVisible="updateIsVisible"
@@ -150,127 +184,98 @@
150
184
  </div>
151
185
  <ShareModalPlayer
152
186
  v-if="isShareModal"
187
+ :embed-link="iFrame"
188
+ :embedly-link="iFrameSrc"
189
+ :direct-link="podcast"
153
190
  @close="isShareModal = false"
154
- :embedLink="iFrame"
155
- :embedlyLink="iFrameSrc"
156
- :directLink="podcast"
157
- ></ShareModalPlayer>
191
+ />
158
192
  </div>
159
193
  </template>
160
194
 
161
- <style lang="scss">
162
- @import '../../../sass/_variables.scss';
163
- .custom-radio .custom-control-label {
164
- cursor: pointer;
165
- }
166
- .input-share-player {
167
- border: 1px solid #ddd;
168
- border-radius: 50px;
169
- &#number-input {
170
- margin: 0 1rem;
171
- width: 60px;
172
- }
173
- }
174
- .sticker {
175
- align-self: center;
176
- background: rgba($octopus-primary-color, 0.3);
177
- padding: 0.5rem;
178
- transition: all 0.5s ease;
179
- color: #41403e;
180
- letter-spacing: 1px;
181
- outline: none;
182
- box-shadow: 10px 10px 34px -15px hsla(0, 0%, 0%, 0.4);
183
- border-radius: 255px 15px 225px 15px/15px 225px 15px 255px;
184
- border: solid 2px #41403e;
185
- &:hover {
186
- box-shadow: 2px 8px 4px -6px hsla(0, 0%, 0%, 0.3);
187
- }
188
- }
189
- .maxIframe {
190
- max-width: 300px;
191
- }
192
- .vue-swatches__container {
193
- padding: 0 !important;
194
- background-color: transparent !important;
195
- }
196
- .vue-swatches__swatch--selected {
197
- border: 2px #40a372 solid !important;
198
- box-shadow: unset !important;
199
- -webkit-box-shadow: unset !important;
200
- }
201
- </style>
202
-
203
195
  <script lang="ts">
204
- import ShareModalPlayer from '../../misc/modal/ShareModalPlayer.vue';
205
- import PlayerParameters from './PlayerParameters.vue';
206
196
  import { state } from '../../../store/paramStore';
207
- //@ts-ignore
208
- import Swatches from 'vue-swatches';
209
- import 'vue-swatches/dist/vue-swatches.min.css';
197
+ import VSwatches from 'vue3-swatches';
210
198
  import profileApi from '@/api/profile';
211
-
212
- import { defineComponent } from 'vue'
199
+ const octopusApi = require('@saooti/octopus-api');
200
+ import { Podcast } from '@/store/class/podcast';
201
+ import { Emission } from '@/store/class/emission';
202
+ import { Playlist } from '@/store/class/playlist';
203
+ import { CustomPlayer } from '@/store/class/customPlayer';
204
+ import { defineComponent, defineAsyncComponent } from 'vue';
205
+ const ShareModalPlayer = defineAsyncComponent(() => import('../../misc/modal/ShareModalPlayer.vue'));
206
+ const PlayerParameters = defineAsyncComponent(() => import('./PlayerParameters.vue'));
213
207
  export default defineComponent({
214
- props: [
215
- 'podcast',
216
- 'emission',
217
- 'organisationId',
218
- 'exclusive',
219
- 'notExclusive',
220
- 'playlist',
221
- 'isEducation',
222
- ],
223
-
224
208
  components: {
225
209
  ShareModalPlayer,
226
- Swatches,
210
+ VSwatches,
227
211
  PlayerParameters,
228
212
  },
229
213
 
230
- async created() {
231
- await this.initColor();
232
- if (this.isLiveReadyToRecord) {
233
- this.iFrameModel = 'large';
234
- }
214
+ props: {
215
+ podcast: { default: undefined, type: Object as ()=> Podcast},
216
+ emission: { default: undefined, type: Object as ()=> Emission},
217
+ playlist: { default: undefined, type: Object as ()=> Playlist},
218
+ organisationId: { default: undefined, type: String},
219
+ isEducation: { default: false, type: Boolean},
220
+ exclusive: { default: false, type: Boolean},
221
+ notExclusive: { default: true, type: Boolean},
235
222
  },
236
223
 
237
224
  data() {
238
225
  return {
239
- iFrameModel: 'default',
240
- isShareModal: false,
241
- color: '#40a372',
242
- theme: '#ffffff',
243
- proceedReading: true,
244
- episodeNumbers: 'number',
245
- iFrameNumber: '3',
246
- startTime: 0,
247
- isVisible: false,
226
+ iFrameModel: 'default' as string,
227
+ isShareModal: false as boolean,
228
+ color: '#40a372' as string,
229
+ theme: '#000000' as string,
230
+ proceedReading: true as boolean,
231
+ episodeNumbers: 'number' as string,
232
+ iFrameNumber: '3' as string,
233
+ startTime: 0 as number,
234
+ isVisible: false as boolean,
235
+ displayArticle: true as boolean,
236
+ displayBetaChoice: false as boolean,
237
+ customPlayers: [] as Array<CustomPlayer>,
238
+ isBeta: false as boolean,
239
+ colors: ['#000000', '#ffffff'],
248
240
  };
249
241
  },
242
+
250
243
  computed: {
251
- isEmission():boolean {
244
+ customPlayersDisplay(): Array<CustomPlayer>{
245
+ return this.customPlayers.filter((player: CustomPlayer)=>{
246
+ return (('EPISODE' === player.typePlayer ||'SUGGESTION' === player.typePlayer) && this.podcast && this.podcast.podcastId) ||
247
+ ('EMISSION' === player.typePlayer && this.emission && !this.podcast)|| ('PLAYLIST' === player.typePlayer && this.playlist );
248
+ });
249
+ },
250
+ miniplayerBaseUrl(): string{
251
+ if(this.isBeta){
252
+ return state.podcastPage.MiniplayerBetaUri;
253
+ }
254
+ return state.podcastPage.MiniplayerUri;
255
+ },
256
+ isEmission(): boolean {
252
257
  return 'emission' === this.iFrameModel;
253
258
  },
254
- isLargeEmission():boolean {
259
+ isLargeEmission(): boolean {
255
260
  return 'largeEmission' === this.iFrameModel;
256
261
  },
257
- isLargeSuggestion():boolean {
262
+ isLargeSuggestion(): boolean {
258
263
  return 'largeSuggestion' === this.iFrameModel;
259
264
  },
260
- titleStillAvailable():string {
261
- if (this.isPodcastNotVisible) return this.$t('Podcast still available');
262
- return this.$t('Podcasts still available');
265
+ titleStillAvailable(): string {
266
+ if (this.isPodcastNotVisible) return this.$t('Podcast still available').toString();
267
+ return this.$t('Podcasts still available').toString();
263
268
  },
264
- isLiveReadyToRecord():boolean {
269
+ isLiveReadyToRecord(): boolean {
265
270
  if (this.podcast)
266
271
  return (
267
- this.podcast.conferenceId &&
272
+ undefined !== this.podcast.conferenceId &&
268
273
  0 !== this.podcast.conferenceId &&
269
274
  this.podcast.processingStatus === 'READY_TO_RECORD'
270
275
  );
271
276
  return false;
272
277
  },
273
- noAd() {
278
+ noAd(): boolean {
274
279
  if (
275
280
  (this.podcast &&
276
281
  this.podcast.organisation.id !== this.organisationId &&
@@ -283,11 +288,11 @@ export default defineComponent({
283
288
  }
284
289
  return false;
285
290
  },
286
- authenticated():boolean {
291
+ authenticated(): boolean {
287
292
  return state.generalParameters.authenticated;
288
293
  },
289
- iFrameSrc() {
290
- let url = [''];
294
+ iFrameSrc(): string {
295
+ const url = [''];
291
296
  let iFrameNumber = '/' + this.iFrameNumber;
292
297
  if (
293
298
  (!this.podcast || this.isEmission || this.isLargeEmission) &&
@@ -295,38 +300,47 @@ export default defineComponent({
295
300
  ) {
296
301
  iFrameNumber = '/0';
297
302
  }
298
- if (!this.podcast && !this.playlist) {
303
+ if (!this.podcast && !this.playlist && this.emission) {
299
304
  if ('default' === this.iFrameModel) {
300
305
  url.push(
301
- `${state.podcastPage.MiniplayerUri}miniplayer/emission/${this.emission.emissionId}${iFrameNumber}`
306
+ `${this.miniplayerBaseUrl}miniplayer/emission/${this.emission.emissionId}${iFrameNumber}`
307
+ );
308
+ }else if('large' === this.iFrameModel) {
309
+ url.push(
310
+ `${this.miniplayerBaseUrl}miniplayer/emissionLarge/${this.emission.emissionId}${iFrameNumber}`
302
311
  );
303
- } else {
312
+ }
313
+ else {
304
314
  url.push(
305
- `${state.podcastPage.MiniplayerUri}miniplayer/emissionLarge/${this.emission.emissionId}${iFrameNumber}`
315
+ `${this.miniplayerBaseUrl}miniplayer/${this.iFrameModel}/${this.emission.emissionId}${iFrameNumber}`
306
316
  );
307
317
  }
308
318
  } else if (this.playlist) {
309
319
  if ('default' === this.iFrameModel) {
310
320
  url.push(
311
- `${state.podcastPage.MiniplayerUri}miniplayer/playlist/${this.playlist.playlistId}`
321
+ `${this.miniplayerBaseUrl}miniplayer/playlist/${this.playlist.playlistId}`
322
+ );
323
+ } else if('large' === this.iFrameModel) {
324
+ url.push(
325
+ `${this.miniplayerBaseUrl}miniplayer/playlistLarge/${this.playlist.playlistId}`
312
326
  );
313
- } else {
327
+ }else {
314
328
  url.push(
315
- `${state.podcastPage.MiniplayerUri}miniplayer/playlistLarge/${this.playlist.playlistId}`
329
+ `${this.miniplayerBaseUrl}miniplayer/${this.iFrameModel}/${this.playlist.playlistId}`
316
330
  );
317
331
  }
318
- } else {
332
+ } else if(this.emission && this.podcast){
319
333
  if (this.isEmission || this.isLargeEmission) {
320
334
  url.push(
321
- `${state.podcastPage.MiniplayerUri}miniplayer/${this.iFrameModel}/${this.emission.emissionId}${iFrameNumber}/${this.podcast.podcastId}`
335
+ `${this.miniplayerBaseUrl}miniplayer/${this.iFrameModel}/${this.emission.emissionId}${iFrameNumber}/${this.podcast.podcastId}`
322
336
  );
323
337
  } else if (this.isLargeSuggestion) {
324
338
  url.push(
325
- `${state.podcastPage.MiniplayerUri}miniplayer/${this.iFrameModel}/${this.podcast.podcastId}${iFrameNumber}`
339
+ `${this.miniplayerBaseUrl}miniplayer/${this.iFrameModel}/${this.podcast.podcastId}${iFrameNumber}`
326
340
  );
327
- } else {
341
+ } else {
328
342
  url.push(
329
- `${state.podcastPage.MiniplayerUri}miniplayer/${this.iFrameModel}/${this.podcast.podcastId}`
343
+ `${this.miniplayerBaseUrl}miniplayer/${this.iFrameModel}/${this.podcast.podcastId}`
330
344
  );
331
345
  }
332
346
  }
@@ -337,22 +351,22 @@ export default defineComponent({
337
351
  '&theme=' +
338
352
  this.theme.substring(1)
339
353
  );
340
-
341
354
  if (!this.proceedReading) {
342
355
  url.push('&proceed=false');
343
356
  }
357
+ if(!this.displayArticle){
358
+ url.push('&article=false');
359
+ }
344
360
  url.push('&time=' + this.startTime);
345
361
  if (this.isVisible) {
346
- url.push('&key=' + window.btoa(this.dataTitle));
362
+ url.push('&key=' + window.btoa(this.dataTitle.toString()));
347
363
  }
348
364
  return url.join('');
349
365
  },
350
-
351
- iFrameWidth() {
366
+ iFrameWidth(): string {
352
367
  return '100%';
353
368
  },
354
-
355
- iFrameHeight() {
369
+ iFrameHeight(): string {
356
370
  switch (this.iFrameModel) {
357
371
  case 'large':
358
372
  if (this.podcast) return '180px';
@@ -397,67 +411,108 @@ export default defineComponent({
397
411
  return '530px';
398
412
  }
399
413
  },
400
-
401
- iFrame() {
414
+ iFrame(): string {
402
415
  return `<iframe src="${this.iFrameSrc}" width="${this.iFrameWidth}" height="${this.iFrameHeight}" scrolling="no" frameborder="0"></iframe>`;
403
416
  },
404
-
405
- isPodcastNotVisible():boolean {
417
+ isPodcastNotVisible(): boolean {
406
418
  return (
407
- this.podcast &&
419
+ undefined !== this.podcast &&
408
420
  !this.podcast.availability.visibility &&
409
421
  ('default' === this.iFrameModel || 'large' === this.iFrameModel)
410
422
  );
411
423
  },
412
-
413
- dataTitle():any {
424
+ dataTitle(): number {
414
425
  if (this.podcast) return this.podcast.podcastId;
415
426
  if (this.emission) return this.emission.emissionId;
416
- return this.playlist.playlistId;
427
+ if (this.playlist) return this.playlist.playlistId;
428
+ return 0;
417
429
  },
430
+ isPlayerParameter(): boolean{
431
+ return !this.podcast || (this.podcast.article && 0 !== this.podcast.article.length) || this.isEmission || this.isLargeEmission || this.isLargeSuggestion;
432
+ }
433
+ },
434
+ async created() {
435
+ await this.initColor();
436
+ if (this.isLiveReadyToRecord) {
437
+ this.iFrameModel = 'large';
438
+ }
418
439
  },
419
-
420
440
  methods: {
421
- async initColor() {
441
+ async initColor(): Promise<void> {
422
442
  if (!this.authenticated) return;
423
- let orgaId = undefined;
424
- if (this.podcast) {
425
- orgaId = this.podcast.organisation.id;
426
- } else if (this.playlist) {
427
- orgaId = this.playlist.organisation.id;
428
- } else {
429
- orgaId = this.emission.orga.id;
443
+ let data;
444
+ if(this.$store.state.organisation && this.$store.state.organisation.attributes && Object.keys(this.$store.state.organisation.attributes).length > 1){
445
+ data = this.$store.state.organisation.attributes;
446
+ }else{
447
+ data= await profileApi.fetchOrganisationAttibutes(
448
+ this.$store.state,
449
+ state.generalParameters.organisationId
450
+ );
430
451
  }
431
- const data:any = await profileApi.fetchOrganisationAttibutes(
432
- this.$store,
433
- orgaId
434
- );
435
- if (data.hasOwnProperty('COLOR')) {
452
+ if (Object.prototype.hasOwnProperty.call(data,'COLOR')) {
436
453
  this.color = data.COLOR;
437
454
  } else {
438
455
  this.color = '#40a372';
439
456
  }
440
- if (data.hasOwnProperty('THEME')) {
457
+ if (Object.prototype.hasOwnProperty.call(data,'THEME')) {
441
458
  this.theme = data.THEME;
442
459
  } else {
443
460
  this.theme = '#ffffff';
444
461
  }
462
+ if (Object.prototype.hasOwnProperty.call(data,'playerBeta')) {
463
+ this.displayBetaChoice = data.playerBeta;
464
+ let dataFetched = await octopusApi.fetchCustomPlayer('customPlayer/organisation/'+ this.organisationId);
465
+ this.customPlayers = dataFetched.content;
466
+ const totalCount = dataFetched.totalElements;
467
+ let index = 1;
468
+ while (totalCount > this.customPlayers.length) {
469
+ dataFetched = await octopusApi.fetchCustomPlayer('customPlayer/organisation/'+ this.organisationId+'?start='+index);
470
+ this.customPlayers = this.customPlayers.concat(dataFetched.content);
471
+ ++index;
472
+ }
473
+ }
474
+ return;
445
475
  },
446
- updateEpisodeNumber(value: string) {
476
+ updateEpisodeNumber(value: string): void {
447
477
  this.episodeNumbers = value;
448
478
  },
449
- updateProceedReading(value: boolean) {
479
+ updateProceedReading(value: boolean): void {
450
480
  this.proceedReading = value;
451
481
  },
452
- updateIframeNumber(value: string) {
482
+ updateIframeNumber(value: string): void {
453
483
  this.iFrameNumber = value;
454
484
  },
455
- updateStartTime(value: number) {
485
+ updateStartTime(value: number): void {
456
486
  this.startTime = value;
457
487
  },
458
- updateIsVisible(value: boolean) {
488
+ updateIsVisible(value: boolean): void {
459
489
  this.isVisible = value;
460
490
  },
491
+ updateDisplayArticle(value: boolean): void{
492
+ this.displayArticle = value;
493
+ }
461
494
  },
462
- });
495
+ })
463
496
  </script>
497
+
498
+ <style lang="scss">
499
+ @import '../../../sass/_variables.scss';
500
+ .sticker {
501
+ align-self: center;
502
+ background: rgba($octopus-primary-color, 0.3);
503
+ padding: 0.5rem;
504
+ transition: all 0.5s ease;
505
+ color: #41403e;
506
+ letter-spacing: 1px;
507
+ outline: none;
508
+ box-shadow: 10px 10px 34px -15px hsla(0, 0%, 0%, 0.4);
509
+ border-radius: 255px 15px 225px 15px/15px 225px 15px 255px;
510
+ border: solid 2px #41403e;
511
+ &:hover {
512
+ box-shadow: 2px 8px 4px -6px hsla(0, 0%, 0%, 0.3);
513
+ }
514
+ }
515
+ .maxIframe {
516
+ max-width: 300px;
517
+ }
518
+ </style>