@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.
Files changed (29) hide show
  1. package/README.md +5 -0
  2. package/index.ts +5 -2
  3. package/package.json +12 -11
  4. package/src/assets/bootstrap-diff.scss +5 -0
  5. package/src/assets/form.scss +19 -0
  6. package/src/assets/modal.scss +9 -10
  7. package/src/components/display/categories/CategoryList.vue +20 -19
  8. package/src/components/display/comments/AddCommentModal.vue +67 -67
  9. package/src/components/display/comments/CommentItem.vue +6 -4
  10. package/src/components/display/emission/EmissionInlineList.vue +4 -2
  11. package/src/components/display/filter/AdvancedSearch.vue +40 -27
  12. package/src/components/display/filter/RubriqueFilter.vue +3 -0
  13. package/src/components/display/organisation/OrganisationChooser.vue +1 -1
  14. package/src/components/display/participant/ParticipantItem.vue +3 -0
  15. package/src/components/display/podcasts/ParticipantDescription.vue +8 -4
  16. package/src/components/display/podcasts/PodcastInlineList.vue +4 -2
  17. package/src/components/display/rubriques/RubriqueList.vue +22 -21
  18. package/src/components/display/sharing/PlayerParameters.vue +8 -4
  19. package/src/components/display/sharing/ShareButtons.vue +5 -3
  20. package/src/components/misc/HomeDropdown.vue +116 -87
  21. package/src/components/misc/Popover.vue +86 -0
  22. package/src/components/misc/modal/MessageModal.vue +51 -50
  23. package/src/components/misc/modal/NewsletterModal.vue +88 -82
  24. package/src/components/misc/modal/QrCodeModal.vue +31 -21
  25. package/src/components/misc/modal/ShareModalPlayer.vue +91 -51
  26. package/src/components/pages/Home.vue +8 -1
  27. package/src/components/pages/Participant.vue +2 -1
  28. package/src/helper/useEventListener.ts +18 -0
  29. 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
- <b-form-radio
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
- <b-form-radio
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 ms-2"
16
+ class="saooti-help ml-2"
17
17
  :aria-label="$t('Help')"
18
18
  />
19
- <b-popover
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
- </b-popover>
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
- <b-dropdown
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
- <b-dropdown-text>
16
- <router-link
17
- v-if="isContribution && !isPodcastmaker"
18
- to="/main/priv/upload"
19
- class="align-self-center w-100 mb-2"
20
- >
21
- <button class="btn btn-primary w-100">
22
- {{ $t('Upload') }}
23
- </button>
24
- </router-link>
25
- <div @click="displayMenuPhone(true)">
26
- <b-dropdown-item
27
- v-if="!isPodcastmaker"
28
- to="/main/priv/backoffice"
29
- class="linkSpace"
30
- >
31
- {{ $t('My space') }}
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
- {{ $t('TutoMag') }}
61
- </b-dropdown-item>
62
- <b-dropdown-divider />
63
- <b-dropdown-item href="/sso/logout">
64
- {{
65
- $t('Logout')
66
- }}
67
- </b-dropdown-item>
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
- </b-dropdown-text>
70
- </b-dropdown>
71
- <b-dropdown
90
+ </ul>
91
+ </div>
92
+ <div
72
93
  v-else
73
- right
74
- toggle-class="text-decoration-none m-1 admin-button btn-rounded-icon"
75
- no-caret
94
+ class="dropdown btn-group"
76
95
  >
77
- <template #button-content>
78
- <i class="saooti-user-octopus text-dark" /><span class="visually-hidden">Profile</span>
79
- </template>
80
- <b-dropdown-item href="/sso/login">
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
- $t('Create an account')
89
- }}
90
- </b-dropdown-item>
91
- </b-dropdown>
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
- <b-modal
2
+ <div
3
3
  id="message-modal"
4
- :title="title"
5
- :show="true"
6
- @close="closePopup"
7
- @hide="closePopup"
8
- @cancel="closePopup"
4
+ class="modal"
9
5
  >
10
- <template
11
- v-if="!closable"
12
- #modal-header-close
13
- >
14
- <span />
15
- </template>
16
- <template #default>
17
- <div
18
- class="content"
19
- v-html="message"
20
- />
21
- </template>
22
- <template
23
- v-if="validatetext"
24
- #modal-footer
25
- >
26
- <button
27
- v-if="canceltext"
28
- class="btn btn-light m-1"
29
- @click="onCancel"
30
- >
31
- {{ canceltext }}
32
- </button>
33
- <button
34
- v-if="thirdText"
35
- class="btn btn-primary m-1"
36
- @click="onThirdAction"
37
- >
38
- {{ thirdText }}
39
- </button>
40
- <button
41
- class="btn btn-primary m-1"
42
- @click="onValid"
43
- >
44
- {{ validatetext }}
45
- </button>
46
- </template>
47
- <template
48
- v-else
49
- #modal-footer
50
- >
51
- <span />
52
- </template>
53
- </b-modal>
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">