@saooti/octopus-sdk 0.28.16 → 1.1.1

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 (328) hide show
  1. package/README.md +188 -2
  2. package/index.ts +45 -11
  3. package/package.json +46 -48
  4. package/public/config.ts +4 -0
  5. package/public/css/fonts/icomoon.eot +0 -0
  6. package/public/css/fonts/icomoon.svg +129 -0
  7. package/public/css/fonts/icomoon.ttf +0 -0
  8. package/public/css/fonts/icomoon.woff +0 -0
  9. package/public/css/fonts/style.css +185 -1266
  10. package/public/img/403.jpeg +0 -0
  11. package/public/img/404.svg +242 -0
  12. package/public/img/ouest_france_logo.svg +12 -0
  13. package/src/App.vue +45 -24
  14. package/src/api/classicCrud.ts +34 -0
  15. package/src/api/initialize.ts +4 -2
  16. package/src/assets/bootstrap-diff.scss +197 -0
  17. package/src/assets/form.scss +77 -77
  18. package/src/assets/general.scss +287 -301
  19. package/src/assets/live.scss +39 -0
  20. package/src/assets/modal.scss +43 -50
  21. package/src/assets/multiselect.scss +522 -590
  22. package/src/assets/octopus-library.scss +17 -4
  23. package/src/assets/share.scss +150 -250
  24. package/src/assets/transition.scss +98 -2
  25. package/src/components/display/aggregator/RssSection.vue +4 -6
  26. package/src/components/display/categories/CategoryChooser.vue +100 -79
  27. package/src/components/display/categories/CategoryFilter.vue +117 -37
  28. package/src/components/display/categories/CategoryList.vue +121 -108
  29. package/src/components/display/comments/AddCommentModal.vue +98 -94
  30. package/src/components/display/comments/CommentBasicView.vue +95 -0
  31. package/src/components/display/comments/CommentInput.vue +175 -155
  32. package/src/components/display/comments/CommentItem.vue +152 -168
  33. package/src/components/display/comments/CommentList.vue +123 -229
  34. package/src/components/display/comments/CommentParentInfo.vue +26 -58
  35. package/src/components/display/comments/CommentPlayer.vue +51 -49
  36. package/src/components/display/comments/CommentSection.vue +44 -67
  37. package/src/components/display/edit/EditBox.vue +11 -5
  38. package/src/components/display/edit/EditCommentBox.vue +121 -29
  39. package/src/components/display/emission/EmissionChooser.vue +73 -81
  40. package/src/components/display/emission/EmissionInlineList.vue +130 -128
  41. package/src/components/display/emission/EmissionItem.vue +68 -109
  42. package/src/components/display/emission/EmissionList.vue +140 -146
  43. package/src/components/display/emission/EmissionPlayerItem.vue +186 -148
  44. package/src/components/display/filter/AdvancedSearch.vue +192 -273
  45. package/src/components/display/filter/CategoryFilter.vue +51 -59
  46. package/src/components/display/filter/MonetizableFilter.vue +17 -16
  47. package/src/components/display/filter/ProductorSearch.vue +149 -149
  48. package/src/components/display/filter/RubriqueChoice.vue +33 -37
  49. package/src/components/display/filter/RubriqueFilter.vue +132 -122
  50. package/src/components/display/list/ListPaginate.vue +145 -0
  51. package/src/components/display/list/Paginate.vue +218 -0
  52. package/src/components/display/live/CountDown.vue +19 -12
  53. package/src/components/display/live/LiveHorizontalList.vue +78 -55
  54. package/src/components/display/live/LiveItem.vue +136 -121
  55. package/src/components/display/live/LiveList.vue +172 -276
  56. package/src/components/display/organisation/OrganisationChooser.vue +104 -122
  57. package/src/components/display/organisation/OrganisationChooserLight.vue +46 -37
  58. package/src/components/display/participant/ParticipantItem.vue +91 -115
  59. package/src/components/display/participant/ParticipantList.vue +131 -117
  60. package/src/components/display/playlist/PlaylistItem.vue +54 -78
  61. package/src/components/display/playlist/PlaylistList.vue +91 -83
  62. package/src/components/display/playlist/PodcastList.vue +113 -128
  63. package/src/components/display/playlist/PodcastPlaylistInlineList.vue +191 -0
  64. package/src/components/display/podcasts/AnimatorsItem.vue +28 -39
  65. package/src/components/display/podcasts/ParticipantDescription.vue +62 -74
  66. package/src/components/display/podcasts/PodcastFilterList.vue +47 -89
  67. package/src/components/display/podcasts/PodcastImage.vue +195 -229
  68. package/src/components/display/podcasts/PodcastInlineList.vue +64 -282
  69. package/src/components/display/podcasts/PodcastInlineListClassic.vue +240 -0
  70. package/src/components/display/podcasts/PodcastInlineListTemplate.vue +167 -0
  71. package/src/components/display/podcasts/PodcastItem.vue +93 -227
  72. package/src/components/display/podcasts/PodcastItemInfo.vue +166 -0
  73. package/src/components/display/podcasts/PodcastList.vue +115 -134
  74. package/src/components/display/podcasts/PodcastModuleBox.vue +234 -0
  75. package/src/components/display/podcasts/PodcastPlayBar.vue +101 -0
  76. package/src/components/display/podcasts/PodcastSwiperList.vue +204 -0
  77. package/src/components/display/podcasts/TagList.vue +60 -39
  78. package/src/components/display/rubriques/RubriqueChooser.vue +114 -95
  79. package/src/components/display/rubriques/RubriqueList.vue +111 -106
  80. package/src/components/display/sharing/PlayerParameters.vue +90 -151
  81. package/src/components/display/sharing/QrCode.vue +40 -27
  82. package/src/components/display/sharing/ShareButtons.vue +64 -299
  83. package/src/components/display/sharing/ShareButtonsIntern.vue +225 -0
  84. package/src/components/display/sharing/ShareDistribution.vue +99 -140
  85. package/src/components/display/sharing/SharePlayer.vue +155 -370
  86. package/src/components/display/sharing/SharePlayerColors.vue +78 -0
  87. package/src/components/display/sharing/SharePlayerTypes.vue +112 -0
  88. package/src/components/display/sharing/SplitButton.vue +42 -0
  89. package/src/components/display/sharing/SubscribeButtons.vue +62 -179
  90. package/src/components/display/studio/RecordingItemButton.vue +4 -6
  91. package/src/components/form/ClassicCheckbox.vue +66 -0
  92. package/src/components/form/ClassicLoading.vue +28 -0
  93. package/src/components/form/ClassicRadio.vue +66 -0
  94. package/src/components/form/ClassicSearch.vue +86 -0
  95. package/src/components/form/ClassicSelect.vue +65 -0
  96. package/src/components/misc/ErrorMessage.vue +27 -14
  97. package/src/components/misc/Footer.vue +132 -127
  98. package/src/components/misc/HomeDropdown.vue +93 -150
  99. package/src/components/misc/LeftMenu.vue +121 -192
  100. package/src/components/misc/Popover.vue +118 -0
  101. package/src/components/misc/Snackbar.vue +70 -35
  102. package/src/components/misc/TopBar.vue +192 -308
  103. package/src/components/misc/modal/ClipboardModal.vue +35 -50
  104. package/src/components/misc/modal/MessageModal.vue +71 -48
  105. package/src/components/misc/modal/NewsletterModal.vue +260 -231
  106. package/src/components/misc/modal/QrCodeModal.vue +42 -60
  107. package/src/components/misc/modal/ShareModalPlayer.vue +136 -70
  108. package/src/components/misc/player/Player.vue +146 -0
  109. package/src/components/misc/player/PlayerCompact.vue +154 -0
  110. package/src/components/misc/player/PlayerLarge.vue +166 -0
  111. package/src/components/misc/player/PlayerProgressBar.vue +112 -0
  112. package/src/components/misc/player/PlayerTimeline.vue +61 -0
  113. package/src/components/mixins/functions.ts +11 -43
  114. package/src/components/mixins/handle403.ts +17 -0
  115. package/src/components/mixins/init.ts +8 -6
  116. package/src/components/mixins/orgaComputed.ts +15 -0
  117. package/src/components/mixins/organisationFilter.ts +35 -18
  118. package/src/components/mixins/player/playerComment.ts +98 -0
  119. package/src/components/mixins/player/playerDisplay.ts +113 -0
  120. package/src/components/mixins/player/playerLive.ts +111 -0
  121. package/src/components/mixins/player/playerLogic.ts +225 -0
  122. package/src/components/mixins/tagOfMixins.ts +19 -0
  123. package/src/components/pages/Category.vue +21 -26
  124. package/src/components/pages/Emission.vue +136 -162
  125. package/src/components/pages/Emissions.vue +60 -93
  126. package/src/components/pages/Error403Page.vue +60 -0
  127. package/src/components/pages/Home.vue +32 -39
  128. package/src/components/pages/Lives.vue +40 -46
  129. package/src/components/pages/PageNotFound.vue +55 -0
  130. package/src/components/pages/Participant.vue +110 -113
  131. package/src/components/pages/Participants.vue +21 -45
  132. package/src/components/pages/Playlist.vue +84 -75
  133. package/src/components/pages/Playlists.vue +29 -47
  134. package/src/components/pages/Podcast.vue +203 -434
  135. package/src/components/pages/Podcasts.vue +75 -134
  136. package/src/components/pages/Rubrique.vue +21 -29
  137. package/src/components/pages/Search.vue +33 -79
  138. package/src/helper/dom.ts +1 -1
  139. package/src/helper/duration.ts +1 -1
  140. package/src/helper/useEventListener.ts +18 -0
  141. package/src/i18n.ts +36 -0
  142. package/src/locale/de.ts +309 -0
  143. package/src/locale/educationen.ts +1 -1
  144. package/src/locale/educationfr.ts +1 -1
  145. package/src/locale/en.ts +45 -28
  146. package/src/locale/es.ts +309 -0
  147. package/src/locale/fr.ts +25 -8
  148. package/src/locale/it.ts +307 -0
  149. package/src/locale/messages.ts +9 -2
  150. package/src/locale/sl.ts +309 -0
  151. package/src/main.ts +59 -85
  152. package/src/router/router.ts +60 -39
  153. package/src/sass/_variables.scss +10 -8
  154. package/src/shims-tsx.d.ts +2 -0
  155. package/src/shims-vue-recaptcha-v3.d.ts +9 -0
  156. package/src/shims-vue.d.ts +5 -4
  157. package/src/store/AppStore.ts +8 -9
  158. package/src/store/class/adserver/adserverConfig.ts +9 -0
  159. package/src/store/class/adserver/adserverOtherEmission.ts +13 -0
  160. package/src/store/class/adserver/adserverTiming.ts +10 -0
  161. package/src/store/class/cartouchier/cartouche.ts +15 -0
  162. package/src/store/class/cartouchier/cartouchier.ts +9 -0
  163. package/src/store/class/conference/conference.ts +35 -0
  164. package/src/store/class/conference/conferenceMessage.ts +10 -0
  165. package/src/store/class/conference/conferenceParticipant.ts +18 -0
  166. package/src/store/class/conference/pad.ts +15 -0
  167. package/src/store/class/conference/studioCall.ts +7 -0
  168. package/src/store/class/contract/contract.ts +7 -0
  169. package/src/store/class/contract/contractOrganisation.ts +7 -0
  170. package/src/store/class/ftp/ftpEmission.ts +41 -0
  171. package/src/store/class/ftp/ftpParam.ts +12 -0
  172. package/src/store/class/ftp/testFtpEmission.ts +5 -0
  173. package/src/store/class/general/audioView.ts +21 -0
  174. package/src/store/class/general/category.ts +10 -0
  175. package/src/store/class/general/comment.ts +16 -0
  176. package/src/store/class/general/customPlayer.ts +9 -0
  177. package/src/store/class/general/emission.ts +23 -0
  178. package/src/store/class/general/fetchParam.ts +3 -0
  179. package/src/store/class/general/initState.ts +25 -0
  180. package/src/store/class/general/interfacePageable.ts +16 -0
  181. package/src/store/class/general/ituneCategory.ts +5 -0
  182. package/src/store/class/general/media.ts +14 -0
  183. package/src/store/class/general/organisation.ts +20 -0
  184. package/src/store/class/general/pageable.ts +13 -0
  185. package/src/store/class/general/participant.ts +12 -0
  186. package/src/store/class/{player.ts → general/player.ts} +5 -3
  187. package/src/store/class/general/playlist.ts +13 -0
  188. package/src/store/class/general/podcast.ts +43 -0
  189. package/src/store/class/general/sortPageable.ts +5 -0
  190. package/src/store/class/general/soundcastCategory.ts +8 -0
  191. package/src/store/class/ouestFrance/ofTag.ts +36 -0
  192. package/src/store/class/ouestFrance/ofTagInfo.ts +9 -0
  193. package/src/store/class/ouestFrance/ofTagPage.ts +7 -0
  194. package/src/store/class/ouestFrance/ofTagSeo.ts +7 -0
  195. package/src/store/class/ouestFrance/ofTagVente.ts +6 -0
  196. package/src/store/class/ouestFrance/ofTagWithParents.ts +26 -0
  197. package/src/store/class/rss/aggregator.ts +28 -0
  198. package/src/store/class/rss/rssEmission.ts +14 -0
  199. package/src/store/class/rss/rssInfo.ts +8 -0
  200. package/src/store/class/rubrique/rubriquage.ts +10 -0
  201. package/src/store/class/rubrique/rubriquageFilter.ts +6 -0
  202. package/src/store/class/rubrique/rubrique.ts +9 -0
  203. package/src/store/class/stat/statArrayIncome.ts +6 -0
  204. package/src/store/class/stat/statArrayObject.ts +34 -0
  205. package/src/store/class/stat/statGraph.ts +7 -0
  206. package/src/store/class/user/person.ts +15 -0
  207. package/src/store/class/user/profile.ts +12 -0
  208. package/src/store/class/user/userKeycloak.ts +24 -0
  209. package/src/store/paramStore.ts +221 -241
  210. package/src/store/typeAppStore.ts +45 -28
  211. package/src/vuex-shim.d.ts +8 -0
  212. package/tsconfig.json +2 -1
  213. package/vue.config.js +3 -1
  214. package/public/css/fonts/saooti-ui.eot +0 -0
  215. package/public/css/fonts/saooti-ui.svg +0 -840
  216. package/public/css/fonts/saooti-ui.ttf +0 -0
  217. package/public/css/fonts/saooti-ui.woff +0 -0
  218. package/public/css/fonts/stitcher-logo.svg +0 -83
  219. package/public/img/article.png +0 -0
  220. package/src/api/comments.ts +0 -7
  221. package/src/api/emissions.ts +0 -7
  222. package/src/api/podcasts.ts +0 -7
  223. package/src/api/profile.ts +0 -8
  224. package/src/api/studio.ts +0 -8
  225. package/src/assets/bootstrap_scss/_alert.scss +0 -51
  226. package/src/assets/bootstrap_scss/_badge.scss +0 -54
  227. package/src/assets/bootstrap_scss/_breadcrumb.scss +0 -42
  228. package/src/assets/bootstrap_scss/_button-group.scss +0 -164
  229. package/src/assets/bootstrap_scss/_buttons.scss +0 -298
  230. package/src/assets/bootstrap_scss/_card.scss +0 -278
  231. package/src/assets/bootstrap_scss/_carousel.scss +0 -197
  232. package/src/assets/bootstrap_scss/_close.scss +0 -41
  233. package/src/assets/bootstrap_scss/_code.scss +0 -48
  234. package/src/assets/bootstrap_scss/_custom-forms.scss +0 -522
  235. package/src/assets/bootstrap_scss/_dropdown.scss +0 -201
  236. package/src/assets/bootstrap_scss/_forms.scss +0 -352
  237. package/src/assets/bootstrap_scss/_functions.scss +0 -134
  238. package/src/assets/bootstrap_scss/_grid.scss +0 -69
  239. package/src/assets/bootstrap_scss/_images.scss +0 -42
  240. package/src/assets/bootstrap_scss/_input-group.scss +0 -191
  241. package/src/assets/bootstrap_scss/_jumbotron.scss +0 -17
  242. package/src/assets/bootstrap_scss/_list-group.scss +0 -158
  243. package/src/assets/bootstrap_scss/_media.scss +0 -8
  244. package/src/assets/bootstrap_scss/_mixins.scss +0 -47
  245. package/src/assets/bootstrap_scss/_modal.scss +0 -243
  246. package/src/assets/bootstrap_scss/_nav.scss +0 -120
  247. package/src/assets/bootstrap_scss/_navbar.scss +0 -324
  248. package/src/assets/bootstrap_scss/_pagination.scss +0 -74
  249. package/src/assets/bootstrap_scss/_popover.scss +0 -170
  250. package/src/assets/bootstrap_scss/_print.scss +0 -141
  251. package/src/assets/bootstrap_scss/_progress.scss +0 -46
  252. package/src/assets/bootstrap_scss/_reboot.scss +0 -482
  253. package/src/assets/bootstrap_scss/_root.scss +0 -20
  254. package/src/assets/bootstrap_scss/_spinners.scss +0 -55
  255. package/src/assets/bootstrap_scss/_tables.scss +0 -185
  256. package/src/assets/bootstrap_scss/_toasts.scss +0 -44
  257. package/src/assets/bootstrap_scss/_tooltip.scss +0 -115
  258. package/src/assets/bootstrap_scss/_transitions.scss +0 -20
  259. package/src/assets/bootstrap_scss/_type.scss +0 -125
  260. package/src/assets/bootstrap_scss/_utilities.scss +0 -17
  261. package/src/assets/bootstrap_scss/_variables.scss +0 -1145
  262. package/src/assets/bootstrap_scss/bootstrap-grid.scss +0 -29
  263. package/src/assets/bootstrap_scss/bootstrap-reboot.scss +0 -12
  264. package/src/assets/bootstrap_scss/bootstrap.scss +0 -44
  265. package/src/assets/bootstrap_scss/mixins/_alert.scss +0 -13
  266. package/src/assets/bootstrap_scss/mixins/_background-variant.scss +0 -22
  267. package/src/assets/bootstrap_scss/mixins/_badge.scss +0 -17
  268. package/src/assets/bootstrap_scss/mixins/_border-radius.scss +0 -63
  269. package/src/assets/bootstrap_scss/mixins/_box-shadow.scss +0 -20
  270. package/src/assets/bootstrap_scss/mixins/_breakpoints.scss +0 -123
  271. package/src/assets/bootstrap_scss/mixins/_buttons.scss +0 -110
  272. package/src/assets/bootstrap_scss/mixins/_caret.scss +0 -62
  273. package/src/assets/bootstrap_scss/mixins/_clearfix.scss +0 -7
  274. package/src/assets/bootstrap_scss/mixins/_deprecate.scss +0 -10
  275. package/src/assets/bootstrap_scss/mixins/_float.scss +0 -14
  276. package/src/assets/bootstrap_scss/mixins/_forms.scss +0 -177
  277. package/src/assets/bootstrap_scss/mixins/_gradients.scss +0 -45
  278. package/src/assets/bootstrap_scss/mixins/_grid-framework.scss +0 -71
  279. package/src/assets/bootstrap_scss/mixins/_grid.scss +0 -69
  280. package/src/assets/bootstrap_scss/mixins/_hover.scss +0 -37
  281. package/src/assets/bootstrap_scss/mixins/_image.scss +0 -36
  282. package/src/assets/bootstrap_scss/mixins/_list-group.scss +0 -21
  283. package/src/assets/bootstrap_scss/mixins/_lists.scss +0 -7
  284. package/src/assets/bootstrap_scss/mixins/_nav-divider.scss +0 -11
  285. package/src/assets/bootstrap_scss/mixins/_pagination.scss +0 -22
  286. package/src/assets/bootstrap_scss/mixins/_reset-text.scss +0 -17
  287. package/src/assets/bootstrap_scss/mixins/_resize.scss +0 -6
  288. package/src/assets/bootstrap_scss/mixins/_screen-reader.scss +0 -34
  289. package/src/assets/bootstrap_scss/mixins/_size.scss +0 -7
  290. package/src/assets/bootstrap_scss/mixins/_table-row.scss +0 -39
  291. package/src/assets/bootstrap_scss/mixins/_text-emphasis.scss +0 -17
  292. package/src/assets/bootstrap_scss/mixins/_text-hide.scss +0 -11
  293. package/src/assets/bootstrap_scss/mixins/_text-truncate.scss +0 -8
  294. package/src/assets/bootstrap_scss/mixins/_transition.scss +0 -16
  295. package/src/assets/bootstrap_scss/mixins/_visibility.scss +0 -8
  296. package/src/assets/bootstrap_scss/utilities/_align.scss +0 -8
  297. package/src/assets/bootstrap_scss/utilities/_background.scss +0 -19
  298. package/src/assets/bootstrap_scss/utilities/_borders.scss +0 -75
  299. package/src/assets/bootstrap_scss/utilities/_clearfix.scss +0 -3
  300. package/src/assets/bootstrap_scss/utilities/_display.scss +0 -26
  301. package/src/assets/bootstrap_scss/utilities/_embed.scss +0 -39
  302. package/src/assets/bootstrap_scss/utilities/_flex.scss +0 -51
  303. package/src/assets/bootstrap_scss/utilities/_float.scss +0 -11
  304. package/src/assets/bootstrap_scss/utilities/_overflow.scss +0 -5
  305. package/src/assets/bootstrap_scss/utilities/_position.scss +0 -32
  306. package/src/assets/bootstrap_scss/utilities/_screenreaders.scss +0 -11
  307. package/src/assets/bootstrap_scss/utilities/_shadows.scss +0 -6
  308. package/src/assets/bootstrap_scss/utilities/_sizing.scss +0 -20
  309. package/src/assets/bootstrap_scss/utilities/_spacing.scss +0 -73
  310. package/src/assets/bootstrap_scss/utilities/_stretched-link.scss +0 -19
  311. package/src/assets/bootstrap_scss/utilities/_text.scss +0 -72
  312. package/src/assets/bootstrap_scss/utilities/_visibility.scss +0 -13
  313. package/src/assets/bootstrap_scss/vendor/_rfs.scss +0 -204
  314. package/src/components/misc/Player.vue +0 -772
  315. package/src/store/class/category.ts +0 -8
  316. package/src/store/class/comment.ts +0 -17
  317. package/src/store/class/conference.ts +0 -27
  318. package/src/store/class/customPlayer.ts +0 -8
  319. package/src/store/class/emission.ts +0 -20
  320. package/src/store/class/media.ts +0 -13
  321. package/src/store/class/organisation.ts +0 -19
  322. package/src/store/class/participant.ts +0 -12
  323. package/src/store/class/person.ts +0 -13
  324. package/src/store/class/playlist.ts +0 -15
  325. package/src/store/class/podcast.ts +0 -37
  326. package/src/store/class/rubriquage.ts +0 -9
  327. package/src/store/class/rubriquageFilter.ts +0 -5
  328. package/src/store/class/rubrique.ts +0 -8
@@ -1,76 +1,58 @@
1
1
  <template>
2
- <div>
3
- <b-modal
4
- id="qrcode-modal"
5
- @close="closePopup"
6
- @hide="closePopup"
7
- @cancel="closePopup"
8
- :title="$t('Share QR Code')"
9
- >
10
- <template v-slot:default>
11
- <QrCode :url="urlPage"/>
12
- </template>
13
- <template v-slot:modal-footer>
14
- <button class="btn btn-primary m-1" @click="closePopup">
15
- {{ $t('Close') }}
16
- </button>
17
- </template>
18
- </b-modal>
2
+ <div
3
+ id="qrcode-modal"
4
+ class="modal"
5
+ >
6
+ <div class="modal-backdrop" />
7
+ <div class="modal-dialog">
8
+ <div class="modal-content">
9
+ <div class="modal-header">
10
+ <h5 class="modal-title">
11
+ {{ $t('Share QR Code') }}
12
+ </h5>
13
+ <button
14
+ ref="focusElement"
15
+ type="button"
16
+ class="btn-close btn-close-white"
17
+ title="Close"
18
+ @click="closePopup"
19
+ />
20
+ </div>
21
+ <div class="modal-body">
22
+ <QrCode :url="urlPage" />
23
+ </div>
24
+ <div class="modal-footer">
25
+ <button
26
+ class="btn btn-primary m-1"
27
+ @click="closePopup"
28
+ >
29
+ {{ $t('Close') }}
30
+ </button>
31
+ </div>
32
+ </div>
33
+ </div>
19
34
  </div>
20
35
  </template>
21
36
 
22
- <style lang="scss">
23
- </style>
24
37
  <script lang="ts">
25
- import Vue from 'vue';
26
- import { Podcast } from '@/store/class/podcast';
27
- import { Emission } from '@/store/class/emission';
28
38
  import QrCode from '../../display/sharing/QrCode.vue';
29
- export default Vue.extend({
39
+ import { defineComponent } from 'vue'
40
+ export default defineComponent({
30
41
  name: 'QrCodeModal',
31
- props: {
32
- podcast: { default: undefined as Podcast|undefined},
33
- emission: { default: undefined as Emission|undefined},
34
- },
35
-
36
42
  components: {
37
43
  QrCode
38
44
  },
39
-
40
- data() {
41
- return {
42
- };
43
- },
44
-
45
- mounted() {
46
- this.$bvModal.show('qrcode-modal');
45
+ props: {
46
+ urlPage: { default: undefined, type: String},
47
47
  },
48
-
49
- computed: {
50
- urlPage(): string{
51
- if(window.location.href.includes('?productor')){
52
- return window.location.href;
53
- }
54
- if("" !== window.location.search){
55
- return window.location.href + "&productor=" + this.productor;
56
- }
57
- return window.location.href + "?productor=" + this.productor;
58
- },
59
- productor(): string{
60
- if(this.podcast){
61
- return this.podcast.organisation.id;
62
- }
63
- if(this.emission){
64
- return this.emission.orga.id;
65
- }
66
- return "";
67
- },
48
+ emits: ['close'],
49
+ mounted(){
50
+ (this.$refs.focusElement as HTMLElement)?.focus();
68
51
  },
69
52
  methods:{
70
- closePopup(event: { preventDefault: () => void }): void {
71
- event.preventDefault();
53
+ closePopup(): void {
72
54
  this.$emit('close');
73
55
  },
74
56
  }
75
- });
76
- </script>
57
+ })
58
+ </script>
@@ -1,53 +1,149 @@
1
1
  <template>
2
2
  <div>
3
- <b-modal
3
+ <div
4
4
  id="share-modal"
5
- @close="closePopup"
6
- @hide="closePopup"
7
- @cancel="closePopup"
8
- :title="$t('Share the player')"
5
+ class="modal"
9
6
  >
10
- <template v-slot:default>
11
- <b-tabs content-class="p-2 share-modal-border">
12
- <b-tab :title="$t('Embed link')" class="tab-pane" active>
13
- <p>{{ embedLink }}</p>
14
- <div
15
- class="saooti-copy"
16
- @click="onCopyCode(embedLink, afterCopy)"
17
- ></div>
18
- </b-tab>
19
- <b-tab :title="$t('Embedly link')" class="tab-pane">
20
- <div class="d-flex flex-column">
21
- <div class="d-flex">
22
- <p>{{ embedlyLink }}</p>
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>
23
44
  <div
24
45
  class="saooti-copy"
25
- @click="onCopyCode(embedlyLink, afterCopy)"
26
- ></div>
46
+ @click="onCopyCode(embedLink, afterCopy)"
47
+ />
48
+ </div>
49
+ <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
+ />
27
74
  </div>
28
- <QrCode :url="embedlyLink"/>
29
75
  </div>
30
- </b-tab>
31
- <b-tab :title="$t('Direct link')" class="tab-pane" v-if="directLink">
32
- <p>{{ directLink.audioUrl }}</p>
33
- <div
34
- class="saooti-copy"
35
- @click="onCopyCode(directLink.audioUrl, snackbarRef)"
36
- ></div>
37
- </b-tab>
38
- </b-tabs>
39
- </template>
40
- <template v-slot:modal-footer>
41
- <button class="btn btn-primary m-1" @click="closePopup">
42
- {{ $t('Close') }}
43
- </button>
44
- </template>
45
- </b-modal>
46
- <Snackbar ref="snackbar" position="bottom-left"></Snackbar>
76
+ </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
+ />
47
92
  </div>
48
93
  </template>
49
94
 
95
+ <script lang="ts">
96
+ import Snackbar from '../Snackbar.vue';
97
+ import { displayMethods } from '../../mixins/functions';
98
+
99
+ import QrCode from '../../display/sharing/QrCode.vue';
100
+ import { defineComponent } from 'vue'
101
+ import { Podcast } from '@/store/class/general/podcast';
102
+ import SnackbarVue from '../Snackbar.vue';
103
+ export default defineComponent({
104
+ name: 'ShareModalPlayer',
105
+
106
+ components: {
107
+ Snackbar,
108
+ QrCode
109
+ },
110
+ mixins: [displayMethods],
111
+ props: {
112
+ embedLink: { default: undefined, type: String},
113
+ embedlyLink: { default: undefined, type: String},
114
+ directLink: { default: undefined, type: Object as ()=>Podcast},
115
+ },
116
+ emits: ['close'],
117
+ data() {
118
+ return {
119
+ activeTab: 0 as number,
120
+ };
121
+ },
122
+ computed:{
123
+ tabs(): Array<string>{
124
+ if(this.directLink){
125
+ return [this.$t('Embed link'),this.$t('Embedly link'),this.$t('Direct link')];
126
+ }
127
+ return [this.$t('Embed link'),this.$t('Embedly link')];
128
+ }
129
+ },
130
+ mounted(){
131
+ (this.$refs.focusElement as HTMLElement)?.focus();
132
+ },
133
+ methods: {
134
+ closePopup(event: { preventDefault: () => void }): void {
135
+ event.preventDefault();
136
+ this.$emit('close');
137
+ },
138
+ afterCopy(): void{
139
+ (this.$refs.snackbar as InstanceType<typeof SnackbarVue>).open(this.$t('Data in clipboard'));
140
+ }
141
+ },
142
+ })
143
+ </script>
144
+
50
145
  <style lang="scss">
146
+ .octopus-app{
51
147
  .share-modal-border {
52
148
  border-right: solid 1px rgb(222, 226, 230);
53
149
  border-left: solid 1px rgb(222, 226, 230);
@@ -87,35 +183,5 @@
87
183
  align-self: center;
88
184
  }
89
185
  }
90
- </style>
91
- <script lang="ts">
92
- import Snackbar from '../Snackbar.vue';
93
- import { displayMethods } from '../../mixins/functions';
94
- import QrCode from '../../display/sharing/QrCode.vue';
95
- export default displayMethods.extend({
96
- name: 'ShareModalPlayer',
97
- props: {
98
- embedLink: { default: undefined as string|undefined},
99
- embedlyLink: { default: undefined as string|undefined},
100
- directLink: { default: undefined as string|undefined},
101
- },
102
-
103
- components: {
104
- Snackbar,
105
- QrCode
106
- },
107
-
108
- mounted() {
109
- this.$bvModal.show('share-modal');
110
- },
111
- methods: {
112
- closePopup(event: { preventDefault: () => void }): void {
113
- event.preventDefault();
114
- this.$emit('close');
115
- },
116
- afterCopy(): void{
117
- (this.$refs.snackbar as any).open(this.$t('Data in clipboard'));
118
- }
119
- },
120
- });
121
- </script>
186
+ }
187
+ </style>
@@ -0,0 +1,146 @@
1
+ <template>
2
+ <div
3
+ class="w-100 transition-height bg-dark"
4
+ :style="{ height: playerHeight }"
5
+ >
6
+ <div
7
+ class="player-container"
8
+ :style="{ height: playerHeight }"
9
+ @transitionend="onHidden"
10
+ >
11
+ <template v-if="display">
12
+ <audio
13
+ id="audio-player"
14
+ :src="!live? audioUrlToPlay: undefined"
15
+ autoplay
16
+ @timeupdate="onTimeUpdate"
17
+ @ended="onFinished"
18
+ @playing="onPlay"
19
+ @durationChange="onTimeUpdate"
20
+ @error="onError"
21
+ />
22
+ <PlayerCompact
23
+ v-if="!largeVersion"
24
+ v-model:notListenTime="notListenTime"
25
+ :player-error="playerError"
26
+ :hls-ready="hlsReady"
27
+ :comments="comments"
28
+ :display-alert-bar="displayAlertBar"
29
+ :percent-live-progress="percentLiveProgress"
30
+ :duration-live-position="durationLivePosition"
31
+ :listen-time="listenTime"
32
+ @stopPlayer="stopPlayer"
33
+ @changePlayerLargeVersion="largeVersion = true"
34
+ />
35
+ <PlayerLarge
36
+ v-else
37
+ v-model:notListenTime="notListenTime"
38
+ :player-error="playerError"
39
+ :hls-ready="hlsReady"
40
+ :comments="comments"
41
+ :display-alert-bar="displayAlertBar"
42
+ :percent-live-progress="percentLiveProgress"
43
+ :duration-live-position="durationLivePosition"
44
+ :listen-time="listenTime"
45
+ @stopPlayer="stopPlayer"
46
+ @changePlayerLargeVersion="largeVersion = false"
47
+ />
48
+ </template>
49
+ </div>
50
+ </div>
51
+ </template>
52
+ <script lang="ts">
53
+ import { mapState } from 'vuex';
54
+ import { CommentPodcast } from '@/store/class/general/comment';
55
+ import { playerLogic } from '../../mixins/player/playerLogic';
56
+ import { StoreState } from '@/store/typeAppStore';
57
+ import PlayerCompact from '../player/PlayerCompact.vue';
58
+ import PlayerLarge from '../player/PlayerLarge.vue';
59
+ import { defineComponent } from 'vue';
60
+ export default defineComponent({
61
+ name: 'Player',
62
+
63
+ components: {
64
+ PlayerCompact,
65
+ PlayerLarge
66
+ },
67
+ mixins:[playerLogic],
68
+ emits: ['hide'],
69
+ data() {
70
+ return {
71
+ forceHide: false as boolean,
72
+ listenTime: 0 as number,
73
+ notListenTime: 0 as number,
74
+ lastSend: 0 as number,
75
+ downloadId: null as string|null,
76
+ playerError: false as boolean,
77
+ listenError: false as boolean,
78
+ percentLiveProgress: 0 as number,
79
+ durationLivePosition: 0 as number,
80
+ displayAlertBar: false as boolean,
81
+ hlsReady: false as boolean,
82
+ comments: [] as Array<CommentPodcast>,
83
+ showTimeline: false as boolean,
84
+ largeVersion: false as boolean,
85
+ audioUrlToPlay: "" as string
86
+ };
87
+ },
88
+ computed: {
89
+ ...mapState({
90
+ display: (state: StoreState) => 'STOPPED' !== state.player.status,
91
+ playerHeight(state: StoreState) {
92
+ if ('STOPPED' === state.player.status || this.forceHide) return 0;
93
+ if (this.largeVersion) return '27rem';
94
+ if (window.innerWidth > 450 && !this.showTimeline) return '5rem';
95
+ if (window.innerWidth > 450 && this.showTimeline) return '6rem';
96
+ return '3.5rem';
97
+ },
98
+ }),
99
+ },
100
+
101
+ watch: {
102
+ playerHeight(): void {
103
+ this.$emit('hide', 0 === this.playerHeight);
104
+ },
105
+ },
106
+
107
+ methods: {
108
+ onHidden(): void {
109
+ if (this.forceHide) {
110
+ this.$store.commit('playerPlayPodcast');
111
+ this.forceHide = false;
112
+ }
113
+ },
114
+ },
115
+ })
116
+ </script>
117
+
118
+ <style lang="scss">
119
+ .octopus-app{
120
+ .player-container {
121
+ max-height: 94%;
122
+ position: fixed;
123
+ overflow: hidden;
124
+ z-index: 12;
125
+ width: 100%;
126
+ bottom: 0;
127
+ display: flex;
128
+ flex-direction: column;
129
+ transition: height 1s;
130
+ background: #282828 !important;
131
+ font-size: 1rem;
132
+
133
+ .player-progress-border {
134
+ height: 10px;
135
+ width: 3px;
136
+ background: black;
137
+ }
138
+
139
+ @media (max-width: 960px) {
140
+ .d-flex {
141
+ flex-wrap: nowrap !important;
142
+ }
143
+ }
144
+ }
145
+ }
146
+ </style>
@@ -0,0 +1,154 @@
1
+ <template>
2
+ <div
3
+ class="d-flex align-items-center flex-grow-1 ps-2"
4
+ >
5
+ <router-link
6
+ v-if="isImage && podcastImage"
7
+ :to="podcastShareUrl"
8
+ >
9
+ <img
10
+ v-lazy="podcastImage"
11
+ :alt="$t('Podcast image')"
12
+ class="player-image"
13
+ >
14
+ </router-link>
15
+ <button
16
+ v-if="!playerError"
17
+ :title="$t('Play')"
18
+ :class="{
19
+ 'saooti-play': isPaused,
20
+ 'saooti-pause': isPlaying,
21
+ '':!isPaused&&!isPlaying
22
+ }"
23
+ class="btn play-button-box text-light primary-bg"
24
+ @click="switchPausePlay"
25
+ >
26
+ <span
27
+ v-if="!isPaused&&!isPlaying"
28
+ class="spinner-border flex-shrink-0"
29
+ />
30
+ </button>
31
+ <div class="text-light player-grow-content">
32
+ <div class="d-flex mb-1">
33
+ <div
34
+ v-if="playerError"
35
+ class="text-warning mx-2"
36
+ >
37
+ {{ $t('Podcast play error') + ' - ' }}
38
+ </div>
39
+ <div class="flex-grow-1 text-truncate">
40
+ {{ podcastTitle }}
41
+ </div>
42
+ <div
43
+ v-if="!playerError"
44
+ class="hide-phone"
45
+ >
46
+ {{ playedTime }} / {{ totalTime }}
47
+ </div>
48
+ </div>
49
+ <PlayerProgressBar
50
+ :hls-ready="hlsReady"
51
+ :show-timeline="showTimeline"
52
+ :comments="comments"
53
+ :display-alert-bar="displayAlertBar"
54
+ :percent-live-progress="percentLiveProgress"
55
+ :duration-live-position="durationLivePosition"
56
+ :player-error="playerError"
57
+ :listen-time="listenTime"
58
+ @updateNotListenTime="$emit('update:notListenTime', $event)"
59
+ />
60
+ </div>
61
+ <button
62
+ :title="$t('Enlarge')"
63
+ class="btn play-button-box primary-bg text-light saooti-up"
64
+ @click="changePlayerLargeVersion"
65
+ />
66
+ <button
67
+ :title="$t('Close')"
68
+ class="btn play-button-box primary-bg text-light saooti-remove"
69
+ @click="stopPlayer"
70
+ />
71
+ <PlayerTimeline
72
+ v-model:showTimeline="showTimeline"
73
+ :comments="comments"
74
+ />
75
+ </div>
76
+ </template>
77
+ <script lang="ts">
78
+ import { CommentPodcast } from '@/store/class/general/comment';
79
+ import { playerDisplay } from '../../mixins/player/playerDisplay';
80
+ import PlayerProgressBar from './PlayerProgressBar.vue';
81
+ import PlayerTimeline from './PlayerTimeline.vue';
82
+ import { defineComponent } from 'vue';
83
+ export default defineComponent({
84
+ name: 'PlayerCompact',
85
+
86
+ components: {
87
+ PlayerProgressBar,
88
+ PlayerTimeline
89
+ },
90
+ mixins:[playerDisplay],
91
+
92
+ props: {
93
+ playerError: { default: false, type: Boolean},
94
+ notListenTime: { default: 0 , type: Number},
95
+ hlsReady: { default: false , type: Boolean},
96
+ comments: { default: ()=>[] , type: Array as ()=> Array<CommentPodcast> },
97
+ displayAlertBar: { default: false , type: Boolean},
98
+ percentLiveProgress: { default: 0 , type: Number},
99
+ durationLivePosition: { default: 0 , type: Number},
100
+ listenTime: { default: 0 , type: Number},
101
+ },
102
+
103
+ emits: ['stopPlayer', 'update:notListenTime', 'changePlayerLargeVersion'],
104
+ data() {
105
+ return {
106
+ showTimeline: false as boolean,
107
+ };
108
+ },
109
+ methods:{
110
+ stopPlayer(){
111
+ this.$emit('stopPlayer');
112
+ },
113
+ changePlayerLargeVersion(){
114
+ this.$emit('changePlayerLargeVersion');
115
+ }
116
+ }
117
+ })
118
+ </script>
119
+
120
+ <style lang="scss">
121
+ .octopus-app{
122
+ .player-grow-content {
123
+ display: flex;
124
+ flex-direction: column;
125
+ flex-grow: 1;
126
+ flex-shrink: 1;
127
+ overflow: hidden;
128
+ font-size: 0.8rem;
129
+ }
130
+ .player-image {
131
+ border-radius: 0.2rem;
132
+ height: 2.4rem;
133
+ width: 2.4rem;
134
+ cursor: pointer;
135
+ /** PHONES*/
136
+ @media (max-width: 450px) {
137
+ height: 1.8rem;
138
+ width: 1.8rem;
139
+ }
140
+ }
141
+ .play-button-box {
142
+ height: 2.2rem;
143
+ width: 2.2rem;
144
+ display: flex;
145
+ align-items: center;
146
+ justify-content: center;
147
+ margin: 0 0.5rem;
148
+ border-radius: 50%;
149
+ font-size: 0.7rem !important;
150
+ flex-shrink: 0;
151
+ cursor: pointer;
152
+ }
153
+ }
154
+ </style>