fcad-core-dragon 2.0.0-beta.1 → 2.0.0-beta.3

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 (118) hide show
  1. package/.editorconfig +33 -33
  2. package/.eslintignore +29 -29
  3. package/{.eslintrc.js → .eslintrc.cjs} +81 -86
  4. package/CHANGELOG +364 -364
  5. package/README.md +71 -71
  6. package/bk.scss +117 -0
  7. package/package.json +61 -63
  8. package/src/$locales/en.json +143 -179
  9. package/src/$locales/fr.json +105 -181
  10. package/src/assets/data/onboardingMessages.json +47 -47
  11. package/src/components/AppBase.vue +1054 -614
  12. package/src/components/AppBaseButton.vue +87 -63
  13. package/src/components/AppBaseErrorDisplay.vue +438 -420
  14. package/src/components/AppBaseFlipCard.vue +84 -83
  15. package/src/components/AppBaseModule.vue +1673 -1842
  16. package/src/components/AppBasePage.vue +779 -312
  17. package/src/components/AppBasePopover.vue +41 -0
  18. package/src/components/AppCompAudio.vue +234 -0
  19. package/src/components/AppCompBranchButtons.vue +552 -582
  20. package/src/components/AppCompButtonProgress.vue +126 -147
  21. package/src/components/AppCompCarousel.vue +298 -192
  22. package/src/components/AppCompInputCheckBoxNext.vue +195 -0
  23. package/src/components/AppCompInputDropdownNext.vue +159 -0
  24. package/src/components/AppCompInputRadioNext.vue +152 -0
  25. package/src/components/{AppCompInputTextBox.vue → AppCompInputTextNext.vue} +106 -91
  26. package/src/components/AppCompInputTextTableNext.vue +141 -0
  27. package/src/components/AppCompInputTextToFillDropdownNext.vue +230 -0
  28. package/src/components/{AppCompInputTextToFillText.vue → AppCompInputTextToFillNext.vue} +171 -164
  29. package/src/components/AppCompJauge.vue +74 -55
  30. package/src/components/AppCompMenu.vue +413 -209
  31. package/src/components/AppCompMenuItem.vue +228 -174
  32. package/src/components/AppCompNavigation.vue +960 -949
  33. package/src/components/AppCompNoteCall.vue +133 -126
  34. package/src/components/AppCompNoteCredit.vue +292 -164
  35. package/src/components/AppCompPlayBar.vue +1218 -1319
  36. package/src/components/AppCompPlayBarNext.vue +2052 -0
  37. package/src/components/AppCompPlayBarProgress.vue +82 -0
  38. package/src/components/AppCompPopUpNext.vue +503 -0
  39. package/src/components/{AppCompQuiz.vue → AppCompQuizNext.vue} +2904 -2989
  40. package/src/components/AppCompQuizRecall.vue +276 -250
  41. package/src/components/AppCompSVGNext.vue +347 -0
  42. package/src/components/AppCompSettingsMenu.vue +172 -171
  43. package/src/components/AppCompTableOfContent.vue +387 -264
  44. package/src/components/AppCompTranscript.vue +24 -19
  45. package/src/components/AppCompVideoPlayer.vue +368 -336
  46. package/src/components/AppCompViewDisplay.vue +6 -6
  47. package/src/components/BaseModule.vue +72 -67
  48. package/src/composables/useQuiz.js +206 -0
  49. package/src/externalComps/ModuleView.vue +22 -0
  50. package/src/externalComps/SummaryView.vue +91 -0
  51. package/src/main.js +272 -227
  52. package/src/mixins/$mediaMixins.js +819 -0
  53. package/src/mixins/timerMixin.js +155 -156
  54. package/src/module/stores/appStore.js +893 -0
  55. package/src/module/xapi/ADL.js +376 -339
  56. package/src/module/xapi/Crypto/Hasher.js +241 -241
  57. package/src/module/xapi/Crypto/WordArray.js +278 -278
  58. package/src/module/xapi/Crypto/algorithms/BufferedBlockAlgorithm.js +103 -103
  59. package/src/module/xapi/Crypto/algorithms/C_algo.js +315 -319
  60. package/src/module/xapi/Crypto/algorithms/HMAC.js +9 -9
  61. package/src/module/xapi/Crypto/algorithms/SHA1.js +9 -9
  62. package/src/module/xapi/Crypto/encoders/Base.js +105 -105
  63. package/src/module/xapi/Crypto/encoders/Base64.js +99 -99
  64. package/src/module/xapi/Crypto/encoders/Hex.js +61 -61
  65. package/src/module/xapi/Crypto/encoders/Latin1.js +61 -61
  66. package/src/module/xapi/Crypto/encoders/Utf8.js +45 -45
  67. package/src/module/xapi/Crypto/index.js +53 -53
  68. package/src/module/xapi/Statement/activity.js +47 -47
  69. package/src/module/xapi/Statement/agent.js +55 -55
  70. package/src/module/xapi/Statement/group.js +26 -26
  71. package/src/module/xapi/Statement/index.js +259 -259
  72. package/src/module/xapi/Statement/statement.js +253 -253
  73. package/src/module/xapi/Statement/statementRef.js +23 -23
  74. package/src/module/xapi/Statement/substatement.js +22 -22
  75. package/src/module/xapi/Statement/verb.js +36 -36
  76. package/src/module/xapi/activitytypes.js +17 -17
  77. package/src/module/xapi/launch.js +157 -157
  78. package/src/module/xapi/utils.js +167 -167
  79. package/src/module/xapi/verbs.js +294 -294
  80. package/src/module/xapi/wrapper.js +1963 -1890
  81. package/src/module/xapi/xapiStatement.js +444 -444
  82. package/src/plugins/bus.js +8 -3
  83. package/src/plugins/gsap.js +14 -17
  84. package/src/plugins/helper.js +308 -295
  85. package/src/plugins/i18n.js +44 -31
  86. package/src/plugins/idb.js +219 -212
  87. package/src/plugins/save.js +37 -37
  88. package/src/plugins/scorm.js +287 -287
  89. package/src/plugins/xapi.js +11 -11
  90. package/src/public/index.html +33 -21
  91. package/src/router/index.js +43 -41
  92. package/src/router/routes.js +312 -337
  93. package/src/shared/generalfuncs.js +210 -188
  94. package/src/shared/validators.js +1069 -249
  95. package/vite.config.js +27 -0
  96. package/.prettierrc.js +0 -5
  97. package/babel.config.js +0 -3
  98. package/src/components/AppBaseDragChoice.vue +0 -91
  99. package/src/components/AppBaseDropZone.vue +0 -112
  100. package/src/components/AppCompBif.vue +0 -120
  101. package/src/components/AppCompDragAndDrop.vue +0 -339
  102. package/src/components/AppCompInputAssociation.vue +0 -332
  103. package/src/components/AppCompInputCheckBox.vue +0 -227
  104. package/src/components/AppCompInputDropdown.vue +0 -184
  105. package/src/components/AppCompInputRadio.vue +0 -169
  106. package/src/components/AppCompInputTextTable.vue +0 -155
  107. package/src/components/AppCompInputTextToFillDropdown.vue +0 -255
  108. package/src/components/AppCompMediaPlayer.vue +0 -397
  109. package/src/components/AppCompPopUp.vue +0 -522
  110. package/src/components/AppCompPopover.vue +0 -27
  111. package/src/components/AppCompSVG.vue +0 -309
  112. package/src/mixins/$pageMixins.js +0 -459
  113. package/src/mixins/$quizMixins.js +0 -456
  114. package/src/module/store.js +0 -895
  115. package/src/plugins/timeManager.js +0 -77
  116. package/src/routes_bckp.js +0 -313
  117. package/src/routes_static.js +0 -344
  118. package/vue.config.js +0 -83
@@ -1,337 +1,312 @@
1
- import Router from 'vue-router'
2
- import AppCompViewDisplay from '../components/AppCompViewDisplay.vue'
3
- import store from '../module/store'
4
- import { fileAssets } from '../shared/generalfuncs'
5
- import ModuleView from '@/views/ModuleView.vue'
6
- import SummaryView from '@/views/SummaryView.vue'
7
- /**
8
- * The router Module defines the routes of the App by:
9
- * loading the required files for module and activities pages,
10
- * dynamically creating the navigation route of module base on the file in VIEWS folder
11
- * dynamically creating the navigation routes of activities and branchings base on the files contained in the MODULE
12
- * Creating Redirection routes for navigation error
13
- * Adding the pages for the module in the STORE
14
- */
15
-
16
- const defaultRoutes = [] // routes of the app
17
- let errorType = null
18
- let viewRoute = null // holder for views routes
19
- let mappedFiles = null // routes definitions
20
-
21
- /**
22
- * 1- Preparing the router to catch failing navigation error from browser by
23
- * Redefining the Router push method
24
- * ref: https://stackoverflow.com/questions/57837758/ navigationduplicated-navigating-to-current-location-search-is-not-allowed
25
- */
26
- const originalPush = Router.prototype.push
27
- Router.prototype.push = function push(location) {
28
- return originalPush.call(this, location).catch((err) => err)
29
- }
30
-
31
- // Creating 1st route: redirection for none existing route to home(Module)
32
- defaultRoutes.push({
33
- path: '*',
34
- redirect: {
35
- name: '404'
36
- }
37
- })
38
-
39
- /**
40
- * 2 - Creating the 2nd route: The App module route
41
- */
42
- // Load all the files in the VIEWS folder
43
-
44
- const defaultRoute = {
45
- path: '/',
46
- component: AppCompViewDisplay,
47
- children: [],
48
- meta: {}
49
- }
50
-
51
- if (fileAssets.getViews().length > 0) {
52
- let hasModule = false
53
- let hasSummary = false
54
- let fileRef = null
55
- let splitted = null
56
- let fileName = null
57
- let fileContent = null
58
-
59
- for (let view of fileAssets.getViews()) {
60
- fileRef = view.replace(/(\.\/)/g, '')
61
- splitted = fileRef.split('/')
62
- fileName = splitted[splitted.length - 1].replace(/(\.vue)/g, '')
63
- fileContent = fileAssets.fetchFileContent(`./${fileRef}`).default
64
-
65
- // Create route for the views
66
- viewRoute = {
67
- name: fileName.toLowerCase(),
68
-
69
- meta: {}
70
- }
71
-
72
- if (fileName.toLowerCase() === 'moduleview' && fileContent.data) {
73
- viewRoute.path = ''
74
- viewRoute.name = 'module'
75
- // viewRoute.meta.type = 'normal'
76
- viewRoute.component = ModuleView
77
- viewRoute.children = []
78
- viewRoute.meta.children = []
79
- hasModule = true
80
- }
81
-
82
- if (fileName.toLowerCase() == 'summaryview' && fileContent.data) {
83
- viewRoute.path = '/menu'
84
- viewRoute.name = 'menu'
85
- viewRoute.component = SummaryView
86
- viewRoute.meta.type = 'menu'
87
- viewRoute.meta.id = 'pg_menu'
88
- hasSummary = true
89
- }
90
-
91
- defaultRoute.children.push(viewRoute)
92
- }
93
- // Create activities routes for the ModuleView
94
- if (hasModule) {
95
- const moduleRoute = defaultRoute.children.find((r) => r.name == 'module') //Get ModuleView route
96
- //================== Routes For Activities ================//
97
- // Load files in module folder
98
- const _allFiles = fileAssets.getActivities()
99
- mappedFiles = fileAssets.buildMapTree(_allFiles)
100
- let abstractRouteForActivity = {}
101
- if (!mappedFiles.size) errorType = 'errorPage'
102
-
103
- //There is a file in the module folder
104
- /**
105
- * Define a route for each Activity and its pages
106
- * Set all nested routes in Activities
107
- * Set the activies routes as children of module route
108
- */
109
- let activityCount = 0
110
-
111
- const buildRouteWithNested = ($arr, $folderName, ctx = '') => {
112
- let bCounter = 0 //branch counter
113
-
114
- let mainRoute = {}
115
- for (const [key, value] of $arr) {
116
- let pgIDtoNum = parseInt(key.slice(1))
117
- let firstEl = $arr.entries().next().value
118
-
119
- if (value.constructor === Map)
120
- buildRouteWithNested(value, $folderName, ctx)
121
-
122
- if (key == firstEl[0]) {
123
- //Define the main route according to 1st page id
124
- mainRoute = (() => {
125
- //1st Page is branching
126
- if (key == 'P01')
127
- return {
128
- path: `page-1`,
129
- name: `${ctx.replace('-', '_')}`,
130
- component: () =>
131
- import(
132
- /* webpackChunkName: "home" */
133
- `@/${firstEl[1].ref}`
134
- ),
135
- children: [],
136
- meta: {
137
- id: firstEl[0],
138
- type: 'branching',
139
- activity_ref: $folderName, // Axx
140
- children: []
141
- }
142
- }
143
-
144
- return {
145
- path: `page-${pgIDtoNum}`,
146
- name: `${ctx.replace('-', '_')}.page_${pgIDtoNum}`,
147
- component: () =>
148
- import(
149
- /* webpackChunkName: "home" */
150
- `@/${firstEl[1].ref}`
151
- ),
152
- children: [],
153
- meta: {
154
- id: firstEl[0],
155
- type: 'branching',
156
- activity_ref: $folderName, // Axx
157
- parent: {
158
- _ref: 'P01',
159
- _path: ctx, // activite-xx
160
- _namedRoute: ctx.replace('-', '_') // activite_xx
161
- },
162
- children: []
163
- }
164
- }
165
- })()
166
- } else {
167
- bCounter += 1
168
- // build abstract route for branching
169
- let branchRoute = {
170
- path: `branche-${bCounter}`,
171
- name: `${mainRoute.name}.branche_${bCounter}`,
172
- component: () =>
173
- import(
174
- /* webpackChunkName: "gpNested" */
175
- `@/${value.ref}`
176
- ),
177
- meta: {
178
- id: key,
179
- type: 'branch_page',
180
- activity_ref: $folderName,
181
- _branchingRef: `${firstEl[0]}.branch_${bCounter}`,
182
- parent: {
183
- _ref: firstEl[0],
184
- _path: mainRoute.path,
185
- _namedRoute: mainRoute.name
186
- }
187
- }
188
- }
189
- mainRoute.children.push(branchRoute)
190
- mainRoute.meta.children.push({
191
- _ref: key,
192
- _path: branchRoute.path,
193
- _namedRoute: branchRoute.name
194
- })
195
- }
196
- }
197
-
198
- return mainRoute
199
- }
200
-
201
- for (const [$folderName, $pages] of mappedFiles) {
202
- let activityPageCount = 0 // page counter
203
- //build a abstract route for each folder/activity
204
- abstractRouteForActivity = {
205
- component: AppCompViewDisplay,
206
- meta: {
207
- id: $folderName,
208
- children: []
209
- },
210
- children: []
211
- }
212
- //Define the path for each folder
213
- if ($folderName === 'A00') {
214
- abstractRouteForActivity.path = 'introduction'
215
- } else if ($folderName === 'A99') {
216
- abstractRouteForActivity.path = 'conclusion'
217
- } else {
218
- activityCount++
219
- abstractRouteForActivity.path = `activite-${activityCount}`
220
- }
221
-
222
- //Build the Route for each page of the Activity
223
- for (const [$pageRef, $page] of $pages) {
224
- let activityRoute
225
- activityPageCount++
226
-
227
- if ($page.constructor === Object) {
228
- let firstPage = $pages.entries().next().value
229
- if ($pageRef == firstPage[0]) {
230
- activityRoute = {
231
- path: 'page-1',
232
- name: abstractRouteForActivity.path.replace('-', '_'), //activite_xx
233
- component: () =>
234
- import(/* webpackChunkName: "gpNested" */ `@/${$page.ref}`),
235
- meta: {
236
- id: `${$pageRef}`,
237
- activity_ref: $folderName,
238
- type: (() => {
239
- return abstractRouteForActivity.path.includes('activite')
240
- ? 'normal'
241
- : abstractRouteForActivity.path
242
- })(),
243
- parent: {
244
- _ref: `${$pageRef}`,
245
- _path: abstractRouteForActivity.path,
246
- _namedRoute: abstractRouteForActivity.path.replace('-', '_')
247
- }
248
- }
249
- }
250
- } else {
251
- activityRoute = {
252
- path: `page-${activityPageCount}`,
253
- name: (() => {
254
- let str = abstractRouteForActivity.path.replace('-', '_')
255
-
256
- if (activityPageCount > 1)
257
- str = `${str}.page_${activityPageCount}`
258
-
259
- return str
260
- })(),
261
- component: () =>
262
- import(/* webpackChunkName: "gpNested" */ `@/${$page.ref}`),
263
- meta: {
264
- id: $pageRef,
265
- activity_ref: $folderName,
266
- type: (() => {
267
- return abstractRouteForActivity.path.includes('activite')
268
- ? 'normal'
269
- : abstractRouteForActivity.path
270
- })(),
271
- parent: {
272
- _ref: `${$pageRef}`,
273
- _path: abstractRouteForActivity.path,
274
- _namedRoute: abstractRouteForActivity.path.replace('-', '_')
275
- }
276
- }
277
- }
278
- }
279
- }
280
- //Handling Branching Routes
281
- if ($page.constructor === Map) {
282
- const ctx = abstractRouteForActivity.path
283
- activityRoute = buildRouteWithNested($page, $folderName, ctx)
284
- }
285
- //add page route into activity children
286
- abstractRouteForActivity.children.push(activityRoute)
287
-
288
- //add page route reference into in activity meta
289
- abstractRouteForActivity.meta.children.push({
290
- _ref: activityRoute.meta.id,
291
- _path: activityRoute.path,
292
- _namedRoute: activityRoute.name
293
- })
294
- }
295
-
296
- moduleRoute.meta.children.push({
297
- _ref: $folderName,
298
- _path: abstractRouteForActivity.path,
299
- _namedRoute: abstractRouteForActivity.path.replace('-', '_')
300
- })
301
-
302
- moduleRoute.children.push(abstractRouteForActivity)
303
- }
304
-
305
- // Add register Module pages to store
306
- store.state.thisModule.activities = mappedFiles
307
- // Set Module route as child of abstract route. Module will render inside abstract component
308
- } else errorType = 'errorModule'
309
- if (!hasSummary) errorType = 'errorMenu'
310
- } else errorType = 'errorModule'
311
- if (!errorType) {
312
- defaultRoutes.push(defaultRoute)
313
- defaultRoutes.push({
314
- path: '/',
315
- component: () =>
316
- import(
317
- /* webpackChunkName: "gpNested" */ `../components/AppBaseErrorDisplay.vue`
318
- ),
319
- props: {
320
- errorMessage: errorType
321
- }
322
- })
323
- }
324
- // Routes for errors : 404
325
- defaultRoutes.push({
326
- path: '/404',
327
- name: '404',
328
- component: () =>
329
- import(
330
- /* webpackChunkName: "gpNested" */ `../components/AppBaseErrorDisplay.vue`
331
- ),
332
- props: {
333
- errorMessage: '404'
334
- }
335
- })
336
-
337
- export default defaultRoutes
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 }