@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
@@ -1,85 +1,129 @@
1
1
  <template>
2
- <b-card no-body class="player-parameters mt-3" v-if="!playlist">
3
- <b-card-header header-tag="header" role="tab">
4
- <b-button block v-b-toggle.playerParameters variant="info">{{
5
- $t('player parameters')
6
- }}</b-button>
7
- </b-card-header>
8
- <b-collapse id="playerParameters" role="tabpanel">
9
- <b-card-body>
10
- <b-card-text>
2
+ <div
3
+ v-if="!playlist"
4
+ id="accordionParameters"
5
+ class="accordion player-parameters mt-3"
6
+ >
7
+ <div class="accordion-item">
8
+ <h2
9
+ id="labelPlayerParameter"
10
+ class="accordion-header"
11
+ >
12
+ <button
13
+ class="accordion-button collapsed"
14
+ type="button"
15
+ data-bs-toggle="collapse"
16
+ data-bs-target="#playerParameters"
17
+ aria-expanded="false"
18
+ aria-controls="playerParameters"
19
+ >
20
+ {{ $t('player parameters') }}
21
+ </button>
22
+ </h2>
23
+ <div
24
+ id="playerParameters"
25
+ class="accordion-collapse collapse"
26
+ aria-labelledby="labelPlayerParameter"
27
+ data-bs-parent="#accordionParameters"
28
+ >
29
+ <div class="accordion-body">
11
30
  <div
12
- class="d-flex flex-column flex-grow"
13
31
  v-if="
14
32
  !podcast || isEmission || isLargeEmission || isLargeSuggestion
15
33
  "
34
+ class="d-flex flex-column flex-grow"
16
35
  >
17
36
  <div
18
- class="d-flex align-items-center w-100 flex-wrap mt-1"
19
37
  v-if="!podcast || isEmission || isLargeEmission"
38
+ class="d-flex align-items-center w-100 flex-wrap mt-1"
20
39
  >
21
- <b-form-radio
40
+ <input
22
41
  v-model="episodeNumbers"
42
+ class="form-check-input"
43
+ type="radio"
23
44
  name="episodeNumbers"
24
45
  value="all"
25
- ></b-form-radio>
46
+ >
26
47
  <span class="flex-shrink">{{ $t('Show every episode') }}</span>
27
48
  </div>
28
49
  <div
29
50
  class="d-flex align-items-center flex-wrap"
30
51
  :class="!podcast || isEmission || isLargeEmission ? '' : 'mt-3'"
31
52
  >
32
- <b-form-radio
53
+ <input
54
+ v-if="!podcast || isEmission || isLargeEmission"
33
55
  v-model="episodeNumbers"
56
+ class="form-check-input"
57
+ type="radio"
34
58
  name="episodeNumbers"
35
59
  value="number"
36
- v-if="!podcast || isEmission || isLargeEmission"
37
- ></b-form-radio>
60
+ >
38
61
  <span class="flex-shrink">{{ $t('Show') }}</span>
39
62
  <input
40
63
  id="number-input"
41
- type="number"
42
64
  v-model="iFrameNumber"
65
+ type="number"
43
66
  min="1"
44
67
  max="50"
45
68
  class="input-share-player input-no-outline text-center m-2"
46
- />
69
+ >
47
70
  <label
48
71
  for="number-input"
49
72
  class="d-inline"
50
73
  :aria-label="$t('Number of player podcasts')"
51
- ></label>
74
+ />
52
75
  <span class="flex-shrink">{{ $t('Last podcasts') }}</span>
53
76
  </div>
54
- <div class="checkbox-saooti">
77
+ <div>
55
78
  <input
56
- type="checkbox"
57
- class="custom-control-input"
58
79
  id="proceedCheck"
59
80
  v-model="proceedReading"
60
- />
61
- <label class="custom-control-label" for="proceedCheck">{{
81
+ type="checkbox"
82
+ class="form-check-input"
83
+ >
84
+ <label
85
+ class="form-check-label"
86
+ for="proceedCheck"
87
+ >{{
62
88
  $t('Proceed reading')
63
89
  }}</label>
64
90
  </div>
65
- <div class="checkbox-saooti">
91
+ <div>
66
92
  <input
67
- type="checkbox"
68
- class="custom-control-input"
69
93
  id="isVisibleCheckbox"
70
94
  v-model="isVisibleTemp"
71
- />
95
+ type="checkbox"
96
+ class="form-check-input"
97
+ >
72
98
  <label
73
- class="custom-control-label mr-2"
99
+ class="form-check-label me-2"
74
100
  for="isVisibleCheckbox"
75
- >{{ $t('Podcasts still available') }}</label
101
+ >{{ $t('Podcasts still available') }}</label>
102
+ </div>
103
+ </div>
104
+ <div
105
+ v-else
106
+ class="d-flex flex-column flex-grow"
107
+ >
108
+ <div>
109
+ <input
110
+ id="proceedCheck"
111
+ v-model="displayArticle"
112
+ type="checkbox"
113
+ class="form-check-input"
76
114
  >
115
+ <label
116
+ class="form-check-label"
117
+ for="proceedCheck"
118
+ >{{
119
+ $t('Display associated article')
120
+ }}</label>
77
121
  </div>
78
122
  </div>
79
123
  <!-- <div class="d-flex align-items-center flex-wrap" v-if="podcast && iFrameModel !== 'emission'">
80
- <div class="checkbox-saooti">
81
- <input type="checkbox" class="custom-control-input" id="startTime" v-model="startTime">
82
- <label class="custom-control-label mr-2" for="startTime">{{$t('Start at')}}</label>
124
+ <div>
125
+ <input type="checkbox" class="form-check-input" id="startTime" v-model="startTime">
126
+ <label class="form-check-label me-2" for="startTime">{{$t('Start at')}}</label>
83
127
  </div>
84
128
  <input
85
129
  ref="minutesRef"
@@ -88,7 +132,7 @@
88
132
  min="0"
89
133
  class="input-share-player input-no-outline"
90
134
  @change="onDurationChange"/>
91
- <div class="mr-1 ml-1">:</div>
135
+ <div class="me-1 ms-1">:</div>
92
136
  <input
93
137
  ref="secondesRef"
94
138
  type="number"
@@ -98,112 +142,116 @@
98
142
  class="input-share-player input-no-outline"
99
143
  @change="onDurationChange"/>
100
144
  </div> -->
101
- </b-card-text>
102
- </b-card-body>
103
- </b-collapse>
104
- </b-card>
145
+ </div>
146
+ </div>
147
+ </div>
148
+ </div>
105
149
  </template>
106
- <style lang="scss">
107
- .player-parameters.card {
108
- border: 0;
109
- .btn {
110
- border-radius: 0;
111
- }
112
- .card-header {
113
- border: 0;
114
- background-color: #fafafa;
115
- padding: 0;
116
- }
117
- .card-body {
118
- padding: 0.25rem;
119
- border: 0.05rem solid #eee;
120
- background-color: #fafafa;
121
- .custom-control {
122
- padding-left: 0;
123
- }
124
- input[type='number'] {
125
- padding-left: 10px;
126
- text-align: center;
127
- width: 90px;
128
- }
129
- }
130
- }
131
- </style>
150
+
132
151
  <script lang="ts">
133
- import { defineComponent, ref } from 'vue'
152
+ import { Playlist } from '@/store/class/playlist';
153
+ import { Podcast } from '@/store/class/podcast';
154
+ import { defineComponent } from 'vue'
134
155
  export default defineComponent({
135
- props: ['podcast', 'playlist', 'iFrameModel', 'isVisible'],
156
+ props: {
157
+ podcast: { default: undefined, type: Object as ()=> Podcast},
158
+ playlist: { default: undefined, type: Object as ()=> Playlist},
159
+ iFrameModel: { default: undefined, type: String},
160
+ isVisible: { default: false, type: Boolean},
161
+ },
162
+ emits: ['startTime', 'episodeNumbers', 'proceedReading', 'isVisible', 'iFrameNumber', 'displayArticle'],
136
163
 
137
- emits: ['startTime', 'episodeNumbers', 'proceedReading', 'isVisible', 'iFrameNumber'],
138
164
  data() {
139
165
  return {
140
- proceedReading: true,
141
- episodeNumbers: 'number',
142
- iFrameNumberPriv: '3',
143
- minutes: 0,
144
- secondes: 0,
145
- startTime: true,
146
- isVisibleTemp: this.isVisible,
147
- };
148
- },
149
- setup() {
150
- const minutesRef:any =ref(null);
151
- const secondesRef:any =ref(null);
152
- return {
153
- minutesRef,secondesRef
166
+ proceedReading: true as boolean,
167
+ episodeNumbers: 'number' as string,
168
+ iFrameNumberPriv: '3' as string,
169
+ minutes: 0 as number,
170
+ secondes: 0 as number,
171
+ startTime: true as boolean,
172
+ isVisibleTemp: this.isVisible as boolean,
173
+ displayArticle: true as boolean,
154
174
  };
155
175
  },
156
176
  computed: {
157
177
  iFrameNumber: {
158
- get(): any {
178
+ get(): string {
159
179
  return this.iFrameNumberPriv;
160
180
  },
161
- set(value:any) {
162
- let val = parseInt(value, 10);
181
+ set(value: string) {
182
+ const val = parseInt(value, 10);
163
183
  if (!isNaN(val) && val >= 1 && val <= 50) {
164
184
  this.iFrameNumberPriv = value;
165
185
  }
166
186
  },
167
187
  },
168
- isEmission():boolean {
188
+ isEmission(): boolean {
169
189
  return 'emission' === this.iFrameModel;
170
190
  },
171
- isLargeEmission():boolean {
191
+ isLargeEmission(): boolean {
172
192
  return 'largeEmission' === this.iFrameModel;
173
193
  },
174
- isLargeSuggestion():boolean {
194
+ isLargeSuggestion(): boolean {
175
195
  return 'largeSuggestion' === this.iFrameModel;
176
196
  },
177
197
  },
178
-
179
- methods: {
180
- onDurationChange() {
181
- if (this.startTime) {
182
- let minutes = parseInt(this.minutesRef.value, 10);
183
- let secondes = parseInt(this.secondesRef.value, 10);
184
- this.$emit('startTime', minutes * 60 + secondes);
185
- } else {
186
- this.$emit('startTime', 0);
187
- }
188
- },
189
- },
190
-
191
198
  watch: {
192
- episodeNumbers() {
199
+ episodeNumbers(): void {
193
200
  this.$emit('episodeNumbers', this.episodeNumbers);
194
201
  },
195
- proceedReading() {
202
+ proceedReading(): void {
196
203
  this.$emit('proceedReading', this.proceedReading);
197
204
  },
198
- isVisibleTemp() {
205
+ isVisibleTemp(): void {
199
206
  this.$emit('isVisible', this.isVisibleTemp);
200
207
  },
201
- isVisible() {
208
+ isVisible(): void {
202
209
  this.isVisibleTemp = this.isVisible;
203
210
  },
204
- iFrameNumberPriv() {
211
+ iFrameNumberPriv(): void {
205
212
  this.$emit('iFrameNumber', this.iFrameNumberPriv);
206
213
  },
214
+ displayArticle(): void{
215
+ this.$emit('displayArticle', this.displayArticle);
216
+ }
217
+ },
218
+ methods: {
219
+ onDurationChange(): void {
220
+ if (this.startTime) {
221
+ const minutes = parseInt((this.$refs.minutesRef as any).value, 10);
222
+ const secondes = parseInt((this.$refs.secondesRef as any).value, 10);
223
+ this.$emit('startTime', minutes * 60 + secondes);
224
+ } else {
225
+ this.$emit('startTime', 0);
226
+ }
227
+ },
207
228
  },
208
- });
229
+ })
209
230
  </script>
231
+
232
+ <style lang="scss">
233
+ .player-parameters.card {
234
+ border: 0;
235
+ .btn {
236
+ border-radius: 0;
237
+ }
238
+ .card-header {
239
+ border: 0;
240
+ background-color: #fafafa;
241
+ padding: 0;
242
+ }
243
+ .card-body {
244
+ padding: 0.25rem;
245
+ border: 0.05rem solid #eee;
246
+ background-color: #fafafa;
247
+ .custom-control {
248
+ padding-left: 0;
249
+ }
250
+ input[type='number'] {
251
+ padding-left: 10px;
252
+ text-align: center;
253
+ width: 90px;
254
+ }
255
+ }
256
+ }
257
+ </style>
@@ -0,0 +1,58 @@
1
+ <template>
2
+ <div class="d-flex flex-column align-items-center">
3
+ <qrcode-vue
4
+ :value="url"
5
+ :size="size"
6
+ level="H"
7
+ foreground="#40a372"
8
+ class="myQrCode"
9
+ />
10
+ <button
11
+ class="btn m-3"
12
+ @click="download"
13
+ >
14
+ {{ $t('Download') }}
15
+ </button>
16
+ <Snackbar
17
+ ref="snackbar"
18
+ position="bottom-left"
19
+ />
20
+ </div>
21
+ </template>
22
+
23
+ <script lang="ts">
24
+ import Snackbar from '../../misc/Snackbar.vue';
25
+ import QrcodeVue from 'qrcode.vue'
26
+ import { defineComponent } from 'vue'
27
+ export default defineComponent({
28
+ name: 'QrCode',
29
+
30
+ components: {
31
+ Snackbar,
32
+ QrcodeVue
33
+ },
34
+ props: {
35
+ url: { default: '', type: String},
36
+ },
37
+
38
+ data() {
39
+ return {
40
+ size: 200 as number,
41
+ };
42
+ },
43
+ methods:{
44
+ download(): void{
45
+ const link = document.createElement('a');
46
+ link.download = 'qrcode.png';
47
+ const canvas = document.getElementsByClassName('myQrCode');
48
+ if(canvas && canvas.length > 0 && canvas[0] && canvas[0].firstChild){
49
+ link.href = (canvas[0].firstChild as any).toDataURL();
50
+ link.click();
51
+ (this.$refs.snackbar as any).open(this.$t('Download started'));
52
+ }
53
+ }
54
+ }
55
+ })
56
+ </script>
57
+
58
+ <style lang="scss"></style>