fcad-core-dragon 2.0.0-beta.0 → 2.0.0-beta.10
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 +6 -31
- package/.prettierrc +11 -0
- package/.vscode/extensions.json +8 -0
- package/.vscode/settings.json +16 -0
- package/CHANGELOG +153 -0
- package/README.md +28 -43
- package/documentation/.vitepress/config.js +114 -0
- package/documentation/api-examples.md +49 -0
- package/documentation/composants/app-base-button.md +58 -0
- package/documentation/composants/app-base-error-display.md +59 -0
- package/documentation/composants/app-base-popover.md +68 -0
- package/documentation/composants/app-comp-audio.md +75 -0
- package/documentation/composants/app-comp-branch-buttons.md +111 -0
- package/documentation/composants/app-comp-button-progress.md +53 -0
- package/documentation/composants/app-comp-carousel.md +53 -0
- package/documentation/composants/app-comp-container.md +53 -0
- package/documentation/composants/app-comp-input-checkbox-next.md +42 -0
- package/documentation/composants/app-comp-input-dropdown-next.md +34 -0
- package/documentation/composants/app-comp-input-radio-next.md +39 -0
- package/documentation/composants/app-comp-input-text-next.md +35 -0
- package/documentation/composants/app-comp-input-text-table-next.md +34 -0
- package/documentation/composants/app-comp-input-text-to-fill-dropdown-next.md +53 -0
- package/documentation/composants/app-comp-input-text-to-fill-next.md +31 -0
- package/documentation/composants/app-comp-jauge.md +31 -0
- package/documentation/composants/app-comp-menu-item.md +55 -0
- package/documentation/composants/app-comp-menu.md +29 -0
- package/documentation/composants/app-comp-navigation.md +41 -0
- package/documentation/composants/app-comp-note-call.md +53 -0
- package/documentation/composants/app-comp-note-credit.md +53 -0
- package/documentation/composants/app-comp-play-bar-next.md +53 -0
- package/documentation/composants/app-comp-pop-up-next.md +93 -0
- package/documentation/composants/app-comp-quiz-next.md +235 -0
- package/documentation/composants/app-comp-quiz-recall.md +53 -0
- package/documentation/composants/app-comp-svg-next.md +53 -0
- package/documentation/composants/app-comp-table-of-content.md +50 -0
- package/documentation/composants/app-comp-video-player.md +82 -0
- package/documentation/composants.md +46 -0
- package/documentation/composants_critiques/ModelPageComposant.md +53 -0
- package/documentation/composants_critiques/app-base-module.md +43 -0
- package/documentation/composants_critiques/app-base-page.md +48 -0
- package/documentation/composants_critiques/app-base.md +311 -0
- package/documentation/composants_critiques/main.md +15 -0
- package/documentation/demarrage.md +50 -0
- package/documentation/deploiement.md +58 -0
- package/documentation/index.md +33 -0
- package/documentation/markdown-examples.md +85 -0
- package/documentation/public/npm_version.png +0 -0
- package/documentation/public/vite.svg +15 -0
- package/documentation/public/vuejs.svg +2 -0
- package/documentation/public/vuetify.svg +6 -0
- package/eslint.config.js +60 -0
- package/package.json +43 -49
- package/src/$locales/en.json +94 -92
- package/src/$locales/fr.json +77 -113
- package/src/assets/data/onboardingMessages.json +1 -1
- package/src/components/AppBase.vue +971 -437
- package/src/components/AppBaseButton.test.js +21 -0
- package/src/components/AppBaseButton.vue +42 -10
- package/src/components/AppBaseErrorDisplay.vue +209 -162
- package/src/components/AppBaseFlipCard.vue +1 -0
- package/src/components/AppBaseModule.vue +1021 -976
- package/src/components/AppBasePage.vue +656 -128
- package/src/components/AppBasePopover.vue +41 -0
- package/src/components/AppBaseSkeleton.vue +66 -0
- package/src/components/AppCompAudio.vue +256 -0
- package/src/components/AppCompBranchButtons.vue +108 -181
- package/src/components/AppCompButtonProgress.vue +44 -70
- package/src/components/AppCompCarousel.vue +284 -233
- package/src/components/AppCompContainer.vue +29 -0
- package/src/components/AppCompInputCheckBoxNx.vue +323 -0
- package/src/components/AppCompInputDropdownNx.vue +299 -0
- package/src/components/AppCompInputRadioNx.vue +284 -0
- package/src/components/AppCompInputTextNx.vue +153 -0
- package/src/components/AppCompInputTextTableNx.vue +202 -0
- package/src/components/AppCompInputTextToFillDropdownNx.vue +340 -0
- package/src/components/AppCompInputTextToFillNx.vue +313 -0
- package/src/components/AppCompJauge.vue +36 -11
- package/src/components/AppCompMenu.vue +312 -92
- package/src/components/AppCompMenuItem.vue +129 -105
- package/src/components/AppCompNavigation.vue +972 -0
- package/src/components/AppCompNoteCall.vue +161 -0
- package/src/components/AppCompNoteCredit.vue +491 -0
- package/src/components/AppCompPlayBarNext.vue +2288 -0
- package/src/components/AppCompPopUpNext.vue +504 -0
- package/src/components/AppCompQuizNext.vue +510 -0
- package/src/components/AppCompQuizRecall.vue +350 -0
- package/src/components/AppCompSVGNext.vue +346 -0
- package/src/components/AppCompSettingsMenu.vue +18 -16
- package/src/components/AppCompTableOfContent.vue +340 -122
- package/src/components/AppCompVideoPlayer.vue +377 -0
- package/src/components/BaseModule.vue +24 -117
- package/src/components/tests__/AppBaseButton.spec.js +53 -0
- package/src/components/tests__/useTimer.spec.js +91 -0
- package/src/composables/useIdleDetector.js +56 -0
- package/src/composables/useQuiz.js +89 -0
- package/src/composables/useTimer.js +172 -0
- package/src/directives/nvdaFix.js +53 -0
- package/src/externalComps/ModuleView.vue +22 -0
- package/src/externalComps/SummaryView.vue +91 -0
- package/src/main.js +400 -142
- package/src/module/stores/appStore.js +947 -0
- package/src/module/xapi/ADL.js +241 -60
- package/src/module/xapi/Crypto/Hasher.js +8 -8
- package/src/module/xapi/Crypto/WordArray.js +6 -6
- package/src/module/xapi/Crypto/algorithms/BufferedBlockAlgorithm.js +4 -4
- package/src/module/xapi/Crypto/algorithms/C_algo.js +14 -18
- package/src/module/xapi/Crypto/algorithms/HMAC.js +1 -1
- package/src/module/xapi/Crypto/algorithms/SHA1.js +1 -1
- package/src/module/xapi/Crypto/encoders/Base.js +7 -7
- package/src/module/xapi/Crypto/encoders/Base64.js +3 -3
- package/src/module/xapi/Crypto/encoders/Hex.js +4 -3
- package/src/module/xapi/Crypto/encoders/Latin1.js +3 -3
- package/src/module/xapi/Crypto/encoders/Utf8.js +3 -3
- package/src/module/xapi/Statement/index.js +3 -3
- package/src/module/xapi/launch.js +10 -10
- package/src/module/xapi/utils.js +17 -17
- package/src/module/xapi/wrapper.js +223 -218
- package/src/module/xapi/xapiStatement.js +29 -29
- package/src/plugins/analytics.js +34 -0
- package/src/plugins/bus.js +7 -2
- package/src/plugins/gsap.js +9 -8
- package/src/plugins/helper.js +141 -43
- package/src/plugins/i18n.js +13 -18
- package/src/plugins/idb.js +46 -30
- package/src/plugins/save.js +1 -1
- package/src/plugins/scorm.js +15 -15
- package/src/plugins/xapi.js +2 -2
- package/src/public/index.html +23 -11
- package/src/router/index.js +57 -0
- package/src/router/routes.js +312 -0
- package/src/shared/generalfuncs.js +241 -10
- package/src/shared/validators.js +1018 -0
- package/vitest.config.js +19 -0
- package/.eslintignore +0 -29
- package/.eslintrc.js +0 -86
- package/.prettierrc.js +0 -5
- package/babel.config.js +0 -3
- package/src/components/AppBaseDragChoice.vue +0 -91
- package/src/components/AppBaseDropZone.vue +0 -112
- package/src/components/AppCompDragAndDrop.vue +0 -339
- package/src/components/AppCompInputAssociation.vue +0 -332
- package/src/components/AppCompInputCheckBox.vue +0 -227
- package/src/components/AppCompInputDropdown.vue +0 -184
- package/src/components/AppCompInputRadio.vue +0 -169
- package/src/components/AppCompInputTextBox.vue +0 -91
- package/src/components/AppCompInputTextTable.vue +0 -155
- package/src/components/AppCompInputTextToFillDropdown.vue +0 -255
- package/src/components/AppCompInputTextToFillText.vue +0 -164
- package/src/components/AppCompMediaPlayer.vue +0 -365
- package/src/components/AppCompNavigationFull.vue +0 -1791
- package/src/components/AppCompPlayBar.vue +0 -1540
- package/src/components/AppCompPopUp.vue +0 -523
- package/src/components/AppCompQuiz.vue +0 -2998
- package/src/components/AppCompToolTip.vue +0 -94
- package/src/mixins/$pageMixins.js +0 -381
- package/src/mixins/$quizMixins.js +0 -456
- package/src/mixins/timerMixin.js +0 -132
- package/src/module/store.js +0 -874
- package/src/plugins/timeManager.js +0 -77
- package/src/routes.js +0 -734
- package/vue.config.js +0 -83
|
@@ -0,0 +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
|
+
|
|
@@ -0,0 +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
|
+
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Guide de démarrage
|
|
2
|
+
Logiciels requis pour le développement du FCAD.
|
|
3
|
+
|
|
4
|
+
## Vérifier la compatibilité de Node.js et npm
|
|
5
|
+
|
|
6
|
+
Node.js <b>22.12.0</b> ou plus récent et npm <b>10.9.0</b> ou plus récent sont requis.
|
|
7
|
+
|
|
8
|
+
**Commandes pour vérifier les versions installées sur votre poste**
|
|
9
|
+
|
|
10
|
+
```shell
|
|
11
|
+
node -v
|
|
12
|
+
npm -v
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
::: info
|
|
16
|
+
Il faut contacter la DRI pour procéder à la mise à jour de l'installation globale de Node.js et npm sur votre machine.
|
|
17
|
+
:::
|
|
18
|
+
|
|
19
|
+
## Dépendances globales
|
|
20
|
+
|
|
21
|
+
Les paquets npm suivants doivent être installés globalement sur votre poste : yalc, nodemon
|
|
22
|
+
|
|
23
|
+
```shell
|
|
24
|
+
npm install -g yalc nodemon
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
::: warning AVERTISSEMENT
|
|
28
|
+
il est possible qu'un redémarrage soit nécessaire suite à l'installation de yalc
|
|
29
|
+
:::
|
|
30
|
+
|
|
31
|
+
## Récupération du code et utilisation de yalc
|
|
32
|
+
|
|
33
|
+
Le code source se trouve sur notre instance de gitlab https://git.crosemont.qc.ca/fcad/core/fcad-core-2
|
|
34
|
+
|
|
35
|
+
::: warning AVERTISSEMENT
|
|
36
|
+
L'utilisation de Git Bash comme terminal par défaut est fortement recommandée.
|
|
37
|
+
:::
|
|
38
|
+
|
|
39
|
+
Une fois le répertoire git cloné, il faut installer les dépendances.
|
|
40
|
+
|
|
41
|
+
```shell
|
|
42
|
+
npm install
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Le script <b>watch</b> dans package.json sert à monitorer tout changement dans le code et à publier automatiquement vers yalc.
|
|
46
|
+
|
|
47
|
+
```shell
|
|
48
|
+
npm run watch
|
|
49
|
+
```
|
|
50
|
+
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Déploiement sur le registre npm
|
|
2
|
+
|
|
3
|
+
Le FCAD 2 est disponible en tant que paquet npm nommé <b>fcad-core-dragon</b>.
|
|
4
|
+
|
|
5
|
+
https://www.npmjs.com/package/fcad-core-dragon
|
|
6
|
+
|
|
7
|
+
## Pré-requis
|
|
8
|
+
Il faut d’abord s’assurer d’être connecté à npm en exécutant la commande :
|
|
9
|
+
```shell
|
|
10
|
+
npm login
|
|
11
|
+
```
|
|
12
|
+
Le compte npm à utiliser est [<b>cg_distance</b>](https://www.npmjs.com/~cg_distance)
|
|
13
|
+
|
|
14
|
+
## Version pre-release vs version stable
|
|
15
|
+
|
|
16
|
+
Par convention, il faut d'abord publier une version pre-release qui sera testée par les intégrateurs. Tout problème/bogue relevé pourra être corrigé avant d'en arriver à la publication d'une version stable. Une version pre-release portera le suffixe <b>-beta.x</b> et aura le tag <b>next</b> sur npm.
|
|
17
|
+
|
|
18
|
+
L'installation de la dernière version <b>pre-release</b> se fait à l'aide de la commande :
|
|
19
|
+
```shell
|
|
20
|
+
npm install fcad-core-dragon@next
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
L'installation de la dernière version <b>stable</b> se fait à l'aide de la commande :
|
|
24
|
+
```shell
|
|
25
|
+
npm install fcad-core-dragon@latest
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+

|
|
29
|
+
<small>*Capture écran de la page affichant [l'historique complet des versions sur npm](https://www.npmjs.com/package/fcad-core-dragon?activeTab=versions)</small>
|
|
30
|
+
|
|
31
|
+
## Procédure à suivre
|
|
32
|
+
|
|
33
|
+
- La première étape du déploiement consiste à lister les derniers changements dans CHANGELOG.md suivi d'un commit/push.
|
|
34
|
+
|
|
35
|
+
- Il faut ensuite utiliser la commande <b>npm version</b> pour incrémenter le numéro de version de notre paquet npm.
|
|
36
|
+
|
|
37
|
+
<small>Admettons que nous sommes présentement sur la version <b>2.0.0</b></small>
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
```shell
|
|
41
|
+
# pour une version pre-release
|
|
42
|
+
npm version 2.0.0-beta.1
|
|
43
|
+
# pour une version stable
|
|
44
|
+
npm version 2.0.1
|
|
45
|
+
```
|
|
46
|
+
::: warning AVERTISSEMENT
|
|
47
|
+
Un nouveau commit sera créé suite à l'exécution de la commande npm version. Il faut donc faire un push pour s'assurer que le changement aboutisse sur le serveur git.
|
|
48
|
+
:::
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
- Il faut finalement utiliser la commande <b>npm publish</b> pour déployer la nouvelle version sur le registre npm.
|
|
52
|
+
|
|
53
|
+
```shell
|
|
54
|
+
# pour une version pre-release
|
|
55
|
+
npm publish --tag next
|
|
56
|
+
# pour une version stable
|
|
57
|
+
npm publish
|
|
58
|
+
```
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
---
|
|
2
|
+
# https://vitepress.dev/reference/default-theme-home-page
|
|
3
|
+
layout: home
|
|
4
|
+
|
|
5
|
+
hero:
|
|
6
|
+
name: 'FCAD 2'
|
|
7
|
+
text: 'Documentation technique'
|
|
8
|
+
tagline: Pour les développeurs
|
|
9
|
+
actions:
|
|
10
|
+
- theme: brand
|
|
11
|
+
text: Guide de démarrage
|
|
12
|
+
link: /demarrage
|
|
13
|
+
- theme: alt
|
|
14
|
+
text: Code source sur Gitlab
|
|
15
|
+
link: https://git.crosemont.qc.ca/fcad/core/fcad-core-2
|
|
16
|
+
- theme: alt
|
|
17
|
+
text: fcad-core-dragon sur npm
|
|
18
|
+
link: https://www.npmjs.com/package/fcad-core-dragon
|
|
19
|
+
|
|
20
|
+
features:
|
|
21
|
+
- icon:
|
|
22
|
+
src: /vuejs.svg
|
|
23
|
+
title: Vue.js 3
|
|
24
|
+
details: Le FCAD 2 utilise la dernière version du framework JavaScript Vue.js
|
|
25
|
+
- icon:
|
|
26
|
+
src: /vite.svg
|
|
27
|
+
title: Vite
|
|
28
|
+
details: Vite est utilisé pour le développement local ainsi que la compilation finale
|
|
29
|
+
- icon:
|
|
30
|
+
src: /vuetify.svg
|
|
31
|
+
title: Vuetify
|
|
32
|
+
details: La librairie Vuetify est utilisée pour créer notre interface utilisateur
|
|
33
|
+
---
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Markdown Extension Examples
|
|
2
|
+
|
|
3
|
+
This page demonstrates some of the built-in markdown extensions provided by VitePress.
|
|
4
|
+
|
|
5
|
+
## Syntax Highlighting
|
|
6
|
+
|
|
7
|
+
VitePress provides Syntax Highlighting powered by [Shiki](https://github.com/shikijs/shiki), with additional features like line-highlighting:
|
|
8
|
+
|
|
9
|
+
**Input**
|
|
10
|
+
|
|
11
|
+
````md
|
|
12
|
+
```js{4}
|
|
13
|
+
export default {
|
|
14
|
+
data () {
|
|
15
|
+
return {
|
|
16
|
+
msg: 'Highlighted!'
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
```
|
|
21
|
+
````
|
|
22
|
+
|
|
23
|
+
**Output**
|
|
24
|
+
|
|
25
|
+
```js{4}
|
|
26
|
+
export default {
|
|
27
|
+
data () {
|
|
28
|
+
return {
|
|
29
|
+
msg: 'Highlighted!'
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Custom Containers
|
|
36
|
+
|
|
37
|
+
**Input**
|
|
38
|
+
|
|
39
|
+
```md
|
|
40
|
+
::: info
|
|
41
|
+
This is an info box.
|
|
42
|
+
:::
|
|
43
|
+
|
|
44
|
+
::: tip
|
|
45
|
+
This is a tip.
|
|
46
|
+
:::
|
|
47
|
+
|
|
48
|
+
::: warning
|
|
49
|
+
This is a warning.
|
|
50
|
+
:::
|
|
51
|
+
|
|
52
|
+
::: danger
|
|
53
|
+
This is a dangerous warning.
|
|
54
|
+
:::
|
|
55
|
+
|
|
56
|
+
::: details
|
|
57
|
+
This is a details block.
|
|
58
|
+
:::
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**Output**
|
|
62
|
+
|
|
63
|
+
::: info
|
|
64
|
+
This is an info box.
|
|
65
|
+
:::
|
|
66
|
+
|
|
67
|
+
::: tip
|
|
68
|
+
This is a tip.
|
|
69
|
+
:::
|
|
70
|
+
|
|
71
|
+
::: warning
|
|
72
|
+
This is a warning.
|
|
73
|
+
:::
|
|
74
|
+
|
|
75
|
+
::: danger
|
|
76
|
+
This is a dangerous warning.
|
|
77
|
+
:::
|
|
78
|
+
|
|
79
|
+
::: details
|
|
80
|
+
This is a details block.
|
|
81
|
+
:::
|
|
82
|
+
|
|
83
|
+
## More
|
|
84
|
+
|
|
85
|
+
Check out the documentation for the [full list of markdown extensions](https://vitepress.dev/guide/markdown).
|
|
Binary file
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<svg width="410" height="404" viewBox="0 0 410 404" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M399.641 59.5246L215.643 388.545C211.844 395.338 202.084 395.378 198.228 388.618L10.5817 59.5563C6.38087 52.1896 12.6802 43.2665 21.0281 44.7586L205.223 77.6824C206.398 77.8924 207.601 77.8904 208.776 77.6763L389.119 44.8058C397.439 43.2894 403.768 52.1434 399.641 59.5246Z" fill="url(#paint0_linear)"/>
|
|
3
|
+
<path d="M292.965 1.5744L156.801 28.2552C154.563 28.6937 152.906 30.5903 152.771 32.8664L144.395 174.33C144.198 177.662 147.258 180.248 150.51 179.498L188.42 170.749C191.967 169.931 195.172 173.055 194.443 176.622L183.18 231.775C182.422 235.487 185.907 238.661 189.532 237.56L212.947 230.446C216.577 229.344 220.065 232.527 219.297 236.242L201.398 322.875C200.278 328.294 207.486 331.249 210.492 326.603L212.5 323.5L323.454 102.072C325.312 98.3645 322.108 94.137 318.036 94.9228L279.014 102.454C275.347 103.161 272.227 99.746 273.262 96.1583L298.731 7.86689C299.767 4.27314 296.636 0.855181 292.965 1.5744Z" fill="url(#paint1_linear)"/>
|
|
4
|
+
<defs>
|
|
5
|
+
<linearGradient id="paint0_linear" x1="6.00017" y1="32.9999" x2="235" y2="344" gradientUnits="userSpaceOnUse">
|
|
6
|
+
<stop stop-color="#41D1FF"/>
|
|
7
|
+
<stop offset="1" stop-color="#BD34FE"/>
|
|
8
|
+
</linearGradient>
|
|
9
|
+
<linearGradient id="paint1_linear" x1="194.651" y1="8.81818" x2="236.076" y2="292.989" gradientUnits="userSpaceOnUse">
|
|
10
|
+
<stop stop-color="#FFEA83"/>
|
|
11
|
+
<stop offset="0.0833333" stop-color="#FFDD35"/>
|
|
12
|
+
<stop offset="1" stop-color="#FFA800"/>
|
|
13
|
+
</linearGradient>
|
|
14
|
+
</defs>
|
|
15
|
+
</svg>
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg version="1.1" viewBox="0 0 261.76 226.69" xmlns="http://www.w3.org/2000/svg"><g transform="matrix(1.3333 0 0 -1.3333 -76.311 313.34)"><g transform="translate(178.06 235.01)"><path d="m0 0-22.669-39.264-22.669 39.264h-75.491l98.16-170.02 98.16 170.02z" fill="#41b883"/></g><g transform="translate(178.06 235.01)"><path d="m0 0-22.669-39.264-22.669 39.264h-36.227l58.896-102.01 58.896 102.01z" fill="#34495e"/></g></g></svg>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<svg width="400" height="400" viewBox="0 0 400 400" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path d="M203.087 130.155L144.963 230.852L200 326.236L272.896 199.975L345.758 73.7152H235.651L203.087 130.155Z" fill="#1697F6"/>
|
|
3
|
+
<path d="M127.137 199.975L130.955 206.615L185.328 112.393L207.668 73.7152H200H54.2415L127.137 199.975Z" fill="#AEDDFF"/>
|
|
4
|
+
<path d="M235.651 73.7152C263.203 164.385 200 326.236 200 326.236L144.963 230.852L235.651 73.7152Z" fill="#1867C0"/>
|
|
5
|
+
<path d="M207.668 73.7152C91.586 73.7152 130.955 206.615 130.955 206.615L207.668 73.7152Z" fill="#7BC6FF"/>
|
|
6
|
+
</svg>
|
package/eslint.config.js
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import js from '@eslint/js'
|
|
2
|
+
import globals from 'globals'
|
|
3
|
+
import pluginVue from 'eslint-plugin-vue'
|
|
4
|
+
import { defineConfig, globalIgnores } from 'eslint/config'
|
|
5
|
+
import skipFormatting from '@vue/eslint-config-prettier/skip-formatting'
|
|
6
|
+
|
|
7
|
+
export default defineConfig([
|
|
8
|
+
{
|
|
9
|
+
files: ['**/*.{js,mjs,cjs,vue}']
|
|
10
|
+
},
|
|
11
|
+
globalIgnores([
|
|
12
|
+
'**/.DS_Store',
|
|
13
|
+
'**/node_modules',
|
|
14
|
+
'**/dist/**',
|
|
15
|
+
'**/coverage/**',
|
|
16
|
+
'**/yalc.lock',
|
|
17
|
+
'**/package-lock.json',
|
|
18
|
+
'**/.zip',
|
|
19
|
+
'**/.env.local',
|
|
20
|
+
'**/.env.*.local',
|
|
21
|
+
'**/npm-debug.log*',
|
|
22
|
+
'**/.idea',
|
|
23
|
+
'**/.vscode',
|
|
24
|
+
'**/*.suo',
|
|
25
|
+
'**/*.ntvs*',
|
|
26
|
+
'**/*.njsproj',
|
|
27
|
+
'**/*.sln',
|
|
28
|
+
'**/*.sw?',
|
|
29
|
+
'**/\\_*',
|
|
30
|
+
'**/.gitignore'
|
|
31
|
+
]),
|
|
32
|
+
{
|
|
33
|
+
languageOptions: {
|
|
34
|
+
globals: {
|
|
35
|
+
...globals.node,
|
|
36
|
+
...globals.browser
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
js.configs.recommended,
|
|
41
|
+
...pluginVue.configs['flat/recommended'],
|
|
42
|
+
{
|
|
43
|
+
rules: {
|
|
44
|
+
'no-unused-vars': [
|
|
45
|
+
'warn',
|
|
46
|
+
{ vars: 'local', args: 'none', ignoreRestSiblings: true }
|
|
47
|
+
],
|
|
48
|
+
'vue/no-unused-vars': 'warn',
|
|
49
|
+
'no-prototype-builtins': 'off',
|
|
50
|
+
'vue/html-self-closing': 'off',
|
|
51
|
+
'vue/no-v-html': 'off',
|
|
52
|
+
'vue/no-v-text-v-html-on-component': 'off',
|
|
53
|
+
'vue/no-deprecated-delete-set': 'warn',
|
|
54
|
+
'vue/max-attributes-per-line': 'off',
|
|
55
|
+
'vue/singleline-html-element-content-newline': 'off',
|
|
56
|
+
'vue/component-name-in-template-casing': ['error', 'kebab-case']
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
skipFormatting
|
|
60
|
+
])
|