@saooti/octopus-sdk 33.1.2 → 33.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/package.json +1 -3
- package/src/App.vue +1 -1
- package/src/assets/_utilities.scss +522 -0
- package/src/assets/bootstrap.scss +181 -0
- package/src/assets/form.scss +0 -20
- package/src/assets/general.scss +1 -0
- package/src/assets/modal.scss +49 -8
- package/src/assets/octopus-library.scss +2 -3
- package/src/components/display/categories/CategoryChooser.vue +1 -1
- package/src/components/display/categories/CategoryFilter.vue +60 -46
- package/src/components/display/categories/CategoryList.vue +22 -19
- package/src/components/display/comments/AddCommentModal.vue +60 -67
- package/src/components/display/comments/CommentBasicView.vue +2 -3
- package/src/components/display/emission/EmissionItem.vue +2 -1
- package/src/components/display/emission/EmissionPlayerItem.vue +0 -11
- package/src/components/display/participant/ParticipantItem.vue +2 -1
- package/src/components/display/playlist/PlaylistItem.vue +2 -1
- package/src/components/display/podcasts/PodcastInlineList.vue +1 -1
- package/src/components/display/podcasts/PodcastInlineListClassic.vue +1 -1
- package/src/components/display/podcasts/PodcastInlineListTemplate.vue +6 -2
- package/src/components/display/podcasts/PodcastPlayBar.vue +9 -35
- package/src/components/display/podcasts/TagList.vue +0 -2
- package/src/components/display/rubriques/RubriqueList.vue +25 -20
- package/src/components/display/sharing/PlayerParameters.vue +76 -99
- package/src/components/display/sharing/ShareButtons.vue +3 -5
- package/src/components/display/sharing/ShareButtonsIntern.vue +1 -1
- package/src/components/display/sharing/ShareDistribution.vue +11 -10
- package/src/components/display/sharing/SubscribeButtons.vue +1 -1
- package/src/components/form/ClassicLoading.vue +5 -1
- package/src/components/misc/Accordion.vue +48 -0
- package/src/components/misc/ErrorMessage.vue +2 -1
- package/src/components/misc/HomeDropdown.vue +66 -63
- package/src/components/misc/Nav.vue +92 -0
- package/src/components/misc/Popover.vue +137 -98
- package/src/components/misc/ProgressBar.vue +96 -0
- package/src/components/misc/Spinner.vue +26 -0
- package/src/components/misc/modal/ClassicModal.vue +141 -0
- package/src/components/misc/modal/ClipboardModal.vue +25 -40
- package/src/components/misc/modal/MessageModal.vue +45 -60
- package/src/components/misc/modal/NewsletterModal.vue +84 -92
- package/src/components/misc/modal/QrCodeModal.vue +19 -36
- package/src/components/misc/modal/ShareModalPlayer.vue +69 -133
- package/src/components/misc/player/Player.vue +0 -6
- package/src/components/misc/player/PlayerCompact.vue +4 -3
- package/src/components/misc/player/PlayerLarge.vue +12 -8
- package/src/components/misc/player/PlayerProgressBar.vue +10 -48
- package/src/components/mixins/player/playerLogic.ts +1 -1
- package/src/components/pages/Podcast.vue +1 -1
- package/src/assets/bootstrap-diff.scss +0 -195
|
@@ -251,17 +251,6 @@ export default defineComponent({
|
|
|
251
251
|
height: min-content;
|
|
252
252
|
border-radius: 0.8rem;
|
|
253
253
|
overflow: hidden;
|
|
254
|
-
.progress{
|
|
255
|
-
height: 6px;
|
|
256
|
-
}
|
|
257
|
-
.progress-bar-cursor{
|
|
258
|
-
width: 10px;
|
|
259
|
-
height: 10px;
|
|
260
|
-
border-radius: 50%;
|
|
261
|
-
background: black;
|
|
262
|
-
align-self: center;
|
|
263
|
-
position: absolute;
|
|
264
|
-
}
|
|
265
254
|
.emission-item-border-color {
|
|
266
255
|
border-color: #ddd;
|
|
267
256
|
}
|
|
@@ -22,7 +22,8 @@
|
|
|
22
22
|
<span
|
|
23
23
|
v-if="!activeParticipant && !isPodcastmaker && editRight"
|
|
24
24
|
:title="$t('Participant have not podcasts')"
|
|
25
|
-
class="saooti-warning text-danger me-1"
|
|
25
|
+
class="saooti-warning text-danger me-1"
|
|
26
|
+
/>
|
|
26
27
|
<div class="participant-name">
|
|
27
28
|
{{ name }}
|
|
28
29
|
</div>
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
:previous-available="previousAvailable"
|
|
13
13
|
:next-available="nextAvailable"
|
|
14
14
|
:no-rubriquage-id="noRubriquageId"
|
|
15
|
-
:
|
|
15
|
+
:podcast-id="podcastId"
|
|
16
16
|
@sortChrono="sortChrono"
|
|
17
17
|
@sortPopular="sortPopular"
|
|
18
18
|
@displayPrevious="displayPrevious"
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
>
|
|
5
5
|
<div
|
|
6
6
|
class="d-flex align-items-center"
|
|
7
|
-
:class="podcastId?'mb-4':'mb-2'"
|
|
7
|
+
:class="podcastId?'mb-4':'mb-2'"
|
|
8
|
+
>
|
|
8
9
|
<h2 class="mb-0">
|
|
9
10
|
{{ title }}
|
|
10
11
|
</h2>
|
|
@@ -16,7 +17,10 @@
|
|
|
16
17
|
@click="handleSeeMoreButton"
|
|
17
18
|
/>
|
|
18
19
|
</div>
|
|
19
|
-
<div
|
|
20
|
+
<div
|
|
21
|
+
v-if="!podcastId"
|
|
22
|
+
class="d-flex justify-content-between"
|
|
23
|
+
>
|
|
20
24
|
<div class="d-flex">
|
|
21
25
|
<button
|
|
22
26
|
class="btn btn-underline"
|
|
@@ -7,23 +7,11 @@
|
|
|
7
7
|
{{ playedTime }}
|
|
8
8
|
</div>
|
|
9
9
|
<div class="position-relative flex-grow-1">
|
|
10
|
-
<
|
|
11
|
-
|
|
10
|
+
<ProgressBar
|
|
11
|
+
:main-progress="percentProgress"
|
|
12
|
+
class="medium"
|
|
12
13
|
@mouseup="seekTo"
|
|
13
|
-
|
|
14
|
-
<div
|
|
15
|
-
class="progress-bar primary-bg"
|
|
16
|
-
role="progressbar"
|
|
17
|
-
aria-valuenow="0"
|
|
18
|
-
aria-valuemin="0"
|
|
19
|
-
aria-valuemax="100"
|
|
20
|
-
:style="'width: ' + percentProgress + '%'"
|
|
21
|
-
/>
|
|
22
|
-
<div
|
|
23
|
-
class="progress-bar-cursor"
|
|
24
|
-
:style="'left:' + percentProgress + '%'"
|
|
25
|
-
/>
|
|
26
|
-
</div>
|
|
14
|
+
/>
|
|
27
15
|
</div>
|
|
28
16
|
<div class="ms-2">
|
|
29
17
|
{{ totalTime }}
|
|
@@ -32,12 +20,16 @@
|
|
|
32
20
|
</template>
|
|
33
21
|
|
|
34
22
|
<script lang="ts">
|
|
23
|
+
import ProgressBar from '../../misc/ProgressBar.vue';
|
|
35
24
|
import DurationHelper from '../../../helper/duration';
|
|
36
25
|
import displayMethods from '../../mixins/displayMethods';
|
|
37
26
|
import { state } from '../../../store/paramStore';
|
|
38
27
|
import { defineComponent } from 'vue'
|
|
39
28
|
export default defineComponent({
|
|
40
29
|
name: 'PodcastPlayBar',
|
|
30
|
+
components:{
|
|
31
|
+
ProgressBar
|
|
32
|
+
},
|
|
41
33
|
mixins: [displayMethods],
|
|
42
34
|
props: {
|
|
43
35
|
podcastId: { default: undefined, type: Number},
|
|
@@ -80,22 +72,4 @@ export default defineComponent({
|
|
|
80
72
|
}
|
|
81
73
|
},
|
|
82
74
|
})
|
|
83
|
-
</script>
|
|
84
|
-
|
|
85
|
-
<style lang="scss">
|
|
86
|
-
.octopus-app{
|
|
87
|
-
.podcast-play-bar {
|
|
88
|
-
.progress{
|
|
89
|
-
height: 6px;
|
|
90
|
-
}
|
|
91
|
-
.progress-bar-cursor{
|
|
92
|
-
width: 10px;
|
|
93
|
-
height: 10px;
|
|
94
|
-
border-radius: 50%;
|
|
95
|
-
background: black;
|
|
96
|
-
align-self: center;
|
|
97
|
-
position: absolute;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
</style>
|
|
75
|
+
</script>
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<label
|
|
8
8
|
for="rubrique-list-select"
|
|
9
9
|
class="hid"
|
|
10
|
-
>{{$t('By topic')}}</label>
|
|
10
|
+
>{{ $t('By topic') }}</label>
|
|
11
11
|
<select
|
|
12
12
|
id="rubrique-list-select"
|
|
13
13
|
v-model="rubriquage"
|
|
@@ -32,31 +32,32 @@
|
|
|
32
32
|
{{ rubrique.name }}
|
|
33
33
|
</button>
|
|
34
34
|
</div>
|
|
35
|
-
<
|
|
35
|
+
<button
|
|
36
36
|
v-show="hidenRubriques.length"
|
|
37
|
-
|
|
37
|
+
id="rubriques-dropdown"
|
|
38
|
+
class="btn admin-button saooti-more"
|
|
39
|
+
:title="$t('See more')"
|
|
40
|
+
/>
|
|
41
|
+
<Popover
|
|
42
|
+
target="rubriques-dropdown"
|
|
43
|
+
:only-click="true"
|
|
44
|
+
:is-fixed="true"
|
|
45
|
+
:left-pos="true"
|
|
38
46
|
>
|
|
39
47
|
<button
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
:key="rubrique.rubriqueId"
|
|
49
|
-
class="me-3 dropdown-item"
|
|
50
|
-
@click="addFilter(rubrique)"
|
|
51
|
-
>
|
|
52
|
-
{{ rubrique.name }}
|
|
53
|
-
</div>
|
|
54
|
-
</div>
|
|
55
|
-
</div>
|
|
48
|
+
v-for="rubrique in hidenRubriques"
|
|
49
|
+
:key="rubrique.rubriqueId"
|
|
50
|
+
class="me-3 octopus-dropdown-item"
|
|
51
|
+
@mousedown="addFilter(rubrique)"
|
|
52
|
+
>
|
|
53
|
+
{{ rubrique.name }}
|
|
54
|
+
</button>
|
|
55
|
+
</Popover>
|
|
56
56
|
</div>
|
|
57
57
|
</template>
|
|
58
58
|
|
|
59
59
|
<script lang="ts">
|
|
60
|
+
import Popover from '../../misc/Popover.vue';
|
|
60
61
|
import { Rubrique } from '@/store/class/rubrique/rubrique';
|
|
61
62
|
import { Rubriquage } from '@/store/class/rubrique/rubriquage';
|
|
62
63
|
import { RubriquageFilter } from '@/store/class/rubrique/rubriquageFilter';
|
|
@@ -64,9 +65,14 @@ import { defineComponent } from 'vue'
|
|
|
64
65
|
export default defineComponent({
|
|
65
66
|
name: 'RubriqueList',
|
|
66
67
|
|
|
68
|
+
components:{
|
|
69
|
+
Popover
|
|
70
|
+
},
|
|
71
|
+
|
|
67
72
|
props: {
|
|
68
73
|
rubriquages: { default: () => [], type: Array as ()=>Array<Rubriquage>},
|
|
69
74
|
},
|
|
75
|
+
|
|
70
76
|
|
|
71
77
|
data() {
|
|
72
78
|
return {
|
|
@@ -114,7 +120,6 @@ export default defineComponent({
|
|
|
114
120
|
window.removeEventListener('resize', this.resizeWindow);
|
|
115
121
|
},
|
|
116
122
|
methods: {
|
|
117
|
-
|
|
118
123
|
initRubriques(): void{
|
|
119
124
|
if(!this.rubriquage){ return ;}
|
|
120
125
|
this.$store.commit('filterRubriqueDisplay', this.rubriquage.rubriques);
|
|
@@ -1,118 +1,95 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
<Accordion
|
|
3
|
+
class="mt-3"
|
|
4
|
+
:title="$t('player parameters')"
|
|
5
|
+
id-composer="playerParameters"
|
|
5
6
|
>
|
|
6
|
-
<div
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
<div
|
|
8
|
+
v-if="choseNumberEpisode"
|
|
9
|
+
class="d-flex flex-column flex-grow-1"
|
|
10
|
+
>
|
|
11
|
+
<div
|
|
12
|
+
v-if="displayChoiceAllEpisodes"
|
|
13
|
+
class="d-flex align-items-center flex-wrap mt-1"
|
|
10
14
|
>
|
|
11
|
-
<
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
aria-controls="playerParameters"
|
|
15
|
+
<input
|
|
16
|
+
v-model="episodeNumbers"
|
|
17
|
+
class="form-check-input"
|
|
18
|
+
type="radio"
|
|
19
|
+
name="episodeNumbers"
|
|
20
|
+
value="all"
|
|
18
21
|
>
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
</h2>
|
|
22
|
+
<span class="flex-shrink-0">{{ $t('Show every episode') }}</span>
|
|
23
|
+
</div>
|
|
22
24
|
<div
|
|
23
|
-
|
|
24
|
-
class="
|
|
25
|
-
titleledby="labelPlayerParameter"
|
|
26
|
-
data-bs-parent="#accordionParameters"
|
|
25
|
+
class="d-flex align-items-center flex-wrap"
|
|
26
|
+
:class="displayChoiceAllEpisodes ? '' : 'mt-3'"
|
|
27
27
|
>
|
|
28
|
-
<
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
<input
|
|
51
|
-
v-if="displayChoiceAllEpisodes"
|
|
52
|
-
v-model="episodeNumbers"
|
|
53
|
-
class="form-check-input"
|
|
54
|
-
type="radio"
|
|
55
|
-
name="episodeNumbers"
|
|
56
|
-
value="number"
|
|
57
|
-
>
|
|
58
|
-
<span class="flex-shrink-0">{{ $t('Show') }}</span>
|
|
59
|
-
<input
|
|
60
|
-
id="number-input"
|
|
61
|
-
v-model="iFrameNumber"
|
|
62
|
-
type="number"
|
|
63
|
-
min="1"
|
|
64
|
-
max="50"
|
|
65
|
-
class="input-share-player text-center m-2"
|
|
66
|
-
>
|
|
67
|
-
<label
|
|
68
|
-
for="number-input"
|
|
69
|
-
:title="$t('Number of player podcasts')"
|
|
70
|
-
/>
|
|
71
|
-
<span class="flex-shrink-0">{{ $t('Last podcasts') }}</span>
|
|
72
|
-
</div>
|
|
73
|
-
<ClassicCheckbox
|
|
74
|
-
v-model:textInit="proceedReading"
|
|
75
|
-
id-checkbox="proceed-reading-checkbox"
|
|
76
|
-
:label="$t('Proceed reading')"
|
|
77
|
-
/>
|
|
78
|
-
<ClassicCheckbox
|
|
79
|
-
v-model:textInit="isVisibleTemp"
|
|
80
|
-
id-checkbox="is-visible-checkbox"
|
|
81
|
-
:label="$t('Podcasts still available')"
|
|
82
|
-
/>
|
|
83
|
-
</div>
|
|
84
|
-
<div
|
|
85
|
-
v-if="displayArticleParam"
|
|
86
|
-
class="d-flex flex-column flex-grow-1"
|
|
87
|
-
>
|
|
88
|
-
<ClassicCheckbox
|
|
89
|
-
v-model:textInit="displayArticle"
|
|
90
|
-
id-checkbox="display-article-checkbox"
|
|
91
|
-
:label="$t('Display associated article')"
|
|
92
|
-
/>
|
|
93
|
-
</div>
|
|
94
|
-
<div
|
|
95
|
-
v-if="displayTranscriptParam"
|
|
96
|
-
class="d-flex flex-column flex-grow-1"
|
|
97
|
-
>
|
|
98
|
-
<ClassicCheckbox
|
|
99
|
-
v-model:textInit="displayTranscript"
|
|
100
|
-
id-checkbox="display-transcript-checkbox"
|
|
101
|
-
:label="$t('If the transcript is available, show it')"
|
|
102
|
-
/>
|
|
103
|
-
</div>
|
|
104
|
-
</div>
|
|
28
|
+
<input
|
|
29
|
+
v-if="displayChoiceAllEpisodes"
|
|
30
|
+
v-model="episodeNumbers"
|
|
31
|
+
class="form-check-input"
|
|
32
|
+
type="radio"
|
|
33
|
+
name="episodeNumbers"
|
|
34
|
+
value="number"
|
|
35
|
+
>
|
|
36
|
+
<span class="flex-shrink-0">{{ $t('Show') }}</span>
|
|
37
|
+
<input
|
|
38
|
+
id="number-input"
|
|
39
|
+
v-model="iFrameNumber"
|
|
40
|
+
type="number"
|
|
41
|
+
min="1"
|
|
42
|
+
max="50"
|
|
43
|
+
class="input-share-player text-center m-2"
|
|
44
|
+
>
|
|
45
|
+
<label
|
|
46
|
+
for="number-input"
|
|
47
|
+
:title="$t('Number of player podcasts')"
|
|
48
|
+
/>
|
|
49
|
+
<span class="flex-shrink-0">{{ $t('Last podcasts') }}</span>
|
|
105
50
|
</div>
|
|
51
|
+
<ClassicCheckbox
|
|
52
|
+
v-model:textInit="proceedReading"
|
|
53
|
+
id-checkbox="proceed-reading-checkbox"
|
|
54
|
+
:label="$t('Proceed reading')"
|
|
55
|
+
/>
|
|
56
|
+
<ClassicCheckbox
|
|
57
|
+
v-model:textInit="isVisibleTemp"
|
|
58
|
+
id-checkbox="is-visible-checkbox"
|
|
59
|
+
:label="$t('Podcasts still available')"
|
|
60
|
+
/>
|
|
61
|
+
</div>
|
|
62
|
+
<div
|
|
63
|
+
v-if="displayArticleParam"
|
|
64
|
+
class="d-flex flex-column flex-grow-1"
|
|
65
|
+
>
|
|
66
|
+
<ClassicCheckbox
|
|
67
|
+
v-model:textInit="displayArticle"
|
|
68
|
+
id-checkbox="display-article-checkbox"
|
|
69
|
+
:label="$t('Display associated article')"
|
|
70
|
+
/>
|
|
71
|
+
</div>
|
|
72
|
+
<div
|
|
73
|
+
v-if="displayTranscriptParam"
|
|
74
|
+
class="d-flex flex-column flex-grow-1"
|
|
75
|
+
>
|
|
76
|
+
<ClassicCheckbox
|
|
77
|
+
v-model:textInit="displayTranscript"
|
|
78
|
+
id-checkbox="display-transcript-checkbox"
|
|
79
|
+
:label="$t('If the transcript is available, show it')"
|
|
80
|
+
/>
|
|
106
81
|
</div>
|
|
107
|
-
</
|
|
82
|
+
</Accordion>
|
|
108
83
|
</template>
|
|
109
84
|
|
|
110
85
|
<script lang="ts">
|
|
111
86
|
import ClassicCheckbox from '../../form/ClassicCheckbox.vue';
|
|
87
|
+
import Accordion from '../../misc/Accordion.vue';
|
|
112
88
|
import { defineComponent } from 'vue'
|
|
113
89
|
export default defineComponent({
|
|
114
90
|
components:{
|
|
115
91
|
ClassicCheckbox,
|
|
92
|
+
Accordion
|
|
116
93
|
},
|
|
117
94
|
props: {
|
|
118
95
|
isVisible: { default: false, type: Boolean},
|
|
@@ -13,15 +13,13 @@
|
|
|
13
13
|
role="button"
|
|
14
14
|
tabindex="0"
|
|
15
15
|
class="saooti-help ms-2 align-items-start"
|
|
16
|
-
:title="$t('Help')"
|
|
17
16
|
/>
|
|
18
17
|
<Popover
|
|
19
18
|
v-if="authenticated"
|
|
20
19
|
target="popover-share-help"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
</Popover>
|
|
20
|
+
:title="$t('Help')"
|
|
21
|
+
:content="$t('Share this page without edit and share blocks')"
|
|
22
|
+
/>
|
|
25
23
|
</div>
|
|
26
24
|
<div class="d-flex align-items-center">
|
|
27
25
|
<ShareButtonsIntern
|
|
@@ -3,15 +3,16 @@
|
|
|
3
3
|
<h3>{{ $t('Distribute') }}</h3>
|
|
4
4
|
<p class="sharing-distribution-container">
|
|
5
5
|
{{ $t('Rss feed:') }}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
6
|
+
</p><div class="primary-darker hide-small-screen text-break">
|
|
7
|
+
{{ rss }}
|
|
8
|
+
</div>
|
|
9
|
+
<input
|
|
10
|
+
type="button"
|
|
11
|
+
:value="$t('Copy')"
|
|
12
|
+
class="btn btn-primary"
|
|
13
|
+
:title="$t('Copy')"
|
|
14
|
+
@click="onCopyCode(rss, afterCopy)"
|
|
15
|
+
/>
|
|
15
16
|
<RssSection
|
|
16
17
|
v-if="emission"
|
|
17
18
|
:emission="emission"
|
|
@@ -23,7 +24,7 @@
|
|
|
23
24
|
:to="platform.url"
|
|
24
25
|
class="text-dark"
|
|
25
26
|
>
|
|
26
|
-
<span :class="platform.icon"
|
|
27
|
+
<span :class="platform.icon" />{{ platform.title }}
|
|
27
28
|
</router-link>
|
|
28
29
|
</div>
|
|
29
30
|
<Snackbar
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
v-if="loadingText"
|
|
4
4
|
class="d-flex align-items-center justify-content-center"
|
|
5
5
|
>
|
|
6
|
-
<
|
|
6
|
+
<Spinner class="me-3" />
|
|
7
7
|
<div class="h3 mt-2">
|
|
8
8
|
{{ loadingText }}
|
|
9
9
|
</div>
|
|
@@ -17,9 +17,13 @@
|
|
|
17
17
|
</template>
|
|
18
18
|
|
|
19
19
|
<script lang="ts">
|
|
20
|
+
import Spinner from '../misc/Spinner.vue';
|
|
20
21
|
import { defineComponent } from 'vue';
|
|
21
22
|
export default defineComponent({
|
|
22
23
|
name: "ClassicLoading",
|
|
24
|
+
components:{
|
|
25
|
+
Spinner
|
|
26
|
+
},
|
|
23
27
|
props: {
|
|
24
28
|
loadingText: { default: undefined, type: String},
|
|
25
29
|
errorText: { default: undefined, type: String},
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div
|
|
3
|
+
class="octopus-accordion"
|
|
4
|
+
>
|
|
5
|
+
<button
|
|
6
|
+
class="btn-transparent w-100 p-2 text-start d-flex align-items-center"
|
|
7
|
+
@click="isOpen=!isOpen"
|
|
8
|
+
>
|
|
9
|
+
<span class="flex-grow-1">{{ title }}</span>
|
|
10
|
+
<span class="saooti-down" />
|
|
11
|
+
</button>
|
|
12
|
+
<div
|
|
13
|
+
v-show="isOpen"
|
|
14
|
+
class="body p-2"
|
|
15
|
+
>
|
|
16
|
+
<slot />
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
</template>
|
|
20
|
+
|
|
21
|
+
<script lang="ts">
|
|
22
|
+
import { defineComponent } from 'vue';
|
|
23
|
+
export default defineComponent({
|
|
24
|
+
name: "Accordion",
|
|
25
|
+
props: {
|
|
26
|
+
title: { default: '', type: String },
|
|
27
|
+
},
|
|
28
|
+
emits:['open'],
|
|
29
|
+
data () {
|
|
30
|
+
return {
|
|
31
|
+
isOpen: false as boolean,
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
watch:{
|
|
35
|
+
isOpen(){
|
|
36
|
+
this.$emit('open');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
</script>
|
|
41
|
+
<style lang="scss">
|
|
42
|
+
.octopus-accordion{
|
|
43
|
+
border: 1px solid #ccc;
|
|
44
|
+
.body{
|
|
45
|
+
border-top: 1px solid #ccc;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
</style>
|