fcad-core-dragon 2.1.0-beta.4 → 2.1.0
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/.editorconfig +8 -33
- package/.prettierrc +11 -0
- package/.vscode/extensions.json +8 -0
- package/.vscode/settings.json +16 -0
- package/CHANGELOG +20 -0
- package/eslint.config.js +60 -0
- package/package.json +9 -9
- package/src/$locales/en.json +3 -3
- package/src/$locales/fr.json +3 -3
- package/src/assets/data/onboardingMessages.json +47 -47
- package/src/components/AppBase.vue +5 -6
- package/src/components/AppBaseErrorDisplay.vue +438 -438
- package/src/components/AppBaseFlipCard.vue +84 -84
- package/src/components/AppBaseModule.vue +15 -17
- package/src/components/AppBasePage.vue +866 -783
- package/src/components/AppBasePopover.vue +41 -41
- package/src/components/AppBaseSkeleton.vue +24 -3
- package/src/components/AppCompAudio.vue +12 -2
- package/src/components/AppCompInputCheckBoxNx.vue +1 -2
- package/src/components/AppCompInputRadioNx.vue +8 -2
- package/src/components/AppCompInputTextToFillDropdownNx.vue +45 -0
- package/src/components/AppCompMenu.vue +424 -423
- package/src/components/AppCompNavigation.vue +2 -2
- package/src/components/AppCompPlayBarNext.vue +123 -94
- package/src/components/AppCompPopUpNext.vue +2 -2
- package/src/components/AppCompQuizNext.vue +12 -2
- package/src/components/AppCompQuizRecall.vue +10 -4
- package/src/components/AppCompSettingsMenu.vue +172 -172
- package/src/components/AppCompTableOfContent.vue +1 -4
- package/src/components/AppCompVideoPlayer.vue +7 -0
- package/src/components/AppCompViewDisplay.vue +6 -6
- package/src/composables/useTimer.js +17 -20
- package/src/externalComps/ModuleView.vue +22 -22
- package/src/externalComps/SummaryView.vue +91 -91
- package/src/module/stores/appStore.js +0 -1
- package/src/module/xapi/Crypto/Hasher.js +241 -241
- package/src/module/xapi/Crypto/WordArray.js +278 -278
- package/src/module/xapi/Crypto/algorithms/BufferedBlockAlgorithm.js +103 -103
- package/src/module/xapi/Crypto/algorithms/C_algo.js +315 -315
- package/src/module/xapi/Crypto/algorithms/HMAC.js +9 -9
- package/src/module/xapi/Crypto/algorithms/SHA1.js +9 -9
- package/src/module/xapi/Crypto/encoders/Base.js +105 -105
- package/src/module/xapi/Crypto/encoders/Base64.js +99 -99
- package/src/module/xapi/Crypto/encoders/Hex.js +61 -61
- package/src/module/xapi/Crypto/encoders/Latin1.js +61 -61
- package/src/module/xapi/Crypto/encoders/Utf8.js +45 -45
- package/src/module/xapi/Crypto/index.js +53 -53
- package/src/module/xapi/Statement/activity.js +47 -47
- package/src/module/xapi/Statement/agent.js +55 -55
- package/src/module/xapi/Statement/group.js +26 -26
- package/src/module/xapi/Statement/index.js +259 -259
- package/src/module/xapi/Statement/statement.js +253 -253
- package/src/module/xapi/Statement/statementRef.js +23 -23
- package/src/module/xapi/Statement/substatement.js +22 -22
- package/src/module/xapi/Statement/verb.js +36 -36
- package/src/module/xapi/activitytypes.js +17 -17
- package/src/module/xapi/utils.js +167 -167
- package/src/module/xapi/verbs.js +294 -294
- package/src/module/xapi/xapiStatement.js +444 -444
- package/src/plugins/bus.js +8 -8
- package/src/plugins/helper.js +4 -0
- package/src/plugins/save.js +37 -37
- package/src/plugins/scorm.js +287 -287
- package/src/plugins/xapi.js +11 -11
- package/src/public/index.html +33 -33
- package/src/router/index.js +1 -1
- package/src/shared/validators.js +22 -6
- package/.eslintignore +0 -29
- package/.eslintrc.cjs +0 -81
- package/bk.scss +0 -117
|
@@ -1,172 +1,172 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<b-sidebar
|
|
3
|
-
id="sidebar-settings"
|
|
4
|
-
title="Settings"
|
|
5
|
-
right
|
|
6
|
-
shadow
|
|
7
|
-
backdrop
|
|
8
|
-
no-header
|
|
9
|
-
@hidden="onClose"
|
|
10
|
-
>
|
|
11
|
-
<div class="pl-3 pr-3">
|
|
12
|
-
<b-form-group :label="$t('user_settings.title')">
|
|
13
|
-
<b-form-checkbox
|
|
14
|
-
v-for="(setting, index) in Object.entries(settingsSelected)"
|
|
15
|
-
:key="index"
|
|
16
|
-
v-model="settingsSelected[setting[0]]"
|
|
17
|
-
:aria-describedby="ariaDescribedby"
|
|
18
|
-
:name="`parameter-${setting[0]}`"
|
|
19
|
-
:text-field="$t(`user_settings.${setting[0]}`)"
|
|
20
|
-
switch
|
|
21
|
-
stacked
|
|
22
|
-
size="lg"
|
|
23
|
-
@change="onSettingsChange"
|
|
24
|
-
>
|
|
25
|
-
<span>{{ $t(`user_settings.${setting[0]}`) }}</span>
|
|
26
|
-
</b-form-checkbox>
|
|
27
|
-
</b-form-group>
|
|
28
|
-
<app-base-button
|
|
29
|
-
v-b-toggle.sidebar-settings
|
|
30
|
-
class="float-right btn-primary"
|
|
31
|
-
:title="$t('user_settings.close')"
|
|
32
|
-
>
|
|
33
|
-
{{ $t('user_settings.close') }}
|
|
34
|
-
</app-base-button>
|
|
35
|
-
</div>
|
|
36
|
-
</b-sidebar>
|
|
37
|
-
</template>
|
|
38
|
-
|
|
39
|
-
<script>
|
|
40
|
-
import { mapState, mapActions } from 'pinia'
|
|
41
|
-
import { useAppStore } from '../module/stores/appStore'
|
|
42
|
-
import AppBaseButton from './AppBaseButton.vue'
|
|
43
|
-
|
|
44
|
-
export default {
|
|
45
|
-
components: { AppBaseButton },
|
|
46
|
-
props: {},
|
|
47
|
-
data() {
|
|
48
|
-
return {
|
|
49
|
-
settingsSelected: {},
|
|
50
|
-
settingsNeedUpdate: false
|
|
51
|
-
}
|
|
52
|
-
},
|
|
53
|
-
computed: {
|
|
54
|
-
...mapState(useAppStore, [
|
|
55
|
-
'getApplicationSettings',
|
|
56
|
-
'getModuleInfo',
|
|
57
|
-
'getUserInteraction',
|
|
58
|
-
'getConnectionInfo',
|
|
59
|
-
'onboardingEnabled'
|
|
60
|
-
]),
|
|
61
|
-
settingsOptions() {
|
|
62
|
-
return this.settingsOptionsELPlus
|
|
63
|
-
}
|
|
64
|
-
},
|
|
65
|
-
watch: {
|
|
66
|
-
getApplicationSettings: {
|
|
67
|
-
immediate: true,
|
|
68
|
-
deep: true,
|
|
69
|
-
handler() {
|
|
70
|
-
this.getAppSettingsInStore()
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
},
|
|
74
|
-
created() {
|
|
75
|
-
setTimeout(() => this.getAppSettingsInStore(), 1700)
|
|
76
|
-
|
|
77
|
-
this.$bus.$on('save-settings', (settings) => {
|
|
78
|
-
this.saveSettings(settings)
|
|
79
|
-
})
|
|
80
|
-
},
|
|
81
|
-
methods: {
|
|
82
|
-
...mapActions(useAppStore, [
|
|
83
|
-
'setApplicationSettings',
|
|
84
|
-
'updateUserMetaData'
|
|
85
|
-
]),
|
|
86
|
-
getAppSettingsInStore() {
|
|
87
|
-
this.settingsSelected = { ...this.getApplicationSettings }
|
|
88
|
-
},
|
|
89
|
-
|
|
90
|
-
//Save user settings to the store
|
|
91
|
-
onSettingsChange() {
|
|
92
|
-
this.settingsNeedUpdate = true
|
|
93
|
-
this.saveSettingsToStore(this.settingsSelected)
|
|
94
|
-
},
|
|
95
|
-
saveSettingsToStore(settings) {
|
|
96
|
-
this.setApplicationSettings(settings)
|
|
97
|
-
},
|
|
98
|
-
/**
|
|
99
|
-
* @description Save the user preferred settings to vue store and LRS or local store:
|
|
100
|
-
* LRS: Send a XAPI Statement to the LRS
|
|
101
|
-
* IndexedDB: Set a new Key for preferred settings in the userInteraction in store
|
|
102
|
-
* Update current value of settings
|
|
103
|
-
* @param {Object} appSettings - group of application settings {autoplay, subtitles, onboarding}
|
|
104
|
-
*
|
|
105
|
-
*/
|
|
106
|
-
saveSettings(appSettings) {
|
|
107
|
-
this.saveSettingsToStore(appSettings) //save to store
|
|
108
|
-
|
|
109
|
-
if (
|
|
110
|
-
this.getModuleInfo.packageType === 'xapi' &&
|
|
111
|
-
this.getConnectionInfo &&
|
|
112
|
-
this.getConnectionInfo.remote
|
|
113
|
-
) {
|
|
114
|
-
let text
|
|
115
|
-
//Defining the text to display for stmt description and definition
|
|
116
|
-
switch (this.$i18n.locale) {
|
|
117
|
-
case 'fr':
|
|
118
|
-
if (this.getModuleInfo.courseID)
|
|
119
|
-
text = `Le ${this.getModuleInfo.id} de ${this.getModuleInfo.courseID}`
|
|
120
|
-
else text = `Le ${this.getModuleInfo.id}`
|
|
121
|
-
break
|
|
122
|
-
case 'en':
|
|
123
|
-
if (this.getModuleInfo.courseID)
|
|
124
|
-
text = `The ${this.getModuleInfo.id} of ${this.getModuleInfo.courseID}`
|
|
125
|
-
else text = `The ${this.getModuleInfo.id}`
|
|
126
|
-
break
|
|
127
|
-
}
|
|
128
|
-
//Creating custom statement
|
|
129
|
-
const stmt = {
|
|
130
|
-
id: (() => {
|
|
131
|
-
return this.getModuleInfo.courseID
|
|
132
|
-
? this.getModuleInfo.courseID
|
|
133
|
-
: null
|
|
134
|
-
})(),
|
|
135
|
-
verb: 'preferred',
|
|
136
|
-
definition: text,
|
|
137
|
-
description: text,
|
|
138
|
-
extensions: [
|
|
139
|
-
{
|
|
140
|
-
id: 'application-settings',
|
|
141
|
-
content: {
|
|
142
|
-
userSettings: { ...appSettings }
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
]
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
setTimeout(() => {
|
|
149
|
-
this.$bus.$emit('send-xapi-statement', stmt) //send xapi statement
|
|
150
|
-
}, 1000)
|
|
151
|
-
} else {
|
|
152
|
-
this.$set(this.getUserInteraction, 'userSettings', appSettings) // adding the usersettings to user Interaction to save to save to the local DB
|
|
153
|
-
this.updateUserMetaData(this.getUserInteraction) //force update of the userInteraction to ensure saving of settings in local DB
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
//update sidebar data
|
|
157
|
-
this.getAppSettingsInStore()
|
|
158
|
-
},
|
|
159
|
-
|
|
160
|
-
/**
|
|
161
|
-
* @description -Action to perform when the sidebar closed- will require saving when changing occurred
|
|
162
|
-
*/
|
|
163
|
-
onClose() {
|
|
164
|
-
if (this.settingsNeedUpdate) {
|
|
165
|
-
this.saveSettingsToStore(this.settingsSelected)
|
|
166
|
-
this.saveSettings(this.getApplicationSettings)
|
|
167
|
-
this.settingsNeedUpdate = false
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
</script>
|
|
1
|
+
<template>
|
|
2
|
+
<b-sidebar
|
|
3
|
+
id="sidebar-settings"
|
|
4
|
+
title="Settings"
|
|
5
|
+
right
|
|
6
|
+
shadow
|
|
7
|
+
backdrop
|
|
8
|
+
no-header
|
|
9
|
+
@hidden="onClose"
|
|
10
|
+
>
|
|
11
|
+
<div class="pl-3 pr-3">
|
|
12
|
+
<b-form-group :label="$t('user_settings.title')">
|
|
13
|
+
<b-form-checkbox
|
|
14
|
+
v-for="(setting, index) in Object.entries(settingsSelected)"
|
|
15
|
+
:key="index"
|
|
16
|
+
v-model="settingsSelected[setting[0]]"
|
|
17
|
+
:aria-describedby="ariaDescribedby"
|
|
18
|
+
:name="`parameter-${setting[0]}`"
|
|
19
|
+
:text-field="$t(`user_settings.${setting[0]}`)"
|
|
20
|
+
switch
|
|
21
|
+
stacked
|
|
22
|
+
size="lg"
|
|
23
|
+
@change="onSettingsChange"
|
|
24
|
+
>
|
|
25
|
+
<span>{{ $t(`user_settings.${setting[0]}`) }}</span>
|
|
26
|
+
</b-form-checkbox>
|
|
27
|
+
</b-form-group>
|
|
28
|
+
<app-base-button
|
|
29
|
+
v-b-toggle.sidebar-settings
|
|
30
|
+
class="float-right btn-primary"
|
|
31
|
+
:title="$t('user_settings.close')"
|
|
32
|
+
>
|
|
33
|
+
{{ $t('user_settings.close') }}
|
|
34
|
+
</app-base-button>
|
|
35
|
+
</div>
|
|
36
|
+
</b-sidebar>
|
|
37
|
+
</template>
|
|
38
|
+
|
|
39
|
+
<script>
|
|
40
|
+
import { mapState, mapActions } from 'pinia'
|
|
41
|
+
import { useAppStore } from '../module/stores/appStore'
|
|
42
|
+
import AppBaseButton from './AppBaseButton.vue'
|
|
43
|
+
|
|
44
|
+
export default {
|
|
45
|
+
components: { AppBaseButton },
|
|
46
|
+
props: {},
|
|
47
|
+
data() {
|
|
48
|
+
return {
|
|
49
|
+
settingsSelected: {},
|
|
50
|
+
settingsNeedUpdate: false
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
computed: {
|
|
54
|
+
...mapState(useAppStore, [
|
|
55
|
+
'getApplicationSettings',
|
|
56
|
+
'getModuleInfo',
|
|
57
|
+
'getUserInteraction',
|
|
58
|
+
'getConnectionInfo',
|
|
59
|
+
'onboardingEnabled'
|
|
60
|
+
]),
|
|
61
|
+
settingsOptions() {
|
|
62
|
+
return this.settingsOptionsELPlus
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
watch: {
|
|
66
|
+
getApplicationSettings: {
|
|
67
|
+
immediate: true,
|
|
68
|
+
deep: true,
|
|
69
|
+
handler() {
|
|
70
|
+
this.getAppSettingsInStore()
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
created() {
|
|
75
|
+
setTimeout(() => this.getAppSettingsInStore(), 1700)
|
|
76
|
+
|
|
77
|
+
this.$bus.$on('save-settings', (settings) => {
|
|
78
|
+
this.saveSettings(settings)
|
|
79
|
+
})
|
|
80
|
+
},
|
|
81
|
+
methods: {
|
|
82
|
+
...mapActions(useAppStore, [
|
|
83
|
+
'setApplicationSettings',
|
|
84
|
+
'updateUserMetaData'
|
|
85
|
+
]),
|
|
86
|
+
getAppSettingsInStore() {
|
|
87
|
+
this.settingsSelected = { ...this.getApplicationSettings }
|
|
88
|
+
},
|
|
89
|
+
|
|
90
|
+
//Save user settings to the store
|
|
91
|
+
onSettingsChange() {
|
|
92
|
+
this.settingsNeedUpdate = true
|
|
93
|
+
this.saveSettingsToStore(this.settingsSelected)
|
|
94
|
+
},
|
|
95
|
+
saveSettingsToStore(settings) {
|
|
96
|
+
this.setApplicationSettings(settings)
|
|
97
|
+
},
|
|
98
|
+
/**
|
|
99
|
+
* @description Save the user preferred settings to vue store and LRS or local store:
|
|
100
|
+
* LRS: Send a XAPI Statement to the LRS
|
|
101
|
+
* IndexedDB: Set a new Key for preferred settings in the userInteraction in store
|
|
102
|
+
* Update current value of settings
|
|
103
|
+
* @param {Object} appSettings - group of application settings {autoplay, subtitles, onboarding}
|
|
104
|
+
*
|
|
105
|
+
*/
|
|
106
|
+
saveSettings(appSettings) {
|
|
107
|
+
this.saveSettingsToStore(appSettings) //save to store
|
|
108
|
+
|
|
109
|
+
if (
|
|
110
|
+
this.getModuleInfo.packageType === 'xapi' &&
|
|
111
|
+
this.getConnectionInfo &&
|
|
112
|
+
this.getConnectionInfo.remote
|
|
113
|
+
) {
|
|
114
|
+
let text
|
|
115
|
+
//Defining the text to display for stmt description and definition
|
|
116
|
+
switch (this.$i18n.locale) {
|
|
117
|
+
case 'fr':
|
|
118
|
+
if (this.getModuleInfo.courseID)
|
|
119
|
+
text = `Le ${this.getModuleInfo.id} de ${this.getModuleInfo.courseID}`
|
|
120
|
+
else text = `Le ${this.getModuleInfo.id}`
|
|
121
|
+
break
|
|
122
|
+
case 'en':
|
|
123
|
+
if (this.getModuleInfo.courseID)
|
|
124
|
+
text = `The ${this.getModuleInfo.id} of ${this.getModuleInfo.courseID}`
|
|
125
|
+
else text = `The ${this.getModuleInfo.id}`
|
|
126
|
+
break
|
|
127
|
+
}
|
|
128
|
+
//Creating custom statement
|
|
129
|
+
const stmt = {
|
|
130
|
+
id: (() => {
|
|
131
|
+
return this.getModuleInfo.courseID
|
|
132
|
+
? this.getModuleInfo.courseID
|
|
133
|
+
: null
|
|
134
|
+
})(),
|
|
135
|
+
verb: 'preferred',
|
|
136
|
+
definition: text,
|
|
137
|
+
description: text,
|
|
138
|
+
extensions: [
|
|
139
|
+
{
|
|
140
|
+
id: 'application-settings',
|
|
141
|
+
content: {
|
|
142
|
+
userSettings: { ...appSettings }
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
]
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
setTimeout(() => {
|
|
149
|
+
this.$bus.$emit('send-xapi-statement', stmt) //send xapi statement
|
|
150
|
+
}, 1000)
|
|
151
|
+
} else {
|
|
152
|
+
this.$set(this.getUserInteraction, 'userSettings', appSettings) // adding the usersettings to user Interaction to save to save to the local DB
|
|
153
|
+
this.updateUserMetaData(this.getUserInteraction) //force update of the userInteraction to ensure saving of settings in local DB
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
//update sidebar data
|
|
157
|
+
this.getAppSettingsInStore()
|
|
158
|
+
},
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* @description -Action to perform when the sidebar closed- will require saving when changing occurred
|
|
162
|
+
*/
|
|
163
|
+
onClose() {
|
|
164
|
+
if (this.settingsNeedUpdate) {
|
|
165
|
+
this.saveSettingsToStore(this.settingsSelected)
|
|
166
|
+
this.saveSettings(this.getApplicationSettings)
|
|
167
|
+
this.settingsNeedUpdate = false
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
</script>
|
|
@@ -332,13 +332,10 @@ export default {
|
|
|
332
332
|
flex-direction: column;
|
|
333
333
|
}
|
|
334
334
|
|
|
335
|
-
// .sidebar-submenu-content {
|
|
336
|
-
// display: flex;
|
|
337
|
-
// flex-direction: column;
|
|
338
|
-
// }
|
|
339
335
|
#close-toc {
|
|
340
336
|
position: absolute;
|
|
341
337
|
right: 24px;
|
|
338
|
+
top: 24px;
|
|
342
339
|
margin-bottom: 0;
|
|
343
340
|
padding: 12px;
|
|
344
341
|
width: 48px;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<router-view />
|
|
3
|
-
</template>
|
|
4
|
-
<script>
|
|
5
|
-
export default {}
|
|
6
|
-
</script>
|
|
1
|
+
<template>
|
|
2
|
+
<router-view />
|
|
3
|
+
</template>
|
|
4
|
+
<script>
|
|
5
|
+
export default {}
|
|
6
|
+
</script>
|
|
@@ -7,7 +7,7 @@ export class Timer {
|
|
|
7
7
|
this.elapsedCounter = 0 //elapsed time counter how lofg the timer is running
|
|
8
8
|
this.interval = null //interval for the timer
|
|
9
9
|
this.timerState = 'stopped' //state of the timer, can be 'started' or 'stopped'
|
|
10
|
-
|
|
10
|
+
Timer.timers.set(this.timerID, this) // Store the timer in the static map
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
/**
|
|
@@ -20,7 +20,6 @@ export class Timer {
|
|
|
20
20
|
this.elapsedCounter += 1
|
|
21
21
|
}, 1000)
|
|
22
22
|
this.timerState = 'started'
|
|
23
|
-
|
|
24
23
|
}
|
|
25
24
|
}
|
|
26
25
|
|
|
@@ -39,12 +38,11 @@ export class Timer {
|
|
|
39
38
|
this.timeCounter = 0
|
|
40
39
|
this.elapsedCounter = 0
|
|
41
40
|
this.timerState = 'stopped'
|
|
42
|
-
|
|
43
41
|
}
|
|
44
42
|
}
|
|
45
43
|
|
|
46
44
|
/** @description Destroy the timer instance */
|
|
47
|
-
|
|
45
|
+
destroy() {
|
|
48
46
|
this.pause()
|
|
49
47
|
Timer.timers.delete(this.timerID)
|
|
50
48
|
}
|
|
@@ -54,23 +52,24 @@ export class Timer {
|
|
|
54
52
|
return this.timerID
|
|
55
53
|
}
|
|
56
54
|
|
|
57
|
-
/**
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
getTimer(id=null) {
|
|
55
|
+
/**
|
|
56
|
+
*
|
|
57
|
+
* @description retrive a timer instance by its ID
|
|
58
|
+
* If no ID is provided, it returns the current timer instance.
|
|
59
|
+
* @param {String} id - the ID of the timer to retrieve
|
|
60
|
+
* If no ID is provided, it returns the current timer instance.
|
|
61
|
+
*
|
|
62
|
+
* @throws {Error} - if the timer with the specified ID does not exist
|
|
63
|
+
*
|
|
64
|
+
* @returns {Timer} - the timer instance
|
|
65
|
+
*/
|
|
66
|
+
getTimer(id = null) {
|
|
69
67
|
if (!id) {
|
|
70
68
|
console.warn('No timer ID provided. Returning the current timer.')
|
|
71
69
|
return this
|
|
72
70
|
}
|
|
73
|
-
if (!Timer.timers.has(id))
|
|
71
|
+
if (!Timer.timers.has(id))
|
|
72
|
+
throw new Error(`Timer with ID ${id} does not exist.`)
|
|
74
73
|
return Timer.timers.get(id)
|
|
75
74
|
}
|
|
76
75
|
|
|
@@ -101,7 +100,6 @@ export class Timer {
|
|
|
101
100
|
return this.elapsedCounter
|
|
102
101
|
}
|
|
103
102
|
|
|
104
|
-
|
|
105
103
|
/**
|
|
106
104
|
* @description Get all existing timers
|
|
107
105
|
*
|
|
@@ -109,7 +107,7 @@ export class Timer {
|
|
|
109
107
|
*/
|
|
110
108
|
|
|
111
109
|
static getAllTimers() {
|
|
112
|
-
|
|
110
|
+
return Timer.timers
|
|
113
111
|
}
|
|
114
112
|
|
|
115
113
|
/**
|
|
@@ -130,7 +128,6 @@ export class Timer {
|
|
|
130
128
|
return id
|
|
131
129
|
}
|
|
132
130
|
|
|
133
|
-
|
|
134
131
|
/**
|
|
135
132
|
* @description Format seconds to ISO 8601 format
|
|
136
133
|
* Example of ISO 8601 time format of 24 chars: "1970-01-04T14:50:00.000Z"
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<app-base-module :module-config="$data" />
|
|
3
|
-
</template>
|
|
4
|
-
|
|
5
|
-
<script>
|
|
6
|
-
export default {
|
|
7
|
-
data() {
|
|
8
|
-
return {
|
|
9
|
-
id: 'module_99',
|
|
10
|
-
consigneBehavior: 'onHover', //Controle the behavior of desplaying instruction
|
|
11
|
-
bookmarkActive: true, // Controle the use of saved point
|
|
12
|
-
allowNavigationToActivity: null
|
|
13
|
-
|
|
14
|
-
//main:''// Edit to define the ID of the node that will be main. When skipping to main content in the page.
|
|
15
|
-
}
|
|
16
|
-
},
|
|
17
|
-
created() {
|
|
18
|
-
this.allowNavigationToActivity =
|
|
19
|
-
this.$helper.getSettingsFromStore('auto_next_activity')
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
</script>
|
|
1
|
+
<template>
|
|
2
|
+
<app-base-module :module-config="$data" />
|
|
3
|
+
</template>
|
|
4
|
+
|
|
5
|
+
<script>
|
|
6
|
+
export default {
|
|
7
|
+
data() {
|
|
8
|
+
return {
|
|
9
|
+
id: 'module_99',
|
|
10
|
+
consigneBehavior: 'onHover', //Controle the behavior of desplaying instruction
|
|
11
|
+
bookmarkActive: true, // Controle the use of saved point
|
|
12
|
+
allowNavigationToActivity: null
|
|
13
|
+
|
|
14
|
+
//main:''// Edit to define the ID of the node that will be main. When skipping to main content in the page.
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
created() {
|
|
18
|
+
this.allowNavigationToActivity =
|
|
19
|
+
this.$helper.getSettingsFromStore('auto_next_activity')
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
</script>
|