@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,7 +1,9 @@
1
1
  <template>
2
2
  <div class="d-flex flex-column align-items-center text-danger">
3
3
  <h3>{{ $t('This live will start') }}</h3>
4
- <h3 ref="countdown" v-if="countdownTimer">
4
+ <h3
5
+ v-if="countdownTimer"
6
+ >
5
7
  {{
6
8
  $t('In days hours minutes seconds', {
7
9
  days: pad(days),
@@ -11,26 +13,29 @@
11
13
  })
12
14
  }}
13
15
  </h3>
14
- <h3 v-else>{{ $t('In a moment') }}</h3>
16
+ <h3 v-else>
17
+ {{ $t('In a moment') }}
18
+ </h3>
15
19
  </div>
16
20
  </template>
17
- <style lang="scss"></style>
21
+
18
22
  <script lang="ts">
19
- import Vue from 'vue';
20
- export default Vue.extend({
23
+ import { defineComponent } from 'vue'
24
+ export default defineComponent({
21
25
  props: {
22
- timeRemaining: { default: undefined as number|undefined},
26
+ timeRemaining: { default: undefined, type: Number},
23
27
  },
24
28
  data() {
25
29
  return {
26
30
  seconds: 0 as number,
27
- countdownTimer: undefined as any,
31
+ countdownTimer: undefined as ReturnType<typeof setTimeout>|undefined,
28
32
  days: 0 as number,
29
33
  hours: 0 as number,
30
34
  minutes: 0 as number,
31
35
  remainingSeconds: 0 as number,
32
36
  };
33
37
  },
38
+ computed: {},
34
39
  mounted() {
35
40
  if (!this.timeRemaining || this.timeRemaining <= 0) return;
36
41
  this.seconds = this.timeRemaining;
@@ -38,7 +43,10 @@ export default Vue.extend({
38
43
  this.timer();
39
44
  }, 1000);
40
45
  },
41
- computed: {},
46
+ unmounted() {
47
+ clearInterval((this.countdownTimer as unknown as number));
48
+ },
49
+
42
50
  methods: {
43
51
  timer(): void {
44
52
  this.days = Math.floor(this.seconds / 24 / 60 / 60);
@@ -47,9 +55,8 @@ export default Vue.extend({
47
55
  const minutesLeft = Math.floor(hoursLeft - this.hours * 3600);
48
56
  this.minutes = Math.floor(minutesLeft / 60);
49
57
  this.remainingSeconds = this.seconds % 60;
50
- /* this.$refs.countdown.innerHTML = this.pad(days) + ":" + this.pad(hours) + ":" + this.pad(minutes) + ":" + this.pad(remainingSeconds); */
51
58
  if (0 === this.seconds) {
52
- clearInterval(this.countdownTimer);
59
+ clearInterval((this.countdownTimer as unknown as number));
53
60
  this.countdownTimer = undefined;
54
61
  } else {
55
62
  this.seconds--;
@@ -59,5 +66,5 @@ export default Vue.extend({
59
66
  return n < 10 ? '0' + n : n.toString();
60
67
  },
61
68
  },
62
- });
63
- </script>
69
+ })
70
+ </script>
@@ -1,47 +1,57 @@
1
1
  <template>
2
- <div class="d-flex flex-column" v-if="notEmpty">
3
- <h2 class="mb-4 mt-3">{{ $t('All live emission button') }}</h2>
4
- <ul class="podcast-list">
5
- <PodcastItem
6
- v-bind:podcast="l"
7
- v-for="l in lives"
8
- v-bind:key="l.podcastId"
9
- />
10
- </ul>
11
- <button
12
- class="btn"
13
- :class="buttonPlus ? 'btn-linkPlus mt-3' : 'btn-more'"
14
- @click="displayMore"
15
- v-show="!allFetched"
16
- :disabled="inFetching"
17
- :aria-label="$t('See more')"
2
+ <div
3
+ v-if="notEmpty"
4
+ class="p-3"
5
+ >
6
+ <h2 class="mb-0 mt-3">
7
+ {{ $t('All live emission button') }}
8
+ </h2>
9
+ <ListPaginate
10
+ id="liveListPaginate"
11
+ v-model:first="dfirst"
12
+ v-model:rowsPerPage="dsize"
13
+ v-model:isMobile="isMobile"
14
+ :total-count="totalCount"
15
+ :loading="false"
18
16
  >
19
- <template v-if="buttonPlus">{{ $t('See more') }}</template>
20
- <div class="saooti-plus"></div>
21
- </button>
17
+ <template #list>
18
+ <ul
19
+ class="podcast-list"
20
+ >
21
+ <template
22
+ v-for="p in displayArray"
23
+ :key="p.podcastId"
24
+ >
25
+ <PodcastItem
26
+ v-if="0!==p.podcastId"
27
+ :podcast="p"
28
+ />
29
+ </template>
30
+ </ul>
31
+ </template>
32
+ </ListPaginate>
22
33
  </div>
23
34
  </template>
24
35
 
25
- <style lang="scss"></style>
26
-
27
36
  <script lang="ts">
28
- const octopusApi = require('@saooti/octopus-api');
37
+ import ListPaginate from '../list/ListPaginate.vue';
38
+ import octopusApi from '@saooti/octopus-api';
29
39
  import PodcastItem from '../podcasts/PodcastItem.vue';
30
- import { state } from '../../../store/paramStore';
31
-
32
- import Vue from 'vue';
33
- import { Podcast } from '@/store/class/podcast';
34
- export default Vue.extend({
40
+ import { Podcast } from '@/store/class/general/podcast';
41
+ import { defineComponent } from 'vue'
42
+ import { emptyPodcastData } from '@/store/typeAppStore';
43
+ export default defineComponent({
35
44
  name: 'LiveHorizontalList',
36
45
 
37
46
  components: {
38
47
  PodcastItem,
48
+ ListPaginate
39
49
  },
40
50
 
41
51
  props: {
42
- first: { default: 0 as number },
43
- size: { default: 12 as number },
44
- emissionId: { default: undefined as undefined|number},
52
+ first: { default: 0, type: Number },
53
+ size: { default: 30, type: Number },
54
+ emissionId: { default: undefined, type: Number},
45
55
  },
46
56
 
47
57
  data() {
@@ -52,58 +62,71 @@ export default Vue.extend({
52
62
  lives: [] as Array<Podcast>,
53
63
  notEmpty: false as boolean,
54
64
  inFetching: false as boolean,
65
+ isMobile: false as boolean,
55
66
  };
56
67
  },
57
68
 
58
- created() {
59
- this.fetchContent(true);
60
- },
61
-
62
69
 
63
70
  computed: {
64
- allFetched(): boolean {
65
- return this.dfirst >= this.totalCount;
66
- },
67
- buttonPlus(): boolean {
68
- return state.generalParameters.buttonPlus;
69
- },
71
+ displayArray(): Array<Podcast>{
72
+ if(this.isMobile){
73
+ return this.lives;
74
+ }
75
+ return this.lives.slice(this.dfirst, Math.min(this.dfirst + this.dsize,this.totalCount));
76
+ },
77
+ },
78
+ watch: {
79
+ dsize():void{
80
+ this.reloadList();
81
+ },
82
+ dfirst(): void{
83
+ if(!this.lives[this.dfirst] || 0===this.lives[this.dfirst].podcastId){
84
+ this.fetchContent(false);
85
+ }
86
+ },
87
+ },
88
+
89
+ created() {
90
+ this.fetchContent(true);
70
91
  },
71
92
  methods: {
93
+ reloadList(){
94
+ this.dfirst = 0;
95
+ this.fetchContent(true);
96
+ },
72
97
  async fetchContent(reset: boolean): Promise<void> {
73
98
  this.inFetching = true;
74
99
  if (reset) {
75
- this.lives.length = 0;
76
- this.dfirst = 0;
77
100
  this.notEmpty = false;
78
101
  }
79
- const param = {
102
+ const data = await octopusApi.fetchDataWithParams<{count: number;result:Array<Podcast>;sort: string;}>(0, 'podcast/search',{
80
103
  first: this.dfirst,
81
104
  size: this.dsize,
82
105
  emissionId: this.emissionId,
83
106
  sort: 'DATE',
84
- };
85
- const data = await octopusApi.fetchLives(param);
107
+ includeStatus:'READY_TO_RECORD'
108
+ }, true);
86
109
  this.afterFetching(reset, data);
87
110
  },
88
- afterFetching(reset: boolean, data: any): void {
111
+ afterFetching(reset: boolean, data: {count: number, result: Array<Podcast>, sort: string}): void {
89
112
  if (reset) {
90
113
  this.lives.length = 0;
91
- this.dfirst = 0;
92
114
  }
93
- this.lives = this.lives.concat(data.result).filter((l: Podcast | null) => {
115
+ if(this.dfirst > this.lives.length){
116
+ for (let i = this.lives.length-1, len = this.dfirst + this.dsize; i < len; i++) {
117
+ this.lives.push(emptyPodcastData());
118
+ }
119
+ }
120
+ const responseLives = data.result.filter((l: Podcast | null) => {
94
121
  return null !== l;
95
122
  });
96
- this.dfirst += this.dsize;
123
+ this.lives = this.lives.slice(0, this.dfirst).concat(responseLives).concat(this.lives.slice(this.dfirst+this.dsize, this.lives.length));
97
124
  this.totalCount = data.count;
98
125
  if (0 !== this.lives.length) {
99
126
  this.notEmpty = true;
100
127
  }
101
128
  this.inFetching = false;
102
129
  },
103
- displayMore(event: { preventDefault: () => void }): void {
104
- event.preventDefault();
105
- this.fetchContent(false);
106
- },
107
130
  },
108
- });
109
- </script>
131
+ })
132
+ </script>
@@ -1,5 +1,8 @@
1
1
  <template>
2
- <div class="d-flex w-100" v-if="live">
2
+ <div
3
+ v-if="live"
4
+ class="d-flex w-100"
5
+ >
3
6
  <router-link
4
7
  class="live-date-box"
5
8
  :to="{
@@ -8,8 +11,12 @@
8
11
  query: { productor: $store.state.filter.organisationId },
9
12
  }"
10
13
  >
11
- <div class="font-weight-bold">{{ date }}</div>
12
- <div class="font-weight-bold">{{ hours }}</div>
14
+ <div class="fw-bold">
15
+ {{ date }}
16
+ </div>
17
+ <div class="fw-bold">
18
+ {{ hours }}
19
+ </div>
13
20
  <div class="font-size-smaller">
14
21
  {{ $t('Duration', { duration: duration }) }}
15
22
  </div>
@@ -22,242 +29,219 @@
22
29
  }"
23
30
  >
24
31
  <PodcastImage
25
- class="mr-3"
32
+ class="me-3"
26
33
  :class="
27
34
  fetchConference &&
28
- 'null' !== fetchConference &&
29
- fetchConference.status
35
+ 'null' !== fetchConference &&
36
+ fetchConference.status
30
37
  ? fetchConference.status.toLowerCase() + '-shadow'
31
38
  : ''
32
39
  "
33
- v-bind:podcast="live"
34
- :hidePlay="false"
35
- :playingPodcast="false"
36
- :fetchConference="fetchConference"
37
- :isAnimatorLive="organisationRight"
40
+ :podcast="live"
41
+ :hide-play="false"
42
+ :playing-podcast="false"
43
+ :fetch-conference="fetchConference"
44
+ :is-animator-live="organisationRight"
38
45
  />
39
46
  </router-link>
40
47
  <div class="d-flex flex-column live-special-width">
41
48
  <router-link
42
- class="text-uppercase link-info text-truncate"
49
+ class="text-uppercase fw-bold text-truncate"
43
50
  :to="{
44
51
  name: 'podcast',
45
52
  params: { podcastId: live.podcastId },
46
53
  query: { productor: $store.state.filter.organisationId },
47
54
  }"
48
- >{{ live.title }}</router-link
49
55
  >
56
+ {{ live.title }}
57
+ </router-link>
50
58
  <router-link
51
- class="link-info text-truncate"
59
+ class="fw-bold text-truncate"
52
60
  :to="{
53
61
  name: 'emission',
54
62
  params: { emissionId: live.emission.emissionId },
55
63
  query: { productor: $store.state.filter.organisationId },
56
64
  }"
57
- >{{ live.emission.name }}</router-link
58
65
  >
66
+ {{ live.emission.name }}
67
+ </router-link>
59
68
  <div
60
- :id="'description-live-container-' + live.podcastId"
69
+ ref="descriptionLiveContainer"
61
70
  class="live-description-container html-wysiwyg-content"
62
71
  >
72
+ <!-- eslint-disable vue/no-v-html -->
63
73
  <div
64
- :id="'description-live-' + live.podcastId"
74
+ ref="descriptionLive"
65
75
  v-html="urlify(description)"
66
- ></div>
76
+ />
77
+ <!-- eslint-enable -->
67
78
  </div>
68
- <div class="comma" v-if="live.animators">
69
- {{ $t('Animated by')}}<div class="mx-1">:</div>
79
+ <div
80
+ v-if="live.animators"
81
+ class="comma"
82
+ >
83
+ {{ $t('Animated by') }}<div class="mx-1">
84
+ :
85
+ </div>
70
86
  <router-link
71
- :aria-label="$t('Participant')"
72
- class="link-info"
73
87
  v-for="animator in live.animators"
74
- v-bind:key="animator.participantId"
88
+ :key="animator.participantId"
89
+ :title="$t('Participant')"
90
+ class="fw-bold"
75
91
  :to="{
76
92
  name: 'participant',
77
93
  params: { participantId: animator.participantId },
78
94
  query: { productor: $store.state.filter.organisationId },
79
95
  }"
80
- >{{ getName(animator) }}</router-link
81
96
  >
97
+ {{ getName(animator) }}
98
+ </router-link>
82
99
  </div>
83
100
  <div v-if="!isPodcastmaker">
84
101
  {{ $t('Producted by : ') }}
85
102
  <router-link
86
- class="link-info"
103
+ class="fw-bold"
87
104
  :to="{
88
105
  name: 'productor',
89
106
  params: { productorId: live.organisation.id },
90
107
  query: { productor: $store.state.filter.organisationId },
91
108
  }"
92
- >{{ live.organisation.name }}</router-link
93
109
  >
110
+ {{ live.organisation.name }}
111
+ </router-link>
94
112
  </div>
95
113
  <RecordingItemButton
114
+ v-if="fetchConference && organisationRight && isEditBox"
96
115
  :live="true"
97
116
  :recording="fetchConference"
98
117
  :podcast="live"
99
118
  @deleteItem="deleteItem"
100
119
  @validatePodcast="updatePodcast"
101
- v-if="fetchConference && organisationRight && isEditBox"
102
- ></RecordingItemButton>
120
+ />
103
121
  </div>
104
122
  </div>
105
123
  </template>
106
124
 
107
- <style lang="scss">
108
- .live-date-box {
109
- width: 200px;
110
- display: flex;
111
- flex-shrink: 0;
112
- flex-direction: column;
113
- }
114
- .font-size-smaller {
115
- font-size: smaller;
116
- }
117
- .live-description-container {
118
- overflow: hidden;
119
- margin-top: 0.5em;
120
- word-break: break-word;
121
- max-height: 6rem;
122
- position: relative;
123
- &.after-live-description:after {
124
- content: '...';
125
- position: absolute;
126
- padding-left: 1rem;
127
- right: 0;
128
- bottom: 0;
129
- width: 100%;
130
- font-size: 1rem;
131
- font-weight: bolder;
132
- background: linear-gradient(to bottom, rgba(255, 255, 255, 0), #f3f3f3 40%);
133
- }
134
- }
135
- .live-special-width {
136
- width: 0;
137
- flex-grow: 1;
138
- }
139
-
140
- </style>
141
-
142
125
  <script lang="ts">
143
126
  import { state } from '../../../store/paramStore';
144
- const octopusApi = require('@saooti/octopus-api');
127
+ import octopusApi from '@saooti/octopus-api';
145
128
  import PodcastImage from '../podcasts/PodcastImage.vue';
146
- import studioApi from '@/api/studio';
147
- const moment = require('moment');
148
- const humanizeDuration = require('humanize-duration');
129
+ import crudApi from '@/api/classicCrud';
130
+ import moment from 'moment';
131
+ // @ts-ignore
132
+ import humanizeDuration from 'humanize-duration';
149
133
  import { displayMethods } from '../../mixins/functions';
150
- import { Podcast } from '@/store/class/podcast';
151
- import { Participant } from '@/store/class/participant';
134
+ import { Podcast } from '@/store/class/general/podcast';
135
+ import { Participant } from '@/store/class/general/participant';
152
136
 
153
- export default displayMethods.extend({
137
+ import { defineComponent, defineAsyncComponent } from 'vue';
138
+ const RecordingItemButton = defineAsyncComponent(() => import('@/components/display/studio/RecordingItemButton.vue'));
139
+ export default defineComponent({
154
140
  name: 'LiveItem',
155
141
 
156
142
  components: {
157
- RecordingItemButton: () => import('@/components/display/studio/RecordingItemButton.vue'),
143
+ RecordingItemButton,
158
144
  PodcastImage,
159
145
  },
146
+ mixins: [displayMethods],
160
147
  props: {
161
- fetchConference: { default: undefined as Podcast|undefined},
162
- index: { default: undefined as number|undefined},
148
+ fetchConference: { default: undefined, type: Object as ()=>Podcast},
149
+ index: { default: undefined, type: Number},
163
150
  },
151
+ emits: ['deleteItem'],
164
152
 
165
153
  data() {
166
154
  return {
167
155
  live: undefined as Podcast|undefined,
168
156
  };
169
157
  },
170
-
171
- async created() {
172
- this.fetchPodcastData();
173
- },
174
158
 
175
159
  computed: {
176
160
  isEditBox(): boolean {
177
- return state.podcastPage.EditBox;
161
+ return (state.podcastPage.EditBox as boolean);
178
162
  },
179
163
  isPodcastmaker(): boolean {
180
- return state.generalParameters.podcastmaker;
164
+ return (state.generalParameters.podcastmaker as boolean);
181
165
  },
182
166
  hours(): string {
183
- return moment(this.live!.pubDate).format('À HH[H]mm');
167
+ return !this.live?'': moment(this.live.pubDate).format('HH[H]mm');
184
168
  },
185
169
  date(): string {
186
- return moment(this.live!.pubDate).format('D/MM/YYYY');
170
+ return !this.live? '': moment(this.live.pubDate).format('D/MM/YYYY');
187
171
  },
188
172
  displayDate(): string {
189
- return moment(this.live!.pubDate).format('X');
173
+ return !this.live? '':moment(this.live.pubDate).format('X');
190
174
  },
191
175
  description(): string {
192
- if (this.live!.description) return this.live!.description;
193
- return '';
176
+ return this.live?.description??'';
194
177
  },
195
- myOrganisationId(): string {
178
+ myOrganisationId(): string|undefined {
196
179
  return state.generalParameters.organisationId;
197
180
  },
198
181
  organisationRight(): boolean {
199
- if (
200
- this.isRoleLive &&
201
- this.myOrganisationId === this.live!.organisation.id
202
- )
203
- return true;
204
- return false;
182
+ return true===this.isRoleLive && this.myOrganisationId === this.live?.organisation.id;
205
183
  },
206
184
  isRoleLive(): boolean {
207
- return state.generalParameters.isRoleLive;
185
+ return (state.generalParameters.isRoleLive as boolean);
208
186
  },
209
187
  duration(): string {
210
- if (this.live!.duration <= 1) return '';
211
- if (this.live!.duration > 600000) {
212
- return humanizeDuration(this.live!.duration, {
188
+ if (!this.live || this.live.duration <= 1) return '';
189
+ if (this.live.duration > 600000) {
190
+ return humanizeDuration(this.live.duration, {
213
191
  language: this.$i18n.locale,
214
192
  largest: 1,
215
193
  round: true,
216
194
  });
217
195
  }
218
- return humanizeDuration(this.live!.duration, {
196
+ return humanizeDuration(this.live.duration, {
219
197
  language: this.$i18n.locale,
220
198
  largest: 2,
221
199
  round: true,
222
200
  });
223
201
  },
224
202
  },
203
+ watch: {
204
+ live: {
205
+ deep: true,
206
+ handler(){
207
+ this.handleDescription();
208
+ }
209
+ },
210
+ },
211
+
212
+ async created() {
213
+ this.fetchPodcastData();
214
+ },
225
215
  methods: {
226
216
  updatePodcast(podcastUpdated: Podcast): void {
227
217
  this.live = podcastUpdated;
228
218
  },
229
219
  getName(person: Participant): string {
230
- const first = person.firstName || '';
231
- const last = person.lastName || '';
232
- return (first + ' ' + last).trim();
220
+ return (`${person.firstName??''} ${person.lastName??''}`).trim();
233
221
  },
234
222
  async fetchPodcastData(): Promise<void> {
235
223
  if (!this.fetchConference || !this.fetchConference.podcastId) return;
236
224
  try {
237
- this.live = await octopusApi.fetchPodcast(
238
- this.fetchConference.podcastId
239
- );
225
+ this.live = await octopusApi.fetchData<Podcast>(0, 'podcast/'+this.fetchConference.podcastId);
240
226
  } catch {
241
227
  this.$emit('deleteItem', this.index);
242
- studioApi.deleteConference(
243
- this.$store.state,
244
- this.fetchConference.conferenceId!.toString()
245
- );
228
+ if(this.fetchConference.conferenceId){
229
+ await crudApi.deleteData(this.$store.state, 9 ,'conference/'+this.fetchConference.conferenceId);
230
+ }
246
231
  }
247
232
  },
248
233
  async handleDescription(): Promise<void> {
249
234
  this.$nextTick(() => {
250
- const liveDesc = document.getElementById(
251
- 'description-live-' + this.live!.podcastId
252
- );
253
- const liveDescContainer = document.getElementById(
254
- 'description-live-container-' + this.live!.podcastId
255
- );
235
+ if(!this.live){
236
+ return;
237
+ }
238
+ const liveDesc = (this.$refs.descriptionLive as HTMLElement);
239
+ const liveDescContainer = (this.$refs.descriptionLiveContainer as HTMLElement);
256
240
  if (
257
- null !== liveDesc &&
258
- liveDesc.clientHeight > liveDescContainer!.clientHeight
241
+ null !== liveDesc && null !== liveDescContainer &&
242
+ liveDesc.clientHeight > liveDescContainer.clientHeight
259
243
  ) {
260
- liveDescContainer!.classList.add('after-live-description');
244
+ liveDescContainer.classList.add('after-live-description');
261
245
  }
262
246
  });
263
247
  },
@@ -265,10 +249,41 @@ export default displayMethods.extend({
265
249
  this.$emit('deleteItem', this.index);
266
250
  },
267
251
  },
268
- watch: {
269
- live(): void {
270
- this.handleDescription();
271
- },
272
- },
273
- });
252
+ })
274
253
  </script>
254
+
255
+ <style lang="scss">
256
+ .octopus-app{
257
+ .live-date-box {
258
+ width: 200px;
259
+ display: flex;
260
+ flex-shrink: 0;
261
+ flex-direction: column;
262
+ }
263
+ .font-size-smaller {
264
+ font-size: smaller;
265
+ }
266
+ .live-description-container {
267
+ overflow: hidden;
268
+ margin-top: 0.5em;
269
+ word-break: break-word;
270
+ max-height: 6rem;
271
+ position: relative;
272
+ &.after-live-description:after {
273
+ content: '...';
274
+ position: absolute;
275
+ padding-left: 1rem;
276
+ right: 0;
277
+ bottom: 0;
278
+ width: 100%;
279
+ font-size: 1rem;
280
+ font-weight: bolder;
281
+ background: linear-gradient(to bottom, rgba(255, 255, 255, 0), #f3f3f3 40%);
282
+ }
283
+ }
284
+ .live-special-width {
285
+ width: 0;
286
+ flex-grow: 1;
287
+ }
288
+ }
289
+ </style>