@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.
Files changed (67) hide show
  1. package/README.md +1 -0
  2. package/package.json +49 -0
  3. package/plugin/components/AccordionRED.vue +78 -0
  4. package/plugin/components/AcordionA.vue +78 -0
  5. package/plugin/components/Audio.vue +20 -0
  6. package/plugin/components/BannerHero.vue +104 -0
  7. package/plugin/components/CarouselCard.vue +70 -0
  8. package/plugin/components/CarouselRED.vue +65 -0
  9. package/plugin/components/Complementario.vue +81 -0
  10. package/plugin/components/Creditos.vue +101 -0
  11. package/plugin/components/Dialogo.vue +30 -0
  12. package/plugin/components/DialogoActividad.vue +274 -0
  13. package/plugin/components/DialogoBurbuja.vue +46 -0
  14. package/plugin/components/DialogoChat.vue +88 -0
  15. package/plugin/components/Footer.vue +42 -0
  16. package/plugin/components/GlobalComponents.js +39 -0
  17. package/plugin/components/Glosario.vue +100 -0
  18. package/plugin/components/ImagenInfografica.vue +100 -0
  19. package/plugin/components/ImagenInfograficaB.vue +68 -0
  20. package/plugin/components/Inicio.vue +128 -0
  21. package/plugin/components/LineaTiempoA.vue +30 -0
  22. package/plugin/components/LineaTiempoB.vue +36 -0
  23. package/plugin/components/LineaTiempoC.vue +95 -0
  24. package/plugin/components/LineaTiempoD.vue +51 -0
  25. package/plugin/components/LineaTiempoE.vue +25 -0
  26. package/plugin/components/ModalA.vue +22 -0
  27. package/plugin/components/PasosA.vue +59 -0
  28. package/plugin/components/PasosB.vue +90 -0
  29. package/plugin/components/Referencias.vue +45 -0
  30. package/plugin/components/ScrollHorizontal.vue +105 -0
  31. package/plugin/components/Separador.vue +12 -0
  32. package/plugin/components/SlyderA.vue +65 -0
  33. package/plugin/components/SlyderB.vue +48 -0
  34. package/plugin/components/SlyderC.vue +53 -0
  35. package/plugin/components/SlyderD.vue +50 -0
  36. package/plugin/components/SlyderE.vue +58 -0
  37. package/plugin/components/SlyderF.vue +141 -0
  38. package/plugin/components/TabsA.vue +44 -0
  39. package/plugin/components/TabsB.vue +40 -0
  40. package/plugin/components/TabsC.vue +39 -0
  41. package/plugin/components/TarjetaAudio.vue +65 -0
  42. package/plugin/components/TimeLineRED.vue +51 -0
  43. package/plugin/components/actividad/ActividadController.vue +34 -0
  44. package/plugin/components/actividad/actividadCompletar/ActividadCompletar.vue +283 -0
  45. package/plugin/components/actividad/actividadCompletar/ActividadCompletarFooter.vue +63 -0
  46. package/plugin/components/actividad/actividadCompletar/ActividadParrafo.vue +218 -0
  47. package/plugin/components/actividad/actividadCompletar/ActividadResultados.vue +215 -0
  48. package/plugin/components/actividad/actividadCuestionario/Actividad.vue +222 -0
  49. package/plugin/components/actividad/actividadCuestionario/ActividadBarraAvance.vue +116 -0
  50. package/plugin/components/actividad/actividadCuestionario/ActividadPregunta.vue +146 -0
  51. package/plugin/components/actividad/actividadCuestionario/ActividadResultados.vue +215 -0
  52. package/plugin/components/audioMixins.js +73 -0
  53. package/plugin/components/componentSlotMixins.js +87 -0
  54. package/plugin/components/dialogoMixins.js +28 -0
  55. package/plugin/components/globalMixins.js +11 -0
  56. package/plugin/components/plantilla/Accesibilidad.vue +101 -0
  57. package/plugin/components/plantilla/AsideMenu.vue +242 -0
  58. package/plugin/components/plantilla/BannerInterno.vue +66 -0
  59. package/plugin/components/plantilla/BannerPrincipal.vue +104 -0
  60. package/plugin/components/plantilla/BarraAvance.vue +379 -0
  61. package/plugin/components/plantilla/Curso.vue +12 -0
  62. package/plugin/components/plantilla/Footer.vue +42 -0
  63. package/plugin/components/plantilla/Header.vue +152 -0
  64. package/plugin/components/plantilla/ScrollHorizontal.vue +105 -0
  65. package/plugin/components/plantillaMixins.js +34 -0
  66. package/plugin/components/slyderMixins.js +18 -0
  67. 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>