@saooti/octopus-sdk 1.0.0 → 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 (317) hide show
  1. package/README.md +261 -0
  2. package/index.d.ts +4 -0
  3. package/index.ts +55 -3
  4. package/package.json +53 -45
  5. package/public/config.ts +4 -0
  6. package/public/css/fonts/icomoon.eot +0 -0
  7. package/public/css/fonts/icomoon.svg +129 -0
  8. package/public/css/fonts/icomoon.ttf +0 -0
  9. package/public/css/fonts/icomoon.woff +0 -0
  10. package/public/css/fonts/style.css +186 -1224
  11. package/public/img/403.jpeg +0 -0
  12. package/public/img/404.svg +242 -0
  13. package/public/img/ACPM.png +0 -0
  14. package/public/img/ouest_france_logo.svg +12 -0
  15. package/src/App.vue +102 -31
  16. package/src/api/classicCrud.ts +34 -0
  17. package/src/api/initialize.ts +5 -2
  18. package/src/assets/bootstrap-diff.scss +197 -0
  19. package/src/assets/form.scss +77 -77
  20. package/src/assets/general.scss +284 -272
  21. package/src/assets/live.scss +39 -0
  22. package/src/assets/modal.scss +43 -50
  23. package/src/assets/multiselect.scss +522 -573
  24. package/src/assets/octopus-library.scss +18 -4
  25. package/src/assets/share.scss +243 -0
  26. package/src/assets/transition.scss +98 -2
  27. package/src/components/display/aggregator/RssSection.vue +3 -5
  28. package/src/components/display/categories/CategoryChooser.vue +151 -114
  29. package/src/components/display/categories/CategoryFilter.vue +162 -0
  30. package/src/components/display/categories/CategoryList.vue +149 -117
  31. package/src/components/display/comments/AddCommentModal.vue +103 -108
  32. package/src/components/display/comments/CommentBasicView.vue +95 -0
  33. package/src/components/display/comments/CommentInput.vue +195 -183
  34. package/src/components/display/comments/CommentItem.vue +170 -208
  35. package/src/components/display/comments/CommentList.vue +134 -228
  36. package/src/components/display/comments/CommentParentInfo.vue +28 -62
  37. package/src/components/display/comments/CommentPlayer.vue +53 -56
  38. package/src/components/display/comments/CommentSection.vue +52 -83
  39. package/src/components/display/edit/EditBox.vue +10 -4
  40. package/src/components/display/edit/EditCommentBox.vue +124 -38
  41. package/src/components/display/emission/EmissionChooser.vue +88 -108
  42. package/src/components/display/emission/EmissionInlineList.vue +156 -157
  43. package/src/components/display/emission/EmissionItem.vue +72 -226
  44. package/src/components/display/emission/EmissionList.vue +159 -201
  45. package/src/components/display/emission/EmissionPlayerItem.vue +203 -174
  46. package/src/components/display/filter/AdvancedSearch.vue +224 -432
  47. package/src/components/display/filter/CategoryFilter.vue +105 -0
  48. package/src/components/display/filter/MonetizableFilter.vue +18 -15
  49. package/src/components/display/filter/ProductorSearch.vue +153 -176
  50. package/src/components/display/filter/RubriqueChoice.vue +97 -0
  51. package/src/components/display/filter/RubriqueFilter.vue +232 -0
  52. package/src/components/display/list/ListPaginate.vue +145 -0
  53. package/src/components/display/list/Paginate.vue +218 -0
  54. package/src/components/display/live/CountDown.vue +31 -30
  55. package/src/components/display/live/LiveHorizontalList.vue +84 -62
  56. package/src/components/display/live/LiveItem.vue +161 -186
  57. package/src/components/display/live/LiveList.vue +184 -295
  58. package/src/components/display/organisation/OrganisationChooser.vue +124 -162
  59. package/src/components/display/organisation/OrganisationChooserLight.vue +53 -56
  60. package/src/components/display/participant/ParticipantItem.vue +91 -128
  61. package/src/components/display/participant/ParticipantList.vue +134 -121
  62. package/src/components/display/playlist/PlaylistItem.vue +60 -97
  63. package/src/components/display/playlist/PlaylistList.vue +99 -92
  64. package/src/components/display/playlist/PodcastList.vue +117 -132
  65. package/src/components/display/playlist/PodcastPlaylistInlineList.vue +191 -0
  66. package/src/components/display/podcasts/AnimatorsItem.vue +29 -37
  67. package/src/components/display/podcasts/ParticipantDescription.vue +82 -0
  68. package/src/components/display/podcasts/PodcastFilterList.vue +49 -102
  69. package/src/components/display/podcasts/PodcastImage.vue +208 -225
  70. package/src/components/display/podcasts/PodcastInlineList.vue +62 -355
  71. package/src/components/display/podcasts/PodcastInlineListClassic.vue +240 -0
  72. package/src/components/display/podcasts/PodcastInlineListTemplate.vue +167 -0
  73. package/src/components/display/podcasts/PodcastItem.vue +94 -218
  74. package/src/components/display/podcasts/PodcastItemInfo.vue +166 -0
  75. package/src/components/display/podcasts/PodcastList.vue +127 -178
  76. package/src/components/display/podcasts/PodcastModuleBox.vue +234 -0
  77. package/src/components/display/podcasts/PodcastPlayBar.vue +101 -0
  78. package/src/components/display/podcasts/PodcastSwiperList.vue +204 -0
  79. package/src/components/display/podcasts/TagList.vue +60 -38
  80. package/src/components/display/rubriques/RubriqueChooser.vue +144 -131
  81. package/src/components/display/rubriques/RubriqueList.vue +216 -0
  82. package/src/components/display/sharing/PlayerParameters.vue +111 -153
  83. package/src/components/display/sharing/QrCode.vue +96 -0
  84. package/src/components/display/sharing/ShareButtons.vue +63 -233
  85. package/src/components/display/sharing/ShareButtonsIntern.vue +225 -0
  86. package/src/components/display/sharing/ShareDistribution.vue +102 -166
  87. package/src/components/display/sharing/SharePlayer.vue +189 -353
  88. package/src/components/display/sharing/SharePlayerColors.vue +78 -0
  89. package/src/components/display/sharing/SharePlayerTypes.vue +112 -0
  90. package/src/components/display/sharing/SplitButton.vue +42 -0
  91. package/src/components/display/sharing/SubscribeButtons.vue +65 -118
  92. package/src/components/display/studio/RecordingItemButton.vue +3 -5
  93. package/src/components/form/ClassicCheckbox.vue +66 -0
  94. package/src/components/form/ClassicLoading.vue +28 -0
  95. package/src/components/form/ClassicRadio.vue +66 -0
  96. package/src/components/form/ClassicSearch.vue +86 -0
  97. package/src/components/form/ClassicSelect.vue +65 -0
  98. package/src/components/misc/ErrorMessage.vue +27 -18
  99. package/src/components/misc/Footer.vue +151 -108
  100. package/src/components/misc/HomeDropdown.vue +95 -154
  101. package/src/components/misc/LeftMenu.vue +137 -206
  102. package/src/components/misc/Popover.vue +118 -0
  103. package/src/components/misc/Snackbar.vue +73 -37
  104. package/src/components/misc/TopBar.vue +211 -314
  105. package/src/components/misc/modal/ClipboardModal.vue +34 -47
  106. package/src/components/misc/modal/MessageModal.vue +74 -53
  107. package/src/components/misc/modal/NewsletterModal.vue +272 -224
  108. package/src/components/misc/modal/QrCodeModal.vue +58 -0
  109. package/src/components/misc/modal/ShareModalPlayer.vue +140 -74
  110. package/src/components/misc/player/Player.vue +146 -0
  111. package/src/components/misc/player/PlayerCompact.vue +154 -0
  112. package/src/components/misc/player/PlayerLarge.vue +166 -0
  113. package/src/components/misc/player/PlayerProgressBar.vue +112 -0
  114. package/src/components/misc/player/PlayerTimeline.vue +61 -0
  115. package/src/components/mixins/functions.ts +21 -18
  116. package/src/components/mixins/handle403.ts +17 -0
  117. package/src/components/mixins/init.ts +24 -0
  118. package/src/components/mixins/orgaComputed.ts +15 -0
  119. package/src/components/mixins/organisationFilter.ts +41 -0
  120. package/src/components/mixins/player/playerComment.ts +98 -0
  121. package/src/components/mixins/player/playerDisplay.ts +113 -0
  122. package/src/components/mixins/player/playerLive.ts +111 -0
  123. package/src/components/mixins/player/playerLogic.ts +225 -0
  124. package/src/components/mixins/tagOfMixins.ts +19 -0
  125. package/src/components/pages/Category.vue +24 -28
  126. package/src/components/pages/Emission.vue +144 -177
  127. package/src/components/pages/Emissions.vue +94 -110
  128. package/src/components/pages/Error403Page.vue +60 -0
  129. package/src/components/pages/Home.vue +74 -21
  130. package/src/components/pages/Lives.vue +53 -58
  131. package/src/components/pages/PageNotFound.vue +55 -0
  132. package/src/components/pages/Participant.vue +113 -129
  133. package/src/components/pages/Participants.vue +25 -41
  134. package/src/components/pages/Playlist.vue +86 -86
  135. package/src/components/pages/Playlists.vue +33 -52
  136. package/src/components/pages/Podcast.vue +206 -478
  137. package/src/components/pages/Podcasts.vue +112 -156
  138. package/src/components/pages/Rubrique.vue +21 -27
  139. package/src/components/pages/Search.vue +37 -94
  140. package/src/helper/dom.ts +2 -2
  141. package/src/helper/duration.ts +18 -8
  142. package/src/helper/useEventListener.ts +18 -0
  143. package/src/i18n.ts +36 -0
  144. package/src/locale/de.ts +309 -0
  145. package/src/locale/educationen.ts +14 -0
  146. package/src/locale/en.ts +316 -1
  147. package/src/locale/es.ts +309 -0
  148. package/src/locale/fr.ts +47 -15
  149. package/src/locale/it.ts +307 -0
  150. package/src/locale/messages.ts +11 -2
  151. package/src/locale/sl.ts +309 -0
  152. package/src/main.ts +64 -55
  153. package/src/router/router.ts +192 -159
  154. package/src/sass/_variables.scss +10 -8
  155. package/src/shims-tsx.d.ts +15 -0
  156. package/src/shims-vue-recaptcha-v3.d.ts +9 -0
  157. package/src/shims-vue.d.ts +5 -6
  158. package/src/store/AppStore.ts +41 -173
  159. package/src/store/class/adserver/adserverConfig.ts +9 -0
  160. package/src/store/class/adserver/adserverOtherEmission.ts +13 -0
  161. package/src/store/class/adserver/adserverTiming.ts +10 -0
  162. package/src/store/class/cartouchier/cartouche.ts +15 -0
  163. package/src/store/class/cartouchier/cartouchier.ts +9 -0
  164. package/src/store/class/conference/conference.ts +35 -0
  165. package/src/store/class/conference/conferenceMessage.ts +10 -0
  166. package/src/store/class/conference/conferenceParticipant.ts +18 -0
  167. package/src/store/class/conference/pad.ts +15 -0
  168. package/src/store/class/conference/studioCall.ts +7 -0
  169. package/src/store/class/contract/contract.ts +7 -0
  170. package/src/store/class/contract/contractOrganisation.ts +7 -0
  171. package/src/store/class/ftp/ftpEmission.ts +41 -0
  172. package/src/store/class/ftp/ftpParam.ts +12 -0
  173. package/src/store/class/ftp/testFtpEmission.ts +5 -0
  174. package/src/store/class/general/audioView.ts +21 -0
  175. package/src/store/class/general/category.ts +10 -0
  176. package/src/store/class/general/comment.ts +16 -0
  177. package/src/store/class/general/customPlayer.ts +9 -0
  178. package/src/store/class/general/emission.ts +23 -0
  179. package/src/store/class/general/fetchParam.ts +3 -0
  180. package/src/store/class/general/initState.ts +25 -0
  181. package/src/store/class/general/interfacePageable.ts +16 -0
  182. package/src/store/class/general/ituneCategory.ts +5 -0
  183. package/src/store/class/general/media.ts +14 -0
  184. package/src/store/class/general/organisation.ts +20 -0
  185. package/src/store/class/general/pageable.ts +13 -0
  186. package/src/store/class/general/participant.ts +12 -0
  187. package/src/store/class/general/player.ts +14 -0
  188. package/src/store/class/general/playlist.ts +13 -0
  189. package/src/store/class/general/podcast.ts +43 -0
  190. package/src/store/class/general/sortPageable.ts +5 -0
  191. package/src/store/class/general/soundcastCategory.ts +8 -0
  192. package/src/store/class/ouestFrance/ofTag.ts +36 -0
  193. package/src/store/class/ouestFrance/ofTagInfo.ts +9 -0
  194. package/src/store/class/ouestFrance/ofTagPage.ts +7 -0
  195. package/src/store/class/ouestFrance/ofTagSeo.ts +7 -0
  196. package/src/store/class/ouestFrance/ofTagVente.ts +6 -0
  197. package/src/store/class/ouestFrance/ofTagWithParents.ts +26 -0
  198. package/src/store/class/rss/aggregator.ts +28 -0
  199. package/src/store/class/rss/rssEmission.ts +14 -0
  200. package/src/store/class/rss/rssInfo.ts +8 -0
  201. package/src/store/class/rubrique/rubriquage.ts +10 -0
  202. package/src/store/class/rubrique/rubriquageFilter.ts +6 -0
  203. package/src/store/class/rubrique/rubrique.ts +9 -0
  204. package/src/store/class/stat/statArrayIncome.ts +6 -0
  205. package/src/store/class/stat/statArrayObject.ts +34 -0
  206. package/src/store/class/stat/statGraph.ts +7 -0
  207. package/src/store/class/user/person.ts +15 -0
  208. package/src/store/class/user/profile.ts +12 -0
  209. package/src/store/class/user/userKeycloak.ts +24 -0
  210. package/src/store/paramStore.ts +222 -217
  211. package/src/store/typeAppStore.ts +186 -235
  212. package/src/vuex-shim.d.ts +8 -0
  213. package/tsconfig.json +4 -0
  214. package/vue.config.js +16 -0
  215. package/public/css/fonts/saooti-ui.eot +0 -0
  216. package/public/css/fonts/saooti-ui.svg +0 -829
  217. package/public/css/fonts/saooti-ui.ttf +0 -0
  218. package/public/css/fonts/saooti-ui.woff +0 -0
  219. package/public/css/fonts/stitcher-logo.svg +0 -83
  220. package/public/img/ACPM.PNG +0 -0
  221. package/src/api/comments.ts +0 -7
  222. package/src/api/emissions.ts +0 -7
  223. package/src/api/podcasts.ts +0 -7
  224. package/src/api/profile.ts +0 -8
  225. package/src/api/studio.ts +0 -1
  226. package/src/assets/bootstrap_scss/_alert.scss +0 -51
  227. package/src/assets/bootstrap_scss/_badge.scss +0 -54
  228. package/src/assets/bootstrap_scss/_breadcrumb.scss +0 -42
  229. package/src/assets/bootstrap_scss/_button-group.scss +0 -164
  230. package/src/assets/bootstrap_scss/_buttons.scss +0 -291
  231. package/src/assets/bootstrap_scss/_card.scss +0 -278
  232. package/src/assets/bootstrap_scss/_carousel.scss +0 -197
  233. package/src/assets/bootstrap_scss/_close.scss +0 -41
  234. package/src/assets/bootstrap_scss/_code.scss +0 -48
  235. package/src/assets/bootstrap_scss/_custom-forms.scss +0 -522
  236. package/src/assets/bootstrap_scss/_dropdown.scss +0 -201
  237. package/src/assets/bootstrap_scss/_forms.scss +0 -352
  238. package/src/assets/bootstrap_scss/_functions.scss +0 -134
  239. package/src/assets/bootstrap_scss/_grid.scss +0 -69
  240. package/src/assets/bootstrap_scss/_images.scss +0 -42
  241. package/src/assets/bootstrap_scss/_input-group.scss +0 -191
  242. package/src/assets/bootstrap_scss/_jumbotron.scss +0 -17
  243. package/src/assets/bootstrap_scss/_list-group.scss +0 -158
  244. package/src/assets/bootstrap_scss/_media.scss +0 -8
  245. package/src/assets/bootstrap_scss/_mixins.scss +0 -47
  246. package/src/assets/bootstrap_scss/_modal.scss +0 -243
  247. package/src/assets/bootstrap_scss/_nav.scss +0 -120
  248. package/src/assets/bootstrap_scss/_navbar.scss +0 -324
  249. package/src/assets/bootstrap_scss/_pagination.scss +0 -74
  250. package/src/assets/bootstrap_scss/_popover.scss +0 -170
  251. package/src/assets/bootstrap_scss/_print.scss +0 -141
  252. package/src/assets/bootstrap_scss/_progress.scss +0 -46
  253. package/src/assets/bootstrap_scss/_reboot.scss +0 -482
  254. package/src/assets/bootstrap_scss/_root.scss +0 -20
  255. package/src/assets/bootstrap_scss/_spinners.scss +0 -55
  256. package/src/assets/bootstrap_scss/_tables.scss +0 -185
  257. package/src/assets/bootstrap_scss/_toasts.scss +0 -44
  258. package/src/assets/bootstrap_scss/_tooltip.scss +0 -115
  259. package/src/assets/bootstrap_scss/_transitions.scss +0 -20
  260. package/src/assets/bootstrap_scss/_type.scss +0 -125
  261. package/src/assets/bootstrap_scss/_utilities.scss +0 -17
  262. package/src/assets/bootstrap_scss/_variables.scss +0 -1145
  263. package/src/assets/bootstrap_scss/bootstrap-grid.scss +0 -29
  264. package/src/assets/bootstrap_scss/bootstrap-reboot.scss +0 -12
  265. package/src/assets/bootstrap_scss/bootstrap.scss +0 -44
  266. package/src/assets/bootstrap_scss/mixins/_alert.scss +0 -13
  267. package/src/assets/bootstrap_scss/mixins/_background-variant.scss +0 -22
  268. package/src/assets/bootstrap_scss/mixins/_badge.scss +0 -17
  269. package/src/assets/bootstrap_scss/mixins/_border-radius.scss +0 -63
  270. package/src/assets/bootstrap_scss/mixins/_box-shadow.scss +0 -20
  271. package/src/assets/bootstrap_scss/mixins/_breakpoints.scss +0 -123
  272. package/src/assets/bootstrap_scss/mixins/_buttons.scss +0 -110
  273. package/src/assets/bootstrap_scss/mixins/_caret.scss +0 -62
  274. package/src/assets/bootstrap_scss/mixins/_clearfix.scss +0 -7
  275. package/src/assets/bootstrap_scss/mixins/_deprecate.scss +0 -10
  276. package/src/assets/bootstrap_scss/mixins/_float.scss +0 -14
  277. package/src/assets/bootstrap_scss/mixins/_forms.scss +0 -177
  278. package/src/assets/bootstrap_scss/mixins/_gradients.scss +0 -45
  279. package/src/assets/bootstrap_scss/mixins/_grid-framework.scss +0 -71
  280. package/src/assets/bootstrap_scss/mixins/_grid.scss +0 -69
  281. package/src/assets/bootstrap_scss/mixins/_hover.scss +0 -37
  282. package/src/assets/bootstrap_scss/mixins/_image.scss +0 -36
  283. package/src/assets/bootstrap_scss/mixins/_list-group.scss +0 -21
  284. package/src/assets/bootstrap_scss/mixins/_lists.scss +0 -7
  285. package/src/assets/bootstrap_scss/mixins/_nav-divider.scss +0 -11
  286. package/src/assets/bootstrap_scss/mixins/_pagination.scss +0 -22
  287. package/src/assets/bootstrap_scss/mixins/_reset-text.scss +0 -17
  288. package/src/assets/bootstrap_scss/mixins/_resize.scss +0 -6
  289. package/src/assets/bootstrap_scss/mixins/_screen-reader.scss +0 -34
  290. package/src/assets/bootstrap_scss/mixins/_size.scss +0 -7
  291. package/src/assets/bootstrap_scss/mixins/_table-row.scss +0 -39
  292. package/src/assets/bootstrap_scss/mixins/_text-emphasis.scss +0 -17
  293. package/src/assets/bootstrap_scss/mixins/_text-hide.scss +0 -11
  294. package/src/assets/bootstrap_scss/mixins/_text-truncate.scss +0 -8
  295. package/src/assets/bootstrap_scss/mixins/_transition.scss +0 -16
  296. package/src/assets/bootstrap_scss/mixins/_visibility.scss +0 -8
  297. package/src/assets/bootstrap_scss/utilities/_align.scss +0 -8
  298. package/src/assets/bootstrap_scss/utilities/_background.scss +0 -19
  299. package/src/assets/bootstrap_scss/utilities/_borders.scss +0 -75
  300. package/src/assets/bootstrap_scss/utilities/_clearfix.scss +0 -3
  301. package/src/assets/bootstrap_scss/utilities/_display.scss +0 -26
  302. package/src/assets/bootstrap_scss/utilities/_embed.scss +0 -39
  303. package/src/assets/bootstrap_scss/utilities/_flex.scss +0 -51
  304. package/src/assets/bootstrap_scss/utilities/_float.scss +0 -11
  305. package/src/assets/bootstrap_scss/utilities/_overflow.scss +0 -5
  306. package/src/assets/bootstrap_scss/utilities/_position.scss +0 -32
  307. package/src/assets/bootstrap_scss/utilities/_screenreaders.scss +0 -11
  308. package/src/assets/bootstrap_scss/utilities/_shadows.scss +0 -6
  309. package/src/assets/bootstrap_scss/utilities/_sizing.scss +0 -20
  310. package/src/assets/bootstrap_scss/utilities/_spacing.scss +0 -73
  311. package/src/assets/bootstrap_scss/utilities/_stretched-link.scss +0 -19
  312. package/src/assets/bootstrap_scss/utilities/_text.scss +0 -72
  313. package/src/assets/bootstrap_scss/utilities/_visibility.scss +0 -13
  314. package/src/assets/bootstrap_scss/vendor/_rfs.scss +0 -204
  315. package/src/components/misc/Player.vue +0 -792
  316. package/src/shims-vuex.d.ts +0 -7
  317. package/src/views/Home.vue +0 -18
@@ -1,191 +1,175 @@
1
1
  <template>
2
- <div>
3
- <div class="page-box" v-if="loaded && !error">
4
- <h1 v-if="!lightStyle">{{ $t('Animator') }}</h1>
2
+ <div class="page-box">
3
+ <div
4
+ v-if="loaded && !error"
5
+ >
6
+ <h1 v-if="!pageParameters.lightStyle">
7
+ {{ titleDisplay }}
8
+ </h1>
5
9
  <div
6
- class="d-flex w-100 flex-column align-items-center justify-content-center"
10
+ class="d-flex flex-column align-items-center mb-3"
7
11
  >
8
- <div
12
+ <img
13
+ v-lazy="participant.imageUrl"
14
+ :title="$t('Animator image')"
15
+ :alt="$t('Animator image')"
9
16
  class="img-box-circle mb-3"
10
- :style="{
11
- 'background-image': 'url(\'' + participant.imageUrl + '\')',
12
- }"
13
- ></div>
14
- <h2 class="text-capitalize">{{ name }}</h2>
17
+ >
18
+ <h2 class="text-capitalize">
19
+ {{ name }}
20
+ </h2>
21
+ <!-- eslint-disable vue/no-v-html -->
15
22
  <div
16
- class="h6 participant-desc html-wysiwyg-content"
23
+ class="participant-desc html-wysiwyg-content"
17
24
  v-html="urlify(description)"
18
- ></div>
19
- <div class="d-flex justify-content-center" v-if="isRssButton">
20
- <a
21
- class="btn btn-bigRound"
22
- :title="$t('Subscribe to this participant')"
23
- :aria-label="$t('Subscribe to this participant')"
24
- :href="rssUrl"
25
- target="_blank"
26
- >
27
- <div class="saooti-rss-bounty"></div>
28
- </a>
29
- </div>
30
- <div class="d-flex">
25
+ />
26
+ <!-- eslint-enable -->
27
+ <div class="d-flex mt-3">
31
28
  <EditBox
29
+ v-if="editRight && pageParameters.isEditBox"
32
30
  :participant="participant"
33
- v-if="editRight && isEditBox"
34
- @participantUpdate="updateParticipant"
35
31
  class="flex-grow-1"
36
- ></EditBox>
32
+ @participantUpdate="updateParticipant"
33
+ />
37
34
  <ShareButtons
38
- :participantId="participantId"
39
- v-if="isShareButtons"
40
- ></ShareButtons>
35
+ v-if="pageParameters.isShareButtons"
36
+ :participant-id="participantId"
37
+ :organisation-id="participant.orga.id"
38
+ />
41
39
  </div>
42
40
  </div>
43
41
  <PodcastFilterList
44
- :participantId="participantId"
42
+ v-if="!pageParameters.lightStyle"
43
+ :participant-id="participantId"
45
44
  :name="name"
46
- :categoryFilter="true"
45
+ :category-filter="true"
47
46
  :reload="reload"
48
- v-if="!lightStyle"
49
47
  />
50
48
  <PodcastList
49
+ v-else
51
50
  :first="0"
52
51
  :size="15"
53
- :participantId="participantId"
52
+ :participant-id="participantId"
54
53
  :reload="reload"
55
- v-else
56
54
  />
57
55
  </div>
58
- <div class="d-flex justify-content-center" v-if="!loaded">
59
- <div class="spinner-border mr-3"></div>
60
- <h3 class="mt-2">{{ $t('Loading content ...') }}</h3>
61
- </div>
62
- <div class="text-center" v-if="error">
63
- <h3>{{ $t("Animator doesn't exist") }}</h3>
64
- </div>
56
+ <ClassicLoading
57
+ :loading-text="!loaded?$t('Loading content ...'):undefined"
58
+ :error-text="error?$t(`Animator doesn't exist`):undefined"
59
+ />
65
60
  </div>
66
61
  </template>
67
62
 
68
- <style lang="scss">
69
- @media (min-width: 950px) {
70
- .participant-desc {
71
- max-width: 50%;
72
- line-height: 1.5em;
73
- }
74
- }
75
- </style>
76
-
77
63
  <script lang="ts">
78
- // @ is an alias to /src
79
- import EditBox from '@/components/display/edit/EditBox.vue';
80
- import ShareButtons from '../display/sharing/ShareButtons.vue';
81
- const octopusApi = require('@saooti/octopus-api');
82
- import PodcastFilterList from '../display/podcasts/PodcastFilterList.vue';
83
- import PodcastList from '../display/podcasts/PodcastList.vue';
64
+ import octopusApi from '@saooti/octopus-api';
84
65
  import { state } from '../../store/paramStore';
85
66
  import { displayMethods } from '../mixins/functions';
86
-
87
- import { defineComponent } from 'vue'
67
+ import { orgaComputed } from '../mixins/orgaComputed';
68
+ import { handle403 } from '../mixins/handle403';
69
+ import { Participant } from '@/store/class/general/participant';
70
+ import ClassicLoading from '../form/ClassicLoading.vue';
71
+ import { defineComponent, defineAsyncComponent } from 'vue';
72
+ import { AxiosError } from 'axios';
73
+ const ShareButtons = defineAsyncComponent(() => import('../display/sharing/ShareButtons.vue'));
74
+ const PodcastFilterList = defineAsyncComponent(() => import('../display/podcasts/PodcastFilterList.vue'));
75
+ const EditBox = defineAsyncComponent(() => import('@/components/display/edit/EditBox.vue'));
76
+ const PodcastList = defineAsyncComponent(() => import('../display/podcasts/PodcastList.vue'));
88
77
  export default defineComponent({
89
78
  components: {
90
79
  ShareButtons,
91
80
  PodcastFilterList,
92
81
  EditBox,
93
82
  PodcastList,
83
+ ClassicLoading
94
84
  },
95
-
96
- mixins: [displayMethods],
97
-
98
- mounted() {
99
- this.getParticipantDetails();
85
+ mixins: [displayMethods, handle403, orgaComputed],
86
+ props: {
87
+ participantId: { default: undefined, type: Number},
100
88
  },
101
-
102
- props: ['participantId'],
103
89
  emits: ['participantTitle'],
104
-
105
90
  data() {
106
91
  return {
107
- loaded: false,
108
- participant: undefined as any,
109
- error: false,
110
- reload: false,
92
+ loaded: false as boolean,
93
+ participant: undefined as Participant|undefined,
94
+ error: false as boolean,
95
+ reload: false as boolean,
111
96
  };
112
97
  },
113
-
114
98
  computed: {
115
- organisationId() {
116
- return state.generalParameters.organisationId;
99
+ titleDisplay(): string{
100
+ return state.intervenantPage.titlePage??this.$t('Animator');
117
101
  },
118
- authenticated():boolean {
119
- return state.generalParameters.authenticated;
102
+ pageParameters(){
103
+ return {
104
+ isEditBox : (state.podcastPage.EditBox as boolean),
105
+ isShareButtons: (state.podcastPage.ShareButtons as boolean),
106
+ lightStyle:(state.intervenantPage.lightStyle as boolean),
107
+ };
120
108
  },
121
- isEditBox() {
122
- return state.podcastPage.EditBox;
109
+ rssUrl(): string {
110
+ return `${state.generalParameters.ApiUri}rss/participant/${this.participantId}`;
123
111
  },
124
- isShareButtons() {
125
- return state.podcastPage.ShareButtons;
112
+ description(): string {
113
+ return this.participant?.description ?? '';
126
114
  },
127
- lightStyle() {
128
- return state.intervenantPage.lightStyle;
115
+ name(): string {
116
+ return (`${this.participant?.firstName??''} ${this.participant?.lastName??''}`).trim();
129
117
  },
130
- isRssButton() {
131
- return state.intervenantPage.rssButton;
118
+ editRight(): boolean {
119
+ return (true===this.authenticated &&
120
+ this.myOrganisationId === this.participant?.orga?.id) ||
121
+ true===state.generalParameters.isAdmin
132
122
  },
133
- rssUrl():any {
134
- return (
135
- state.generalParameters.ApiUri + 'rss/participant/' + this.participantId
136
- );
137
- },
138
- description():string {
139
- let description;
140
- description = this.participant.description || '';
141
- if (state.generalParameters.isIE11)
142
- return description.substring(0, 50) + '...';
143
- return description;
144
- },
145
-
146
- name():string {
147
- const fullName = (
148
- (this.participant.firstName || '') +
149
- ' ' +
150
- (this.participant.lastName || '')
151
- ).trim();
152
- if (state.generalParameters.isIE11)
153
- return fullName.substring(0, 50) + '...';
154
- return fullName;
123
+ },
124
+ watch: {
125
+ participant: {
126
+ deep: true,
127
+ handler(){
128
+ this.reload = !this.reload;
129
+ }
155
130
  },
156
- editRight() {
157
- if (
158
- (this.authenticated &&
159
- this.organisationId === this.participant.orga.id) ||
160
- state.generalParameters.isAdmin
161
- )
162
- return true;
163
- return false;
131
+ participantId: {
132
+ immediate: true,
133
+ handler() {
134
+ this.getParticipantDetails();
135
+ },
164
136
  },
165
137
  },
166
-
167
138
  methods: {
168
- async getParticipantDetails() {
139
+ initError():void{
140
+ this.error = true;
141
+ this.loaded = true;
142
+ },
143
+ async getParticipantDetails(): Promise<void> {
169
144
  this.loaded = false;
170
145
  try {
171
- const data = await octopusApi.fetchParticipant(this.participantId);
172
- this.participant = data;
173
- this.$emit('participantTitle', this.name);
174
- this.loaded = true;
175
- } catch {
176
- this.error = true;
146
+ const data = await octopusApi.fetchData<Participant>(0, 'participant/'+this.participantId);
147
+ if("PUBLIC"!==data?.orga?.privacy && this.filterOrga!==data?.orga?.id){
148
+ this.initError();
149
+ return;
150
+ }
151
+ this.updateParticipant(data);
177
152
  this.loaded = true;
153
+ } catch(error) {
154
+ this.handle403((error as AxiosError));
155
+ this.initError();
178
156
  }
179
157
  },
180
- updateParticipant(participant:any) {
158
+ updateParticipant(participant: Participant): void {
181
159
  this.participant = participant;
182
160
  this.$emit('participantTitle', this.name);
183
161
  },
184
162
  },
185
- watch: {
186
- participant() {
187
- this.reload = !this.reload;
188
- },
189
- },
190
- });
163
+ })
191
164
  </script>
165
+
166
+ <style lang="scss">
167
+ .octopus-app{
168
+ @media (min-width: 950px) {
169
+ .participant-desc {
170
+ max-width: 50%;
171
+ line-height: 1.5em;
172
+ }
173
+ }
174
+ }
175
+ </style>
@@ -1,69 +1,53 @@
1
1
  <template>
2
2
  <div class="page-box">
3
- <h1>{{ $t('All participants') }}</h1>
3
+ <h1>{{ titleDisplay }}</h1>
4
4
  <ProductorSearch
5
- :organisationId="organisationId"
6
- :searchPattern="searchPattern"
5
+ :organisation-id="organisationId"
6
+ :search-pattern="searchPattern"
7
7
  type="participant"
8
- @updateOrganisationId="updateOrganisationId"
9
- @updateSearchPattern="updateSearchPattern"
8
+ @updateOrganisationId="organisationId = $event"
9
+ @updateSearchPattern="searchPattern = $event"
10
10
  />
11
11
  <ParticipantList
12
- :showCount="true"
12
+ :show-count="true"
13
13
  :first="first"
14
14
  :size="size"
15
15
  :query="searchPattern"
16
- :organisationId="organisationId"
16
+ :organisation-id="organisationId"
17
17
  />
18
18
  </div>
19
19
  </template>
20
- <style lang="scss"></style>
20
+
21
21
  <script lang="ts">
22
- // @ is an alias to /src
22
+ import { orgaComputed } from '../mixins/orgaComputed';
23
23
  import ParticipantList from '../display/participant/ParticipantList.vue';
24
24
  import ProductorSearch from '../display/filter/ProductorSearch.vue';
25
-
25
+ import { state } from '../../store/paramStore';
26
26
  import { defineComponent } from 'vue'
27
27
  export default defineComponent({
28
28
  components: {
29
29
  ProductorSearch,
30
30
  ParticipantList,
31
31
  },
32
-
33
- created() {
34
- if (this.$route.query.first) {
35
- this.first = this.$route.query.first;
36
- } else {
37
- this.first = 0;
38
- }
39
- if (this.$route.query.size) {
40
- this.size = this.$route.query.size;
41
- } else {
42
- this.size = 12;
43
- }
44
- if (this.$route.query.productor) {
45
- this.organisationId = this.$route.query.productor;
46
- } else if (this.$store.state.filter.organisationId) {
47
- this.organisationId = this.$store.state.filter.organisationId;
48
- }
32
+ mixins: [orgaComputed],
33
+ props: {
34
+ productor: { default: undefined, type: String},
49
35
  },
50
-
51
36
  data() {
52
37
  return {
53
- first: undefined as any,
54
- size: undefined as any,
55
- searchPattern: '',
56
- organisationId: undefined as any,
38
+ first: 0 as number,
39
+ size: 30 as number,
40
+ searchPattern: '' as string,
41
+ organisationId: undefined as string | undefined,
57
42
  };
58
43
  },
59
-
60
- methods: {
61
- updateOrganisationId(value: any) {
62
- this.organisationId = value;
63
- },
64
- updateSearchPattern(value: string) {
65
- this.searchPattern = value;
44
+ computed: {
45
+ titleDisplay(): string{
46
+ return state.intervenantsPage.titlePage ?? this.$t('All participants');
66
47
  },
67
48
  },
68
- });
69
- </script>
49
+ created() {
50
+ this.organisationId = this.productor??this.filterOrga;
51
+ },
52
+ })
53
+ </script>
@@ -1,145 +1,145 @@
1
1
  <template>
2
- <div>
3
- <div class="page-box" v-if="loaded && !error">
2
+ <div class="page-box">
3
+ <div
4
+ v-if="loaded && !error"
5
+ >
4
6
  <h1>{{ $t('Playlist') }}</h1>
5
7
  <div class="d-flex">
6
- <div class="d-flex flex-column flex-grow">
8
+ <div class="d-flex flex-column flex-grow-1">
7
9
  <EditBox
10
+ v-if="editRight && pageParameters.isEditBox"
8
11
  :playlist="playlist"
9
- :isReady="isReady"
10
- v-if="editRight && isEditBox"
11
- ></EditBox>
12
+ />
12
13
  <div class="module-box">
13
14
  <h2>{{ name }}</h2>
14
15
  <div class="mb-5 mt-3 descriptionText">
15
16
  <img
16
- :src="imageUrl"
17
+ v-lazy="imageUrl"
17
18
  :alt="$t('Playlist name image', { name: name })"
18
- class="img-box shadow-element float-left mr-3 mb-3"
19
+ class="img-box shadow-element float-start me-3 mb-3"
20
+ >
21
+ <!-- eslint-disable vue/no-v-html -->
22
+ <p
23
+ class="html-wysiwyg-content"
24
+ v-html="urlify(description)"
19
25
  />
20
- <p class="html-wysiwyg-content" v-html="urlify(description)"></p>
26
+ <!-- eslint-enable -->
21
27
  </div>
22
28
  </div>
23
29
  </div>
24
- <div class="d-flex flex-column share-container">
30
+ <div class="d-flex flex-column flex-grow-mobile">
25
31
  <SharePlayer
32
+ v-if="pageParameters.isSharePlayer && authenticated"
26
33
  :playlist="playlist"
27
- :organisationId="organisationId"
28
- :isEducation="isEducation"
29
- v-if="isSharePlayer && authenticated"
30
- >
31
- </SharePlayer>
32
- <ShareButtons v-if="isShareButtons"></ShareButtons>
34
+ :organisation-id="myOrganisationId"
35
+ :is-education="isEducation"
36
+ />
37
+ <ShareButtons
38
+ v-if="pageParameters.isShareButtons"
39
+ :playlist="playlist"
40
+ />
33
41
  </div>
34
42
  </div>
35
43
  <PodcastList :playlist="playlist" />
36
44
  </div>
37
- <div class="d-flex justify-content-center" v-if="!loaded">
38
- <div class="spinner-border mr-3"></div>
39
- <h3 class="mt-2">{{ $t('Loading content ...') }}</h3>
40
- </div>
41
- <div class="text-center" v-if="error">
42
- <h3>{{ $t("Playlist doesn't exist") }}</h3>
43
- </div>
45
+ <ClassicLoading
46
+ :loading-text="!loaded?$t('Loading content ...'):undefined"
47
+ :error-text="error?$t(`Playlist doesn't exist`):undefined"
48
+ />
44
49
  </div>
45
50
  </template>
46
- <style lang="scss"></style>
51
+
47
52
  <script lang="ts">
48
- // @ is an alias to /src
49
- import EditBox from '@/components/display/edit/EditBox.vue';
50
- import ShareButtons from '../display/sharing/ShareButtons.vue';
51
- import SharePlayer from '../display/sharing/SharePlayer.vue';
53
+ import { orgaComputed } from '../mixins/orgaComputed';
54
+ import ClassicLoading from '../form/ClassicLoading.vue';
52
55
  import PodcastList from '../display/playlist/PodcastList.vue';
53
- const octopusApi = require('@saooti/octopus-api');
56
+ import octopusApi from '@saooti/octopus-api';
54
57
  import { state } from '../../store/paramStore';
55
58
  import { displayMethods } from '../mixins/functions';
56
-
57
- import { defineComponent } from 'vue'
59
+ import { handle403 } from '../mixins/handle403';
60
+ import { Playlist } from '@/store/class/general/playlist';
61
+ import { defineComponent, defineAsyncComponent } from 'vue';
62
+ import { AxiosError } from 'axios';
63
+ const ShareButtons = defineAsyncComponent(() => import('../display/sharing/ShareButtons.vue'));
64
+ const EditBox = defineAsyncComponent(() => import('@/components/display/edit/EditBox.vue'));
65
+ const SharePlayer = defineAsyncComponent(() => import('../display/sharing/SharePlayer.vue'));
58
66
  export default defineComponent({
59
67
  components: {
60
68
  ShareButtons,
61
69
  EditBox,
62
70
  PodcastList,
63
71
  SharePlayer,
72
+ ClassicLoading
64
73
  },
65
- mixins: [displayMethods],
74
+ mixins:[displayMethods, handle403, orgaComputed],
66
75
 
67
- mounted() {
68
- this.getPlaylistDetails();
76
+ props: {
77
+ playlistId: { default: undefined, type: Number},
78
+ isEducation: { default: false, type: Boolean},
69
79
  },
70
80
 
71
- props: ['playlistId', 'isEducation'],
72
81
  emits: ['playlistTitle'],
73
-
74
82
  data() {
75
83
  return {
76
- loaded: false,
77
- playlist: undefined as any,
78
- error: false,
79
- isReady: true,
84
+ loaded: false as boolean,
85
+ playlist: undefined as Playlist | undefined,
86
+ error: false as boolean,
80
87
  };
81
88
  },
82
-
83
89
  computed: {
84
- organisationId() {
85
- return state.generalParameters.organisationId;
86
- },
87
- authenticated():boolean {
88
- return state.generalParameters.authenticated;
90
+ pageParameters(){
91
+ return {
92
+ isEditBox : (state.podcastPage.EditBox as boolean),
93
+ isShareButtons: (state.podcastPage.ShareButtons as boolean),
94
+ isSharePlayer: (state.podcastPage.SharePlayer as boolean),
95
+ };
89
96
  },
90
- isEditBox() {
91
- return state.podcastPage.EditBox;
97
+ name(): string {
98
+ return this.playlist?.title ??'';
92
99
  },
93
- isShareButtons() {
94
- return state.podcastPage.ShareButtons;
95
- },
96
- isSharePlayer() {
97
- return state.podcastPage.SharePlayer;
98
- },
99
- name():string {
100
- return this.playlist ? this.playlist.title : '';
101
- },
102
-
103
- imageUrl():string {
104
- let dummy = new Date().getTime().toString();
100
+ imageUrl(): string {
101
+ const dummy = new Date().getTime().toString();
105
102
  return this.playlist ? this.playlist.imageUrl + '?dummy=' + dummy : '';
106
103
  },
107
-
108
- description():string {
109
- return this.playlist ? this.playlist.description : '';
104
+ description(): string {
105
+ return this.playlist?.description ??'';
110
106
  },
111
-
112
- editRight() {
113
- if (
114
- (state.generalParameters.isPlaylist &&
115
- this.organisationId === this.playlist.organisation.id) ||
116
- state.generalParameters.isAdmin
117
- )
118
- return true;
119
- return false;
107
+ editRight(): boolean {
108
+ return (true===state.generalParameters.isPlaylist &&
109
+ this.myOrganisationId === this.playlist?.organisation?.id) ||
110
+ true ===state.generalParameters.isAdmin
120
111
  },
121
112
  },
122
-
123
113
  watch: {
124
- playlistId() {
125
- this.loaded = false;
126
- this.error = false;
127
- this.getPlaylistDetails();
114
+ playlistId: {
115
+ immediate: true,
116
+ handler() {
117
+ this.getPlaylistDetails();
118
+ },
128
119
  },
129
120
  },
130
121
 
131
122
  methods: {
132
- async getPlaylistDetails() {
123
+ initError():void{
124
+ this.error = true;
125
+ this.loaded = true;
126
+ },
127
+ async getPlaylistDetails(): Promise<void> {
133
128
  try {
134
- const data = await octopusApi.fetchPlaylist(this.playlistId);
135
- this.playlist = data;
129
+ this.loaded = false;
130
+ this.error = false;
131
+ this.playlist = await octopusApi.fetchData<Playlist>(0, 'playlist/'+this.playlistId);
132
+ if("PUBLIC"!==this.playlist.organisation?.privacy && this.filterOrga!==this.playlist.organisation?.id){
133
+ this.initError();
134
+ return;
135
+ }
136
136
  this.$emit('playlistTitle', this.playlist.title);
137
- this.loaded = true;
138
- } catch {
139
- this.error = true;
140
- this.loaded = true;
137
+ } catch(error) {
138
+ this.handle403((error as AxiosError));
139
+ this.initError();
141
140
  }
141
+ this.loaded = true;
142
142
  },
143
143
  },
144
- });
145
- </script>
144
+ })
145
+ </script>