fcad-core-dragon 2.0.0-beta.8 β†’ 2.0.0-beta.9

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 (57) hide show
  1. package/.editorconfig +33 -33
  2. package/.eslintignore +29 -29
  3. package/.eslintrc.cjs +81 -81
  4. package/CHANGELOG +3 -0
  5. package/README.md +71 -71
  6. package/bk.scss +117 -117
  7. package/package.json +1 -1
  8. package/src/assets/data/onboardingMessages.json +47 -47
  9. package/src/components/AppBaseErrorDisplay.vue +438 -438
  10. package/src/components/AppBaseFlipCard.vue +84 -84
  11. package/src/components/AppBasePopover.vue +41 -41
  12. package/src/components/AppCompInputRadioNext.vue +152 -152
  13. package/src/components/AppCompInputTextToFillNext.vue +171 -171
  14. package/src/components/AppCompJauge.vue +74 -74
  15. package/src/components/AppCompMenuItem.vue +228 -228
  16. package/src/components/AppCompNoteCall.vue +1 -0
  17. package/src/components/AppCompPlayBarProgress.vue +82 -82
  18. package/src/components/AppCompPopUpNext.vue +5 -1
  19. package/src/components/AppCompSettingsMenu.vue +172 -172
  20. package/src/components/AppCompViewDisplay.vue +6 -6
  21. package/src/composables/useQuiz.js +206 -206
  22. package/src/externalComps/ModuleView.vue +22 -22
  23. package/src/externalComps/SummaryView.vue +91 -91
  24. package/src/mixins/$mediaMixins.js +819 -819
  25. package/src/mixins/timerMixin.js +155 -155
  26. package/src/module/xapi/Crypto/Hasher.js +241 -241
  27. package/src/module/xapi/Crypto/WordArray.js +278 -278
  28. package/src/module/xapi/Crypto/algorithms/BufferedBlockAlgorithm.js +103 -103
  29. package/src/module/xapi/Crypto/algorithms/C_algo.js +315 -315
  30. package/src/module/xapi/Crypto/algorithms/HMAC.js +9 -9
  31. package/src/module/xapi/Crypto/algorithms/SHA1.js +9 -9
  32. package/src/module/xapi/Crypto/encoders/Base.js +105 -105
  33. package/src/module/xapi/Crypto/encoders/Base64.js +99 -99
  34. package/src/module/xapi/Crypto/encoders/Hex.js +61 -61
  35. package/src/module/xapi/Crypto/encoders/Latin1.js +61 -61
  36. package/src/module/xapi/Crypto/encoders/Utf8.js +45 -45
  37. package/src/module/xapi/Crypto/index.js +53 -53
  38. package/src/module/xapi/Statement/activity.js +47 -47
  39. package/src/module/xapi/Statement/agent.js +55 -55
  40. package/src/module/xapi/Statement/group.js +26 -26
  41. package/src/module/xapi/Statement/index.js +259 -259
  42. package/src/module/xapi/Statement/statement.js +253 -253
  43. package/src/module/xapi/Statement/statementRef.js +23 -23
  44. package/src/module/xapi/Statement/substatement.js +22 -22
  45. package/src/module/xapi/Statement/verb.js +36 -36
  46. package/src/module/xapi/activitytypes.js +17 -17
  47. package/src/module/xapi/utils.js +167 -167
  48. package/src/module/xapi/verbs.js +294 -294
  49. package/src/module/xapi/xapiStatement.js +444 -444
  50. package/src/plugins/bus.js +8 -8
  51. package/src/plugins/gsap.js +14 -14
  52. package/src/plugins/i18n.js +44 -44
  53. package/src/plugins/save.js +37 -37
  54. package/src/plugins/scorm.js +287 -287
  55. package/src/plugins/xapi.js +11 -11
  56. package/src/public/index.html +33 -33
  57. package/src/shared/generalfuncs.js +210 -210
@@ -1,210 +1,210 @@
1
- // const allfile = require.context('@/', true, /\.vue$/) //get all .vue file at the root of the project where lib will be installed
2
- const allfile = import.meta.glob(['@/**/*.vue', '!@/**/_*'], {
3
- eager: true
4
- }) //get all .vue file at the root of the project where lib will be installed
5
-
6
- const allfileKeys = Object.keys(allfile)
7
-
8
- //console.log('ALL PATHS', fileArray)
9
- allfileKeys.forEach(function (key, index, array) {
10
- array[index] = {
11
- name: key.replace('/src', '.').replace('.vue', ''),
12
- fullPath: allfile[key].default.__file,
13
- content: allfile[key].default
14
- }
15
- })
16
-
17
- const fileAssets = {
18
- // return the collection of all the files in the project directory
19
- allFiles: () => allfileKeys,
20
-
21
- // Return all the file in './views' with the Name Module
22
- getViews: () => {
23
- return fileAssets
24
- .allFiles()
25
- .filter(
26
- (file) =>
27
- file.name.startsWith('./views') &&
28
- !file.name.split('/')[2].includes('copy')
29
- )
30
- },
31
- // return all files that are in the folder './src/module' of the project with name respecting following condition:
32
- // must start with a capital P followed by a digit (P0, P1, P2...) and not contain keyword "copy"
33
- getActivities: () => {
34
- return fileAssets.allFiles().filter((file) => {
35
- if (
36
- file.name.startsWith('./module/A') &&
37
- /^P[0-9]{2,3}/.test(file.name.split('/')[3]) &&
38
- !file.name.split('/')[3].includes('copy')
39
- )
40
- return true
41
- else return false
42
- })
43
- },
44
-
45
- // search a specific file and return its content
46
- fetchFileContent: (file) => allfile[file].default,
47
-
48
- /**
49
- * @description Validator for the content of menu setting file
50
- * @param {String} fName- name of the file for use case
51
- * @param {Object} fData: file's data to validate
52
- * @param {Object} [requiredArgs] list of arguments to include consider in validation ()
53
- */
54
- validatefileContent: (fName, fData, requiredArgs = {}) => {
55
- let err = null
56
- if (import.meta.env.DEV) {
57
- switch (fName) {
58
- case 'menuSettings': {
59
- const { keys4Activity, keys4Anchors } = requiredArgs
60
-
61
- //*validate that data is an {Object}. if Not send error message
62
- if (fData.constructor !== Object)
63
- err = 'πŸ’₯Invalid file provided for menu settings'
64
-
65
- if (Object.entries(fData).length > 0) {
66
- const content = Object.entries(fData)
67
-
68
- for (let el of content) {
69
- // validate that the content of each entry is an object
70
- if (el[1].constructor !== Object || !Object.keys(el[1]).length) {
71
- err = `πŸ’₯ invalid data provided for key πŸ‘‰ ${el[0]} πŸ‘ˆ in ➑ menu.setting.js \n 🚩Must be of type {Object}`
72
- break
73
- }
74
- }
75
- // Validate that each entry has the required key
76
- if (!err) {
77
- for (let el of content) {
78
- const entry = el[1]
79
- for (let k of keys4Activity) {
80
- if (!entry[k]) {
81
- err = `πŸ’₯ Missing πŸ‘‰ ${k} πŸ‘ˆ in ${el[0]} in ➑ menu.setting.js \n 🚩Allowed indexes are: πŸ‘‰ ${keys4Activity}`
82
- break
83
- } else {
84
- //validate that each entry as correct value type
85
- switch (k) {
86
- case 'anchors':
87
- if (entry[k].constructor !== Array)
88
- err = `πŸ’₯ Invalid anchors declaration for πŸ‘‰ ${el[0]} πŸ‘ˆ in ➑ menu.setting.j \n 🚩Must be of type {Array}`
89
- else {
90
- const anchors = entry.anchors
91
-
92
- for (let a of anchors) {
93
- //trow error if numbers of keys are not the same as required
94
- const a_numb = anchors.indexOf(a) + 1
95
- if (Object.keys(a).length !== keys4Anchors.length) {
96
- err = `πŸ’₯ Invalid declaration in πŸ‘‰anchor ${a_numb}πŸ‘ˆ for ➑ ${el[0]} in ➑ menu.setting.js \n 🚩 Allowed indexes are: πŸ‘‰ ${keys4Anchors}`
97
- break
98
- }
99
- // Validated that required keys condition and type is met
100
- for (let k of keys4Anchors) {
101
- if (!a[k]) {
102
- err = `πŸ’₯ Missing πŸ‘‰ ${k} πŸ‘ˆ for anchor ${a_numb} ➑ ${el[0]} ➑ menu.setting.js \n 🚩 Allowed indexes are: πŸ‘‰ ${keys4Anchors}`
103
- } else if (a[k].constructor !== String) {
104
- err = `πŸ’₯ Invalid πŸ‘‰ ${k} πŸ‘ˆ declaration for anchor ${a_numb} ➑ ${el[0]} ➑ menu.setting.js \n 🚩 Must be of type {String}`
105
- }
106
- if (err) break
107
- }
108
- if (err) break
109
- }
110
- }
111
-
112
- break
113
- default:
114
- if (entry[k].constructor !== String)
115
- err = `Invalid πŸ‘‰ ${k} πŸ‘ˆ declaration for ➑ ${el[0]} in ➑ menu.setting.js \n 🚩 Must be of type {String}`
116
- break
117
- }
118
- }
119
- }
120
-
121
- if (err) break
122
- }
123
- }
124
- }
125
- break
126
- }
127
- }
128
- }
129
- return err
130
- },
131
-
132
- /**
133
- * @description Validator for the content of menu setting file
134
- * @param {String} a- array of file for use case
135
- * @param {Object} [requiredArgs] list of arguments to include consider in validation ()
136
- */
137
- buildMapTree: (a) => {
138
- // Load files in module folder
139
-
140
- if (a.length < 0) return
141
-
142
- const mapTree = new Map()
143
- // There is a file in the module folder
144
-
145
- a.forEach((e) => {
146
- const fileRef = e.name.replace(/(\.\/)/g, '')
147
- const splitted = fileRef.split('/')
148
- const activityName = splitted[1]
149
- const fileName = splitted[splitted.length - 1].replace(/(\.vue)/g, '')
150
- const fileContent = e.content
151
- if (!Object.keys(fileContent).includes('data')) return
152
- // Handling single page type
153
- // adding the page in a map for the Pages
154
-
155
- // Add the key in the map for the routes if it is not in the map, with its data as new Map;
156
- if (!mapTree.get(activityName)) {
157
- mapTree.set(activityName, new Map())
158
- }
159
-
160
- if (fileName.length === 3) {
161
- mapTree.get(activityName).set(fileName, {
162
- ref: fileRef,
163
- content: fileContent.data(),
164
- fullPath: e.fullPath
165
- }) // add entry for the page
166
- }
167
- // Handleling Groupe page type
168
- else if (fileName.length > 3 && fileName.includes('_')) {
169
- const keyToFind = fileName.split('_', 1)[0] // Pxx
170
- const KeyToAdd = fileName.split('_')[1] // Exx
171
-
172
- // // search for the page key in the map
173
- if (!mapTree.get(activityName).has(keyToFind)) return
174
-
175
- // save a reference for the value of the key
176
- const tempSave = mapTree.get(activityName).get(keyToFind)
177
-
178
- // transform value of found key to a new map
179
- if (!mapTree.get(activityName).get(keyToFind).size) {
180
- mapTree.get(activityName).set(keyToFind, new Map())
181
- // Update reference of key's
182
- mapTree.get(activityName).get(keyToFind).set(keyToFind, tempSave)
183
- }
184
-
185
- // Add page EXX in Map if it is not already added
186
- if (!mapTree.get(activityName).get(keyToFind).get(KeyToAdd))
187
- mapTree.get(activityName).get(keyToFind).set(fileName, {
188
- ref: fileRef,
189
- content: fileContent.data(),
190
- fullPath: e.fullPath
191
- })
192
- }
193
- })
194
-
195
- return mapTree
196
- },
197
-
198
- /**
199
- * @description Capitalize word in string
200
- * @param {String} a- array of file for use case
201
- * @param {Object} [requiredArgs] list of arguments to include consider in validation ()
202
- */
203
- capitalize: (string) => {
204
- let formatted = string.replaceAll('_', ' ').toLowerCase()
205
- formatted = `${formatted.substring(0, 1).toUpperCase()}${formatted.slice(1).toLowerCase()}`
206
- return formatted
207
- }
208
- }
209
-
210
- export { fileAssets }
1
+ // const allfile = require.context('@/', true, /\.vue$/) //get all .vue file at the root of the project where lib will be installed
2
+ const allfile = import.meta.glob(['@/**/*.vue', '!@/**/_*'], {
3
+ eager: true
4
+ }) //get all .vue file at the root of the project where lib will be installed
5
+
6
+ const allfileKeys = Object.keys(allfile)
7
+
8
+ //console.log('ALL PATHS', fileArray)
9
+ allfileKeys.forEach(function (key, index, array) {
10
+ array[index] = {
11
+ name: key.replace('/src', '.').replace('.vue', ''),
12
+ fullPath: allfile[key].default.__file,
13
+ content: allfile[key].default
14
+ }
15
+ })
16
+
17
+ const fileAssets = {
18
+ // return the collection of all the files in the project directory
19
+ allFiles: () => allfileKeys,
20
+
21
+ // Return all the file in './views' with the Name Module
22
+ getViews: () => {
23
+ return fileAssets
24
+ .allFiles()
25
+ .filter(
26
+ (file) =>
27
+ file.name.startsWith('./views') &&
28
+ !file.name.split('/')[2].includes('copy')
29
+ )
30
+ },
31
+ // return all files that are in the folder './src/module' of the project with name respecting following condition:
32
+ // must start with a capital P followed by a digit (P0, P1, P2...) and not contain keyword "copy"
33
+ getActivities: () => {
34
+ return fileAssets.allFiles().filter((file) => {
35
+ if (
36
+ file.name.startsWith('./module/A') &&
37
+ /^P[0-9]{2,3}/.test(file.name.split('/')[3]) &&
38
+ !file.name.split('/')[3].includes('copy')
39
+ )
40
+ return true
41
+ else return false
42
+ })
43
+ },
44
+
45
+ // search a specific file and return its content
46
+ fetchFileContent: (file) => allfile[file].default,
47
+
48
+ /**
49
+ * @description Validator for the content of menu setting file
50
+ * @param {String} fName- name of the file for use case
51
+ * @param {Object} fData: file's data to validate
52
+ * @param {Object} [requiredArgs] list of arguments to include consider in validation ()
53
+ */
54
+ validatefileContent: (fName, fData, requiredArgs = {}) => {
55
+ let err = null
56
+ if (import.meta.env.DEV) {
57
+ switch (fName) {
58
+ case 'menuSettings': {
59
+ const { keys4Activity, keys4Anchors } = requiredArgs
60
+
61
+ //*validate that data is an {Object}. if Not send error message
62
+ if (fData.constructor !== Object)
63
+ err = 'πŸ’₯Invalid file provided for menu settings'
64
+
65
+ if (Object.entries(fData).length > 0) {
66
+ const content = Object.entries(fData)
67
+
68
+ for (let el of content) {
69
+ // validate that the content of each entry is an object
70
+ if (el[1].constructor !== Object || !Object.keys(el[1]).length) {
71
+ err = `πŸ’₯ invalid data provided for key πŸ‘‰ ${el[0]} πŸ‘ˆ in ➑ menu.setting.js \n 🚩Must be of type {Object}`
72
+ break
73
+ }
74
+ }
75
+ // Validate that each entry has the required key
76
+ if (!err) {
77
+ for (let el of content) {
78
+ const entry = el[1]
79
+ for (let k of keys4Activity) {
80
+ if (!entry[k]) {
81
+ err = `πŸ’₯ Missing πŸ‘‰ ${k} πŸ‘ˆ in ${el[0]} in ➑ menu.setting.js \n 🚩Allowed indexes are: πŸ‘‰ ${keys4Activity}`
82
+ break
83
+ } else {
84
+ //validate that each entry as correct value type
85
+ switch (k) {
86
+ case 'anchors':
87
+ if (entry[k].constructor !== Array)
88
+ err = `πŸ’₯ Invalid anchors declaration for πŸ‘‰ ${el[0]} πŸ‘ˆ in ➑ menu.setting.j \n 🚩Must be of type {Array}`
89
+ else {
90
+ const anchors = entry.anchors
91
+
92
+ for (let a of anchors) {
93
+ //trow error if numbers of keys are not the same as required
94
+ const a_numb = anchors.indexOf(a) + 1
95
+ if (Object.keys(a).length !== keys4Anchors.length) {
96
+ err = `πŸ’₯ Invalid declaration in πŸ‘‰anchor ${a_numb}πŸ‘ˆ for ➑ ${el[0]} in ➑ menu.setting.js \n 🚩 Allowed indexes are: πŸ‘‰ ${keys4Anchors}`
97
+ break
98
+ }
99
+ // Validated that required keys condition and type is met
100
+ for (let k of keys4Anchors) {
101
+ if (!a[k]) {
102
+ err = `πŸ’₯ Missing πŸ‘‰ ${k} πŸ‘ˆ for anchor ${a_numb} ➑ ${el[0]} ➑ menu.setting.js \n 🚩 Allowed indexes are: πŸ‘‰ ${keys4Anchors}`
103
+ } else if (a[k].constructor !== String) {
104
+ err = `πŸ’₯ Invalid πŸ‘‰ ${k} πŸ‘ˆ declaration for anchor ${a_numb} ➑ ${el[0]} ➑ menu.setting.js \n 🚩 Must be of type {String}`
105
+ }
106
+ if (err) break
107
+ }
108
+ if (err) break
109
+ }
110
+ }
111
+
112
+ break
113
+ default:
114
+ if (entry[k].constructor !== String)
115
+ err = `Invalid πŸ‘‰ ${k} πŸ‘ˆ declaration for ➑ ${el[0]} in ➑ menu.setting.js \n 🚩 Must be of type {String}`
116
+ break
117
+ }
118
+ }
119
+ }
120
+
121
+ if (err) break
122
+ }
123
+ }
124
+ }
125
+ break
126
+ }
127
+ }
128
+ }
129
+ return err
130
+ },
131
+
132
+ /**
133
+ * @description Validator for the content of menu setting file
134
+ * @param {String} a- array of file for use case
135
+ * @param {Object} [requiredArgs] list of arguments to include consider in validation ()
136
+ */
137
+ buildMapTree: (a) => {
138
+ // Load files in module folder
139
+
140
+ if (a.length < 0) return
141
+
142
+ const mapTree = new Map()
143
+ // There is a file in the module folder
144
+
145
+ a.forEach((e) => {
146
+ const fileRef = e.name.replace(/(\.\/)/g, '')
147
+ const splitted = fileRef.split('/')
148
+ const activityName = splitted[1]
149
+ const fileName = splitted[splitted.length - 1].replace(/(\.vue)/g, '')
150
+ const fileContent = e.content
151
+ if (!Object.keys(fileContent).includes('data')) return
152
+ // Handling single page type
153
+ // adding the page in a map for the Pages
154
+
155
+ // Add the key in the map for the routes if it is not in the map, with its data as new Map;
156
+ if (!mapTree.get(activityName)) {
157
+ mapTree.set(activityName, new Map())
158
+ }
159
+
160
+ if (fileName.length === 3) {
161
+ mapTree.get(activityName).set(fileName, {
162
+ ref: fileRef,
163
+ content: fileContent.data(),
164
+ fullPath: e.fullPath
165
+ }) // add entry for the page
166
+ }
167
+ // Handleling Groupe page type
168
+ else if (fileName.length > 3 && fileName.includes('_')) {
169
+ const keyToFind = fileName.split('_', 1)[0] // Pxx
170
+ const KeyToAdd = fileName.split('_')[1] // Exx
171
+
172
+ // // search for the page key in the map
173
+ if (!mapTree.get(activityName).has(keyToFind)) return
174
+
175
+ // save a reference for the value of the key
176
+ const tempSave = mapTree.get(activityName).get(keyToFind)
177
+
178
+ // transform value of found key to a new map
179
+ if (!mapTree.get(activityName).get(keyToFind).size) {
180
+ mapTree.get(activityName).set(keyToFind, new Map())
181
+ // Update reference of key's
182
+ mapTree.get(activityName).get(keyToFind).set(keyToFind, tempSave)
183
+ }
184
+
185
+ // Add page EXX in Map if it is not already added
186
+ if (!mapTree.get(activityName).get(keyToFind).get(KeyToAdd))
187
+ mapTree.get(activityName).get(keyToFind).set(fileName, {
188
+ ref: fileRef,
189
+ content: fileContent.data(),
190
+ fullPath: e.fullPath
191
+ })
192
+ }
193
+ })
194
+
195
+ return mapTree
196
+ },
197
+
198
+ /**
199
+ * @description Capitalize word in string
200
+ * @param {String} a- array of file for use case
201
+ * @param {Object} [requiredArgs] list of arguments to include consider in validation ()
202
+ */
203
+ capitalize: (string) => {
204
+ let formatted = string.replaceAll('_', ' ').toLowerCase()
205
+ formatted = `${formatted.substring(0, 1).toUpperCase()}${formatted.slice(1).toLowerCase()}`
206
+ return formatted
207
+ }
208
+ }
209
+
210
+ export { fileAssets }