@saooti/octopus-sdk 39.3.15 → 39.3.16
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/index.ts +1 -0
- package/package.json +1 -1
- package/src/App.vue +1 -1
- package/src/components/display/categories/CategoryList.vue +1 -2
- package/src/components/display/comments/CommentInput.vue +4 -0
- package/src/components/display/comments/CommentList.vue +1 -0
- package/src/components/display/comments/item/CommentMoreActions.vue +1 -1
- package/src/components/display/comments/modal/EditCommentModal.vue +2 -14
- package/src/components/display/filter/AdvancedSearch.vue +3 -2
- package/src/components/display/podcasts/PodcastModuleBox.vue +5 -0
- package/src/components/display/podcasts/PodcastPlannedSpinner.vue +93 -0
- package/src/components/display/rubriques/RubriqueList.vue +0 -2
- package/src/components/display/sharing/SharePlayer.vue +3 -2
- package/src/components/display/sharing/SubscribeButtons.vue +0 -1
- package/src/components/form/ClassicEmojiPicker.vue +29 -17
- package/src/components/misc/ClassicPopover.vue +46 -8
- package/src/components/misc/HomeDropdown.vue +1 -0
- package/src/components/misc/MobileMenu.vue +1 -0
- package/src/components/misc/ProgressBar.vue +2 -0
- package/src/components/misc/TopBar.vue +0 -5
- package/src/components/misc/TopBarMainContent.vue +11 -9
- package/src/components/misc/player/elements/PlayerSpeedButton.vue +1 -1
- package/src/components/mixins/podcast/podcastView.ts +3 -0
- package/src/components/pages/EmissionPage.vue +1 -9
- package/src/components/pages/EmissionsPage.vue +0 -8
- package/src/components/pages/MapPage.vue +1 -2
- package/src/components/pages/PlaylistPage.vue +0 -2
- package/src/components/pages/PodcastPage.vue +47 -27
- package/src/components/pages/PodcastsPage.vue +0 -2
- package/src/locale/de.ts +1 -0
- package/src/locale/en.ts +1 -0
- package/src/locale/es.ts +1 -0
- package/src/locale/fr.ts +1 -0
- package/src/locale/it.ts +1 -0
- package/src/locale/sl.ts +1 -0
- package/proxy.ts +0 -133
package/index.ts
CHANGED
|
@@ -16,6 +16,7 @@ export const getError403Page = () => import("./src/components/pages/Error403Page
|
|
|
16
16
|
export const getRadio = () => import("./src/components/pages/RadioPage.vue");
|
|
17
17
|
export const getVideo = () => import("./src/components/pages/VideoPage.vue");
|
|
18
18
|
export const getMapPage= () => import("./src/components/pages/MapPage.vue");
|
|
19
|
+
export const getPageNotFound= () => import("./src/components/pages/PageNotFound.vue");
|
|
19
20
|
|
|
20
21
|
//Misc
|
|
21
22
|
export const getAccordion = () => import("./src/components/misc/ClassicAccordion.vue");
|
package/package.json
CHANGED
package/src/App.vue
CHANGED
|
@@ -25,14 +25,13 @@
|
|
|
25
25
|
<ClassicPopover
|
|
26
26
|
target="categories-dropdown"
|
|
27
27
|
:only-click="true"
|
|
28
|
-
:is-fixed="true"
|
|
29
28
|
:left-pos="true"
|
|
30
|
-
class="popover-z-index"
|
|
31
29
|
>
|
|
32
30
|
<button
|
|
33
31
|
v-for="category in hidenCategories"
|
|
34
32
|
:key="category.id"
|
|
35
33
|
class="me-3 octopus-dropdown-item"
|
|
34
|
+
@keydown.enter="checkIfFilter(category)"
|
|
36
35
|
@mousedown="checkIfFilter(category)"
|
|
37
36
|
>
|
|
38
37
|
{{ category.name }}
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
/>
|
|
11
11
|
<div v-if="isTextareaActive" class="d-flex justify-content-between mt-1">
|
|
12
12
|
<ClassicEmojiPicker
|
|
13
|
+
:id="uniqueId"
|
|
13
14
|
popover-relative-class="page-element"
|
|
14
15
|
@emoji-selected="addEmojiSelected"
|
|
15
16
|
/>
|
|
@@ -123,6 +124,9 @@ export default defineComponent({
|
|
|
123
124
|
? this.$t("Answer a comment")
|
|
124
125
|
: this.$t("Write a comment");
|
|
125
126
|
},
|
|
127
|
+
uniqueId(){
|
|
128
|
+
return "-comment"+(this.inAnswerComment?.commentId??"-parent");
|
|
129
|
+
}
|
|
126
130
|
},
|
|
127
131
|
watch: {
|
|
128
132
|
focus(): void {
|
|
@@ -35,7 +35,6 @@
|
|
|
35
35
|
</button>
|
|
36
36
|
<ClassicPopover
|
|
37
37
|
:target="'comment-dropdown' + comment.commentId"
|
|
38
|
-
popover-class="popover-z-index"
|
|
39
38
|
:only-click="true"
|
|
40
39
|
:left-pos="true"
|
|
41
40
|
>
|
|
@@ -44,6 +43,7 @@
|
|
|
44
43
|
v-if="action.condition"
|
|
45
44
|
class="octopus-dropdown-item c-hand"
|
|
46
45
|
@mousedown="action.actionClick"
|
|
46
|
+
@keydown.enter="action.actionClick"
|
|
47
47
|
>
|
|
48
48
|
{{ action.title }}
|
|
49
49
|
</button>
|
|
@@ -10,13 +10,6 @@
|
|
|
10
10
|
:error-text="errorUpdate ? $t(`An error occurred`) : undefined"
|
|
11
11
|
/>
|
|
12
12
|
<template v-if="!inProcessing && !errorUpdate">
|
|
13
|
-
<ClassicInputText
|
|
14
|
-
v-model:text-init="name"
|
|
15
|
-
v-model:error-variable="errorName"
|
|
16
|
-
input-id="username-input"
|
|
17
|
-
:label="$t('Your name')"
|
|
18
|
-
:max-length="MAX_NAME"
|
|
19
|
-
/>
|
|
20
13
|
<ClassicInputText
|
|
21
14
|
v-model:text-init="commentText"
|
|
22
15
|
v-model:error-variable="errorCommentText"
|
|
@@ -26,7 +19,7 @@
|
|
|
26
19
|
:error-text="$t('Please provide a comment')"
|
|
27
20
|
:is-textarea="true"
|
|
28
21
|
:is-emoji-picker="true"
|
|
29
|
-
|
|
22
|
+
popover-relative-class="octopus-modal"
|
|
30
23
|
:focus="true"
|
|
31
24
|
/>
|
|
32
25
|
<ClassicSelect
|
|
@@ -49,7 +42,7 @@
|
|
|
49
42
|
</button>
|
|
50
43
|
<button
|
|
51
44
|
class="btn btn-primary m-1"
|
|
52
|
-
:disabled="
|
|
45
|
+
:disabled="errorCommentText"
|
|
53
46
|
@click="onEditComment"
|
|
54
47
|
>
|
|
55
48
|
{{ $t("Yes") }}
|
|
@@ -97,10 +90,7 @@ export default defineComponent({
|
|
|
97
90
|
data() {
|
|
98
91
|
return {
|
|
99
92
|
MAX_DESCRIPTION: Constants.MAX_COMMENT as number,
|
|
100
|
-
MAX_NAME: Constants.MAX_COMMENT_NAME as number,
|
|
101
|
-
name: undefined as string | undefined,
|
|
102
93
|
commentText: undefined as string | undefined,
|
|
103
|
-
errorName: true as boolean,
|
|
104
94
|
errorCommentText: true as boolean,
|
|
105
95
|
commentState: "PENDING" as string,
|
|
106
96
|
errorUpdate: false as boolean,
|
|
@@ -115,7 +105,6 @@ export default defineComponent({
|
|
|
115
105
|
if (!this.comment) {
|
|
116
106
|
return;
|
|
117
107
|
}
|
|
118
|
-
this.name = this.comment.poster.userName;
|
|
119
108
|
this.commentText = this.comment.content;
|
|
120
109
|
this.commentState = this.comment.state;
|
|
121
110
|
},
|
|
@@ -131,7 +120,6 @@ export default defineComponent({
|
|
|
131
120
|
dataToSend: {
|
|
132
121
|
commentId: this.comment.commentId,
|
|
133
122
|
content: this.commentText,
|
|
134
|
-
name: this.name,
|
|
135
123
|
state: this.commentState,
|
|
136
124
|
},
|
|
137
125
|
isNotAuth: !this.editRight,
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
{{ $t("Filter") }}
|
|
18
18
|
</div>
|
|
19
19
|
<MonetizableFilter
|
|
20
|
-
v-if="!isPodcastmaker && !
|
|
20
|
+
v-if="!isPodcastmaker && !platformEducation"
|
|
21
21
|
:is-emission="isEmission"
|
|
22
22
|
:monetisable="monetisable"
|
|
23
23
|
@update:monetisable="updateMonetisable"
|
|
@@ -82,6 +82,7 @@ import { rubriquesFilterParam } from "../../mixins/routeParam/rubriquesFilterPar
|
|
|
82
82
|
import { RubriquageFilter } from "@/stores/class/rubrique/rubriquageFilter";
|
|
83
83
|
import { defineComponent, defineAsyncComponent } from "vue";
|
|
84
84
|
import { mapState } from "pinia";
|
|
85
|
+
import { useGeneralStore } from "../../../stores/GeneralStore";
|
|
85
86
|
const MonetizableFilter = defineAsyncComponent(
|
|
86
87
|
() => import("./MonetizableFilter.vue"),
|
|
87
88
|
);
|
|
@@ -110,7 +111,6 @@ export default defineComponent({
|
|
|
110
111
|
props: {
|
|
111
112
|
organisationId: { default: undefined, type: String },
|
|
112
113
|
isEmission: { default: false, type: Boolean },
|
|
113
|
-
isEducation: { default: false, type: Boolean },
|
|
114
114
|
includeHidden: { default: false, type: Boolean },
|
|
115
115
|
sort: { default: "DATE", type: String },
|
|
116
116
|
onlyVideo: { default: false, type: Boolean },
|
|
@@ -145,6 +145,7 @@ export default defineComponent({
|
|
|
145
145
|
},
|
|
146
146
|
|
|
147
147
|
computed: {
|
|
148
|
+
...mapState(useGeneralStore, ["platformEducation"]),
|
|
148
149
|
...mapState(useFilterStore, ["filterIab", "filterRubrique"]),
|
|
149
150
|
...mapState(useAuthStore, [
|
|
150
151
|
"isRoleProduction",
|
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
<h2 class="mb-3">
|
|
33
33
|
{{ podcast.title }}
|
|
34
34
|
</h2>
|
|
35
|
+
<PodcastPlannedSpinner v-if="isPlannedInProcessor"/>
|
|
35
36
|
<Countdown v-if="isCounter" :time-remaining="timeRemaining" />
|
|
36
37
|
<!-- eslint-disable vue/no-v-html -->
|
|
37
38
|
<div
|
|
@@ -175,6 +176,9 @@ const LikeSection = defineAsyncComponent(
|
|
|
175
176
|
const DownloadPodcastButton = defineAsyncComponent(
|
|
176
177
|
() => import("./DownloadPodcastButton.vue"),
|
|
177
178
|
);
|
|
179
|
+
const PodcastPlannedSpinner = defineAsyncComponent(
|
|
180
|
+
() => import("./PodcastPlannedSpinner.vue"),
|
|
181
|
+
);
|
|
178
182
|
const Countdown = defineAsyncComponent(() => import("../live/CountDown.vue"));
|
|
179
183
|
const TagList = defineAsyncComponent(() => import("./TagList.vue"));
|
|
180
184
|
import resizePhone from "../../mixins/resizePhone";
|
|
@@ -195,6 +199,7 @@ export default defineComponent({
|
|
|
195
199
|
PodcastRawTranscript,
|
|
196
200
|
DownloadPodcastButton,
|
|
197
201
|
NewspaperVariantOutlineIcon,
|
|
202
|
+
PodcastPlannedSpinner
|
|
198
203
|
},
|
|
199
204
|
|
|
200
205
|
mixins: [displayMethods, orgaComputed, resizePhone, podcastView],
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="processing-planned-spinner d-flex align-items-center my-2 bg-secondary p-3">
|
|
3
|
+
<div class="cube">
|
|
4
|
+
<div class="side"></div>
|
|
5
|
+
<div class="side"></div>
|
|
6
|
+
<div class="side"></div>
|
|
7
|
+
<div class="side"></div>
|
|
8
|
+
<div class="side"></div>
|
|
9
|
+
<div class="side"></div>
|
|
10
|
+
</div>
|
|
11
|
+
<div class="fw-bold">{{$t('The episode is being processed')}}</div>
|
|
12
|
+
</div>
|
|
13
|
+
</template>
|
|
14
|
+
|
|
15
|
+
<script lang="ts">
|
|
16
|
+
import { defineComponent } from "vue";
|
|
17
|
+
export default defineComponent({
|
|
18
|
+
name: "PodcastPlannedSpinner",
|
|
19
|
+
});
|
|
20
|
+
</script>
|
|
21
|
+
<style lang="scss">
|
|
22
|
+
@use "@scss/variables" as octopusVariables;
|
|
23
|
+
.octopus-app .processing-planned-spinner{
|
|
24
|
+
.cube {
|
|
25
|
+
margin-right:1rem;
|
|
26
|
+
font-size: 24px;
|
|
27
|
+
height: 1em;
|
|
28
|
+
width: 1em;
|
|
29
|
+
position: relative;
|
|
30
|
+
transform: rotatex(30deg) rotatey(45deg);
|
|
31
|
+
transform-style: preserve-3d;
|
|
32
|
+
animation: cube-spin 2.5s infinite ease-in-out alternate;
|
|
33
|
+
}
|
|
34
|
+
.side {
|
|
35
|
+
position: absolute;
|
|
36
|
+
top: 0;
|
|
37
|
+
bottom: 0;
|
|
38
|
+
left: 0;
|
|
39
|
+
right: 0;
|
|
40
|
+
transform-style: preserve-3d;
|
|
41
|
+
}
|
|
42
|
+
.side::before {
|
|
43
|
+
content: "";
|
|
44
|
+
position: absolute;
|
|
45
|
+
top: 0;
|
|
46
|
+
bottom: 0;
|
|
47
|
+
left: 0;
|
|
48
|
+
right: 0;
|
|
49
|
+
background-color: octopusVariables.$octopus-primary-color;
|
|
50
|
+
transform: translatez(0.5em);
|
|
51
|
+
animation: cube-explode 1.5s infinite ease-in-out;
|
|
52
|
+
opacity: 0.5;
|
|
53
|
+
}
|
|
54
|
+
.side:nth-child(1) {
|
|
55
|
+
transform: rotatey(90deg);
|
|
56
|
+
}
|
|
57
|
+
.side:nth-child(2) {
|
|
58
|
+
transform: rotatey(180deg);
|
|
59
|
+
}
|
|
60
|
+
.side:nth-child(3) {
|
|
61
|
+
transform: rotatey(270deg);
|
|
62
|
+
}
|
|
63
|
+
.side:nth-child(4) {
|
|
64
|
+
transform: rotatey(360deg);
|
|
65
|
+
}
|
|
66
|
+
.side:nth-child(5) {
|
|
67
|
+
transform: rotatex(90deg);
|
|
68
|
+
}
|
|
69
|
+
.side:nth-child(6) {
|
|
70
|
+
transform: rotatex(270deg);
|
|
71
|
+
}
|
|
72
|
+
@keyframes cube-spin {
|
|
73
|
+
0% {
|
|
74
|
+
transform: rotatex(30deg) rotatey(45deg);
|
|
75
|
+
}
|
|
76
|
+
100% {
|
|
77
|
+
transform: rotatex(30deg) rotatey(405deg);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
@keyframes cube-explode {
|
|
81
|
+
0% {
|
|
82
|
+
transform: translatez(0.5em);
|
|
83
|
+
}
|
|
84
|
+
50% {
|
|
85
|
+
transform: translatez(0.75em);
|
|
86
|
+
}
|
|
87
|
+
100% {
|
|
88
|
+
transform: translatez(0.5em);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
}
|
|
93
|
+
</style>
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
{{ $t("Embed") }}
|
|
6
6
|
</h3>
|
|
7
7
|
<div
|
|
8
|
-
v-if="noAd && !
|
|
8
|
+
v-if="noAd && !platformEducation"
|
|
9
9
|
class="sticker"
|
|
10
10
|
:title="$t('You cannot insert advertising')"
|
|
11
11
|
>
|
|
@@ -95,6 +95,7 @@ import { useApiStore } from "../../../stores/ApiStore";
|
|
|
95
95
|
import { useSaveFetchStore } from "../../../stores/SaveFetchStore";
|
|
96
96
|
import { mapState, mapActions } from "pinia";
|
|
97
97
|
import { defineComponent, defineAsyncComponent } from "vue";
|
|
98
|
+
import { useGeneralStore } from "../../../stores/GeneralStore";
|
|
98
99
|
const ShareModalPlayer = defineAsyncComponent(
|
|
99
100
|
() => import("../../misc/modal/ShareModalPlayer.vue"),
|
|
100
101
|
);
|
|
@@ -123,7 +124,6 @@ export default defineComponent({
|
|
|
123
124
|
emission: { default: undefined, type: Object as () => Emission },
|
|
124
125
|
playlist: { default: undefined, type: Object as () => Playlist },
|
|
125
126
|
organisationId: { default: undefined, type: String },
|
|
126
|
-
isEducation: { default: false, type: Boolean },
|
|
127
127
|
exclusive: { default: false, type: Boolean },
|
|
128
128
|
notExclusive: { default: true, type: Boolean },
|
|
129
129
|
},
|
|
@@ -151,6 +151,7 @@ export default defineComponent({
|
|
|
151
151
|
},
|
|
152
152
|
|
|
153
153
|
computed: {
|
|
154
|
+
...mapState(useGeneralStore, ["platformEducation"]),
|
|
154
155
|
...mapState(useAuthStore, ["authOrgaId"]),
|
|
155
156
|
...mapState(useApiStore, ["miniplayerUrl"]),
|
|
156
157
|
authenticated(): boolean {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="classic-emoji-picker">
|
|
2
|
+
<div v-if="!isPhone" class="classic-emoji-picker">
|
|
3
3
|
<button
|
|
4
|
-
id="emoji-picker-dropdown"
|
|
4
|
+
:id="'emoji-picker-dropdown'+id"
|
|
5
5
|
ref="emojiButton"
|
|
6
6
|
class="btn btn-transparent d-flex align-items-center justify-content-center"
|
|
7
7
|
:title="$t('Pick your emoji')"
|
|
@@ -9,12 +9,13 @@
|
|
|
9
9
|
<EmoticonExcitedOutlineIcon :size="34" />
|
|
10
10
|
</button>
|
|
11
11
|
<ClassicPopover
|
|
12
|
-
target="emoji-picker-dropdown"
|
|
12
|
+
:target="'emoji-picker-dropdown'+id"
|
|
13
13
|
:only-click="true"
|
|
14
14
|
:is-fixed="true"
|
|
15
|
-
:top-
|
|
15
|
+
:is-top-layer="isTopPosition"
|
|
16
|
+
:top-pos="isTopPosition"
|
|
16
17
|
:relative-class="popoverRelativeClass"
|
|
17
|
-
popover-class="popover-z-index"
|
|
18
|
+
:popover-class="isTopPosition?'popover-z-index':''"
|
|
18
19
|
>
|
|
19
20
|
<Picker
|
|
20
21
|
:data="emojiIndex"
|
|
@@ -27,6 +28,7 @@
|
|
|
27
28
|
</template>
|
|
28
29
|
|
|
29
30
|
<script lang="ts">
|
|
31
|
+
import resizePhone from "../mixins/resizePhone";
|
|
30
32
|
import EmoticonExcitedOutlineIcon from "vue-material-design-icons/EmoticonExcitedOutline.vue";
|
|
31
33
|
import ClassicPopover from "../misc/ClassicPopover.vue";
|
|
32
34
|
import data from "emoji-mart-vue-fast/data/all.json";
|
|
@@ -41,31 +43,41 @@ export default defineComponent({
|
|
|
41
43
|
ClassicPopover,
|
|
42
44
|
EmoticonExcitedOutlineIcon,
|
|
43
45
|
},
|
|
46
|
+
mixins:[resizePhone],
|
|
44
47
|
props: {
|
|
45
48
|
popoverRelativeClass: { default: undefined, type: String },
|
|
46
49
|
isTopPosition: { default: false, type: Boolean },
|
|
50
|
+
id: { default: "", type: String },
|
|
47
51
|
},
|
|
48
52
|
emits: ["emojiSelected"],
|
|
49
53
|
|
|
50
54
|
data() {
|
|
51
55
|
return {
|
|
52
56
|
emojiIndex: emojiIndex,
|
|
53
|
-
hasPlaceAboveButton:
|
|
57
|
+
/* hasPlaceAboveButton: false as boolean, */
|
|
58
|
+
isPhone: false as boolean,
|
|
54
59
|
};
|
|
55
60
|
},
|
|
56
|
-
computed: {
|
|
61
|
+
/* computed: {
|
|
57
62
|
isReallyTopPosition(): boolean {
|
|
58
63
|
return this.isTopPosition && this.hasPlaceAboveButton;
|
|
59
64
|
},
|
|
60
|
-
},
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
65
|
+
}, */
|
|
66
|
+
/* watch:{
|
|
67
|
+
isPhone: {
|
|
68
|
+
immediate: true,
|
|
69
|
+
async handler() {
|
|
70
|
+
debugger;
|
|
71
|
+
if (!this.isPhone && this.isTopPosition && this.$refs.emojiButton) {
|
|
72
|
+
this.hasPlaceAboveButton =
|
|
73
|
+
(this.$refs.emojiButton as HTMLButtonElement).getBoundingClientRect()
|
|
74
|
+
.top +
|
|
75
|
+
window.scrollY >
|
|
76
|
+
450;
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
}, */
|
|
70
81
|
});
|
|
71
82
|
</script>
|
|
83
|
+
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div
|
|
3
|
-
v-show="
|
|
3
|
+
v-show="displayPopover"
|
|
4
4
|
:id="'popover' + target"
|
|
5
5
|
ref="popover"
|
|
6
|
+
popover
|
|
6
7
|
tabindex="0"
|
|
7
|
-
role="dialog"
|
|
8
8
|
class="octopus-popover"
|
|
9
|
-
:class="[
|
|
9
|
+
:class="[
|
|
10
|
+
displayPopover ? 'd-block': '',
|
|
11
|
+
onlyClick ? 'octopus-dropdown' : '',
|
|
12
|
+
isFixed && isTopLayerPopover ? 'position-fixed':'position-absolute',
|
|
13
|
+
popoverClass]"
|
|
10
14
|
:style="positionInlineStyle"
|
|
11
15
|
@focusout="clearDataBlur"
|
|
12
16
|
@mouseenter="overPopover = true"
|
|
@@ -40,6 +44,7 @@ export default defineComponent({
|
|
|
40
44
|
leftPos: { type: Boolean, default: false },
|
|
41
45
|
topPos: { type: Boolean, default: false },
|
|
42
46
|
popoverClass: { type: String, default: undefined },
|
|
47
|
+
isTopLayer: { type: Boolean, default: false },
|
|
43
48
|
},
|
|
44
49
|
emits: ["updateVisibility"],
|
|
45
50
|
data() {
|
|
@@ -51,7 +56,8 @@ export default defineComponent({
|
|
|
51
56
|
targetElement: null as HTMLElement | null,
|
|
52
57
|
overPopover: false as boolean,
|
|
53
58
|
isTabAction: false as boolean,
|
|
54
|
-
maxHeight: '80vh' as string
|
|
59
|
+
maxHeight: '80vh' as string,
|
|
60
|
+
clearTimeout: undefined as ReturnType<typeof setTimeout> | undefined,
|
|
55
61
|
};
|
|
56
62
|
},
|
|
57
63
|
computed: {
|
|
@@ -61,8 +67,24 @@ export default defineComponent({
|
|
|
61
67
|
positionInlineStyle(): string {
|
|
62
68
|
return `left: ${this.posX}px; top: ${this.posY}px;max-height:${this.maxHeight}`;
|
|
63
69
|
},
|
|
70
|
+
displayPopover(): boolean{
|
|
71
|
+
return this.show && !this.disable;
|
|
72
|
+
},
|
|
73
|
+
isTopLayerPopover(){
|
|
74
|
+
return (this.isTopLayer || "octopus-modal"===this.relativeClass) && HTMLElement.prototype.hasOwnProperty("popover");
|
|
75
|
+
},
|
|
64
76
|
},
|
|
65
77
|
watch: {
|
|
78
|
+
displayPopover(){
|
|
79
|
+
if(!this.isTopLayerPopover){
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if(this.displayPopover){
|
|
83
|
+
(this.$refs.popover as HTMLElement).showPopover();
|
|
84
|
+
}else{
|
|
85
|
+
(this.$refs.popover as HTMLElement).hidePopover();
|
|
86
|
+
}
|
|
87
|
+
},
|
|
66
88
|
show() {
|
|
67
89
|
this.$emit("updateVisibility", this.show);
|
|
68
90
|
if (this.show) {
|
|
@@ -132,6 +154,7 @@ export default defineComponent({
|
|
|
132
154
|
}
|
|
133
155
|
},
|
|
134
156
|
setPopoverData(e: MouseEvent | PointerEvent) {
|
|
157
|
+
clearInterval(this.clearTimeout as unknown as number);
|
|
135
158
|
if (this.disable || !e || !e.target) {
|
|
136
159
|
return;
|
|
137
160
|
}
|
|
@@ -141,6 +164,11 @@ export default defineComponent({
|
|
|
141
164
|
this.clearData();
|
|
142
165
|
return;
|
|
143
166
|
}
|
|
167
|
+
if (this.show && this.isTopLayerPopover) {
|
|
168
|
+
(this.$refs.popover as HTMLElement).showPopover();
|
|
169
|
+
this.isClick = true;
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
144
172
|
this.isClick = true;
|
|
145
173
|
}
|
|
146
174
|
this.show = true;
|
|
@@ -149,7 +177,7 @@ export default defineComponent({
|
|
|
149
177
|
let parentTop = 0;
|
|
150
178
|
let parentScrollTop = 0;
|
|
151
179
|
let parentBottom = 0;
|
|
152
|
-
if (this.relativeClass) {
|
|
180
|
+
if (!this.isTopLayerPopover && this.relativeClass) {
|
|
153
181
|
const modalBody = document.getElementsByClassName(
|
|
154
182
|
this.relativeClass,
|
|
155
183
|
)[0];
|
|
@@ -181,13 +209,21 @@ export default defineComponent({
|
|
|
181
209
|
const yGap = this.topPos
|
|
182
210
|
? -5 - (this.$refs.popover as HTMLElement).clientHeight
|
|
183
211
|
: 5;
|
|
212
|
+
|
|
184
213
|
this.posY =
|
|
185
214
|
yPosParent +
|
|
186
215
|
parentScrollTop -
|
|
187
216
|
parentTop +
|
|
188
217
|
(this.isFixed ? 0 : window.scrollY) +
|
|
189
218
|
yGap;
|
|
190
|
-
|
|
219
|
+
if(this.isTopLayerPopover){
|
|
220
|
+
this.posY = Math.max(0, this.posY);
|
|
221
|
+
this.maxHeight = (window.innerHeight - this.posY) + "px";
|
|
222
|
+
}else if(this.relativeClass){
|
|
223
|
+
this.maxHeight = (parentBottom- this.posY -parentTop) + "px";
|
|
224
|
+
}else{
|
|
225
|
+
this.maxHeight = '80vh';
|
|
226
|
+
}
|
|
191
227
|
},
|
|
192
228
|
clearDataBlur(e: FocusEvent) {
|
|
193
229
|
if (this.isTabAction) {
|
|
@@ -233,10 +269,11 @@ export default defineComponent({
|
|
|
233
269
|
this.clearData();
|
|
234
270
|
},
|
|
235
271
|
clearDataTimeout() {
|
|
236
|
-
setTimeout(() => {
|
|
272
|
+
this.clearTimeout = setTimeout(() => {
|
|
237
273
|
if (!this.overPopover) {
|
|
238
274
|
this.clearData();
|
|
239
275
|
}
|
|
276
|
+
this.clearTimeout=undefined;
|
|
240
277
|
}, 500);
|
|
241
278
|
},
|
|
242
279
|
clearData() {
|
|
@@ -256,8 +293,9 @@ export default defineComponent({
|
|
|
256
293
|
background: white;
|
|
257
294
|
border: 1px solid #ccc;
|
|
258
295
|
border-radius: octopusVariables.$octopus-borderradius;
|
|
259
|
-
position: absolute;
|
|
260
296
|
overflow: auto;
|
|
297
|
+
margin: 0 !important;
|
|
298
|
+
z-index: 10;
|
|
261
299
|
&.popover-z-index {
|
|
262
300
|
z-index: 9999;
|
|
263
301
|
}
|
|
@@ -67,6 +67,7 @@
|
|
|
67
67
|
right: 100 - chapter.endPercent + '%',
|
|
68
68
|
}"
|
|
69
69
|
/>
|
|
70
|
+
<!-- If top layer widely available no need to teleport -->
|
|
70
71
|
<Teleport to="#octopus-player-component">
|
|
71
72
|
<ClassicPopover
|
|
72
73
|
:target="'chapter-' + chapter.startPercent"
|
|
@@ -75,6 +76,7 @@
|
|
|
75
76
|
:only-mouse="true"
|
|
76
77
|
popover-class="octopus-small-popover popover-z-index"
|
|
77
78
|
:content="chapter.title"
|
|
79
|
+
:is-top-layer="true"
|
|
78
80
|
/>
|
|
79
81
|
</Teleport>
|
|
80
82
|
</template>
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
>
|
|
6
6
|
<TopBarMainContent
|
|
7
7
|
class="top-bar-z-index"
|
|
8
|
-
:is-education="isEducation"
|
|
9
8
|
:is-phone="isPhone"
|
|
10
9
|
:scrolled="scrolled"
|
|
11
10
|
:title-display="titleToDisplay"
|
|
@@ -50,10 +49,6 @@ export default defineComponent({
|
|
|
50
49
|
},
|
|
51
50
|
|
|
52
51
|
mixins: [imageProxy, resizePhone],
|
|
53
|
-
|
|
54
|
-
props: {
|
|
55
|
-
isEducation: { default: false, type: Boolean },
|
|
56
|
-
},
|
|
57
52
|
data() {
|
|
58
53
|
return {
|
|
59
54
|
scrolled: false as boolean,
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
alt=""
|
|
19
19
|
width="140"
|
|
20
20
|
height="50"
|
|
21
|
-
:class="
|
|
21
|
+
:class="platformEducation ? 'educationLogo' : 'octopusLogo'"
|
|
22
22
|
/>
|
|
23
23
|
<img
|
|
24
24
|
v-else
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
role="presentation"
|
|
27
27
|
alt=""
|
|
28
28
|
class="client-logo"
|
|
29
|
-
:class="
|
|
29
|
+
:class="platformEducation ? 'educationLogo' : ''"
|
|
30
30
|
/>
|
|
31
31
|
</router-link>
|
|
32
32
|
<h1 v-if="titleIsDisplayed" class="text-truncate m-0 align-self-center">
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
width="100"
|
|
50
50
|
height="29"
|
|
51
51
|
class="ms-2"
|
|
52
|
-
:class="
|
|
52
|
+
:class="platformEducation ? 'educationLogo' : 'octopusLogo'"
|
|
53
53
|
/>
|
|
54
54
|
<a
|
|
55
55
|
v-else
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
width="100"
|
|
66
66
|
height="29"
|
|
67
67
|
class="ms-2"
|
|
68
|
-
:class="
|
|
68
|
+
:class="platformEducation ? 'educationLogo' : 'octopusLogo'"
|
|
69
69
|
/>
|
|
70
70
|
</a>
|
|
71
71
|
</template>
|
|
@@ -103,6 +103,7 @@
|
|
|
103
103
|
:only-click="true"
|
|
104
104
|
:is-fixed="true"
|
|
105
105
|
:left-pos="true"
|
|
106
|
+
:is-top-layer="true"
|
|
106
107
|
>
|
|
107
108
|
<nav class="d-flex flex-column" :aria-label="$t('Site menu')">
|
|
108
109
|
<ul class="p-0 m-0">
|
|
@@ -126,13 +127,13 @@
|
|
|
126
127
|
</nav>
|
|
127
128
|
</ClassicPopover>
|
|
128
129
|
<MobileMenu
|
|
129
|
-
:is-education="
|
|
130
|
+
:is-education="platformEducation"
|
|
130
131
|
:show="mobileMenuDisplay"
|
|
131
132
|
:not-podcast-and-emission="inContentDisplayPage && !scrolled"
|
|
132
133
|
:scrolled="scrolled"
|
|
133
134
|
/>
|
|
134
135
|
<HomeDropdown
|
|
135
|
-
:is-education="
|
|
136
|
+
:is-education="platformEducation"
|
|
136
137
|
:mobile-menu-display="mobileMenuDisplay"
|
|
137
138
|
:scrolled="scrolled"
|
|
138
139
|
/>
|
|
@@ -163,6 +164,7 @@ import { useAuthStore } from "../../stores/AuthStore";
|
|
|
163
164
|
import { mapState } from "pinia";
|
|
164
165
|
import ClassicPopover from "../misc/ClassicPopover.vue";
|
|
165
166
|
import { defineComponent, defineAsyncComponent } from "vue";
|
|
167
|
+
import { useGeneralStore } from "../../stores/GeneralStore";
|
|
166
168
|
const MobileMenu = defineAsyncComponent(() => import("./MobileMenu.vue"));
|
|
167
169
|
export default defineComponent({
|
|
168
170
|
name: "TopBarMainContent",
|
|
@@ -175,7 +177,6 @@ export default defineComponent({
|
|
|
175
177
|
},
|
|
176
178
|
mixins: [imageProxy, rubriquesFilterComputed],
|
|
177
179
|
props: {
|
|
178
|
-
isEducation: { default: false, type: Boolean },
|
|
179
180
|
isPhone: { default: false, type: Boolean },
|
|
180
181
|
titleDisplay: { default: "", type: String },
|
|
181
182
|
scrolled: { default: false, type: Boolean },
|
|
@@ -184,6 +185,7 @@ export default defineComponent({
|
|
|
184
185
|
return {};
|
|
185
186
|
},
|
|
186
187
|
computed: {
|
|
188
|
+
...mapState(useGeneralStore, ["platformEducation"]),
|
|
187
189
|
...mapState(useFilterStore, [
|
|
188
190
|
"filterLive",
|
|
189
191
|
"filterOrgaId",
|
|
@@ -243,12 +245,12 @@ export default defineComponent({
|
|
|
243
245
|
title: this.$t("Productors"),
|
|
244
246
|
routeName: "productors",
|
|
245
247
|
condition:
|
|
246
|
-
!this.isPodcastmaker && (!this.filterOrgaId || this.
|
|
248
|
+
!this.isPodcastmaker && (!this.filterOrgaId || this.platformEducation),
|
|
247
249
|
},
|
|
248
250
|
];
|
|
249
251
|
},
|
|
250
252
|
logoUrl(): string {
|
|
251
|
-
if (this.
|
|
253
|
+
if (this.platformEducation) {
|
|
252
254
|
return "/img/logo_education_white.svg";
|
|
253
255
|
}
|
|
254
256
|
return this.isPhone
|
|
@@ -17,6 +17,9 @@ export default defineComponent({
|
|
|
17
17
|
? 0
|
|
18
18
|
: dayjs(this.podcast.pubDate).diff(dayjs(), "seconds");
|
|
19
19
|
},
|
|
20
|
+
isPlannedInProcessor(): boolean {
|
|
21
|
+
return "PLANNED" === this.podcast?.processingStatus;
|
|
22
|
+
},
|
|
20
23
|
isLiveReadyToRecord(): boolean {
|
|
21
24
|
return (
|
|
22
25
|
undefined !== this.podcast &&
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<section class="page-box">
|
|
3
|
-
<template v-if="loaded && !error">
|
|
3
|
+
<template v-if="loaded && !error && emission">
|
|
4
4
|
<PodcastmakerHeader
|
|
5
5
|
v-if="isPodcastmaker"
|
|
6
6
|
:page-title="$t('Emission')"
|
|
@@ -50,8 +50,6 @@
|
|
|
50
50
|
<EditBox
|
|
51
51
|
v-if="editRight && !isPodcastmaker"
|
|
52
52
|
:emission="emission"
|
|
53
|
-
:rss-emission="rssEmission"
|
|
54
|
-
:ftp-emission="ftpEmission"
|
|
55
53
|
@is-updated="getEmissionDetails"
|
|
56
54
|
/>
|
|
57
55
|
</section>
|
|
@@ -61,7 +59,6 @@
|
|
|
61
59
|
:exclusive="exclusive"
|
|
62
60
|
:not-exclusive="notExclusive"
|
|
63
61
|
:organisation-id="authOrgaId"
|
|
64
|
-
:is-education="isEducation"
|
|
65
62
|
/>
|
|
66
63
|
<section class="module-box">
|
|
67
64
|
<LiveHorizontalList
|
|
@@ -157,7 +154,6 @@ export default defineComponent({
|
|
|
157
154
|
mixins: [displayMethods, handle403, orgaComputed, imageProxy, seoTitleUrl],
|
|
158
155
|
props: {
|
|
159
156
|
emissionId: { default: undefined, type: Number },
|
|
160
|
-
isEducation: { default: false, type: Boolean },
|
|
161
157
|
},
|
|
162
158
|
|
|
163
159
|
data() {
|
|
@@ -166,8 +162,6 @@ export default defineComponent({
|
|
|
166
162
|
title: "" as string,
|
|
167
163
|
emission: undefined as Emission | undefined,
|
|
168
164
|
error: false as boolean,
|
|
169
|
-
rssEmission: false as boolean,
|
|
170
|
-
ftpEmission: false as boolean,
|
|
171
165
|
exclusive: false as boolean,
|
|
172
166
|
notExclusive: false as boolean,
|
|
173
167
|
fetchLive: true as boolean,
|
|
@@ -223,8 +217,6 @@ export default defineComponent({
|
|
|
223
217
|
},
|
|
224
218
|
handleAnnotations() {
|
|
225
219
|
if (!this.emission?.annotations) return;
|
|
226
|
-
this.rssEmission = "RSS" === this.emission.annotations.SOURCE_KIND;
|
|
227
|
-
this.ftpEmission = "FTP" === this.emission.annotations.SOURCE_KIND;
|
|
228
220
|
if (this.emission.annotations.exclusive) {
|
|
229
221
|
this.exclusive = "true" === this.emission.annotations.exclusive;
|
|
230
222
|
this.exclusive =
|
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
v-model:to-date="toDate"
|
|
16
16
|
v-model:rubrique-filter="rubriqueFilter"
|
|
17
17
|
:search-pattern="searchPattern"
|
|
18
|
-
:is-education="isEducation"
|
|
19
18
|
:is-emission="true"
|
|
20
19
|
:organisation-id="organisationId"
|
|
21
20
|
/>
|
|
@@ -54,7 +53,6 @@ export default defineComponent({
|
|
|
54
53
|
},
|
|
55
54
|
mixins: [advancedParamInit],
|
|
56
55
|
props: {
|
|
57
|
-
isEducation: { default: false, type: Boolean },
|
|
58
56
|
pr: { default: 0, type: Number },
|
|
59
57
|
ps: { default: 30, type: Number },
|
|
60
58
|
routeQuery: { default: "", type: String },
|
|
@@ -67,11 +65,5 @@ export default defineComponent({
|
|
|
67
65
|
routeOrga: { default: undefined, type: String },
|
|
68
66
|
routeRubriques: { default: "", type: String },
|
|
69
67
|
},
|
|
70
|
-
|
|
71
|
-
data() {
|
|
72
|
-
return {
|
|
73
|
-
isEmission: true as boolean,
|
|
74
|
-
};
|
|
75
|
-
},
|
|
76
68
|
});
|
|
77
69
|
</script>
|
|
@@ -46,7 +46,6 @@ interface LinkMapSite {
|
|
|
46
46
|
}
|
|
47
47
|
export default defineComponent({
|
|
48
48
|
props: {
|
|
49
|
-
isEducation: { default: false, type: Boolean },
|
|
50
49
|
externLinks: { default: () => [], type: Array as () => Array<LinkMapSite> },
|
|
51
50
|
titleTag: { default: "h1", type: String },
|
|
52
51
|
},
|
|
@@ -145,7 +144,7 @@ export default defineComponent({
|
|
|
145
144
|
id: "link-page-productors",
|
|
146
145
|
href: "/main/pub/productors",
|
|
147
146
|
condition:
|
|
148
|
-
!this.isPodcastmaker && (!this.filterOrgaId || this.
|
|
147
|
+
!this.isPodcastmaker && (!this.filterOrgaId || this.platformEducation),
|
|
149
148
|
},
|
|
150
149
|
];
|
|
151
150
|
},
|
|
@@ -32,7 +32,6 @@
|
|
|
32
32
|
v-if="!isPodcastmaker && undefined !== authOrgaId"
|
|
33
33
|
:playlist="playlist"
|
|
34
34
|
:organisation-id="authOrgaId"
|
|
35
|
-
:is-education="isEducation"
|
|
36
35
|
/>
|
|
37
36
|
<ShareButtons
|
|
38
37
|
v-if="pageParameters.isShareButtons"
|
|
@@ -92,7 +91,6 @@ export default defineComponent({
|
|
|
92
91
|
|
|
93
92
|
props: {
|
|
94
93
|
playlistId: { default: undefined, type: Number },
|
|
95
|
-
isEducation: { default: false, type: Boolean },
|
|
96
94
|
},
|
|
97
95
|
data() {
|
|
98
96
|
return {
|
|
@@ -23,7 +23,6 @@
|
|
|
23
23
|
:exclusive="exclusive"
|
|
24
24
|
:not-exclusive="notExclusive"
|
|
25
25
|
:organisation-id="authOrgaId"
|
|
26
|
-
:is-education="isEducation"
|
|
27
26
|
/>
|
|
28
27
|
|
|
29
28
|
<CommentSection v-if="!isPodcastmaker" :podcast="podcast" />
|
|
@@ -128,11 +127,8 @@ export default defineComponent({
|
|
|
128
127
|
updateStatus: { default: undefined, type: String },
|
|
129
128
|
playingPodcast: { default: undefined, type: Object as () => Podcast },
|
|
130
129
|
podcastId: { default: 0, type: Number },
|
|
131
|
-
isEducation: { default: false, type: Boolean },
|
|
132
130
|
},
|
|
133
131
|
|
|
134
|
-
emits: ["initConferenceId"],
|
|
135
|
-
|
|
136
132
|
data() {
|
|
137
133
|
return {
|
|
138
134
|
loaded: false as boolean,
|
|
@@ -141,6 +137,7 @@ export default defineComponent({
|
|
|
141
137
|
exclusive: false as boolean,
|
|
142
138
|
notExclusive: false as boolean,
|
|
143
139
|
fetchConference: undefined as Conference | undefined,
|
|
140
|
+
infoReload: undefined as ReturnType<typeof setTimeout> | undefined,
|
|
144
141
|
};
|
|
145
142
|
},
|
|
146
143
|
|
|
@@ -221,46 +218,32 @@ export default defineComponent({
|
|
|
221
218
|
if (!this.podcast || this.error) {
|
|
222
219
|
return;
|
|
223
220
|
}
|
|
224
|
-
this.getCommentsConfig(this.podcast);
|
|
225
221
|
this.initCommentUser();
|
|
226
|
-
this.initConference();
|
|
227
222
|
},
|
|
228
223
|
},
|
|
229
224
|
},
|
|
230
225
|
beforeUnmount() {
|
|
231
226
|
this.contentToDisplayUpdate(null);
|
|
227
|
+
clearTimeout(this.infoReload);
|
|
232
228
|
},
|
|
233
229
|
|
|
234
230
|
methods: {
|
|
235
231
|
...mapActions(useGeneralStore, ["contentToDisplayUpdate"]),
|
|
236
232
|
...mapActions(useCommentStore, ["getCommentsConfig", "initCommentUser"]),
|
|
237
|
-
async fetchConferencePublic() {
|
|
238
|
-
const data = await classicApi.fetchData<ConferencePublicInfo>({
|
|
239
|
-
api: 9,
|
|
240
|
-
path: "conference/info/" + this.podcast?.conferenceId,
|
|
241
|
-
});
|
|
242
|
-
this.fetchConference = {
|
|
243
|
-
...data,
|
|
244
|
-
...{
|
|
245
|
-
conferenceId: this.podcast?.conferenceId ?? 0,
|
|
246
|
-
title: "",
|
|
247
|
-
},
|
|
248
|
-
};
|
|
249
|
-
},
|
|
250
233
|
async initConference() {
|
|
251
|
-
if (!this.podcast || undefined == this.podcast.conferenceId) return;
|
|
234
|
+
if (!this.podcast || undefined == this.podcast.conferenceId || "READY_TO_RECORD" !== this.podcast.processingStatus) return;
|
|
235
|
+
this.fetchConference = { conferenceId: this.podcast.conferenceId, title: "" };
|
|
252
236
|
if (this.isOctopusAndAnimator) {
|
|
253
237
|
try {
|
|
254
|
-
|
|
238
|
+
this.fetchConference = await classicApi.fetchData<Conference>({
|
|
255
239
|
api: 9,
|
|
256
240
|
path: "conference/" + this.podcast.conferenceId,
|
|
257
241
|
});
|
|
258
|
-
this.fetchConference = data ?? { conferenceId: -1, title: "" };
|
|
259
242
|
} catch {
|
|
260
|
-
await this.
|
|
243
|
+
await this.fetchConferenceStatus();
|
|
261
244
|
}
|
|
262
245
|
} else {
|
|
263
|
-
await this.
|
|
246
|
+
await this.fetchConferenceStatus();
|
|
264
247
|
}
|
|
265
248
|
if (
|
|
266
249
|
this.fetchConference &&
|
|
@@ -268,7 +251,27 @@ export default defineComponent({
|
|
|
268
251
|
"PUBLISHING" !== this.fetchConference.status &&
|
|
269
252
|
"DEBRIEFING" !== this.fetchConference.status
|
|
270
253
|
) {
|
|
271
|
-
this
|
|
254
|
+
this.fetchConferenceStatusLoop();
|
|
255
|
+
}
|
|
256
|
+
},
|
|
257
|
+
async fetchConferenceStatusLoop() {
|
|
258
|
+
if("PUBLISHING" ===this.fetchConference?.status){
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
this.infoReload = setTimeout(async () => {
|
|
262
|
+
await this.fetchConferenceStatus();
|
|
263
|
+
this.fetchConferenceStatusLoop();
|
|
264
|
+
}, 3000);
|
|
265
|
+
},
|
|
266
|
+
async fetchConferenceStatus() {
|
|
267
|
+
try {
|
|
268
|
+
const data = await classicApi.fetchData<ConferencePublicInfo>({
|
|
269
|
+
api: 9,
|
|
270
|
+
path: "conference/info/" + this.podcast?.conferenceId,
|
|
271
|
+
});
|
|
272
|
+
this.fetchConference.status = data.status;
|
|
273
|
+
} catch {
|
|
274
|
+
//Do nothing
|
|
272
275
|
}
|
|
273
276
|
},
|
|
274
277
|
updatePodcast(podcastUpdated: Podcast): void {
|
|
@@ -320,15 +323,32 @@ export default defineComponent({
|
|
|
320
323
|
!this.editRight
|
|
321
324
|
) {
|
|
322
325
|
this.error = true;
|
|
323
|
-
|
|
324
|
-
|
|
326
|
+
this.loaded = true;
|
|
327
|
+
return;
|
|
325
328
|
}
|
|
329
|
+
this.podcastInProcessing();
|
|
330
|
+
this.updatePathParams(this.podcast.title);
|
|
331
|
+
await this.getCommentsConfig(this.podcast);
|
|
326
332
|
this.loaded = true;
|
|
327
333
|
} catch (error) {
|
|
328
334
|
this.handle403(error as AxiosError);
|
|
329
335
|
this.initError();
|
|
330
336
|
}
|
|
331
337
|
},
|
|
338
|
+
|
|
339
|
+
podcastInProcessing(){
|
|
340
|
+
if("PLANNED" !== this.podcast?.processingStatus){
|
|
341
|
+
this.initConference();
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
this.infoReload = setTimeout(async () => {
|
|
345
|
+
this.podcast = await classicApi.fetchData<Podcast>({
|
|
346
|
+
api: 0,
|
|
347
|
+
path: "podcast/" + this.podcastId,
|
|
348
|
+
});
|
|
349
|
+
this.podcastInProcessing();
|
|
350
|
+
}, 2000);
|
|
351
|
+
}
|
|
332
352
|
},
|
|
333
353
|
});
|
|
334
354
|
</script>
|
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
v-model:not-valid="notValid"
|
|
16
16
|
v-model:rubrique-filter="rubriqueFilter"
|
|
17
17
|
:search-pattern="searchPattern"
|
|
18
|
-
:is-education="isEducation"
|
|
19
18
|
:is-emission="false"
|
|
20
19
|
:organisation-id="organisationId"
|
|
21
20
|
/>
|
|
@@ -55,7 +54,6 @@ export default defineComponent({
|
|
|
55
54
|
},
|
|
56
55
|
mixins: [advancedParamInit],
|
|
57
56
|
props: {
|
|
58
|
-
isEducation: { default: false, type: Boolean },
|
|
59
57
|
pr: { default: 0, type: Number },
|
|
60
58
|
ps: { default: 30, type: Number },
|
|
61
59
|
routeQuery: { default: "", type: String },
|
package/src/locale/de.ts
CHANGED
package/src/locale/en.ts
CHANGED
package/src/locale/es.ts
CHANGED
package/src/locale/fr.ts
CHANGED
package/src/locale/it.ts
CHANGED
package/src/locale/sl.ts
CHANGED
package/proxy.ts
DELETED
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const fs = require('fs');
|
|
4
|
-
const BRANCH = fs.readFileSync('plateform.conf', 'utf8').trim();
|
|
5
|
-
console.log("Content of BRANCH is " + BRANCH);
|
|
6
|
-
|
|
7
|
-
const KEYCLOAK_TOKEN_URL = "https://keycloak." + BRANCH + "/realms/catalogue/protocol/openid-connect/token";
|
|
8
|
-
const KEYCLOAK_USER = "admin";
|
|
9
|
-
const KEYCLOAK_PASSWORD = "saooti-admin";
|
|
10
|
-
const CLIENT_ID = "catalogue-web";
|
|
11
|
-
|
|
12
|
-
const express = require('express');
|
|
13
|
-
const axios = require('axios');
|
|
14
|
-
const qs = require('querystring');
|
|
15
|
-
const exec = require('child_process').exec;
|
|
16
|
-
|
|
17
|
-
const app = express();
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const myArgs = process.argv.slice(2);
|
|
21
|
-
|
|
22
|
-
let authenticated = true;
|
|
23
|
-
if(myArgs.length){
|
|
24
|
-
authenticated = !(myArgs[0] === "false");
|
|
25
|
-
}
|
|
26
|
-
app.get('/api/init', async function (req, res) {
|
|
27
|
-
console.log("Requesting initialization of user ...");
|
|
28
|
-
console.log("Content of KEYCLOAK_TOKEN_URL : "+KEYCLOAK_TOKEN_URL);
|
|
29
|
-
console.log("Content of KEYCLOAK_USER : "+KEYCLOAK_USER);
|
|
30
|
-
console.log("Content of KEYCLOAK_PASSWORD : "+KEYCLOAK_PASSWORD);
|
|
31
|
-
console.log("Content of CLIENT_ID : "+CLIENT_ID);
|
|
32
|
-
try {
|
|
33
|
-
let result = await axios.post(KEYCLOAK_TOKEN_URL, qs.stringify({
|
|
34
|
-
"username": KEYCLOAK_USER,
|
|
35
|
-
"password": KEYCLOAK_PASSWORD,
|
|
36
|
-
"grant_type": "password",
|
|
37
|
-
"client_id": CLIENT_ID,
|
|
38
|
-
"scope":"openid"
|
|
39
|
-
}),{headers: {
|
|
40
|
-
'Content-Type': 'application/x-www-form-urlencoded'
|
|
41
|
-
}});
|
|
42
|
-
console.log("Content of result "+result);
|
|
43
|
-
res.send({
|
|
44
|
-
"authenticated": authenticated,
|
|
45
|
-
"accessToken": result.data.access_token,
|
|
46
|
-
"accessKeycloakUri":"https://keycloak." + BRANCH +"/realms/catalogue/protocol/openid-connect/",
|
|
47
|
-
"refreshToken": result.data.refresh_token,
|
|
48
|
-
"clientId": "catalogue-web",
|
|
49
|
-
"expiration": new Date( Date.now() + result.data.expires_in * 1000 ),
|
|
50
|
-
"name": "Fake Authentication",
|
|
51
|
-
"apiUri": "https://api." + BRANCH +"/",
|
|
52
|
-
"mediaUri": "https://media." + BRANCH +"/",
|
|
53
|
-
"studioUri": "https://studio." + BRANCH +"/",
|
|
54
|
-
"importerUri": "https://importer." + BRANCH +"/" ,
|
|
55
|
-
"storageUri": "https://storage." + BRANCH +"/" ,
|
|
56
|
-
"playerUri": "https://playerbeta." + BRANCH +"/" ,
|
|
57
|
-
"processorUri": "https://processor." + BRANCH +"/" ,
|
|
58
|
-
"keycloakApiUri": "https://keycloakApi." + BRANCH +"/" ,
|
|
59
|
-
"frontendUri": "https://" + BRANCH +"" ,
|
|
60
|
-
"hlsUri": "https://hls.live." + BRANCH +"/" ,
|
|
61
|
-
"videomakerUri": "https://videomaker." + BRANCH +"/" ,
|
|
62
|
-
"recoUri": "https://reco." + BRANCH +"/" ,
|
|
63
|
-
"rtmpUri": "rtmp://rtmp.live." + BRANCH +"/",
|
|
64
|
-
"commentsUri": "https://comments." + BRANCH +"/" ,
|
|
65
|
-
"imageUri":"https://imageproxy." + BRANCH +"/",
|
|
66
|
-
"speechToTextUri":"https://speech2text." + BRANCH +"/",
|
|
67
|
-
"textToSpeechUri":"https://text2speech." + BRANCH +"/",
|
|
68
|
-
"radioUri":"https://radio." + BRANCH +"/",
|
|
69
|
-
"billingUri":"https://facturation." + BRANCH +"/",
|
|
70
|
-
"openAiUri": "https://openai." + BRANCH +"/" ,
|
|
71
|
-
"chapteringUri":"https://chaptering." + BRANCH +"/",
|
|
72
|
-
"statRadioUri":"https://stats.radio." + BRANCH +"/",
|
|
73
|
-
"isEducation": false,
|
|
74
|
-
"captchaDevelopmentProfil": true,
|
|
75
|
-
"goodNewsOrgaId": "bd1596f3-9653-4378-a9e6-6dd3bef5c873",
|
|
76
|
-
"role": [
|
|
77
|
-
"ADMIN",
|
|
78
|
-
"ORGANISATION",
|
|
79
|
-
"ANIMATION",
|
|
80
|
-
"USERS",
|
|
81
|
-
"PODCAST_VALIDATION",
|
|
82
|
-
"PRODUCTION",
|
|
83
|
-
"PLAYLISTS",
|
|
84
|
-
"COMMENTS_MODERATION",
|
|
85
|
-
"EDITOR",
|
|
86
|
-
"ANALYTICS",
|
|
87
|
-
"ADVERTISING",
|
|
88
|
-
"LIVE",
|
|
89
|
-
"EDITION",
|
|
90
|
-
"PODCAST_CRUD",
|
|
91
|
-
"RADIO",
|
|
92
|
-
"BILLING_ADMIN",
|
|
93
|
-
"BILLING_VIEWER",
|
|
94
|
-
"RESTRICTED_PRODUCTION"
|
|
95
|
-
]
|
|
96
|
-
});
|
|
97
|
-
} catch (error) {
|
|
98
|
-
res.send({
|
|
99
|
-
"authenticated": true,
|
|
100
|
-
"accessToken": null,
|
|
101
|
-
"refreshToken": null,
|
|
102
|
-
"expiration": null,
|
|
103
|
-
"name": null,
|
|
104
|
-
"clientId": null,
|
|
105
|
-
"apiUri": "https://api." + BRANCH + "/",
|
|
106
|
-
"importerUri": "https://importer." + BRANCH +"/" ,
|
|
107
|
-
"mediaUri": "https://media." + BRANCH + "/",
|
|
108
|
-
"studioUri": "https://studio." + BRANCH + "/",
|
|
109
|
-
"storageUri": "https://storage." + BRANCH + "/",
|
|
110
|
-
"playerUri": "https://playerbeta." + BRANCH + "/",
|
|
111
|
-
"processorUri": "https://processor." + BRANCH + "/",
|
|
112
|
-
"keycloakApiUri": "https://keycloakApi." + BRANCH + "/" ,
|
|
113
|
-
"hlsUri": "https://hls.live." + BRANCH +"/" ,
|
|
114
|
-
"videomakerUri": "https://videomaker." + BRANCH +"/" ,
|
|
115
|
-
"recoUri": "https://reco." + BRANCH +"/" ,
|
|
116
|
-
"frontendUri": "https://" + BRANCH +"/" ,
|
|
117
|
-
"commentsUri": "https://comments." + BRANCH +"/" ,
|
|
118
|
-
"imageUri":"https://imageproxy." + BRANCH +"/",
|
|
119
|
-
"speechToTextUri":"https://speech2text." + BRANCH +"/",
|
|
120
|
-
"textToSpeechUri":"https://text2speech." + BRANCH +"/",
|
|
121
|
-
"billingUri":"https://facturation." + BRANCH +"/",
|
|
122
|
-
"radioUri":"https://radio." + BRANCH +"/",
|
|
123
|
-
"openAiUri": "https://openai." + BRANCH +"/" ,
|
|
124
|
-
"chapteringUri":"https://chaptering." + BRANCH +"/",
|
|
125
|
-
"statRadioUri":"https://stats.radio." + BRANCH +"/",
|
|
126
|
-
"isEducation": false,
|
|
127
|
-
"captchaDevelopmentProfil": true,
|
|
128
|
-
"goodNewsOrgaId": null,
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
app.listen(3000, function () { });
|