fcad-core-dragon 2.1.0 → 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/.editorconfig +7 -7
  2. package/.gitlab-ci.yml +124 -0
  3. package/.prettierrc +11 -11
  4. package/.vscode/extensions.json +8 -8
  5. package/.vscode/settings.json +46 -16
  6. package/CHANGELOG +520 -520
  7. package/README.md +57 -57
  8. package/documentation/.vitepress/config.js +114 -114
  9. package/documentation/api-examples.md +49 -49
  10. package/documentation/composants/app-base-button.md +58 -58
  11. package/documentation/composants/app-base-error-display.md +59 -59
  12. package/documentation/composants/app-base-popover.md +68 -68
  13. package/documentation/composants/app-comp-audio.md +75 -75
  14. package/documentation/composants/app-comp-branch-buttons.md +111 -111
  15. package/documentation/composants/app-comp-button-progress.md +53 -53
  16. package/documentation/composants/app-comp-carousel.md +53 -53
  17. package/documentation/composants/app-comp-container.md +53 -53
  18. package/documentation/composants/app-comp-input-checkbox-next.md +42 -42
  19. package/documentation/composants/app-comp-input-dropdown-next.md +34 -34
  20. package/documentation/composants/app-comp-input-radio-next.md +39 -39
  21. package/documentation/composants/app-comp-input-text-next.md +35 -35
  22. package/documentation/composants/app-comp-input-text-table-next.md +34 -34
  23. package/documentation/composants/app-comp-input-text-to-fill-dropdown-next.md +53 -53
  24. package/documentation/composants/app-comp-input-text-to-fill-next.md +31 -31
  25. package/documentation/composants/app-comp-jauge.md +31 -31
  26. package/documentation/composants/app-comp-menu-item.md +55 -55
  27. package/documentation/composants/app-comp-menu.md +29 -29
  28. package/documentation/composants/app-comp-navigation.md +41 -41
  29. package/documentation/composants/app-comp-note-call.md +53 -53
  30. package/documentation/composants/app-comp-note-credit.md +53 -53
  31. package/documentation/composants/app-comp-play-bar-next.md +53 -53
  32. package/documentation/composants/app-comp-pop-up-next.md +93 -93
  33. package/documentation/composants/app-comp-quiz-next.md +235 -235
  34. package/documentation/composants/app-comp-quiz-recall.md +53 -53
  35. package/documentation/composants/app-comp-svg-next.md +53 -53
  36. package/documentation/composants/app-comp-table-of-content.md +50 -50
  37. package/documentation/composants/app-comp-video-player.md +82 -82
  38. package/documentation/composants.md +46 -46
  39. package/documentation/composants_critiques/ModelPageComposant.md +53 -53
  40. package/documentation/composants_critiques/app-base-module.md +43 -43
  41. package/documentation/composants_critiques/app-base-page.md +48 -48
  42. package/documentation/composants_critiques/app-base.md +311 -311
  43. package/documentation/composants_critiques/main.md +15 -15
  44. package/documentation/demarrage.md +50 -50
  45. package/documentation/deploiement.md +57 -57
  46. package/documentation/index.md +33 -33
  47. package/documentation/markdown-examples.md +85 -85
  48. package/documentation/public/vite.svg +14 -14
  49. package/documentation/public/vuejs.svg +1 -1
  50. package/documentation/public/vuetify.svg +5 -5
  51. package/eslint.config.js +60 -60
  52. package/junit-report.xml +182 -0
  53. package/package.json +66 -59
  54. package/playwright/index.html +12 -0
  55. package/playwright/index.js +21 -0
  56. package/playwright-ct.config.js +95 -0
  57. package/src/$locales/en.json +157 -157
  58. package/src/$locales/fr.json +120 -120
  59. package/src/assets/data/onboardingMessages.json +47 -47
  60. package/src/components/AppBase.vue +1171 -1169
  61. package/src/components/AppBaseButton.vue +90 -95
  62. package/src/components/AppBaseErrorDisplay.vue +438 -438
  63. package/src/components/AppBaseFlipCard.vue +84 -84
  64. package/src/components/AppBaseModule.vue +1639 -1634
  65. package/src/components/AppBasePage.vue +3 -2
  66. package/src/components/AppBasePopover.vue +41 -41
  67. package/src/components/AppBaseSkeleton.vue +66 -66
  68. package/src/components/AppCompAudio.vue +261 -256
  69. package/src/components/AppCompBranchButtons.vue +508 -508
  70. package/src/components/AppCompButtonProgress.vue +137 -132
  71. package/src/components/AppCompCarousel.vue +342 -336
  72. package/src/components/AppCompContainer.vue +29 -29
  73. package/src/components/AppCompInputCheckBoxNx.vue +325 -323
  74. package/src/components/AppCompInputDropdownNx.vue +302 -299
  75. package/src/components/AppCompInputRadioNx.vue +287 -284
  76. package/src/components/AppCompInputTextNx.vue +156 -153
  77. package/src/components/AppCompInputTextTableNx.vue +205 -202
  78. package/src/components/AppCompInputTextToFillDropdownNx.vue +343 -340
  79. package/src/components/AppCompInputTextToFillNx.vue +316 -313
  80. package/src/components/AppCompJauge.vue +81 -81
  81. package/src/components/AppCompMenu.vue +6 -2
  82. package/src/components/AppCompMenuItem.vue +246 -240
  83. package/src/components/AppCompNavigation.vue +977 -972
  84. package/src/components/AppCompNoteCall.vue +167 -161
  85. package/src/components/AppCompNoteCredit.vue +496 -491
  86. package/src/components/AppCompPlayBarNext.vue +2290 -2288
  87. package/src/components/AppCompPopUpNext.vue +508 -504
  88. package/src/components/AppCompQuizNext.vue +515 -510
  89. package/src/components/AppCompQuizRecall.vue +355 -350
  90. package/src/components/AppCompSVGNext.vue +346 -346
  91. package/src/components/AppCompSettingsMenu.vue +177 -172
  92. package/src/components/AppCompTableOfContent.vue +433 -427
  93. package/src/components/AppCompVideoPlayer.vue +377 -377
  94. package/src/components/AppCompViewDisplay.vue +6 -6
  95. package/src/components/BaseModule.vue +55 -55
  96. package/src/composables/useIdleDetector.js +56 -56
  97. package/src/composables/useQuiz.js +89 -89
  98. package/src/composables/useTimer.js +172 -172
  99. package/src/directives/nvdaFix.js +53 -53
  100. package/src/externalComps/ModuleView.vue +22 -22
  101. package/src/externalComps/SummaryView.vue +91 -91
  102. package/src/main.js +493 -476
  103. package/src/module/stores/appStore.js +960 -947
  104. package/src/module/xapi/ADL.js +520 -520
  105. package/src/module/xapi/Crypto/Hasher.js +241 -241
  106. package/src/module/xapi/Crypto/WordArray.js +278 -278
  107. package/src/module/xapi/Crypto/algorithms/BufferedBlockAlgorithm.js +103 -103
  108. package/src/module/xapi/Crypto/algorithms/C_algo.js +315 -315
  109. package/src/module/xapi/Crypto/algorithms/HMAC.js +9 -9
  110. package/src/module/xapi/Crypto/algorithms/SHA1.js +9 -9
  111. package/src/module/xapi/Crypto/encoders/Base.js +105 -105
  112. package/src/module/xapi/Crypto/encoders/Base64.js +99 -99
  113. package/src/module/xapi/Crypto/encoders/Hex.js +61 -61
  114. package/src/module/xapi/Crypto/encoders/Latin1.js +61 -61
  115. package/src/module/xapi/Crypto/encoders/Utf8.js +45 -45
  116. package/src/module/xapi/Crypto/index.js +53 -53
  117. package/src/module/xapi/Statement/activity.js +47 -47
  118. package/src/module/xapi/Statement/agent.js +55 -55
  119. package/src/module/xapi/Statement/group.js +26 -26
  120. package/src/module/xapi/Statement/index.js +259 -259
  121. package/src/module/xapi/Statement/statement.js +253 -253
  122. package/src/module/xapi/Statement/statementRef.js +23 -23
  123. package/src/module/xapi/Statement/substatement.js +22 -22
  124. package/src/module/xapi/Statement/verb.js +36 -36
  125. package/src/module/xapi/activitytypes.js +17 -17
  126. package/src/module/xapi/launch.js +157 -157
  127. package/src/module/xapi/utils.js +167 -167
  128. package/src/module/xapi/verbs.js +294 -294
  129. package/src/module/xapi/wrapper.js +1895 -1895
  130. package/src/module/xapi/xapiStatement.js +444 -444
  131. package/src/plugins/analytics.js +34 -34
  132. package/src/plugins/bus.js +12 -8
  133. package/src/plugins/gsap.js +17 -15
  134. package/src/plugins/helper.js +355 -358
  135. package/src/plugins/i18n.js +27 -26
  136. package/src/plugins/idb.js +227 -227
  137. package/src/plugins/save.js +37 -37
  138. package/src/plugins/scorm.js +287 -287
  139. package/src/plugins/xapi.js +11 -11
  140. package/src/public/index.html +33 -33
  141. package/src/router/index.js +57 -57
  142. package/src/router/routes.js +312 -312
  143. package/src/shared/generalfuncs.js +344 -344
  144. package/src/shared/validators.js +1018 -1018
  145. package/tests/component/AppBaseButton.spec.js +53 -0
  146. package/tests/component/pinia.spec.js +24 -0
  147. package/{src/components/tests__ → tests/unit}/AppBaseButton.spec.js +53 -53
  148. package/tests/unit/AppCompInputCheckBoxNx.spec.js +59 -0
  149. package/tests/unit/AppCompInputDropdownNx.spec.js +51 -0
  150. package/tests/unit/AppCompInputRadioNx.spec.js +59 -0
  151. package/tests/unit/AppCompInputTextNx.spec.js +44 -0
  152. package/tests/unit/AppCompInputTextTableNx.spec.js +77 -0
  153. package/tests/unit/AppCompInputTextToFillDropdownNx.spec.js +60 -0
  154. package/tests/unit/AppCompInputTextToFillNx.spec.js +45 -0
  155. package/tests/unit/AppCompQuizNext.spec.js +114 -0
  156. package/tests/unit/AppCompVideoPlayer.spec.js +177 -0
  157. package/{src/components/tests__ → tests/unit}/useTimer.spec.js +91 -91
  158. package/vitest.config.js +28 -19
  159. package/vitest.setup.js +28 -0
  160. package/src/components/AppBaseButton.test.js +0 -21
@@ -1,6 +1,6 @@
1
- <template>
2
- <router-view />
3
- </template>
4
- <script>
5
- export default {}
6
- </script>
1
+ <template>
2
+ <router-view />
3
+ </template>
4
+ <script>
5
+ export default {}
6
+ </script>
@@ -1,55 +1,55 @@
1
- <!--
2
- *@ Description: Root component used to extends the AppBase Module
3
- *@ What it does: Entry point for the data of appBaseModule. manage progress, indexeDB connection.
4
- *@Note :Must be used
5
- -->
6
- <template>
7
- <div v-if="mData" class="module-wrapper">
8
- <slot name="mTitle" />
9
- <slot>Module</slot>
10
- </div>
11
- </template>
12
-
13
- <script>
14
- export default {
15
- props: {
16
- mData: {
17
- type: Object,
18
- required: true
19
- }
20
- },
21
-
22
- data() {
23
- return {
24
- data: null
25
- // over: false
26
- // back: null
27
- }
28
- },
29
-
30
- created() {},
31
- methods: {}
32
- }
33
- </script>
34
-
35
- <style lang="scss" scoped>
36
- .module-wrapper {
37
- width: 100%;
38
- height: 100%;
39
- min-height: 100vh;
40
- padding: 0 145px;
41
- }
42
- .overlay-close-widget {
43
- position: absolute;
44
- top: 0;
45
- left: 0;
46
- width: 100%;
47
- height: 100%;
48
- z-index: 2;
49
- display: none;
50
-
51
- &.blockOverlay {
52
- display: block;
53
- }
54
- }
55
- </style>
1
+ <!--
2
+ *@ Description: Root component used to extends the AppBase Module
3
+ *@ What it does: Entry point for the data of appBaseModule. manage progress, indexeDB connection.
4
+ *@Note :Must be used
5
+ -->
6
+ <template>
7
+ <div v-if="mData" class="module-wrapper">
8
+ <slot name="mTitle" />
9
+ <slot>Module</slot>
10
+ </div>
11
+ </template>
12
+
13
+ <script>
14
+ export default {
15
+ props: {
16
+ mData: {
17
+ type: Object,
18
+ required: true
19
+ }
20
+ },
21
+
22
+ data() {
23
+ return {
24
+ data: null
25
+ // over: false
26
+ // back: null
27
+ }
28
+ },
29
+
30
+ created() {},
31
+ methods: {}
32
+ }
33
+ </script>
34
+
35
+ <style lang="scss" scoped>
36
+ .module-wrapper {
37
+ width: 100%;
38
+ height: 100%;
39
+ min-height: 100vh;
40
+ padding: 0 145px;
41
+ }
42
+ .overlay-close-widget {
43
+ position: absolute;
44
+ top: 0;
45
+ left: 0;
46
+ width: 100%;
47
+ height: 100%;
48
+ z-index: 2;
49
+ display: none;
50
+
51
+ &.blockOverlay {
52
+ display: block;
53
+ }
54
+ }
55
+ </style>
@@ -1,56 +1,56 @@
1
- export class IdleDetector {
2
- constructor() {
3
- this.idleCounter = 0
4
- this.idleTimeoutID = null
5
- this.detectorState = 'stopped' // can be 'pause' or 'stop'
6
- this.idleTimer = null
7
- }
8
-
9
- /**
10
- * @description Start the idle timer -
11
- * creates an interval to track idle time and a timeout to trigger actions
12
- * after a specified period of inactivity.
13
- * @param {Function} action - a callback function to execute when the idle timeout is reached.
14
- * @param {Number} timeout - the duration in milliseconds before the action is triggered.
15
- */
16
- startIdleTimer(action = null, timeout = 0) {
17
- this.idleTimer = setInterval(() => {
18
- this.idleCounter += 1
19
- }, 1000)
20
- this.detectorState = 'started'
21
-
22
- if (!action || typeof action !== 'function') return
23
-
24
- this.idleTimeoutID = setTimeout(() => action(), timeout)
25
- }
26
-
27
- /**
28
- * @description Reset the idle timer -
29
- * clears the current idle timer and timeout,
30
- */
31
- stopIdleTimer() {
32
- this.idleCounter = 0
33
- clearInterval(this.idleTimer)
34
- clearTimeout(this.idleTimeoutID)
35
- this.detectorState = 'stopped'
36
- }
37
-
38
- /**
39
- * @description Get the current state of the timer
40
- *
41
- * @returns {String} - timer state, can be 'started' or 'stopped'
42
- */
43
- getDectorState() {
44
- return this.detectorState
45
- }
46
-
47
- /**
48
- * @description Get the elapsed time for the idle timer.
49
- * This is the time the idle detector has been running since it was started.
50
- *
51
- * @returns {Number} - the time count in seconds
52
- */
53
- getElapsedTime() {
54
- return this.idleCounter
55
- }
56
- }
1
+ export class IdleDetector {
2
+ constructor() {
3
+ this.idleCounter = 0
4
+ this.idleTimeoutID = null
5
+ this.detectorState = 'stopped' // can be 'pause' or 'stop'
6
+ this.idleTimer = null
7
+ }
8
+
9
+ /**
10
+ * @description Start the idle timer -
11
+ * creates an interval to track idle time and a timeout to trigger actions
12
+ * after a specified period of inactivity.
13
+ * @param {Function} action - a callback function to execute when the idle timeout is reached.
14
+ * @param {Number} timeout - the duration in milliseconds before the action is triggered.
15
+ */
16
+ startIdleTimer(action = null, timeout = 0) {
17
+ this.idleTimer = setInterval(() => {
18
+ this.idleCounter += 1
19
+ }, 1000)
20
+ this.detectorState = 'started'
21
+
22
+ if (!action || typeof action !== 'function') return
23
+
24
+ this.idleTimeoutID = setTimeout(() => action(), timeout)
25
+ }
26
+
27
+ /**
28
+ * @description Reset the idle timer -
29
+ * clears the current idle timer and timeout,
30
+ */
31
+ stopIdleTimer() {
32
+ this.idleCounter = 0
33
+ clearInterval(this.idleTimer)
34
+ clearTimeout(this.idleTimeoutID)
35
+ this.detectorState = 'stopped'
36
+ }
37
+
38
+ /**
39
+ * @description Get the current state of the timer
40
+ *
41
+ * @returns {String} - timer state, can be 'started' or 'stopped'
42
+ */
43
+ getDectorState() {
44
+ return this.detectorState
45
+ }
46
+
47
+ /**
48
+ * @description Get the elapsed time for the idle timer.
49
+ * This is the time the idle detector has been running since it was started.
50
+ *
51
+ * @returns {Number} - the time count in seconds
52
+ */
53
+ getElapsedTime() {
54
+ return this.idleCounter
55
+ }
56
+ }
@@ -1,89 +1,89 @@
1
- //This composable should Extend the functionality of a the quiz
2
-
3
- import i18n from '@/i18n' //Must import directly the local from project app because vue-18in does not work in legacy mode with composable
4
-
5
- export function useQuiz() {
6
- const { t } = i18n.global
7
- /**
8
- * @description shuffles an array used to randomized the option order if shuffleAnswers is true
9
- * @param {Array} array
10
- * @returns {Array}
11
- */
12
- function shuffleArray(array) {
13
- let newArray = []
14
- let newArray2 = []
15
-
16
- for (let i = 0; i < array.length; i++) {
17
- const element = array[i]
18
- newArray.push(element)
19
- }
20
- while (newArray.length > 0) {
21
- let pos = Math.floor(newArray.length * Math.random())
22
- newArray2.push(newArray[pos])
23
- newArray.splice(pos, 1)
24
- }
25
- return newArray2
26
- }
27
- /**
28
- * @description add retro style to the quiz
29
- * @param {Object} solution - the solution of the quiz
30
- * @param {Array} reponse - the user response
31
- * @param {Number} length - the length of the input value
32
- * @returns {Object|Boolean}
33
- */
34
- function addRetroStyle(solution, reponse, length) {
35
- let classRetro = []
36
- let mesA11y = []
37
- if (solution != null) {
38
- reponse.forEach((el) => {
39
- if (el.correct == true) {
40
- classRetro.push('goodAnswer')
41
- mesA11y.push(`${t('quizState.goodAnswer')}`)
42
- } else {
43
- classRetro.push('badAnswer')
44
- mesA11y.push(`${t('quizState.badAnswer')}`)
45
- }
46
- })
47
- } else {
48
- classRetro.push('NeutralAnswer')
49
- mesA11y.push(`${t('quizState.neutralAnswer')}`)
50
- }
51
-
52
- return { classRetro, mesA11y }
53
- }
54
-
55
- /**
56
- * @description reset the list of validation style of a quiz
57
- * @param {Array} aList - a list of array to reset
58
- * @emits hide-retro - event message to hide the retro Message
59
- * $el- the target quiz,
60
- * false|true of th event
61
- * */
62
- function resetRetroStyle(aList) {
63
- aList.forEach((a) => {
64
- if (a && a.length > 0) a.splice(0)
65
- })
66
- this.$bus.$emit('hide-retro', this.$el, false)
67
- }
68
-
69
- function retroType(solution, reponse) {
70
- if (solution != null) {
71
- if (reponse.length == solution.length) {
72
- let Ag = (i) => i.correct
73
- if (reponse.every(Ag)) return 'retro_positive'
74
- else return 'retro_negative'
75
- } else {
76
- return 'retro_negative'
77
- }
78
- } else {
79
- return `retro_neutre`
80
- }
81
- }
82
-
83
- return {
84
- addRetroStyle,
85
- resetRetroStyle,
86
- retroType,
87
- shuffleArray
88
- }
89
- }
1
+ //This composable should Extend the functionality of a the quiz
2
+
3
+ import { useI18n } from 'vue-i18n' //Must import directly the local from project app because vue-18in does not work in legacy mode with composable
4
+
5
+ export function useQuiz() {
6
+ const { t } = useI18n()
7
+ /**
8
+ * @description shuffles an array used to randomized the option order if shuffleAnswers is true
9
+ * @param {Array} array
10
+ * @returns {Array}
11
+ */
12
+ function shuffleArray(array) {
13
+ let newArray = []
14
+ let newArray2 = []
15
+
16
+ for (let i = 0; i < array.length; i++) {
17
+ const element = array[i]
18
+ newArray.push(element)
19
+ }
20
+ while (newArray.length > 0) {
21
+ let pos = Math.floor(newArray.length * Math.random())
22
+ newArray2.push(newArray[pos])
23
+ newArray.splice(pos, 1)
24
+ }
25
+ return newArray2
26
+ }
27
+ /**
28
+ * @description add retro style to the quiz
29
+ * @param {Object} solution - the solution of the quiz
30
+ * @param {Array} reponse - the user response
31
+ * @param {Number} length - the length of the input value
32
+ * @returns {Object|Boolean}
33
+ */
34
+ function addRetroStyle(solution, reponse, length) {
35
+ let classRetro = []
36
+ let mesA11y = []
37
+ if (solution != null) {
38
+ reponse.forEach((el) => {
39
+ if (el.correct == true) {
40
+ classRetro.push('goodAnswer')
41
+ mesA11y.push(`${t('quizState.goodAnswer')}`)
42
+ } else {
43
+ classRetro.push('badAnswer')
44
+ mesA11y.push(`${t('quizState.badAnswer')}`)
45
+ }
46
+ })
47
+ } else {
48
+ classRetro.push('NeutralAnswer')
49
+ mesA11y.push(`${t('quizState.neutralAnswer')}`)
50
+ }
51
+
52
+ return { classRetro, mesA11y }
53
+ }
54
+
55
+ /**
56
+ * @description reset the list of validation style of a quiz
57
+ * @param {Array} aList - a list of array to reset
58
+ * @emits hide-retro - event message to hide the retro Message
59
+ * $el- the target quiz,
60
+ * false|true of th event
61
+ * */
62
+ function resetRetroStyle(aList) {
63
+ aList.forEach((a) => {
64
+ if (a && a.length > 0) a.splice(0)
65
+ })
66
+ this.$bus.$emit('hide-retro', this.$el, false)
67
+ }
68
+
69
+ function retroType(solution, reponse) {
70
+ if (solution != null) {
71
+ if (reponse.length == solution.length) {
72
+ let Ag = (i) => i.correct
73
+ if (reponse.every(Ag)) return 'retro_positive'
74
+ else return 'retro_negative'
75
+ } else {
76
+ return 'retro_negative'
77
+ }
78
+ } else {
79
+ return `retro_neutre`
80
+ }
81
+ }
82
+
83
+ return {
84
+ addRetroStyle,
85
+ resetRetroStyle,
86
+ retroType,
87
+ shuffleArray
88
+ }
89
+ }