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,287 +1,287 @@
1
- /**
2
- * Create a Scorm plugin for LMS communication.
3
- * this plugin implements Scorm 1.2 specifications
4
- */
5
-
6
- export const scormPlugin = {
7
- install: function (app) {
8
- {
9
- app.config.globalProperties.$scorm = {
10
- nFindAPITries: 0,
11
- API: null,
12
- maxTries: 500,
13
- SCORM_TRUE: 'true',
14
- SCORM_FALSE: 'false',
15
- SCORM_NO_ERROR: '0',
16
- error_message: {
17
- msg_api_init:
18
- 'Error - Could not initialize communication with the LMS.\n\nYour results may not be recorded.\n\n $@errorDescription',
19
- msg_api_Terminate:
20
- 'Error - Could not terminate communication with the LMS.\n\nYour results may not be recorded.\n\n $@errorDescription',
21
- msg_setValue:
22
- 'Error - Could not store a value in the LMS.\n\nYour results may not be recorded.\n\n $@errorDescription',
23
- msg_getValue:
24
- ' Error - Could not retrieve a value from the LMS.\n\n $@errorDescription',
25
- msg_commit:
26
- 'Error - Could not invoke Commit.\n\nYour results may not be recorded.\n\n $@errorDescription'
27
- },
28
- //Since the Unload handler will be called twice, from both the onunload
29
- //and onbeforeunload events, ensure that we only call Terminate once.
30
- terminateCalled: false,
31
- //Track whether or not we successfully initialized.
32
- initialized: false,
33
-
34
- // The ScanForAPI() function searches for an object named this.API_1484_11
35
- // in the window that is passed into the function. If the object is
36
- // found a reference to the object is returned to the calling function.
37
- // If the instance is found the SCO now has a handle to the LMS
38
- // provided this.API Instance. The function searches a maximum number
39
- // of parents of the current window. If no object is found the
40
- // function returns a null reference. This function also reassigns a
41
- // value to the win parameter passed in, based on the number of
42
- // parents. At the end of the function call, the win variable will be
43
- // set to the upper most parent in the chain of parents.
44
- ScanForAPI: function (win) {
45
- while (win.API == null && win.parent != null && win.parent != win) {
46
- this.nFindAPITries++
47
- if (this.nFindAPITries > this.maxTries) {
48
- return null
49
- }
50
- win = win.parent
51
- }
52
- return win.API
53
- },
54
- // The GetAPI() function begins the process of searching for the LMS
55
- // provided this.API Instance. The function takes in a parameter that
56
- // represents the current window. The function is built to search in a
57
- // specific order and stop when the LMS provided this.API Instance is found.
58
- // The function begins by searching the current window�s parent, if the
59
- // current window has a parent. If the this.API Instance is not found, the
60
- // function then checks to see if there are any opener windows. If
61
- // the window has an opener, the function begins to look for the
62
- // this.API Instance in the opener window.
63
- GetAPI: function (win) {
64
- if (win.parent != null && win.parent != win) {
65
- this.API = this.ScanForAPI(win.parent)
66
- }
67
- if (this.API == null && win.opener != null) {
68
- this.API = this.ScanForAPI(win.opener)
69
- }
70
- },
71
-
72
- // Initalize
73
- Initialize: function () {
74
- let result
75
-
76
- this.GetAPI(window)
77
-
78
- if (this.API == null) {
79
- return
80
- }
81
-
82
- result = this.API.LMSInitialize('') // Initialize communication with LMS return true | false
83
-
84
- if (result == this.SCORM_FALSE) {
85
- let errorNumber = this.API.LMSGetLastError()
86
- let errorString = this.API.LMSGetErrorString(errorNumber)
87
- let diagnostic = this.API.LMSGetDiagnostic(errorNumber)
88
-
89
- let errorDescription =
90
- 'Number: ' +
91
- errorNumber +
92
- '\nDescription: ' +
93
- errorString +
94
- '\nDiagnostic: ' +
95
- diagnostic
96
-
97
- alert(
98
- 'Error - Could not initialize communication with the LMS.\n\nYour results may not be recorded.\n\n' +
99
- errorDescription
100
- )
101
- return
102
- }
103
-
104
- this.initialized = true
105
- },
106
- //Termitate the communication with the LMS
107
- Finish: function (finalState) {
108
- let result
109
- //Don't terminate if we haven't initialized or if we've already terminated
110
- if (this.initialized === false || this.terminateCalled === true) {
111
- return
112
- }
113
-
114
- if (finalState && finalState == true) {
115
- this.SetValue('cmi.core.lesson_status', 'completed')
116
- } else {
117
- this.SetValue('cmi.core.lesson_status', 'incomplete')
118
- }
119
- this.Commit()
120
- result = this.API.LMSFinish('') // terminate communication with the LMS return true | false
121
- this.terminateCalled = true
122
-
123
- if (result == this.SCORM_FALSE) {
124
- let errorNumber = this.API.LMSGetLastError()
125
- let errorString = this.API.LMSGetErrorString(errorNumber)
126
- let diagnostic = this.API.LMSGetDiagnostic(errorNumber)
127
-
128
- let errorDescription =
129
- 'Number: ' +
130
- errorNumber +
131
- '\nDescription: ' +
132
- errorString +
133
- '\nDiagnostic: ' +
134
- diagnostic
135
-
136
- alert(
137
- 'Error - Could not terminate communication with the LMS.\n\nYour results may not be recorded.\n\n' +
138
- errorDescription
139
- )
140
- return
141
- }
142
- this.initialized = false
143
- },
144
- //There are situations where a GetValue call is expected to have an error
145
- //and should not alert the user.
146
-
147
- GetValue: function (element, checkError) {
148
- let result
149
-
150
- if (this.initialized == false || this.terminateCalled == true) {
151
- return
152
- }
153
-
154
- result = this.API.LMSGetValue(element)
155
-
156
- if (checkError == true && result == '') {
157
- let errorNumber = this.API.LMSGetLastError()
158
-
159
- if (errorNumber != this.SCORM_NO_ERROR) {
160
- let errorString = this.API.LMSGetErrorString(errorNumber)
161
- let diagnostic = this.API.LMSGetDiagnostic(errorNumber)
162
-
163
- let errorDescription =
164
- 'Number: ' +
165
- errorNumber +
166
- '\nDescription: ' +
167
- errorString +
168
- '\nDiagnostic: ' +
169
- diagnostic
170
-
171
- alert(
172
- 'Error - Could not retrieve a value from the LMS.\n\n' +
173
- errorDescription
174
- )
175
- return ''
176
- }
177
- }
178
-
179
- return result
180
- },
181
-
182
- SetValue: function (element, value) {
183
- let result
184
-
185
- if (this.initialized == false || this.terminateCalled == true) {
186
- return
187
- }
188
-
189
- result = this.API.LMSSetValue(element, value)
190
-
191
- if (result == this.SCORM_FALSE) {
192
- let errorNumber = this.API.LMSGetLastError()
193
- let errorString = this.API.LMSGetErrorString(errorNumber)
194
- let diagnostic = this.API.LMSGetDiagnostic(errorNumber)
195
-
196
- let errorDescription =
197
- 'Number: ' +
198
- errorNumber +
199
- '\nDescription: ' +
200
- errorString +
201
- '\nDiagnostic: ' +
202
- diagnostic
203
-
204
- alert(
205
- 'Error - Could not store a value in the LMS.\n\nYour results may not be recorded.\n\n' +
206
- errorDescription
207
- )
208
- return
209
- }
210
- },
211
-
212
- Commit: function () {
213
- let result
214
-
215
- result = this.API.LMSCommit('')
216
-
217
- if (result == this.SCORM_FALSE) {
218
- let errorNumber = this.API.LMSGetLastError()
219
- let errorString = this.API.LMSGetErrorString(errorNumber)
220
- let diagnostic = this.API.LMSGetDiagnostic(errorNumber)
221
-
222
- let errorDescription =
223
- 'Number: ' +
224
- errorNumber +
225
- '\nDescription: ' +
226
- errorString +
227
- '\nDiagnostic: ' +
228
- diagnostic
229
-
230
- alert(
231
- 'Error - Could not invoke Commit.\n\nYour results may not be recorded.\n\n' +
232
- errorDescription
233
- )
234
- return
235
- }
236
- },
237
- //==================== CUSTOME METHODS =============================
238
- checkForError: function () {
239
- let error_type = null
240
- let errorNumber = this.API.LMSGetLastError()
241
- if (errorNumber !== '' || errorNumber !== '0') {
242
- let errorString = this.API.LMSGetErrorString(errorNumber)
243
- let diagnostic = this.API.LMSGetDiagnostic(errorNumber)
244
- return (error_type = {
245
- error_number: errorNumber,
246
- error_name: errorString,
247
- description: diagnostic
248
- })
249
- } else return error_type
250
- },
251
-
252
- formateMsg: function (msg, data) {
253
- msg.replace('$@errorDescription', data)
254
- },
255
-
256
- getScormStatus: function () {
257
- return this.initialized
258
- },
259
-
260
- getScormAPI: function () {
261
- return this.API
262
- },
263
-
264
- setCompletionStatus: function (newStatus) {
265
- this.API.RunTimeData.CompletionStatus = newStatus
266
- this.Commit()
267
- },
268
-
269
- setSucessStatus: function (newStatus) {
270
- this.API.RunTimeData.SuccessStatus = newStatus
271
- this.Commit()
272
- },
273
- setBookMark(page) {
274
- this.SetValue('cmi.core.lesson_location', page)
275
- this.Commit()
276
- },
277
- getDataValues() {
278
- return {
279
- bookMark: this.GetValue('cmi.core.lesson_location'),
280
- userData: this.GetValue('cmi.suspend_data'),
281
- lessonState: this.GetValue('cmi.core.lesson_status')
282
- }
283
- }
284
- }
285
- }
286
- }
287
- }
1
+ /**
2
+ * Create a Scorm plugin for LMS communication.
3
+ * this plugin implements Scorm 1.2 specifications
4
+ */
5
+
6
+ export const scormPlugin = {
7
+ install: function (app) {
8
+ {
9
+ app.config.globalProperties.$scorm = {
10
+ nFindAPITries: 0,
11
+ API: null,
12
+ maxTries: 500,
13
+ SCORM_TRUE: 'true',
14
+ SCORM_FALSE: 'false',
15
+ SCORM_NO_ERROR: '0',
16
+ error_message: {
17
+ msg_api_init:
18
+ 'Error - Could not initialize communication with the LMS.\n\nYour results may not be recorded.\n\n $@errorDescription',
19
+ msg_api_Terminate:
20
+ 'Error - Could not terminate communication with the LMS.\n\nYour results may not be recorded.\n\n $@errorDescription',
21
+ msg_setValue:
22
+ 'Error - Could not store a value in the LMS.\n\nYour results may not be recorded.\n\n $@errorDescription',
23
+ msg_getValue:
24
+ ' Error - Could not retrieve a value from the LMS.\n\n $@errorDescription',
25
+ msg_commit:
26
+ 'Error - Could not invoke Commit.\n\nYour results may not be recorded.\n\n $@errorDescription'
27
+ },
28
+ //Since the Unload handler will be called twice, from both the onunload
29
+ //and onbeforeunload events, ensure that we only call Terminate once.
30
+ terminateCalled: false,
31
+ //Track whether or not we successfully initialized.
32
+ initialized: false,
33
+
34
+ // The ScanForAPI() function searches for an object named this.API_1484_11
35
+ // in the window that is passed into the function. If the object is
36
+ // found a reference to the object is returned to the calling function.
37
+ // If the instance is found the SCO now has a handle to the LMS
38
+ // provided this.API Instance. The function searches a maximum number
39
+ // of parents of the current window. If no object is found the
40
+ // function returns a null reference. This function also reassigns a
41
+ // value to the win parameter passed in, based on the number of
42
+ // parents. At the end of the function call, the win variable will be
43
+ // set to the upper most parent in the chain of parents.
44
+ ScanForAPI: function (win) {
45
+ while (win.API == null && win.parent != null && win.parent != win) {
46
+ this.nFindAPITries++
47
+ if (this.nFindAPITries > this.maxTries) {
48
+ return null
49
+ }
50
+ win = win.parent
51
+ }
52
+ return win.API
53
+ },
54
+ // The GetAPI() function begins the process of searching for the LMS
55
+ // provided this.API Instance. The function takes in a parameter that
56
+ // represents the current window. The function is built to search in a
57
+ // specific order and stop when the LMS provided this.API Instance is found.
58
+ // The function begins by searching the current window�s parent, if the
59
+ // current window has a parent. If the this.API Instance is not found, the
60
+ // function then checks to see if there are any opener windows. If
61
+ // the window has an opener, the function begins to look for the
62
+ // this.API Instance in the opener window.
63
+ GetAPI: function (win) {
64
+ if (win.parent != null && win.parent != win) {
65
+ this.API = this.ScanForAPI(win.parent)
66
+ }
67
+ if (this.API == null && win.opener != null) {
68
+ this.API = this.ScanForAPI(win.opener)
69
+ }
70
+ },
71
+
72
+ // Initalize
73
+ Initialize: function () {
74
+ let result
75
+
76
+ this.GetAPI(window)
77
+
78
+ if (this.API == null) {
79
+ return
80
+ }
81
+
82
+ result = this.API.LMSInitialize('') // Initialize communication with LMS return true | false
83
+
84
+ if (result == this.SCORM_FALSE) {
85
+ let errorNumber = this.API.LMSGetLastError()
86
+ let errorString = this.API.LMSGetErrorString(errorNumber)
87
+ let diagnostic = this.API.LMSGetDiagnostic(errorNumber)
88
+
89
+ let errorDescription =
90
+ 'Number: ' +
91
+ errorNumber +
92
+ '\nDescription: ' +
93
+ errorString +
94
+ '\nDiagnostic: ' +
95
+ diagnostic
96
+
97
+ alert(
98
+ 'Error - Could not initialize communication with the LMS.\n\nYour results may not be recorded.\n\n' +
99
+ errorDescription
100
+ )
101
+ return
102
+ }
103
+
104
+ this.initialized = true
105
+ },
106
+ //Termitate the communication with the LMS
107
+ Finish: function (finalState) {
108
+ let result
109
+ //Don't terminate if we haven't initialized or if we've already terminated
110
+ if (this.initialized === false || this.terminateCalled === true) {
111
+ return
112
+ }
113
+
114
+ if (finalState && finalState == true) {
115
+ this.SetValue('cmi.core.lesson_status', 'completed')
116
+ } else {
117
+ this.SetValue('cmi.core.lesson_status', 'incomplete')
118
+ }
119
+ this.Commit()
120
+ result = this.API.LMSFinish('') // terminate communication with the LMS return true | false
121
+ this.terminateCalled = true
122
+
123
+ if (result == this.SCORM_FALSE) {
124
+ let errorNumber = this.API.LMSGetLastError()
125
+ let errorString = this.API.LMSGetErrorString(errorNumber)
126
+ let diagnostic = this.API.LMSGetDiagnostic(errorNumber)
127
+
128
+ let errorDescription =
129
+ 'Number: ' +
130
+ errorNumber +
131
+ '\nDescription: ' +
132
+ errorString +
133
+ '\nDiagnostic: ' +
134
+ diagnostic
135
+
136
+ alert(
137
+ 'Error - Could not terminate communication with the LMS.\n\nYour results may not be recorded.\n\n' +
138
+ errorDescription
139
+ )
140
+ return
141
+ }
142
+ this.initialized = false
143
+ },
144
+ //There are situations where a GetValue call is expected to have an error
145
+ //and should not alert the user.
146
+
147
+ GetValue: function (element, checkError) {
148
+ let result
149
+
150
+ if (this.initialized == false || this.terminateCalled == true) {
151
+ return
152
+ }
153
+
154
+ result = this.API.LMSGetValue(element)
155
+
156
+ if (checkError == true && result == '') {
157
+ let errorNumber = this.API.LMSGetLastError()
158
+
159
+ if (errorNumber != this.SCORM_NO_ERROR) {
160
+ let errorString = this.API.LMSGetErrorString(errorNumber)
161
+ let diagnostic = this.API.LMSGetDiagnostic(errorNumber)
162
+
163
+ let errorDescription =
164
+ 'Number: ' +
165
+ errorNumber +
166
+ '\nDescription: ' +
167
+ errorString +
168
+ '\nDiagnostic: ' +
169
+ diagnostic
170
+
171
+ alert(
172
+ 'Error - Could not retrieve a value from the LMS.\n\n' +
173
+ errorDescription
174
+ )
175
+ return ''
176
+ }
177
+ }
178
+
179
+ return result
180
+ },
181
+
182
+ SetValue: function (element, value) {
183
+ let result
184
+
185
+ if (this.initialized == false || this.terminateCalled == true) {
186
+ return
187
+ }
188
+
189
+ result = this.API.LMSSetValue(element, value)
190
+
191
+ if (result == this.SCORM_FALSE) {
192
+ let errorNumber = this.API.LMSGetLastError()
193
+ let errorString = this.API.LMSGetErrorString(errorNumber)
194
+ let diagnostic = this.API.LMSGetDiagnostic(errorNumber)
195
+
196
+ let errorDescription =
197
+ 'Number: ' +
198
+ errorNumber +
199
+ '\nDescription: ' +
200
+ errorString +
201
+ '\nDiagnostic: ' +
202
+ diagnostic
203
+
204
+ alert(
205
+ 'Error - Could not store a value in the LMS.\n\nYour results may not be recorded.\n\n' +
206
+ errorDescription
207
+ )
208
+ return
209
+ }
210
+ },
211
+
212
+ Commit: function () {
213
+ let result
214
+
215
+ result = this.API.LMSCommit('')
216
+
217
+ if (result == this.SCORM_FALSE) {
218
+ let errorNumber = this.API.LMSGetLastError()
219
+ let errorString = this.API.LMSGetErrorString(errorNumber)
220
+ let diagnostic = this.API.LMSGetDiagnostic(errorNumber)
221
+
222
+ let errorDescription =
223
+ 'Number: ' +
224
+ errorNumber +
225
+ '\nDescription: ' +
226
+ errorString +
227
+ '\nDiagnostic: ' +
228
+ diagnostic
229
+
230
+ alert(
231
+ 'Error - Could not invoke Commit.\n\nYour results may not be recorded.\n\n' +
232
+ errorDescription
233
+ )
234
+ return
235
+ }
236
+ },
237
+ //==================== CUSTOME METHODS =============================
238
+ checkForError: function () {
239
+ let error_type = null
240
+ let errorNumber = this.API.LMSGetLastError()
241
+ if (errorNumber !== '' || errorNumber !== '0') {
242
+ let errorString = this.API.LMSGetErrorString(errorNumber)
243
+ let diagnostic = this.API.LMSGetDiagnostic(errorNumber)
244
+ return (error_type = {
245
+ error_number: errorNumber,
246
+ error_name: errorString,
247
+ description: diagnostic
248
+ })
249
+ } else return error_type
250
+ },
251
+
252
+ formateMsg: function (msg, data) {
253
+ msg.replace('$@errorDescription', data)
254
+ },
255
+
256
+ getScormStatus: function () {
257
+ return this.initialized
258
+ },
259
+
260
+ getScormAPI: function () {
261
+ return this.API
262
+ },
263
+
264
+ setCompletionStatus: function (newStatus) {
265
+ this.API.RunTimeData.CompletionStatus = newStatus
266
+ this.Commit()
267
+ },
268
+
269
+ setSucessStatus: function (newStatus) {
270
+ this.API.RunTimeData.SuccessStatus = newStatus
271
+ this.Commit()
272
+ },
273
+ setBookMark(page) {
274
+ this.SetValue('cmi.core.lesson_location', page)
275
+ this.Commit()
276
+ },
277
+ getDataValues() {
278
+ return {
279
+ bookMark: this.GetValue('cmi.core.lesson_location'),
280
+ userData: this.GetValue('cmi.suspend_data'),
281
+ lessonState: this.GetValue('cmi.core.lesson_status')
282
+ }
283
+ }
284
+ }
285
+ }
286
+ }
287
+ }
@@ -1,11 +1,11 @@
1
- import ADL from '../module/xapi/ADL'
2
-
3
- const _ADL = new ADL()
4
-
5
- export const xapiPlugin = {
6
- install(app) {
7
- {
8
- app.config.globalProperties.$xapi = _ADL
9
- }
10
- }
11
- }
1
+ import ADL from '../module/xapi/ADL'
2
+
3
+ const _ADL = new ADL()
4
+
5
+ export const xapiPlugin = {
6
+ install(app) {
7
+ {
8
+ app.config.globalProperties.$xapi = _ADL
9
+ }
10
+ }
11
+ }
@@ -1,33 +1,33 @@
1
- <!doctype html>
2
- <html lang="en" data-build-time="<%= new Date().toLocaleString() %>">
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta http-equiv="X-UA-Compatible" content="IE=edge" />
6
- <meta name="viewport" content="width=device-width,initial-scale=1.0" />
7
- <meta name="apple-mobile-web-app-capable" content="yes" />
8
- <link rel="icon" href="<%= BASE_URL %>favicon.ico" />
9
- <link
10
- href="https://fonts.googleapis.com/css?family=Roboto:100,100i,300,300i,400,400i,500,500i,700,700i,900,900i&display=swap"
11
- rel="stylesheet"
12
- />
13
- <title>dfcad-prototype</title>
14
- <link
15
- rel="stylesheet"
16
- href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900"
17
- />
18
- <link
19
- rel="stylesheet"
20
- href="https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css"
21
- />
22
- </head>
23
- <body>
24
- <noscript>
25
- <strong>
26
- We're sorry but dfcad-prototype doesn't work properly without JavaScript
27
- enabled. Please enable it to continue.
28
- </strong>
29
- </noscript>
30
- <div id="app"></div>
31
- <!-- built files will be auto injected -->
32
- </body>
33
- </html>
1
+ <!doctype html>
2
+ <html lang="en" data-build-time="<%= new Date().toLocaleString() %>">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta http-equiv="X-UA-Compatible" content="IE=edge" />
6
+ <meta name="viewport" content="width=device-width,initial-scale=1.0" />
7
+ <meta name="apple-mobile-web-app-capable" content="yes" />
8
+ <link rel="icon" href="<%= BASE_URL %>favicon.ico" />
9
+ <link
10
+ href="https://fonts.googleapis.com/css?family=Roboto:100,100i,300,300i,400,400i,500,500i,700,700i,900,900i&display=swap"
11
+ rel="stylesheet"
12
+ />
13
+ <title>dfcad-prototype</title>
14
+ <link
15
+ rel="stylesheet"
16
+ href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900"
17
+ />
18
+ <link
19
+ rel="stylesheet"
20
+ href="https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css"
21
+ />
22
+ </head>
23
+ <body>
24
+ <noscript>
25
+ <strong>
26
+ We're sorry but dfcad-prototype doesn't work properly without JavaScript
27
+ enabled. Please enable it to continue.
28
+ </strong>
29
+ </noscript>
30
+ <div id="app"></div>
31
+ <!-- built files will be auto injected -->
32
+ </body>
33
+ </html>