@saooti/octopus-sdk 37.0.6 → 37.0.7
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.
- package/README.md +2 -2
- package/index.ts +21 -21
- package/package.json +26 -20
- package/src/App.vue +69 -60
- package/src/api/classicCrud.ts +12 -12
- package/src/api/initialize.ts +1 -1
- package/src/components/display/aggregator/RssSection.vue +3 -3
- package/src/components/display/categories/CategoryChooser.vue +73 -60
- package/src/components/display/categories/CategoryFilter.vue +134 -90
- package/src/components/display/categories/CategoryList.vue +76 -62
- package/src/components/display/comments/AddCommentModal.vue +44 -44
- package/src/components/display/comments/CommentBasicView.vue +38 -30
- package/src/components/display/comments/CommentInput.vue +121 -106
- package/src/components/display/comments/CommentItem.vue +144 -102
- package/src/components/display/comments/CommentList.vue +117 -85
- package/src/components/display/comments/CommentParentInfo.vue +18 -15
- package/src/components/display/comments/CommentPlayer.vue +39 -41
- package/src/components/display/comments/CommentSection.vue +68 -53
- package/src/components/display/edit/EditBox.vue +7 -7
- package/src/components/display/edit/EditBoxRadio.vue +3 -4
- package/src/components/display/edit/EditCommentBox.vue +34 -36
- package/src/components/display/emission/EmissionInlineList.vue +75 -63
- package/src/components/display/emission/EmissionItem.vue +47 -35
- package/src/components/display/emission/EmissionList.vue +111 -83
- package/src/components/display/emission/EmissionPlayerItem.vue +89 -89
- package/src/components/display/filter/AdvancedSearch.vue +81 -73
- package/src/components/display/filter/CategorySearchFilter.vue +27 -25
- package/src/components/display/filter/DateFilter.vue +38 -38
- package/src/components/display/filter/MonetizableFilter.vue +16 -14
- package/src/components/display/filter/ProductorSearch.vue +55 -47
- package/src/components/display/filter/RubriqueChoice.vue +42 -27
- package/src/components/display/filter/RubriqueFilter.vue +130 -85
- package/src/components/display/filter/SearchOrder.vue +16 -11
- package/src/components/display/list/ListPaginate.vue +72 -70
- package/src/components/display/list/PaginateParams.vue +29 -30
- package/src/components/display/list/PaginateSection.vue +210 -0
- package/src/components/display/list/SwiperList.vue +28 -32
- package/src/components/display/live/CountDown.vue +12 -14
- package/src/components/display/live/LiveHorizontalList.vue +60 -50
- package/src/components/display/live/LiveItem.vue +42 -26
- package/src/components/display/live/LiveList.vue +92 -65
- package/src/components/display/live/RadioCurrently.vue +47 -42
- package/src/components/display/live/RadioImage.vue +40 -42
- package/src/components/display/live/RadioItem.vue +15 -22
- package/src/components/display/live/RadioList.vue +24 -21
- package/src/components/display/live/RadioPlanning.vue +105 -68
- package/src/components/display/organisation/OrganisationChooser.vue +58 -42
- package/src/components/display/organisation/OrganisationChooserLight.vue +27 -19
- package/src/components/display/participant/ParticipantItem.vue +89 -77
- package/src/components/display/participant/ParticipantList.vue +90 -60
- package/src/components/display/playlist/PlaylistItem.vue +32 -35
- package/src/components/display/playlist/PlaylistList.vue +70 -52
- package/src/components/display/playlist/PodcastList.vue +61 -50
- package/src/components/display/playlist/PodcastPlaylistInlineList.vue +47 -38
- package/src/components/display/podcasts/AnimatorsItem.vue +17 -15
- package/src/components/display/podcasts/ParticipantDescription.vue +21 -22
- package/src/components/display/podcasts/PodcastFilterList.vue +28 -26
- package/src/components/display/podcasts/PodcastImage.vue +129 -135
- package/src/components/display/podcasts/PodcastInlineList.vue +33 -29
- package/src/components/display/podcasts/PodcastInlineListClassic.vue +91 -71
- package/src/components/display/podcasts/PodcastInlineListTemplate.vue +94 -85
- package/src/components/display/podcasts/PodcastItem.vue +96 -90
- package/src/components/display/podcasts/PodcastItemInfo.vue +61 -65
- package/src/components/display/podcasts/PodcastList.vue +115 -84
- package/src/components/display/podcasts/PodcastModuleBox.vue +95 -104
- package/src/components/display/podcasts/PodcastPlayBar.vue +45 -32
- package/src/components/display/podcasts/PodcastSwiperList.vue +65 -55
- package/src/components/display/podcasts/TagList.vue +33 -37
- package/src/components/display/rubriques/RubriqueChooser.vue +70 -51
- package/src/components/display/rubriques/RubriqueList.vue +117 -89
- package/src/components/display/sharing/PlayerParameters.vue +45 -42
- package/src/components/display/sharing/QrCode.vue +52 -46
- package/src/components/display/sharing/ShareButtons.vue +18 -18
- package/src/components/display/sharing/ShareButtonsIntern.vue +100 -78
- package/src/components/display/sharing/ShareDistribution.vue +101 -67
- package/src/components/display/sharing/SharePlayer.vue +207 -127
- package/src/components/display/sharing/SharePlayerColors.vue +15 -15
- package/src/components/display/sharing/SharePlayerRadio.vue +62 -39
- package/src/components/display/sharing/SharePlayerTypes.vue +93 -55
- package/src/components/display/sharing/SubscribeButtons.vue +83 -32
- package/src/components/display/studio/RecordingItemButton.vue +3 -3
- package/src/components/form/ClassicCheckbox.vue +32 -31
- package/src/components/form/ClassicDatePicker.vue +47 -49
- package/src/components/form/ClassicInputText.vue +99 -98
- package/src/components/form/ClassicLoading.vue +11 -14
- package/src/components/form/ClassicMultiselect.vue +125 -126
- package/src/components/form/ClassicRadio.vue +15 -18
- package/src/components/form/ClassicSearch.vue +17 -23
- package/src/components/form/ClassicSelect.vue +35 -27
- package/src/components/form/{Wysiwyg.vue → ClassicWysiwyg.vue} +94 -109
- package/src/components/misc/AcpmImage.vue +6 -6
- package/src/components/misc/ClassicAccordion.vue +69 -0
- package/src/components/misc/ClassicNav.vue +117 -0
- package/src/components/misc/ClassicPopover.vue +212 -0
- package/src/components/misc/{Spinner.vue → ClassicSpinner.vue} +14 -15
- package/src/components/misc/ErrorMessage.vue +9 -17
- package/src/components/misc/FooterSection.vue +198 -0
- package/src/components/misc/HomeDropdown.vue +60 -60
- package/src/components/misc/LeftMenu.vue +115 -79
- package/src/components/misc/ProgressBar.vue +36 -32
- package/src/components/misc/SnackBar.vue +169 -0
- package/src/components/misc/TopBar.vue +161 -115
- package/src/components/misc/modal/ClassicModal.vue +99 -103
- package/src/components/misc/modal/ClipboardModal.vue +21 -23
- package/src/components/misc/modal/MessageModal.vue +22 -28
- package/src/components/misc/modal/NewsletterModal.vue +139 -113
- package/src/components/misc/modal/QrCodeModal.vue +14 -17
- package/src/components/misc/modal/ShareModalPlayer.vue +44 -60
- package/src/components/misc/player/PlayerCompact.vue +47 -62
- package/src/components/misc/player/{Player.vue → PlayerComponent.vue} +54 -46
- package/src/components/misc/player/PlayerLarge.vue +62 -61
- package/src/components/misc/player/PlayerProgressBar.vue +40 -30
- package/src/components/misc/player/PlayerTimeline.vue +32 -36
- package/src/components/misc/player/radio/RadioHistory.vue +62 -59
- package/src/components/misc/player/radio/RadioProgressBar.vue +44 -35
- package/src/components/mixins/cookies.ts +11 -10
- package/src/components/mixins/displayMethods.ts +5 -4
- package/src/components/mixins/handle403.ts +9 -9
- package/src/components/mixins/imageProxy.ts +14 -7
- package/src/components/mixins/init.ts +31 -16
- package/src/components/mixins/orgaComputed.ts +7 -7
- package/src/components/mixins/organisationFilter.ts +36 -22
- package/src/components/mixins/player/playerComment.ts +46 -37
- package/src/components/mixins/player/playerDisplay.ts +122 -87
- package/src/components/mixins/player/playerLive.ts +65 -43
- package/src/components/mixins/player/playerLogic.ts +133 -88
- package/src/components/mixins/player/playerTranscript.ts +48 -30
- package/src/components/mixins/radio/fetchRadioData.ts +40 -23
- package/src/components/mixins/selenium.ts +2 -2
- package/src/components/mixins/tagOfMixins.ts +11 -11
- package/src/components/pages/CategoryPage.vue +43 -0
- package/src/components/pages/{Emission.vue → EmissionPage.vue} +98 -67
- package/src/components/pages/{Emissions.vue → EmissionsPage.vue} +51 -44
- package/src/components/pages/Error403Page.vue +20 -19
- package/src/components/pages/HomePage.vue +144 -0
- package/src/components/pages/LivesPage.vue +66 -0
- package/src/components/pages/PageNotFound.vue +33 -22
- package/src/components/pages/{Participant.vue → ParticipantPage.vue} +63 -49
- package/src/components/pages/{Participants.vue → ParticipantsPage.vue} +9 -9
- package/src/components/pages/PlaylistPage.vue +175 -0
- package/src/components/pages/{Playlists.vue → PlaylistsPage.vue} +16 -14
- package/src/components/pages/PodcastPage.vue +365 -0
- package/src/components/pages/PodcastsPage.vue +152 -0
- package/src/components/pages/RadioPage.vue +131 -0
- package/src/components/pages/RubriquePage.vue +45 -0
- package/src/components/pages/{Search.vue → SearchPage.vue} +19 -19
- package/src/helper/dom.ts +1 -1
- package/src/helper/duration.ts +10 -4
- package/src/helper/useEventListener.ts +7 -8
- package/src/i18n.ts +31 -30
- package/src/locale/de.ts +263 -257
- package/src/locale/educationen.ts +13 -13
- package/src/locale/educationfr.ts +1 -1
- package/src/locale/en.ts +323 -324
- package/src/locale/es.ts +325 -318
- package/src/locale/fr.ts +330 -324
- package/src/locale/it.ts +332 -328
- package/src/locale/messages.ts +9 -9
- package/src/locale/sl.ts +315 -319
- package/src/main.ts +28 -31
- package/src/router/router.ts +218 -198
- package/src/shims-tsx.d.ts +1 -1
- package/src/shims-vue.d.ts +1 -1
- package/src/stores/ApiStore.ts +44 -44
- package/src/stores/AuthStore.ts +21 -15
- package/src/stores/CommentStore.ts +13 -11
- package/src/stores/FilterStore.ts +25 -15
- package/src/stores/GeneralStore.ts +15 -15
- package/src/stores/ParamSdkStore.ts +179 -137
- package/src/stores/PlayerStore.ts +139 -125
- package/src/stores/class/adserver/adserverConfig.ts +1 -1
- package/src/stores/class/adserver/adserverOtherEmission.ts +9 -9
- package/src/stores/class/cartouchier/cartouche.ts +4 -4
- package/src/stores/class/cartouchier/cartouchier.ts +2 -2
- package/src/stores/class/conference/conference.ts +10 -9
- package/src/stores/class/conference/conferenceMessage.ts +2 -2
- package/src/stores/class/conference/conferenceParticipant.ts +1 -1
- package/src/stores/class/conference/studioCall.ts +6 -6
- package/src/stores/class/contract/contractOrganisation.ts +5 -5
- package/src/stores/class/ftp/ftpEmission.ts +9 -9
- package/src/stores/class/ftp/testFtpEmission.ts +4 -4
- package/src/stores/class/general/audioView.ts +19 -19
- package/src/stores/class/general/category.ts +1 -1
- package/src/stores/class/general/classicSelectType.ts +2 -3
- package/src/stores/class/general/customPlayer.ts +8 -8
- package/src/stores/class/general/emission.ts +20 -20
- package/src/stores/class/general/fetchParam.ts +8 -2
- package/src/stores/class/general/initState.ts +31 -31
- package/src/stores/class/general/interfacePageable.ts +13 -13
- package/src/stores/class/general/ituneCategory.ts +4 -4
- package/src/stores/class/general/listReturn.ts +12 -12
- package/src/stores/class/general/media.ts +7 -7
- package/src/stores/class/general/organisation.ts +9 -9
- package/src/stores/class/general/pageable.ts +10 -10
- package/src/stores/class/general/participant.ts +7 -7
- package/src/stores/class/general/player.ts +30 -28
- package/src/stores/class/general/playlist.ts +17 -19
- package/src/stores/class/general/podcast.ts +19 -19
- package/src/stores/class/general/sortPageable.ts +4 -4
- package/src/stores/class/general/soundcastCategory.ts +7 -7
- package/src/stores/class/ouestFrance/ofTag.ts +34 -34
- package/src/stores/class/ouestFrance/ofTagInfo.ts +9 -9
- package/src/stores/class/ouestFrance/ofTagPage.ts +7 -7
- package/src/stores/class/ouestFrance/ofTagSeo.ts +7 -7
- package/src/stores/class/ouestFrance/ofTagVente.ts +6 -6
- package/src/stores/class/ouestFrance/ofTagWithParents.ts +20 -20
- package/src/stores/class/radio/canal.ts +4 -4
- package/src/stores/class/radio/live.ts +6 -6
- package/src/stores/class/radio/mix.ts +16 -16
- package/src/stores/class/radio/playlistMedia.ts +7 -7
- package/src/stores/class/radio/recurrence.ts +54 -54
- package/src/stores/class/rss/rssEmission.ts +13 -13
- package/src/stores/class/rss/rssInfo.ts +7 -7
- package/src/stores/class/rubrique/rubriquage.ts +2 -2
- package/src/stores/class/rubrique/rubrique.ts +1 -1
- package/src/stores/class/stat/statArrayIncome.ts +5 -5
- package/src/stores/class/stat/statArrayObject.ts +26 -26
- package/src/stores/class/stat/statGraph.ts +6 -6
- package/src/stores/class/user/person.ts +4 -2
- package/src/stores/class/user/profile.ts +4 -2
- package/src/stores/class/user/userKeycloak.ts +4 -5
- package/src/components/display/list/Paginate.vue +0 -181
- package/src/components/misc/Accordion.vue +0 -78
- package/src/components/misc/Footer.vue +0 -169
- package/src/components/misc/Nav.vue +0 -119
- package/src/components/misc/Popover.vue +0 -193
- package/src/components/misc/Snackbar.vue +0 -168
- package/src/components/pages/Category.vue +0 -41
- package/src/components/pages/Home.vue +0 -125
- package/src/components/pages/Lives.vue +0 -64
- package/src/components/pages/Playlist.vue +0 -164
- package/src/components/pages/Podcast.vue +0 -307
- package/src/components/pages/Podcasts.vue +0 -146
- package/src/components/pages/Radio.vue +0 -122
- package/src/components/pages/Rubrique.vue +0 -42
|
@@ -14,32 +14,26 @@
|
|
|
14
14
|
type="text"
|
|
15
15
|
:placeholder="$t('Your name')"
|
|
16
16
|
:class="{ 'border border-danger': 0 === countName || !validName }"
|
|
17
|
-
|
|
17
|
+
/>
|
|
18
18
|
<p
|
|
19
19
|
class="d-flex justify-content-end h6"
|
|
20
20
|
:class="{ 'text-danger': !validName }"
|
|
21
21
|
>
|
|
22
|
-
{{ countName +
|
|
22
|
+
{{ countName + " / " + maxName }}
|
|
23
23
|
</p>
|
|
24
|
-
<div
|
|
25
|
-
v-if="''!==errorText"
|
|
26
|
-
class="mt-1 text-danger"
|
|
27
|
-
>
|
|
24
|
+
<div v-if="'' !== errorText" class="mt-1 text-danger">
|
|
28
25
|
{{ errorText }}
|
|
29
26
|
</div>
|
|
30
27
|
</template>
|
|
31
28
|
<template v-else>
|
|
32
|
-
<div>{{ $t(
|
|
29
|
+
<div>{{ $t("Send in progress") }}</div>
|
|
33
30
|
</template>
|
|
34
31
|
</template>
|
|
35
32
|
<template #footer>
|
|
36
|
-
<button
|
|
37
|
-
|
|
38
|
-
@click="closePopup"
|
|
39
|
-
>
|
|
40
|
-
{{ $t('Close') }}
|
|
33
|
+
<button class="btn m-1" @click="closePopup">
|
|
34
|
+
{{ $t("Close") }}
|
|
41
35
|
</button>
|
|
42
|
-
<vue-recaptcha
|
|
36
|
+
<vue-recaptcha
|
|
43
37
|
v-if="!isVerify"
|
|
44
38
|
ref="invisibleRecaptcha"
|
|
45
39
|
:load-recaptcha-script="true"
|
|
@@ -54,56 +48,56 @@
|
|
|
54
48
|
:disabled="0 === countName || !validName"
|
|
55
49
|
@click="submit"
|
|
56
50
|
>
|
|
57
|
-
{{ $t(
|
|
51
|
+
{{ $t("Validate") }}
|
|
58
52
|
</button>
|
|
59
53
|
</template>
|
|
60
54
|
</ClassicModal>
|
|
61
55
|
</template>
|
|
62
56
|
|
|
63
57
|
<script lang="ts">
|
|
64
|
-
import Constants from
|
|
65
|
-
import { state } from
|
|
66
|
-
import ClassicModal from
|
|
67
|
-
import api from
|
|
68
|
-
import { useAuthStore } from
|
|
69
|
-
import { mapState } from
|
|
70
|
-
import { VueRecaptcha } from
|
|
71
|
-
import { defineComponent } from
|
|
58
|
+
import Constants from "../../../../public/config";
|
|
59
|
+
import { state } from "../../../stores/ParamSdkStore";
|
|
60
|
+
import ClassicModal from "../../misc/modal/ClassicModal.vue";
|
|
61
|
+
import api from "@/api/initialize";
|
|
62
|
+
import { useAuthStore } from "@/stores/AuthStore";
|
|
63
|
+
import { mapState } from "pinia";
|
|
64
|
+
import { VueRecaptcha } from "vue-recaptcha";
|
|
65
|
+
import { defineComponent } from "vue";
|
|
72
66
|
export default defineComponent({
|
|
73
|
-
name:
|
|
74
|
-
components:{
|
|
67
|
+
name: "AddCommentModal",
|
|
68
|
+
components: {
|
|
75
69
|
VueRecaptcha,
|
|
76
|
-
ClassicModal
|
|
70
|
+
ClassicModal,
|
|
77
71
|
},
|
|
78
72
|
|
|
79
73
|
props: {},
|
|
80
|
-
emits: [
|
|
74
|
+
emits: ["close", "validate"],
|
|
81
75
|
|
|
82
76
|
data() {
|
|
83
77
|
return {
|
|
84
|
-
name:
|
|
78
|
+
name: "" as string,
|
|
85
79
|
sending: false as boolean,
|
|
86
80
|
sendError: false as boolean,
|
|
87
81
|
isVerify: false as boolean,
|
|
88
|
-
maxName
|
|
82
|
+
maxName: Constants.MAX_COMMENT_NAME as number,
|
|
89
83
|
};
|
|
90
84
|
},
|
|
91
85
|
computed: {
|
|
92
|
-
...mapState(useAuthStore, [
|
|
93
|
-
errorText():string {
|
|
94
|
-
if(this.isCaptchaTest){
|
|
95
|
-
return this.$t(
|
|
86
|
+
...mapState(useAuthStore, ["authProfile"]),
|
|
87
|
+
errorText(): string {
|
|
88
|
+
if (this.isCaptchaTest) {
|
|
89
|
+
return this.$t("Recaptcha not active");
|
|
96
90
|
}
|
|
97
|
-
return this.sendError? this.$t(
|
|
91
|
+
return this.sendError ? this.$t("Recaptcha error") : "";
|
|
98
92
|
},
|
|
99
|
-
validName(): boolean{
|
|
93
|
+
validName(): boolean {
|
|
100
94
|
return this.countName <= this.maxName;
|
|
101
95
|
},
|
|
102
|
-
countName(): number{
|
|
96
|
+
countName(): number {
|
|
103
97
|
return this.name.length;
|
|
104
98
|
},
|
|
105
99
|
isCaptchaTest(): boolean {
|
|
106
|
-
return
|
|
100
|
+
return state.generalParameters.isCaptchaTest as boolean;
|
|
107
101
|
},
|
|
108
102
|
},
|
|
109
103
|
|
|
@@ -111,9 +105,13 @@ export default defineComponent({
|
|
|
111
105
|
this.initAuthenticatedName();
|
|
112
106
|
},
|
|
113
107
|
methods: {
|
|
114
|
-
initAuthenticatedName():void{
|
|
115
|
-
if (!this.authProfile?.userId) {
|
|
116
|
-
|
|
108
|
+
initAuthenticatedName(): void {
|
|
109
|
+
if (!this.authProfile?.userId) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
this.name = `${this.authProfile?.firstname || ""} ${
|
|
113
|
+
this.authProfile?.lastname || ""
|
|
114
|
+
}`.trim();
|
|
117
115
|
this.isVerify = true;
|
|
118
116
|
},
|
|
119
117
|
async handleSuccess(token: string) {
|
|
@@ -126,17 +124,19 @@ export default defineComponent({
|
|
|
126
124
|
},
|
|
127
125
|
async submit(): Promise<void> {
|
|
128
126
|
if (!this.isVerify && !this.isCaptchaTest) {
|
|
129
|
-
return (
|
|
127
|
+
return (
|
|
128
|
+
this.$refs.invisibleRecaptcha as InstanceType<typeof VueRecaptcha>
|
|
129
|
+
).execute();
|
|
130
130
|
}
|
|
131
131
|
this.sendComment();
|
|
132
132
|
},
|
|
133
133
|
closePopup(): void {
|
|
134
|
-
this.$emit(
|
|
134
|
+
this.$emit("close");
|
|
135
135
|
},
|
|
136
136
|
sendComment(): void {
|
|
137
137
|
this.sending = true;
|
|
138
|
-
this.$emit(
|
|
138
|
+
this.$emit("validate", this.name);
|
|
139
139
|
},
|
|
140
140
|
},
|
|
141
|
-
})
|
|
142
|
-
</script>
|
|
141
|
+
});
|
|
142
|
+
</script>
|
|
@@ -2,19 +2,22 @@
|
|
|
2
2
|
<div>
|
|
3
3
|
<div class="d-flex h6">
|
|
4
4
|
<strong
|
|
5
|
-
v-if="
|
|
5
|
+
v-if="
|
|
6
|
+
recordingInLive &&
|
|
7
|
+
('Live' === comment.phase || 'Prelive' === comment.phase)
|
|
8
|
+
"
|
|
6
9
|
class="recording-bg me-1 text-light p-1"
|
|
7
|
-
|
|
10
|
+
>{{ $t("Live") }}</strong
|
|
11
|
+
>
|
|
8
12
|
<strong
|
|
9
13
|
:id="'popover-comment' + comment.comId"
|
|
10
14
|
role="button"
|
|
11
15
|
tabindex="-1"
|
|
12
|
-
:class="editRight || isValid? 'c-hand-auto':'text-danger'"
|
|
16
|
+
:class="editRight || isValid ? 'c-hand-auto' : 'text-danger'"
|
|
13
17
|
class="me-2"
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
<Popover
|
|
18
|
+
>{{ comment.name }}</strong
|
|
19
|
+
>
|
|
20
|
+
<ClassicPopover
|
|
18
21
|
:disable="editRight || isValid"
|
|
19
22
|
:target="'popover-comment' + comment.comId"
|
|
20
23
|
:content="$t('Comment waiting')"
|
|
@@ -29,8 +32,8 @@
|
|
|
29
32
|
<div class="me-2">
|
|
30
33
|
{{ date }}
|
|
31
34
|
</div>
|
|
32
|
-
<span
|
|
33
|
-
v-if="editRight"
|
|
35
|
+
<span
|
|
36
|
+
v-if="editRight"
|
|
34
37
|
:class="'status-' + comment.status"
|
|
35
38
|
:data-selenium="'status-comment-' + seleniumFormat(comment.name)"
|
|
36
39
|
/>
|
|
@@ -42,30 +45,31 @@
|
|
|
42
45
|
v-if="comment.content.length > 300"
|
|
43
46
|
class="c-hand font-italic"
|
|
44
47
|
@click="summary = !summary"
|
|
45
|
-
|
|
48
|
+
>{{ readMore }}</a
|
|
49
|
+
>
|
|
46
50
|
</div>
|
|
47
51
|
</template>
|
|
48
52
|
|
|
49
53
|
<script lang="ts">
|
|
50
|
-
import selenium from
|
|
51
|
-
import displayMethods from
|
|
52
|
-
import { CommentPodcast } from
|
|
53
|
-
import dayjs from
|
|
54
|
-
import
|
|
55
|
-
import { defineComponent } from
|
|
54
|
+
import selenium from "../../mixins/selenium";
|
|
55
|
+
import displayMethods from "../../mixins/displayMethods";
|
|
56
|
+
import { CommentPodcast } from "@/stores/class/general/comment";
|
|
57
|
+
import dayjs from "dayjs";
|
|
58
|
+
import ClassicPopover from "../../misc/ClassicPopover.vue";
|
|
59
|
+
import { defineComponent } from "vue";
|
|
56
60
|
export default defineComponent({
|
|
57
|
-
name:
|
|
61
|
+
name: "CommentBasicView",
|
|
58
62
|
|
|
59
63
|
components: {
|
|
60
|
-
|
|
64
|
+
ClassicPopover,
|
|
61
65
|
},
|
|
62
66
|
|
|
63
|
-
mixins:[displayMethods, selenium],
|
|
67
|
+
mixins: [displayMethods, selenium],
|
|
64
68
|
|
|
65
69
|
props: {
|
|
66
|
-
comment: { default: ()=>({}), type: Object as ()=>CommentPodcast },
|
|
67
|
-
editRight: { default: false, type: Boolean},
|
|
68
|
-
recordingInLive: { default: false, type: Boolean},
|
|
70
|
+
comment: { default: () => ({}), type: Object as () => CommentPodcast },
|
|
71
|
+
editRight: { default: false, type: Boolean },
|
|
72
|
+
recordingInLive: { default: false, type: Boolean },
|
|
69
73
|
},
|
|
70
74
|
|
|
71
75
|
data() {
|
|
@@ -74,21 +78,25 @@ export default defineComponent({
|
|
|
74
78
|
};
|
|
75
79
|
},
|
|
76
80
|
computed: {
|
|
77
|
-
isValid(): boolean{
|
|
78
|
-
return
|
|
81
|
+
isValid(): boolean {
|
|
82
|
+
return "Valid" === this.comment.status;
|
|
79
83
|
},
|
|
80
84
|
date(): string {
|
|
81
|
-
return this.comment.date
|
|
85
|
+
return this.comment.date
|
|
86
|
+
? dayjs(this.comment.date).format("D MMMM YYYY HH[h]mm")
|
|
87
|
+
: "";
|
|
82
88
|
},
|
|
83
89
|
readMore(): string {
|
|
84
|
-
return this.summary ? this.$t(
|
|
90
|
+
return this.summary ? this.$t("Read more") : this.$t("Read less");
|
|
85
91
|
},
|
|
86
92
|
contentDisplay(): string {
|
|
87
|
-
if (!this.summary){
|
|
88
|
-
|
|
93
|
+
if (!this.summary) {
|
|
94
|
+
return this.comment.content;
|
|
95
|
+
}
|
|
96
|
+
if (!this.comment.content) return "";
|
|
89
97
|
if (this.comment.content.length <= 300) return this.comment.content;
|
|
90
|
-
return this.comment.content.substring(0, 300) +
|
|
98
|
+
return this.comment.content.substring(0, 300) + "...";
|
|
91
99
|
},
|
|
92
100
|
},
|
|
93
|
-
})
|
|
101
|
+
});
|
|
94
102
|
</script>
|
|
@@ -1,43 +1,35 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div
|
|
3
|
-
v-if="isPresent"
|
|
4
|
-
class="d-flex flex-column comment-input-container mt-3"
|
|
5
|
-
>
|
|
2
|
+
<div v-if="isPresent" class="d-flex flex-column comment-input-container mt-3">
|
|
6
3
|
<strong
|
|
7
4
|
v-if="knownIdentity && !editName"
|
|
8
5
|
class="h6 mt-1 c-hand"
|
|
9
6
|
@click="changeIdentity"
|
|
10
|
-
|
|
11
|
-
<div
|
|
12
|
-
v-if="editName"
|
|
13
|
-
class="d-flex"
|
|
7
|
+
>{{ knownIdentity }}</strong
|
|
14
8
|
>
|
|
9
|
+
<div v-if="editName" class="d-flex">
|
|
15
10
|
<div class="d-flex flex-column">
|
|
16
11
|
<input
|
|
17
12
|
v-model="temporaryName"
|
|
18
13
|
class="h6 mt-1"
|
|
19
14
|
type="text"
|
|
20
15
|
:class="{ 'border border-danger': 0 === countName || !validName }"
|
|
21
|
-
|
|
16
|
+
/>
|
|
22
17
|
<p
|
|
23
18
|
class="d-flex justify-content-end h6 mb-0"
|
|
24
19
|
:class="{ 'text-danger': !validName }"
|
|
25
20
|
>
|
|
26
|
-
{{ countName +
|
|
21
|
+
{{ countName + " / " + maxName }}
|
|
27
22
|
</p>
|
|
28
23
|
</div>
|
|
29
|
-
<button
|
|
30
|
-
|
|
31
|
-
@click="editName = false"
|
|
32
|
-
>
|
|
33
|
-
{{ $t('Cancel') }}
|
|
24
|
+
<button class="btn m-1" @click="editName = false">
|
|
25
|
+
{{ $t("Cancel") }}
|
|
34
26
|
</button>
|
|
35
27
|
<button
|
|
36
28
|
class="btn btn-primary m-1"
|
|
37
29
|
:disabled="0 === countName || !validName"
|
|
38
30
|
@click="validEdit"
|
|
39
31
|
>
|
|
40
|
-
{{ $t(
|
|
32
|
+
{{ $t("Validate") }}
|
|
41
33
|
</button>
|
|
42
34
|
</div>
|
|
43
35
|
<textarea
|
|
@@ -54,14 +46,11 @@
|
|
|
54
46
|
class="d-flex justify-content-end h6"
|
|
55
47
|
:class="{ 'text-danger': !validComment }"
|
|
56
48
|
>
|
|
57
|
-
{{ countComment +
|
|
49
|
+
{{ countComment + " / " + maxComment }}
|
|
58
50
|
</p>
|
|
59
51
|
<div class="d-flex justify-content-end mt-1">
|
|
60
|
-
<button
|
|
61
|
-
|
|
62
|
-
@mousedown="cancelAction"
|
|
63
|
-
>
|
|
64
|
-
{{ $t('Cancel') }}
|
|
52
|
+
<button class="btn me-2" @mousedown="cancelAction">
|
|
53
|
+
{{ $t("Cancel") }}
|
|
65
54
|
</button>
|
|
66
55
|
<button
|
|
67
56
|
class="btn btn-primary"
|
|
@@ -89,106 +78,122 @@
|
|
|
89
78
|
</template>
|
|
90
79
|
|
|
91
80
|
<script lang="ts">
|
|
92
|
-
import octopusApi from
|
|
93
|
-
import crudApi from
|
|
94
|
-
import cookies from
|
|
95
|
-
import { state } from
|
|
96
|
-
import { Podcast } from
|
|
97
|
-
import { Conference } from
|
|
98
|
-
import { CommentPodcast } from
|
|
99
|
-
import Constants from
|
|
100
|
-
import { usePlayerStore } from
|
|
101
|
-
import { useAuthStore } from
|
|
102
|
-
import { mapState } from
|
|
103
|
-
import { defineComponent, defineAsyncComponent } from
|
|
104
|
-
const AddCommentModal = defineAsyncComponent(
|
|
105
|
-
|
|
81
|
+
import octopusApi from "@saooti/octopus-api";
|
|
82
|
+
import crudApi from "@/api/classicCrud";
|
|
83
|
+
import cookies from "../../mixins/cookies";
|
|
84
|
+
import { state } from "../../../stores/ParamSdkStore";
|
|
85
|
+
import { Podcast } from "@/stores/class/general/podcast";
|
|
86
|
+
import { Conference } from "@/stores/class/conference/conference";
|
|
87
|
+
import { CommentPodcast } from "@/stores/class/general/comment";
|
|
88
|
+
import Constants from "../../../../public/config";
|
|
89
|
+
import { usePlayerStore } from "@/stores/PlayerStore";
|
|
90
|
+
import { useAuthStore } from "@/stores/AuthStore";
|
|
91
|
+
import { mapState } from "pinia";
|
|
92
|
+
import { defineComponent, defineAsyncComponent } from "vue";
|
|
93
|
+
const AddCommentModal = defineAsyncComponent(
|
|
94
|
+
() => import("./AddCommentModal.vue"),
|
|
95
|
+
);
|
|
96
|
+
const MessageModal = defineAsyncComponent(
|
|
97
|
+
() => import("../../misc/modal/MessageModal.vue"),
|
|
98
|
+
);
|
|
106
99
|
export default defineComponent({
|
|
107
|
-
name:
|
|
100
|
+
name: "CommentInput",
|
|
108
101
|
components: {
|
|
109
102
|
AddCommentModal,
|
|
110
103
|
MessageModal,
|
|
111
104
|
},
|
|
112
|
-
mixins:[cookies],
|
|
105
|
+
mixins: [cookies],
|
|
113
106
|
|
|
114
107
|
props: {
|
|
115
|
-
podcast: { default: undefined, type: Object as ()=>Podcast },
|
|
108
|
+
podcast: { default: undefined, type: Object as () => Podcast },
|
|
116
109
|
knownIdentity: { default: undefined, type: String },
|
|
117
110
|
focus: { default: false, type: Boolean },
|
|
118
|
-
comment: { default: undefined, type: Object as ()=>CommentPodcast },
|
|
119
|
-
fetchConference: { default: undefined, type: Object as ()=>Conference },
|
|
111
|
+
comment: { default: undefined, type: Object as () => CommentPodcast },
|
|
112
|
+
fetchConference: { default: undefined, type: Object as () => Conference },
|
|
120
113
|
},
|
|
121
|
-
emits: [
|
|
114
|
+
emits: ["update:knownIdentity", "cancelAction", "newComment"],
|
|
122
115
|
|
|
123
116
|
data() {
|
|
124
117
|
return {
|
|
125
|
-
newComment:
|
|
118
|
+
newComment: "" as string,
|
|
126
119
|
textareaFocus: false as boolean,
|
|
127
120
|
checkIdentityModal: false as boolean,
|
|
128
121
|
postError: false as boolean,
|
|
129
122
|
isOneLine: true as boolean,
|
|
130
123
|
editName: false as boolean,
|
|
131
|
-
temporaryName:
|
|
132
|
-
maxComment
|
|
133
|
-
maxName
|
|
124
|
+
temporaryName: "" as string,
|
|
125
|
+
maxComment: Constants.MAX_COMMENT as number,
|
|
126
|
+
maxName: Constants.MAX_COMMENT_NAME as number,
|
|
134
127
|
};
|
|
135
128
|
},
|
|
136
129
|
|
|
137
130
|
computed: {
|
|
138
|
-
...mapState(usePlayerStore, [
|
|
139
|
-
|
|
140
|
-
|
|
131
|
+
...mapState(usePlayerStore, [
|
|
132
|
+
"playerPodcast",
|
|
133
|
+
"playerLive",
|
|
134
|
+
"playerElapsed",
|
|
135
|
+
"playerTotal",
|
|
136
|
+
]),
|
|
137
|
+
...mapState(useAuthStore, ["authProfile"]),
|
|
138
|
+
validName(): boolean {
|
|
141
139
|
return this.countName <= this.maxName;
|
|
142
140
|
},
|
|
143
|
-
countName(): number{
|
|
141
|
+
countName(): number {
|
|
144
142
|
return this.temporaryName.length;
|
|
145
143
|
},
|
|
146
|
-
validComment(): boolean{
|
|
144
|
+
validComment(): boolean {
|
|
147
145
|
return this.countComment <= this.maxComment;
|
|
148
146
|
},
|
|
149
|
-
countComment(): number{
|
|
147
|
+
countComment(): number {
|
|
150
148
|
return this.newComment.length;
|
|
151
149
|
},
|
|
152
150
|
isPresent(): boolean {
|
|
153
151
|
if (!this.podcast) return true;
|
|
154
|
-
let podcastComment = this.podcast.annotations?.COMMENTS ??
|
|
155
|
-
let organisationComment =
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
(
|
|
159
|
-
|
|
160
|
-
|
|
152
|
+
let podcastComment = this.podcast.annotations?.COMMENTS ?? "INHERIT";
|
|
153
|
+
let organisationComment =
|
|
154
|
+
this.podcast.organisation.comments ?? "LIVE_ONLY";
|
|
155
|
+
return !(
|
|
156
|
+
("LIVE_ONLY" === podcastComment &&
|
|
157
|
+
"READY_TO_RECORD" !== this.podcast.processingStatus) ||
|
|
158
|
+
("INHERIT" === podcastComment &&
|
|
159
|
+
"LIVE_ONLY" === organisationComment &&
|
|
160
|
+
"READY_TO_RECORD" !== this.podcast.processingStatus)
|
|
161
|
+
);
|
|
161
162
|
},
|
|
162
163
|
placeholder(): string {
|
|
163
|
-
return this.comment?.comId
|
|
164
|
+
return this.comment?.comId
|
|
165
|
+
? this.$t("Answer a comment")
|
|
166
|
+
: this.$t("Write a comment");
|
|
164
167
|
},
|
|
165
168
|
isCertified(): boolean {
|
|
166
|
-
return (
|
|
167
|
-
state.generalParameters.
|
|
168
|
-
|
|
169
|
+
return (
|
|
170
|
+
(true === state.generalParameters.isCommments &&
|
|
171
|
+
state.generalParameters.organisationId === this.podcastOrga) ||
|
|
172
|
+
true === state.generalParameters.isAdmin
|
|
173
|
+
);
|
|
169
174
|
},
|
|
170
|
-
phase(): string|undefined {
|
|
171
|
-
if(undefined === this.podcast){
|
|
175
|
+
phase(): string | undefined {
|
|
176
|
+
if (undefined === this.podcast) {
|
|
172
177
|
return this.comment ? this.comment.phase : undefined;
|
|
173
178
|
}
|
|
174
179
|
if (
|
|
175
180
|
!this.podcast.conferenceId ||
|
|
176
181
|
0 === this.podcast.conferenceId ||
|
|
177
|
-
|
|
182
|
+
"READY_TO_RECORD" !== this.podcast.processingStatus
|
|
178
183
|
)
|
|
179
|
-
return
|
|
184
|
+
return "Podcast";
|
|
180
185
|
if (
|
|
181
186
|
this.fetchConference &&
|
|
182
|
-
(
|
|
183
|
-
|
|
187
|
+
("PLANNED" === this.fetchConference.status ||
|
|
188
|
+
"PENDING" === this.fetchConference.status)
|
|
184
189
|
)
|
|
185
|
-
return
|
|
186
|
-
return
|
|
190
|
+
return "Prelive";
|
|
191
|
+
return "Live";
|
|
187
192
|
},
|
|
188
|
-
podcastOrga(): string|undefined{
|
|
189
|
-
const commentOrga = this.comment?.organisationId ??
|
|
193
|
+
podcastOrga(): string | undefined {
|
|
194
|
+
const commentOrga = this.comment?.organisationId ?? "";
|
|
190
195
|
return this.podcast?.organisation.id ?? commentOrga;
|
|
191
|
-
}
|
|
196
|
+
},
|
|
192
197
|
},
|
|
193
198
|
watch: {
|
|
194
199
|
textareaFocus(): void {
|
|
@@ -204,25 +209,29 @@ export default defineComponent({
|
|
|
204
209
|
(this.$refs.textarea as HTMLElement).clientWidth -
|
|
205
210
|
this.inputExceeded(
|
|
206
211
|
this.newComment,
|
|
207
|
-
|
|
212
|
+
"18px Montserrat, sans-serif, Helvetica Neue",
|
|
208
213
|
) >
|
|
209
214
|
padding;
|
|
210
215
|
},
|
|
211
216
|
},
|
|
212
217
|
methods: {
|
|
213
218
|
changeIdentity(): void {
|
|
214
|
-
if(!this.knownIdentity){
|
|
219
|
+
if (!this.knownIdentity) {
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
215
222
|
this.temporaryName = this.knownIdentity;
|
|
216
223
|
this.editName = true;
|
|
217
224
|
},
|
|
218
225
|
validEdit(): void {
|
|
219
|
-
this.setCookie(
|
|
220
|
-
this.$emit(
|
|
226
|
+
this.setCookie("comment-octopus-name", this.temporaryName);
|
|
227
|
+
this.$emit("update:knownIdentity", this.temporaryName);
|
|
221
228
|
this.editName = false;
|
|
222
229
|
},
|
|
223
230
|
inputExceeded(text: string, font: string): number {
|
|
224
|
-
const context = document.createElement(
|
|
225
|
-
if(null === context){
|
|
231
|
+
const context = document.createElement("canvas").getContext("2d");
|
|
232
|
+
if (null === context) {
|
|
233
|
+
return 0;
|
|
234
|
+
}
|
|
226
235
|
context.font = font;
|
|
227
236
|
return context.measureText(text).width;
|
|
228
237
|
},
|
|
@@ -234,40 +243,38 @@ export default defineComponent({
|
|
|
234
243
|
}
|
|
235
244
|
},
|
|
236
245
|
cancelAction(): void {
|
|
237
|
-
this.$emit(
|
|
246
|
+
this.$emit("cancelAction");
|
|
238
247
|
},
|
|
239
|
-
defineTimelineValue(): number{
|
|
240
|
-
let timeline = 0;
|
|
248
|
+
defineTimelineValue(): number {
|
|
249
|
+
let timeline = 0;
|
|
241
250
|
if (
|
|
242
|
-
undefined !== this.podcast &&
|
|
243
|
-
(this.playerPodcast?.podcastId ===this.podcast.podcastId
|
|
244
|
-
|
|
251
|
+
undefined !== this.podcast &&
|
|
252
|
+
(this.playerPodcast?.podcastId === this.podcast.podcastId ||
|
|
253
|
+
this.playerLive?.podcastId === this.podcast.podcastId)
|
|
245
254
|
) {
|
|
246
|
-
timeline = Math.round(
|
|
247
|
-
this.playerElapsed * this.playerTotal
|
|
248
|
-
);
|
|
255
|
+
timeline = Math.round(this.playerElapsed * this.playerTotal);
|
|
249
256
|
if (this.podcast.duration && this.playerPodcast) {
|
|
250
257
|
timeline = Math.round(
|
|
251
|
-
timeline - (this.playerTotal - this.podcast.duration / 1000)
|
|
258
|
+
timeline - (this.playerTotal - this.podcast.duration / 1000),
|
|
252
259
|
);
|
|
253
260
|
}
|
|
254
261
|
}
|
|
255
|
-
return timeline < 0? 0 : timeline;
|
|
262
|
+
return timeline < 0 ? 0 : timeline;
|
|
256
263
|
},
|
|
257
264
|
async postComment(name?: string): Promise<void> {
|
|
258
265
|
if (name) {
|
|
259
|
-
this.setCookie(
|
|
260
|
-
this.$emit(
|
|
266
|
+
this.setCookie("comment-octopus-name", name);
|
|
267
|
+
this.$emit("update:knownIdentity", name);
|
|
261
268
|
}
|
|
262
|
-
const sendName = name??this.knownIdentity;
|
|
269
|
+
const sendName = name ?? this.knownIdentity;
|
|
263
270
|
const commentPodcastId = this.comment?.podcastId ?? 0;
|
|
264
271
|
const comment: CommentPodcast = {
|
|
265
272
|
content: this.newComment,
|
|
266
|
-
name: sendName ??
|
|
273
|
+
name: sendName ?? "",
|
|
267
274
|
podcastId: this.podcast?.podcastId ?? commentPodcastId,
|
|
268
275
|
timeline: this.defineTimelineValue(),
|
|
269
276
|
organisationId: this.podcastOrga,
|
|
270
|
-
commentIdReferer:this.comment?.comId,
|
|
277
|
+
commentIdReferer: this.comment?.comId,
|
|
271
278
|
certified: this.isCertified,
|
|
272
279
|
userId: this.authProfile?.userId,
|
|
273
280
|
phase: this.phase,
|
|
@@ -275,25 +282,33 @@ export default defineComponent({
|
|
|
275
282
|
try {
|
|
276
283
|
let data;
|
|
277
284
|
if (this.isCertified) {
|
|
278
|
-
comment.status =
|
|
279
|
-
data = await crudApi.postData<CommentPodcast>(
|
|
285
|
+
comment.status = "Valid";
|
|
286
|
+
data = await crudApi.postData<CommentPodcast>(
|
|
287
|
+
2,
|
|
288
|
+
"registeredComment/" + comment.userId,
|
|
289
|
+
{ ...comment, ...{ userId: undefined } },
|
|
290
|
+
);
|
|
280
291
|
} else {
|
|
281
|
-
data = await octopusApi.postDataPublic<CommentPodcast>(
|
|
292
|
+
data = await octopusApi.postDataPublic<CommentPodcast>(
|
|
293
|
+
2,
|
|
294
|
+
"unregisteredComment",
|
|
295
|
+
comment,
|
|
296
|
+
);
|
|
282
297
|
}
|
|
283
|
-
this.$emit(
|
|
284
|
-
this.newComment =
|
|
298
|
+
this.$emit("newComment", data);
|
|
299
|
+
this.newComment = "";
|
|
285
300
|
} catch (error) {
|
|
286
301
|
this.postError = true;
|
|
287
302
|
}
|
|
288
303
|
this.checkIdentityModal = false;
|
|
289
304
|
},
|
|
290
305
|
},
|
|
291
|
-
})
|
|
306
|
+
});
|
|
292
307
|
</script>
|
|
293
308
|
|
|
294
309
|
<style lang="scss">
|
|
295
|
-
@import
|
|
296
|
-
.octopus-app{
|
|
310
|
+
@import "@scss/_variables.scss";
|
|
311
|
+
.octopus-app {
|
|
297
312
|
.comment-input-container {
|
|
298
313
|
textarea::placeholder {
|
|
299
314
|
color: $octopus-primary-color;
|
|
@@ -310,10 +325,10 @@ export default defineComponent({
|
|
|
310
325
|
box-shadow: unset !important;
|
|
311
326
|
background: transparent !important;
|
|
312
327
|
height: 50px;
|
|
313
|
-
&.short{
|
|
328
|
+
&.short {
|
|
314
329
|
max-height: 38px;
|
|
315
330
|
}
|
|
316
331
|
}
|
|
317
332
|
}
|
|
318
333
|
}
|
|
319
|
-
</style>
|
|
334
|
+
</style>
|