fcad-core-dragon 2.1.1 → 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 +867 -866
  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 -1
  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 -17
  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,312 +1,312 @@
1
- import AppCompViewDisplay from '../components/AppCompViewDisplay.vue'
2
- import { fileAssets } from '../shared/generalfuncs'
3
- //import ModuleView from '@/views/ModuleView.vue' // Uncomment for Production
4
- // import SummaryView from '@/views/SummaryView.vue' // Uncomment for Production
5
-
6
- //import ModuleView from '../externalComps/ModuleView.vue' //Only for unit-Testing
7
- //import SummaryView from '../externalComps/SummaryView.vue' //Only for unit-Testing
8
-
9
- /**
10
- * The router Module defines the routes of the App by:
11
- * loading the required files for module and activities pages,
12
- * dynamically creating the navigation route of module base on the file in VIEWS folder
13
- * dynamically creating the navigation routes of activities and branchings base on the files contained in the MODULE
14
- * Creating Redirection routes for navigation error
15
- * Adding the pages for the module in the STORE
16
- */
17
-
18
- const defaultRoutes = [] // routes of the app
19
- let errorType = null
20
- let viewRoute = null // holder for views routes
21
- let mappedFiles = null // routes definitions
22
-
23
- // Creating 1st route: redirection for none existing route to home(Module)
24
- defaultRoutes.push({
25
- path: '/:pathMatch(.*)*',
26
- redirect: {
27
- name: '404'
28
- }
29
- })
30
-
31
- /**
32
- * 2 - Creating the 2nd route: The App module route
33
- */
34
- // Load all the files in the VIEWS folder
35
-
36
- const defaultRoute = {
37
- path: '/',
38
- component: AppCompViewDisplay,
39
- children: [],
40
- meta: {}
41
- }
42
-
43
- if (fileAssets.getViews().length > 0) {
44
- let hasModule = false
45
- let hasSummary = false
46
- let fileRef = null
47
- let splitted = null
48
- let fileName = null
49
- let fileContent = null
50
-
51
- for (let view of fileAssets.getViews()) {
52
- fileRef = view.name.replace(/(\.\/)/g, '')
53
- splitted = fileRef.split('/')
54
- fileName = splitted[splitted.length - 1].replace(/(\.vue)/g, '')
55
- fileContent = view.content
56
-
57
- // Create route for the views
58
- viewRoute = {
59
- name: fileName.toLowerCase(),
60
-
61
- meta: {}
62
- }
63
-
64
- if (fileName.toLowerCase() === 'moduleview' && fileContent.data) {
65
- viewRoute.path = ''
66
- viewRoute.name = 'module'
67
- viewRoute.component = () => import(`@/views/ModuleView.vue`)
68
- viewRoute.children = []
69
- viewRoute.meta.children = []
70
- hasModule = true
71
- }
72
-
73
- if (fileName.toLowerCase() == 'summaryview' && fileContent.data) {
74
- viewRoute.path = '/menu'
75
- viewRoute.name = 'menu'
76
- viewRoute.component = () => import(`@/views/SummaryView.vue`)
77
- viewRoute.meta.type = 'menu'
78
- viewRoute.meta.id = 'pg_menu'
79
- hasSummary = true
80
- }
81
-
82
- defaultRoute.children.push(viewRoute)
83
- }
84
-
85
- // Create activities routes for the ModuleView
86
- if (hasModule) {
87
- const moduleRoute = defaultRoute.children.find((r) => r.name == 'module') //Get ModuleView route
88
- //================== Routes For Activities ================//
89
- // Load files in module folder
90
- const _allFiles = fileAssets.getActivities()
91
-
92
- mappedFiles = fileAssets.buildMapTree(_allFiles)
93
- let abstractRouteForActivity = {}
94
- if (!mappedFiles.size) errorType = 'errorPage'
95
-
96
- //There is a file in the module folder
97
- /**
98
- * Define a route for each Activity and its pages
99
- * Set all nested routes in Activities
100
- * Set the activies routes as children of module route
101
- */
102
- let activityCount = 0
103
-
104
- const buildRouteWithNested = ($arr, $folderName, ctx = '') => {
105
- let bCounter = 0 //branch counter
106
-
107
- let mainRoute = {}
108
- for (const [key, value] of $arr) {
109
- let pgIDtoNum = parseInt(key.slice(1))
110
- let firstEl = $arr.entries().next().value
111
-
112
- if (value.constructor === Map)
113
- buildRouteWithNested(value, $folderName, ctx)
114
-
115
- if (key == firstEl[0]) {
116
- //Define the main route according to 1st page id
117
- mainRoute = (() => {
118
- //1st Page is branching
119
-
120
- if (key == 'P01')
121
- return {
122
- path: `page-1`,
123
- name: `${ctx.replace('-', '_')}`,
124
- component: () => import(`@/${firstEl[1].ref}.vue`),
125
- children: [],
126
- meta: {
127
- id: firstEl[0],
128
- type: 'branching',
129
- activity_ref: $folderName, // Axx
130
- children: []
131
- }
132
- }
133
-
134
- return {
135
- path: `page-${pgIDtoNum}`,
136
- name: `${ctx.replace('-', '_')}.page_${pgIDtoNum}`,
137
- component: () => import(`@/${firstEl[1].ref}.vue`),
138
- children: [],
139
- meta: {
140
- id: firstEl[0],
141
- type: 'branching',
142
- activity_ref: $folderName, // Axx
143
- parent: {
144
- _ref: 'P01',
145
- _path: ctx, // activite-xx
146
- _namedRoute: ctx.replace('-', '_') // activite_xx
147
- },
148
- children: []
149
- }
150
- }
151
- })()
152
- } else {
153
- bCounter += 1
154
- // build abstract route for branching
155
- let branchRoute = {
156
- path: `branche-${bCounter}`,
157
- name: `${mainRoute.name}.branche_${bCounter}`,
158
- component: () => import(`@/${value.ref}.vue`),
159
- meta: {
160
- id: key,
161
- type: 'branch_page',
162
- activity_ref: $folderName,
163
- _branchingRef: `${firstEl[0]}.branch_${bCounter}`,
164
- parent: {
165
- _ref: firstEl[0],
166
- _path: mainRoute.path,
167
- _namedRoute: mainRoute.name
168
- }
169
- }
170
- }
171
- mainRoute.children.push(branchRoute)
172
- mainRoute.meta.children.push({
173
- _ref: key,
174
- _path: branchRoute.path,
175
- _namedRoute: branchRoute.name
176
- })
177
- }
178
- }
179
-
180
- return mainRoute
181
- }
182
-
183
- for (const [$folderName, $pages] of mappedFiles) {
184
- let activityPageCount = 0 // page counter
185
- //build a abstract route for each folder/activity
186
- abstractRouteForActivity = {
187
- component: AppCompViewDisplay,
188
- meta: {
189
- id: $folderName,
190
- children: []
191
- },
192
- children: []
193
- }
194
- //Define the path for each folder
195
- if ($folderName === 'A00') {
196
- abstractRouteForActivity.path = 'introduction'
197
- } else if ($folderName === 'A99') {
198
- abstractRouteForActivity.path = 'conclusion'
199
- } else {
200
- activityCount++
201
- abstractRouteForActivity.path = `activite-${activityCount}`
202
- }
203
-
204
- //Build the Route for each page of the Activity
205
- for (const [$pageRef, $page] of $pages) {
206
- let activityRoute
207
- activityPageCount++
208
-
209
- if ($page.constructor === Object) {
210
- let firstPage = $pages.entries().next().value
211
- if ($pageRef == firstPage[0]) {
212
- activityRoute = {
213
- path: 'page-1',
214
- name: abstractRouteForActivity.path.replace('-', '_'), //activite_xx
215
- component: () => import(`@/${$page.ref}.vue`),
216
- meta: {
217
- id: `${$pageRef}`,
218
- activity_ref: $folderName,
219
- type: (() => {
220
- return abstractRouteForActivity.path.includes('activite')
221
- ? 'normal'
222
- : abstractRouteForActivity.path
223
- })(),
224
- parent: {
225
- _ref: `${$pageRef}`,
226
- _path: abstractRouteForActivity.path,
227
- _namedRoute: abstractRouteForActivity.path.replace('-', '_')
228
- }
229
- }
230
- }
231
- } else {
232
- activityRoute = {
233
- path: `page-${activityPageCount}`,
234
- name: (() => {
235
- let str = abstractRouteForActivity.path.replace('-', '_')
236
-
237
- if (activityPageCount > 1)
238
- str = `${str}.page_${activityPageCount}`
239
-
240
- return str
241
- })(),
242
- component: () => import(`@/${$page.ref}.vue`),
243
- meta: {
244
- id: $pageRef,
245
- activity_ref: $folderName,
246
- type: (() => {
247
- return abstractRouteForActivity.path.includes('activite')
248
- ? 'normal'
249
- : abstractRouteForActivity.path
250
- })(),
251
- parent: {
252
- _ref: `${$pageRef}`,
253
- _path: abstractRouteForActivity.path,
254
- _namedRoute: abstractRouteForActivity.path.replace('-', '_')
255
- }
256
- }
257
- }
258
- }
259
- }
260
- //Handling Branching Routes
261
- if ($page.constructor === Map) {
262
- const ctx = abstractRouteForActivity.path
263
- activityRoute = buildRouteWithNested($page, $folderName, ctx)
264
- }
265
- //add page route into activity children
266
- abstractRouteForActivity.children.push(activityRoute)
267
-
268
- //add page route reference into in activity meta
269
- abstractRouteForActivity.meta.children.push({
270
- _ref: activityRoute.meta.id,
271
- _path: activityRoute.path,
272
- _namedRoute: activityRoute.name
273
- })
274
- }
275
-
276
- moduleRoute.meta.children.push({
277
- _ref: $folderName,
278
- _path: abstractRouteForActivity.path,
279
- _namedRoute: abstractRouteForActivity.path.replace('-', '_')
280
- })
281
-
282
- moduleRoute.children.push(abstractRouteForActivity)
283
- }
284
- } else errorType = 'errorModule'
285
- if (!hasSummary) errorType = 'errorMenu'
286
- } else errorType = 'errorModule'
287
-
288
- if (!errorType) {
289
- defaultRoutes.push(defaultRoute)
290
- } else
291
- defaultRoutes.push({
292
- path: '/',
293
- component: () => import(`../components/AppBaseErrorDisplay.vue`),
294
- props: {
295
- errorGroup: 'application',
296
- errorType: errorType
297
- }
298
- })
299
-
300
- // Routes for errors : 404
301
- defaultRoutes.push({
302
- path: '/404',
303
- name: '404',
304
- component: () => import(`../components/AppBaseErrorDisplay.vue`),
305
- props: {
306
- errorGroup: 'application',
307
- errorType: '404'
308
- }
309
- })
310
-
311
- export default defaultRoutes
312
- export { mappedFiles }
1
+ import AppCompViewDisplay from '../components/AppCompViewDisplay.vue'
2
+ import { fileAssets } from '../shared/generalfuncs'
3
+ //import ModuleView from '@/views/ModuleView.vue' // Uncomment for Production
4
+ // import SummaryView from '@/views/SummaryView.vue' // Uncomment for Production
5
+
6
+ //import ModuleView from '../externalComps/ModuleView.vue' //Only for unit-Testing
7
+ //import SummaryView from '../externalComps/SummaryView.vue' //Only for unit-Testing
8
+
9
+ /**
10
+ * The router Module defines the routes of the App by:
11
+ * loading the required files for module and activities pages,
12
+ * dynamically creating the navigation route of module base on the file in VIEWS folder
13
+ * dynamically creating the navigation routes of activities and branchings base on the files contained in the MODULE
14
+ * Creating Redirection routes for navigation error
15
+ * Adding the pages for the module in the STORE
16
+ */
17
+
18
+ const defaultRoutes = [] // routes of the app
19
+ let errorType = null
20
+ let viewRoute = null // holder for views routes
21
+ let mappedFiles = null // routes definitions
22
+
23
+ // Creating 1st route: redirection for none existing route to home(Module)
24
+ defaultRoutes.push({
25
+ path: '/:pathMatch(.*)*',
26
+ redirect: {
27
+ name: '404'
28
+ }
29
+ })
30
+
31
+ /**
32
+ * 2 - Creating the 2nd route: The App module route
33
+ */
34
+ // Load all the files in the VIEWS folder
35
+
36
+ const defaultRoute = {
37
+ path: '/',
38
+ component: AppCompViewDisplay,
39
+ children: [],
40
+ meta: {}
41
+ }
42
+
43
+ if (fileAssets.getViews().length > 0) {
44
+ let hasModule = false
45
+ let hasSummary = false
46
+ let fileRef = null
47
+ let splitted = null
48
+ let fileName = null
49
+ let fileContent = null
50
+
51
+ for (let view of fileAssets.getViews()) {
52
+ fileRef = view.name.replace(/(\.\/)/g, '')
53
+ splitted = fileRef.split('/')
54
+ fileName = splitted[splitted.length - 1].replace(/(\.vue)/g, '')
55
+ fileContent = view.content
56
+
57
+ // Create route for the views
58
+ viewRoute = {
59
+ name: fileName.toLowerCase(),
60
+
61
+ meta: {}
62
+ }
63
+
64
+ if (fileName.toLowerCase() === 'moduleview' && fileContent.data) {
65
+ viewRoute.path = ''
66
+ viewRoute.name = 'module'
67
+ viewRoute.component = () => import(`@/views/ModuleView.vue`)
68
+ viewRoute.children = []
69
+ viewRoute.meta.children = []
70
+ hasModule = true
71
+ }
72
+
73
+ if (fileName.toLowerCase() == 'summaryview' && fileContent.data) {
74
+ viewRoute.path = '/menu'
75
+ viewRoute.name = 'menu'
76
+ viewRoute.component = () => import(`@/views/SummaryView.vue`)
77
+ viewRoute.meta.type = 'menu'
78
+ viewRoute.meta.id = 'pg_menu'
79
+ hasSummary = true
80
+ }
81
+
82
+ defaultRoute.children.push(viewRoute)
83
+ }
84
+
85
+ // Create activities routes for the ModuleView
86
+ if (hasModule) {
87
+ const moduleRoute = defaultRoute.children.find((r) => r.name == 'module') //Get ModuleView route
88
+ //================== Routes For Activities ================//
89
+ // Load files in module folder
90
+ const _allFiles = fileAssets.getActivities()
91
+
92
+ mappedFiles = fileAssets.buildMapTree(_allFiles)
93
+ let abstractRouteForActivity = {}
94
+ if (!mappedFiles.size) errorType = 'errorPage'
95
+
96
+ //There is a file in the module folder
97
+ /**
98
+ * Define a route for each Activity and its pages
99
+ * Set all nested routes in Activities
100
+ * Set the activies routes as children of module route
101
+ */
102
+ let activityCount = 0
103
+
104
+ const buildRouteWithNested = ($arr, $folderName, ctx = '') => {
105
+ let bCounter = 0 //branch counter
106
+
107
+ let mainRoute = {}
108
+ for (const [key, value] of $arr) {
109
+ let pgIDtoNum = parseInt(key.slice(1))
110
+ let firstEl = $arr.entries().next().value
111
+
112
+ if (value.constructor === Map)
113
+ buildRouteWithNested(value, $folderName, ctx)
114
+
115
+ if (key == firstEl[0]) {
116
+ //Define the main route according to 1st page id
117
+ mainRoute = (() => {
118
+ //1st Page is branching
119
+
120
+ if (key == 'P01')
121
+ return {
122
+ path: `page-1`,
123
+ name: `${ctx.replace('-', '_')}`,
124
+ component: () => import(`@/${firstEl[1].ref}.vue`),
125
+ children: [],
126
+ meta: {
127
+ id: firstEl[0],
128
+ type: 'branching',
129
+ activity_ref: $folderName, // Axx
130
+ children: []
131
+ }
132
+ }
133
+
134
+ return {
135
+ path: `page-${pgIDtoNum}`,
136
+ name: `${ctx.replace('-', '_')}.page_${pgIDtoNum}`,
137
+ component: () => import(`@/${firstEl[1].ref}.vue`),
138
+ children: [],
139
+ meta: {
140
+ id: firstEl[0],
141
+ type: 'branching',
142
+ activity_ref: $folderName, // Axx
143
+ parent: {
144
+ _ref: 'P01',
145
+ _path: ctx, // activite-xx
146
+ _namedRoute: ctx.replace('-', '_') // activite_xx
147
+ },
148
+ children: []
149
+ }
150
+ }
151
+ })()
152
+ } else {
153
+ bCounter += 1
154
+ // build abstract route for branching
155
+ let branchRoute = {
156
+ path: `branche-${bCounter}`,
157
+ name: `${mainRoute.name}.branche_${bCounter}`,
158
+ component: () => import(`@/${value.ref}.vue`),
159
+ meta: {
160
+ id: key,
161
+ type: 'branch_page',
162
+ activity_ref: $folderName,
163
+ _branchingRef: `${firstEl[0]}.branch_${bCounter}`,
164
+ parent: {
165
+ _ref: firstEl[0],
166
+ _path: mainRoute.path,
167
+ _namedRoute: mainRoute.name
168
+ }
169
+ }
170
+ }
171
+ mainRoute.children.push(branchRoute)
172
+ mainRoute.meta.children.push({
173
+ _ref: key,
174
+ _path: branchRoute.path,
175
+ _namedRoute: branchRoute.name
176
+ })
177
+ }
178
+ }
179
+
180
+ return mainRoute
181
+ }
182
+
183
+ for (const [$folderName, $pages] of mappedFiles) {
184
+ let activityPageCount = 0 // page counter
185
+ //build a abstract route for each folder/activity
186
+ abstractRouteForActivity = {
187
+ component: AppCompViewDisplay,
188
+ meta: {
189
+ id: $folderName,
190
+ children: []
191
+ },
192
+ children: []
193
+ }
194
+ //Define the path for each folder
195
+ if ($folderName === 'A00') {
196
+ abstractRouteForActivity.path = 'introduction'
197
+ } else if ($folderName === 'A99') {
198
+ abstractRouteForActivity.path = 'conclusion'
199
+ } else {
200
+ activityCount++
201
+ abstractRouteForActivity.path = `activite-${activityCount}`
202
+ }
203
+
204
+ //Build the Route for each page of the Activity
205
+ for (const [$pageRef, $page] of $pages) {
206
+ let activityRoute
207
+ activityPageCount++
208
+
209
+ if ($page.constructor === Object) {
210
+ let firstPage = $pages.entries().next().value
211
+ if ($pageRef == firstPage[0]) {
212
+ activityRoute = {
213
+ path: 'page-1',
214
+ name: abstractRouteForActivity.path.replace('-', '_'), //activite_xx
215
+ component: () => import(`@/${$page.ref}.vue`),
216
+ meta: {
217
+ id: `${$pageRef}`,
218
+ activity_ref: $folderName,
219
+ type: (() => {
220
+ return abstractRouteForActivity.path.includes('activite')
221
+ ? 'normal'
222
+ : abstractRouteForActivity.path
223
+ })(),
224
+ parent: {
225
+ _ref: `${$pageRef}`,
226
+ _path: abstractRouteForActivity.path,
227
+ _namedRoute: abstractRouteForActivity.path.replace('-', '_')
228
+ }
229
+ }
230
+ }
231
+ } else {
232
+ activityRoute = {
233
+ path: `page-${activityPageCount}`,
234
+ name: (() => {
235
+ let str = abstractRouteForActivity.path.replace('-', '_')
236
+
237
+ if (activityPageCount > 1)
238
+ str = `${str}.page_${activityPageCount}`
239
+
240
+ return str
241
+ })(),
242
+ component: () => import(`@/${$page.ref}.vue`),
243
+ meta: {
244
+ id: $pageRef,
245
+ activity_ref: $folderName,
246
+ type: (() => {
247
+ return abstractRouteForActivity.path.includes('activite')
248
+ ? 'normal'
249
+ : abstractRouteForActivity.path
250
+ })(),
251
+ parent: {
252
+ _ref: `${$pageRef}`,
253
+ _path: abstractRouteForActivity.path,
254
+ _namedRoute: abstractRouteForActivity.path.replace('-', '_')
255
+ }
256
+ }
257
+ }
258
+ }
259
+ }
260
+ //Handling Branching Routes
261
+ if ($page.constructor === Map) {
262
+ const ctx = abstractRouteForActivity.path
263
+ activityRoute = buildRouteWithNested($page, $folderName, ctx)
264
+ }
265
+ //add page route into activity children
266
+ abstractRouteForActivity.children.push(activityRoute)
267
+
268
+ //add page route reference into in activity meta
269
+ abstractRouteForActivity.meta.children.push({
270
+ _ref: activityRoute.meta.id,
271
+ _path: activityRoute.path,
272
+ _namedRoute: activityRoute.name
273
+ })
274
+ }
275
+
276
+ moduleRoute.meta.children.push({
277
+ _ref: $folderName,
278
+ _path: abstractRouteForActivity.path,
279
+ _namedRoute: abstractRouteForActivity.path.replace('-', '_')
280
+ })
281
+
282
+ moduleRoute.children.push(abstractRouteForActivity)
283
+ }
284
+ } else errorType = 'errorModule'
285
+ if (!hasSummary) errorType = 'errorMenu'
286
+ } else errorType = 'errorModule'
287
+
288
+ if (!errorType) {
289
+ defaultRoutes.push(defaultRoute)
290
+ } else
291
+ defaultRoutes.push({
292
+ path: '/',
293
+ component: () => import(`../components/AppBaseErrorDisplay.vue`),
294
+ props: {
295
+ errorGroup: 'application',
296
+ errorType: errorType
297
+ }
298
+ })
299
+
300
+ // Routes for errors : 404
301
+ defaultRoutes.push({
302
+ path: '/404',
303
+ name: '404',
304
+ component: () => import(`../components/AppBaseErrorDisplay.vue`),
305
+ props: {
306
+ errorGroup: 'application',
307
+ errorType: '404'
308
+ }
309
+ })
310
+
311
+ export default defaultRoutes
312
+ export { mappedFiles }