@saooti/octopus-sdk 37.0.6 → 37.0.8

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 (236) hide show
  1. package/README.md +2 -2
  2. package/index.ts +22 -22
  3. package/package.json +26 -22
  4. package/src/App.vue +69 -60
  5. package/src/api/classicCrud.ts +12 -12
  6. package/src/api/initialize.ts +1 -1
  7. package/src/assets/transition.scss +34 -22
  8. package/src/components/display/aggregator/RssSection.vue +3 -3
  9. package/src/components/display/categories/CategoryChooser.vue +73 -60
  10. package/src/components/display/categories/CategoryFilter.vue +134 -90
  11. package/src/components/display/categories/CategoryList.vue +76 -62
  12. package/src/components/display/comments/AddCommentModal.vue +44 -44
  13. package/src/components/display/comments/CommentBasicView.vue +38 -30
  14. package/src/components/display/comments/CommentInput.vue +121 -106
  15. package/src/components/display/comments/CommentItem.vue +144 -102
  16. package/src/components/display/comments/CommentList.vue +117 -85
  17. package/src/components/display/comments/CommentParentInfo.vue +18 -15
  18. package/src/components/display/comments/CommentPlayer.vue +39 -41
  19. package/src/components/display/comments/CommentSection.vue +68 -53
  20. package/src/components/display/edit/EditBox.vue +7 -7
  21. package/src/components/display/edit/EditBoxRadio.vue +3 -4
  22. package/src/components/display/edit/EditCommentBox.vue +34 -36
  23. package/src/components/display/emission/EmissionInlineList.vue +75 -63
  24. package/src/components/display/emission/EmissionItem.vue +47 -35
  25. package/src/components/display/emission/EmissionList.vue +118 -83
  26. package/src/components/display/emission/EmissionPlayerItem.vue +89 -89
  27. package/src/components/display/filter/AdvancedSearch.vue +81 -73
  28. package/src/components/display/filter/CategorySearchFilter.vue +27 -25
  29. package/src/components/display/filter/DateFilter.vue +38 -38
  30. package/src/components/display/filter/MonetizableFilter.vue +16 -14
  31. package/src/components/display/filter/ProductorSearch.vue +55 -47
  32. package/src/components/display/filter/RubriqueChoice.vue +42 -27
  33. package/src/components/display/filter/RubriqueFilter.vue +130 -85
  34. package/src/components/display/filter/SearchOrder.vue +16 -11
  35. package/src/components/display/list/ListPaginate.vue +72 -70
  36. package/src/components/display/list/PaginateParams.vue +29 -30
  37. package/src/components/display/list/PaginateSection.vue +210 -0
  38. package/src/components/display/list/SwiperList.vue +28 -32
  39. package/src/components/display/live/CountDown.vue +12 -14
  40. package/src/components/display/live/LiveHorizontalList.vue +60 -50
  41. package/src/components/display/live/LiveItem.vue +42 -26
  42. package/src/components/display/live/LiveList.vue +92 -65
  43. package/src/components/display/live/RadioCurrently.vue +47 -42
  44. package/src/components/display/live/RadioImage.vue +40 -42
  45. package/src/components/display/live/RadioItem.vue +15 -22
  46. package/src/components/display/live/RadioList.vue +24 -21
  47. package/src/components/display/live/RadioPlanning.vue +105 -68
  48. package/src/components/display/organisation/OrganisationChooser.vue +58 -42
  49. package/src/components/display/organisation/OrganisationChooserLight.vue +27 -19
  50. package/src/components/display/participant/ParticipantItem.vue +89 -77
  51. package/src/components/display/participant/ParticipantList.vue +90 -60
  52. package/src/components/display/playlist/PlaylistItem.vue +32 -35
  53. package/src/components/display/playlist/PlaylistList.vue +70 -52
  54. package/src/components/display/playlist/PodcastList.vue +61 -50
  55. package/src/components/display/playlist/PodcastPlaylistInlineList.vue +47 -38
  56. package/src/components/display/podcasts/AnimatorsItem.vue +17 -15
  57. package/src/components/display/podcasts/ParticipantDescription.vue +21 -22
  58. package/src/components/display/podcasts/PodcastFilterList.vue +28 -26
  59. package/src/components/display/podcasts/PodcastImage.vue +129 -131
  60. package/src/components/display/podcasts/PodcastInlineList.vue +33 -29
  61. package/src/components/display/podcasts/PodcastInlineListClassic.vue +91 -71
  62. package/src/components/display/podcasts/PodcastInlineListTemplate.vue +94 -85
  63. package/src/components/display/podcasts/PodcastItem.vue +96 -90
  64. package/src/components/display/podcasts/PodcastItemInfo.vue +61 -65
  65. package/src/components/display/podcasts/PodcastList.vue +115 -84
  66. package/src/components/display/podcasts/PodcastModuleBox.vue +95 -104
  67. package/src/components/display/podcasts/PodcastPlayBar.vue +45 -32
  68. package/src/components/display/podcasts/PodcastSwiperList.vue +65 -55
  69. package/src/components/display/podcasts/TagList.vue +33 -37
  70. package/src/components/display/rubriques/RubriqueChooser.vue +70 -51
  71. package/src/components/display/rubriques/RubriqueList.vue +117 -89
  72. package/src/components/display/sharing/PlayerParameters.vue +45 -42
  73. package/src/components/display/sharing/QrCode.vue +52 -46
  74. package/src/components/display/sharing/ShareButtons.vue +18 -18
  75. package/src/components/display/sharing/ShareButtonsIntern.vue +100 -78
  76. package/src/components/display/sharing/ShareDistribution.vue +101 -67
  77. package/src/components/display/sharing/SharePlayer.vue +207 -127
  78. package/src/components/display/sharing/SharePlayerColors.vue +15 -15
  79. package/src/components/display/sharing/SharePlayerRadio.vue +62 -39
  80. package/src/components/display/sharing/SharePlayerTypes.vue +93 -55
  81. package/src/components/display/sharing/SubscribeButtons.vue +83 -32
  82. package/src/components/display/studio/RecordingItemButton.vue +3 -3
  83. package/src/components/form/ClassicCheckbox.vue +32 -31
  84. package/src/components/form/ClassicDatePicker.vue +47 -49
  85. package/src/components/form/ClassicInputText.vue +99 -98
  86. package/src/components/form/ClassicLoading.vue +11 -14
  87. package/src/components/form/ClassicMultiselect.vue +125 -126
  88. package/src/components/form/ClassicRadio.vue +15 -18
  89. package/src/components/form/ClassicSearch.vue +17 -23
  90. package/src/components/form/ClassicSelect.vue +35 -27
  91. package/src/components/form/{Wysiwyg.vue → ClassicWysiwyg.vue} +103 -118
  92. package/src/components/misc/AcpmImage.vue +6 -6
  93. package/src/components/misc/ClassicAccordion.vue +73 -0
  94. package/src/components/misc/ClassicNav.vue +117 -0
  95. package/src/components/misc/ClassicPopover.vue +212 -0
  96. package/src/components/misc/{Spinner.vue → ClassicSpinner.vue} +14 -15
  97. package/src/components/misc/ErrorMessage.vue +9 -17
  98. package/src/components/misc/FooterSection.vue +198 -0
  99. package/src/components/misc/HomeDropdown.vue +60 -60
  100. package/src/components/misc/LeftMenu.vue +115 -79
  101. package/src/components/misc/ProgressBar.vue +36 -32
  102. package/src/components/misc/SnackBar.vue +169 -0
  103. package/src/components/misc/TopBar.vue +162 -116
  104. package/src/components/misc/modal/ClassicModal.vue +99 -103
  105. package/src/components/misc/modal/ClipboardModal.vue +21 -23
  106. package/src/components/misc/modal/MessageModal.vue +22 -28
  107. package/src/components/misc/modal/NewsletterModal.vue +139 -113
  108. package/src/components/misc/modal/QrCodeModal.vue +14 -17
  109. package/src/components/misc/modal/ShareModalPlayer.vue +44 -60
  110. package/src/components/misc/player/PlayerCompact.vue +47 -62
  111. package/src/components/misc/player/{Player.vue → PlayerComponent.vue} +54 -46
  112. package/src/components/misc/player/PlayerLarge.vue +62 -61
  113. package/src/components/misc/player/PlayerProgressBar.vue +40 -30
  114. package/src/components/misc/player/PlayerTimeline.vue +32 -36
  115. package/src/components/misc/player/radio/RadioHistory.vue +62 -59
  116. package/src/components/misc/player/radio/RadioProgressBar.vue +44 -35
  117. package/src/components/mixins/cookies.ts +11 -10
  118. package/src/components/mixins/displayMethods.ts +5 -4
  119. package/src/components/mixins/handle403.ts +9 -9
  120. package/src/components/mixins/imageProxy.ts +14 -7
  121. package/src/components/mixins/init.ts +31 -16
  122. package/src/components/mixins/orgaComputed.ts +7 -7
  123. package/src/components/mixins/organisationFilter.ts +36 -22
  124. package/src/components/mixins/player/playerComment.ts +46 -37
  125. package/src/components/mixins/player/playerDisplay.ts +122 -87
  126. package/src/components/mixins/player/playerLive.ts +65 -43
  127. package/src/components/mixins/player/playerLogic.ts +133 -88
  128. package/src/components/mixins/player/playerTranscript.ts +48 -30
  129. package/src/components/mixins/radio/fetchRadioData.ts +40 -23
  130. package/src/components/mixins/selenium.ts +2 -2
  131. package/src/components/mixins/tagOfMixins.ts +11 -11
  132. package/src/components/pages/CategoryPage.vue +43 -0
  133. package/src/components/pages/{Emission.vue → EmissionPage.vue} +98 -67
  134. package/src/components/pages/{Emissions.vue → EmissionsPage.vue} +51 -44
  135. package/src/components/pages/Error403Page.vue +20 -19
  136. package/src/components/pages/HomePage.vue +144 -0
  137. package/src/components/pages/LivesPage.vue +66 -0
  138. package/src/components/pages/PageNotFound.vue +33 -22
  139. package/src/components/pages/{Participant.vue → ParticipantPage.vue} +63 -49
  140. package/src/components/pages/{Participants.vue → ParticipantsPage.vue} +9 -9
  141. package/src/components/pages/PlaylistPage.vue +175 -0
  142. package/src/components/pages/{Playlists.vue → PlaylistsPage.vue} +16 -14
  143. package/src/components/pages/PodcastPage.vue +365 -0
  144. package/src/components/pages/PodcastsPage.vue +152 -0
  145. package/src/components/pages/RadioPage.vue +131 -0
  146. package/src/components/pages/RubriquePage.vue +45 -0
  147. package/src/components/pages/{Search.vue → SearchPage.vue} +19 -19
  148. package/src/helper/dom.ts +1 -1
  149. package/src/helper/duration.ts +10 -4
  150. package/src/helper/useEventListener.ts +7 -8
  151. package/src/i18n.ts +31 -30
  152. package/src/locale/de.ts +272 -257
  153. package/src/locale/educationen.ts +13 -13
  154. package/src/locale/educationfr.ts +1 -1
  155. package/src/locale/en.ts +332 -324
  156. package/src/locale/es.ts +334 -318
  157. package/src/locale/fr.ts +339 -324
  158. package/src/locale/it.ts +341 -328
  159. package/src/locale/messages.ts +9 -9
  160. package/src/locale/sl.ts +324 -319
  161. package/src/main.ts +28 -31
  162. package/src/router/router.ts +218 -198
  163. package/src/shims-tsx.d.ts +1 -1
  164. package/src/shims-vue.d.ts +1 -1
  165. package/src/stores/ApiStore.ts +44 -44
  166. package/src/stores/AuthStore.ts +21 -15
  167. package/src/stores/CommentStore.ts +13 -11
  168. package/src/stores/FilterStore.ts +25 -15
  169. package/src/stores/GeneralStore.ts +15 -15
  170. package/src/stores/ParamSdkStore.ts +179 -137
  171. package/src/stores/PlayerStore.ts +139 -125
  172. package/src/stores/class/adserver/adserverConfig.ts +1 -1
  173. package/src/stores/class/adserver/adserverOtherEmission.ts +9 -9
  174. package/src/stores/class/cartouchier/cartouche.ts +4 -4
  175. package/src/stores/class/cartouchier/cartouchier.ts +2 -2
  176. package/src/stores/class/conference/conference.ts +10 -9
  177. package/src/stores/class/conference/conferenceMessage.ts +2 -2
  178. package/src/stores/class/conference/conferenceParticipant.ts +1 -1
  179. package/src/stores/class/conference/studioCall.ts +6 -6
  180. package/src/stores/class/contract/contractOrganisation.ts +5 -5
  181. package/src/stores/class/ftp/ftpEmission.ts +9 -9
  182. package/src/stores/class/ftp/testFtpEmission.ts +4 -4
  183. package/src/stores/class/general/audioView.ts +19 -19
  184. package/src/stores/class/general/category.ts +1 -1
  185. package/src/stores/class/general/classicSelectType.ts +2 -3
  186. package/src/stores/class/general/customPlayer.ts +8 -8
  187. package/src/stores/class/general/emission.ts +20 -20
  188. package/src/stores/class/general/fetchParam.ts +8 -2
  189. package/src/stores/class/general/initState.ts +31 -31
  190. package/src/stores/class/general/interfacePageable.ts +13 -13
  191. package/src/stores/class/general/ituneCategory.ts +4 -4
  192. package/src/stores/class/general/listReturn.ts +12 -12
  193. package/src/stores/class/general/media.ts +7 -7
  194. package/src/stores/class/general/organisation.ts +9 -9
  195. package/src/stores/class/general/pageable.ts +10 -10
  196. package/src/stores/class/general/participant.ts +7 -7
  197. package/src/stores/class/general/player.ts +30 -28
  198. package/src/stores/class/general/playlist.ts +17 -19
  199. package/src/stores/class/general/podcast.ts +19 -19
  200. package/src/stores/class/general/sortPageable.ts +4 -4
  201. package/src/stores/class/general/soundcastCategory.ts +7 -7
  202. package/src/stores/class/ouestFrance/ofTag.ts +34 -34
  203. package/src/stores/class/ouestFrance/ofTagInfo.ts +9 -9
  204. package/src/stores/class/ouestFrance/ofTagPage.ts +7 -7
  205. package/src/stores/class/ouestFrance/ofTagSeo.ts +7 -7
  206. package/src/stores/class/ouestFrance/ofTagVente.ts +6 -6
  207. package/src/stores/class/ouestFrance/ofTagWithParents.ts +20 -20
  208. package/src/stores/class/radio/canal.ts +4 -4
  209. package/src/stores/class/radio/live.ts +6 -6
  210. package/src/stores/class/radio/mix.ts +16 -16
  211. package/src/stores/class/radio/playlistMedia.ts +7 -7
  212. package/src/stores/class/radio/recurrence.ts +54 -54
  213. package/src/stores/class/rss/rssEmission.ts +13 -13
  214. package/src/stores/class/rss/rssInfo.ts +7 -7
  215. package/src/stores/class/rubrique/rubriquage.ts +2 -2
  216. package/src/stores/class/rubrique/rubrique.ts +1 -1
  217. package/src/stores/class/stat/statArrayIncome.ts +5 -5
  218. package/src/stores/class/stat/statArrayObject.ts +26 -26
  219. package/src/stores/class/stat/statGraph.ts +6 -6
  220. package/src/stores/class/user/person.ts +4 -2
  221. package/src/stores/class/user/profile.ts +4 -2
  222. package/src/stores/class/user/userKeycloak.ts +4 -5
  223. package/src/components/display/list/Paginate.vue +0 -181
  224. package/src/components/misc/Accordion.vue +0 -78
  225. package/src/components/misc/Footer.vue +0 -169
  226. package/src/components/misc/Nav.vue +0 -119
  227. package/src/components/misc/Popover.vue +0 -193
  228. package/src/components/misc/Snackbar.vue +0 -168
  229. package/src/components/pages/Category.vue +0 -41
  230. package/src/components/pages/Home.vue +0 -125
  231. package/src/components/pages/Lives.vue +0 -64
  232. package/src/components/pages/Playlist.vue +0 -164
  233. package/src/components/pages/Podcast.vue +0 -307
  234. package/src/components/pages/Podcasts.vue +0 -146
  235. package/src/components/pages/Radio.vue +0 -122
  236. package/src/components/pages/Rubrique.vue +0 -42
@@ -6,7 +6,7 @@
6
6
  >
7
7
  <template #body>
8
8
  <p class="d-flex justify-content-between align-items-center">
9
- {{ $t('Rss feed:') }}
9
+ {{ $t("Rss feed:") }}
10
10
  <span id="LINK">{{ link }}</span>
11
11
  <input
12
12
  type="button"
@@ -14,49 +14,47 @@
14
14
  class="btn btn-primary"
15
15
  :title="$t('Copy')"
16
16
  @click="onCopyCode(link, afterCopy)"
17
- >
17
+ />
18
18
  </p>
19
- <RssSection
20
- v-if="emission && authenticated"
21
- :emission="emission"
22
- />
19
+ <RssSection v-if="emission && authenticated" :emission="emission" />
23
20
  </template>
24
21
  </ClassicModal>
25
22
  </template>
26
23
 
27
24
  <script lang="ts">
28
- import ClassicModal from '../modal/ClassicModal.vue';
29
- import { Emission } from '@/stores/class/general/emission';
30
- import displayMethods from '../../mixins/displayMethods';
31
- import { defineComponent, defineAsyncComponent } from 'vue';
32
- import { state } from '../../../stores/ParamSdkStore';
33
- const RssSection = defineAsyncComponent(() => import('@/components/display/aggregator/RssSection.vue'));
25
+ import ClassicModal from "../modal/ClassicModal.vue";
26
+ import { Emission } from "@/stores/class/general/emission";
27
+ import displayMethods from "../../mixins/displayMethods";
28
+ import { defineComponent, defineAsyncComponent } from "vue";
29
+ import { state } from "../../../stores/ParamSdkStore";
30
+ const RssSection = defineAsyncComponent(
31
+ () => import("@/components/display/aggregator/RssSection.vue"),
32
+ );
34
33
  export default defineComponent({
35
- name: 'ClipboardModal',
34
+ name: "ClipboardModal",
36
35
  components: {
37
36
  RssSection,
38
- ClassicModal
37
+ ClassicModal,
39
38
  },
40
39
  mixins: [displayMethods],
41
40
 
42
41
  props: {
43
- link: { default: '', type: String},
44
- emission: { default: undefined, type: Object as ()=> Emission},
42
+ link: { default: "", type: String },
43
+ emission: { default: undefined, type: Object as () => Emission },
45
44
  },
46
- emits: ['close', 'copy'],
45
+ emits: ["close", "copy"],
47
46
  computed: {
48
47
  authenticated(): boolean {
49
- return state.generalParameters.authenticated??false;
48
+ return state.generalParameters.authenticated ?? false;
50
49
  },
51
50
  },
52
51
  methods: {
53
52
  closePopup(): void {
54
- this.$emit('close');
53
+ this.$emit("close");
55
54
  },
56
- afterCopy(): void{
55
+ afterCopy(): void {
57
56
  this.$emit("copy");
58
- }
57
+ },
59
58
  },
60
- })
59
+ });
61
60
  </script>
62
-
@@ -7,19 +7,13 @@
7
7
  >
8
8
  <template #body>
9
9
  <!-- eslint-disable vue/no-v-html -->
10
- <div
11
- class="content"
12
- v-html="message"
13
- />
10
+ <div class="content" v-html="message" />
14
11
  <!-- eslint-enable -->
15
12
  </template>
16
- <template
17
- v-if="validatetext"
18
- #footer
19
- >
13
+ <template v-if="validatetext" #footer>
20
14
  <button
21
15
  v-if="canceltext"
22
- :ref="!closable && canceltext?'focusElement':''"
16
+ :ref="!closable && canceltext ? 'focusElement' : ''"
23
17
  class="btn m-1"
24
18
  @click="onCancel"
25
19
  >
@@ -33,7 +27,7 @@
33
27
  {{ thirdText }}
34
28
  </button>
35
29
  <button
36
- :ref="!closable && !canceltext?'focusElement':''"
30
+ :ref="!closable && !canceltext ? 'focusElement' : ''"
37
31
  class="btn btn-primary m-1"
38
32
  @click="onValid"
39
33
  >
@@ -44,36 +38,36 @@
44
38
  </template>
45
39
 
46
40
  <script lang="ts">
47
- import ClassicModal from '../modal/ClassicModal.vue';
48
- import { defineComponent } from 'vue'
41
+ import ClassicModal from "../modal/ClassicModal.vue";
42
+ import { defineComponent } from "vue";
49
43
  export default defineComponent({
50
- name: 'MessageModal',
44
+ name: "MessageModal",
51
45
  components: {
52
- ClassicModal
46
+ ClassicModal,
53
47
  },
54
48
  props: {
55
- title: { default: undefined, type: String},
56
- active: { default: false, type: Boolean},
57
- closable: { default: true, type: Boolean},
58
- message: { default: undefined, type: String},
59
- validatetext: { default: undefined, type: String},
60
- canceltext: { default: undefined, type: String},
61
- thirdText: { default: undefined, type: String},
49
+ title: { default: undefined, type: String },
50
+ active: { default: false, type: Boolean },
51
+ closable: { default: true, type: Boolean },
52
+ message: { default: undefined, type: String },
53
+ validatetext: { default: undefined, type: String },
54
+ canceltext: { default: undefined, type: String },
55
+ thirdText: { default: undefined, type: String },
62
56
  },
63
- emits: ['close', 'validate', 'cancel', 'thirdEvent'],
57
+ emits: ["close", "validate", "cancel", "thirdEvent"],
64
58
  methods: {
65
59
  closePopup(): void {
66
- this.$emit('close');
60
+ this.$emit("close");
67
61
  },
68
62
  onValid(): void {
69
- this.$emit('validate');
63
+ this.$emit("validate");
70
64
  },
71
65
  onCancel(): void {
72
- this.$emit('cancel');
66
+ this.$emit("cancel");
73
67
  },
74
68
  onThirdAction(): void {
75
- this.$emit('thirdEvent');
69
+ this.$emit("thirdEvent");
76
70
  },
77
71
  },
78
- })
79
- </script>
72
+ });
73
+ </script>
@@ -12,16 +12,16 @@
12
12
  <!-- eslint-enable -->
13
13
  <div class="d-flex flex-column flex-grow-1 ms-4">
14
14
  <h4 class="mb-3">
15
- {{ $t('Configuration') }}
15
+ {{ $t("Configuration") }}
16
16
  </h4>
17
- <label for="share-url-newsletter">{{ $t('Share') }}</label>
17
+ <label for="share-url-newsletter">{{ $t("Share") }}</label>
18
18
  <input
19
19
  id="share-url-newsletter"
20
20
  v-model="shareUrl"
21
21
  class="form-input mb-2"
22
22
  type="text"
23
23
  :class="{ 'border border-danger': 0 === shareUrl }"
24
- >
24
+ />
25
25
  <template v-if="podcast">
26
26
  <ClassicCheckbox
27
27
  v-model:textInit="displayEmissionName"
@@ -37,19 +37,19 @@
37
37
  <div class="d-flex align-items-center mt-2">
38
38
  <VSwatches
39
39
  v-model="color"
40
- class="c-hand me-2 mt-2"
40
+ class="c-hand me-2 mt-2"
41
41
  show-fallback
42
42
  colors="text-advanced"
43
43
  popover-to="right"
44
44
  :data-color="color"
45
45
  />
46
- <div>{{ $t('Choose main color') }}</div>
46
+ <div>{{ $t("Choose main color") }}</div>
47
47
  </div>
48
48
  <div
49
- class=" d-flex justify-content-between align-items-center mt-3 mb-2"
49
+ class="d-flex justify-content-between align-items-center mt-3 mb-2"
50
50
  >
51
51
  <h4 class="mb-0">
52
- {{ $t('HTML Code') }}
52
+ {{ $t("HTML Code") }}
53
53
  </h4>
54
54
  <input
55
55
  type="button"
@@ -57,7 +57,7 @@
57
57
  class="btn btn-primary"
58
58
  :title="$t('Copy')"
59
59
  @click="onCopyCode(newsletterHtml, afterCopy)"
60
- >
60
+ />
61
61
  </div>
62
62
  <textarea
63
63
  id="newsletter_code_textarea"
@@ -65,86 +65,78 @@
65
65
  readonly
66
66
  @click="selectAll"
67
67
  />
68
- <label
69
- for="newsletter_code_textarea"
70
- :title="$t('HTML Code')"
71
- />
68
+ <label for="newsletter_code_textarea" :title="$t('HTML Code')" />
72
69
  </div>
73
70
  </div>
74
- <Snackbar
75
- ref="snackbar"
76
- position="bottom-left"
77
- />
71
+ <SnackBar ref="snackbar" position="bottom-left" />
78
72
  </template>
79
73
  <template #footer>
80
- <button
81
- class="btn btn-primary m-1"
82
- @click="closePopup"
83
- >
84
- {{ $t('Close') }}
74
+ <button class="btn btn-primary m-1" @click="closePopup">
75
+ {{ $t("Close") }}
85
76
  </button>
86
77
  </template>
87
78
  </ClassicModal>
88
79
  </template>
89
80
 
90
81
  <script lang="ts">
91
- import ClassicModal from '../modal/ClassicModal.vue';
92
- import ClassicCheckbox from '../../form/ClassicCheckbox.vue';
93
- import Snackbar from '../../misc/Snackbar.vue';
94
- import dayjs from 'dayjs';
82
+ import ClassicModal from "../modal/ClassicModal.vue";
83
+ import ClassicCheckbox from "../../form/ClassicCheckbox.vue";
84
+ import SnackBar from "../../misc/SnackBar.vue";
85
+ import dayjs from "dayjs";
95
86
  // @ts-ignore
96
- import {VSwatches} from 'vue3-swatches';
97
- import 'vue3-swatches/dist/style.css';
87
+ import { VSwatches } from "vue3-swatches";
88
+ import "vue3-swatches/dist/style.css";
98
89
  // @ts-ignore
99
- import humanizeDuration from 'humanize-duration';
100
- import displayMethods from '../../mixins/displayMethods';
101
- import { Participant } from '@/stores/class/general/participant';
102
- import { Podcast } from '@/stores/class/general/podcast';
103
- import { state } from '../../../stores/ParamSdkStore';
104
- import { defineComponent } from 'vue';
105
- import { useAuthStore } from '@/stores/AuthStore';
106
- import { mapState } from 'pinia';
107
- import octopusApi from '@saooti/octopus-api';
108
- import { Emission } from '@/stores/class/general/emission';
109
- import { Playlist } from '@/stores/class/general/playlist';
90
+ import humanizeDuration from "humanize-duration";
91
+ import displayMethods from "../../mixins/displayMethods";
92
+ import { Participant } from "@/stores/class/general/participant";
93
+ import { Podcast } from "@/stores/class/general/podcast";
94
+ import { state } from "../../../stores/ParamSdkStore";
95
+ import { defineComponent } from "vue";
96
+ import { useAuthStore } from "@/stores/AuthStore";
97
+ import { mapState } from "pinia";
98
+ import octopusApi from "@saooti/octopus-api";
99
+ import { Emission } from "@/stores/class/general/emission";
100
+ import { Playlist } from "@/stores/class/general/playlist";
110
101
  export default defineComponent({
111
- name: 'NewsletterModal',
102
+ name: "NewsletterModal",
112
103
 
113
104
  components: {
114
- Snackbar,
105
+ SnackBar,
115
106
  VSwatches,
116
107
  ClassicCheckbox,
117
- ClassicModal
108
+ ClassicModal,
118
109
  },
119
110
 
120
111
  mixins: [displayMethods],
121
112
 
122
113
  props: {
123
- podcast: { default: undefined, type: Object as ()=> Podcast},
124
- emission: { default: undefined, type: Object as ()=> Emission},
125
- playlist: { default: undefined, type: Object as ()=>Playlist},
114
+ podcast: { default: undefined, type: Object as () => Podcast },
115
+ emission: { default: undefined, type: Object as () => Emission },
116
+ playlist: { default: undefined, type: Object as () => Playlist },
126
117
  },
127
118
 
128
- emits: ['close'],
119
+ emits: ["close"],
129
120
 
130
121
  data() {
131
122
  return {
132
123
  displayParticipantsNames: true as boolean,
133
124
  displayEmissionName: true as boolean,
134
- color: '#40a372' as string,
125
+ color: "#40a372" as string,
135
126
  shareUrl: window.location.href,
136
-
137
127
  };
138
128
  },
139
129
 
140
130
  computed: {
141
- ...mapState(useAuthStore, ['authOrganisation']),
131
+ ...mapState(useAuthStore, ["authOrganisation"]),
142
132
  date(): string {
143
- if(!this.podcast || 1970 === dayjs(this.podcast.pubDate).year()){return '';}
144
- return dayjs(this.podcast.pubDate).format('D MMMM YYYY, HH[h]mm');
133
+ if (!this.podcast || 1970 === dayjs(this.podcast.pubDate).year()) {
134
+ return "";
135
+ }
136
+ return dayjs(this.podcast.pubDate).format("D MMMM YYYY, HH[h]mm");
145
137
  },
146
138
  duration(): string {
147
- if (!this.podcast || this.podcast.duration <= 1) return '';
139
+ if (!this.podcast || this.podcast.duration <= 1) return "";
148
140
  if (this.podcast.duration > 600000) {
149
141
  return humanizeDuration(this.podcast.duration, {
150
142
  language: this.$i18n.locale,
@@ -159,91 +151,110 @@ export default defineComponent({
159
151
  });
160
152
  },
161
153
  emissionName(): string {
162
- if (!this.displayEmissionName || !this.podcast){return ''}
163
- return (
164
- `<tr><td colspan="2" style="font-size: 16px;line-height:24px;font-weight: bold;">${this.podcast.emission.name}</td></tr>`
165
- );
154
+ if (!this.displayEmissionName || !this.podcast) {
155
+ return "";
156
+ }
157
+ return `<tr><td colspan="2" style="font-size: 16px;line-height:24px;font-weight: bold;">${this.podcast.emission.name}</td></tr>`;
166
158
  },
167
- articleHtml(): string{
168
- if (!this.podcast?.article ||0 === this.podcast.article?.length){return ''}
169
- return (`<a href="${this.podcast.article}" title="${this.$t('See associated article')}">
159
+ articleHtml(): string {
160
+ if (!this.podcast?.article || 0 === this.podcast.article?.length) {
161
+ return "";
162
+ }
163
+ return `<a href="${this.podcast.article}" title="${this.$t(
164
+ "See associated article",
165
+ )}">
170
166
  <img width="44" height="44" style="display: inline-block;vertical-align: middle; margin-right:3px" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABmJLR0QA/wD/AP+gvaeTAAAA6UlEQVRIie3WPUpEMRTF8R9+4QpEBGttrcdeV+E2pp3KdYi7GBRttNVCZgOCjSuQ+UCLJzLIe7l3HpFpPJAuOf+T5F4SYh3jFZ/JMVlevJUwv8c+HvEQzD/FIBEaHOFtKdkosWb0PfdHGwXzOxxk03SpDVDNvA1Q1bwNcFMwn/cB/K6iQ+3VMsVVDQDcylVMSl1VBOea5FFjTXHWZVJqtCdcYjcI+YHnPoB3FY6qdERVVNrBHi6wGXgscK3Z8UqAE80dbAeAGV4wXhUwxk5gHurP72CtgP9Gw5oabYBhT7/wwZ/If09S35Yv52lVAXwyqt0AAAAASUVORK5CYII=">
171
167
  </a>
172
- <a style="color: #000;text-decoration: none;" href="${this.podcast.article}">${this.$t('See associated article')}</a>`);
168
+ <a style="color: #000;text-decoration: none;" href="${
169
+ this.podcast.article
170
+ }">${this.$t("See associated article")}</a>`;
173
171
  },
174
172
  participantsName(): string {
175
- if (!this.displayParticipantsNames || !this.podcast || !this.podcast.animators) return '';
176
- const text = [''];
173
+ if (
174
+ !this.displayParticipantsNames ||
175
+ !this.podcast ||
176
+ !this.podcast.animators
177
+ )
178
+ return "";
179
+ const text = [""];
177
180
  this.podcast.animators.forEach((element: Participant) => {
178
181
  text.push(
179
182
  `<table width='100%' style="width:100%;background: #f3f3f3;font-family: Arial, sans-serif;font-size: 12px;line-height: 20px;border-bottom-left-radius: 1.5em;border-bottom-right-radius: 1.5em;">
180
183
  <tr>
181
184
  <td width="90" rowspan="2" style="text-align:left; vertical-align: top; width: 90px;padding:0 15px 15px 10px">
182
- <img width="72" style="width: 62px;height: 62px;border-radius: 50%;background-color: #fff;" src="${element.imageUrl}" alt="${this.$t('Animator image')}">
185
+ <img width="72" style="width: 62px;height: 62px;border-radius: 50%;background-color: #fff;" src="${
186
+ element.imageUrl
187
+ }" alt="${this.$t("Animator image")}">
183
188
  </td>
184
- <td height="1" style="height: 1px;text-align:left; font-size: 14px;line-height:20px;vertical-align: top;font-weight: bold;padding-top: 23px;">${this.getName(element)}</td>
185
- </tr>`
189
+ <td height="1" style="height: 1px;text-align:left; font-size: 14px;line-height:20px;vertical-align: top;font-weight: bold;padding-top: 23px;">${this.getName(
190
+ element,
191
+ )}</td>
192
+ </tr>`,
186
193
  );
187
194
  if (element.description) {
188
195
  text.push(
189
196
  `<tr><td style="height: 100%;text-align:justify;padding-bottom: 15px;padding-right: 15px; font-size: 12px;line-height:16px;vertical-align: top">
190
- ${element.description}</td></tr>`
197
+ ${element.description}</td></tr>`,
191
198
  );
192
199
  }
193
200
  text.push(`</table>`);
194
201
  });
195
- return text.join('');
202
+ return text.join("");
196
203
  },
197
- imageUrl():string{
198
- if(this.podcast){
199
- return `${this.podcast.imageUrl}" alt="${this.$t('Podcast image')}`;
204
+ imageUrl(): string {
205
+ if (this.podcast) {
206
+ return `${this.podcast.imageUrl}" alt="${this.$t("Podcast image")}`;
200
207
  }
201
- if(this.emission){
202
- return `${this.emission.imageUrl}" alt="${this.$t('Emission image')}`;
208
+ if (this.emission) {
209
+ return `${this.emission.imageUrl}" alt="${this.$t("Emission image")}`;
203
210
  }
204
- if(this.playlist){
205
- return `${this.playlist.imageUrl}" alt="${this.$t('Playlist image')}`;
211
+ if (this.playlist) {
212
+ return `${this.playlist.imageUrl}" alt="${this.$t("Playlist image")}`;
206
213
  }
207
- return '';
214
+ return "";
208
215
  },
209
- title():string{
210
- if(this.podcast){
216
+ title(): string {
217
+ if (this.podcast) {
211
218
  return this.podcast.title;
212
219
  }
213
- if(this.emission){
220
+ if (this.emission) {
214
221
  return this.emission.name;
215
222
  }
216
- if(this.playlist){
223
+ if (this.playlist) {
217
224
  return this.playlist.title;
218
225
  }
219
- return '';
226
+ return "";
220
227
  },
221
- description():string{
228
+ description(): string {
222
229
  if (this.podcast && this.podcast.description) {
223
230
  return `<tr><td colspan="2" valign="top" style="line-height:24px;font-size: 14px;max-width: 500px;">${this.podcast.description}</td></tr>`;
224
231
  }
225
- if(this.emission && this.emission.description){
232
+ if (this.emission && this.emission.description) {
226
233
  return `<tr><td colspan="2" valign="top" style="line-height:24px;font-size: 14px;max-width: 500px;">${this.emission.description}</td></tr>`;
227
234
  }
228
- if(this.playlist && this.playlist.description){
235
+ if (this.playlist && this.playlist.description) {
229
236
  return `<tr><td colspan="2" valign="top" style="line-height:24px;font-size: 14px;max-width: 500px;">${this.playlist.description}</td></tr>`;
230
237
  }
231
- return '';
238
+ return "";
232
239
  },
233
- shareText():string{
240
+ shareText(): string {
234
241
  if (this.podcast) {
235
- return this.$t('Listen this episode');
242
+ return this.$t("Listen this episode");
236
243
  }
237
244
  if (this.emission) {
238
- return this.$t('All podcast emission button');
245
+ return this.$t("All podcast emission button");
239
246
  }
240
- return this.$t('Podcasts in the playlist');
247
+ return this.$t("Podcasts in the playlist");
241
248
  },
242
- durationPodcast():string{
243
- if(!this.podcast){return ''}
249
+ durationPodcast(): string {
250
+ if (!this.podcast) {
251
+ return "";
252
+ }
244
253
  return `<td colspan="2" style="height: 1px;color: #666;font-size: 12px;line-height: 16px;padding-top:15px;">
245
254
  <span>${this.date}</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
246
- <span style="padding: 0 10px">${this.$t('Duration', { duration: this.duration })}</span>
255
+ <span style="padding: 0 10px">${this.$t("Duration", {
256
+ duration: this.duration,
257
+ })}</span>
247
258
  </td>`;
248
259
  },
249
260
  newsletterHtml(): string {
@@ -260,76 +271,91 @@ export default defineComponent({
260
271
  ${this.title}
261
272
  </td>
262
273
  </tr>
263
- ${this.emissionName}${this.description}`
274
+ ${this.emissionName}${this.description}`,
264
275
  ];
265
276
  html.push(
266
- `</table>
277
+ `</table>
267
278
  <div style="font-family: Arial, sans-serif;font-size: 12px;line-height: 20px;background: #f3f3f3;vertical-align: middle;padding: 15px 10px;display: flex; align-items:center; flex-wrap:wrap">
268
279
  <a href="${this.shareUrl}">
269
280
  <img width="44" height="44" style="display: inline-block;vertical-align: middle" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAABmJLR0QA/wD/AP+gvaeTAAAAxElEQVRIie3WMWpCURBG4Q8FSRrtbC2SPhvICmzchVuwtXQLbsE2pVUIkjqQHVgqNmIj6EvxGHhFQAIvcxt/OPVhhrlzh3sKZ4MvTLLFVYNPvJYQB294LiGucMYSw2xxcMQcj9niYIsputni4BvjEuJgjZcS4goXrDDKFgcnLDDIFgd7zNDLFgfvTUHnL23ISJuV7iS3Ooarn1VxkeeUvkDSV2b6J3FQT+pDW8Jb4vRD4Kqe1Kf/Ev4mTj32PhQ6b+9pPT+XHgysHrPM6QAAAABJRU5ErkJggg=="/>
270
281
  </a>
271
282
  <a style="color: #000;text-decoration: none; margin-right:8px" href="${this.shareUrl}">${this.shareText}</a>
272
283
  ${this.articleHtml}
273
- </div>${this.participantsName}`
284
+ </div>${this.participantsName}`,
274
285
  );
275
- return html.join('');
286
+ return html.join("");
276
287
  },
277
288
  },
278
- created(){
289
+ created() {
279
290
  this.initData();
280
291
  },
281
292
  methods: {
282
293
  closePopup(): void {
283
- this.$emit('close');
294
+ this.$emit("close");
284
295
  },
285
296
  getName(person: Participant): string {
286
- return (`${person.firstName??''} ${person.lastName??''}`).trim();
297
+ return `${person.firstName ?? ""} ${person.lastName ?? ""}`.trim();
287
298
  },
288
299
  selectAll(element: Event): void {
289
300
  const target = element.target;
290
- if(null!==target){
301
+ if (null !== target) {
291
302
  (target as HTMLInputElement).focus();
292
303
  (target as HTMLInputElement).select();
293
304
  }
294
305
  },
295
- afterCopy(): void{
296
- (this.$refs.snackbar as InstanceType<typeof Snackbar>).open(this.$t('Data in clipboard'));
306
+ afterCopy(): void {
307
+ (this.$refs.snackbar as InstanceType<typeof SnackBar>).open(
308
+ this.$t("Data in clipboard"),
309
+ );
297
310
  },
298
311
  async initData(): Promise<void> {
299
312
  let attributes;
300
- if(""!==this.authOrganisation.id && this.authOrganisation.attributes && Object.keys(this.authOrganisation.attributes).length > 1){
313
+ if (
314
+ "" !== this.authOrganisation.id &&
315
+ this.authOrganisation.attributes &&
316
+ Object.keys(this.authOrganisation.attributes).length > 1
317
+ ) {
301
318
  attributes = this.authOrganisation.attributes;
302
- }else{
303
- attributes = await octopusApi.fetchData<{[key:string]:string}>(0, 'organisation/attributes/'+state.generalParameters.organisationId);
319
+ } else {
320
+ attributes = await octopusApi.fetchData<{ [key: string]: string }>(
321
+ 0,
322
+ "organisation/attributes/" + state.generalParameters.organisationId,
323
+ );
304
324
  }
305
- if (Object.prototype.hasOwnProperty.call(attributes,'podcastmakerUrl')) {
306
- this.shareUrl = attributes.podcastmakerUrl + window.location.pathname+window.location.search;
325
+ if (Object.prototype.hasOwnProperty.call(attributes, "podcastmakerUrl")) {
326
+ this.shareUrl =
327
+ attributes.podcastmakerUrl +
328
+ window.location.pathname +
329
+ window.location.search;
307
330
  }
308
- if(state.generalParameters.podcastmaker && state.generalParameters.podcastmakerColor){
331
+ if (
332
+ state.generalParameters.podcastmaker &&
333
+ state.generalParameters.podcastmakerColor
334
+ ) {
309
335
  this.color = state.generalParameters.podcastmakerColor;
310
336
  return;
311
337
  }
312
- if (Object.prototype.hasOwnProperty.call(attributes,'COLOR')) {
313
- this.color = (attributes.COLOR as string);
338
+ if (Object.prototype.hasOwnProperty.call(attributes, "COLOR")) {
339
+ this.color = attributes.COLOR as string;
314
340
  }
315
341
  },
316
342
  },
317
- })
343
+ });
318
344
  </script>
319
345
 
320
346
  <style lang="scss">
321
- .octopus-app{
322
- #newsletter-modal{
347
+ .octopus-app {
348
+ #newsletter-modal {
323
349
  textarea {
324
350
  border: 2px solid #eee;
325
351
  height: 200px;
326
352
  padding: 1em;
327
353
  }
328
- .octopus-modal-dialog{
354
+ .octopus-modal-dialog {
329
355
  max-width: 80%;
330
356
  max-height: calc(100% - 3.5rem) !important;
331
357
  }
332
- .octopus-modal-content{
358
+ .octopus-modal-content {
333
359
  max-height: calc(100vh - 100px) !important;
334
360
  }
335
361
  }
@@ -8,34 +8,31 @@
8
8
  <QrCode :url="urlPage" />
9
9
  </template>
10
10
  <template #footer>
11
- <button
12
- class="btn btn-primary m-1"
13
- @click="closePopup"
14
- >
15
- {{ $t('Close') }}
11
+ <button class="btn btn-primary m-1" @click="closePopup">
12
+ {{ $t("Close") }}
16
13
  </button>
17
14
  </template>
18
15
  </ClassicModal>
19
16
  </template>
20
17
 
21
18
  <script lang="ts">
22
- import ClassicModal from '../modal/ClassicModal.vue';
23
- import QrCode from '../../display/sharing/QrCode.vue';
24
- import { defineComponent } from 'vue'
19
+ import ClassicModal from "../modal/ClassicModal.vue";
20
+ import QrCode from "../../display/sharing/QrCode.vue";
21
+ import { defineComponent } from "vue";
25
22
  export default defineComponent({
26
- name: 'QrCodeModal',
23
+ name: "QrCodeModal",
27
24
  components: {
28
25
  QrCode,
29
- ClassicModal
26
+ ClassicModal,
30
27
  },
31
28
  props: {
32
- urlPage: { default: undefined, type: String},
29
+ urlPage: { default: undefined, type: String },
33
30
  },
34
- emits: ['close'],
35
- methods:{
31
+ emits: ["close"],
32
+ methods: {
36
33
  closePopup(): void {
37
- this.$emit('close');
34
+ this.$emit("close");
38
35
  },
39
- }
40
- })
41
- </script>
36
+ },
37
+ });
38
+ </script>