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.
- package/.editorconfig +7 -7
- package/.gitlab-ci.yml +124 -0
- package/.prettierrc +11 -11
- package/.vscode/extensions.json +8 -8
- package/.vscode/settings.json +46 -16
- package/CHANGELOG +520 -520
- package/README.md +57 -57
- package/documentation/.vitepress/config.js +114 -114
- package/documentation/api-examples.md +49 -49
- package/documentation/composants/app-base-button.md +58 -58
- package/documentation/composants/app-base-error-display.md +59 -59
- package/documentation/composants/app-base-popover.md +68 -68
- package/documentation/composants/app-comp-audio.md +75 -75
- package/documentation/composants/app-comp-branch-buttons.md +111 -111
- package/documentation/composants/app-comp-button-progress.md +53 -53
- package/documentation/composants/app-comp-carousel.md +53 -53
- package/documentation/composants/app-comp-container.md +53 -53
- package/documentation/composants/app-comp-input-checkbox-next.md +42 -42
- package/documentation/composants/app-comp-input-dropdown-next.md +34 -34
- package/documentation/composants/app-comp-input-radio-next.md +39 -39
- package/documentation/composants/app-comp-input-text-next.md +35 -35
- package/documentation/composants/app-comp-input-text-table-next.md +34 -34
- package/documentation/composants/app-comp-input-text-to-fill-dropdown-next.md +53 -53
- package/documentation/composants/app-comp-input-text-to-fill-next.md +31 -31
- package/documentation/composants/app-comp-jauge.md +31 -31
- package/documentation/composants/app-comp-menu-item.md +55 -55
- package/documentation/composants/app-comp-menu.md +29 -29
- package/documentation/composants/app-comp-navigation.md +41 -41
- package/documentation/composants/app-comp-note-call.md +53 -53
- package/documentation/composants/app-comp-note-credit.md +53 -53
- package/documentation/composants/app-comp-play-bar-next.md +53 -53
- package/documentation/composants/app-comp-pop-up-next.md +93 -93
- package/documentation/composants/app-comp-quiz-next.md +235 -235
- package/documentation/composants/app-comp-quiz-recall.md +53 -53
- package/documentation/composants/app-comp-svg-next.md +53 -53
- package/documentation/composants/app-comp-table-of-content.md +50 -50
- package/documentation/composants/app-comp-video-player.md +82 -82
- package/documentation/composants.md +46 -46
- package/documentation/composants_critiques/ModelPageComposant.md +53 -53
- package/documentation/composants_critiques/app-base-module.md +43 -43
- package/documentation/composants_critiques/app-base-page.md +48 -48
- package/documentation/composants_critiques/app-base.md +311 -311
- package/documentation/composants_critiques/main.md +15 -15
- package/documentation/demarrage.md +50 -50
- package/documentation/deploiement.md +57 -57
- package/documentation/index.md +33 -33
- package/documentation/markdown-examples.md +85 -85
- package/documentation/public/vite.svg +14 -14
- package/documentation/public/vuejs.svg +1 -1
- package/documentation/public/vuetify.svg +5 -5
- package/eslint.config.js +60 -60
- package/junit-report.xml +182 -0
- package/package.json +66 -59
- package/playwright/index.html +12 -0
- package/playwright/index.js +21 -0
- package/playwright-ct.config.js +95 -0
- package/src/$locales/en.json +157 -157
- package/src/$locales/fr.json +120 -120
- package/src/assets/data/onboardingMessages.json +47 -47
- package/src/components/AppBase.vue +1171 -1169
- package/src/components/AppBaseButton.vue +90 -95
- package/src/components/AppBaseErrorDisplay.vue +438 -438
- package/src/components/AppBaseFlipCard.vue +84 -84
- package/src/components/AppBaseModule.vue +1639 -1634
- package/src/components/AppBasePage.vue +3 -2
- package/src/components/AppBasePopover.vue +41 -41
- package/src/components/AppBaseSkeleton.vue +66 -66
- package/src/components/AppCompAudio.vue +261 -256
- package/src/components/AppCompBranchButtons.vue +508 -508
- package/src/components/AppCompButtonProgress.vue +137 -132
- package/src/components/AppCompCarousel.vue +342 -336
- package/src/components/AppCompContainer.vue +29 -29
- package/src/components/AppCompInputCheckBoxNx.vue +325 -323
- package/src/components/AppCompInputDropdownNx.vue +302 -299
- package/src/components/AppCompInputRadioNx.vue +287 -284
- package/src/components/AppCompInputTextNx.vue +156 -153
- package/src/components/AppCompInputTextTableNx.vue +205 -202
- package/src/components/AppCompInputTextToFillDropdownNx.vue +343 -340
- package/src/components/AppCompInputTextToFillNx.vue +316 -313
- package/src/components/AppCompJauge.vue +81 -81
- package/src/components/AppCompMenu.vue +6 -2
- package/src/components/AppCompMenuItem.vue +246 -240
- package/src/components/AppCompNavigation.vue +977 -972
- package/src/components/AppCompNoteCall.vue +167 -161
- package/src/components/AppCompNoteCredit.vue +496 -491
- package/src/components/AppCompPlayBarNext.vue +2290 -2288
- package/src/components/AppCompPopUpNext.vue +508 -504
- package/src/components/AppCompQuizNext.vue +515 -510
- package/src/components/AppCompQuizRecall.vue +355 -350
- package/src/components/AppCompSVGNext.vue +346 -346
- package/src/components/AppCompSettingsMenu.vue +177 -172
- package/src/components/AppCompTableOfContent.vue +433 -427
- package/src/components/AppCompVideoPlayer.vue +377 -377
- package/src/components/AppCompViewDisplay.vue +6 -6
- package/src/components/BaseModule.vue +55 -55
- package/src/composables/useIdleDetector.js +56 -56
- package/src/composables/useQuiz.js +89 -89
- package/src/composables/useTimer.js +172 -172
- package/src/directives/nvdaFix.js +53 -53
- package/src/externalComps/ModuleView.vue +22 -22
- package/src/externalComps/SummaryView.vue +91 -91
- package/src/main.js +493 -476
- package/src/module/stores/appStore.js +960 -947
- package/src/module/xapi/ADL.js +520 -520
- package/src/module/xapi/Crypto/Hasher.js +241 -241
- package/src/module/xapi/Crypto/WordArray.js +278 -278
- package/src/module/xapi/Crypto/algorithms/BufferedBlockAlgorithm.js +103 -103
- package/src/module/xapi/Crypto/algorithms/C_algo.js +315 -315
- package/src/module/xapi/Crypto/algorithms/HMAC.js +9 -9
- package/src/module/xapi/Crypto/algorithms/SHA1.js +9 -9
- package/src/module/xapi/Crypto/encoders/Base.js +105 -105
- package/src/module/xapi/Crypto/encoders/Base64.js +99 -99
- package/src/module/xapi/Crypto/encoders/Hex.js +61 -61
- package/src/module/xapi/Crypto/encoders/Latin1.js +61 -61
- package/src/module/xapi/Crypto/encoders/Utf8.js +45 -45
- package/src/module/xapi/Crypto/index.js +53 -53
- package/src/module/xapi/Statement/activity.js +47 -47
- package/src/module/xapi/Statement/agent.js +55 -55
- package/src/module/xapi/Statement/group.js +26 -26
- package/src/module/xapi/Statement/index.js +259 -259
- package/src/module/xapi/Statement/statement.js +253 -253
- package/src/module/xapi/Statement/statementRef.js +23 -23
- package/src/module/xapi/Statement/substatement.js +22 -22
- package/src/module/xapi/Statement/verb.js +36 -36
- package/src/module/xapi/activitytypes.js +17 -17
- package/src/module/xapi/launch.js +157 -157
- package/src/module/xapi/utils.js +167 -167
- package/src/module/xapi/verbs.js +294 -294
- package/src/module/xapi/wrapper.js +1895 -1895
- package/src/module/xapi/xapiStatement.js +444 -444
- package/src/plugins/analytics.js +34 -34
- package/src/plugins/bus.js +12 -8
- package/src/plugins/gsap.js +17 -15
- package/src/plugins/helper.js +355 -358
- package/src/plugins/i18n.js +27 -26
- package/src/plugins/idb.js +227 -227
- package/src/plugins/save.js +37 -37
- package/src/plugins/scorm.js +287 -287
- package/src/plugins/xapi.js +11 -11
- package/src/public/index.html +33 -33
- package/src/router/index.js +57 -57
- package/src/router/routes.js +312 -312
- package/src/shared/generalfuncs.js +344 -344
- package/src/shared/validators.js +1018 -1018
- package/tests/component/AppBaseButton.spec.js +53 -0
- package/tests/component/pinia.spec.js +24 -0
- package/{src/components/tests__ → tests/unit}/AppBaseButton.spec.js +53 -53
- package/tests/unit/AppCompInputCheckBoxNx.spec.js +59 -0
- package/tests/unit/AppCompInputDropdownNx.spec.js +51 -0
- package/tests/unit/AppCompInputRadioNx.spec.js +59 -0
- package/tests/unit/AppCompInputTextNx.spec.js +44 -0
- package/tests/unit/AppCompInputTextTableNx.spec.js +77 -0
- package/tests/unit/AppCompInputTextToFillDropdownNx.spec.js +60 -0
- package/tests/unit/AppCompInputTextToFillNx.spec.js +45 -0
- package/tests/unit/AppCompQuizNext.spec.js +114 -0
- package/tests/unit/AppCompVideoPlayer.spec.js +177 -0
- package/{src/components/tests__ → tests/unit}/useTimer.spec.js +91 -91
- package/vitest.config.js +28 -19
- package/vitest.setup.js +28 -0
- 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 | 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 | 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
|
+
|