fcad-core-dragon 2.0.0-beta.0 → 2.0.0-beta.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/{.eslintrc.js → .eslintrc.cjs} +13 -18
- package/README.md +1 -1
- package/bk.scss +117 -0
- package/package.json +22 -40
- package/src/$locales/en.json +57 -19
- package/src/$locales/fr.json +66 -28
- package/src/components/AppBase.vue +790 -376
- package/src/components/AppBaseButton.vue +33 -5
- package/src/components/AppBaseErrorDisplay.vue +62 -25
- package/src/components/AppBaseModule.vue +831 -754
- package/src/components/AppBasePage.vue +60 -74
- package/src/components/AppCompAudio.vue +266 -0
- package/src/components/AppCompBranchButtons.vue +79 -89
- package/src/components/AppCompButtonProgress.vue +35 -61
- package/src/components/AppCompCarousel.vue +160 -249
- package/src/components/AppCompInputCheckBox.vue +9 -3
- package/src/components/AppCompInputDropdown.vue +2 -4
- package/src/components/AppCompInputRadio.vue +8 -15
- package/src/components/AppCompInputTextTable.vue +15 -12
- package/src/components/AppCompInputTextToFillDropdown.vue +16 -14
- package/src/components/AppCompInputTextToFillText.vue +2 -2
- package/src/components/AppCompJauge.vue +14 -3
- package/src/components/AppCompMenu.vue +284 -85
- package/src/components/AppCompMenuItem.vue +67 -92
- package/src/components/AppCompNavigation.vue +945 -0
- package/src/components/AppCompNoteCall.vue +141 -0
- package/src/components/AppCompNoteCredit.vue +267 -0
- package/src/components/AppCompPlayBar.vue +1122 -1391
- package/src/components/AppCompPlayBarProgress.vue +73 -0
- package/src/components/AppCompPopUp.vue +195 -135
- package/src/components/AppCompPopover.vue +27 -0
- package/src/components/AppCompQuiz.vue +90 -113
- package/src/components/AppCompQuizRecall.vue +277 -0
- package/src/components/AppCompSVG.vue +335 -0
- package/src/components/AppCompSettingsMenu.vue +7 -8
- package/src/components/AppCompTableOfContent.vue +264 -88
- package/src/components/AppCompTranscript.vue +19 -0
- package/src/components/AppCompVideoPlayer.vue +380 -0
- package/src/components/BaseModule.vue +37 -114
- package/src/main.js +130 -85
- package/src/mixins/$mediaMixins.js +827 -0
- package/src/mixins/$pageMixins.js +149 -115
- package/src/mixins/$quizMixins.js +12 -26
- package/src/mixins/timerMixin.js +39 -16
- package/src/module/store.js +218 -78
- package/src/module/xapi/ADL.js +90 -53
- package/src/module/xapi/Crypto/Hasher.js +8 -8
- package/src/module/xapi/Crypto/WordArray.js +6 -6
- package/src/module/xapi/Crypto/algorithms/BufferedBlockAlgorithm.js +4 -4
- package/src/module/xapi/Crypto/algorithms/C_algo.js +14 -18
- package/src/module/xapi/Crypto/algorithms/HMAC.js +1 -1
- package/src/module/xapi/Crypto/algorithms/SHA1.js +1 -1
- package/src/module/xapi/Crypto/encoders/Base.js +7 -7
- package/src/module/xapi/Crypto/encoders/Base64.js +3 -3
- package/src/module/xapi/Crypto/encoders/Hex.js +4 -3
- package/src/module/xapi/Crypto/encoders/Latin1.js +3 -3
- package/src/module/xapi/Crypto/encoders/Utf8.js +3 -3
- package/src/module/xapi/Statement/index.js +1 -1
- package/src/module/xapi/launch.js +10 -10
- package/src/module/xapi/utils.js +17 -17
- package/src/module/xapi/wrapper.js +127 -54
- package/src/module/xapi/xapiStatement.js +29 -29
- package/src/plugins/gsap.js +4 -1
- package/src/plugins/helper.js +58 -24
- package/src/plugins/i18n.js +23 -10
- package/src/plugins/idb.js +1 -0
- package/src/plugins/scorm.js +14 -14
- package/src/public/index.html +1 -1
- package/src/router/index.js +40 -0
- package/src/router/routes.js +317 -0
- package/src/shared/generalfuncs.js +91 -9
- package/src/shared/validators.js +959 -0
- package/.prettierrc.js +0 -5
- package/babel.config.js +0 -3
- package/src/components/AppBaseDragChoice.vue +0 -91
- package/src/components/AppBaseDropZone.vue +0 -112
- package/src/components/AppCompDragAndDrop.vue +0 -339
- package/src/components/AppCompInputAssociation.vue +0 -332
- package/src/components/AppCompMediaPlayer.vue +0 -365
- package/src/components/AppCompNavigationFull.vue +0 -1791
- package/src/components/AppCompToolTip.vue +0 -94
- package/src/plugins/timeManager.js +0 -77
- package/src/routes.js +0 -734
- package/vue.config.js +0 -83
|
@@ -16,7 +16,7 @@ card (optionel):
|
|
|
16
16
|
Objet qui défini le contenu de la composante b-card
|
|
17
17
|
exemple:
|
|
18
18
|
{
|
|
19
|
-
imgFile: 'imgCarte.jpg', (l'image doit
|
|
19
|
+
imgFile: '/src/assets/img/imgCarte.jpg', (l'image doit être appelé par un import ex : import imgCarte1 from '@/assets/img/imgCarte.jpg')
|
|
20
20
|
title: 'Titre embranchment',
|
|
21
21
|
text: 'Ceci est un embranchment factice, affiché sous la forme de carte.'
|
|
22
22
|
brchName: 'P02_E01'
|
|
@@ -49,14 +49,6 @@ Si la composante est appelée sans prop, les boutons par défaut seront génér
|
|
|
49
49
|
</b-col>
|
|
50
50
|
</b-row>
|
|
51
51
|
<b-row v-else>
|
|
52
|
-
<b-col v-if="consigne">
|
|
53
|
-
<!--- Paramètre ajouter pour la faire apparaitre au besoin --->
|
|
54
|
-
<app-base-instruction
|
|
55
|
-
v-show="consigne"
|
|
56
|
-
:text-instruction="$t(`instruction.branch`)"
|
|
57
|
-
:text-button="$t('button.instructions')"
|
|
58
|
-
/>
|
|
59
|
-
</b-col>
|
|
60
52
|
<b-col
|
|
61
53
|
v-for="branch of branchsStateData"
|
|
62
54
|
:id="branch.id"
|
|
@@ -75,7 +67,8 @@ Si la composante est appelée sans prop, les boutons par défaut seront génér
|
|
|
75
67
|
</slot>
|
|
76
68
|
|
|
77
69
|
<app-comp-button-progress
|
|
78
|
-
:
|
|
70
|
+
:set-target="sidebar"
|
|
71
|
+
:percent="branch.progression ? branch.progression : 0"
|
|
79
72
|
:branch-data="branch"
|
|
80
73
|
:btn-title="getMatchingElement(branch.id).btnTitle"
|
|
81
74
|
no-interaction
|
|
@@ -85,14 +78,15 @@ Si la composante est appelée sans prop, les boutons par défaut seront génér
|
|
|
85
78
|
v-else-if="isCard && cards.length"
|
|
86
79
|
class="branch-btn-wrapper branch-btn-card"
|
|
87
80
|
>
|
|
88
|
-
<b-card style="max-width: 20rem
|
|
81
|
+
<b-card style="max-width: 20rem" no-body>
|
|
89
82
|
<app-comp-button-progress
|
|
90
|
-
:
|
|
83
|
+
:set-target="sidebar"
|
|
84
|
+
:percent="branch.progression ? branch.progression : 0"
|
|
91
85
|
:branch-data="branch"
|
|
92
86
|
:btn-title="getMatchingElement(branch.id).btnTitle"
|
|
93
87
|
></app-comp-button-progress>
|
|
94
88
|
<b-card-img
|
|
95
|
-
:src="
|
|
89
|
+
:src="branch.imgFile"
|
|
96
90
|
:alt="`${branch.imgAlt}`"
|
|
97
91
|
></b-card-img>
|
|
98
92
|
<b-card-body>
|
|
@@ -107,7 +101,8 @@ Si la composante est appelée sans prop, les boutons par défaut seront génér
|
|
|
107
101
|
</div>
|
|
108
102
|
<div v-else class="branch-btn-wrapper">
|
|
109
103
|
<app-comp-button-progress
|
|
110
|
-
:
|
|
104
|
+
:set-target="sidebar"
|
|
105
|
+
:percent="branch.progression ? branch.progression : 0"
|
|
111
106
|
:branch-data="branch"
|
|
112
107
|
:btn-title="branch.text"
|
|
113
108
|
></app-comp-button-progress>
|
|
@@ -130,6 +125,10 @@ export default {
|
|
|
130
125
|
type: Boolean,
|
|
131
126
|
default: false
|
|
132
127
|
},
|
|
128
|
+
sidebar: {
|
|
129
|
+
type: String,
|
|
130
|
+
default: 'branch-viewer'
|
|
131
|
+
},
|
|
133
132
|
btnTitle: {
|
|
134
133
|
type: String,
|
|
135
134
|
default: ' '
|
|
@@ -139,7 +138,7 @@ export default {
|
|
|
139
138
|
default: () => null,
|
|
140
139
|
validator(dataArray) {
|
|
141
140
|
let isValid = true
|
|
142
|
-
if (
|
|
141
|
+
if (import.meta.env.DEV) {
|
|
143
142
|
let errMsg = false
|
|
144
143
|
|
|
145
144
|
//card must have at least 2 elements
|
|
@@ -166,27 +165,18 @@ export default {
|
|
|
166
165
|
|
|
167
166
|
if (!el[k]) {
|
|
168
167
|
isValid = false
|
|
169
|
-
errMsg = `\n 💥 Missing 👉 ${k} 👈 in object ${
|
|
170
|
-
|
|
168
|
+
errMsg = `\n 💥 Missing 👉 ${k} 👈 in object ${
|
|
169
|
+
index + 1
|
|
170
|
+
} in ➡ card \n 🚩Allowed indexes are: 👉 ${requiredKeys}`
|
|
171
171
|
break
|
|
172
172
|
} else {
|
|
173
173
|
if (el[k].constructor !== String) {
|
|
174
|
-
errMsg = `\n 💥 Invalid 👉 ${k} 👈 declaration in ➡ object ${
|
|
175
|
-
|
|
174
|
+
errMsg = `\n 💥 Invalid 👉 ${k} 👈 declaration in ➡ object ${
|
|
175
|
+
index + 1
|
|
176
|
+
} ➡ of card. \n 🚩 Must be of type {String}`
|
|
176
177
|
isValid = false
|
|
177
178
|
break
|
|
178
179
|
}
|
|
179
|
-
// start validation of existance of image
|
|
180
|
-
else if (k === 'imgFile') {
|
|
181
|
-
const imgName = el.imgFile
|
|
182
|
-
try {
|
|
183
|
-
//test if all states exists
|
|
184
|
-
require(`@/assets/img/${imgName}`)
|
|
185
|
-
} catch (error) {
|
|
186
|
-
isValid = false
|
|
187
|
-
errMsg = `\n 💥 Problem loading image with name "${imgName}", \n double check if it is present in the img 📁`
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
180
|
}
|
|
191
181
|
if (!isValid) break
|
|
192
182
|
}
|
|
@@ -205,7 +195,7 @@ export default {
|
|
|
205
195
|
default: () => null,
|
|
206
196
|
validator: (dataArray) => {
|
|
207
197
|
let isValid = true
|
|
208
|
-
if (
|
|
198
|
+
if (import.meta.env.DEV) {
|
|
209
199
|
let errMsg = false
|
|
210
200
|
//card must have at least 2 elements
|
|
211
201
|
if (dataArray.length < 2) {
|
|
@@ -230,13 +220,15 @@ export default {
|
|
|
230
220
|
|
|
231
221
|
if (!el[k]) {
|
|
232
222
|
isValid = false
|
|
233
|
-
errMsg = `\n 💥 Missing 👉 ${k} 👈 in object ${
|
|
234
|
-
|
|
223
|
+
errMsg = `\n 💥 Missing 👉 ${k} 👈 in object ${
|
|
224
|
+
index + 1
|
|
225
|
+
} in ➡ customButtom \n 🚩Allowed indexes are: 👉 ${requiredKeys}`
|
|
235
226
|
break
|
|
236
227
|
} else {
|
|
237
228
|
if (el[k].constructor !== String) {
|
|
238
|
-
errMsg = `\n 💥 Invalid 👉 ${k} 👈 declaration in ➡ object ${
|
|
239
|
-
|
|
229
|
+
errMsg = `\n 💥 Invalid 👉 ${k} 👈 declaration in ➡ object ${
|
|
230
|
+
index + 1
|
|
231
|
+
} ➡ of customButton. \n 🚩 Must be of type {String}`
|
|
240
232
|
isValid = false
|
|
241
233
|
break
|
|
242
234
|
}
|
|
@@ -278,7 +270,7 @@ export default {
|
|
|
278
270
|
...mapGetters(['getAllCompleted', 'getAllActivities', 'getConnectionInfo']),
|
|
279
271
|
hasErrors() {
|
|
280
272
|
let error = false
|
|
281
|
-
if (
|
|
273
|
+
if (import.meta.env.DEV) {
|
|
282
274
|
if (this.isCard) error = this.validateProp('cards')
|
|
283
275
|
else if (this.isCustomButton) error = this.validateProp('customButtons')
|
|
284
276
|
else error = false
|
|
@@ -287,19 +279,14 @@ export default {
|
|
|
287
279
|
}
|
|
288
280
|
},
|
|
289
281
|
watch: {
|
|
290
|
-
// getConnectionInfo:{
|
|
291
|
-
// //in development environment (localhost), don't wait for the axios call
|
|
292
|
-
// // immediate: process.env.NODE_ENV === 'development',
|
|
293
|
-
// handler(){
|
|
294
|
-
// this.getbranchsData()
|
|
295
|
-
// }
|
|
296
|
-
// },
|
|
297
|
-
|
|
298
282
|
getAllCompleted: {
|
|
299
283
|
//watch the completions to update the branches progression
|
|
300
284
|
handler() {
|
|
301
|
-
if (
|
|
302
|
-
|
|
285
|
+
if (
|
|
286
|
+
this.getAllCompleted[this.idActivity] &&
|
|
287
|
+
this.getAllCompleted[this.idActivity].length
|
|
288
|
+
)
|
|
289
|
+
this.getbranchsData()
|
|
303
290
|
}
|
|
304
291
|
}
|
|
305
292
|
},
|
|
@@ -319,28 +306,31 @@ export default {
|
|
|
319
306
|
this.branchsStateData = []
|
|
320
307
|
this.branchs.forEach((branch, index) => {
|
|
321
308
|
let branchData = {}
|
|
322
|
-
branchData.id = branch._ref
|
|
309
|
+
branchData.id = branch._ref
|
|
323
310
|
branchData.route = branch._namedRoute
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
311
|
+
let { state = 'new', progression = 0 } = this.getBranchProgression(
|
|
312
|
+
branchData.id
|
|
313
|
+
)
|
|
327
314
|
// if (!state || !progression) return
|
|
328
315
|
|
|
329
316
|
branchData.state = state
|
|
330
317
|
branchData.progression = progression
|
|
318
|
+
if (isNaN(branchData.progression)) branchData.progression = 0
|
|
331
319
|
|
|
332
320
|
if (this.isCard) {
|
|
333
|
-
const {
|
|
334
|
-
|
|
321
|
+
const { title, text, imgFile, imgAlt, btnTitle } =
|
|
322
|
+
this.getMatchingElement(branchData.id)
|
|
323
|
+
|
|
324
|
+
branchData = {
|
|
325
|
+
...branchData,
|
|
335
326
|
text,
|
|
327
|
+
title,
|
|
336
328
|
imgFile,
|
|
337
329
|
imgAlt,
|
|
338
330
|
btnTitle
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
branchData = { ...branchData, text, title, imgFile, imgAlt, btnTitle }
|
|
331
|
+
}
|
|
342
332
|
|
|
343
|
-
if (typeof branchData.imgAlt === 'undefined') {
|
|
333
|
+
if (typeof branchData.imgAlt === 'undefined' && import.meta.env.DEV) {
|
|
344
334
|
branchData.imgAlt = ''
|
|
345
335
|
console.warn(
|
|
346
336
|
`Bouton d’embranchement: ALT image sans valeur définie pour ${branchData.id}`
|
|
@@ -362,16 +352,16 @@ export default {
|
|
|
362
352
|
if (!this.getAllCompleted[this.idActivity]) return result // no progression found for this activity return result
|
|
363
353
|
|
|
364
354
|
const total = this.getBranchPagesCount(idBranch) // get all pages for in this branch
|
|
365
|
-
|
|
366
355
|
//get all completed branches pages
|
|
367
356
|
const completedPages = this.getAllCompleted[this.idActivity].filter(
|
|
368
357
|
(page) => {
|
|
369
358
|
return Object.keys(page)[0].search(idBranch) !== -1
|
|
370
359
|
}
|
|
371
360
|
)
|
|
372
|
-
|
|
373
361
|
result.progression = Math.floor((completedPages.length / total) * 100)
|
|
374
362
|
|
|
363
|
+
if (isNaN(result.progression)) result.progression = 0
|
|
364
|
+
|
|
375
365
|
if (result.progression === 0) {
|
|
376
366
|
result.state = this.status.NEW
|
|
377
367
|
} else if (result.progression === 100) {
|
|
@@ -388,11 +378,14 @@ export default {
|
|
|
388
378
|
* @return {Array} /Return the total of pages in a specific branch
|
|
389
379
|
*/
|
|
390
380
|
getBranchPagesCount(idBranch) {
|
|
391
|
-
|
|
392
|
-
|
|
381
|
+
if (this.$router.currentRoute.meta.type !== 'branching') return
|
|
382
|
+
|
|
383
|
+
const allPages = this.getAllActivities()
|
|
384
|
+
.list.get(this.idActivity)
|
|
393
385
|
.get(this.$router.currentRoute.meta.id)
|
|
394
|
-
.get(idBranch
|
|
395
|
-
|
|
386
|
+
.get(idBranch)
|
|
387
|
+
|
|
388
|
+
return allPages.size ? allPages.size : 1
|
|
396
389
|
},
|
|
397
390
|
|
|
398
391
|
/**
|
|
@@ -421,8 +414,9 @@ export default {
|
|
|
421
414
|
if (el.constructor !== Object) {
|
|
422
415
|
isValid = false
|
|
423
416
|
let index = this.cards.indexOf(el)
|
|
424
|
-
errMsg = `Le data pour la carte ${
|
|
425
|
-
|
|
417
|
+
errMsg = `Le data pour la carte ${
|
|
418
|
+
index + 1
|
|
419
|
+
} n'est pas de type Object`
|
|
426
420
|
}
|
|
427
421
|
if (!isValid) break
|
|
428
422
|
}
|
|
@@ -436,27 +430,18 @@ export default {
|
|
|
436
430
|
for (let k of requiredKeys) {
|
|
437
431
|
if (!el[k]) {
|
|
438
432
|
isValid = false
|
|
439
|
-
errMsg = `l'Attribut 👉 ${k} 👈 pour la carte ${
|
|
440
|
-
|
|
433
|
+
errMsg = `l'Attribut 👉 ${k} 👈 pour la carte ${
|
|
434
|
+
index + 1
|
|
435
|
+
} n'as pas été défini`
|
|
441
436
|
break
|
|
442
437
|
} else {
|
|
443
438
|
if (el[k].constructor !== String) {
|
|
444
|
-
errMsg = `l'Attribut 👉 ${k} 👈 pour la carte ${
|
|
445
|
-
|
|
439
|
+
errMsg = `l'Attribut 👉 ${k} 👈 pour la carte ${
|
|
440
|
+
index + 1
|
|
441
|
+
} doit être de type {String}`
|
|
446
442
|
isValid = false
|
|
447
443
|
break
|
|
448
444
|
}
|
|
449
|
-
// start validation of existance of image
|
|
450
|
-
else if (k === 'imgFile') {
|
|
451
|
-
const imgName = el.imgFile
|
|
452
|
-
try {
|
|
453
|
-
//test if all states exists
|
|
454
|
-
require(`@/assets/img/${imgName}`)
|
|
455
|
-
} catch (error) {
|
|
456
|
-
isValid = false
|
|
457
|
-
errMsg = `Problème de téléchargement pour le fichier 👉"${imgName}"👈. Êtes vous certain qu'il ce trouve dans le 📁 img du projet?`
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
445
|
}
|
|
461
446
|
if (!isValid) break
|
|
462
447
|
}
|
|
@@ -469,8 +454,9 @@ export default {
|
|
|
469
454
|
if (!searchEl) {
|
|
470
455
|
errMsg = `Aucune branch correspondante avec le nom ${
|
|
471
456
|
el.brchName
|
|
472
|
-
} pour la carte ${
|
|
473
|
-
|
|
457
|
+
} pour la carte ${
|
|
458
|
+
index + 1
|
|
459
|
+
}. Êtes vous sûre d'avoir indiqué la bonne branch?`
|
|
474
460
|
isValid = false
|
|
475
461
|
}
|
|
476
462
|
|
|
@@ -495,8 +481,9 @@ export default {
|
|
|
495
481
|
if (el.constructor !== Object) {
|
|
496
482
|
isValid = false
|
|
497
483
|
let index = this.customButtons.indexOf(el)
|
|
498
|
-
errMsg = `Le data pour le button ${
|
|
499
|
-
|
|
484
|
+
errMsg = `Le data pour le button ${
|
|
485
|
+
index + 1
|
|
486
|
+
} n'est pas de type {Object}`
|
|
500
487
|
}
|
|
501
488
|
if (!isValid) break
|
|
502
489
|
}
|
|
@@ -511,8 +498,9 @@ export default {
|
|
|
511
498
|
for (let k of requiredKeys) {
|
|
512
499
|
if (!el[k]) {
|
|
513
500
|
isValid = false
|
|
514
|
-
errMsg = `l'Attribut 👉 ${k} 👈 pour la button ${
|
|
515
|
-
|
|
501
|
+
errMsg = `l'Attribut 👉 ${k} 👈 pour la button ${
|
|
502
|
+
index + 1
|
|
503
|
+
} n'as pas été défini`
|
|
516
504
|
break
|
|
517
505
|
} else {
|
|
518
506
|
// Expecting String for properties name and brchName
|
|
@@ -520,8 +508,9 @@ export default {
|
|
|
520
508
|
['name', 'brchName'].includes(k) &&
|
|
521
509
|
el[k].constructor !== String
|
|
522
510
|
) {
|
|
523
|
-
errMsg = `l'Attribut 👉 ${k} 👈 pour la button ${
|
|
524
|
-
|
|
511
|
+
errMsg = `l'Attribut 👉 ${k} 👈 pour la button ${
|
|
512
|
+
index + 1
|
|
513
|
+
} doit être de type {String}`
|
|
525
514
|
isValid = false
|
|
526
515
|
break
|
|
527
516
|
}
|
|
@@ -537,8 +526,9 @@ export default {
|
|
|
537
526
|
if (!searchEl) {
|
|
538
527
|
errMsg = `Aucune branch correspondante avec le nom ${
|
|
539
528
|
el.brchName
|
|
540
|
-
} pour le bouton ${
|
|
541
|
-
|
|
529
|
+
} pour le bouton ${
|
|
530
|
+
index + 1
|
|
531
|
+
}. Êtes vous sûre d'avoir indiqué la bonne branch?`
|
|
542
532
|
isValid = false
|
|
543
533
|
}
|
|
544
534
|
|
|
@@ -1,72 +1,21 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="button-progress-wrapper">
|
|
3
|
-
<!-- Building a Progress Ring, Quickly: https://css-tricks.com/building-progress-ring-quickly/ -->
|
|
4
|
-
<svg class="progress-ring" width="54" height="54">
|
|
5
|
-
<circle
|
|
6
|
-
class="progress-ring__circle"
|
|
7
|
-
stroke-width="3"
|
|
8
|
-
fill="transparent"
|
|
9
|
-
:r="radius"
|
|
10
|
-
cx="25"
|
|
11
|
-
cy="25"
|
|
12
|
-
:stroke-dasharray="circumference"
|
|
13
|
-
:stroke-dashoffset="
|
|
14
|
-
circumference - (branchData.progression / 100) * circumference
|
|
15
|
-
"
|
|
16
|
-
></circle>
|
|
17
|
-
</svg>
|
|
18
3
|
<button
|
|
19
4
|
:id="`btn_branch_${branchData.id}`"
|
|
5
|
+
:target-ref="branchData.id"
|
|
20
6
|
:title="btnTitle || $t('text.place_holder.for_title_btn_progress')"
|
|
21
7
|
:class="
|
|
22
8
|
branchData.state === status.COMPLETE
|
|
23
9
|
? 'branch-btn-default branche-complete'
|
|
24
10
|
: 'branch-btn-default'
|
|
25
11
|
"
|
|
26
|
-
@click="
|
|
12
|
+
@click="openBranch(branchData.id)"
|
|
27
13
|
>
|
|
28
|
-
<svg
|
|
29
|
-
|
|
30
|
-
id="branch-btn-crochet"
|
|
31
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
32
|
-
width="24"
|
|
33
|
-
height="24"
|
|
34
|
-
viewBox="0 0 24 24"
|
|
35
|
-
>
|
|
36
|
-
<path
|
|
37
|
-
id="Tracé_3833"
|
|
38
|
-
data-name="Tracé 3833"
|
|
39
|
-
d="M0,0H24V24H0Z"
|
|
40
|
-
fill="none"
|
|
41
|
-
/>
|
|
42
|
-
<path
|
|
43
|
-
id="Tracé_3834"
|
|
44
|
-
data-name="Tracé 3834"
|
|
45
|
-
d="M9,16.2,4.8,12,3.4,13.4,9,19,21,7,19.6,5.6Z"
|
|
46
|
-
fill="#e6f5ff"
|
|
47
|
-
/>
|
|
14
|
+
<svg v-if="branchData.state === status.COMPLETE" width="24" height="24">
|
|
15
|
+
<use href="#branch-crochet-icon"></use>
|
|
48
16
|
</svg>
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
v-if="branchData.state != status.COMPLETE"
|
|
52
|
-
id="navigate_next_black_24dp"
|
|
53
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
54
|
-
width="24"
|
|
55
|
-
height="24"
|
|
56
|
-
viewBox="0 0 24 24"
|
|
57
|
-
>
|
|
58
|
-
<path
|
|
59
|
-
id="Path_3899"
|
|
60
|
-
data-name="Path 3899"
|
|
61
|
-
d="M0,0H24V24H0Z"
|
|
62
|
-
fill="none"
|
|
63
|
-
/>
|
|
64
|
-
<path
|
|
65
|
-
id="Path_3900"
|
|
66
|
-
data-name="Path 3900"
|
|
67
|
-
d="M10.02,6,8.61,7.41,13.19,12,8.61,16.59,10.02,18l6-6Z"
|
|
68
|
-
fill="#fff"
|
|
69
|
-
/>
|
|
17
|
+
<svg v-if="branchData.state != status.COMPLETE" width="24" height="24">
|
|
18
|
+
<use href="#navigate-next-icon"></use>
|
|
70
19
|
</svg>
|
|
71
20
|
</button>
|
|
72
21
|
</div>
|
|
@@ -79,7 +28,7 @@ export default {
|
|
|
79
28
|
default: false
|
|
80
29
|
},
|
|
81
30
|
percent: {
|
|
82
|
-
type: Number,
|
|
31
|
+
type: [Number],
|
|
83
32
|
default: 0,
|
|
84
33
|
required: true
|
|
85
34
|
},
|
|
@@ -87,6 +36,11 @@ export default {
|
|
|
87
36
|
type: Object,
|
|
88
37
|
required: true
|
|
89
38
|
},
|
|
39
|
+
setTarget: {
|
|
40
|
+
type: [String],
|
|
41
|
+
default: ''
|
|
42
|
+
},
|
|
43
|
+
|
|
90
44
|
btnTitle: {
|
|
91
45
|
type: String,
|
|
92
46
|
default: null
|
|
@@ -101,11 +55,31 @@ export default {
|
|
|
101
55
|
NEW: 'new',
|
|
102
56
|
STARTED: 'started',
|
|
103
57
|
COMPLETE: 'complete'
|
|
104
|
-
}
|
|
58
|
+
},
|
|
59
|
+
withRouter: false, //Only for demo purpose. Remove after demo
|
|
60
|
+
isActive: false
|
|
105
61
|
}
|
|
106
62
|
},
|
|
107
|
-
|
|
108
|
-
|
|
63
|
+
|
|
64
|
+
created() {
|
|
65
|
+
if (isNaN(this.percent)) this.percent = 0
|
|
66
|
+
this.$bus.$on('branching-hidden', this.resetIsActive)
|
|
67
|
+
},
|
|
68
|
+
|
|
69
|
+
beforeUnmount() {
|
|
70
|
+
this.$bus.$off('branching-hidden', this.resetIsActive)
|
|
71
|
+
},
|
|
72
|
+
|
|
73
|
+
methods: {
|
|
74
|
+
openBranch(e) {
|
|
75
|
+
this.isActive = true
|
|
76
|
+
this.$bus.$emit('open-sidebar', { ctx: 'ctxBranching', e })
|
|
77
|
+
},
|
|
78
|
+
|
|
79
|
+
resetIsActive() {
|
|
80
|
+
this.isActive = false
|
|
81
|
+
}
|
|
82
|
+
}
|
|
109
83
|
}
|
|
110
84
|
</script>
|
|
111
85
|
<style lang="scss">
|