fcad-core-dragon 2.3.0-test.1 → 2.3.0-test.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.
- package/.releaserc +16 -4
- package/CHANGELOG.md +9 -2
- package/package.json +1 -2
- package/src/components/AppBase.vue +26 -14
- package/src/components/AppBaseModule.vue +26 -29
- package/src/components/AppCompMenu.vue +12 -2
- package/src/main.js +7 -9
- package/src/module/xapi/ADL.js +13 -4
- package/src/router/index.js +0 -1
- package/src/shared/generalfuncs.js +2 -2
- package/src/components/AppCompInputMath.vue +0 -20
package/.releaserc
CHANGED
|
@@ -1,9 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"branches": [
|
|
3
3
|
"master",
|
|
4
|
-
{
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
{
|
|
5
|
+
"name": "beta",
|
|
6
|
+
"prerelease": true
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"name": "alpha",
|
|
10
|
+
"prerelease": true
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"name": "test",
|
|
14
|
+
"prerelease": "test"
|
|
15
|
+
}
|
|
7
16
|
],
|
|
8
17
|
"plugins": [
|
|
9
18
|
"@semantic-release/commit-analyzer",
|
|
@@ -18,7 +27,10 @@
|
|
|
18
27
|
[
|
|
19
28
|
"@semantic-release/git",
|
|
20
29
|
{
|
|
21
|
-
"assets": [
|
|
30
|
+
"assets": [
|
|
31
|
+
"package.json",
|
|
32
|
+
"CHANGELOG.md"
|
|
33
|
+
],
|
|
22
34
|
"message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
|
|
23
35
|
}
|
|
24
36
|
],
|
package/CHANGELOG.md
CHANGED
|
@@ -1,10 +1,17 @@
|
|
|
1
|
+
# [2.3.0-test.2](https://git.crosemont.qc.ca/fcad/core/fcad-core-2/compare/v2.3.0-test.1...v2.3.0-test.2) (2026-04-10)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **server connection:** remote parameter prevent production build to connect to LRS when deployed on Moodle ([994e702](https://git.crosemont.qc.ca/fcad/core/fcad-core-2/commit/994e702ce0ed69633798adec8830d33b87680e92))
|
|
7
|
+
|
|
1
8
|
# [2.3.0-test.1](https://git.crosemont.qc.ca/fcad/core/fcad-core-2/compare/v2.2.0...v2.3.0-test.1) (2026-03-27)
|
|
2
9
|
|
|
3
10
|
|
|
4
11
|
### Bug Fixes
|
|
5
12
|
|
|
6
|
-
* **ci-config:** fixed the rule for npm deployment on
|
|
7
|
-
* **ci-config:** fixed the rule for npm deployment on
|
|
13
|
+
* **ci-config:** fixed the rule for npm deployment on branches beta, apha and test ([38923e7](https://git.crosemont.qc.ca/fcad/core/fcad-core-2/commit/38923e7ad775795f2ea27f0d304915a740185892))
|
|
14
|
+
* **ci-config:** fixed the rule for npm deployment on branches beta, apha and test ([808d3de](https://git.crosemont.qc.ca/fcad/core/fcad-core-2/commit/808d3de37bf1d03d420e05fa13412ce17ca72ad1))
|
|
8
15
|
* **dependencies:** fixed depentencies conflicts causing npm ci to fail ([469918e](https://git.crosemont.qc.ca/fcad/core/fcad-core-2/commit/469918e24d0b2948adf7d2f0135d80aeba2b35a8))
|
|
9
16
|
* remaning release config file to .releaserc ([2a746d0](https://git.crosemont.qc.ca/fcad/core/fcad-core-2/commit/2a746d0b294577128937a22fae8f556984e97fda))
|
|
10
17
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fcad-core-dragon",
|
|
3
|
-
"version": "2.3.0-test.
|
|
3
|
+
"version": "2.3.0-test.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./src/main.js",
|
|
@@ -28,7 +28,6 @@
|
|
|
28
28
|
"axios": "^1.6.8",
|
|
29
29
|
"gsap": "^3.12.5",
|
|
30
30
|
"idb": "^8.0.0",
|
|
31
|
-
"mathjs": "^15.1.0",
|
|
32
31
|
"mobile-detect": "^1.4.5",
|
|
33
32
|
"pinia": "^3.0.3",
|
|
34
33
|
"tiny-emitter": "^2.1.0",
|
|
@@ -205,7 +205,9 @@ export default {
|
|
|
205
205
|
appReady: {
|
|
206
206
|
handler(newValue) {
|
|
207
207
|
if (newValue) {
|
|
208
|
-
this
|
|
208
|
+
this.$nextTick(() => {
|
|
209
|
+
this.setInitialLoadingDone()
|
|
210
|
+
})
|
|
209
211
|
}
|
|
210
212
|
}
|
|
211
213
|
}
|
|
@@ -372,8 +374,9 @@ export default {
|
|
|
372
374
|
)
|
|
373
375
|
},
|
|
374
376
|
|
|
375
|
-
setInitialLoadingDone() {
|
|
377
|
+
async setInitialLoadingDone() {
|
|
376
378
|
this.initialLoading = false
|
|
379
|
+
|
|
377
380
|
if (this.bookmarkActive) {
|
|
378
381
|
const bookmark = this.getLessonPosition[0]
|
|
379
382
|
this.$router.push({ name: bookmark })
|
|
@@ -763,11 +766,25 @@ export default {
|
|
|
763
766
|
extensions: [
|
|
764
767
|
{
|
|
765
768
|
id: 'ending-point',
|
|
766
|
-
content: (() =>
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
769
|
+
content: (() => {
|
|
770
|
+
const {
|
|
771
|
+
name,
|
|
772
|
+
meta: { activity_ref, id, type }
|
|
773
|
+
} = this.$route
|
|
774
|
+
let bookmark = {
|
|
775
|
+
name,
|
|
776
|
+
activity_ref,
|
|
777
|
+
id,
|
|
778
|
+
type
|
|
779
|
+
}
|
|
780
|
+
if (this.$route.name == 'menu') {
|
|
781
|
+
bookmark =
|
|
782
|
+
this.getLessonPosition.length > 0
|
|
783
|
+
? this.getLessonPosition[0]
|
|
784
|
+
: this.$helper.getRoutesFromVueRouter().meta.children[0]
|
|
785
|
+
}
|
|
786
|
+
return bookmark
|
|
787
|
+
})()
|
|
771
788
|
},
|
|
772
789
|
{
|
|
773
790
|
id: 'user-data',
|
|
@@ -775,15 +792,11 @@ export default {
|
|
|
775
792
|
routeHistory: (() => {
|
|
776
793
|
const history = this.getRouteHistory.toReversed() //get the route history from the last
|
|
777
794
|
|
|
778
|
-
history[0] = this.$route.meta // change the last recored route to the current route
|
|
795
|
+
if (this.$route.name !== 'menu') history[0] = this.$route.meta // change the last recored route to the current route
|
|
779
796
|
|
|
780
797
|
return history.toReversed()
|
|
781
798
|
})(),
|
|
782
|
-
|
|
783
|
-
this.$route.name == 'menu'
|
|
784
|
-
? this.$helper.getRoutesFromVueRouter().meta.children[0]
|
|
785
|
-
._namedRoute
|
|
786
|
-
: this.$route.name)(),
|
|
799
|
+
|
|
787
800
|
playbarValues: {
|
|
788
801
|
...this.getMediaPlaybarValues()
|
|
789
802
|
},
|
|
@@ -918,7 +931,6 @@ export default {
|
|
|
918
931
|
}
|
|
919
932
|
|
|
920
933
|
const fetchParams = [lessonProgressParam, lessonStateParam]
|
|
921
|
-
|
|
922
934
|
const { userData, savedPoint, playbarValues, lessonStatus } =
|
|
923
935
|
await this.$xapi._getBulkData(fetchParams)
|
|
924
936
|
|
|
@@ -374,6 +374,7 @@ export default {
|
|
|
374
374
|
'normal',
|
|
375
375
|
'branching'
|
|
376
376
|
]
|
|
377
|
+
|
|
377
378
|
if (trackedRouteType.includes(this.$route.meta.type)) {
|
|
378
379
|
//Navigation should only trigger timer and xapi statement when app is ready and activity has changed
|
|
379
380
|
if (!this.activityHasChanged || !this.appReady) return
|
|
@@ -468,11 +469,26 @@ export default {
|
|
|
468
469
|
extensions: [
|
|
469
470
|
{
|
|
470
471
|
id: 'ending-point',
|
|
471
|
-
content: (() =>
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
472
|
+
content: (() => {
|
|
473
|
+
const {
|
|
474
|
+
name,
|
|
475
|
+
meta: { activity_ref, id, type }
|
|
476
|
+
} = this.$route
|
|
477
|
+
let bookmark = {
|
|
478
|
+
name,
|
|
479
|
+
activity_ref,
|
|
480
|
+
id,
|
|
481
|
+
type
|
|
482
|
+
}
|
|
483
|
+
if (this.$route.name == 'menu') {
|
|
484
|
+
bookmark =
|
|
485
|
+
this.getLessonPosition.length > 0
|
|
486
|
+
? this.getLessonPosition[0]
|
|
487
|
+
: this.$helper.getRoutesFromVueRouter().meta
|
|
488
|
+
.children[0]
|
|
489
|
+
}
|
|
490
|
+
return bookmark
|
|
491
|
+
})()
|
|
476
492
|
}
|
|
477
493
|
],
|
|
478
494
|
duration: this.appTimer.ISOTimeParser(this.lessonDuration)
|
|
@@ -545,21 +561,13 @@ export default {
|
|
|
545
561
|
this.updateIntroStatus(this.theIntroIsActivated)
|
|
546
562
|
//Communication events
|
|
547
563
|
this.$bus.$on('open-popup', this.openPopup)
|
|
548
|
-
|
|
549
564
|
this.$bus.$on('close-popup', this.closePopup)
|
|
550
|
-
|
|
551
565
|
this.$bus.$on('start-onboarding', this.startOnboarding)
|
|
552
|
-
|
|
553
566
|
this.$bus.$on('open-sidebar', this.openSidebar)
|
|
554
|
-
|
|
555
567
|
this.$bus.$on('close-sidebar', this.closeSidebar)
|
|
556
|
-
|
|
557
568
|
this.$bus.$on('videoFullScreen', this.onVideoFullScreen)
|
|
558
|
-
|
|
559
569
|
this.$bus.$on('save-to-scorm', this.saveToScorm)
|
|
560
|
-
|
|
561
570
|
this.$bus.$on('launch-xapi-resource', this.launchResource)
|
|
562
|
-
|
|
563
571
|
this.$bus.$on('update-route-history', this.updateRouteHistory)
|
|
564
572
|
this.$bus.$on('update-content', this.updateContent)
|
|
565
573
|
this.$bus.$on('show-transcript', this.openTranscript)
|
|
@@ -661,7 +669,6 @@ export default {
|
|
|
661
669
|
//delay animation
|
|
662
670
|
this.rightSidebarVisible = true
|
|
663
671
|
this.updatesideBIsOpen(this.rightSidebarVisible)
|
|
664
|
-
// setTimeout(() => {
|
|
665
672
|
const rightSidebarContent = this.getRightSidebar() // Emelent displayed in the sidebar-body
|
|
666
673
|
if (!rightSidebarContent) return
|
|
667
674
|
rightSidebarContent.scrollTop = 0
|
|
@@ -669,7 +676,6 @@ export default {
|
|
|
669
676
|
rSidebar.dispatchEvent(this.rightSidebarEvent)
|
|
670
677
|
rSidebar.setAttribute('tabindex', -1)
|
|
671
678
|
this.resetFocus(rSidebar) //set focus on the sidebar
|
|
672
|
-
// }, 100)
|
|
673
679
|
},
|
|
674
680
|
/**
|
|
675
681
|
* @description close the right sidebar component
|
|
@@ -849,7 +855,6 @@ export default {
|
|
|
849
855
|
this.$bus.$emit('set-comp-status', 'appBaseModule', 'loading')
|
|
850
856
|
this.updateCurrentTimeline(null)
|
|
851
857
|
this.updateCurrentMediaElements([])
|
|
852
|
-
// this.updateCurrentPage({})
|
|
853
858
|
this.$bus.$emit('set-comp-status', 'appBaseModule', 'ready')
|
|
854
859
|
res(this.getCompStatusTracker)
|
|
855
860
|
})
|
|
@@ -1013,7 +1018,6 @@ export default {
|
|
|
1013
1018
|
|
|
1014
1019
|
// Add route route in history
|
|
1015
1020
|
this.routeData.push(from.meta)
|
|
1016
|
-
|
|
1017
1021
|
if (this.routeData.length >= 4) this.routeData.shift()
|
|
1018
1022
|
},
|
|
1019
1023
|
|
|
@@ -1419,15 +1423,12 @@ export default {
|
|
|
1419
1423
|
routeHistory: (() => {
|
|
1420
1424
|
const history = this.getRouteHistory.toReversed() //get the route history from the last
|
|
1421
1425
|
|
|
1422
|
-
|
|
1426
|
+
if (this.$route.name !== 'menu')
|
|
1427
|
+
history[0] = this.$route.meta // change the last recored route to the current route
|
|
1423
1428
|
|
|
1424
1429
|
return history.toReversed()
|
|
1425
1430
|
})(),
|
|
1426
|
-
|
|
1427
|
-
this.$route.name == 'menu'
|
|
1428
|
-
? this.$helper.getRoutesFromVueRouter().meta.children[0]
|
|
1429
|
-
._namedRoute
|
|
1430
|
-
: this.$route.name)(),
|
|
1431
|
+
|
|
1431
1432
|
playbarValues: {
|
|
1432
1433
|
...this.getMediaPlaybarValues()
|
|
1433
1434
|
},
|
|
@@ -1481,15 +1482,11 @@ export default {
|
|
|
1481
1482
|
routeHistory: (() => {
|
|
1482
1483
|
const history = this.getRouteHistory.toReversed() //get the route history from the last
|
|
1483
1484
|
|
|
1484
|
-
|
|
1485
|
+
if (this.$route.name !== 'menu')
|
|
1486
|
+
history[0] = this.$route.meta // change the last recored route to the current route
|
|
1485
1487
|
|
|
1486
1488
|
return history.toReversed()
|
|
1487
1489
|
})(),
|
|
1488
|
-
savedPoint: (() =>
|
|
1489
|
-
this.$route.name == 'menu'
|
|
1490
|
-
? this.$helper.getRoutesFromVueRouter().meta.children[0]
|
|
1491
|
-
._namedRoute
|
|
1492
|
-
: this.$route.name)(),
|
|
1493
1490
|
playbarValues: {
|
|
1494
1491
|
...this.getMediaPlaybarValues()
|
|
1495
1492
|
},
|
|
@@ -112,7 +112,8 @@ export default {
|
|
|
112
112
|
'getMenuSettings',
|
|
113
113
|
'getAppDebugMode',
|
|
114
114
|
'getAppConfigs',
|
|
115
|
-
'getAllCompleted'
|
|
115
|
+
'getAllCompleted',
|
|
116
|
+
'getLessonPosition'
|
|
116
117
|
]),
|
|
117
118
|
appDebugMode() {
|
|
118
119
|
return this.getAppDebugMode
|
|
@@ -177,10 +178,12 @@ export default {
|
|
|
177
178
|
}
|
|
178
179
|
}, 2000)
|
|
179
180
|
},
|
|
181
|
+
|
|
180
182
|
//Go to the last route you were before the menu
|
|
181
183
|
GoToLastRoute() {
|
|
182
184
|
let lastRoute
|
|
183
185
|
let path
|
|
186
|
+
|
|
184
187
|
//Get all activity state (menu not included)
|
|
185
188
|
const { allActivitiesState } = this.progressWithMenu()
|
|
186
189
|
let state = Object.values(allActivitiesState)
|
|
@@ -200,7 +203,10 @@ export default {
|
|
|
200
203
|
}
|
|
201
204
|
|
|
202
205
|
// create path from the last you saw
|
|
203
|
-
if (lastRoute)
|
|
206
|
+
if (lastRoute)
|
|
207
|
+
path = this.createdRoute(
|
|
208
|
+
this.getRouteHistory[this.getRouteHistory.length - 1]
|
|
209
|
+
)
|
|
204
210
|
|
|
205
211
|
return path
|
|
206
212
|
},
|
|
@@ -236,6 +242,10 @@ export default {
|
|
|
236
242
|
|
|
237
243
|
//Define path
|
|
238
244
|
path = page !== ' ' ? `${activity}.page_${page}` : activity
|
|
245
|
+
|
|
246
|
+
if (path == 'activite_0') path = 'introduction'
|
|
247
|
+
if (path == 'activite_99') path = 'conclusion'
|
|
248
|
+
|
|
239
249
|
return path
|
|
240
250
|
},
|
|
241
251
|
progressWithMenu() {
|
package/src/main.js
CHANGED
|
@@ -340,7 +340,7 @@ export default {
|
|
|
340
340
|
}
|
|
341
341
|
/* Local Method for data fetching */
|
|
342
342
|
const fetchDatasFromServer = async (config) => {
|
|
343
|
-
|
|
343
|
+
let {
|
|
344
344
|
$scorm,
|
|
345
345
|
$xapi,
|
|
346
346
|
$idb,
|
|
@@ -352,7 +352,10 @@ export default {
|
|
|
352
352
|
remote
|
|
353
353
|
} = config
|
|
354
354
|
|
|
355
|
+
if (window.location.hostname.includes('cegepadistance.ca')) remote = true
|
|
356
|
+
|
|
355
357
|
let server = remote ? specification : 'local'
|
|
358
|
+
|
|
356
359
|
const unknownHost =
|
|
357
360
|
!window.location.hostname.includes('cegepadistance.ca') &&
|
|
358
361
|
window.location.hostname !== 'localhost'
|
|
@@ -416,18 +419,13 @@ export default {
|
|
|
416
419
|
|
|
417
420
|
const fetchParams = [lessonProgressParam, lessonStateParam]
|
|
418
421
|
|
|
419
|
-
const { userData, preferredSettings, lessonStatus } =
|
|
422
|
+
const { userData, preferredSettings, lessonStatus, savedPoint } =
|
|
420
423
|
await $xapi._getBulkData(fetchParams)
|
|
421
424
|
|
|
422
|
-
const {
|
|
423
|
-
routeHistory = [],
|
|
424
|
-
savedPoint,
|
|
425
|
-
playbarValues,
|
|
426
|
-
...progress
|
|
427
|
-
} = userData
|
|
425
|
+
const { routeHistory = [], playbarValues, ...progress } = userData
|
|
428
426
|
|
|
429
427
|
const completedState = lessonStatus || {}
|
|
430
|
-
const lessonPosition = savedPoint
|
|
428
|
+
const lessonPosition = savedPoint.name ? savedPoint : null
|
|
431
429
|
|
|
432
430
|
data = {
|
|
433
431
|
progress,
|
package/src/module/xapi/ADL.js
CHANGED
|
@@ -4,7 +4,6 @@ import xAPILaunch from './launch'
|
|
|
4
4
|
import { defineUtils } from './utils'
|
|
5
5
|
import { xapiwrapper } from './wrapper'
|
|
6
6
|
import { xapiStatement } from './xapiStatement'
|
|
7
|
-
import { de } from 'vuetify/locale'
|
|
8
7
|
|
|
9
8
|
//ref: https://github.com/adlnet/xAPI-Spec/blob/master/xAPI-Communication.md#partthree
|
|
10
9
|
|
|
@@ -284,7 +283,7 @@ export default class ADL {
|
|
|
284
283
|
}
|
|
285
284
|
}
|
|
286
285
|
|
|
287
|
-
return savedPoint && savedPoint.length > 0 ? savedPoint[0] :
|
|
286
|
+
return savedPoint && savedPoint.length > 0 ? savedPoint[0] : null
|
|
288
287
|
}
|
|
289
288
|
|
|
290
289
|
/* @description: Helper to get the Preferred Settings of the user
|
|
@@ -435,7 +434,8 @@ export default class ADL {
|
|
|
435
434
|
}
|
|
436
435
|
let userData = {},
|
|
437
436
|
preferredSettings = {},
|
|
438
|
-
lessonStatus = {}
|
|
437
|
+
lessonStatus = {},
|
|
438
|
+
savedPoint = null
|
|
439
439
|
|
|
440
440
|
let { response } = await this.XAPIWrapper.getStatements(paramList)
|
|
441
441
|
|
|
@@ -492,6 +492,14 @@ export default class ADL {
|
|
|
492
492
|
|
|
493
493
|
break
|
|
494
494
|
}
|
|
495
|
+
case extension.includes('ending-point'): {
|
|
496
|
+
const dataExtension = allExtensionsKeys.filter((extension) =>
|
|
497
|
+
extension.includes('ending-point')
|
|
498
|
+
)
|
|
499
|
+
savedPoint =
|
|
500
|
+
lastRecord.object.definition.extensions[dataExtension[0]]
|
|
501
|
+
break
|
|
502
|
+
}
|
|
495
503
|
default: {
|
|
496
504
|
return
|
|
497
505
|
}
|
|
@@ -503,7 +511,8 @@ export default class ADL {
|
|
|
503
511
|
return {
|
|
504
512
|
userData,
|
|
505
513
|
lessonStatus,
|
|
506
|
-
preferredSettings
|
|
514
|
+
preferredSettings,
|
|
515
|
+
savedPoint
|
|
507
516
|
}
|
|
508
517
|
}
|
|
509
518
|
}
|
package/src/router/index.js
CHANGED
|
@@ -31,7 +31,6 @@ router.beforeResolve((to, from, next) => {
|
|
|
31
31
|
if (getWidgetOpen) app.config.globalProperties.$bus.$emit('close-widget') //close opened widget
|
|
32
32
|
if (getPopupIsOpen) app.config.globalProperties.$bus.$emit('close-popup') //close the popup
|
|
33
33
|
if (getSidebarIsOpen) app.config.globalProperties.$bus.$emit('close-sidebar') //close the sidebar
|
|
34
|
-
|
|
35
34
|
if (from.name !== 'module')
|
|
36
35
|
app.config.globalProperties.$bus.$emit('update-route-history', from)
|
|
37
36
|
|
|
@@ -129,9 +129,9 @@ const fileAssets = {
|
|
|
129
129
|
},
|
|
130
130
|
|
|
131
131
|
/**
|
|
132
|
-
* @description
|
|
132
|
+
* @description build a map tree of all the file in the folder
|
|
133
|
+
* './src/module' of the project with name respecting following condition:
|
|
133
134
|
* @param {String} a- array of file for use case
|
|
134
|
-
* @param {Object} [requiredArgs] list of arguments to include consider in validation ()
|
|
135
135
|
*/
|
|
136
136
|
buildMapTree: (a) => {
|
|
137
137
|
// Load files in module folder
|