fcad-core-dragon 2.1.0-beta.4 → 2.1.0
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 +8 -33
- package/.prettierrc +11 -0
- package/.vscode/extensions.json +8 -0
- package/.vscode/settings.json +16 -0
- package/CHANGELOG +20 -0
- package/eslint.config.js +60 -0
- package/package.json +9 -9
- package/src/$locales/en.json +3 -3
- package/src/$locales/fr.json +3 -3
- package/src/assets/data/onboardingMessages.json +47 -47
- package/src/components/AppBase.vue +5 -6
- package/src/components/AppBaseErrorDisplay.vue +438 -438
- package/src/components/AppBaseFlipCard.vue +84 -84
- package/src/components/AppBaseModule.vue +15 -17
- package/src/components/AppBasePage.vue +866 -783
- package/src/components/AppBasePopover.vue +41 -41
- package/src/components/AppBaseSkeleton.vue +24 -3
- package/src/components/AppCompAudio.vue +12 -2
- package/src/components/AppCompInputCheckBoxNx.vue +1 -2
- package/src/components/AppCompInputRadioNx.vue +8 -2
- package/src/components/AppCompInputTextToFillDropdownNx.vue +45 -0
- package/src/components/AppCompMenu.vue +424 -423
- package/src/components/AppCompNavigation.vue +2 -2
- package/src/components/AppCompPlayBarNext.vue +123 -94
- package/src/components/AppCompPopUpNext.vue +2 -2
- package/src/components/AppCompQuizNext.vue +12 -2
- package/src/components/AppCompQuizRecall.vue +10 -4
- package/src/components/AppCompSettingsMenu.vue +172 -172
- package/src/components/AppCompTableOfContent.vue +1 -4
- package/src/components/AppCompVideoPlayer.vue +7 -0
- package/src/components/AppCompViewDisplay.vue +6 -6
- package/src/composables/useTimer.js +17 -20
- package/src/externalComps/ModuleView.vue +22 -22
- package/src/externalComps/SummaryView.vue +91 -91
- package/src/module/stores/appStore.js +0 -1
- 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/utils.js +167 -167
- package/src/module/xapi/verbs.js +294 -294
- package/src/module/xapi/xapiStatement.js +444 -444
- package/src/plugins/bus.js +8 -8
- package/src/plugins/helper.js +4 -0
- 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 +1 -1
- package/src/shared/validators.js +22 -6
- package/.eslintignore +0 -29
- package/.eslintrc.cjs +0 -81
- package/bk.scss +0 -117
package/.editorconfig
CHANGED
|
@@ -1,33 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
end_of_line = lf
|
|
8
|
-
|
|
9
|
-
trim_trailing_whitespace = true
|
|
10
|
-
insert_final_newline = true
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
# The JSON files contain newlines inconsistently
|
|
14
|
-
[*.json]
|
|
15
|
-
insert_final_newline = ignore
|
|
16
|
-
|
|
17
|
-
# Minified JavaScript files shouldn't be changed
|
|
18
|
-
[**.min.js]
|
|
19
|
-
indent_style = ignore
|
|
20
|
-
insert_final_newline = ignore
|
|
21
|
-
|
|
22
|
-
# Makefiles always use tabs for indentation
|
|
23
|
-
[Makefile]
|
|
24
|
-
indent_style = tab
|
|
25
|
-
|
|
26
|
-
# Batch files use tabs for indentation
|
|
27
|
-
[*.bat]
|
|
28
|
-
indent_style = tab
|
|
29
|
-
|
|
30
|
-
[*.md]
|
|
31
|
-
trim_trailing_whitespace = false
|
|
32
|
-
insert_final_newline = false
|
|
33
|
-
|
|
1
|
+
[*.{js,jsx,mjs,cjs,ts,tsx,mts,cts,vue,css,scss,sass,less,styl}]
|
|
2
|
+
charset = utf-8
|
|
3
|
+
indent_size = 2
|
|
4
|
+
indent_style = space
|
|
5
|
+
insert_final_newline = true
|
|
6
|
+
trim_trailing_whitespace = true
|
|
7
|
+
end_of_line = lf
|
|
8
|
+
max_line_length = 80
|
package/.prettierrc
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://www.schemastore.org/prettierrc.json",
|
|
3
|
+
"singleQuote": true,
|
|
4
|
+
"semi": false,
|
|
5
|
+
"tabWidth": 2,
|
|
6
|
+
"trailingComma": "none",
|
|
7
|
+
"arrowParens": "always",
|
|
8
|
+
"htmlWhitespaceSensitivity": "ignore",
|
|
9
|
+
"endOfLine": "auto",
|
|
10
|
+
"printWidth": 80
|
|
11
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"explorer.fileNesting.enabled": true,
|
|
3
|
+
"explorer.fileNesting.patterns": {
|
|
4
|
+
"tsconfig.json": "tsconfig.*.json, env.d.ts",
|
|
5
|
+
"vite.config.*": "jsconfig*, vitest.config.*, cypress.config.*, playwright.config.*",
|
|
6
|
+
"package.json": "package-lock.json, pnpm*, .yarnrc*, yarn*, .eslint*, eslint*, .oxlint*, oxlint*, .prettier*, prettier*, .editorconfig"
|
|
7
|
+
},
|
|
8
|
+
"editor.codeActionsOnSave": {
|
|
9
|
+
"source.fixAll": "explicit"
|
|
10
|
+
},
|
|
11
|
+
"editor.formatOnSave": true,
|
|
12
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
|
13
|
+
"[vue]": {
|
|
14
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
|
15
|
+
}
|
|
16
|
+
}
|
package/CHANGELOG
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
|
+
2.0.3(24 novembre 2025)
|
|
2
|
+
Correction Beta apporter
|
|
3
|
+
|
|
4
|
+
2.1.0-beta.10(20 novembre 2025)
|
|
5
|
+
Correction de l’affichage des listes déroulantes
|
|
6
|
+
|
|
7
|
+
Correction de la validation des object de quiz si le quiz n’est pas null il ne valide pas le contenu du pop-up neutre
|
|
8
|
+
|
|
9
|
+
Correction des titres dans les pop-ups de fin d’activité et de leçon (le titre est la maintenant)
|
|
10
|
+
|
|
11
|
+
2.1.0-beta.5(22 octobre 2025)
|
|
12
|
+
Correction du problème de complétion avec les fenêtres latérales
|
|
13
|
+
|
|
14
|
+
Multiples corrections de l’accessibilité
|
|
15
|
+
|
|
16
|
+
Optimisation des dépendances (package.json)
|
|
17
|
+
|
|
18
|
+
Amélioration de quizrecall (récupération du data)
|
|
19
|
+
|
|
1
20
|
2.1.0-beta.4(26 septembre 2025)
|
|
2
21
|
ajout du plugin ScrollTrigger à l’objet $gsap
|
|
22
|
+
|
|
3
23
|
|
|
4
24
|
2.1.0-beta.3(24 septembre 2025)
|
|
5
25
|
RUPTURE DE COMPATIBILITÉ : Ajout de Google Analytics (analytics_id dans app.vue) nouvelle dépendance : npm install vue-gtag@2.0.1
|
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
|
+
])
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fcad-core-dragon",
|
|
3
|
-
"version": "2.1.0
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./src/main.js",
|
|
@@ -10,14 +10,14 @@
|
|
|
10
10
|
"docs:build": "vitepress build documentation",
|
|
11
11
|
"docs:dev": "vitepress dev documentation",
|
|
12
12
|
"docs:preview": "vitepress preview documentation",
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"lintreport": "eslint src --ext .js,.vue --ignore-path .gitignore",
|
|
13
|
+
"lintfix": "eslint --fix src",
|
|
14
|
+
"lintreport": "eslint ./src",
|
|
16
15
|
"preview": "vite preview",
|
|
17
16
|
"reset": "rm -rf ./node_modules package-lock.json .cache dist && npm i && npm run watch",
|
|
18
17
|
"test:unit": "vitest",
|
|
19
18
|
"vue": "vue",
|
|
20
|
-
"watch": "nodemon -e js,vue,html,json -x yalc publish --push"
|
|
19
|
+
"watch": "nodemon -e js,vue,html,json -x yalc publish --push",
|
|
20
|
+
"format": "prettier --write src/"
|
|
21
21
|
},
|
|
22
22
|
"config": {
|
|
23
23
|
"projname": ""
|
|
@@ -37,20 +37,20 @@
|
|
|
37
37
|
"vue-safe-teleport": "^0.1.2"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
|
+
"@eslint/js": "^9.38.0",
|
|
40
41
|
"@vitejs/plugin-vue": "^6.0.1",
|
|
41
42
|
"@vue/eslint-config-prettier": "^10.2.0",
|
|
42
43
|
"@vue/test-utils": "^2.4.6",
|
|
43
|
-
"eslint": "^9.
|
|
44
|
+
"eslint": "^9.38.0",
|
|
44
45
|
"eslint-plugin-cypress": "^5.1.0",
|
|
45
46
|
"eslint-plugin-vue": "~10.3.0",
|
|
47
|
+
"globals": "^16.4.0",
|
|
46
48
|
"jsdom": "^25.0.1",
|
|
47
49
|
"nodemon": "^3.1.0",
|
|
48
|
-
"prettier": "3.6.2",
|
|
50
|
+
"prettier": "^3.6.2",
|
|
49
51
|
"sass-embedded": "^1.91.0",
|
|
50
|
-
"vite-plugin-vue-devtools": "^8.0.2",
|
|
51
52
|
"vitepress": "^1.6.3",
|
|
52
53
|
"vitest": "^3.2.4",
|
|
53
|
-
"vue": "^3.5.18",
|
|
54
54
|
"vue-router": "^4.4.5"
|
|
55
55
|
},
|
|
56
56
|
"engines": {
|
package/src/$locales/en.json
CHANGED
|
@@ -98,10 +98,10 @@
|
|
|
98
98
|
"activity_title": "My activities",
|
|
99
99
|
"activity_progress": "Progress status:",
|
|
100
100
|
"carousel": "Carousel",
|
|
101
|
-
"conclusion": "Conclusion",
|
|
101
|
+
"conclusion": "Conclusion to the Lesson",
|
|
102
102
|
"complete": "Completed",
|
|
103
103
|
"error": "error",
|
|
104
|
-
"introduction": "Introduction",
|
|
104
|
+
"introduction": "Introduction to the Lesson",
|
|
105
105
|
"lesson": "Lesson",
|
|
106
106
|
"quiz": "Words to complete the sentence",
|
|
107
107
|
"place_holder": {
|
|
@@ -154,4 +154,4 @@
|
|
|
154
154
|
"seek_slider": "Seek slider",
|
|
155
155
|
"range_expression": "at %x of %y."
|
|
156
156
|
}
|
|
157
|
-
}
|
|
157
|
+
}
|
package/src/$locales/fr.json
CHANGED
|
@@ -61,10 +61,10 @@
|
|
|
61
61
|
"activity_title": "Mes activités",
|
|
62
62
|
"activity_progress": "État d’avancement :",
|
|
63
63
|
"carousel": "Carrousel",
|
|
64
|
-
"conclusion": "Conclusion",
|
|
64
|
+
"conclusion": "Conclusion de la leçon",
|
|
65
65
|
"complete": "Terminé",
|
|
66
66
|
"error": "erreur",
|
|
67
|
-
"introduction": "Introduction",
|
|
67
|
+
"introduction": "Introduction de la leçon",
|
|
68
68
|
"lesson": "Leçon",
|
|
69
69
|
"quiz": "Mot complétant la phrase",
|
|
70
70
|
"place_holder": {
|
|
@@ -117,4 +117,4 @@
|
|
|
117
117
|
"seek_slider": "Barre de lecture",
|
|
118
118
|
"range_expression": "à %x sur %y."
|
|
119
119
|
}
|
|
120
|
-
}
|
|
120
|
+
}
|
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
{
|
|
2
|
-
"message_1": {
|
|
3
|
-
"type": "popup-avert",
|
|
4
|
-
"value": {
|
|
5
|
-
"title": "Bienvenue dans la visite guidée du FCAD !",
|
|
6
|
-
"hypertext_1": "<p>Le bouton Confirmer vous fera passer à la prochaine étape de la visite.</p><p>Vous pouvez y mettre fin en tout temps avec le bouton Annuler.</p>"
|
|
7
|
-
}
|
|
8
|
-
},
|
|
9
|
-
"message_2": {
|
|
10
|
-
"type": "tooltip",
|
|
11
|
-
"value": {
|
|
12
|
-
"target": "activity_progress",
|
|
13
|
-
"title": "Navigation secondaire",
|
|
14
|
-
"content": "<p>Les flèches permettent de passer à la page précédente ou suivante de l'activité.</p><p>Les rectangles représentent une section de l'activité.</p>"
|
|
15
|
-
}
|
|
16
|
-
},
|
|
17
|
-
"message_3": {
|
|
18
|
-
"type": "tooltip",
|
|
19
|
-
"value": {
|
|
20
|
-
"target": "btn_back_summary",
|
|
21
|
-
"title": "Navigation secondaire",
|
|
22
|
-
"content": "<p>Ce bouton permet de retourner au sommaire de l'activité en tout temps.</p>"
|
|
23
|
-
}
|
|
24
|
-
},
|
|
25
|
-
"message_4": {
|
|
26
|
-
"type": "tooltip",
|
|
27
|
-
"value": {
|
|
28
|
-
"target": "primary_activity",
|
|
29
|
-
"title": "Navigation principale",
|
|
30
|
-
"content": "<p>La navigation principale permet de valider ses réponses de quiz et de passer à la page suivante.</p>"
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
"message_5": {
|
|
34
|
-
"type": "popup-avert",
|
|
35
|
-
"value": {
|
|
36
|
-
"title": "Visite guidée",
|
|
37
|
-
"hypertext_1": "<p>Message pour la barre de lecture.</p>"
|
|
38
|
-
}
|
|
39
|
-
},
|
|
40
|
-
"message_6": {
|
|
41
|
-
"type": "popup-avert",
|
|
42
|
-
"value": {
|
|
43
|
-
"title": "Visite guidée",
|
|
44
|
-
"hypertext_1": "<p>Message pour les Paramètres.</p>"
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"message_1": {
|
|
3
|
+
"type": "popup-avert",
|
|
4
|
+
"value": {
|
|
5
|
+
"title": "Bienvenue dans la visite guidée du FCAD !",
|
|
6
|
+
"hypertext_1": "<p>Le bouton Confirmer vous fera passer à la prochaine étape de la visite.</p><p>Vous pouvez y mettre fin en tout temps avec le bouton Annuler.</p>"
|
|
7
|
+
}
|
|
8
|
+
},
|
|
9
|
+
"message_2": {
|
|
10
|
+
"type": "tooltip",
|
|
11
|
+
"value": {
|
|
12
|
+
"target": "activity_progress",
|
|
13
|
+
"title": "Navigation secondaire",
|
|
14
|
+
"content": "<p>Les flèches permettent de passer à la page précédente ou suivante de l'activité.</p><p>Les rectangles représentent une section de l'activité.</p>"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"message_3": {
|
|
18
|
+
"type": "tooltip",
|
|
19
|
+
"value": {
|
|
20
|
+
"target": "btn_back_summary",
|
|
21
|
+
"title": "Navigation secondaire",
|
|
22
|
+
"content": "<p>Ce bouton permet de retourner au sommaire de l'activité en tout temps.</p>"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"message_4": {
|
|
26
|
+
"type": "tooltip",
|
|
27
|
+
"value": {
|
|
28
|
+
"target": "primary_activity",
|
|
29
|
+
"title": "Navigation principale",
|
|
30
|
+
"content": "<p>La navigation principale permet de valider ses réponses de quiz et de passer à la page suivante.</p>"
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"message_5": {
|
|
34
|
+
"type": "popup-avert",
|
|
35
|
+
"value": {
|
|
36
|
+
"title": "Visite guidée",
|
|
37
|
+
"hypertext_1": "<p>Message pour la barre de lecture.</p>"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"message_6": {
|
|
41
|
+
"type": "popup-avert",
|
|
42
|
+
"value": {
|
|
43
|
+
"title": "Visite guidée",
|
|
44
|
+
"hypertext_1": "<p>Message pour les Paramètres.</p>"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
<div v-if="appDebugMode" class="timer">
|
|
40
40
|
<!-- <div class="timer"> -->
|
|
41
41
|
<div>Act: {{ appTimer.ISOTimeParser(activityDuration) }}</div>
|
|
42
|
-
<span> 
|
|
42
|
+
<span> | </span>
|
|
43
43
|
<div>Les: {{ appTimer.ISOTimeParser(lessonDuration) }}</div>
|
|
44
44
|
</div>
|
|
45
45
|
<app-icons-next :extra-icons="userExtraIcons" />
|
|
@@ -70,7 +70,7 @@ import { Timer } from '../composables/useTimer.js'
|
|
|
70
70
|
import { IdleDetector } from '../composables/useIdleDetector.js'
|
|
71
71
|
import { validateAppContent } from '../shared/validators'
|
|
72
72
|
import { version as fcadVersion } from '../../package.json'
|
|
73
|
-
import { computed,
|
|
73
|
+
import { computed, reactive } from 'vue'
|
|
74
74
|
import mobileDetect from 'mobile-detect'
|
|
75
75
|
|
|
76
76
|
export default {
|
|
@@ -193,10 +193,9 @@ export default {
|
|
|
193
193
|
}
|
|
194
194
|
},
|
|
195
195
|
'store.$state.userDataLoaded': {
|
|
196
|
-
handler() {
|
|
197
|
-
!this.
|
|
198
|
-
|
|
199
|
-
: this.updateTracker('appBase', 'ready')
|
|
196
|
+
handler(newValue) {
|
|
197
|
+
if (!newValue) return this.updateTracker('appBase', 'loading')
|
|
198
|
+
this.updateTracker('appBase', 'ready')
|
|
200
199
|
},
|
|
201
200
|
immediate: true
|
|
202
201
|
},
|