@saooti/octopus-sdk 40.2.19 → 41.0.0

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 (214) hide show
  1. package/index.ts +2 -1
  2. package/package.json +4 -3
  3. package/src/App.vue +71 -95
  4. package/src/components/composable/player/usePlayerLive.ts +13 -4
  5. package/src/components/composable/player/usePlayerLogic.ts +6 -6
  6. package/src/components/composable/player/usePlayerVast.ts +7 -7
  7. package/src/components/composable/podcasts/usePodcastView.ts +3 -3
  8. package/src/components/composable/route/useAdvancedParamInit.ts +1 -1
  9. package/src/components/composable/route/useRouteUpdateParams.ts +4 -4
  10. package/src/components/composable/route/useSimplePageParam.ts +15 -8
  11. package/src/components/composable/useInit.ts +2 -2
  12. package/src/components/composable/useMetaTitleWatch.ts +2 -2
  13. package/src/components/display/accessibility/AccessibilityModal.vue +56 -68
  14. package/src/components/display/categories/CategoryChooser.vue +144 -145
  15. package/src/components/display/categories/CategoryFilter.vue +172 -198
  16. package/src/components/display/categories/CategoryList.vue +122 -147
  17. package/src/components/display/comments/CommentInput.vue +100 -122
  18. package/src/components/display/comments/CommentList.vue +169 -191
  19. package/src/components/display/comments/CommentName.vue +35 -45
  20. package/src/components/display/comments/CommentParentInfo.vue +28 -34
  21. package/src/components/display/comments/CommentPlayer.vue +38 -50
  22. package/src/components/display/comments/CommentSection.vue +85 -103
  23. package/src/components/display/comments/item/CommentBasicView.vue +48 -61
  24. package/src/components/display/comments/item/CommentItem.vue +104 -115
  25. package/src/components/display/comments/item/CommentMoreActions.vue +174 -189
  26. package/src/components/display/comments/item/CommentMoreActionsAdmin.vue +1 -3
  27. package/src/components/display/comments/like/LikeButton.vue +36 -41
  28. package/src/components/display/comments/like/LikeSection.vue +128 -136
  29. package/src/components/display/comments/modal/CheckIdentityModal.vue +35 -40
  30. package/src/components/display/comments/modal/EditCommentModal.vue +72 -78
  31. package/src/components/display/comments/modal/RecaptchaModal.vue +58 -63
  32. package/src/components/display/comments/modal/ReportAbuseModal.vue +59 -66
  33. package/src/components/display/edit/EditBox.vue +9 -8
  34. package/src/components/display/edit/EditBoxRadio.vue +1 -5
  35. package/src/components/display/emission/EmissionInlineList.vue +82 -97
  36. package/src/components/display/emission/EmissionItem.vue +57 -69
  37. package/src/components/display/emission/EmissionList.vue +189 -218
  38. package/src/components/display/emission/EmissionPlayerItem.vue +47 -64
  39. package/src/components/display/emission/EmissionPresentationItem.vue +44 -54
  40. package/src/components/display/emission/EmissionPresentationList.vue +51 -61
  41. package/src/components/display/filter/AdvancedSearch.vue +151 -176
  42. package/src/components/display/filter/CategorySearchFilter.vue +43 -46
  43. package/src/components/display/filter/DateFilter.vue +76 -91
  44. package/src/components/display/filter/MonetizableFilter.vue +27 -30
  45. package/src/components/display/filter/ProductorSearch.vue +87 -90
  46. package/src/components/display/filter/RubriqueChoice.vue +58 -63
  47. package/src/components/display/filter/RubriqueFilter.vue +154 -169
  48. package/src/components/display/filter/SearchOrder.vue +35 -35
  49. package/src/components/display/list/ListPaginate.vue +72 -93
  50. package/src/components/display/list/PaginateParams.vue +36 -40
  51. package/src/components/display/list/PaginateSection.vue +113 -124
  52. package/src/components/display/list/SwiperList.vue +97 -109
  53. package/src/components/display/live/CountDown.vue +15 -9
  54. package/src/components/display/live/CountdownOctopus.vue +16 -10
  55. package/src/components/display/live/LiveHorizontalList.vue +95 -103
  56. package/src/components/display/live/LiveItem.vue +64 -73
  57. package/src/components/display/live/LiveList.vue +125 -137
  58. package/src/components/display/live/RadioCurrently.vue +66 -73
  59. package/src/components/display/live/RadioImage.vue +39 -50
  60. package/src/components/display/live/RadioItem.vue +9 -14
  61. package/src/components/display/live/RadioList.vue +39 -53
  62. package/src/components/display/live/RadioPlanning.vue +210 -222
  63. package/src/components/display/organisation/OrganisationChooser.vue +116 -122
  64. package/src/components/display/organisation/OrganisationChooserLight.vue +44 -52
  65. package/src/components/display/participant/ParticipantInlineList.vue +42 -58
  66. package/src/components/display/participant/ParticipantItem.vue +66 -74
  67. package/src/components/display/participant/ParticipantList.vue +116 -141
  68. package/src/components/display/playlist/PlaylistItem.vue +33 -46
  69. package/src/components/display/playlist/PlaylistList.vue +115 -144
  70. package/src/components/display/playlist/PodcastList.vue +90 -103
  71. package/src/components/display/playlist/PodcastPlaylistInlineList.vue +58 -70
  72. package/src/components/display/podcastmaker/PodcastmakerHeader.vue +21 -22
  73. package/src/components/display/podcasts/AnimatorsItem.vue +15 -16
  74. package/src/components/display/podcasts/DownloadPodcastButton.vue +21 -29
  75. package/src/components/display/podcasts/ParticipantDescription.vue +22 -24
  76. package/src/components/display/podcasts/PodcastFilterList.vue +62 -56
  77. package/src/components/display/podcasts/PodcastImage.vue +96 -99
  78. package/src/components/display/podcasts/PodcastInlineList.vue +30 -28
  79. package/src/components/display/podcasts/PodcastInlineListTemplate.vue +107 -114
  80. package/src/components/display/podcasts/PodcastIsPlaying.vue +4 -12
  81. package/src/components/display/podcasts/PodcastItem.vue +48 -63
  82. package/src/components/display/podcasts/PodcastItemInfo.vue +19 -35
  83. package/src/components/display/podcasts/PodcastList.vue +182 -206
  84. package/src/components/display/podcasts/PodcastModuleBox.vue +100 -137
  85. package/src/components/display/podcasts/PodcastPlannedSpinner.vue +4 -6
  86. package/src/components/display/podcasts/PodcastPlayBar.vue +50 -61
  87. package/src/components/display/podcasts/PodcastPlayBasicButton.vue +38 -41
  88. package/src/components/display/podcasts/PodcastPlayButton.vue +164 -175
  89. package/src/components/display/podcasts/PodcastRawTranscript.vue +69 -80
  90. package/src/components/display/podcasts/PodcastRubriqueList.vue +35 -38
  91. package/src/components/display/podcasts/PodcastSwiperList.vue +100 -110
  92. package/src/components/display/podcasts/TagList.vue +48 -50
  93. package/src/components/display/podcasts/VideoModuleBox.vue +13 -24
  94. package/src/components/display/rubriques/RubriqueChooser.vue +135 -140
  95. package/src/components/display/rubriques/RubriqueList.vue +140 -160
  96. package/src/components/display/sharing/ChooseEpisodesNumber.vue +34 -33
  97. package/src/components/display/sharing/FormatSwitch.vue +16 -11
  98. package/src/components/display/sharing/PlayerAnonymousModal.vue +24 -27
  99. package/src/components/display/sharing/PlayerCommonParameters.vue +20 -13
  100. package/src/components/display/sharing/PlayerParameters.vue +69 -71
  101. package/src/components/display/sharing/QrCode.vue +55 -67
  102. package/src/components/display/sharing/ShareAnonymous.vue +160 -178
  103. package/src/components/display/sharing/ShareDistribution.vue +103 -117
  104. package/src/components/display/sharing/ShareNewsletter.vue +154 -161
  105. package/src/components/display/sharing/SharePlayer.vue +273 -295
  106. package/src/components/display/sharing/SharePlayerColors.vue +25 -16
  107. package/src/components/display/sharing/SharePlayerRadio.vue +61 -69
  108. package/src/components/display/sharing/SharePlayerTypes.vue +176 -176
  109. package/src/components/display/sharing/ShareSocialsButtons.vue +63 -75
  110. package/src/components/display/sharing/SubscribeButtons.vue +184 -207
  111. package/src/components/display/studio/RecordingItemButton.vue +1 -4
  112. package/src/components/form/ClassicCheckbox.vue +26 -30
  113. package/src/components/form/ClassicContentEditable.vue +37 -33
  114. package/src/components/form/ClassicCopyButton.vue +40 -44
  115. package/src/components/form/ClassicDatePicker.vue +114 -114
  116. package/src/components/form/ClassicEmojiPicker.vue +20 -28
  117. package/src/components/form/ClassicInputText.vue +116 -120
  118. package/src/components/form/ClassicLoading.vue +7 -12
  119. package/src/components/form/ClassicMultiselect.vue +115 -117
  120. package/src/components/form/ClassicRadio.vue +21 -16
  121. package/src/components/form/ClassicRadioLabel.vue +23 -22
  122. package/src/components/form/ClassicSearch.vue +24 -19
  123. package/src/components/form/ClassicSelect.vue +47 -38
  124. package/src/components/form/ClassicWysiwyg.vue +116 -123
  125. package/src/components/icons/AmazonMusicIcon.vue +7 -10
  126. package/src/components/icons/ApplePodcastIcon.vue +7 -11
  127. package/src/components/icons/BlueSkyIcon.vue +8 -11
  128. package/src/components/icons/DeezerIcon.vue +8 -11
  129. package/src/components/icons/EditFtpIcon.vue +8 -11
  130. package/src/components/icons/IHeartIcon.vue +8 -11
  131. package/src/components/icons/PlayVideoIcon.vue +7 -10
  132. package/src/components/icons/PlayerFmIcon.vue +7 -10
  133. package/src/components/icons/PocketCastIcon.vue +8 -11
  134. package/src/components/icons/PodcastAddictIcon.vue +7 -10
  135. package/src/components/icons/RadiolineIcon.vue +8 -11
  136. package/src/components/icons/TuninIcon.vue +8 -11
  137. package/src/components/icons/XIcon.vue +7 -10
  138. package/src/components/misc/AcpmImage.vue +6 -7
  139. package/src/components/misc/ClassicAccordion.vue +26 -31
  140. package/src/components/misc/ClassicLazy.vue +86 -90
  141. package/src/components/misc/ClassicNav.vue +16 -20
  142. package/src/components/misc/ClassicPopover.vue +271 -282
  143. package/src/components/misc/ClassicSpinner.vue +5 -27
  144. package/src/components/misc/ErrorMessage.vue +11 -12
  145. package/src/components/misc/FooterGarSection.vue +33 -41
  146. package/src/components/misc/FooterSection.vue +94 -131
  147. package/src/components/misc/HomeDropdown.vue +83 -105
  148. package/src/components/misc/MobileMenu.vue +101 -111
  149. package/src/components/misc/ProgressBar.vue +53 -62
  150. package/src/components/misc/TopBar.vue +98 -120
  151. package/src/components/misc/TopBarMainContent.vue +114 -133
  152. package/src/components/misc/modal/ClassicModal.vue +40 -33
  153. package/src/components/misc/modal/ClassicModalInBody.vue +34 -28
  154. package/src/components/misc/modal/ClipboardModal.vue +27 -30
  155. package/src/components/misc/modal/ContractPreviewModal.vue +64 -62
  156. package/src/components/misc/modal/MessageModal.vue +50 -47
  157. package/src/components/misc/modal/NewsletterModal.vue +30 -31
  158. package/src/components/misc/modal/QrCodeModal.vue +21 -21
  159. package/src/components/misc/modal/ShareModalPlayer.vue +43 -52
  160. package/src/components/misc/player/PlayerCompact.vue +6 -4
  161. package/src/components/misc/player/PlayerComponent.vue +8 -9
  162. package/src/components/misc/player/PlayerLarge.vue +9 -8
  163. package/src/components/misc/player/ads/AdsProgressBar.vue +8 -11
  164. package/src/components/misc/player/ads/AdsSkipButton.vue +24 -30
  165. package/src/components/misc/player/chaptering/ChapteringModal.vue +44 -54
  166. package/src/components/misc/player/chaptering/PlayerChaptering.vue +50 -62
  167. package/src/components/misc/player/elements/PlayerImage.vue +51 -57
  168. package/src/components/misc/player/elements/PlayerPlayButton.vue +81 -92
  169. package/src/components/misc/player/elements/PlayerSpeedButton.vue +23 -27
  170. package/src/components/misc/player/elements/PlayerTitle.vue +85 -111
  171. package/src/components/misc/player/progressbar/PlayerProgressBar.vue +18 -29
  172. package/src/components/misc/player/progressbar/PodcastProgressBar.vue +45 -56
  173. package/src/components/misc/player/radio/RadioHistory.vue +80 -99
  174. package/src/components/misc/player/radio/RadioProgressBar.vue +43 -54
  175. package/src/components/misc/player/video/PlayerVideo.vue +27 -40
  176. package/src/components/misc/player/video/PlayerVideoDigiteka.vue +32 -37
  177. package/src/components/misc/player/video/PlayerVideoHls.vue +199 -198
  178. package/src/components/misc/player/video/PlayerYoutubeEmbed.vue +10 -12
  179. package/src/components/pages/CategoryPage.vue +28 -33
  180. package/src/components/pages/EmissionPage.vue +113 -132
  181. package/src/components/pages/EmissionsPage.vue +2 -0
  182. package/src/components/pages/Error403Page.vue +21 -20
  183. package/src/components/pages/HomePage.vue +91 -100
  184. package/src/components/pages/LivesPage.vue +35 -37
  185. package/src/components/pages/MapPage.vue +209 -241
  186. package/src/components/pages/PageLogout.vue +8 -11
  187. package/src/components/pages/PageNotFound.vue +9 -5
  188. package/src/components/pages/ParticipantPage.vue +96 -110
  189. package/src/components/pages/ParticipantsPage.vue +3 -0
  190. package/src/components/pages/PlaylistPage.vue +112 -117
  191. package/src/components/pages/PlaylistsPage.vue +9 -2
  192. package/src/components/pages/PodcastPage.vue +224 -238
  193. package/src/components/pages/PodcastsPage.vue +9 -2
  194. package/src/components/pages/RadioPage.vue +56 -70
  195. package/src/components/pages/RubriquePage.vue +7 -3
  196. package/src/components/pages/SearchPage.vue +31 -36
  197. package/src/components/pages/TagPage.vue +11 -9
  198. package/src/components/pages/VideoPage.vue +14 -11
  199. package/src/helper/displayHelper.ts +1 -1
  200. package/src/helper/loadScript.ts +4 -4
  201. package/src/i18n.ts +2 -2
  202. package/src/main.ts +1 -1
  203. package/src/router/router.ts +17 -4
  204. package/src/stores/AuthStore.ts +12 -12
  205. package/src/stores/FilterStore.ts +1 -1
  206. package/src/stores/VastStore.ts +2 -2
  207. package/src/stores/class/general/player.ts +1 -0
  208. package/public/css/fonts/icomoon.eot +0 -0
  209. package/public/css/fonts/icomoon.svg +0 -113
  210. package/public/css/fonts/icomoon.ttf +0 -0
  211. package/public/css/fonts/icomoon.woff +0 -0
  212. package/public/css/fonts/icomoon.woff2 +0 -0
  213. package/public/css/fonts/style.css +0 -352
  214. package/sonarqube-scanner.js +0 -10
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <div class="d-flex align-items-center flex-wrap">
3
- <span class="flex-shrink-0">{{ $t("Show") }}</span>
3
+ <span class="flex-shrink-0">{{ t("Show") }}</span>
4
4
  <input
5
5
  id="number-input"
6
6
  v-model="internNumber"
@@ -8,44 +8,45 @@
8
8
  min="1"
9
9
  max="50"
10
10
  class="input-share-player border text-center m-2"
11
- :title="$t('Number of player podcasts')"
11
+ :title="t('Number of player podcasts')"
12
12
  />
13
- <span class="flex-shrink-0">{{ $t("Last podcasts") }}</span>
13
+ <span class="flex-shrink-0">{{ t("Last podcasts") }}</span>
14
14
  </div>
15
15
  </template>
16
16
 
17
- <script lang="ts">
18
- import { defineComponent } from "vue";
19
- export default defineComponent({
20
- props: {
21
- episodesNumber: { default: 3, type: Number },
22
- },
23
- emits: [
24
- "updateNumber",
25
- ],
26
-
27
- data() {
28
- return {
29
- internNumber: 3 as number
30
- };
31
- },
32
- watch:{
33
- internNumber(){
34
- if (this.internNumber < 1) {
35
- this.$emit("updateNumber", 1);
36
- }else if(this.internNumber > 50){
37
- this.$emit("updateNumber", 50);
38
- }else{
39
- this.$emit("updateNumber", this.internNumber);
40
- }
41
- }
42
- },
43
-
44
- created(){
45
- this.internNumber = this.episodesNumber;
46
- }
17
+ <script setup lang="ts">
18
+ import { onBeforeMount, ref, watch } from "vue";
19
+ import { useI18n } from "vue-i18n";
47
20
 
21
+ //Props
22
+ const props = defineProps({
23
+ episodesNumber: { default: 3, type: Number },
48
24
  });
25
+
26
+ //Emits
27
+ const emit = defineEmits(["updateNumber"]);
28
+
29
+ //Data
30
+ const internNumber = ref(3);
31
+
32
+ //Composables
33
+ const { t } = useI18n();
34
+
35
+ //Watch
36
+ watch(internNumber, () => {
37
+ if (internNumber.value < 1) {
38
+ emit("updateNumber", 1);
39
+ }else if(internNumber.value > 50){
40
+ emit("updateNumber", 50);
41
+ }else{
42
+ emit("updateNumber", internNumber.value);
43
+ }
44
+ });
45
+
46
+ onBeforeMount(()=>{
47
+ internNumber.value = props.episodesNumber;
48
+ })
49
+
49
50
  </script>
50
51
 
51
52
  <style lang="scss">
@@ -5,23 +5,28 @@
5
5
  :checked="isSvg"
6
6
  class="format-switch-checkbox"
7
7
  type="checkbox"
8
- @input="$emit('update:isSvg', !isSvg)"/>
8
+ @input="changeIsSvg"/>
9
9
  <label class="format-switch-label" for="format-switch-checkbox">
10
10
  <span class="format-switch-label-span">SVG</span>
11
11
  </label>
12
12
  </div>
13
13
  </template>
14
14
 
15
- <script lang="ts">
16
- import { defineComponent } from 'vue';
17
- export default defineComponent({
18
- name: "FormatSwitch",
19
- props:{
20
- isSvg: { default: true, type: Boolean },
21
- },
22
- emits: ['update:isSvg'],
23
- });
24
- </script>
15
+ <script setup lang="ts">
16
+
17
+ //Props
18
+ const props = defineProps({
19
+ isSvg: { default: true, type: Boolean },
20
+ })
21
+
22
+ //Emits
23
+ const emit = defineEmits(['update:isSvg']);
24
+
25
+ //Methods
26
+ function changeIsSvg(){
27
+ emit('update:isSvg', !props.isSvg)
28
+ }
29
+ </script>
25
30
  <style lang="scss">
26
31
  .octopus-app {
27
32
 
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <ClassicModal
3
3
  id-modal="player-anonymous-modal"
4
- :title-modal="$t('Share the player')"
4
+ :title-modal="t('Share the player')"
5
5
  @close="closePopup"
6
6
  >
7
7
  <template #body>
@@ -10,45 +10,42 @@
10
10
  :emission="emission"
11
11
  :exclusive="exclusive"
12
12
  :not-exclusive="notExclusive"
13
- :organisation-id="authOrgaId"
13
+ :organisation-id="authStore.authOrgaId"
14
14
  />
15
15
  </template>
16
16
  <template #footer>
17
17
  <button class="btn btn-primary m-1" @click="closePopup">
18
- {{ $t("Close") }}
18
+ {{ t("Close") }}
19
19
  </button>
20
20
  </template>
21
21
  </ClassicModal>
22
22
  </template>
23
23
 
24
- <script lang="ts">
24
+ <script setup lang="ts">
25
25
  import { Podcast } from "@/stores/class/general/podcast";
26
26
  import ClassicModal from "../../misc/modal/ClassicModal.vue";
27
27
  import SharePlayer from "./SharePlayer.vue";
28
28
  import { useAuthStore } from "../../../stores/AuthStore";
29
- import { defineComponent } from "vue";
30
29
  import { Emission } from "@/stores/class/general/emission";
31
- import { mapState } from "pinia";
32
- export default defineComponent({
33
- name: "PlayerAnonymousModal",
34
- components: {
35
- ClassicModal,
36
- SharePlayer
37
- },
38
- props: {
39
- podcast: { default: undefined, type: Object as () => Podcast },
40
- emission: { default: undefined, type: Object as () => Emission },
41
- exclusive: { default: false, type: Boolean },
42
- notExclusive: { default: true, type: Boolean },
43
- },
44
- emits: ["close"],
45
- computed:{
46
- ...mapState(useAuthStore, ["authOrgaId"]),
47
- },
48
- methods: {
49
- closePopup(): void {
50
- this.$emit("close");
51
- },
52
- },
30
+ import { useI18n } from "vue-i18n";
31
+
32
+ //Props
33
+ defineProps({
34
+ podcast: { default: undefined, type: Object as () => Podcast },
35
+ emission: { default: undefined, type: Object as () => Emission },
36
+ exclusive: { default: false, type: Boolean },
37
+ notExclusive: { default: true, type: Boolean },
53
38
  });
39
+
40
+ //Emits
41
+ const emit = defineEmits(["close"]);
42
+
43
+ //Composables
44
+ const { t } = useI18n();
45
+ const authStore = useAuthStore();
46
+
47
+ //Methods
48
+ function closePopup(): void {
49
+ emit("close");
50
+ }
54
51
  </script>
@@ -2,21 +2,28 @@
2
2
  <ClassicCheckbox
3
3
  :text-init="insertCode"
4
4
  id-checkbox="insert-code-checkbox"
5
- :label="$t('Insert custom code')"
6
- @update:text-init="$emit('update:insertCode', $event)"
5
+ :label="t('Insert custom code')"
6
+ @update:text-init="updateInsertCode($event)"
7
7
  />
8
8
  </template>
9
9
 
10
- <script lang="ts">
10
+ <script setup lang="ts">
11
+ import { useI18n } from "vue-i18n";
11
12
  import ClassicCheckbox from "../../form/ClassicCheckbox.vue";
12
- import { defineComponent } from "vue";
13
- export default defineComponent({
14
- components: {
15
- ClassicCheckbox,
16
- },
17
- props: {
18
- insertCode: { default: false, type: Boolean },
19
- },
20
- emits: ["update:insertCode"],
21
- });
13
+
14
+ //Props
15
+ defineProps({
16
+ insertCode: { default: false, type: Boolean },
17
+ })
18
+
19
+ //Emits
20
+ const emit = defineEmits(["update:insertCode"]);
21
+
22
+ //Composables
23
+ const { t } = useI18n();
24
+
25
+ //Methods
26
+ function updateInsertCode(value:boolean){
27
+ emit('update:insertCode', value)
28
+ }
22
29
  </script>
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <fieldset class="mt-3">
3
3
  <legend class="h4 mb-2 mt-3">
4
- {{ $t("player parameters") }}
4
+ {{ t("player parameters") }}
5
5
  </legend>
6
6
  <template v-if="choseNumberEpisode">
7
7
  <div v-if="displayChoiceAllEpisodes" role="radiogroup">
@@ -17,7 +17,7 @@
17
17
  value="all"
18
18
  />
19
19
  <label for="radio-all-episodes" class="flex-shrink-0">{{
20
- $t("Show every episode")
20
+ t("Show every episode")
21
21
  }}</label>
22
22
  </div>
23
23
  <div
@@ -30,17 +30,17 @@
30
30
  type="radio"
31
31
  name="episodeNumbers"
32
32
  value="number"
33
- :title="$t('Show') + ' ' + $t('Last podcasts')"
33
+ :title="t('Show') + ' ' + t('Last podcasts')"
34
34
  />
35
- <ChooseEpisodesNumber :episodes-number="episodesNumber" @update-number="$emit('update:episodesNumber', $event)"/>
35
+ <ChooseEpisodesNumber :episodes-number="episodesNumber" @update-number="emit('update:episodesNumber', $event)"/>
36
36
  </div>
37
37
  </div>
38
- <ChooseEpisodesNumber v-else :episodes-number="episodesNumber" @update-number="$emit('update:episodesNumber', $event)"/>
38
+ <ChooseEpisodesNumber v-else :episodes-number="episodesNumber" @update-number="emit('update:episodesNumber', $event)"/>
39
39
  <ClassicCheckbox
40
40
  :text-init="proceedReading"
41
41
  id-checkbox="proceed-reading-checkbox"
42
- :label="$t('Proceed reading')"
43
- @update:text-init="$emit('update:proceedReading', $event)"
42
+ :label="t('Proceed reading')"
43
+ @update:text-init="emit('update:proceedReading', $event)"
44
44
  />
45
45
  </template>
46
46
  <ClassicCheckbox
@@ -48,102 +48,100 @@
48
48
  :text-init="isVisible"
49
49
  id-checkbox="is-visible-checkbox"
50
50
  :label="titleStillAvailable"
51
- @update:text-init="$emit('update:isVisible', $event)"
51
+ @update:text-init="emit('update:isVisible', $event)"
52
52
  />
53
53
  <ClassicCheckbox
54
54
  v-if="displayArticleParam"
55
55
  :text-init="displayArticle"
56
56
  id-checkbox="display-article-checkbox"
57
- :label="$t('Display associated article')"
58
- @update:text-init="$emit('update:displayArticle', $event)"
57
+ :label="t('Display associated article')"
58
+ @update:text-init="emit('update:displayArticle', $event)"
59
59
  />
60
60
  <ClassicCheckbox
61
61
  v-if="displayTranscriptParam"
62
62
  :text-init="displayTranscript"
63
63
  id-checkbox="display-transcript-checkbox"
64
- :label="$t('If the transcript is available, show it')"
65
- @update:text-init="$emit('update:displayTranscript', $event)"
64
+ :label="t('If the transcript is available, show it')"
65
+ @update:text-init="emit('update:displayTranscript', $event)"
66
66
  />
67
67
  <ClassicCheckbox
68
68
  v-if="displayWaveParam"
69
69
  :text-init="displayWave"
70
70
  id-checkbox="display-wave-checkbox"
71
- :label="$t('Show animated wave')"
72
- @update:text-init="$emit('update:displayWave', $event)"
71
+ :label="t('Show animated wave')"
72
+ @update:text-init="emit('update:displayWave', $event)"
73
73
  />
74
74
  <ClassicCheckbox
75
75
  :text-init="playerAutoPlay"
76
76
  id-checkbox="player-autoplay-checkbox"
77
- :label="$t('Trigger automatic reading if this is possible')"
78
- @update:text-init="$emit('update:playerAutoPlay', $event)"
77
+ :label="t('Trigger automatic reading if this is possible')"
78
+ @update:text-init="emit('update:playerAutoPlay', $event)"
79
79
  />
80
80
  <PlayerCommonParameters
81
81
  v-if="displayInsertCode"
82
82
  :insert-code="insertCode"
83
- @update:insert-code="$emit('update:insertCode', $event)"
83
+ @update:insert-code="emit('update:insertCode', $event)"
84
84
  />
85
85
  </fieldset>
86
86
  </template>
87
87
 
88
- <script lang="ts">
88
+ <script setup lang="ts">
89
+ import { useI18n } from "vue-i18n";
89
90
  import ClassicCheckbox from "../../form/ClassicCheckbox.vue";
90
- import { defineAsyncComponent, defineComponent } from "vue";
91
+ import { computed, defineAsyncComponent, ref, watch } from "vue";
91
92
  const ChooseEpisodesNumber = defineAsyncComponent(() => import("./ChooseEpisodesNumber.vue"));
92
93
  const PlayerCommonParameters = defineAsyncComponent(
93
94
  () => import("./PlayerCommonParameters.vue"),
94
95
  );
95
- export default defineComponent({
96
- components: {
97
- ClassicCheckbox,
98
- ChooseEpisodesNumber,
99
- PlayerCommonParameters
100
- },
101
- props: {
102
- isVisible: { default: false, type: Boolean },
103
- choseNumberEpisode: { default: false, type: Boolean },
104
- displayWaveParam: { default: true, type: Boolean },
105
- displayChoiceAllEpisodes: { default: false, type: Boolean },
106
- displayTranscriptParam: { default: false, type: Boolean },
107
- displayArticleParam: { default: false, type: Boolean },
108
- displayIsVisible: { default: false, type: Boolean },
109
- displayInsertCode: { default: false, type: Boolean },
110
- proceedReading: { default: true, type: Boolean },
111
- displayArticle: { default: true, type: Boolean },
112
- displayTranscript: { default: true, type: Boolean },
113
- displayWave: { default: true, type: Boolean },
114
- playerAutoPlay: { default: false, type: Boolean },
115
- isPodcastNotVisible: { default: false, type: Boolean },
116
- episodesNumber: { default: 3, type: Number },
117
- insertCode: { default: false, type: Boolean },
118
- },
119
- emits: [
120
- "episodeChoiceDisplay",
121
- "update:proceedReading",
122
- "update:isVisible",
123
- "update:episodesNumber",
124
- "update:displayArticle",
125
- "update:displayTranscript",
126
- "update:displayWave",
127
- "update:playerAutoPlay",
128
- "update:insertCode"
129
- ],
130
96
 
131
- data() {
132
- return {
133
- episodeChoiceDisplay: "number" as string,
134
- };
135
- },
136
- computed: {
137
- titleStillAvailable(): string {
138
- return this.isPodcastNotVisible
139
- ? this.$t("Podcast still available")
140
- : this.$t("Podcasts still available");
141
- },
142
- },
143
- watch: {
144
- episodeChoiceDisplay(): void {
145
- this.$emit("episodeChoiceDisplay", this.episodeChoiceDisplay);
146
- },
147
- },
97
+ //Props
98
+ const props = defineProps({
99
+ isVisible: { default: false, type: Boolean },
100
+ choseNumberEpisode: { default: false, type: Boolean },
101
+ displayWaveParam: { default: true, type: Boolean },
102
+ displayChoiceAllEpisodes: { default: false, type: Boolean },
103
+ displayTranscriptParam: { default: false, type: Boolean },
104
+ displayArticleParam: { default: false, type: Boolean },
105
+ displayIsVisible: { default: false, type: Boolean },
106
+ displayInsertCode: { default: false, type: Boolean },
107
+ proceedReading: { default: true, type: Boolean },
108
+ displayArticle: { default: true, type: Boolean },
109
+ displayTranscript: { default: true, type: Boolean },
110
+ displayWave: { default: true, type: Boolean },
111
+ playerAutoPlay: { default: false, type: Boolean },
112
+ isPodcastNotVisible: { default: false, type: Boolean },
113
+ episodesNumber: { default: 3, type: Number },
114
+ insertCode: { default: false, type: Boolean },
115
+ })
116
+
117
+
118
+ //Emits
119
+ const emit = defineEmits([
120
+ "episodeChoiceDisplay",
121
+ "update:proceedReading",
122
+ "update:isVisible",
123
+ "update:episodesNumber",
124
+ "update:displayArticle",
125
+ "update:displayTranscript",
126
+ "update:displayWave",
127
+ "update:playerAutoPlay",
128
+ "update:insertCode"]);
129
+
130
+
131
+ //Data
132
+ const episodeChoiceDisplay = ref("number");
133
+
134
+ //Composables
135
+ const { t } = useI18n();
136
+
137
+ //Computed
138
+ const titleStillAvailable = computed(() =>{
139
+ return props.isPodcastNotVisible ? t("Podcast still available"): t("Podcasts still available");
140
+ });
141
+
142
+ //Watch
143
+ watch(episodeChoiceDisplay, async () => {
144
+ emit("episodeChoiceDisplay", episodeChoiceDisplay.value);
148
145
  });
146
+
149
147
  </script>
@@ -2,7 +2,7 @@
2
2
  <div class="d-flex flex-column align-items-center">
3
3
  <div class="d-flex align-items-center mb-3">
4
4
  <div class="form-label me-3">
5
- {{ $t("Color of the QR Code") }}
5
+ {{ t("Color of the QR Code") }}
6
6
  </div>
7
7
  <VSwatches
8
8
  v-model:model-value="color"
@@ -27,86 +27,74 @@
27
27
  <div class="d-flex align-items-center my-3">
28
28
  <FormatSwitch v-model:is-svg="isSvg" class="me-3"/>
29
29
  <button class="btn btn-primary" @click="download">
30
- {{ $t("Download") }}
30
+ {{ t("Download") }}
31
31
  </button>
32
32
  </div>
33
33
  <SnackBar ref="snackbar" position="bottom-left" />
34
34
  </div>
35
35
  </template>
36
36
 
37
- <script lang="ts">
37
+ <script setup lang="ts">
38
38
  import { VSwatches } from "vue3-swatches";
39
39
  import "vue3-swatches/dist/style.css";
40
40
  import SnackBar from "../../misc/SnackBar.vue";
41
41
  import QrcodeVue from "qrcode.vue";
42
42
  import FormatSwitch from "./FormatSwitch.vue";
43
43
  import { useSaveFetchStore } from "../../../stores/SaveFetchStore";
44
- import { mapActions } from "pinia";
45
- import { defineComponent } from "vue";
46
- export default defineComponent({
47
- name: "QrCode",
44
+ import { computed, onBeforeMount, ref, useTemplateRef } from "vue";
45
+ import { useI18n } from "vue-i18n";
48
46
 
49
- components: {
50
- SnackBar,
51
- VSwatches,
52
- QrcodeVue,
53
- FormatSwitch
54
- },
55
- props: {
56
- url: { default: "", type: String },
47
+ //Props
48
+ const props = defineProps({
49
+ url: { default: "", type: String },
57
50
  orgaForColor: { default: undefined, type: String },
58
- },
59
- data() {
60
- return {
61
- size: 1000 as number,
62
- color: "#000000" as string,
63
- isSvg: true as boolean
64
- };
65
- },
66
- computed:{
67
- renderQrCode(){
68
- return this.isSvg ? 'svg' : 'canvas';
69
- }
70
- },
71
- created() {
72
- this.initDefaultColor();
73
- },
74
- methods: {
75
- ...mapActions(useSaveFetchStore, ["getOrgaAttributes"]),
76
- download(): void {
77
- const canvas = document.getElementsByClassName("myQrCode");
78
- if (!canvas || canvas.length <=0 || !canvas[0]) {
79
- return;
80
- }
81
- const downloadLink = document.createElement("a");
82
- if (this.isSvg) {
83
- const svgData = canvas[0].outerHTML;
84
- const svgBlob = new Blob([svgData], {type:"image/svg+xml;charset=utf-8"});
85
- const svgUrl = URL.createObjectURL(svgBlob);
86
- downloadLink.href = svgUrl;
87
- downloadLink.download = "qrcode.svg";
88
- downloadLink.click();
89
- (this.$refs.snackbar as InstanceType<typeof SnackBar>).open(
90
- this.$t("Download started"),
91
- );
92
- }else{
93
- downloadLink.download = "qrcode.png";
94
- downloadLink.href = (canvas[0] as HTMLCanvasElement).toDataURL();
95
- }
96
- downloadLink.click();
97
- (this.$refs.snackbar as InstanceType<typeof SnackBar>).open(
98
- this.$t("Download started"),
99
- );
100
- },
101
- async initDefaultColor(): Promise<void> {
102
- if (undefined === this.orgaForColor) return;
103
- const attributes = await this.getOrgaAttributes(this.orgaForColor);
104
- if (Object.hasOwn(attributes, "COLOR")) {
105
- this.color = attributes.COLOR as string;
106
- }
107
- },
108
- },
109
- });
51
+ })
52
+
53
+ //Data
54
+ const size = ref(1000);
55
+ const color = ref("#000000");
56
+ const isSvg = ref(true);
57
+ const snackBarRef = useTemplateRef('snackbar');
58
+
59
+ //Composables
60
+ const { t } = useI18n();
61
+ const saveFetchStore = useSaveFetchStore();
62
+
63
+
64
+ //Computed
65
+ const renderQrCode = computed(() => isSvg.value ? 'svg' : 'canvas');
66
+
67
+ onBeforeMount(()=>initDefaultColor())
68
+
69
+ //Methods
70
+ function download(): void {
71
+ const canvas = document.getElementsByClassName("myQrCode");
72
+ if (!canvas || canvas.length <=0 || !canvas[0]) {
73
+ return;
74
+ }
75
+ const downloadLink = document.createElement("a");
76
+ if (isSvg.value) {
77
+ const svgData = canvas[0].outerHTML;
78
+ const svgBlob = new Blob([svgData], {type:"image/svg+xml;charset=utf-8"});
79
+ const svgUrl = URL.createObjectURL(svgBlob);
80
+ downloadLink.href = svgUrl;
81
+ downloadLink.download = "qrcode.svg";
82
+ }else{
83
+ downloadLink.download = "qrcode.png";
84
+ downloadLink.href = (canvas[0] as HTMLCanvasElement).toDataURL();
85
+ }
86
+ downloadLink.click();
87
+ (snackBarRef?.value as InstanceType<typeof SnackBar>).open(
88
+ t("Download started"),
89
+ );
90
+ }
91
+ async function initDefaultColor(): Promise<void> {
92
+ if (undefined === props.orgaForColor) return;
93
+ const attributes = await saveFetchStore.getOrgaAttributes(props.orgaForColor);
94
+ if (Object.hasOwn(attributes, "COLOR")) {
95
+ color.value = attributes.COLOR as string;
96
+ }
97
+ }
110
98
  </script>
111
99
  <style lang="scss">
112
100
  .octopus-app {