fcad-core-dragon 2.0.0-beta.9 → 2.0.1-beta.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 +33 -33
- package/.eslintignore +29 -29
- package/.eslintrc.cjs +81 -81
- package/CHANGELOG +11 -0
- package/README.md +57 -72
- package/bk.scss +117 -117
- package/package.json +1 -1
- package/src/assets/data/onboardingMessages.json +47 -47
- package/src/components/AppBase.vue +130 -3
- package/src/components/AppBaseErrorDisplay.vue +438 -438
- package/src/components/AppBaseFlipCard.vue +84 -84
- package/src/components/AppBaseModule.vue +15 -18
- package/src/components/AppBasePopover.vue +41 -41
- package/src/components/AppCompBranchButtons.vue +5 -5
- package/src/components/AppCompInputDropdownNext.vue +1 -1
- package/src/components/AppCompInputRadioNext.vue +152 -152
- package/src/components/AppCompInputTextToFillNext.vue +171 -171
- package/src/components/AppCompJauge.vue +74 -74
- package/src/components/AppCompMenuItem.vue +238 -228
- package/src/components/AppCompPlayBarProgress.vue +82 -82
- package/src/components/AppCompSettingsMenu.vue +172 -172
- package/src/components/AppCompTableOfContent.vue +2 -0
- package/src/components/AppCompViewDisplay.vue +6 -6
- package/src/composables/useQuiz.js +206 -206
- package/src/externalComps/ModuleView.vue +22 -22
- package/src/externalComps/SummaryView.vue +91 -91
- package/src/mixins/$mediaMixins.js +819 -819
- package/src/mixins/timerMixin.js +195 -155
- package/src/module/stores/appStore.js +3 -3
- package/src/module/xapi/ADL.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/wrapper.js +0 -1
- package/src/module/xapi/xapiStatement.js +444 -444
- package/src/plugins/bus.js +8 -8
- package/src/plugins/gsap.js +14 -14
- package/src/plugins/i18n.js +44 -44
- 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 +5 -0
- package/src/shared/generalfuncs.js +210 -210
|
@@ -1,74 +1,74 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div v-if="!error" class="box-g" :class="state">
|
|
3
|
-
<v-progress-linear
|
|
4
|
-
class="jauge"
|
|
5
|
-
:model-value="value"
|
|
6
|
-
:height="12"
|
|
7
|
-
:max="maxValue"
|
|
8
|
-
aria-hidden="true"
|
|
9
|
-
></v-progress-linear>
|
|
10
|
-
<p class="prcnt">{{ getPourcent }} %</p>
|
|
11
|
-
</div>
|
|
12
|
-
<div v-else>
|
|
13
|
-
<div class="warning">
|
|
14
|
-
<p class="title">Attention</p>
|
|
15
|
-
<p class="info">
|
|
16
|
-
Attention les valeurs que vous donnez au composant ne sont pas des
|
|
17
|
-
nombres.
|
|
18
|
-
</p>
|
|
19
|
-
</div>
|
|
20
|
-
</div>
|
|
21
|
-
</template>
|
|
22
|
-
<script>
|
|
23
|
-
export default {
|
|
24
|
-
props: {
|
|
25
|
-
// props Give value to show progress
|
|
26
|
-
state: {
|
|
27
|
-
type: String,
|
|
28
|
-
default: 'started'
|
|
29
|
-
},
|
|
30
|
-
maxValue: {
|
|
31
|
-
type: Number,
|
|
32
|
-
default: 100
|
|
33
|
-
},
|
|
34
|
-
value: { type: Number, default: 0 },
|
|
35
|
-
pourcent: { type: Boolean, default: false },
|
|
36
|
-
fraction: { type: Boolean, default: false }
|
|
37
|
-
},
|
|
38
|
-
data() {
|
|
39
|
-
return {}
|
|
40
|
-
},
|
|
41
|
-
computed: {
|
|
42
|
-
getPourcent() {
|
|
43
|
-
// Calculate on a 100%
|
|
44
|
-
let result = (this.value * 100) / this.maxValue
|
|
45
|
-
if (result > 100) return 100
|
|
46
|
-
else return Math.round(result)
|
|
47
|
-
},
|
|
48
|
-
error() {
|
|
49
|
-
if (typeof this.value != 'number' || typeof this.maxValue != 'number') {
|
|
50
|
-
return true
|
|
51
|
-
} else {
|
|
52
|
-
return false
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
},
|
|
56
|
-
methods: {}
|
|
57
|
-
}
|
|
58
|
-
</script>
|
|
59
|
-
<style lang="scss">
|
|
60
|
-
.box-g {
|
|
61
|
-
width: 100%;
|
|
62
|
-
display: flex;
|
|
63
|
-
flex-direction: row;
|
|
64
|
-
flex-wrap: wrap;
|
|
65
|
-
|
|
66
|
-
.jauge {
|
|
67
|
-
width: 70%;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
.prcnt {
|
|
71
|
-
margin-left: 10px;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
</style>
|
|
1
|
+
<template>
|
|
2
|
+
<div v-if="!error" class="box-g" :class="state">
|
|
3
|
+
<v-progress-linear
|
|
4
|
+
class="jauge"
|
|
5
|
+
:model-value="value"
|
|
6
|
+
:height="12"
|
|
7
|
+
:max="maxValue"
|
|
8
|
+
aria-hidden="true"
|
|
9
|
+
></v-progress-linear>
|
|
10
|
+
<p class="prcnt">{{ getPourcent }} %</p>
|
|
11
|
+
</div>
|
|
12
|
+
<div v-else>
|
|
13
|
+
<div class="warning">
|
|
14
|
+
<p class="title">Attention</p>
|
|
15
|
+
<p class="info">
|
|
16
|
+
Attention les valeurs que vous donnez au composant ne sont pas des
|
|
17
|
+
nombres.
|
|
18
|
+
</p>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
</template>
|
|
22
|
+
<script>
|
|
23
|
+
export default {
|
|
24
|
+
props: {
|
|
25
|
+
// props Give value to show progress
|
|
26
|
+
state: {
|
|
27
|
+
type: String,
|
|
28
|
+
default: 'started'
|
|
29
|
+
},
|
|
30
|
+
maxValue: {
|
|
31
|
+
type: Number,
|
|
32
|
+
default: 100
|
|
33
|
+
},
|
|
34
|
+
value: { type: Number, default: 0 },
|
|
35
|
+
pourcent: { type: Boolean, default: false },
|
|
36
|
+
fraction: { type: Boolean, default: false }
|
|
37
|
+
},
|
|
38
|
+
data() {
|
|
39
|
+
return {}
|
|
40
|
+
},
|
|
41
|
+
computed: {
|
|
42
|
+
getPourcent() {
|
|
43
|
+
// Calculate on a 100%
|
|
44
|
+
let result = (this.value * 100) / this.maxValue
|
|
45
|
+
if (result > 100) return 100
|
|
46
|
+
else return Math.round(result)
|
|
47
|
+
},
|
|
48
|
+
error() {
|
|
49
|
+
if (typeof this.value != 'number' || typeof this.maxValue != 'number') {
|
|
50
|
+
return true
|
|
51
|
+
} else {
|
|
52
|
+
return false
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
methods: {}
|
|
57
|
+
}
|
|
58
|
+
</script>
|
|
59
|
+
<style lang="scss">
|
|
60
|
+
.box-g {
|
|
61
|
+
width: 100%;
|
|
62
|
+
display: flex;
|
|
63
|
+
flex-direction: row;
|
|
64
|
+
flex-wrap: wrap;
|
|
65
|
+
|
|
66
|
+
.jauge {
|
|
67
|
+
width: 70%;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.prcnt {
|
|
71
|
+
margin-left: 10px;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
</style>
|
|
@@ -1,228 +1,238 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
@ Description: This component is used to display and create the link's to all the activity creation in module.
|
|
3
|
-
@ What it does: Goes trougth all the activity in the router and create a card that open the Table of content (appCompTableOfContent) that display the anchor.Display the title and subtitle enter in menu.json. Must be used with AppCompTableOfContent and AppCompMenu.
|
|
4
|
-
-->
|
|
5
|
-
<template>
|
|
6
|
-
<v-row v-if="activities.length" class="box-msa">
|
|
7
|
-
<v-col
|
|
8
|
-
v-for="activity of activities"
|
|
9
|
-
:key="activity.id"
|
|
10
|
-
cols="6"
|
|
11
|
-
class="menu-section-activity"
|
|
12
|
-
:aria-describedby="activity.id + '-subMenu'"
|
|
13
|
-
>
|
|
14
|
-
<router-link
|
|
15
|
-
:id="activity.id + '-subMenu'"
|
|
16
|
-
:title="activity.title"
|
|
17
|
-
:data-test="`item-menu-${activity.id}`"
|
|
18
|
-
class="btn-menu"
|
|
19
|
-
:to="{
|
|
20
|
-
name: createRoutes(activity.id)
|
|
21
|
-
}"
|
|
22
|
-
@click="startActivity(activity)"
|
|
23
|
-
>
|
|
24
|
-
<div class="menu-card" tag="article">
|
|
25
|
-
<v-row>
|
|
26
|
-
<div v-if="activity.subtitle === undefined" class="title">
|
|
27
|
-
<h4 v-html="activity.title"></h4>
|
|
28
|
-
</div>
|
|
29
|
-
<div v-else class="title">
|
|
30
|
-
<h4
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
</
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
'
|
|
69
|
-
'
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
if (key
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
.
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
1
|
+
<!--
|
|
2
|
+
@ Description: This component is used to display and create the link's to all the activity creation in module.
|
|
3
|
+
@ What it does: Goes trougth all the activity in the router and create a card that open the Table of content (appCompTableOfContent) that display the anchor.Display the title and subtitle enter in menu.json. Must be used with AppCompTableOfContent and AppCompMenu.
|
|
4
|
+
-->
|
|
5
|
+
<template>
|
|
6
|
+
<v-row v-if="activities.length" class="box-msa">
|
|
7
|
+
<v-col
|
|
8
|
+
v-for="activity of activities"
|
|
9
|
+
:key="activity.id"
|
|
10
|
+
cols="6"
|
|
11
|
+
class="menu-section-activity"
|
|
12
|
+
:aria-describedby="activity.id + '-subMenu'"
|
|
13
|
+
>
|
|
14
|
+
<router-link
|
|
15
|
+
:id="activity.id + '-subMenu'"
|
|
16
|
+
:title="activity.title"
|
|
17
|
+
:data-test="`item-menu-${activity.id}`"
|
|
18
|
+
class="btn-menu"
|
|
19
|
+
:to="{
|
|
20
|
+
name: createRoutes(activity.id)
|
|
21
|
+
}"
|
|
22
|
+
@click="startActivity(activity)"
|
|
23
|
+
>
|
|
24
|
+
<div class="menu-card" tag="article">
|
|
25
|
+
<v-row>
|
|
26
|
+
<div v-if="activity.subtitle === undefined" class="title">
|
|
27
|
+
<h4 v-html="activity.title"></h4>
|
|
28
|
+
</div>
|
|
29
|
+
<div v-else class="title">
|
|
30
|
+
<h4
|
|
31
|
+
v-html="
|
|
32
|
+
`${activity.title}${cardTitleSeparator}${activity.subtitle}`
|
|
33
|
+
"
|
|
34
|
+
></h4>
|
|
35
|
+
</div>
|
|
36
|
+
|
|
37
|
+
<div class="cnt-time">
|
|
38
|
+
<svg :aria-label="$t('label.timer')">
|
|
39
|
+
<use href="#clock-icon" />
|
|
40
|
+
</svg>
|
|
41
|
+
<p class="time">
|
|
42
|
+
{{ activity.time || '00:00' }}
|
|
43
|
+
</p>
|
|
44
|
+
</div>
|
|
45
|
+
<div class="box-gauge">
|
|
46
|
+
<app-comp-jauge
|
|
47
|
+
:max-value="getActivitySize(activity.id)"
|
|
48
|
+
:value="getPageComplete(activity.id)"
|
|
49
|
+
/>
|
|
50
|
+
</div>
|
|
51
|
+
</v-row>
|
|
52
|
+
</div>
|
|
53
|
+
</router-link>
|
|
54
|
+
</v-col>
|
|
55
|
+
</v-row>
|
|
56
|
+
</template>
|
|
57
|
+
<script>
|
|
58
|
+
// ...
|
|
59
|
+
import { mapState } from 'pinia'
|
|
60
|
+
import { useAppStore } from '../module/stores/appStore'
|
|
61
|
+
import AppCompJauge from './AppCompJauge.vue'
|
|
62
|
+
export default {
|
|
63
|
+
components: {
|
|
64
|
+
AppCompJauge
|
|
65
|
+
},
|
|
66
|
+
computed: {
|
|
67
|
+
...mapState(useAppStore, [
|
|
68
|
+
'getAllActivities',
|
|
69
|
+
'getAllActivitiesState',
|
|
70
|
+
'getAllCompleted',
|
|
71
|
+
'getAppConfigs',
|
|
72
|
+
'getMenuSettings',
|
|
73
|
+
'getModuleInfo'
|
|
74
|
+
]),
|
|
75
|
+
/*
|
|
76
|
+
* Apply different punctuation for colons. No space before a colon in english, one space before a colon in french
|
|
77
|
+
*/
|
|
78
|
+
cardTitleSeparator() {
|
|
79
|
+
return this.getAppConfigs.lang === 'en' ? ': ' : ' : '
|
|
80
|
+
},
|
|
81
|
+
activities() {
|
|
82
|
+
// get the data for list of the page for this module from the store and
|
|
83
|
+
// get the route of the page from the router to build the menu with its routes
|
|
84
|
+
let count = 0
|
|
85
|
+
const collection = []
|
|
86
|
+
|
|
87
|
+
this.getAllActivities().list.forEach((value, key) => {
|
|
88
|
+
let theActivity,
|
|
89
|
+
activityTitle,
|
|
90
|
+
activitySubTitle,
|
|
91
|
+
activityTime = null,
|
|
92
|
+
activityPath = ''
|
|
93
|
+
|
|
94
|
+
if (this.menuInfo[key]) {
|
|
95
|
+
const { title, subTitle, time } = this.menuInfo[key] //get time subTitle time from menu info
|
|
96
|
+
//set the title
|
|
97
|
+
if (title && title != ' ') activityTitle = title
|
|
98
|
+
//set the subtitle
|
|
99
|
+
if (subTitle && subTitle != ' ') activitySubTitle = subTitle
|
|
100
|
+
//set the time
|
|
101
|
+
if (time && time != ' ') activityTime = time
|
|
102
|
+
}
|
|
103
|
+
// This is the Introduction
|
|
104
|
+
if (key === 'A00') {
|
|
105
|
+
activityTitle = activityTitle || this.$t('text.introduction')
|
|
106
|
+
activityPath = 'introduction'
|
|
107
|
+
} else if (key === 'A99') {
|
|
108
|
+
activityTitle = activityTitle || this.$t('text.conclusion')
|
|
109
|
+
activityPath = 'conclusion'
|
|
110
|
+
} else {
|
|
111
|
+
count++
|
|
112
|
+
activityTitle =
|
|
113
|
+
activityTitle || `${this.$t('text.activity')} ${count}`
|
|
114
|
+
activityPath = `activite_${count}`
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
theActivity = {
|
|
118
|
+
id: key,
|
|
119
|
+
title: activityTitle,
|
|
120
|
+
subtitle: activitySubTitle,
|
|
121
|
+
time: activityTime,
|
|
122
|
+
path: activityPath,
|
|
123
|
+
data: value
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
collection.push(theActivity) // push the activity in the collection
|
|
127
|
+
})
|
|
128
|
+
|
|
129
|
+
return collection
|
|
130
|
+
},
|
|
131
|
+
menuInfo() {
|
|
132
|
+
let menuInfo = this.getMenuSettings
|
|
133
|
+
return menuInfo
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
mounted() {},
|
|
137
|
+
methods: {
|
|
138
|
+
/**
|
|
139
|
+
* @description Gives gives length of completed page for an activity
|
|
140
|
+
* @param {String} idActivity
|
|
141
|
+
* @returns {Number}
|
|
142
|
+
*/
|
|
143
|
+
getPageComplete(idActivity) {
|
|
144
|
+
/// give all the page that are complete to the gauge
|
|
145
|
+
if (idActivity) {
|
|
146
|
+
let completed = []
|
|
147
|
+
if (this.getAllCompleted[idActivity]) {
|
|
148
|
+
completed = this.getAllCompleted[idActivity] //get all completed page for the activity
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
return completed.length
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
/**
|
|
155
|
+
* @description give the size of the state of the activity
|
|
156
|
+
* @param {String} activityID
|
|
157
|
+
* @returns {Number} size
|
|
158
|
+
*/
|
|
159
|
+
getActivitySize(activityID) {
|
|
160
|
+
/*
|
|
161
|
+
* Note:
|
|
162
|
+
* Assaging by reference would change the property of the getters when the valued are changed in the new object in. * To prevent this behaviour we will make a deep copy of the getter
|
|
163
|
+
* cf: https://reactgo.com/javascript-clone-object/
|
|
164
|
+
*/
|
|
165
|
+
|
|
166
|
+
const allActivitiesState = JSON.parse(
|
|
167
|
+
JSON.stringify(this.getAllActivitiesState)
|
|
168
|
+
)
|
|
169
|
+
let size = allActivitiesState[activityID]
|
|
170
|
+
? allActivitiesState[activityID].size
|
|
171
|
+
: 0
|
|
172
|
+
|
|
173
|
+
return size
|
|
174
|
+
},
|
|
175
|
+
createRoutes(data) {
|
|
176
|
+
let activity
|
|
177
|
+
|
|
178
|
+
if (data.charAt(1) == '0' || data.charAt(1) == 0) {
|
|
179
|
+
activity = data.substr(2)
|
|
180
|
+
} else {
|
|
181
|
+
activity = data.substr(1)
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
if (activity == 0 && activity == '0') return `introduction`
|
|
185
|
+
if (activity == '99') return `conclusion`
|
|
186
|
+
else return `activite_${activity}`
|
|
187
|
+
},
|
|
188
|
+
startActivity(a) {
|
|
189
|
+
//this.$bus.$emit('send-starting-event', a)
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
</script>
|
|
194
|
+
<style lang="scss">
|
|
195
|
+
.menu-card {
|
|
196
|
+
width: 100%;
|
|
197
|
+
padding: 24px;
|
|
198
|
+
|
|
199
|
+
.v-row {
|
|
200
|
+
margin: 0;
|
|
201
|
+
flex-direction: column;
|
|
202
|
+
|
|
203
|
+
.title {
|
|
204
|
+
flex-grow: 4;
|
|
205
|
+
width: 80%;
|
|
206
|
+
margin-bottom: 30px;
|
|
207
|
+
|
|
208
|
+
h3 {
|
|
209
|
+
text-align: left;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
.cnt-time {
|
|
214
|
+
display: flex;
|
|
215
|
+
flex-direction: row;
|
|
216
|
+
align-items: center;
|
|
217
|
+
margin-bottom: 20px;
|
|
218
|
+
|
|
219
|
+
svg {
|
|
220
|
+
width: 18px;
|
|
221
|
+
height: 18px;
|
|
222
|
+
margin-right: 10px;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.box-gauge {
|
|
227
|
+
display: block;
|
|
228
|
+
width: 100%;
|
|
229
|
+
|
|
230
|
+
.box-g {
|
|
231
|
+
display: flex;
|
|
232
|
+
flex-direction: row;
|
|
233
|
+
align-items: center;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
</style>
|