fcad-core-dragon 2.1.0 → 2.1.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 (160) hide show
  1. package/.editorconfig +7 -7
  2. package/.gitlab-ci.yml +124 -0
  3. package/.prettierrc +11 -11
  4. package/.vscode/extensions.json +8 -8
  5. package/.vscode/settings.json +46 -16
  6. package/CHANGELOG +520 -520
  7. package/README.md +57 -57
  8. package/documentation/.vitepress/config.js +114 -114
  9. package/documentation/api-examples.md +49 -49
  10. package/documentation/composants/app-base-button.md +58 -58
  11. package/documentation/composants/app-base-error-display.md +59 -59
  12. package/documentation/composants/app-base-popover.md +68 -68
  13. package/documentation/composants/app-comp-audio.md +75 -75
  14. package/documentation/composants/app-comp-branch-buttons.md +111 -111
  15. package/documentation/composants/app-comp-button-progress.md +53 -53
  16. package/documentation/composants/app-comp-carousel.md +53 -53
  17. package/documentation/composants/app-comp-container.md +53 -53
  18. package/documentation/composants/app-comp-input-checkbox-next.md +42 -42
  19. package/documentation/composants/app-comp-input-dropdown-next.md +34 -34
  20. package/documentation/composants/app-comp-input-radio-next.md +39 -39
  21. package/documentation/composants/app-comp-input-text-next.md +35 -35
  22. package/documentation/composants/app-comp-input-text-table-next.md +34 -34
  23. package/documentation/composants/app-comp-input-text-to-fill-dropdown-next.md +53 -53
  24. package/documentation/composants/app-comp-input-text-to-fill-next.md +31 -31
  25. package/documentation/composants/app-comp-jauge.md +31 -31
  26. package/documentation/composants/app-comp-menu-item.md +55 -55
  27. package/documentation/composants/app-comp-menu.md +29 -29
  28. package/documentation/composants/app-comp-navigation.md +41 -41
  29. package/documentation/composants/app-comp-note-call.md +53 -53
  30. package/documentation/composants/app-comp-note-credit.md +53 -53
  31. package/documentation/composants/app-comp-play-bar-next.md +53 -53
  32. package/documentation/composants/app-comp-pop-up-next.md +93 -93
  33. package/documentation/composants/app-comp-quiz-next.md +235 -235
  34. package/documentation/composants/app-comp-quiz-recall.md +53 -53
  35. package/documentation/composants/app-comp-svg-next.md +53 -53
  36. package/documentation/composants/app-comp-table-of-content.md +50 -50
  37. package/documentation/composants/app-comp-video-player.md +82 -82
  38. package/documentation/composants.md +46 -46
  39. package/documentation/composants_critiques/ModelPageComposant.md +53 -53
  40. package/documentation/composants_critiques/app-base-module.md +43 -43
  41. package/documentation/composants_critiques/app-base-page.md +48 -48
  42. package/documentation/composants_critiques/app-base.md +311 -311
  43. package/documentation/composants_critiques/main.md +15 -15
  44. package/documentation/demarrage.md +50 -50
  45. package/documentation/deploiement.md +57 -57
  46. package/documentation/index.md +33 -33
  47. package/documentation/markdown-examples.md +85 -85
  48. package/documentation/public/vite.svg +14 -14
  49. package/documentation/public/vuejs.svg +1 -1
  50. package/documentation/public/vuetify.svg +5 -5
  51. package/eslint.config.js +60 -60
  52. package/junit-report.xml +182 -0
  53. package/package.json +66 -59
  54. package/playwright/index.html +12 -0
  55. package/playwright/index.js +21 -0
  56. package/playwright-ct.config.js +95 -0
  57. package/src/$locales/en.json +157 -157
  58. package/src/$locales/fr.json +120 -120
  59. package/src/assets/data/onboardingMessages.json +47 -47
  60. package/src/components/AppBase.vue +1171 -1169
  61. package/src/components/AppBaseButton.vue +90 -95
  62. package/src/components/AppBaseErrorDisplay.vue +438 -438
  63. package/src/components/AppBaseFlipCard.vue +84 -84
  64. package/src/components/AppBaseModule.vue +1639 -1634
  65. package/src/components/AppBasePage.vue +3 -2
  66. package/src/components/AppBasePopover.vue +41 -41
  67. package/src/components/AppBaseSkeleton.vue +66 -66
  68. package/src/components/AppCompAudio.vue +261 -256
  69. package/src/components/AppCompBranchButtons.vue +508 -508
  70. package/src/components/AppCompButtonProgress.vue +137 -132
  71. package/src/components/AppCompCarousel.vue +342 -336
  72. package/src/components/AppCompContainer.vue +29 -29
  73. package/src/components/AppCompInputCheckBoxNx.vue +325 -323
  74. package/src/components/AppCompInputDropdownNx.vue +302 -299
  75. package/src/components/AppCompInputRadioNx.vue +287 -284
  76. package/src/components/AppCompInputTextNx.vue +156 -153
  77. package/src/components/AppCompInputTextTableNx.vue +205 -202
  78. package/src/components/AppCompInputTextToFillDropdownNx.vue +343 -340
  79. package/src/components/AppCompInputTextToFillNx.vue +316 -313
  80. package/src/components/AppCompJauge.vue +81 -81
  81. package/src/components/AppCompMenu.vue +6 -2
  82. package/src/components/AppCompMenuItem.vue +246 -240
  83. package/src/components/AppCompNavigation.vue +977 -972
  84. package/src/components/AppCompNoteCall.vue +167 -161
  85. package/src/components/AppCompNoteCredit.vue +496 -491
  86. package/src/components/AppCompPlayBarNext.vue +2290 -2288
  87. package/src/components/AppCompPopUpNext.vue +508 -504
  88. package/src/components/AppCompQuizNext.vue +515 -510
  89. package/src/components/AppCompQuizRecall.vue +355 -350
  90. package/src/components/AppCompSVGNext.vue +346 -346
  91. package/src/components/AppCompSettingsMenu.vue +177 -172
  92. package/src/components/AppCompTableOfContent.vue +433 -427
  93. package/src/components/AppCompVideoPlayer.vue +377 -377
  94. package/src/components/AppCompViewDisplay.vue +6 -6
  95. package/src/components/BaseModule.vue +55 -55
  96. package/src/composables/useIdleDetector.js +56 -56
  97. package/src/composables/useQuiz.js +89 -89
  98. package/src/composables/useTimer.js +172 -172
  99. package/src/directives/nvdaFix.js +53 -53
  100. package/src/externalComps/ModuleView.vue +22 -22
  101. package/src/externalComps/SummaryView.vue +91 -91
  102. package/src/main.js +493 -476
  103. package/src/module/stores/appStore.js +960 -947
  104. package/src/module/xapi/ADL.js +520 -520
  105. package/src/module/xapi/Crypto/Hasher.js +241 -241
  106. package/src/module/xapi/Crypto/WordArray.js +278 -278
  107. package/src/module/xapi/Crypto/algorithms/BufferedBlockAlgorithm.js +103 -103
  108. package/src/module/xapi/Crypto/algorithms/C_algo.js +315 -315
  109. package/src/module/xapi/Crypto/algorithms/HMAC.js +9 -9
  110. package/src/module/xapi/Crypto/algorithms/SHA1.js +9 -9
  111. package/src/module/xapi/Crypto/encoders/Base.js +105 -105
  112. package/src/module/xapi/Crypto/encoders/Base64.js +99 -99
  113. package/src/module/xapi/Crypto/encoders/Hex.js +61 -61
  114. package/src/module/xapi/Crypto/encoders/Latin1.js +61 -61
  115. package/src/module/xapi/Crypto/encoders/Utf8.js +45 -45
  116. package/src/module/xapi/Crypto/index.js +53 -53
  117. package/src/module/xapi/Statement/activity.js +47 -47
  118. package/src/module/xapi/Statement/agent.js +55 -55
  119. package/src/module/xapi/Statement/group.js +26 -26
  120. package/src/module/xapi/Statement/index.js +259 -259
  121. package/src/module/xapi/Statement/statement.js +253 -253
  122. package/src/module/xapi/Statement/statementRef.js +23 -23
  123. package/src/module/xapi/Statement/substatement.js +22 -22
  124. package/src/module/xapi/Statement/verb.js +36 -36
  125. package/src/module/xapi/activitytypes.js +17 -17
  126. package/src/module/xapi/launch.js +157 -157
  127. package/src/module/xapi/utils.js +167 -167
  128. package/src/module/xapi/verbs.js +294 -294
  129. package/src/module/xapi/wrapper.js +1895 -1895
  130. package/src/module/xapi/xapiStatement.js +444 -444
  131. package/src/plugins/analytics.js +34 -34
  132. package/src/plugins/bus.js +12 -8
  133. package/src/plugins/gsap.js +17 -15
  134. package/src/plugins/helper.js +355 -358
  135. package/src/plugins/i18n.js +27 -26
  136. package/src/plugins/idb.js +227 -227
  137. package/src/plugins/save.js +37 -37
  138. package/src/plugins/scorm.js +287 -287
  139. package/src/plugins/xapi.js +11 -11
  140. package/src/public/index.html +33 -33
  141. package/src/router/index.js +57 -57
  142. package/src/router/routes.js +312 -312
  143. package/src/shared/generalfuncs.js +344 -344
  144. package/src/shared/validators.js +1018 -1018
  145. package/tests/component/AppBaseButton.spec.js +53 -0
  146. package/tests/component/pinia.spec.js +24 -0
  147. package/{src/components/tests__ → tests/unit}/AppBaseButton.spec.js +53 -53
  148. package/tests/unit/AppCompInputCheckBoxNx.spec.js +59 -0
  149. package/tests/unit/AppCompInputDropdownNx.spec.js +51 -0
  150. package/tests/unit/AppCompInputRadioNx.spec.js +59 -0
  151. package/tests/unit/AppCompInputTextNx.spec.js +44 -0
  152. package/tests/unit/AppCompInputTextTableNx.spec.js +77 -0
  153. package/tests/unit/AppCompInputTextToFillDropdownNx.spec.js +60 -0
  154. package/tests/unit/AppCompInputTextToFillNx.spec.js +45 -0
  155. package/tests/unit/AppCompQuizNext.spec.js +114 -0
  156. package/tests/unit/AppCompVideoPlayer.spec.js +177 -0
  157. package/{src/components/tests__ → tests/unit}/useTimer.spec.js +91 -91
  158. package/vitest.config.js +28 -19
  159. package/vitest.setup.js +28 -0
  160. package/src/components/AppBaseButton.test.js +0 -21
@@ -1,311 +1,311 @@
1
- # Base App
2
-
3
-
4
-
5
- ## Aperçu
6
-
7
- Composant racine pour utilisation de la librairie.
8
-
9
- ## Référence du composant
10
-
11
- **AppBase** `<app-base/>`
12
-
13
- ## Comportement
14
-
15
- Ce composant reçoit les premières données de configuration pour la création de application. Les données sont fournie au composant sous forme de props. Il valide le type certaines des données fournie et fait afficher un message d'erreur à lécran et dans la console du navigateur, lorsque des erreurs sont détectées. Une fois les données validées, le composant les transmet au Store de application.
16
-
17
- Le composants est également en charge de faire la communication avec le serveur et les autres module de stockage. Il gère la recuperation et la mise à jours des données de progression dans l'application.
18
-
19
-
20
-
21
- ::: tip Note
22
- Le composant rendra l'application inutilisable Lorsque des erreurs de configuration seront détéctée.
23
- Prêtez attention au message(s) affiché(s) par le composant dans la console du navigateur et l'application. Cela vous permettra de savoir ce qui doit être corrigé.
24
- :::
25
-
26
- ## Paramètres
27
-
28
- Aucun paramètre n'est nécessaire pour ce composant.
29
-
30
- ### Props
31
-
32
- | Propriété | Type | Description &nbsp;&nbsp;&nbsp; | valeur par défaut |
33
- |:----------|:-----------------|:-----------------------------------------------------------------------------------------------------------------------------------|:-------|
34
- | appConfig | Object | Récoit les données de configuration de application | Doit contenir au minimum les valeurs suivantes: `{lang(String), specification(String), id(String), crs_id(String), idb_id(String), no_menu(Boolean), is_single_activity(Boolean), auto_next_activity(Boolean) }`. Valeur Optionnelles: `{remote(Boolean), actor (Oject), linkedResource(Object) }`. Référez-vous à la section ci dessous pour plus de details|
35
-
36
- ### Exemple
37
-
38
- Voici ci dessous un exemple d'utilisation du composant dans une application
39
-
40
-
41
- ```vue
42
- <!--App.vue-->
43
- <template>
44
- <app-base :app-config="$data">
45
- </template>
46
- <script>
47
- export default {
48
- data() {
49
- return {
50
- lang: 'fr', // Set Language for the Activities and App French (fr)| English(en)
51
- specification: 'xapi', // connection specification (xapi|scorm)
52
- id: 'v2', // This activity ID
53
- crs_id: 'template_fcad_dragon', //The Group ID this activity is part of.
54
- idb_id: '$template_fcad_dragon', // This activity ID in LocalDB. Only when APP is not remote.
55
- no_menu: false, // Set permission to view and navigate to SUMMARY VIEW (true|false) -default :false; (CAN BE REMOVED)
56
- is_single_activity: false, //set app as a single activity ( ex:Introduction | Conclusion | Prep_devoir)(true|false) - default:false; (CAN BE REMOVED)
57
- auto_next_activity: true, // set Previous/Next can allow navigation between activities. Set false if do not want navigation between activities with Previous/Next button (true|false) - default:true
58
- // remote: false, // Force App to access server remotely while in production mode (true|false) - default:false, (CAN BE REMOVED)
59
- actor: {
60
- name: 'Luke Skywalker',
61
- mbox: 'mailto:skywalker2@mymailbox.com'
62
- }
63
- }
64
- }
65
- }
66
- </script>
67
- ```
68
-
69
-
70
-
71
- ### Paramètres Pour AppConfig
72
-
73
- <h3>⚙️<b>actor</b></h3>
74
- Défini l'agent pour l'envoi des statements xAPI
75
-
76
- - **Type:** `Object`
77
- - **Usage:** `Optionel`
78
- - **Valeur(s):**
79
- - `name (String)`- nom de agent
80
- - `mbox(String)`- l'email de l'agent. Doit commencer par <i>mailto:</i>
81
-
82
- <h3>⚙️<b>auto_next_activity</b></h3>
83
- Défini si la navigation est permise entre activité. Doit être mis à `false` si on ne veut pas de navigation entre les activités avec les boutons de navigation Précedent/Suivant button.
84
-
85
- - **Type:** `Boolean`
86
- - **Usage:** `Requis`
87
- - **Valeur(s):** `true|false` valeur par defaut est `true`
88
-
89
- <h3>⚙️<b>crs_id</b></h3>
90
- Défini l'identification du group auquel doit faire partie l'activité (l'application).
91
-
92
- - **Type:** `String`
93
- - **Usage:** `Requis`
94
- - **Valeur(s):** Sans Objet. Doit être défini.
95
-
96
- <h3>⚙️<b>id</b></h3>
97
- Défini l'identification de l'application. Doit être unique pour éviter toute corruption de données.
98
-
99
- - **Type:** `String`
100
- - **Usage:** `Requis`
101
- - **Valeur(s):** Sans Objet. Doit être défini.
102
-
103
-
104
- <h3>⚙️<b>idb_id</b></h3>
105
- Défini l'identification pour l'environement de stockage local (indexDB). Doit être unique pour eviter toute corruption de données.
106
-
107
- - **Type:** `String`
108
- - **Usage:** `Requis`
109
- - **Valeur(s):** Sans Objet. Doit être défini.
110
-
111
- <h3>⚙️<b>is_single_activity</b></h3>
112
- Configure l'application pour être traité comme étant une activité independante.
113
-
114
- - **Type:** `Boolean`
115
- - **Usage:** `Requis`
116
- - **Valeur(s):** `true|false` valeur par defaut est `false`
117
-
118
-
119
- <h3>⚙️<b>no_menu</b></h3>
120
- Défini si le menu (sommaire) de l'application doit être accessible où non.
121
-
122
- - **Type:** `Boolean`
123
- - **Usage:** `Requis`
124
- - **Valeur(s):** `[true|false]` valeur par defaut est `false`. Mettre à `true` si la page sommaire ne doit pas être accessible
125
-
126
- <h3>⚙️<b>lang</b></h3>
127
- Défini la langue dans la quelle sera presenté l'application.
128
-
129
- - **Type:** `String`
130
- - **Usage:** `Requis`
131
- - **Valeur(s):** `[fr|en]` valeur par defaut est `fr` pour la langue française. Mettre à `en` pour avoir l'application en anglais.
132
-
133
- <h3>⚙️<b>specification</b></h3>
134
- Défini la norme de specification à utiliser par l'application pour la gestion des données (xAPI ou Scorm).
135
-
136
- - **Type:** `String`
137
- - **Usage:** `Requis`
138
- - **Valeur(s):** `[fr|en]` valeur par defaut est `fr` pour la langue française. Mettre à `en` pour avoir l'application en anglais.
139
-
140
-
141
- #### TYPE_QUESTION
142
-
143
- **Type:** `String` _(choix_mult | choix_unique | dropdown | reponse_ouverte | texte_tableau | texte_troue | texte_troue_select)__
144
-
145
- **Usage:** Obligatoire.
146
- Définie le type de question.
147
-
148
- ### Slots
149
- `content`[named-slot] - permet de recevoir tout le contenu HTML à afficher.
150
-
151
-
152
- ## Liste d'écouteurs
153
-
154
- le composant écoutes globalement les émetteurs ci-dessous attachés au `$bus`
155
-
156
- ::: details <b>set-comp-status</b>
157
-
158
- Utilisé pour définir le status d'un composant. Un composant peut ainsi émettre son état en indicant s'il est prêt ou non. `AppBase` mettra à jour global de application selon les états des composants.
159
-
160
-
161
- | **Paramettre associés**<img width=200/> | **type** | **valeur** | **Description** |
162
- |----|----|----|---------|
163
- | name | \{String\} | `` | `(éditable)`nom du composant qui émet. |
164
- | status | \{String\} | `[loading\|ready]` | `(éditable)` status à communiquer|
165
- | updateTracker | \{Function\} | `name, status` | `(non-éditable)`Cette fonction est executée lorsque évènement est récu|
166
- | compStatusTracker | \{Array\} | `[]` | `(non-éditable)` Ce paramettre est mis à jour dans le `store`. |
167
-
168
- - Exemple
169
-
170
- ```js
171
- // Le composant toto indique sont status de loading
172
- this.$bus.$emit('set-comp-status', 'comp_toto', 'loading')
173
- // AppBase met ajour le status du tracker dans le store
174
- // AppBase met le status de toute l'application à LOADING
175
-
176
- //Deux minutes plus tard composant toto indique qu'il est prêt
177
- setTimeout(()=>this.$bus.$emit('set-comp-status', 'comp_toto', 'ready'), 2000)
178
- // AppBase met ajour le status du tracker dans le store
179
- // AppBase met le status de toute l'application à READY
180
- ```
181
- ::: tip Note
182
- l'Application passe seulement à l'état `ready` quand TOUS les composants qui émettent cet événement sont en status `ready`.
183
-
184
-
185
- :::
186
-
187
-
188
-
189
-
190
- ::: details <b>reset-userdata</b>
191
-
192
- Utilisé pour reinitialiser la progression de utilisateur
193
-
194
- | **Paramettre associés**<img width=200/> | **type** | **valeur** | **Description** |
195
- |----|----|----|---------|
196
- | resetUserData | \{Function\} | | `(non-éditable)`Cette fonction est executée lorsque évènement est récu|
197
-
198
-
199
- - Exemple
200
-
201
- ```js
202
- // Le composant toto demande de rénitialiser la progression
203
- this.$bus.$emit('reset-userdata')
204
- // AppBase réinitalise la progression
205
- ```
206
- :::
207
-
208
- ::: details <b>fire-exit-event</b>
209
-
210
- Cet évènement utilisé pour signaler la fermeture de l'application dans le navigateur.
211
-
212
- | **Paramettre associés**<img width=200/> | **type** | **valeur** | **Description** |
213
- |----|----|----|---------|
214
- | cb | \{Function\} | `` | `(éditable, optionnel)`fonction à executer après la réalisation de l'événement |
215
- | option | \{Boolean\} | `[true\|false]` | `(éditable)` indique si la fonction associée doit utiliser l'API Fecth ou pas|
216
- | endLesson | \{Function\} | `cb, option` | `(non-éditable)` Cette fonction est executée par application lorsque évènement est réçu|
217
-
218
- - Exemple
219
-
220
- ```js
221
- // Le composant AppBaseModule annonce la fermeture de application en cour avant de lancer une autre leçon.
222
- this.$bus.$emit('fire-exit-event', () => {
223
- window.location.replace(newUrlToLaunch)// newUrlToLaunch est url dans le LRS vers la prochaine ressource à initializer
224
- })
225
- // AppBase exécute la fermeture de l'application
226
-
227
- ```
228
-
229
- :::
230
-
231
- ::: details <b>move-to-target</b>
232
-
233
- Utilisé pour signaler le déplacement (skip) vers un élément du DOM
234
-
235
- | **Paramettre associés**<img width=200/> | **type** | **valeur** | **Description** |
236
- |----|----|----|---------|
237
- | target | \{String\} | `` | `(éditable, requis)`Attribut ID de l'élément HTML vers quel va se faire le deplacement |
238
- | opt | \{Object\} | `{ top, left, behavior}` | `(éditable, optionnel)` paramettre de scroll|
239
- | moveTo | \{Function\} | `target, opt` | `(non-éditable)`Cette fonction est executée lorsque évènement est récu|
240
-
241
- - Exemple
242
-
243
- ```js
244
- // Le composant toto demande de scroller vers une DIV avec ID main
245
- this.$bus.$emit('move-to-target', 'main')
246
- // AppBase déplace le contenu de l'écran vers la DIV main
247
- ```
248
- :::
249
-
250
- ::: details <b>send-xapi-statement</b>
251
-
252
- Utilisé pour demander l'envoi d'un nouveau statement vers le LRS
253
-
254
- | **Paramettre associés**<img width=200/> | **type** | **valeur** | **Description** |
255
- |----|----|----|---------|
256
- | stmt | \{Object\} | `` | `(éditable, requis)` objet statement à envoyer au LRS|
257
- | cb | \{Function\} | `[loading\|ready]` | `(éditable)` fonction à executer après la réalisation de l'envoi|
258
- | withFetch | \{Boolean\} | `[true\|false]` | `(éditable)`Defini si l'API Fetch doit être utilisé ou non|
259
- | sendXapiStatements | \{Function\} | `stmt, cb, withFetch` | `(non-éditable)`Cette fonction est executée lorsque évènement est récu|
260
-
261
- - Exemple
262
-
263
- ```js
264
- // Le composant toto demande l'envoi d'un statement
265
- let stmt = {...} // ceci est un statement abstrait (voir la spécification xAPI pour la definition de statement)
266
- this.$bus.$emit('send-xapi-statement', stmt)
267
- // AppBase met ajour le status du tracker dans le store
268
- // AppBase envoie le statement vers le LRS
269
- ```
270
- :::
271
-
272
- ::: details <b>reset-focus-on</b>
273
-
274
- Force le focus sur un element dans application
275
-
276
- | **Paramettre associés**<img width=200/> | **type** | **valeur** | **Description** |
277
- |----|----|----|---------|
278
- | e | \{Objet\} | `` | `(éditable,requis)` l'HTMLElement qui doit recevoir le focus |
279
- | resetFocus | \{Function\} | `e` | `(non-éditable)`Cette fonction est executée lorsque évènement est récu|
280
-
281
- - Exemple
282
-
283
- ```js
284
- // Le composant toto demande le focus sur une DIV main
285
- let main = document.querySelector('#main')
286
- this.$bus.$emit('reset-focus-on', main)
287
- // AppBase force le focus sur main
288
- ```
289
- :::
290
-
291
- <!-- - __`set-comp-status`__ `(loading | ready)`: utiliser pour setter l'etat d'un composant this.updateTracker
292
- - `send-xapi-statement`, this.onSendXapiStatement
293
- - `reset-userdata`, this.resetUserData
294
- - `fire-exit-event`, this.endLesson
295
- - `move-to-target`, this.skipToMain
296
- - `reset-focus-on`, this.resetFocus -->
297
-
298
-
299
-
300
-
301
- ## Style
302
-
303
- `.app-page`[class]
304
-
305
- Aucune manipulation requise.
306
-
307
-
308
-
309
- ## Accessibilité
310
- Aucune manipulation requise.
311
-
1
+ # Base App
2
+
3
+
4
+
5
+ ## Aperçu
6
+
7
+ Composant racine pour utilisation de la librairie.
8
+
9
+ ## Référence du composant
10
+
11
+ **AppBase** `<app-base/>`
12
+
13
+ ## Comportement
14
+
15
+ Ce composant reçoit les premières données de configuration pour la création de application. Les données sont fournie au composant sous forme de props. Il valide le type certaines des données fournie et fait afficher un message d'erreur à lécran et dans la console du navigateur, lorsque des erreurs sont détectées. Une fois les données validées, le composant les transmet au Store de application.
16
+
17
+ Le composants est également en charge de faire la communication avec le serveur et les autres module de stockage. Il gère la recuperation et la mise à jours des données de progression dans l'application.
18
+
19
+
20
+
21
+ ::: tip Note
22
+ Le composant rendra l'application inutilisable Lorsque des erreurs de configuration seront détéctée.
23
+ Prêtez attention au message(s) affiché(s) par le composant dans la console du navigateur et l'application. Cela vous permettra de savoir ce qui doit être corrigé.
24
+ :::
25
+
26
+ ## Paramètres
27
+
28
+ Aucun paramètre n'est nécessaire pour ce composant.
29
+
30
+ ### Props
31
+
32
+ | Propriété | Type | Description &nbsp;&nbsp;&nbsp; | valeur par défaut |
33
+ |:----------|:-----------------|:-----------------------------------------------------------------------------------------------------------------------------------|:-------|
34
+ | appConfig | Object | Récoit les données de configuration de application | Doit contenir au minimum les valeurs suivantes: `{lang(String), specification(String), id(String), crs_id(String), idb_id(String), no_menu(Boolean), is_single_activity(Boolean), auto_next_activity(Boolean) }`. Valeur Optionnelles: `{remote(Boolean), actor (Oject), linkedResource(Object) }`. Référez-vous à la section ci dessous pour plus de details|
35
+
36
+ ### Exemple
37
+
38
+ Voici ci dessous un exemple d'utilisation du composant dans une application
39
+
40
+
41
+ ```vue
42
+ <!--App.vue-->
43
+ <template>
44
+ <app-base :app-config="$data">
45
+ </template>
46
+ <script>
47
+ export default {
48
+ data() {
49
+ return {
50
+ lang: 'fr', // Set Language for the Activities and App French (fr)| English(en)
51
+ specification: 'xapi', // connection specification (xapi|scorm)
52
+ id: 'v2', // This activity ID
53
+ crs_id: 'template_fcad_dragon', //The Group ID this activity is part of.
54
+ idb_id: '$template_fcad_dragon', // This activity ID in LocalDB. Only when APP is not remote.
55
+ no_menu: false, // Set permission to view and navigate to SUMMARY VIEW (true|false) -default :false; (CAN BE REMOVED)
56
+ is_single_activity: false, //set app as a single activity ( ex:Introduction | Conclusion | Prep_devoir)(true|false) - default:false; (CAN BE REMOVED)
57
+ auto_next_activity: true, // set Previous/Next can allow navigation between activities. Set false if do not want navigation between activities with Previous/Next button (true|false) - default:true
58
+ // remote: false, // Force App to access server remotely while in production mode (true|false) - default:false, (CAN BE REMOVED)
59
+ actor: {
60
+ name: 'Luke Skywalker',
61
+ mbox: 'mailto:skywalker2@mymailbox.com'
62
+ }
63
+ }
64
+ }
65
+ }
66
+ </script>
67
+ ```
68
+
69
+
70
+
71
+ ### Paramètres Pour AppConfig
72
+
73
+ <h3>⚙️<b>actor</b></h3>
74
+ Défini l'agent pour l'envoi des statements xAPI
75
+
76
+ - **Type:** `Object`
77
+ - **Usage:** `Optionel`
78
+ - **Valeur(s):**
79
+ - `name (String)`- nom de agent
80
+ - `mbox(String)`- l'email de l'agent. Doit commencer par <i>mailto:</i>
81
+
82
+ <h3>⚙️<b>auto_next_activity</b></h3>
83
+ Défini si la navigation est permise entre activité. Doit être mis à `false` si on ne veut pas de navigation entre les activités avec les boutons de navigation Précedent/Suivant button.
84
+
85
+ - **Type:** `Boolean`
86
+ - **Usage:** `Requis`
87
+ - **Valeur(s):** `true|false` valeur par defaut est `true`
88
+
89
+ <h3>⚙️<b>crs_id</b></h3>
90
+ Défini l'identification du group auquel doit faire partie l'activité (l'application).
91
+
92
+ - **Type:** `String`
93
+ - **Usage:** `Requis`
94
+ - **Valeur(s):** Sans Objet. Doit être défini.
95
+
96
+ <h3>⚙️<b>id</b></h3>
97
+ Défini l'identification de l'application. Doit être unique pour éviter toute corruption de données.
98
+
99
+ - **Type:** `String`
100
+ - **Usage:** `Requis`
101
+ - **Valeur(s):** Sans Objet. Doit être défini.
102
+
103
+
104
+ <h3>⚙️<b>idb_id</b></h3>
105
+ Défini l'identification pour l'environement de stockage local (indexDB). Doit être unique pour eviter toute corruption de données.
106
+
107
+ - **Type:** `String`
108
+ - **Usage:** `Requis`
109
+ - **Valeur(s):** Sans Objet. Doit être défini.
110
+
111
+ <h3>⚙️<b>is_single_activity</b></h3>
112
+ Configure l'application pour être traité comme étant une activité independante.
113
+
114
+ - **Type:** `Boolean`
115
+ - **Usage:** `Requis`
116
+ - **Valeur(s):** `true|false` valeur par defaut est `false`
117
+
118
+
119
+ <h3>⚙️<b>no_menu</b></h3>
120
+ Défini si le menu (sommaire) de l'application doit être accessible où non.
121
+
122
+ - **Type:** `Boolean`
123
+ - **Usage:** `Requis`
124
+ - **Valeur(s):** `[true|false]` valeur par defaut est `false`. Mettre à `true` si la page sommaire ne doit pas être accessible
125
+
126
+ <h3>⚙️<b>lang</b></h3>
127
+ Défini la langue dans la quelle sera presenté l'application.
128
+
129
+ - **Type:** `String`
130
+ - **Usage:** `Requis`
131
+ - **Valeur(s):** `[fr|en]` valeur par defaut est `fr` pour la langue française. Mettre à `en` pour avoir l'application en anglais.
132
+
133
+ <h3>⚙️<b>specification</b></h3>
134
+ Défini la norme de specification à utiliser par l'application pour la gestion des données (xAPI ou Scorm).
135
+
136
+ - **Type:** `String`
137
+ - **Usage:** `Requis`
138
+ - **Valeur(s):** `[fr|en]` valeur par defaut est `fr` pour la langue française. Mettre à `en` pour avoir l'application en anglais.
139
+
140
+
141
+ #### TYPE_QUESTION
142
+
143
+ **Type:** `String` _(choix_mult | choix_unique | dropdown | reponse_ouverte | texte_tableau | texte_troue | texte_troue_select)__
144
+
145
+ **Usage:** Obligatoire.
146
+ Définie le type de question.
147
+
148
+ ### Slots
149
+ `content`[named-slot] - permet de recevoir tout le contenu HTML à afficher.
150
+
151
+
152
+ ## Liste d'écouteurs
153
+
154
+ le composant écoutes globalement les émetteurs ci-dessous attachés au `$bus`
155
+
156
+ ::: details <b>set-comp-status</b>
157
+
158
+ Utilisé pour définir le status d'un composant. Un composant peut ainsi émettre son état en indicant s'il est prêt ou non. `AppBase` mettra à jour global de application selon les états des composants.
159
+
160
+
161
+ | **Paramettre associés**<img width=200/> | **type** | **valeur** | **Description** |
162
+ |----|----|----|---------|
163
+ | name | \{String\} | `` | `(éditable)`nom du composant qui émet. |
164
+ | status | \{String\} | `[loading\|ready]` | `(éditable)` status à communiquer|
165
+ | updateTracker | \{Function\} | `name, status` | `(non-éditable)`Cette fonction est executée lorsque évènement est récu|
166
+ | compStatusTracker | \{Array\} | `[]` | `(non-éditable)` Ce paramettre est mis à jour dans le `store`. |
167
+
168
+ - Exemple
169
+
170
+ ```js
171
+ // Le composant toto indique sont status de loading
172
+ this.$bus.$emit('set-comp-status', 'comp_toto', 'loading')
173
+ // AppBase met ajour le status du tracker dans le store
174
+ // AppBase met le status de toute l'application à LOADING
175
+
176
+ //Deux minutes plus tard composant toto indique qu'il est prêt
177
+ setTimeout(()=>this.$bus.$emit('set-comp-status', 'comp_toto', 'ready'), 2000)
178
+ // AppBase met ajour le status du tracker dans le store
179
+ // AppBase met le status de toute l'application à READY
180
+ ```
181
+ ::: tip Note
182
+ l'Application passe seulement à l'état `ready` quand TOUS les composants qui émettent cet événement sont en status `ready`.
183
+
184
+
185
+ :::
186
+
187
+
188
+
189
+
190
+ ::: details <b>reset-userdata</b>
191
+
192
+ Utilisé pour reinitialiser la progression de utilisateur
193
+
194
+ | **Paramettre associés**<img width=200/> | **type** | **valeur** | **Description** |
195
+ |----|----|----|---------|
196
+ | resetUserData | \{Function\} | | `(non-éditable)`Cette fonction est executée lorsque évènement est récu|
197
+
198
+
199
+ - Exemple
200
+
201
+ ```js
202
+ // Le composant toto demande de rénitialiser la progression
203
+ this.$bus.$emit('reset-userdata')
204
+ // AppBase réinitalise la progression
205
+ ```
206
+ :::
207
+
208
+ ::: details <b>fire-exit-event</b>
209
+
210
+ Cet évènement utilisé pour signaler la fermeture de l'application dans le navigateur.
211
+
212
+ | **Paramettre associés**<img width=200/> | **type** | **valeur** | **Description** |
213
+ |----|----|----|---------|
214
+ | cb | \{Function\} | `` | `(éditable, optionnel)`fonction à executer après la réalisation de l'événement |
215
+ | option | \{Boolean\} | `[true\|false]` | `(éditable)` indique si la fonction associée doit utiliser l'API Fecth ou pas|
216
+ | endLesson | \{Function\} | `cb, option` | `(non-éditable)` Cette fonction est executée par application lorsque évènement est réçu|
217
+
218
+ - Exemple
219
+
220
+ ```js
221
+ // Le composant AppBaseModule annonce la fermeture de application en cour avant de lancer une autre leçon.
222
+ this.$bus.$emit('fire-exit-event', () => {
223
+ window.location.replace(newUrlToLaunch)// newUrlToLaunch est url dans le LRS vers la prochaine ressource à initializer
224
+ })
225
+ // AppBase exécute la fermeture de l'application
226
+
227
+ ```
228
+
229
+ :::
230
+
231
+ ::: details <b>move-to-target</b>
232
+
233
+ Utilisé pour signaler le déplacement (skip) vers un élément du DOM
234
+
235
+ | **Paramettre associés**<img width=200/> | **type** | **valeur** | **Description** |
236
+ |----|----|----|---------|
237
+ | target | \{String\} | `` | `(éditable, requis)`Attribut ID de l'élément HTML vers quel va se faire le deplacement |
238
+ | opt | \{Object\} | `{ top, left, behavior}` | `(éditable, optionnel)` paramettre de scroll|
239
+ | moveTo | \{Function\} | `target, opt` | `(non-éditable)`Cette fonction est executée lorsque évènement est récu|
240
+
241
+ - Exemple
242
+
243
+ ```js
244
+ // Le composant toto demande de scroller vers une DIV avec ID main
245
+ this.$bus.$emit('move-to-target', 'main')
246
+ // AppBase déplace le contenu de l'écran vers la DIV main
247
+ ```
248
+ :::
249
+
250
+ ::: details <b>send-xapi-statement</b>
251
+
252
+ Utilisé pour demander l'envoi d'un nouveau statement vers le LRS
253
+
254
+ | **Paramettre associés**<img width=200/> | **type** | **valeur** | **Description** |
255
+ |----|----|----|---------|
256
+ | stmt | \{Object\} | `` | `(éditable, requis)` objet statement à envoyer au LRS|
257
+ | cb | \{Function\} | `[loading\|ready]` | `(éditable)` fonction à executer après la réalisation de l'envoi|
258
+ | withFetch | \{Boolean\} | `[true\|false]` | `(éditable)`Defini si l'API Fetch doit être utilisé ou non|
259
+ | sendXapiStatements | \{Function\} | `stmt, cb, withFetch` | `(non-éditable)`Cette fonction est executée lorsque évènement est récu|
260
+
261
+ - Exemple
262
+
263
+ ```js
264
+ // Le composant toto demande l'envoi d'un statement
265
+ let stmt = {...} // ceci est un statement abstrait (voir la spécification xAPI pour la definition de statement)
266
+ this.$bus.$emit('send-xapi-statement', stmt)
267
+ // AppBase met ajour le status du tracker dans le store
268
+ // AppBase envoie le statement vers le LRS
269
+ ```
270
+ :::
271
+
272
+ ::: details <b>reset-focus-on</b>
273
+
274
+ Force le focus sur un element dans application
275
+
276
+ | **Paramettre associés**<img width=200/> | **type** | **valeur** | **Description** |
277
+ |----|----|----|---------|
278
+ | e | \{Objet\} | `` | `(éditable,requis)` l'HTMLElement qui doit recevoir le focus |
279
+ | resetFocus | \{Function\} | `e` | `(non-éditable)`Cette fonction est executée lorsque évènement est récu|
280
+
281
+ - Exemple
282
+
283
+ ```js
284
+ // Le composant toto demande le focus sur une DIV main
285
+ let main = document.querySelector('#main')
286
+ this.$bus.$emit('reset-focus-on', main)
287
+ // AppBase force le focus sur main
288
+ ```
289
+ :::
290
+
291
+ <!-- - __`set-comp-status`__ `(loading | ready)`: utiliser pour setter l'etat d'un composant this.updateTracker
292
+ - `send-xapi-statement`, this.onSendXapiStatement
293
+ - `reset-userdata`, this.resetUserData
294
+ - `fire-exit-event`, this.endLesson
295
+ - `move-to-target`, this.skipToMain
296
+ - `reset-focus-on`, this.resetFocus -->
297
+
298
+
299
+
300
+
301
+ ## Style
302
+
303
+ `.app-page`[class]
304
+
305
+ Aucune manipulation requise.
306
+
307
+
308
+
309
+ ## Accessibilité
310
+ Aucune manipulation requise.
311
+
@@ -1,15 +1,15 @@
1
- # Main
2
- Fichier de configuration qui sert de point entrée principal de la librairie FCAD
3
-
4
- ## Aperçu/ Utilité
5
-
6
- - Enregistement global des plugins
7
- - Enregistrement global des composants
8
- - Création de stogage local
9
- - Configuration de connection au serveur
10
- - Configuration de l'application
11
-
12
- ::: warning Important
13
- Lorsque vous créez un nouveau `composant global`, engegistrez le dans ce fichier.
14
- :::
15
-
1
+ # Main
2
+ Fichier de configuration qui sert de point entrée principal de la librairie FCAD
3
+
4
+ ## Aperçu/ Utilité
5
+
6
+ - Enregistement global des plugins
7
+ - Enregistrement global des composants
8
+ - Création de stogage local
9
+ - Configuration de connection au serveur
10
+ - Configuration de l'application
11
+
12
+ ::: warning Important
13
+ Lorsque vous créez un nouveau `composant global`, engegistrez le dans ce fichier.
14
+ :::
15
+