@saooti/octopus-sdk 1.0.0 → 29.0.2

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 (230) hide show
  1. package/README.md +73 -0
  2. package/index.d.ts +4 -0
  3. package/index.ts +12 -0
  4. package/package.json +61 -39
  5. package/public/css/fonts/saooti-ui.eot +0 -0
  6. package/public/css/fonts/saooti-ui.svg +30 -19
  7. package/public/css/fonts/saooti-ui.ttf +0 -0
  8. package/public/css/fonts/saooti-ui.woff +0 -0
  9. package/public/css/fonts/style.css +48 -5
  10. package/public/img/ACPM.png +0 -0
  11. package/public/img/article.png +0 -0
  12. package/src/App.vue +97 -31
  13. package/src/api/comments.ts +3 -1
  14. package/src/api/emissions.ts +5 -2
  15. package/src/api/initialize.ts +3 -2
  16. package/src/api/podcasts.ts +5 -2
  17. package/src/api/profile.ts +4 -2
  18. package/src/api/studio.ts +12 -1
  19. package/src/assets/bootstrap-diff.scss +265 -0
  20. package/src/assets/form.scss +23 -0
  21. package/src/assets/general.scss +47 -20
  22. package/src/assets/modal.scss +9 -10
  23. package/src/assets/multiselect.scss +19 -2
  24. package/src/assets/octopus-library.scss +16 -4
  25. package/src/assets/share.scss +343 -0
  26. package/src/components/display/aggregator/RssSection.vue +4 -4
  27. package/src/components/display/categories/CategoryChooser.vue +152 -105
  28. package/src/components/display/categories/CategoryFilter.vue +108 -0
  29. package/src/components/display/categories/CategoryList.vue +138 -109
  30. package/src/components/display/comments/AddCommentModal.vue +104 -87
  31. package/src/components/display/comments/CommentInput.vue +137 -118
  32. package/src/components/display/comments/CommentItem.vue +155 -137
  33. package/src/components/display/comments/CommentList.vue +142 -120
  34. package/src/components/display/comments/CommentParentInfo.vue +39 -35
  35. package/src/components/display/comments/CommentPlayer.vue +54 -48
  36. package/src/components/display/comments/CommentSection.vue +57 -58
  37. package/src/components/display/edit/EditBox.vue +4 -4
  38. package/src/components/display/edit/EditCommentBox.vue +25 -31
  39. package/src/components/display/emission/EmissionChooser.vue +82 -80
  40. package/src/components/display/emission/EmissionInlineList.vue +118 -105
  41. package/src/components/display/emission/EmissionItem.vue +66 -167
  42. package/src/components/display/emission/EmissionList.vue +96 -122
  43. package/src/components/display/emission/EmissionPlayerItem.vue +131 -126
  44. package/src/components/display/filter/AdvancedSearch.vue +306 -372
  45. package/src/components/display/filter/CategoryFilter.vue +117 -0
  46. package/src/components/display/filter/MonetizableFilter.vue +24 -10
  47. package/src/components/display/filter/ProductorSearch.vue +131 -135
  48. package/src/components/display/filter/RubriqueChoice.vue +104 -0
  49. package/src/components/display/filter/RubriqueFilter.vue +235 -0
  50. package/src/components/display/live/CountDown.vue +30 -29
  51. package/src/components/display/live/LiveHorizontalList.vue +40 -34
  52. package/src/components/display/live/LiveItem.vue +146 -158
  53. package/src/components/display/live/LiveList.vue +167 -154
  54. package/src/components/display/organisation/OrganisationChooser.vue +125 -124
  55. package/src/components/display/organisation/OrganisationChooserLight.vue +40 -47
  56. package/src/components/display/participant/ParticipantItem.vue +92 -108
  57. package/src/components/display/participant/ParticipantList.vue +76 -69
  58. package/src/components/display/playlist/PlaylistItem.vue +45 -56
  59. package/src/components/display/playlist/PlaylistList.vue +57 -48
  60. package/src/components/display/playlist/PodcastList.vue +94 -70
  61. package/src/components/display/podcasts/AnimatorsItem.vue +26 -23
  62. package/src/components/display/podcasts/ParticipantDescription.vue +115 -0
  63. package/src/components/display/podcasts/PodcastFilterList.vue +84 -85
  64. package/src/components/display/podcasts/PodcastImage.vue +244 -208
  65. package/src/components/display/podcasts/PodcastInlineList.vue +145 -207
  66. package/src/components/display/podcasts/PodcastItem.vue +150 -132
  67. package/src/components/display/podcasts/PodcastList.vue +89 -110
  68. package/src/components/display/podcasts/TagList.vue +23 -16
  69. package/src/components/display/rubriques/RubriqueChooser.vue +137 -123
  70. package/src/components/display/rubriques/RubriqueList.vue +227 -0
  71. package/src/components/display/sharing/PlayerParameters.vue +154 -106
  72. package/src/components/display/sharing/QrCode.vue +58 -0
  73. package/src/components/display/sharing/ShareButtons.vue +214 -92
  74. package/src/components/display/sharing/ShareDistribution.vue +110 -121
  75. package/src/components/display/sharing/SharePlayer.vue +245 -190
  76. package/src/components/display/sharing/SubscribeButtons.vue +130 -66
  77. package/src/components/display/studio/RecordingItemButton.vue +4 -4
  78. package/src/components/misc/ErrorMessage.vue +21 -16
  79. package/src/components/misc/Footer.vue +131 -66
  80. package/src/components/misc/HomeDropdown.vue +166 -123
  81. package/src/components/misc/LeftMenu.vue +151 -134
  82. package/src/components/misc/Player.vue +332 -328
  83. package/src/components/misc/Snackbar.vue +27 -29
  84. package/src/components/misc/TopBar.vue +204 -174
  85. package/src/components/misc/modal/ClipboardModal.vue +46 -26
  86. package/src/components/misc/modal/MessageModal.vue +67 -51
  87. package/src/components/misc/modal/NewsletterModal.vue +179 -136
  88. package/src/components/misc/modal/QrCodeModal.vue +83 -0
  89. package/src/components/misc/modal/ShareModalPlayer.vue +133 -74
  90. package/src/components/mixins/functions.ts +21 -18
  91. package/src/components/mixins/init.ts +24 -0
  92. package/src/components/mixins/organisationFilter.ts +24 -0
  93. package/src/components/pages/Category.vue +26 -26
  94. package/src/components/pages/Emission.vue +120 -92
  95. package/src/components/pages/Emissions.vue +109 -86
  96. package/src/components/pages/Home.vue +70 -16
  97. package/src/components/pages/Lives.vue +57 -47
  98. package/src/components/pages/Participant.vue +93 -77
  99. package/src/components/pages/Participants.vue +44 -31
  100. package/src/components/pages/Playlist.vue +63 -52
  101. package/src/components/pages/Playlists.vue +41 -39
  102. package/src/components/pages/Podcast.vue +265 -251
  103. package/src/components/pages/Podcasts.vue +135 -104
  104. package/src/components/pages/Rubrique.vue +25 -19
  105. package/src/components/pages/Search.vue +71 -67
  106. package/src/helper/dom.ts +2 -2
  107. package/src/helper/duration.ts +18 -8
  108. package/src/locale/educationen.ts +14 -0
  109. package/src/locale/en.ts +299 -1
  110. package/src/locale/fr.ts +25 -10
  111. package/src/locale/messages.ts +3 -2
  112. package/src/main.ts +54 -32
  113. package/src/router/router.ts +184 -159
  114. package/src/shims-tsx.d.ts +13 -0
  115. package/src/shims-vue-recaptcha-v3.d.ts +9 -0
  116. package/src/shims-vue.d.ts +5 -6
  117. package/src/store/AppStore.ts +36 -171
  118. package/src/store/class/category.ts +8 -0
  119. package/src/store/class/comment.ts +17 -0
  120. package/src/store/class/conference.ts +27 -0
  121. package/src/store/class/customPlayer.ts +8 -0
  122. package/src/store/class/emission.ts +20 -0
  123. package/src/store/class/fetchParam.ts +16 -0
  124. package/src/store/class/media.ts +13 -0
  125. package/src/store/class/organisation.ts +19 -0
  126. package/src/store/class/participant.ts +12 -0
  127. package/src/store/class/person.ts +13 -0
  128. package/src/store/class/player.ts +12 -0
  129. package/src/store/class/playlist.ts +15 -0
  130. package/src/store/class/podcast.ts +37 -0
  131. package/src/store/class/rubriquage.ts +9 -0
  132. package/src/store/class/rubriquageFilter.ts +5 -0
  133. package/src/store/class/rubrique.ts +8 -0
  134. package/src/store/paramStore.ts +70 -29
  135. package/src/store/typeAppStore.ts +171 -237
  136. package/src/vuex-shim.d.ts +8 -0
  137. package/tsconfig.json +4 -0
  138. package/vue.config.js +14 -0
  139. package/public/img/ACPM.PNG +0 -0
  140. package/src/assets/bootstrap_scss/_alert.scss +0 -51
  141. package/src/assets/bootstrap_scss/_badge.scss +0 -54
  142. package/src/assets/bootstrap_scss/_breadcrumb.scss +0 -42
  143. package/src/assets/bootstrap_scss/_button-group.scss +0 -164
  144. package/src/assets/bootstrap_scss/_buttons.scss +0 -291
  145. package/src/assets/bootstrap_scss/_card.scss +0 -278
  146. package/src/assets/bootstrap_scss/_carousel.scss +0 -197
  147. package/src/assets/bootstrap_scss/_close.scss +0 -41
  148. package/src/assets/bootstrap_scss/_code.scss +0 -48
  149. package/src/assets/bootstrap_scss/_custom-forms.scss +0 -522
  150. package/src/assets/bootstrap_scss/_dropdown.scss +0 -201
  151. package/src/assets/bootstrap_scss/_forms.scss +0 -352
  152. package/src/assets/bootstrap_scss/_functions.scss +0 -134
  153. package/src/assets/bootstrap_scss/_grid.scss +0 -69
  154. package/src/assets/bootstrap_scss/_images.scss +0 -42
  155. package/src/assets/bootstrap_scss/_input-group.scss +0 -191
  156. package/src/assets/bootstrap_scss/_jumbotron.scss +0 -17
  157. package/src/assets/bootstrap_scss/_list-group.scss +0 -158
  158. package/src/assets/bootstrap_scss/_media.scss +0 -8
  159. package/src/assets/bootstrap_scss/_mixins.scss +0 -47
  160. package/src/assets/bootstrap_scss/_modal.scss +0 -243
  161. package/src/assets/bootstrap_scss/_nav.scss +0 -120
  162. package/src/assets/bootstrap_scss/_navbar.scss +0 -324
  163. package/src/assets/bootstrap_scss/_pagination.scss +0 -74
  164. package/src/assets/bootstrap_scss/_popover.scss +0 -170
  165. package/src/assets/bootstrap_scss/_print.scss +0 -141
  166. package/src/assets/bootstrap_scss/_progress.scss +0 -46
  167. package/src/assets/bootstrap_scss/_reboot.scss +0 -482
  168. package/src/assets/bootstrap_scss/_root.scss +0 -20
  169. package/src/assets/bootstrap_scss/_spinners.scss +0 -55
  170. package/src/assets/bootstrap_scss/_tables.scss +0 -185
  171. package/src/assets/bootstrap_scss/_toasts.scss +0 -44
  172. package/src/assets/bootstrap_scss/_tooltip.scss +0 -115
  173. package/src/assets/bootstrap_scss/_transitions.scss +0 -20
  174. package/src/assets/bootstrap_scss/_type.scss +0 -125
  175. package/src/assets/bootstrap_scss/_utilities.scss +0 -17
  176. package/src/assets/bootstrap_scss/_variables.scss +0 -1145
  177. package/src/assets/bootstrap_scss/bootstrap-grid.scss +0 -29
  178. package/src/assets/bootstrap_scss/bootstrap-reboot.scss +0 -12
  179. package/src/assets/bootstrap_scss/bootstrap.scss +0 -44
  180. package/src/assets/bootstrap_scss/mixins/_alert.scss +0 -13
  181. package/src/assets/bootstrap_scss/mixins/_background-variant.scss +0 -22
  182. package/src/assets/bootstrap_scss/mixins/_badge.scss +0 -17
  183. package/src/assets/bootstrap_scss/mixins/_border-radius.scss +0 -63
  184. package/src/assets/bootstrap_scss/mixins/_box-shadow.scss +0 -20
  185. package/src/assets/bootstrap_scss/mixins/_breakpoints.scss +0 -123
  186. package/src/assets/bootstrap_scss/mixins/_buttons.scss +0 -110
  187. package/src/assets/bootstrap_scss/mixins/_caret.scss +0 -62
  188. package/src/assets/bootstrap_scss/mixins/_clearfix.scss +0 -7
  189. package/src/assets/bootstrap_scss/mixins/_deprecate.scss +0 -10
  190. package/src/assets/bootstrap_scss/mixins/_float.scss +0 -14
  191. package/src/assets/bootstrap_scss/mixins/_forms.scss +0 -177
  192. package/src/assets/bootstrap_scss/mixins/_gradients.scss +0 -45
  193. package/src/assets/bootstrap_scss/mixins/_grid-framework.scss +0 -71
  194. package/src/assets/bootstrap_scss/mixins/_grid.scss +0 -69
  195. package/src/assets/bootstrap_scss/mixins/_hover.scss +0 -37
  196. package/src/assets/bootstrap_scss/mixins/_image.scss +0 -36
  197. package/src/assets/bootstrap_scss/mixins/_list-group.scss +0 -21
  198. package/src/assets/bootstrap_scss/mixins/_lists.scss +0 -7
  199. package/src/assets/bootstrap_scss/mixins/_nav-divider.scss +0 -11
  200. package/src/assets/bootstrap_scss/mixins/_pagination.scss +0 -22
  201. package/src/assets/bootstrap_scss/mixins/_reset-text.scss +0 -17
  202. package/src/assets/bootstrap_scss/mixins/_resize.scss +0 -6
  203. package/src/assets/bootstrap_scss/mixins/_screen-reader.scss +0 -34
  204. package/src/assets/bootstrap_scss/mixins/_size.scss +0 -7
  205. package/src/assets/bootstrap_scss/mixins/_table-row.scss +0 -39
  206. package/src/assets/bootstrap_scss/mixins/_text-emphasis.scss +0 -17
  207. package/src/assets/bootstrap_scss/mixins/_text-hide.scss +0 -11
  208. package/src/assets/bootstrap_scss/mixins/_text-truncate.scss +0 -8
  209. package/src/assets/bootstrap_scss/mixins/_transition.scss +0 -16
  210. package/src/assets/bootstrap_scss/mixins/_visibility.scss +0 -8
  211. package/src/assets/bootstrap_scss/utilities/_align.scss +0 -8
  212. package/src/assets/bootstrap_scss/utilities/_background.scss +0 -19
  213. package/src/assets/bootstrap_scss/utilities/_borders.scss +0 -75
  214. package/src/assets/bootstrap_scss/utilities/_clearfix.scss +0 -3
  215. package/src/assets/bootstrap_scss/utilities/_display.scss +0 -26
  216. package/src/assets/bootstrap_scss/utilities/_embed.scss +0 -39
  217. package/src/assets/bootstrap_scss/utilities/_flex.scss +0 -51
  218. package/src/assets/bootstrap_scss/utilities/_float.scss +0 -11
  219. package/src/assets/bootstrap_scss/utilities/_overflow.scss +0 -5
  220. package/src/assets/bootstrap_scss/utilities/_position.scss +0 -32
  221. package/src/assets/bootstrap_scss/utilities/_screenreaders.scss +0 -11
  222. package/src/assets/bootstrap_scss/utilities/_shadows.scss +0 -6
  223. package/src/assets/bootstrap_scss/utilities/_sizing.scss +0 -20
  224. package/src/assets/bootstrap_scss/utilities/_spacing.scss +0 -73
  225. package/src/assets/bootstrap_scss/utilities/_stretched-link.scss +0 -19
  226. package/src/assets/bootstrap_scss/utilities/_text.scss +0 -72
  227. package/src/assets/bootstrap_scss/utilities/_visibility.scss +0 -13
  228. package/src/assets/bootstrap_scss/vendor/_rfs.scss +0 -204
  229. package/src/shims-vuex.d.ts +0 -7
  230. package/src/views/Home.vue +0 -18
@@ -3,59 +3,74 @@
3
3
  <div class="d-flex small-Text">
4
4
  <template v-if="!isEditing">
5
5
  <b
6
- class="recording-bg mr-1 text-light p-01"
7
6
  v-if="
8
7
  recordingInLive &&
9
8
  ('Live' === comment.phase || 'Prelive' === comment.phase)
10
9
  "
11
- >{{ $t('Live') }}</b
12
- >
13
- <b class="mr-2" v-if="editRight || comment.status == 'Valid'">{{
10
+ class="recording-bg me-1 text-light p-01"
11
+ >{{ $t('Live') }}</b>
12
+ <b
13
+ v-if="editRight || comment.status == 'Valid'"
14
+ class="me-2"
15
+ >{{
14
16
  comment.name
15
17
  }}</b>
16
18
  <template v-else>
17
- <b class="mr-2 text-danger" :id="'popover-comment' + comment.comId">{{
19
+ <b
20
+ :id="'popover-comment' + comment.comId"
21
+ class="me-2 text-danger"
22
+ data-bs-toggle="popover"
23
+ data-bs-trigger="hover focus"
24
+ :data-bs-content="$t('Comment waiting')"
25
+ data-bs-custom-class="wizard-help"
26
+ >{{
18
27
  comment.name
19
28
  }}</b>
20
- <b-popover
21
- :target="'popover-comment' + comment.comId"
22
- triggers="hover"
23
- custom-class="wizard-help"
24
- >
25
- {{ $t('Comment waiting') }}
26
- </b-popover>
27
29
  </template>
28
30
  </template>
29
31
  <template v-else>
30
32
  <input
31
- class="form-input mr-2 mb-2 width-auto"
32
- type="text"
33
33
  v-model="temporaryName"
34
- v-bind:class="{ 'border border-danger': temporaryName.length < 2 }"
35
- />
34
+ class="form-input me-2 mb-2 width-auto"
35
+ type="text"
36
+ :class="{ 'border border-danger': temporaryName.length < 2 }"
37
+ >
36
38
  </template>
37
39
  <img
40
+ v-if="comment.certified"
38
41
  class="icon-certified"
39
42
  src="/img/certified.png"
40
- v-if="comment.certified"
43
+ :data-selenium="'certified-icon-' + seleniumFormat(comment.name)"
41
44
  :title="$t('Certified account')"
45
+ >
46
+ <div class="me-2">
47
+ {{ date }}
48
+ </div>
49
+ <span
50
+ v-if="editRight"
51
+ :class="'status-' + comment.status"
52
+ :data-selenium="'status-comment-' + seleniumFormat(comment.name)"
42
53
  />
43
- <div class="mr-2">{{ date }}</div>
44
- <span v-if="editRight" :class="'status-' + comment.status"></span>
45
54
  </div>
46
55
  <template v-if="!isEditing">
47
- <div v-html="urlify(contentDisplay)"></div>
56
+ <div v-html="urlify(contentDisplay)" />
48
57
  <a
49
- class="c-hand font-italic"
50
58
  v-if="comment.content.length > 300"
59
+ class="c-hand font-italic"
51
60
  @click="summary = !summary"
52
- >{{ readMore }}</a
53
- >
61
+ >{{ readMore }}</a>
54
62
  </template>
55
63
  <template v-else>
56
- <textarea class="form-input" type="text" v-model="temporaryContent" />
64
+ <textarea
65
+ v-model="temporaryContent"
66
+ class="form-input"
67
+ type="text"
68
+ />
57
69
  <div class="d-flex justify-content-end">
58
- <button class="btn btn-light m-1" @click="isEditing = false">
70
+ <button
71
+ class="btn btn-light m-1"
72
+ @click="isEditing = false"
73
+ >
59
74
  {{ $t('Cancel') }}
60
75
  </button>
61
76
  <button
@@ -69,21 +84,22 @@
69
84
  </template>
70
85
  <div class="d-flex align-items-center mt-1">
71
86
  <button
72
- @click="answerComment"
73
- class="btn btn-answer primary-color mr-2"
74
87
  v-if="null === comment.commentIdReferer && 'Valid' === comment.status"
88
+ class="btn btn-answer primary-color me-2"
89
+ :data-selenium="'answer-button-comment-' + seleniumFormat(comment.name)"
90
+ @click="answerComment"
75
91
  >
76
92
  {{ $t('To answer') }}
77
93
  </button>
78
94
  <div
79
- v-b-toggle="'answers-comment-' + comment.comId"
80
- class="primary-color c-hand d-flex align-items-center small-Text input-no-outline"
81
95
  v-if="
82
96
  (!isFlat && comment.relatedComments) ||
83
97
  (isFlat && comment.commentIdReferer)
84
98
  "
99
+ v-b-toggle="'answers-comment-' + comment.comId"
100
+ class="primary-color c-hand d-flex align-items-center small-Text input-no-outline"
85
101
  >
86
- <div class="d-flex align-items-center when-closed mr-2">
102
+ <div class="d-flex align-items-center when-closed me-2">
87
103
  <div v-if="comment.relatedComments">
88
104
  {{ $t('Display answers', { nb: comment.relatedComments }) }}
89
105
  <i v-if="editRight">{{
@@ -92,20 +108,26 @@
92
108
  })
93
109
  }}</i>
94
110
  </div>
95
- <div v-else>{{ $t('In response to') }}</div>
96
- <span class="saooti-arrow_down saooti-arrow_down-margin"></span>
111
+ <div v-else>
112
+ {{ $t('In response to') }}
113
+ </div>
114
+ <span class="saooti-arrow_down saooti-arrow_down-margin" />
97
115
  </div>
98
116
  <div class="d-flex align-items-center when-opened">
99
- <div v-if="comment.relatedComments">{{ $t('Hide answers') }}</div>
100
- <div v-else>{{ $t('In response to') }}</div>
117
+ <div v-if="comment.relatedComments">
118
+ {{ $t('Hide answers') }}
119
+ </div>
120
+ <div v-else>
121
+ {{ $t('In response to') }}
122
+ </div>
101
123
  <span
102
- class="saooti-arrow_down saooti-arrow_down-margin arrow-transform mr-2"
103
- ></span>
124
+ class="saooti-arrow_down saooti-arrow_down-margin arrow-transform me-2"
125
+ />
104
126
  </div>
105
127
  </div>
106
128
  <EditCommentBox
107
- ref="editBox"
108
129
  v-if="editRight"
130
+ ref="editBox"
109
131
  :comment="comment"
110
132
  :organisation="organisation"
111
133
  @deleteComment="deleteComment"
@@ -115,120 +137,102 @@
115
137
  </div>
116
138
  <b-collapse
117
139
  :id="'answers-comment-' + comment.comId"
118
- class="ml-4"
119
140
  v-model="collapseVisible"
141
+ class="ms-4"
120
142
  >
121
143
  <CommentInput
122
144
  v-if="!isFlat || (isFlat && !comment.commentIdReferer)"
145
+ v-model:knownIdentity="knownIdentity"
123
146
  :focus="focus"
124
147
  :podcast="podcast"
125
- v-model:knownIdentity="knownIdentity"
126
- :comId="comment.comId"
127
- :fetchConference="fetchConference"
148
+ :comment="comment"
149
+ :fetch-conference="fetchConference"
128
150
  @cancelAction="collapseVisible = false"
129
151
  @newComment="newComment"
130
152
  />
131
153
  <CommentParentInfo
132
154
  v-if="isFlat && comment.commentIdReferer && collapseVisible"
133
- :comId="comment.commentIdReferer"
155
+ :com-id="comment.commentIdReferer"
134
156
  />
135
157
  <CommentList
136
158
  v-if="comment.relatedComments && collapseVisible && !isFlat"
137
- @updateStatus="updateStatus"
159
+ ref="commentList"
138
160
  :podcast="podcast"
139
- :fetchConference="fetchConference"
161
+ :fetch-conference="fetchConference"
140
162
  :organisation="organisation"
141
- ref="commentList"
142
- :comId="comment.comId"
163
+ :com-id="comment.comId"
164
+ @updateStatus="updateStatus"
143
165
  />
144
166
  </b-collapse>
145
167
  </div>
146
168
  </template>
147
169
 
148
- <style lang="scss">
149
- .comment-item-container {
150
- .icon-certified {
151
- height: 15px;
152
- margin-right: 0.5rem;
153
- }
154
- .btn-answer {
155
- padding: 0.1rem 0.75rem;
156
- }
157
- .collapsed > .when-opened,
158
- :not(.collapsed) > .when-closed {
159
- display: none !important;
160
- }
161
- }
162
- </style>
163
-
164
170
  <script lang="ts">
165
- import CommentInput from './CommentInput.vue';
166
- import CommentList from './CommentList.vue';
167
- import CommentParentInfo from './CommentParentInfo.vue';
168
- import EditCommentBox from '@/components/display/edit/EditCommentBox.vue';
169
171
  import { state } from '../../../store/paramStore';
170
- import { displayMethods } from '../../mixins/functions';
172
+ import { displayMethods, selenium } from '../../mixins/functions';
173
+ import { CommentPodcast } from '@/store/class/comment';
174
+ import { Podcast } from '@/store/class/podcast';
175
+ import { Conference } from '@/store/class/conference';
171
176
  const moment = require('moment');
172
-
173
- import { defineComponent, ref } from 'vue';
177
+ const bootstrap = require('bootstrap/dist/js/bootstrap.esm.min.js');
178
+ import { defineComponent, defineAsyncComponent } from 'vue';
179
+ const CommentInput = defineAsyncComponent(() => import('./CommentInput.vue'));
180
+ const CommentParentInfo = defineAsyncComponent(() => import('./CommentParentInfo.vue'));
181
+ const EditCommentBox = defineAsyncComponent(() => import('@/components/display/edit/EditCommentBox.vue'));
182
+ const CommentList = defineAsyncComponent(() => import('./CommentList.vue'));
174
183
  export default defineComponent({
175
184
  name: 'CommentItem',
176
185
 
177
- props: ['comment', 'podcast', 'fetchConference', 'organisation', 'isFlat'],
178
- emits: ['deleteComment', 'updateComment', 'update:comment'],
179
-
180
- mixins: [displayMethods],
181
-
182
186
  components: {
183
- CommentList,
184
- EditCommentBox,
185
187
  CommentInput,
186
188
  CommentParentInfo,
189
+ EditCommentBox,
190
+ CommentList
187
191
  },
188
192
 
189
- data() {
190
- return {
191
- summary: true,
192
- collapseVisible: false,
193
- focus: false,
194
- isEditing: false,
195
- temporaryContent: '',
196
- temporaryName: '',
197
- };
193
+ mixins:[displayMethods, selenium],
194
+ props: {
195
+ comment: { default: ()=>({}), type: Object as ()=>CommentPodcast },
196
+ podcast: { default: undefined, type: Object as ()=>Podcast },
197
+ fetchConference: { default: undefined, type: Object as ()=>Conference },
198
+ organisation: { default: undefined, type: String},
199
+ isFlat: { default: false, type: Boolean },
198
200
  },
199
-
200
- setup() {
201
- const commentList : any = ref(null);
202
- const editBox: any = ref(null);
201
+ emits: ['deleteComment', 'updateComment', 'update:comment'],
202
+
203
+ data() {
203
204
  return {
204
- commentList,editBox
205
+ summary: true as boolean,
206
+ collapseVisible: false as boolean,
207
+ focus: false as boolean,
208
+ isEditing: false as boolean,
209
+ temporaryContent: '' as string,
210
+ temporaryName: '' as string,
205
211
  };
206
212
  },
207
-
208
213
  computed: {
209
- date():string {
214
+ date(): string {
210
215
  if (this.comment.date)
211
216
  return moment(this.comment.date).format('D MMMM YYYY HH[h]mm');
212
217
  return '';
213
218
  },
214
- limitContent():string {
219
+ limitContent(): string {
215
220
  if (!this.comment.content) return '';
216
221
  if (this.comment.content.length <= 300) return this.comment.content;
217
222
  return this.comment.content.substring(0, 300) + '...';
218
223
  },
219
- readMore():string {
220
- if (this.summary) return this.$t('Read more');
221
- return this.$t('Read less');
224
+ readMore(): string {
225
+ if (this.summary) return this.$t('Read more').toString();
226
+ return this.$t('Read less').toString();
222
227
  },
223
- contentDisplay():string {
228
+ contentDisplay(): string {
224
229
  if (this.summary) return this.limitContent;
225
230
  return this.comment.content;
226
231
  },
227
- organisationId() {
232
+ organisationId(): string {
228
233
  return state.generalParameters.organisationId;
229
234
  },
230
-
231
- editRight() {
235
+ editRight(): boolean {
232
236
  if (
233
237
  (state.generalParameters.isCommments &&
234
238
  ((this.podcast &&
@@ -240,49 +244,55 @@ export default defineComponent({
240
244
  return false;
241
245
  },
242
246
  knownIdentity: {
243
- get():any {
247
+ get(): string|null {
244
248
  return this.$store.state.comments.knownIdentity;
245
249
  },
246
- set(value: any) {
250
+ set(value: string|null) {
247
251
  this.$store.commit('setCommentIdentity', value);
248
252
  },
249
253
  },
250
- recordingInLive():boolean {
254
+ recordingInLive(): boolean {
251
255
  return (
252
- this.podcast &&
253
- this.podcast.conferenceId &&
256
+ undefined!==this.podcast &&
257
+ undefined!==this.podcast.conferenceId &&
254
258
  0 !== this.podcast.conferenceId &&
255
259
  'READY' === this.podcast.processingStatus
256
260
  );
257
261
  },
258
262
  },
259
-
263
+ mounted(){
264
+ Array.from(document.querySelectorAll('b[data-bs-toggle="popover"]')).forEach(popoverNode => new bootstrap.Popover(popoverNode,{
265
+ trigger: 'hover focus'
266
+ }));
267
+ },
260
268
  methods: {
261
- answerComment() {
269
+ answerComment(): void {
262
270
  this.collapseVisible = true;
263
271
  this.focus = !this.focus;
264
272
  },
265
- deleteComment() {
273
+ deleteComment(): void {
266
274
  this.$emit('deleteComment');
267
275
  },
268
- updateComment(data: any) {
276
+ updateComment(data: {type: string; comment: CommentPodcast; status?: string }): void {
269
277
  this.isEditing = false;
270
278
  this.$emit('updateComment', data);
271
279
  },
272
- newComment(comment: { status: string; }, fromEvent = false) {
280
+ newComment(comment: CommentPodcast, fromEvent = false): void {
273
281
  if (undefined === this.fetchConference || fromEvent) {
274
- let updatedComment = this.comment;
275
- updatedComment.relatedComments += 1;
276
- if ('Valid' === comment.status) {
282
+ const updatedComment = this.comment;
283
+ if(undefined !== updatedComment.relatedComments){
284
+ updatedComment.relatedComments += 1;
285
+ }
286
+ if (undefined !== updatedComment.relatedValidComments && 'Valid' === comment.status) {
277
287
  updatedComment.relatedValidComments += 1;
278
288
  }
279
289
  this.$emit('update:comment', updatedComment);
280
290
  }
281
- if (this.commentList) {
282
- this.commentList.addNewComment(comment, true);
291
+ if (this.$refs.commentList) {
292
+ (this.$refs.commentList as any).addNewComment(comment, true);
283
293
  }
284
294
  },
285
- editComment() {
295
+ editComment(): void {
286
296
  if (this.comment.name && null !== this.comment.name) {
287
297
  this.temporaryName = this.comment.name;
288
298
  }
@@ -291,14 +301,17 @@ export default defineComponent({
291
301
  }
292
302
  this.isEditing = true;
293
303
  },
294
- validEdit() {
295
- let comment = this.comment;
304
+ validEdit(): void {
305
+ const comment = this.comment;
296
306
  comment.content = this.temporaryContent;
297
307
  comment.name = this.temporaryName;
298
- this.editBox.updateComment(comment);
308
+ (this.$refs.editBox as any).updateComment(comment);
299
309
  },
300
- updateStatus(data: string) {
301
- let updatedComment = this.comment;
310
+ updateStatus(data: string): void {
311
+ const updatedComment = this.comment;
312
+ if(undefined === updatedComment.relatedValidComments){
313
+ return;
314
+ }
302
315
  if ('Valid' === data) {
303
316
  updatedComment.relatedValidComments += 1;
304
317
  } else {
@@ -306,31 +319,36 @@ export default defineComponent({
306
319
  }
307
320
  this.$emit('update:comment', updatedComment);
308
321
  },
309
- receiveCommentEvent(event: { type: any; comment: { status: string; }; status: string; }) {
322
+ receiveCommentEvent(event: {type: string; comment: CommentPodcast; status?: string }): void {
310
323
  switch (event.type) {
311
324
  case 'Create':
312
325
  this.newComment(event.comment, true);
313
326
  break;
314
327
  case 'Update':
315
- if (this.commentList) {
316
- this.commentList.updateComment({ comment: event.comment });
328
+ if (this.$refs.commentList) {
329
+ (this.$refs.commentList as any).updateComment({ comment: event.comment });
317
330
  } else {
318
- let updatedComment = this.comment;
319
- if ('Invalid' === event.status) {
320
- updatedComment.relatedValidComments -= 1;
321
- } else if ('Valid' === event.status) {
322
- updatedComment.relatedValidComments += 1;
331
+ const updatedComment = this.comment;
332
+ if(undefined !== updatedComment.relatedValidComments){
333
+ if ('Invalid' === event.status) {
334
+ updatedComment.relatedValidComments -= 1;
335
+ } else if ('Valid' === event.status) {
336
+ updatedComment.relatedValidComments += 1;
337
+ }
323
338
  }
339
+
324
340
  this.$emit('update:comment', updatedComment);
325
341
  }
326
342
  break;
327
343
  case 'Delete':
328
- if (this.commentList) {
329
- this.commentList.deleteComment(event.comment);
344
+ if (this.$refs.commentList) {
345
+ (this.$refs.commentList as any).deleteComment(event.comment);
330
346
  } else {
331
- let updatedComment = this.comment;
332
- updatedComment.relatedComments -= 1;
333
- if ('Valid' === event.comment.status) {
347
+ const updatedComment = this.comment;
348
+ if(undefined !== updatedComment.relatedComments){
349
+ updatedComment.relatedComments -= 1;
350
+ }
351
+ if (undefined !== updatedComment.relatedValidComments && 'Valid' === event.comment.status) {
334
352
  updatedComment.relatedValidComments -= 1;
335
353
  }
336
354
  this.$emit('update:comment', updatedComment);
@@ -341,7 +359,7 @@ export default defineComponent({
341
359
  }
342
360
  },
343
361
  },
344
-
345
- watch: {},
346
- });
362
+ })
347
363
  </script>
364
+
365
+ <style lang="scss"></style>