@saooti/octopus-sdk 29.0.0 → 29.0.4
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 +5 -0
- package/index.ts +5 -2
- package/package.json +12 -11
- package/src/assets/bootstrap-diff.scss +5 -0
- package/src/assets/form.scss +19 -0
- package/src/assets/modal.scss +9 -10
- package/src/components/display/categories/CategoryList.vue +20 -19
- package/src/components/display/comments/AddCommentModal.vue +67 -67
- package/src/components/display/comments/CommentItem.vue +6 -4
- package/src/components/display/emission/EmissionInlineList.vue +4 -2
- package/src/components/display/filter/AdvancedSearch.vue +40 -27
- package/src/components/display/filter/RubriqueFilter.vue +3 -0
- package/src/components/display/organisation/OrganisationChooser.vue +1 -1
- package/src/components/display/participant/ParticipantItem.vue +3 -0
- package/src/components/display/podcasts/ParticipantDescription.vue +8 -4
- package/src/components/display/podcasts/PodcastInlineList.vue +4 -2
- package/src/components/display/rubriques/RubriqueList.vue +22 -21
- package/src/components/display/sharing/PlayerParameters.vue +8 -4
- package/src/components/display/sharing/ShareButtons.vue +5 -3
- package/src/components/misc/HomeDropdown.vue +116 -87
- package/src/components/misc/Popover.vue +86 -0
- package/src/components/misc/modal/MessageModal.vue +51 -50
- package/src/components/misc/modal/NewsletterModal.vue +88 -82
- package/src/components/misc/modal/QrCodeModal.vue +31 -21
- package/src/components/misc/modal/ShareModalPlayer.vue +91 -51
- package/src/components/pages/Home.vue +8 -1
- package/src/components/pages/Participant.vue +2 -1
- package/src/helper/useEventListener.ts +18 -0
- package/src/main.ts +5 -24
|
@@ -37,23 +37,27 @@
|
|
|
37
37
|
v-if="!podcast || isEmission || isLargeEmission"
|
|
38
38
|
class="d-flex align-items-center w-100 flex-wrap mt-1"
|
|
39
39
|
>
|
|
40
|
-
<
|
|
40
|
+
<input
|
|
41
41
|
v-model="episodeNumbers"
|
|
42
|
+
class="form-check-input"
|
|
43
|
+
type="radio"
|
|
42
44
|
name="episodeNumbers"
|
|
43
45
|
value="all"
|
|
44
|
-
|
|
46
|
+
>
|
|
45
47
|
<span class="flex-shrink">{{ $t('Show every episode') }}</span>
|
|
46
48
|
</div>
|
|
47
49
|
<div
|
|
48
50
|
class="d-flex align-items-center flex-wrap"
|
|
49
51
|
:class="!podcast || isEmission || isLargeEmission ? '' : 'mt-3'"
|
|
50
52
|
>
|
|
51
|
-
<
|
|
53
|
+
<input
|
|
52
54
|
v-if="!podcast || isEmission || isLargeEmission"
|
|
53
55
|
v-model="episodeNumbers"
|
|
56
|
+
class="form-check-input"
|
|
57
|
+
type="radio"
|
|
54
58
|
name="episodeNumbers"
|
|
55
59
|
value="number"
|
|
56
|
-
|
|
60
|
+
>
|
|
57
61
|
<span class="flex-shrink">{{ $t('Show') }}</span>
|
|
58
62
|
<input
|
|
59
63
|
id="number-input"
|
|
@@ -13,10 +13,10 @@
|
|
|
13
13
|
<span
|
|
14
14
|
v-if="authenticated"
|
|
15
15
|
id="popover-share-help"
|
|
16
|
-
class="saooti-help
|
|
16
|
+
class="saooti-help ml-2"
|
|
17
17
|
:aria-label="$t('Help')"
|
|
18
18
|
/>
|
|
19
|
-
<
|
|
19
|
+
<Popover
|
|
20
20
|
v-if="authenticated"
|
|
21
21
|
target="popover-share-help"
|
|
22
22
|
triggers="hover"
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
custom-class="wizard-help"
|
|
25
25
|
>
|
|
26
26
|
{{ $t('Share this page without edit and share blocks') }}
|
|
27
|
-
</
|
|
27
|
+
</Popover>
|
|
28
28
|
</div>
|
|
29
29
|
<div
|
|
30
30
|
class="d-flex"
|
|
@@ -253,6 +253,7 @@ import { Podcast } from '@/store/class/podcast';
|
|
|
253
253
|
import { state } from '../../../store/paramStore';
|
|
254
254
|
import Snackbar from '../../misc/Snackbar.vue';
|
|
255
255
|
import { displayMethods } from '../../mixins/functions';
|
|
256
|
+
import Popover from '../../misc/Popover.vue';
|
|
256
257
|
import { defineComponent, defineAsyncComponent } from 'vue';
|
|
257
258
|
const ClipboardModal = defineAsyncComponent(() => import('../../misc/modal/ClipboardModal.vue'));
|
|
258
259
|
const NewsletterModal = defineAsyncComponent(() => import('../../misc/modal/NewsletterModal.vue'));
|
|
@@ -263,6 +264,7 @@ export default defineComponent({
|
|
|
263
264
|
NewsletterModal,
|
|
264
265
|
QrCodeModal,
|
|
265
266
|
Snackbar,
|
|
267
|
+
Popover
|
|
266
268
|
},
|
|
267
269
|
|
|
268
270
|
mixins: [displayMethods],
|
|
@@ -2,93 +2,126 @@
|
|
|
2
2
|
<div
|
|
3
3
|
class="d-flex align-items-center justify-content-end flex-no-wrap top-bar-dropdown"
|
|
4
4
|
>
|
|
5
|
-
<
|
|
5
|
+
<div
|
|
6
6
|
v-if="authenticated"
|
|
7
|
-
class="split-dropdown"
|
|
8
|
-
split
|
|
9
|
-
right
|
|
10
|
-
split-variant="primary main-button-dropdown"
|
|
11
|
-
variant="primary data-selenium-dropdown-topbar"
|
|
12
|
-
:text="$t('My space')"
|
|
13
|
-
@click="goToUrl('/main/priv/backoffice')"
|
|
7
|
+
class="dropdown split-dropdown btn-group"
|
|
14
8
|
>
|
|
15
|
-
<
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
</b-dropdown-item>
|
|
33
|
-
<b-dropdown-item
|
|
34
|
-
v-if="!isPodcastmaker"
|
|
35
|
-
to="/main/priv/edit/profile"
|
|
36
|
-
>
|
|
37
|
-
{{ $t('Edit my profile') }}
|
|
38
|
-
</b-dropdown-item>
|
|
39
|
-
<b-dropdown-item
|
|
40
|
-
v-if="!isPodcastmaker && isOrganisation"
|
|
41
|
-
to="/main/priv/edit/organisation"
|
|
42
|
-
>
|
|
43
|
-
{{ $t('Edit my organisation') }}
|
|
44
|
-
</b-dropdown-item>
|
|
45
|
-
<b-dropdown-divider v-if="!isEducation" />
|
|
46
|
-
<b-dropdown-item
|
|
47
|
-
v-if="!isEducation"
|
|
48
|
-
href="https://help.octopus.saooti.com/Aide/"
|
|
49
|
-
rel="noopener"
|
|
50
|
-
target="_blank"
|
|
51
|
-
>
|
|
52
|
-
{{ $t('Help') }}
|
|
53
|
-
</b-dropdown-item>
|
|
54
|
-
<b-dropdown-item
|
|
55
|
-
v-if="!isEducation"
|
|
56
|
-
href="https://help.octopus.saooti.com/"
|
|
57
|
-
rel="noopener"
|
|
58
|
-
target="_blank"
|
|
9
|
+
<button
|
|
10
|
+
class="btn btn-primary main-button-dropdown"
|
|
11
|
+
@click="goToUrl('/main/priv/backoffice')"
|
|
12
|
+
>
|
|
13
|
+
{{ $t('My space') }}
|
|
14
|
+
</button>
|
|
15
|
+
<button
|
|
16
|
+
class="btn dropdown-toggle btn-primary data-selenium-dropdown-topbar dropdown-toggle-split"
|
|
17
|
+
data-bs-toggle="dropdown"
|
|
18
|
+
aria-expanded="false"
|
|
19
|
+
/>
|
|
20
|
+
<ul class="dropdown-menu dropdown-menu-right px-4">
|
|
21
|
+
<li>
|
|
22
|
+
<router-link
|
|
23
|
+
v-if="isContribution && !isPodcastmaker"
|
|
24
|
+
to="/main/priv/upload"
|
|
25
|
+
class="align-self-center w-100"
|
|
59
26
|
>
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
27
|
+
<button class="btn btn-primary w-100 mb-2">
|
|
28
|
+
{{ $t('Upload') }}
|
|
29
|
+
</button>
|
|
30
|
+
</router-link>
|
|
31
|
+
</li>
|
|
32
|
+
<div @click="displayMenuPhone(true)">
|
|
33
|
+
<li v-if="!isPodcastmaker">
|
|
34
|
+
<router-link
|
|
35
|
+
to="/main/priv/backoffice"
|
|
36
|
+
class="linkSpace dropdown-item"
|
|
37
|
+
>
|
|
38
|
+
{{ $t('My space') }}
|
|
39
|
+
</router-link>
|
|
40
|
+
</li>
|
|
41
|
+
<li v-if="!isPodcastmaker">
|
|
42
|
+
<router-link
|
|
43
|
+
class="dropdown-item"
|
|
44
|
+
to="/main/priv/edit/profile"
|
|
45
|
+
>
|
|
46
|
+
{{ $t('Edit my profile') }}
|
|
47
|
+
</router-link>
|
|
48
|
+
</li>
|
|
49
|
+
<li v-if="!isPodcastmaker && isOrganisation">
|
|
50
|
+
<router-link
|
|
51
|
+
class="dropdown-item"
|
|
52
|
+
to="/main/priv/edit/organisation"
|
|
53
|
+
>
|
|
54
|
+
{{ $t('Edit my organisation') }}
|
|
55
|
+
</router-link>
|
|
56
|
+
</li>
|
|
57
|
+
<li v-if="!isEducation">
|
|
58
|
+
<hr class="dropdown-divider">
|
|
59
|
+
</li>
|
|
60
|
+
<li v-if="!isEducation">
|
|
61
|
+
<a
|
|
62
|
+
href="https://help.octopus.saooti.com/Aide/"
|
|
63
|
+
class="dropdown-item"
|
|
64
|
+
rel="noopener"
|
|
65
|
+
target="_blank"
|
|
66
|
+
>
|
|
67
|
+
{{ $t('Help') }}
|
|
68
|
+
</a>
|
|
69
|
+
</li>
|
|
70
|
+
<li v-if="!isEducation">
|
|
71
|
+
<a
|
|
72
|
+
href="https://help.octopus.saooti.com/"
|
|
73
|
+
class="dropdown-item"
|
|
74
|
+
rel="noopener"
|
|
75
|
+
target="_blank"
|
|
76
|
+
>
|
|
77
|
+
{{ $t('TutoMag') }}
|
|
78
|
+
</a>
|
|
79
|
+
</li>
|
|
80
|
+
<li><hr class="dropdown-divider"></li>
|
|
81
|
+
<li v-if="!isEducation">
|
|
82
|
+
<a
|
|
83
|
+
class="dropdown-item"
|
|
84
|
+
href="/sso/logout"
|
|
85
|
+
>
|
|
86
|
+
{{ $t('Logout') }}
|
|
87
|
+
</a>
|
|
88
|
+
</li>
|
|
68
89
|
</div>
|
|
69
|
-
</
|
|
70
|
-
</
|
|
71
|
-
<
|
|
90
|
+
</ul>
|
|
91
|
+
</div>
|
|
92
|
+
<div
|
|
72
93
|
v-else
|
|
73
|
-
|
|
74
|
-
toggle-class="text-decoration-none m-1 admin-button btn-rounded-icon"
|
|
75
|
-
no-caret
|
|
94
|
+
class="dropdown btn-group"
|
|
76
95
|
>
|
|
77
|
-
<
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
{{ $t('Login') }}
|
|
82
|
-
</b-dropdown-item>
|
|
83
|
-
<b-dropdown-item
|
|
84
|
-
v-if="!isPodcastmaker"
|
|
85
|
-
to="/main/pub/create"
|
|
96
|
+
<button
|
|
97
|
+
class="btn dropdown-toggle btn-secondary text-decoration-none m-1 admin-button btn-rounded-icon dropdown-toggle-no-caret"
|
|
98
|
+
data-bs-toggle="dropdown"
|
|
99
|
+
aria-expanded="false"
|
|
86
100
|
>
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
101
|
+
<i class="saooti-user-octopus text-dark" />
|
|
102
|
+
<span class="visually-hidden">Profile</span>
|
|
103
|
+
</button>
|
|
104
|
+
<ul class="dropdown-menu dropdown-menu-right px-4">
|
|
105
|
+
<li>
|
|
106
|
+
<a
|
|
107
|
+
class="dropdown-item"
|
|
108
|
+
href="/sso/login"
|
|
109
|
+
>
|
|
110
|
+
{{ $t('Login') }}
|
|
111
|
+
</a>
|
|
112
|
+
</li>
|
|
113
|
+
<li v-if="!isPodcastmaker">
|
|
114
|
+
<router-link
|
|
115
|
+
class="dropdown-item"
|
|
116
|
+
to="/main/pub/create"
|
|
117
|
+
>
|
|
118
|
+
{{
|
|
119
|
+
$t('Create an account')
|
|
120
|
+
}}
|
|
121
|
+
</router-link>
|
|
122
|
+
</li>
|
|
123
|
+
</ul>
|
|
124
|
+
</div>
|
|
92
125
|
</div>
|
|
93
126
|
</template>
|
|
94
127
|
|
|
@@ -103,7 +136,9 @@ export default defineComponent({
|
|
|
103
136
|
},
|
|
104
137
|
|
|
105
138
|
data() {
|
|
106
|
-
return {
|
|
139
|
+
return {
|
|
140
|
+
showMenu: false as boolean
|
|
141
|
+
};
|
|
107
142
|
},
|
|
108
143
|
|
|
109
144
|
computed: {
|
|
@@ -148,7 +183,6 @@ export default defineComponent({
|
|
|
148
183
|
padding-left: 15px;
|
|
149
184
|
margin-right: 30px;
|
|
150
185
|
}
|
|
151
|
-
|
|
152
186
|
.btn-group .dropdown-toggle-split {
|
|
153
187
|
align-items: center;
|
|
154
188
|
border-radius: 50% !important;
|
|
@@ -165,11 +199,6 @@ export default defineComponent({
|
|
|
165
199
|
right: auto;
|
|
166
200
|
}
|
|
167
201
|
}
|
|
168
|
-
.b-dropdown-text {
|
|
169
|
-
display: flex;
|
|
170
|
-
flex-direction: column;
|
|
171
|
-
justify-content: center;
|
|
172
|
-
}
|
|
173
202
|
.dropdown-header {
|
|
174
203
|
display: flex;
|
|
175
204
|
align-items: center;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div
|
|
3
|
+
:id="id"
|
|
4
|
+
ref="element"
|
|
5
|
+
class="popover"
|
|
6
|
+
role="tooltip"
|
|
7
|
+
tabindex="-1"
|
|
8
|
+
>
|
|
9
|
+
<div ref="titleRef">
|
|
10
|
+
<slot name="title">
|
|
11
|
+
{{ title }}
|
|
12
|
+
</slot>
|
|
13
|
+
</div>
|
|
14
|
+
<div ref="contentRef">
|
|
15
|
+
<slot>
|
|
16
|
+
{{ content }}
|
|
17
|
+
</slot>
|
|
18
|
+
</div>
|
|
19
|
+
</div>
|
|
20
|
+
</template>
|
|
21
|
+
|
|
22
|
+
<script lang="ts">
|
|
23
|
+
import {Popover} from 'bootstrap'
|
|
24
|
+
import {defineComponent, onMounted, PropType, ref, watch} from 'vue'
|
|
25
|
+
import useEventListener from '../../helper/useEventListener'
|
|
26
|
+
export default defineComponent({
|
|
27
|
+
name: 'Popover',
|
|
28
|
+
props: {
|
|
29
|
+
content: {type: String, default: ''},
|
|
30
|
+
id: {type: String, default: ''},
|
|
31
|
+
noninteractive: {type: Boolean, default: false},
|
|
32
|
+
placement: {type: String as PropType<Popover.Options['placement']>, default: 'right'},
|
|
33
|
+
target: {type: String, required: true},
|
|
34
|
+
title: {type: String, default: ''},
|
|
35
|
+
triggers: {type: String as PropType<Popover.Options['trigger']>, default: 'click'},
|
|
36
|
+
show: {type: Boolean, default: false},
|
|
37
|
+
},
|
|
38
|
+
emits: ['show', 'shown', 'hide', 'hidden', 'inserted'],
|
|
39
|
+
setup(props, {emit}) {
|
|
40
|
+
const element = ref<HTMLElement>()
|
|
41
|
+
const target = ref<HTMLElement>()
|
|
42
|
+
const instance = ref<Popover>()
|
|
43
|
+
const titleRef = ref<HTMLElement>()
|
|
44
|
+
const contentRef = ref<HTMLElement>()
|
|
45
|
+
onMounted(() => {
|
|
46
|
+
instance.value = new Popover(`#${props.target}`, {
|
|
47
|
+
container: 'body',
|
|
48
|
+
trigger: props.triggers,
|
|
49
|
+
placement: props.placement,
|
|
50
|
+
title: titleRef.value?.innerHTML || '',
|
|
51
|
+
content: contentRef.value?.innerHTML || '',
|
|
52
|
+
html: true,
|
|
53
|
+
})
|
|
54
|
+
if (document.getElementById(props.target)) {
|
|
55
|
+
target.value = document.getElementById(props.target) as HTMLElement
|
|
56
|
+
}
|
|
57
|
+
element.value?.parentNode?.removeChild(element.value)
|
|
58
|
+
if (props.show) {
|
|
59
|
+
instance.value.show()
|
|
60
|
+
}
|
|
61
|
+
})
|
|
62
|
+
watch(
|
|
63
|
+
() => props.show,
|
|
64
|
+
(show, oldVal) => {
|
|
65
|
+
if (show !== oldVal) {
|
|
66
|
+
if (show) {
|
|
67
|
+
instance.value?.show()
|
|
68
|
+
} else {
|
|
69
|
+
instance.value?.hide()
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
)
|
|
74
|
+
useEventListener(target, 'show.bs.popover', () => emit('show'))
|
|
75
|
+
useEventListener(target, 'shown.bs.popover', () => emit('shown'))
|
|
76
|
+
useEventListener(target, 'hide.bs.popover', () => emit('hide'))
|
|
77
|
+
useEventListener(target, 'hidden.bs.popover', () => emit('hidden'))
|
|
78
|
+
useEventListener(target, 'inserted.bs.popover', () => emit('inserted'))
|
|
79
|
+
return {
|
|
80
|
+
element,
|
|
81
|
+
titleRef,
|
|
82
|
+
contentRef,
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
})
|
|
86
|
+
</script>
|
|
@@ -1,56 +1,57 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<
|
|
2
|
+
<div
|
|
3
3
|
id="message-modal"
|
|
4
|
-
|
|
5
|
-
:show="true"
|
|
6
|
-
@close="closePopup"
|
|
7
|
-
@hide="closePopup"
|
|
8
|
-
@cancel="closePopup"
|
|
4
|
+
class="modal"
|
|
9
5
|
>
|
|
10
|
-
<
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
6
|
+
<div class="modal-backdrop" />
|
|
7
|
+
<div class="modal-dialog">
|
|
8
|
+
<div class="modal-content">
|
|
9
|
+
<div class="modal-header">
|
|
10
|
+
<h5 class="modal-title">
|
|
11
|
+
{{ title }}
|
|
12
|
+
</h5>
|
|
13
|
+
<button
|
|
14
|
+
v-if="closable"
|
|
15
|
+
type="button"
|
|
16
|
+
class="btn-close"
|
|
17
|
+
aria-label="Close"
|
|
18
|
+
@click="closePopup"
|
|
19
|
+
/>
|
|
20
|
+
</div>
|
|
21
|
+
<div class="modal-body">
|
|
22
|
+
<div
|
|
23
|
+
class="content"
|
|
24
|
+
v-html="message"
|
|
25
|
+
/>
|
|
26
|
+
</div>
|
|
27
|
+
<div
|
|
28
|
+
v-if="validatetext"
|
|
29
|
+
class="modal-footer"
|
|
30
|
+
>
|
|
31
|
+
<button
|
|
32
|
+
v-if="canceltext"
|
|
33
|
+
class="btn btn-light m-1"
|
|
34
|
+
@click="onCancel"
|
|
35
|
+
>
|
|
36
|
+
{{ canceltext }}
|
|
37
|
+
</button>
|
|
38
|
+
<button
|
|
39
|
+
v-if="thirdText"
|
|
40
|
+
class="btn btn-primary m-1"
|
|
41
|
+
@click="onThirdAction"
|
|
42
|
+
>
|
|
43
|
+
{{ thirdText }}
|
|
44
|
+
</button>
|
|
45
|
+
<button
|
|
46
|
+
class="btn btn-primary m-1"
|
|
47
|
+
@click="onValid"
|
|
48
|
+
>
|
|
49
|
+
{{ validatetext }}
|
|
50
|
+
</button>
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
54
55
|
</template>
|
|
55
56
|
|
|
56
57
|
<script lang="ts">
|