@ecored-sena/base-kit 0.0.1
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/README.md +1 -0
- package/package.json +49 -0
- package/plugin/components/AccordionRED.vue +78 -0
- package/plugin/components/AcordionA.vue +78 -0
- package/plugin/components/Audio.vue +20 -0
- package/plugin/components/BannerHero.vue +104 -0
- package/plugin/components/CarouselCard.vue +70 -0
- package/plugin/components/CarouselRED.vue +65 -0
- package/plugin/components/Complementario.vue +81 -0
- package/plugin/components/Creditos.vue +101 -0
- package/plugin/components/Dialogo.vue +30 -0
- package/plugin/components/DialogoActividad.vue +274 -0
- package/plugin/components/DialogoBurbuja.vue +46 -0
- package/plugin/components/DialogoChat.vue +88 -0
- package/plugin/components/Footer.vue +42 -0
- package/plugin/components/GlobalComponents.js +39 -0
- package/plugin/components/Glosario.vue +100 -0
- package/plugin/components/ImagenInfografica.vue +100 -0
- package/plugin/components/ImagenInfograficaB.vue +68 -0
- package/plugin/components/Inicio.vue +128 -0
- package/plugin/components/LineaTiempoA.vue +30 -0
- package/plugin/components/LineaTiempoB.vue +36 -0
- package/plugin/components/LineaTiempoC.vue +95 -0
- package/plugin/components/LineaTiempoD.vue +51 -0
- package/plugin/components/LineaTiempoE.vue +25 -0
- package/plugin/components/ModalA.vue +22 -0
- package/plugin/components/PasosA.vue +59 -0
- package/plugin/components/PasosB.vue +90 -0
- package/plugin/components/Referencias.vue +45 -0
- package/plugin/components/ScrollHorizontal.vue +105 -0
- package/plugin/components/Separador.vue +12 -0
- package/plugin/components/SlyderA.vue +65 -0
- package/plugin/components/SlyderB.vue +48 -0
- package/plugin/components/SlyderC.vue +53 -0
- package/plugin/components/SlyderD.vue +50 -0
- package/plugin/components/SlyderE.vue +58 -0
- package/plugin/components/SlyderF.vue +141 -0
- package/plugin/components/TabsA.vue +44 -0
- package/plugin/components/TabsB.vue +40 -0
- package/plugin/components/TabsC.vue +39 -0
- package/plugin/components/TarjetaAudio.vue +65 -0
- package/plugin/components/TimeLineRED.vue +51 -0
- package/plugin/components/actividad/ActividadController.vue +34 -0
- package/plugin/components/actividad/actividadCompletar/ActividadCompletar.vue +283 -0
- package/plugin/components/actividad/actividadCompletar/ActividadCompletarFooter.vue +63 -0
- package/plugin/components/actividad/actividadCompletar/ActividadParrafo.vue +218 -0
- package/plugin/components/actividad/actividadCompletar/ActividadResultados.vue +215 -0
- package/plugin/components/actividad/actividadCuestionario/Actividad.vue +222 -0
- package/plugin/components/actividad/actividadCuestionario/ActividadBarraAvance.vue +116 -0
- package/plugin/components/actividad/actividadCuestionario/ActividadPregunta.vue +146 -0
- package/plugin/components/actividad/actividadCuestionario/ActividadResultados.vue +215 -0
- package/plugin/components/audioMixins.js +73 -0
- package/plugin/components/componentSlotMixins.js +87 -0
- package/plugin/components/dialogoMixins.js +28 -0
- package/plugin/components/globalMixins.js +11 -0
- package/plugin/components/plantilla/Accesibilidad.vue +101 -0
- package/plugin/components/plantilla/AsideMenu.vue +242 -0
- package/plugin/components/plantilla/BannerInterno.vue +66 -0
- package/plugin/components/plantilla/BannerPrincipal.vue +104 -0
- package/plugin/components/plantilla/BarraAvance.vue +379 -0
- package/plugin/components/plantilla/Curso.vue +12 -0
- package/plugin/components/plantilla/Footer.vue +42 -0
- package/plugin/components/plantilla/Header.vue +152 -0
- package/plugin/components/plantilla/ScrollHorizontal.vue +105 -0
- package/plugin/components/plantillaMixins.js +34 -0
- package/plugin/components/slyderMixins.js +18 -0
- package/plugin/plugin.js +49 -0
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# ecored-pkg-sena
|
package/package.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ecored-sena/base-kit",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Paquete para el desarrollo de componentes de recursos educativos digitales",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"SENA",
|
|
7
|
+
"ECORED",
|
|
8
|
+
"ecored-pkg"
|
|
9
|
+
],
|
|
10
|
+
"license": "AGPL-3.0",
|
|
11
|
+
"author": "ECORED SENA <ecoredsena.dev01@gmail.com>",
|
|
12
|
+
"type": "commonjs",
|
|
13
|
+
"main": "./plugin/plugin.js",
|
|
14
|
+
"engines": {
|
|
15
|
+
"node": ">=18"
|
|
16
|
+
},
|
|
17
|
+
"scripts": {
|
|
18
|
+
"serve": "vue-cli-service serve",
|
|
19
|
+
"build": "vue-cli-service build",
|
|
20
|
+
"lint": "vue-cli-service lint",
|
|
21
|
+
"build-plugin": "vue-cli-service build --target lib --name my-plugin ./src/plugin.js"
|
|
22
|
+
},
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@fortawesome/fontawesome-free": "^6.5.1",
|
|
25
|
+
"@popperjs/core": "^2.11.8",
|
|
26
|
+
"aos": "^2.3.4",
|
|
27
|
+
"bootstrap": "^5.3.8",
|
|
28
|
+
"vue": "^2.7.16",
|
|
29
|
+
"vue-router": "^3.6.5",
|
|
30
|
+
"vuex": "^3.4.0"
|
|
31
|
+
},
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"@vue/cli-plugin-babel": "^4.5.19",
|
|
34
|
+
"@vue/cli-plugin-eslint": "^4.5.19",
|
|
35
|
+
"@vue/cli-plugin-router": "^4.5.19",
|
|
36
|
+
"@vue/cli-plugin-vuex": "^4.5.19",
|
|
37
|
+
"@vue/cli-service": "^4.5.19",
|
|
38
|
+
"@vue/eslint-config-prettier": "^6.0.0",
|
|
39
|
+
"babel-eslint": "^10.1.0",
|
|
40
|
+
"eslint": "^6.7.2",
|
|
41
|
+
"eslint-plugin-prettier": "^3.4.1",
|
|
42
|
+
"eslint-plugin-vue": "^6.2.2",
|
|
43
|
+
"prettier": "^1.19.1",
|
|
44
|
+
"sass": "^1.97.3",
|
|
45
|
+
"sass-loader": "^8.0.2",
|
|
46
|
+
"vue-cli-plugin-pug": "^2.0.0",
|
|
47
|
+
"vue-template-compiler": "^2.7.16"
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
<template lang="pug">
|
|
2
|
+
.acordion
|
|
3
|
+
.p-3.pb-0.p-md-4.pb-md-0.mb-3(v-for="(elm, index) of elements" :key="elm.id" :class="cardClass(elm.id)")
|
|
4
|
+
|
|
5
|
+
.acordion__header.mb-3.mb-md-4(
|
|
6
|
+
@click="selected = selected != elm.id ? elm.id : 0"
|
|
7
|
+
@mouseover="mostrarIndicador = mostrarIndicador && index === 1 ? false : mostrarIndicador"
|
|
8
|
+
)
|
|
9
|
+
.d-flex.align-items-center
|
|
10
|
+
.acordion__accion(v-if="tipo === 'a'")
|
|
11
|
+
.acordion__accion__btn--a.h3.mb-0.me-3
|
|
12
|
+
i.fas.fa-minus(v-if="selected === elm.id")
|
|
13
|
+
i.fas.fa-plus(v-else)
|
|
14
|
+
.indicador__container(v-if="mostrarIndicador && index === 1")
|
|
15
|
+
.indicador--click.indicador--sm
|
|
16
|
+
|
|
17
|
+
.acordion__titulo
|
|
18
|
+
h3.mb-0(v-html="elm.titulo")
|
|
19
|
+
|
|
20
|
+
.acordion__accion(v-if="tipo === 'b'")
|
|
21
|
+
.acordion__accion__btn--b.h3.mb-0
|
|
22
|
+
i.fas.fa-angle-up(v-if="selected === elm.id")
|
|
23
|
+
i.fas.fa-angle-down(v-else)
|
|
24
|
+
.indicador__container.indicador--left(v-if="mostrarIndicador && index === 1")
|
|
25
|
+
.indicador--click.indicador--sm
|
|
26
|
+
|
|
27
|
+
.acordion__contenido(
|
|
28
|
+
:style="{ height: rendered && selected === elm.id ? getActiveHeight(elm.id) : 0 } "
|
|
29
|
+
)
|
|
30
|
+
.acordion__contenido__item.pb-3.pb-md-4(:ref="elm.id" v-child="elm.elm")
|
|
31
|
+
|
|
32
|
+
.hidden-slot
|
|
33
|
+
slot
|
|
34
|
+
</template>
|
|
35
|
+
|
|
36
|
+
<script>
|
|
37
|
+
import componentSlotMixins from './componentSlotMixins'
|
|
38
|
+
export default {
|
|
39
|
+
name: 'AccordionRED',
|
|
40
|
+
mixins: [componentSlotMixins],
|
|
41
|
+
props: {
|
|
42
|
+
claseTarjeta: {
|
|
43
|
+
type: String,
|
|
44
|
+
default: '',
|
|
45
|
+
},
|
|
46
|
+
tipo: {
|
|
47
|
+
type: String,
|
|
48
|
+
default: 'a',
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
data: () => ({
|
|
52
|
+
mostrarIndicador: true,
|
|
53
|
+
}),
|
|
54
|
+
mounted() {
|
|
55
|
+
this.$nextTick(() => {
|
|
56
|
+
setTimeout(() => {
|
|
57
|
+
this.domUpdated()
|
|
58
|
+
}, 5000)
|
|
59
|
+
})
|
|
60
|
+
},
|
|
61
|
+
methods: {
|
|
62
|
+
cardClass(id) {
|
|
63
|
+
const clasesFinales = []
|
|
64
|
+
if (this.claseTarjeta.length) {
|
|
65
|
+
clasesFinales.push(this.claseTarjeta)
|
|
66
|
+
} else {
|
|
67
|
+
clasesFinales.push('tarjeta tarjeta--blanca')
|
|
68
|
+
}
|
|
69
|
+
if (this.selected === id) {
|
|
70
|
+
clasesFinales.push('acordion__activo')
|
|
71
|
+
}
|
|
72
|
+
return clasesFinales
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
}
|
|
76
|
+
</script>
|
|
77
|
+
|
|
78
|
+
<style lang="sass"></style>
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
<template lang="pug">
|
|
2
|
+
.acordion
|
|
3
|
+
.p-3.pb-0.p-md-4.pb-md-0.mb-3(v-for="(elm, index) of elements" :key="elm.id" :class="cardClass(elm.id)")
|
|
4
|
+
|
|
5
|
+
.acordion__header.mb-3.mb-md-4(
|
|
6
|
+
@click="selected = selected != elm.id ? elm.id : 0"
|
|
7
|
+
@mouseover="mostrarIndicador = mostrarIndicador && index === 1 ? false : mostrarIndicador"
|
|
8
|
+
)
|
|
9
|
+
.d-flex.align-items-center
|
|
10
|
+
.acordion__accion(v-if="tipo === 'a'")
|
|
11
|
+
.acordion__accion__btn--a.h3.mb-0.me-3
|
|
12
|
+
i.fas.fa-minus(v-if="selected === elm.id")
|
|
13
|
+
i.fas.fa-plus(v-else)
|
|
14
|
+
.indicador__container(v-if="mostrarIndicador && index === 1")
|
|
15
|
+
.indicador--click.indicador--sm
|
|
16
|
+
|
|
17
|
+
.acordion__titulo
|
|
18
|
+
h3.mb-0(v-html="elm.titulo")
|
|
19
|
+
|
|
20
|
+
.acordion__accion(v-if="tipo === 'b'")
|
|
21
|
+
.acordion__accion__btn--b.h3.mb-0
|
|
22
|
+
i.fas.fa-angle-up(v-if="selected === elm.id")
|
|
23
|
+
i.fas.fa-angle-down(v-else)
|
|
24
|
+
.indicador__container.indicador--left(v-if="mostrarIndicador && index === 1")
|
|
25
|
+
.indicador--click.indicador--sm
|
|
26
|
+
|
|
27
|
+
.acordion__contenido(
|
|
28
|
+
:style="{ height: rendered && selected === elm.id ? getActiveHeight(elm.id) : 0 } "
|
|
29
|
+
)
|
|
30
|
+
.acordion__contenido__item.pb-3.pb-md-4(:ref="elm.id" v-child="elm.elm")
|
|
31
|
+
|
|
32
|
+
.hidden-slot
|
|
33
|
+
slot
|
|
34
|
+
</template>
|
|
35
|
+
|
|
36
|
+
<script>
|
|
37
|
+
import componentSlotMixins from './componentSlotMixins'
|
|
38
|
+
export default {
|
|
39
|
+
name: 'AcordionA',
|
|
40
|
+
mixins: [componentSlotMixins],
|
|
41
|
+
props: {
|
|
42
|
+
claseTarjeta: {
|
|
43
|
+
type: String,
|
|
44
|
+
default: '',
|
|
45
|
+
},
|
|
46
|
+
tipo: {
|
|
47
|
+
type: String,
|
|
48
|
+
default: 'a',
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
data: () => ({
|
|
52
|
+
mostrarIndicador: true,
|
|
53
|
+
}),
|
|
54
|
+
mounted() {
|
|
55
|
+
this.$nextTick(() => {
|
|
56
|
+
setTimeout(() => {
|
|
57
|
+
this.domUpdated()
|
|
58
|
+
}, 5000)
|
|
59
|
+
})
|
|
60
|
+
},
|
|
61
|
+
methods: {
|
|
62
|
+
cardClass(id) {
|
|
63
|
+
const clasesFinales = []
|
|
64
|
+
if (this.claseTarjeta.length) {
|
|
65
|
+
clasesFinales.push(this.claseTarjeta)
|
|
66
|
+
} else {
|
|
67
|
+
clasesFinales.push('tarjeta tarjeta--blanca')
|
|
68
|
+
}
|
|
69
|
+
if (this.selected === id) {
|
|
70
|
+
clasesFinales.push('acordion__activo')
|
|
71
|
+
}
|
|
72
|
+
return clasesFinales
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
}
|
|
76
|
+
</script>
|
|
77
|
+
|
|
78
|
+
<style lang="sass"></style>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<template lang="pug">
|
|
2
|
+
.audio.position-relative(@mouseover.once="$emit('audio-hover')")
|
|
3
|
+
slot
|
|
4
|
+
.spinner-border.spinner-border-sm(v-if="!audioCanPlay" role="status")
|
|
5
|
+
span.visually-hidden Loading..
|
|
6
|
+
button.audio__btn( v-else-if="state ==='pause'" @click="play")
|
|
7
|
+
img(src="@/assets/template/audio.svg")
|
|
8
|
+
button.audio__btn(v-else @click="pause")
|
|
9
|
+
img(src="@/assets/template/pause.svg")
|
|
10
|
+
</template>
|
|
11
|
+
|
|
12
|
+
<script>
|
|
13
|
+
import audioMixins from './audioMixins'
|
|
14
|
+
export default {
|
|
15
|
+
name: 'Audio',
|
|
16
|
+
mixins: [audioMixins],
|
|
17
|
+
}
|
|
18
|
+
</script>
|
|
19
|
+
|
|
20
|
+
<style lang="sass"></style>
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
<template lang="pug">
|
|
2
|
+
.banner-principal
|
|
3
|
+
.container.tarjeta(
|
|
4
|
+
:style="{'background-image': globalData.fondoBannerPrincipal ? `url(${globalData.fondoBannerPrincipal})` : 'none'}"
|
|
5
|
+
)
|
|
6
|
+
.row.banner-principal__row
|
|
7
|
+
.col-lg-7.col-xxl-5.ps-4.ps-sm-5.py-4.py-sm-5.banner-principal__info
|
|
8
|
+
.banner-principal__componente
|
|
9
|
+
h1.mb-0(v-html="globalData.Name")
|
|
10
|
+
.banner-principal__descripcion
|
|
11
|
+
p.mb-0(v-html="globalData.Description")
|
|
12
|
+
.banner-principal__accion
|
|
13
|
+
router-link.boton(:to="{name: iniciarLnk.nombreRuta }")
|
|
14
|
+
span.me-1 Ver más
|
|
15
|
+
i.fas.fa-angle-right
|
|
16
|
+
|
|
17
|
+
.d-none.d-lg-block.col-lg-5.px-0.banner-principal__img
|
|
18
|
+
img(:src="globalData.imagenBannerPrincipal")
|
|
19
|
+
div(v-for="img in extraImgs" :class="img.clases")
|
|
20
|
+
img(:src="img.imagen")
|
|
21
|
+
</template>
|
|
22
|
+
|
|
23
|
+
<script>
|
|
24
|
+
import mixins from './plantillaMixins'
|
|
25
|
+
export default {
|
|
26
|
+
name: 'BannerPrincipal',
|
|
27
|
+
mixins: [mixins],
|
|
28
|
+
computed: {
|
|
29
|
+
globalData() {
|
|
30
|
+
return this.$config.global
|
|
31
|
+
},
|
|
32
|
+
extraImgs() {
|
|
33
|
+
return this.$config.global.imagenesDecorativasBanner
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
}
|
|
37
|
+
</script>
|
|
38
|
+
|
|
39
|
+
<style lang="sass">
|
|
40
|
+
.banner-principal
|
|
41
|
+
p, h1, h2, h3, h4, h5, h6
|
|
42
|
+
color: $color-banner-text
|
|
43
|
+
|
|
44
|
+
.tarjeta
|
|
45
|
+
background-color: $color-banner-fondo
|
|
46
|
+
background-size: cover
|
|
47
|
+
background-position: center
|
|
48
|
+
|
|
49
|
+
&__img
|
|
50
|
+
position: relative
|
|
51
|
+
&>div
|
|
52
|
+
position: absolute
|
|
53
|
+
|
|
54
|
+
&__info
|
|
55
|
+
display: flex
|
|
56
|
+
flex-direction: column
|
|
57
|
+
justify-content: center
|
|
58
|
+
|
|
59
|
+
&__programa
|
|
60
|
+
display: flex
|
|
61
|
+
align-items: center
|
|
62
|
+
margin-bottom: 20px
|
|
63
|
+
|
|
64
|
+
&__componente
|
|
65
|
+
margin-bottom: 20px
|
|
66
|
+
h1
|
|
67
|
+
line-height: 1.1em
|
|
68
|
+
|
|
69
|
+
@media (max-width: $bp-max-xs)
|
|
70
|
+
font-size: 2em
|
|
71
|
+
|
|
72
|
+
&__descripcion
|
|
73
|
+
margin-bottom: 20px
|
|
74
|
+
|
|
75
|
+
&__row
|
|
76
|
+
@if $banner-principal-img-x == 'derecha'
|
|
77
|
+
justify-content: space-between
|
|
78
|
+
@else
|
|
79
|
+
justify-content: space-around
|
|
80
|
+
.banner-principal__img
|
|
81
|
+
padding-right: 1.5rem!important
|
|
82
|
+
@media (min-width: $bp-min-sm)
|
|
83
|
+
.banner-principal__img
|
|
84
|
+
padding-right: 3rem!important
|
|
85
|
+
|
|
86
|
+
&__img
|
|
87
|
+
@if $banner-principal-img-y == 'arriba'
|
|
88
|
+
align-self: flex-start
|
|
89
|
+
padding-bottom: 1.5rem
|
|
90
|
+
@media (min-width: $bp-min-sm)
|
|
91
|
+
padding-bottom: 3rem!important
|
|
92
|
+
@else if $banner-principal-img-y == 'abajo'
|
|
93
|
+
align-self: flex-end
|
|
94
|
+
padding-top: 1.5rem
|
|
95
|
+
@media (min-width: $bp-min-sm)
|
|
96
|
+
padding-top: 3rem!important
|
|
97
|
+
@else
|
|
98
|
+
align-self: center
|
|
99
|
+
padding-top: 1.5rem
|
|
100
|
+
padding-bottom: 1.5rem
|
|
101
|
+
@media (min-width: $bp-min-sm)
|
|
102
|
+
padding-top: 3rem!important
|
|
103
|
+
padding-bottom: 3rem!important
|
|
104
|
+
</style>
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
<template lang="pug">
|
|
2
|
+
.slyder-f
|
|
3
|
+
|
|
4
|
+
.slyder-f__btn.pe-3(@click="clickAnterior")
|
|
5
|
+
i.fas.fa-chevron-left
|
|
6
|
+
.slyder-f__main(:id="'slyder-f-' + mainId")
|
|
7
|
+
ScrollHorizontal(
|
|
8
|
+
v-if="elements.length && rendered"
|
|
9
|
+
:selectedId="'sl-' + selected"
|
|
10
|
+
row
|
|
11
|
+
)
|
|
12
|
+
.slyder-f__slyde(
|
|
13
|
+
v-for="(item, index) in elements"
|
|
14
|
+
:key="'sl-key-'+item.id"
|
|
15
|
+
:id="'sl-'+item.id"
|
|
16
|
+
:class="columnas"
|
|
17
|
+
v-child="item.elm"
|
|
18
|
+
)
|
|
19
|
+
.slyder-f__btn.ps-3(@click="clickSiguiente")
|
|
20
|
+
i.fas.fa-chevron-right
|
|
21
|
+
|
|
22
|
+
.hidden-slot
|
|
23
|
+
slot
|
|
24
|
+
</template>
|
|
25
|
+
|
|
26
|
+
<script>
|
|
27
|
+
import ScrollHorizontal from './ScrollHorizontal'
|
|
28
|
+
import componentSlotMixins from './componentSlotMixins'
|
|
29
|
+
import slyderMixins from './slyderMixins'
|
|
30
|
+
export default {
|
|
31
|
+
name: 'CarouselCard',
|
|
32
|
+
components: { ScrollHorizontal },
|
|
33
|
+
mixins: [componentSlotMixins, slyderMixins],
|
|
34
|
+
props: {
|
|
35
|
+
columnas: {
|
|
36
|
+
type: String,
|
|
37
|
+
default: '',
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
methods: {
|
|
41
|
+
clickAnterior() {
|
|
42
|
+
const ids = this.elements.map(element => element.id)
|
|
43
|
+
const idxOfSelected = ids.indexOf(this.selected)
|
|
44
|
+
if (idxOfSelected > 0) {
|
|
45
|
+
this.selected = ids[idxOfSelected - 1]
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
clickSiguiente() {
|
|
49
|
+
const ids = this.elements.map(element => element.id)
|
|
50
|
+
const container = document.querySelector('#slyder-f-' + this.mainId)
|
|
51
|
+
const containerComputedStyles = window.getComputedStyle(container)
|
|
52
|
+
const containerWidth = parseFloat(containerComputedStyles.width)
|
|
53
|
+
const elm = document.querySelector(`#sl-${this.elements[0].id}`)
|
|
54
|
+
const elmComputedStyles = window.getComputedStyle(elm)
|
|
55
|
+
const elmWidth = parseFloat(elmComputedStyles.width)
|
|
56
|
+
const elmtsPerContainer = Math.round(containerWidth / elmWidth)
|
|
57
|
+
const newIds =
|
|
58
|
+
elmtsPerContainer > 1
|
|
59
|
+
? ids.slice(0, ids.length - (elmtsPerContainer - 1))
|
|
60
|
+
: ids
|
|
61
|
+
const idxOfSelected = newIds.indexOf(this.selected)
|
|
62
|
+
if (idxOfSelected < newIds.length - 1) {
|
|
63
|
+
this.selected = newIds[idxOfSelected + 1]
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
}
|
|
68
|
+
</script>
|
|
69
|
+
|
|
70
|
+
<style lang="sass"></style>
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
<template lang="pug">
|
|
2
|
+
.slyder-a
|
|
3
|
+
.slyder-a__tipo-a(v-if="tipo === 'a'")
|
|
4
|
+
.slyder-a__btn--sigt(
|
|
5
|
+
v-if="navObj.next"
|
|
6
|
+
@click="selected = navObj.next"
|
|
7
|
+
@mouseover="mostrarIndicador = false"
|
|
8
|
+
)
|
|
9
|
+
.indicador__container.indicador--left(v-if="mostrarIndicador")
|
|
10
|
+
.indicador--click
|
|
11
|
+
.slyder-a__btn--atrs(v-if="navObj.back" @click="selected = navObj.back")
|
|
12
|
+
.slyder-a__bullets
|
|
13
|
+
.slyder-a__bullets__item(
|
|
14
|
+
v-for="bullet in elements"
|
|
15
|
+
:key="'sl-blt-key-'+bullet.id"
|
|
16
|
+
:class="{'slyder-a__bullets__item--active' : selected === bullet.id}"
|
|
17
|
+
@click="selected = bullet.id"
|
|
18
|
+
)
|
|
19
|
+
ScrollHorizontal(v-if="elements.length && rendered" :selectedId="'sl-' + selected" item-full-width)
|
|
20
|
+
.slyder-a__item(
|
|
21
|
+
v-for="item in elements"
|
|
22
|
+
:key="'sl-key-'+item.id"
|
|
23
|
+
:id="'sl-'+item.id"
|
|
24
|
+
v-child="item.elm"
|
|
25
|
+
)
|
|
26
|
+
.slyder-a__tipo-b.mt-3(v-if="tipo === 'b'")
|
|
27
|
+
.slyder-a__btn--atrs(:class="{'hide' : !navObj.back}" @click="selected = navObj.back")
|
|
28
|
+
|
|
29
|
+
.slyder-a__bullets
|
|
30
|
+
.slyder-a__bullets__item(
|
|
31
|
+
v-for="bullet in elements"
|
|
32
|
+
:key="'sl-blt-key-'+bullet.id"
|
|
33
|
+
:class="{'slyder-a__bullets__item--active' : selected === bullet.id}"
|
|
34
|
+
@click="selected = bullet.id"
|
|
35
|
+
)
|
|
36
|
+
.slyder-a__btn--sigt(
|
|
37
|
+
:class="{'hide' : !navObj.next}"
|
|
38
|
+
@click="selected = navObj.next"
|
|
39
|
+
@mouseover="mostrarIndicador = false"
|
|
40
|
+
)
|
|
41
|
+
.indicador__container.indicador--left(v-if="mostrarIndicador")
|
|
42
|
+
.indicador--click
|
|
43
|
+
.hidden-slot
|
|
44
|
+
slot
|
|
45
|
+
</template>
|
|
46
|
+
|
|
47
|
+
<script>
|
|
48
|
+
import componentSlotMixins from './componentSlotMixins'
|
|
49
|
+
export default {
|
|
50
|
+
name: 'CarouselRED',
|
|
51
|
+
mixins: [componentSlotMixins],
|
|
52
|
+
props: {
|
|
53
|
+
tipo: {
|
|
54
|
+
type: String,
|
|
55
|
+
default: 'a',
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
data: () => ({
|
|
59
|
+
mostrarIndicador: true,
|
|
60
|
+
secuencial: true,
|
|
61
|
+
}),
|
|
62
|
+
}
|
|
63
|
+
</script>
|
|
64
|
+
|
|
65
|
+
<style lang="sass"></style>
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
<template lang="pug">
|
|
2
|
+
.curso-main-container.complementario
|
|
3
|
+
BannerInterno(icono="far fa-folder-open" titulo="Material complementario")
|
|
4
|
+
.container.tarjeta.tarjeta--blanca.p-4.p-md-5.mb-5
|
|
5
|
+
.table-responsive
|
|
6
|
+
table
|
|
7
|
+
thead
|
|
8
|
+
tr
|
|
9
|
+
th(colspan='3' scope="col") Tema
|
|
10
|
+
th(colspan='5' scope="col") Referencia APA del material
|
|
11
|
+
th(colspan='2' scope="col") Tipo
|
|
12
|
+
th(colspan='2' scope="col") Enlace
|
|
13
|
+
tbody
|
|
14
|
+
tr(v-for="(item, index) in computedData" :key="'complementario-'+index")
|
|
15
|
+
td.text-start(colspan='3' scope="row" v-html="item.tema")
|
|
16
|
+
td.text-start(colspan='5' scope="row" v-html="item.referencia")
|
|
17
|
+
td(colspan='2' v-html="item.tipo")
|
|
18
|
+
td(colspan='2')
|
|
19
|
+
.complementario__enlaces
|
|
20
|
+
a.complementario__btn(v-for="link of item.link" :href="link" target="_blank")
|
|
21
|
+
i.fas.fa-external-link-alt
|
|
22
|
+
|
|
23
|
+
</template>
|
|
24
|
+
<script>
|
|
25
|
+
export default {
|
|
26
|
+
name: 'MaterialComplementario',
|
|
27
|
+
computed: {
|
|
28
|
+
complementarioData() {
|
|
29
|
+
return this.$config.complementario
|
|
30
|
+
},
|
|
31
|
+
computedData() {
|
|
32
|
+
const data = this.$config.complementario
|
|
33
|
+
return data.map(item => {
|
|
34
|
+
let nuevoLink = []
|
|
35
|
+
if (item.link) {
|
|
36
|
+
if (typeof item.link === 'string') {
|
|
37
|
+
nuevoLink.push(item.link)
|
|
38
|
+
} else {
|
|
39
|
+
nuevoLink = item.link
|
|
40
|
+
}
|
|
41
|
+
} else if (item.descarga) {
|
|
42
|
+
if (typeof item.descarga === 'string') {
|
|
43
|
+
nuevoLink.push(this.obtenerLink(item.descarga))
|
|
44
|
+
} else {
|
|
45
|
+
item.descarga.forEach(link => {
|
|
46
|
+
nuevoLink.push(this.obtenerLink(link))
|
|
47
|
+
})
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
...item,
|
|
52
|
+
link: nuevoLink,
|
|
53
|
+
}
|
|
54
|
+
})
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
}
|
|
58
|
+
</script>
|
|
59
|
+
|
|
60
|
+
<style lang="sass">
|
|
61
|
+
.complementario
|
|
62
|
+
&__enlaces
|
|
63
|
+
display: flex
|
|
64
|
+
justify-content: center
|
|
65
|
+
flex-wrap: wrap
|
|
66
|
+
a
|
|
67
|
+
margin: 0 5px
|
|
68
|
+
&__btn
|
|
69
|
+
font-size: 1.5em
|
|
70
|
+
line-height: 1em
|
|
71
|
+
table
|
|
72
|
+
width: calc(100% - 1px)
|
|
73
|
+
min-width: 800px
|
|
74
|
+
thead
|
|
75
|
+
background-color: $color-sistema-e
|
|
76
|
+
th
|
|
77
|
+
border-color: $color-sistema-e
|
|
78
|
+
th, td
|
|
79
|
+
padding: 25px 20px
|
|
80
|
+
text-align: center
|
|
81
|
+
</style>
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
<template lang="pug">
|
|
2
|
+
.curso-main-container.creditos-vista
|
|
3
|
+
BannerInterno(icono="far fa-registered" titulo="Créditos")
|
|
4
|
+
.container.tarjeta.tarjeta--blanca.p-4.p-md-5
|
|
5
|
+
.creditos.mb-4.mb-md-5
|
|
6
|
+
.creditos__item(
|
|
7
|
+
v-for="(creditoObj, index) of creditosData"
|
|
8
|
+
:key="'credito-'+index"
|
|
9
|
+
:class="index != creditosData.length -1 ? 'mb-4' : ''"
|
|
10
|
+
)
|
|
11
|
+
.creditos__titulo {{creditoObj.titulo}}
|
|
12
|
+
table
|
|
13
|
+
tbody
|
|
14
|
+
tr(
|
|
15
|
+
v-for="(item, idx) of creditoObj.autores"
|
|
16
|
+
:key="'autor-'+idx"
|
|
17
|
+
)
|
|
18
|
+
td.text-bold(colspan='2' v-html="renderText(item.nombre)")
|
|
19
|
+
td(colspan='2' v-html="renderText(item.cargo)")
|
|
20
|
+
td(colspan='3' v-html="renderText(item.centro)")
|
|
21
|
+
.row.mb-4.mb-md-5
|
|
22
|
+
.col-md-6.mb-4.mb-md-0
|
|
23
|
+
.tarjeta.credito.p-3.text-center.h-100
|
|
24
|
+
img.d-inline-block(src="@/assets/template/creditos-img.svg" style="width: 70px")
|
|
25
|
+
p(v-html="creditosAdicionales.imagenes")
|
|
26
|
+
.col-md-6
|
|
27
|
+
.tarjeta.credito.p-3.text-center.h-100
|
|
28
|
+
img.d-inline-block(src="@/assets/template/creditos-cc.svg" style="width: 70px;")
|
|
29
|
+
p.mb-0(v-html="creditosAdicionales.creativeCommons")
|
|
30
|
+
|
|
31
|
+
Footer(all-round)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
</template>
|
|
36
|
+
<script>
|
|
37
|
+
import plantillaMixins from './plantillaMixins'
|
|
38
|
+
export default {
|
|
39
|
+
name: 'Creditos',
|
|
40
|
+
mixins: [plantillaMixins],
|
|
41
|
+
data: () => ({
|
|
42
|
+
configTitulos: {
|
|
43
|
+
liderEquipo: 'ECOSISTEMA DE RECURSOS EDUCATIVOS DIGITALES',
|
|
44
|
+
contenidoInstruccional: 'CONTENIDO INSTRUCCIONAL',
|
|
45
|
+
desarrolloProducto:
|
|
46
|
+
'DISEÑO Y DESARROLLO DE RECURSOS EDUCATIVOS DIGITALES',
|
|
47
|
+
gestoresRepositorio: 'GESTORES DE REPOSITORIO',
|
|
48
|
+
},
|
|
49
|
+
}),
|
|
50
|
+
computed: {
|
|
51
|
+
creditosData() {
|
|
52
|
+
return this.$config.creditos
|
|
53
|
+
},
|
|
54
|
+
creditosAdicionales() {
|
|
55
|
+
return this.$config.creditosAdicionales
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
methods: {
|
|
59
|
+
renderText(textObj) {
|
|
60
|
+
let newText = ''
|
|
61
|
+
if (Array.isArray(textObj)) {
|
|
62
|
+
textObj.forEach((texto, index) => {
|
|
63
|
+
newText += (index ? '<br/>' : '') + texto
|
|
64
|
+
})
|
|
65
|
+
} else {
|
|
66
|
+
newText += textObj
|
|
67
|
+
}
|
|
68
|
+
return newText
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
}
|
|
72
|
+
</script>
|
|
73
|
+
|
|
74
|
+
<style lang="sass">
|
|
75
|
+
.creditos-vista
|
|
76
|
+
.tarjeta.credito
|
|
77
|
+
background-color: $color-sistema-d
|
|
78
|
+
|
|
79
|
+
.creditos
|
|
80
|
+
color: $color-sistema-b
|
|
81
|
+
overflow-x: auto
|
|
82
|
+
|
|
83
|
+
&__item
|
|
84
|
+
min-width: 490px
|
|
85
|
+
|
|
86
|
+
p
|
|
87
|
+
line-height: 1.3em
|
|
88
|
+
margin-bottom: 0
|
|
89
|
+
color: $color-sistema-b
|
|
90
|
+
|
|
91
|
+
&__titulo
|
|
92
|
+
font-weight: $base-bold-font-weight
|
|
93
|
+
background-color: $color-sistema-d
|
|
94
|
+
padding: 5px 10px
|
|
95
|
+
border-top-radius: $base-border-radius
|
|
96
|
+
border-top-left-radius: $base-border-radius
|
|
97
|
+
border-top-right-radius: $base-border-radius
|
|
98
|
+
table
|
|
99
|
+
td, th
|
|
100
|
+
border-color: $color-sistema-d
|
|
101
|
+
</style>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<template lang="pug">
|
|
2
|
+
.dialogo__chat.dialogo__chat--no-scroll.p-4.me-0
|
|
3
|
+
DialogoBurbuja.mb-3(
|
|
4
|
+
v-for="dialogoItem in dialogoComputed"
|
|
5
|
+
:key="`dialogo-item-${dialogoItem.id}`"
|
|
6
|
+
:dialogoItem="dialogoItem"
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
</template>
|
|
10
|
+
|
|
11
|
+
<script>
|
|
12
|
+
import dialogoMixins from './dialogoMixins'
|
|
13
|
+
export default {
|
|
14
|
+
name: 'Dialogo',
|
|
15
|
+
mixins: [dialogoMixins],
|
|
16
|
+
props: {
|
|
17
|
+
dialogo: {
|
|
18
|
+
type: Object,
|
|
19
|
+
default: () => ({}),
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
computed: {
|
|
23
|
+
dialogoComputed() {
|
|
24
|
+
return this.dialogoMerge(this.dialogo)
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
}
|
|
28
|
+
</script>
|
|
29
|
+
|
|
30
|
+
<style></style>
|