@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
@@ -1,15 +1,9 @@
1
1
  <template>
2
- <div
3
- class="left-menu-container"
4
- @mouseleave="onMenuClick"
5
- >
6
- <template
7
- v-for="link in routerLinkArray"
8
- :key="link.routeName"
9
- >
2
+ <div class="left-menu-container" @mouseleave="onMenuClick">
3
+ <template v-for="link in routerLinkArray" :key="link.routeName">
10
4
  <router-link
11
5
  v-if="link.condition"
12
- :class="'home'===link.routeName ? 'show-phone' : ''"
6
+ :class="'home' === link.routeName ? 'show-phone' : ''"
13
7
  :to="{
14
8
  name: link.routeName,
15
9
  query: getQueriesRouter(link.routeName),
@@ -28,7 +22,7 @@
28
22
  :reset="reset"
29
23
  @selected="onOrganisationSelected"
30
24
  />
31
- <hr class="show-phone">
25
+ <hr class="show-phone" />
32
26
  <router-link
33
27
  v-for="category in categories"
34
28
  :key="category.id"
@@ -46,44 +40,75 @@
46
40
  </template>
47
41
 
48
42
  <script lang="ts">
49
- import { state } from '../../stores/ParamSdkStore';
50
- import orgaFilter from '../mixins/organisationFilter';
51
- import { Category } from '@/stores/class/general/category';
52
- import { RubriquageFilter } from '@/stores/class/rubrique/rubriquageFilter';
53
- import { defineComponent, defineAsyncComponent } from 'vue';
54
- import { useFilterStore } from '@/stores/FilterStore';
55
- import { useGeneralStore } from '@/stores/GeneralStore';
56
- import { mapState } from 'pinia';
57
- import { Organisation } from '@/stores/class/general/organisation';
58
- const OrganisationChooserLight = defineAsyncComponent(() => import('../display/organisation/OrganisationChooserLight.vue'));
43
+ import { state } from "../../stores/ParamSdkStore";
44
+ import orgaFilter from "../mixins/organisationFilter";
45
+ import { Category } from "@/stores/class/general/category";
46
+ import { RubriquageFilter } from "@/stores/class/rubrique/rubriquageFilter";
47
+ import { defineComponent, defineAsyncComponent } from "vue";
48
+ import { useFilterStore } from "@/stores/FilterStore";
49
+ import { useGeneralStore } from "@/stores/GeneralStore";
50
+ import { mapState } from "pinia";
51
+ import { Organisation } from "@/stores/class/general/organisation";
52
+ const OrganisationChooserLight = defineAsyncComponent(
53
+ () => import("../display/organisation/OrganisationChooserLight.vue"),
54
+ );
59
55
  export default defineComponent({
60
- name: 'LeftMenu',
56
+ name: "LeftMenu",
61
57
  components: {
62
58
  OrganisationChooserLight,
63
59
  },
64
- mixins:[orgaFilter],
60
+ mixins: [orgaFilter],
65
61
  props: {
66
- isEducation: { default: false, type: Boolean},
62
+ isEducation: { default: false, type: Boolean },
67
63
  },
68
- emits: ['close'],
64
+ emits: ["close"],
69
65
  data() {
70
66
  return {
71
- organisationId: undefined as string|undefined,
67
+ organisationId: undefined as string | undefined,
72
68
  reset: false as boolean,
73
69
  };
74
70
  },
75
71
  computed: {
76
- ...mapState(useGeneralStore, ['storedCategories']),
77
- ...mapState(useFilterStore, ['filterLive', 'filterOrgaId', 'filterIab', 'filterRubrique']),
78
- routerLinkArray(){
72
+ ...mapState(useGeneralStore, ["storedCategories"]),
73
+ ...mapState(useFilterStore, [
74
+ "filterLive",
75
+ "filterOrgaId",
76
+ "filterIab",
77
+ "filterRubrique",
78
+ ]),
79
+ routerLinkArray() {
79
80
  return [
80
- {title : this.$t('Home'), routeName: 'home', condition : true},
81
- {title : this.$t('Radio & Live'), routeName: 'lives', condition : state.generalParameters.isLiveTab &&((this.filterOrgaId && this.filterLive) || !this.filterOrgaId)},
82
- {title : this.$t('Podcasts'), routeName: 'podcasts', condition : true},
83
- {title : this.$t('Emissions'), routeName: 'emissions', condition : true},
84
- {title : this.$t('Productors'), routeName: 'productors', condition : !this.isPodcastmaker && (!this.filterOrgaId || this.isEducation)},
85
- {title : this.$t('Playlists'), routeName: 'playlists', condition : true},
86
- {title : this.$t('Speakers'), routeName: 'participants', condition : true},]
81
+ { title: this.$t("Home"), routeName: "home", condition: true },
82
+ {
83
+ title: this.$t("Radio & Live"),
84
+ routeName: "lives",
85
+ condition:
86
+ state.generalParameters.isLiveTab &&
87
+ ((this.filterOrgaId && this.filterLive) || !this.filterOrgaId),
88
+ },
89
+ { title: this.$t("Podcasts"), routeName: "podcasts", condition: true },
90
+ {
91
+ title: this.$t("Emissions"),
92
+ routeName: "emissions",
93
+ condition: true,
94
+ },
95
+ {
96
+ title: this.$t("Productors"),
97
+ routeName: "productors",
98
+ condition:
99
+ !this.isPodcastmaker && (!this.filterOrgaId || this.isEducation),
100
+ },
101
+ {
102
+ title: this.$t("Playlists"),
103
+ routeName: "playlists",
104
+ condition: true,
105
+ },
106
+ {
107
+ title: this.$t("Speakers"),
108
+ routeName: "participants",
109
+ condition: true,
110
+ },
111
+ ];
87
112
  },
88
113
  categories(): Array<Category> {
89
114
  return this.storedCategories.filter((c: Category) => {
@@ -92,11 +117,16 @@ export default defineComponent({
92
117
  });
93
118
  },
94
119
  isPodcastmaker(): boolean {
95
- return (state.generalParameters.podcastmaker as boolean);
120
+ return state.generalParameters.podcastmaker as boolean;
96
121
  },
97
- rubriqueQueryParam(): string|undefined{
98
- if(this.filterRubrique?.length){
99
- return this.filterRubrique.map((value: RubriquageFilter) => value.rubriquageId+':'+value.rubriqueId).join();
122
+ rubriqueQueryParam(): string | undefined {
123
+ if (this.filterRubrique?.length) {
124
+ return this.filterRubrique
125
+ .map(
126
+ (value: RubriquageFilter) =>
127
+ value.rubriquageId + ":" + value.rubriqueId,
128
+ )
129
+ .join();
100
130
  }
101
131
  return undefined;
102
132
  },
@@ -113,20 +143,26 @@ export default defineComponent({
113
143
  },
114
144
  },
115
145
  },
116
-
146
+
117
147
  methods: {
118
- getQueriesRouter(routeName: string){
119
- if('podcasts' !== routeName && 'emissions' !== routeName && 'home' !== routeName){
120
- return { productor: this.filterOrgaId};
148
+ getQueriesRouter(routeName: string) {
149
+ if (
150
+ "podcasts" !== routeName &&
151
+ "emissions" !== routeName &&
152
+ "home" !== routeName
153
+ ) {
154
+ return { productor: this.filterOrgaId };
121
155
  }
122
- return { productor: this.filterOrgaId,
123
- iabId: this.filterIab?.id,
124
- rubriquesId: this.rubriqueQueryParam}
156
+ return {
157
+ productor: this.filterOrgaId,
158
+ iabId: this.filterIab?.id,
159
+ rubriquesId: this.rubriqueQueryParam,
160
+ };
125
161
  },
126
162
  onMenuClick() {
127
- this.$emit('close');
163
+ this.$emit("close");
128
164
  },
129
- async onOrganisationSelected(organisation: Organisation|undefined) {
165
+ async onOrganisationSelected(organisation: Organisation | undefined) {
130
166
  if (organisation?.id) {
131
167
  await this.selectOrganisation(organisation.id);
132
168
  return;
@@ -134,40 +170,40 @@ export default defineComponent({
134
170
  this.removeSelectedOrga();
135
171
  },
136
172
  },
137
- })
173
+ });
138
174
  </script>
139
175
 
140
176
  <style lang="scss">
141
- .octopus-app{
142
- .left-menu-container {
143
- position: fixed;
144
- top: 3rem;
145
- bottom: 0;
146
- right: 0;
147
- z-index: 10;
148
- background: #fff;
149
- width: 20%;
150
- padding: 2rem;
151
- display: flex;
152
- flex-direction: column;
153
- font-size: 0.9rem;
177
+ .octopus-app {
178
+ .left-menu-container {
179
+ position: fixed;
180
+ top: 3rem;
181
+ bottom: 0;
182
+ right: 0;
183
+ z-index: 10;
184
+ background: #fff;
185
+ width: 20%;
186
+ padding: 2rem;
187
+ display: flex;
188
+ flex-direction: column;
189
+ font-size: 0.9rem;
154
190
 
155
- a{
156
- color: black !important;
157
- font-weight: bold;
158
- margin-bottom: 1rem;
159
- }
160
- /** PHONES*/
161
- @media (max-width: 960px) {
162
- width: 75%;
163
- max-height: 80%;
164
- top: 2.5rem;
165
- overflow-y: auto;
166
- height: 100%;
191
+ a {
192
+ color: black !important;
193
+ font-weight: bold;
194
+ margin-bottom: 1rem;
195
+ }
196
+ /** PHONES*/
197
+ @media (max-width: 960px) {
198
+ width: 75%;
199
+ max-height: 80%;
200
+ top: 2.5rem;
201
+ overflow-y: auto;
202
+ height: 100%;
203
+ }
204
+ @media (max-width: 450px) {
205
+ width: 94%;
206
+ }
167
207
  }
168
- @media (max-width: 450px) {
169
- width: 94%;
170
- }
171
- }
172
208
  }
173
- </style>
209
+ </style>
@@ -1,7 +1,5 @@
1
1
  <template>
2
- <div
3
- class="octopus-progress"
4
- >
2
+ <div class="octopus-progress">
5
3
  <div
6
4
  v-if="secondaryProgress"
7
5
  class="octopus-progress-bar bg-light"
@@ -15,12 +13,12 @@
15
13
  <div
16
14
  v-if="mediaCueInPercent > 0"
17
15
  class="octopus-progress-bar bg-complementary"
18
- :style="{'width': + mediaCueInPercent + '%'}"
16
+ :style="{ width: +mediaCueInPercent + '%' }"
19
17
  />
20
18
  <div
21
19
  v-if="mediaCueOutPercent < 100"
22
20
  class="octopus-progress-bar end-0 bg-complementary"
23
- :style="{'width': + 100- mediaCueOutPercent + '%'}"
21
+ :style="{ width: +100 - mediaCueOutPercent + '%' }"
24
22
  />
25
23
  </template>
26
24
  <div
@@ -35,12 +33,12 @@
35
33
  <div
36
34
  v-if="mediaCueInPercent > 0"
37
35
  class="octopus-progress-bar octopus-progress-bar-duration bg-complementary"
38
- :style="{'left': + mediaCueInPercent + '%'}"
36
+ :style="{ left: +mediaCueInPercent + '%' }"
39
37
  />
40
38
  <div
41
39
  v-if="mediaCueOutPercent < 100"
42
40
  class="octopus-progress-bar end-0 octopus-progress-bar-duration bg-complementary"
43
- :style="{'right': + 100- mediaCueOutPercent + '%'}"
41
+ :style="{ right: +100 - mediaCueOutPercent + '%' }"
44
42
  />
45
43
  </template>
46
44
  <div
@@ -57,16 +55,16 @@
57
55
  </template>
58
56
 
59
57
  <script lang="ts">
60
- import { usePlayerStore } from '@/stores/PlayerStore';
61
- import { mapState } from 'pinia';
62
- import { defineComponent } from 'vue';
58
+ import { usePlayerStore } from "@/stores/PlayerStore";
59
+ import { mapState } from "pinia";
60
+ import { defineComponent } from "vue";
63
61
  export default defineComponent({
64
- name: 'ProgressBar',
62
+ name: "ProgressBar",
65
63
  props: {
66
- alertBar: { default: undefined, type: Number},
67
- mainProgress: { default: 0, type: Number},
68
- secondaryProgress: { default: 0, type: Number},
69
- isProgressCursor: { default: false, type: Boolean},
64
+ alertBar: { default: undefined, type: Number },
65
+ mainProgress: { default: 0, type: Number },
66
+ secondaryProgress: { default: 0, type: Number },
67
+ isProgressCursor: { default: false, type: Boolean },
70
68
  },
71
69
  data() {
72
70
  return {
@@ -74,30 +72,36 @@ export default defineComponent({
74
72
  mediaCueOutPercent: 100 as number,
75
73
  };
76
74
  },
77
- computed:{
78
- ...mapState(usePlayerStore, ['playerMedia']),
75
+ computed: {
76
+ ...mapState(usePlayerStore, ["playerMedia"]),
79
77
  },
80
- watch:{
78
+ watch: {
81
79
  playerMedia: {
82
80
  deep: true,
83
- immediate:true,
84
- handler(){
85
- if(this.playerMedia){
86
- this.mediaCueInPercent = this.timeMediaToPercent(this.playerMedia.cueIn??0);
87
- this.mediaCueOutPercent = this.timeMediaToPercent(this.playerMedia.cueOut??null);
81
+ immediate: true,
82
+ handler() {
83
+ if (this.playerMedia) {
84
+ this.mediaCueInPercent = this.timeMediaToPercent(
85
+ this.playerMedia.cueIn ?? 0,
86
+ );
87
+ this.mediaCueOutPercent = this.timeMediaToPercent(
88
+ this.playerMedia.cueOut ?? null,
89
+ );
88
90
  }
89
- }
91
+ },
90
92
  },
91
93
  },
92
- methods:{
93
- timeMediaToPercent(value: number|null):number{
94
- if(null===value || !this.playerMedia){return 100;}
95
- return (value*100)/(this.playerMedia?.duration??1);
94
+ methods: {
95
+ timeMediaToPercent(value: number | null): number {
96
+ if (null === value || !this.playerMedia) {
97
+ return 100;
98
+ }
99
+ return (value * 100) / (this.playerMedia?.duration ?? 1);
96
100
  },
97
- }
98
- })
101
+ },
102
+ });
99
103
  </script>
100
104
 
101
105
  <style lang="scss">
102
- @import '../../assets/progressbar.scss';
103
- </style>
106
+ @import "../../assets/progressbar.scss";
107
+ </style>
@@ -0,0 +1,169 @@
1
+ <template>
2
+ <div class="snack-bar-wrap" :style="style.wrap">
3
+ <template v-for="(msg, i) in msgs" :key="i">
4
+ <div class="snack-bar" :style="style.bar(msg.color)" @click="pop(i)">
5
+ {{ msg.msg.message || msg.msg }}
6
+ </div>
7
+ <br />
8
+ </template>
9
+ </div>
10
+ </template>
11
+
12
+ <script lang="ts">
13
+ const getStyle = (
14
+ baseSize: string,
15
+ position: { pos: string; textAlign: string },
16
+ ) => {
17
+ const c = (f: number) => `calc(${f} * ${baseSize})`;
18
+ const { pos, textAlign } = position;
19
+ return {
20
+ wrap: {
21
+ position: "fixed",
22
+ left: 0,
23
+ pos: pos ? pos : c(0.05),
24
+ zIndex: 9999,
25
+ width: "100%",
26
+ padding: `0 ${c(0.2)}`,
27
+ pointerEvents: "none",
28
+ textAlign,
29
+ },
30
+ bar: (bg: string) => ({
31
+ display: "inline-block",
32
+ width: "auto",
33
+ minWidth: baseSize,
34
+ maxWidth: `calc(100vw - ${c(0.4)})`,
35
+ padding: `${c(0.15)} ${c(0.2)}`,
36
+ margin: `0 0 ${c(0.05)}`,
37
+ borderRadius: c(0.02),
38
+ lineHeight: c(0.2),
39
+ color: "#fff",
40
+ background: bg,
41
+ boxShadow: `0 ${c(0.01)} ${c(0.025)} rgba(0,0,0, .15)`,
42
+ cursor: "pointer",
43
+ textAlign: "center",
44
+ pointerEvents: "all",
45
+ userSelect: "none",
46
+ }),
47
+ };
48
+ };
49
+ import { defineComponent } from "vue";
50
+ export default defineComponent({
51
+ name: "SnackBar",
52
+ props: {
53
+ colors: {
54
+ default: () => ({
55
+ open: "#333",
56
+ info: "#3DBD7D",
57
+ error: "#FA7377",
58
+ warn: "#FF6600",
59
+ }),
60
+ type: Object,
61
+ },
62
+ position: { default: "top-center", type: String },
63
+ holdTime: { default: 5000, type: Number },
64
+ },
65
+ data() {
66
+ return {
67
+ msgs: [] as Array<{
68
+ color: string;
69
+ msg: string;
70
+ timer: ReturnType<typeof setTimeout> | undefined;
71
+ }>,
72
+ baseSize: "5rem",
73
+ };
74
+ },
75
+ computed: {
76
+ $_position(): { pos: string; textAlign: string } {
77
+ const [p, textAlign] = this.position.toString().split("-");
78
+ return {
79
+ pos: ["top", "bottom"].includes(p) ? p : "top",
80
+ textAlign: ["left", "center", "right"].includes(textAlign)
81
+ ? textAlign
82
+ : "center",
83
+ };
84
+ },
85
+ style(): {
86
+ wrap: {
87
+ position: string;
88
+ left: number;
89
+ pos: string;
90
+ zIndex: number;
91
+ width: string;
92
+ padding: string;
93
+ pointerEvents: string;
94
+ textAlign: string;
95
+ };
96
+ bar: (bg: string) => {
97
+ display: string;
98
+ width: string;
99
+ minWidth: string;
100
+ maxWidth: string;
101
+ padding: string;
102
+ margin: string;
103
+ borderRadius: string;
104
+ lineHeight: string;
105
+ color: string;
106
+ background: string;
107
+ boxShadow: string;
108
+ cursor: string;
109
+ textAlign: string;
110
+ pointerEvents: string;
111
+ userSelect: string;
112
+ };
113
+ } {
114
+ return getStyle(this.baseSize, this.$_position);
115
+ },
116
+ },
117
+ methods: {
118
+ info(msg: string): boolean {
119
+ const color = this.colors.info;
120
+ this.open({ color, msg }, false);
121
+ return true;
122
+ },
123
+ error(msg: string): boolean {
124
+ const color = this.colors.error;
125
+ this.open({ color, msg }, false);
126
+ return false;
127
+ },
128
+ warn(msg: string): boolean {
129
+ const color = this.colors.warn;
130
+ this.open({ color, msg }, false);
131
+ return true;
132
+ },
133
+ open(
134
+ message: { color: string; msg: string } | string,
135
+ isOpen = true,
136
+ ): boolean {
137
+ let msg;
138
+ let color;
139
+ if (!isOpen) {
140
+ color = (message as { color: string; msg: string }).color;
141
+ msg = (message as { color: string; msg: string }).msg;
142
+ } else {
143
+ color = this.colors.open;
144
+ msg = message as string;
145
+ }
146
+ const msgObj = {
147
+ color,
148
+ msg,
149
+ timer: setTimeout(this.pop, this.holdTime),
150
+ };
151
+
152
+ this.msgs.push(msgObj);
153
+
154
+ return true;
155
+ },
156
+ pop(i = 0): void {
157
+ if (this.msgs[i]) clearTimeout(this.msgs[i].timer as unknown as number);
158
+ this.msgs.splice(i, 1);
159
+ },
160
+ },
161
+ });
162
+ </script>
163
+ <style lang="scss">
164
+ .octopus-app {
165
+ .snack-bar-wrap {
166
+ bottom: 0px;
167
+ }
168
+ }
169
+ </style>