create-openclass-uniminuto 1.6.2 → 1.6.4
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/bin/create-openclass-uniminuto.mjs +309 -91
- package/package.json +1 -1
- package/template/.github/workflows/deploy.yml +2 -2
- package/template/README.md +385 -343
- package/template/demo_semana1.md +1 -1
- package/template/demo_semana2.md +1 -1
- package/template/demo_semana3.md +1 -1
- package/template/demo_semana4.md +1 -1
- package/template/demo_semana5.md +1 -1
- package/template/demo_semana6.md +1 -1
- package/template/demo_semana7.md +1 -1
- package/template/demo_semana8.md +1 -1
- package/template/package-lock.json +11568 -11568
- package/template/package.json +63 -64
- package/template/plantillas/launcher.md +1 -1
- package/template/plantillas/semana.md +214 -88
- package/template/scripts/decks.mjs +11 -40
- package/template/scripts/generar-desde-config.mjs +312 -48
- package/template/slides.md +1 -1
package/template/package.json
CHANGED
|
@@ -1,64 +1,63 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "openclass-demo",
|
|
3
|
-
"version": "1.6.2",
|
|
4
|
-
"description": "Presentaciones Open Class del curso Curso Open Class de ejemplo.",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"private": true,
|
|
7
|
-
"scripts": {
|
|
8
|
-
"dev": "slidev slides.md --open --port 3000",
|
|
9
|
-
"config": "node scripts/generar-desde-config.mjs",
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"dev:
|
|
15
|
-
"dev:
|
|
16
|
-
"dev:
|
|
17
|
-
"dev:
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"build:
|
|
26
|
-
"build:
|
|
27
|
-
"build:
|
|
28
|
-
"build:
|
|
29
|
-
"build:
|
|
30
|
-
"build:
|
|
31
|
-
"build:
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"pages
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
"@fontsource/
|
|
51
|
-
"@fontsource/
|
|
52
|
-
"@
|
|
53
|
-
"
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
"@slidev/
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "openclass-demo",
|
|
3
|
+
"version": "1.6.2",
|
|
4
|
+
"description": "Presentaciones Open Class del curso Curso Open Class de ejemplo.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"private": true,
|
|
7
|
+
"scripts": {
|
|
8
|
+
"dev": "slidev slides.md --open --port 3000",
|
|
9
|
+
"config": "node scripts/generar-desde-config.mjs",
|
|
10
|
+
"semana": "node scripts/semana.mjs",
|
|
11
|
+
"pages:check": "node scripts/preparar-github-pages.mjs",
|
|
12
|
+
"actualizar:tema": "npm create openclass-uniminuto@latest . -- --update-theme",
|
|
13
|
+
"actualizar:tema:preview": "npm run actualizar:tema && npm run config && npm run dev",
|
|
14
|
+
"dev:s1": "slidev demo_semana1.md --open --port 3001",
|
|
15
|
+
"dev:s2": "slidev demo_semana2.md --open --port 3002",
|
|
16
|
+
"dev:s3": "slidev demo_semana3.md --open --port 3003",
|
|
17
|
+
"dev:s4": "slidev demo_semana4.md --open --port 3004",
|
|
18
|
+
"dev:s5": "slidev demo_semana5.md --open --port 3005",
|
|
19
|
+
"dev:s6": "slidev demo_semana6.md --open --port 3006",
|
|
20
|
+
"dev:s7": "slidev demo_semana7.md --open --port 3007",
|
|
21
|
+
"dev:s8": "slidev demo_semana8.md --open --port 3008",
|
|
22
|
+
"clean": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"",
|
|
23
|
+
"clean:downloads": "node -e \"require('fs').rmSync('public/descargas',{recursive:true,force:true}); require('fs').mkdirSync('public/descargas',{recursive:true})\"",
|
|
24
|
+
"clean:cache": "node -e \"require('fs').rmSync('.slidev',{recursive:true,force:true}); require('fs').rmSync('node_modules/.vite',{recursive:true,force:true})\"",
|
|
25
|
+
"build:index": "slidev build slides.md --out dist --base / --without-notes",
|
|
26
|
+
"build:s1": "slidev build demo_semana1.md --out dist/semanas/demo_semana1 --base /semanas/demo_semana1/ --without-notes",
|
|
27
|
+
"build:s2": "slidev build demo_semana2.md --out dist/semanas/demo_semana2 --base /semanas/demo_semana2/ --without-notes",
|
|
28
|
+
"build:s3": "slidev build demo_semana3.md --out dist/semanas/demo_semana3 --base /semanas/demo_semana3/ --without-notes",
|
|
29
|
+
"build:s4": "slidev build demo_semana4.md --out dist/semanas/demo_semana4 --base /semanas/demo_semana4/ --without-notes",
|
|
30
|
+
"build:s5": "slidev build demo_semana5.md --out dist/semanas/demo_semana5 --base /semanas/demo_semana5/ --without-notes",
|
|
31
|
+
"build:s6": "slidev build demo_semana6.md --out dist/semanas/demo_semana6 --base /semanas/demo_semana6/ --without-notes",
|
|
32
|
+
"build:s7": "slidev build demo_semana7.md --out dist/semanas/demo_semana7 --base /semanas/demo_semana7/ --without-notes",
|
|
33
|
+
"build:s8": "slidev build demo_semana8.md --out dist/semanas/demo_semana8 --base /semanas/demo_semana8/ --without-notes",
|
|
34
|
+
"build:all": "node scripts/build-site.mjs",
|
|
35
|
+
"build:incremental": "node scripts/build-incremental.mjs",
|
|
36
|
+
"export:downloads": "node scripts/export-downloads.mjs",
|
|
37
|
+
"export:incremental": "node scripts/export-incremental.mjs",
|
|
38
|
+
"vista": "npm run config && npm run clean && npm run export:downloads && npm run build:all && http-server dist -p 4173 -c-1 -o",
|
|
39
|
+
"publicar": "node scripts/publicar.mjs",
|
|
40
|
+
"dev:todo": "node scripts/dev-all.mjs",
|
|
41
|
+
"nuevo": "node scripts/nuevo-curso.mjs",
|
|
42
|
+
"zip:template": "node scripts/zip-template.mjs",
|
|
43
|
+
"preview:static": "npm run config && npm run build:all && http-server dist -p 4173 -c-1",
|
|
44
|
+
"preview:pages": "npm run config && npm run export:downloads && npm run build:all && http-server dist -p 4173 -c-1",
|
|
45
|
+
"pages:build": "npm run config && npm run export:downloads && npm run build:all",
|
|
46
|
+
"pages:preview": "npm run preview:pages"
|
|
47
|
+
},
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"@fontsource/atkinson-hyperlegible": "^5.2.8",
|
|
50
|
+
"@fontsource/merriweather-sans": "^5.2.7",
|
|
51
|
+
"@fontsource/opendyslexic": "^5.2.5",
|
|
52
|
+
"@slidev/theme-seriph": "latest",
|
|
53
|
+
"vue": "^3.5.33"
|
|
54
|
+
},
|
|
55
|
+
"devDependencies": {
|
|
56
|
+
"@slidev/cli": "^52.15.0",
|
|
57
|
+
"@slidev/theme-default": "^0.25.0",
|
|
58
|
+
"concurrently": "^9.2.1",
|
|
59
|
+
"http-server": "^14.1.1",
|
|
60
|
+
"playwright-chromium": "^1.59.1",
|
|
61
|
+
"vite": "^7.1.12"
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -11,167 +11,293 @@ Semana {{WEEK_NUMBER}} — {{WEEK_TITLE}}
|
|
|
11
11
|
::date::
|
|
12
12
|
{{WEEK_DATE}}
|
|
13
13
|
|
|
14
|
+
---
|
|
15
|
+
layout: slide-02-titulo
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
::title::
|
|
19
|
+
Ruta de la Open Class
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
layout: slide-08-titulo-texto
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
::title::
|
|
26
|
+
Contexto de la semana
|
|
27
|
+
|
|
28
|
+
::content::
|
|
29
|
+
Esta sesión aborda el tema **{{WEEK_THEME}}** desde una perspectiva aplicada, académica y profesional.
|
|
30
|
+
|
|
31
|
+
La intención es que el estudiante relacione los conceptos centrales de la semana con situaciones reales del campo disciplinar, identifique problemas, analice alternativas y proponga decisiones fundamentadas.
|
|
32
|
+
|
|
14
33
|
---
|
|
15
34
|
layout: slide-09-objetivos
|
|
16
35
|
---
|
|
17
36
|
|
|
18
37
|
::title::
|
|
19
|
-
Objetivos de
|
|
38
|
+
Objetivos de aprendizaje
|
|
39
|
+
|
|
40
|
+
::content::
|
|
41
|
+
Al finalizar esta Open Class, el estudiante estará en capacidad de:
|
|
42
|
+
|
|
43
|
+
1. Reconocer los conceptos principales asociados con **{{WEEK_THEME}}**.
|
|
44
|
+
2. Analizar una situación aplicada del curso a partir de criterios técnicos y académicos.
|
|
45
|
+
3. Relacionar la teoría con una actividad práctica o evaluativa.
|
|
46
|
+
4. Formular conclusiones que evidencien comprensión, argumentación y transferencia.
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
layout: slide-03-imagen-izquierda
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
::title::
|
|
53
|
+
Lectura inicial del problema
|
|
54
|
+
|
|
55
|
+
::image::
|
|
56
|
+
<img src="/imagenes/favicon.png" alt="Imagen institucional de apoyo" />
|
|
20
57
|
|
|
21
58
|
::content::
|
|
22
|
-
|
|
59
|
+
En esta sección se presenta una situación inicial que permite introducir el tema de la semana.
|
|
60
|
+
|
|
61
|
+
La imagen puede reemplazarse por una ilustración del curso ubicada en:
|
|
23
62
|
|
|
24
|
-
|
|
25
|
-
- Relacionar la temática de la semana con situaciones académicas, profesionales o institucionales.
|
|
26
|
-
- Desarrollar una actividad breve que evidencie comprensión, análisis y aplicación.
|
|
63
|
+
`public/imagenes/`
|
|
27
64
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
-->
|
|
65
|
+
Ejemplo:
|
|
66
|
+
|
|
67
|
+
`/imagenes/nombre_de_la_imagen.png`
|
|
32
68
|
|
|
33
69
|
---
|
|
34
|
-
layout: slide-
|
|
70
|
+
layout: slide-04-imagen-derecha
|
|
35
71
|
---
|
|
36
72
|
|
|
37
73
|
::title::
|
|
38
|
-
|
|
74
|
+
Análisis del contexto
|
|
39
75
|
|
|
40
76
|
::content::
|
|
41
|
-
|
|
77
|
+
Este layout funciona bien cuando se desea ubicar la explicación conceptual en la parte izquierda y una imagen de apoyo en la parte derecha.
|
|
78
|
+
|
|
79
|
+
Puedes usarlo para:
|
|
42
80
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
- Socialización de hallazgos.
|
|
48
|
-
- Resolución de dudas.
|
|
49
|
-
- Cierre académico y recordatorio de la Encuesta de Percepción Estudiantil.
|
|
81
|
+
* Presentar un caso.
|
|
82
|
+
* Mostrar un diagrama.
|
|
83
|
+
* Explicar un flujo.
|
|
84
|
+
* Relacionar conceptos con una situación profesional.
|
|
50
85
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
86
|
+
::image::
|
|
87
|
+
<img src="/imagenes/favicon.png" alt="Imagen de apoyo para análisis del contexto" />
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
layout: slide-05-titulo-superior-texto-derecha
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
::title::
|
|
94
|
+
Concepto clave de la semana
|
|
95
|
+
|
|
96
|
+
::image::
|
|
97
|
+
<img src="/imagenes/favicon.png" alt="Imagen conceptual de apoyo" />
|
|
98
|
+
|
|
99
|
+
::content::
|
|
100
|
+
Este layout permite destacar una imagen amplia en la parte izquierda y ubicar la explicación en la parte derecha.
|
|
101
|
+
|
|
102
|
+
Úsalo cuando la imagen sea el punto de partida del análisis y el texto funcione como interpretación, guía o síntesis.
|
|
103
|
+
|
|
104
|
+
Ejemplo de uso:
|
|
105
|
+
|
|
106
|
+
* Arquitectura de un sistema.
|
|
107
|
+
* Mapa conceptual.
|
|
108
|
+
* Flujo de proceso.
|
|
109
|
+
* Escenario problemático.
|
|
110
|
+
* Representación visual de un caso.
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
layout: slide-06-titulo-superior-texto-izquierda
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
::title::
|
|
117
|
+
Relación entre teoría y práctica
|
|
118
|
+
|
|
119
|
+
::content::
|
|
120
|
+
Este layout invierte la organización anterior: el texto queda a la izquierda y la imagen a la derecha.
|
|
121
|
+
|
|
122
|
+
Es útil cuando primero quieres orientar la lectura conceptual y luego apoyar la explicación con una imagen.
|
|
123
|
+
|
|
124
|
+
Se recomienda usarlo para:
|
|
125
|
+
|
|
126
|
+
1. Explicar criterios.
|
|
127
|
+
2. Presentar una secuencia de análisis.
|
|
128
|
+
3. Introducir una práctica guiada.
|
|
129
|
+
4. Preparar al estudiante para una actividad.
|
|
130
|
+
|
|
131
|
+
::image::
|
|
132
|
+
<img src="/imagenes/favicon.png" alt="Imagen de apoyo para teoría y práctica" />
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
layout: slide-07-multimedia-con-titulo
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
::title::
|
|
139
|
+
Recurso multimedia de apoyo
|
|
140
|
+
|
|
141
|
+
::media::
|
|
142
|
+
|
|
143
|
+
<iframe
|
|
144
|
+
width="100%"
|
|
145
|
+
height="100%"
|
|
146
|
+
src="https://www.youtube.com/embed/dQw4w9WgXcQ"
|
|
147
|
+
title="Recurso multimedia de apoyo"
|
|
148
|
+
frameborder="0"
|
|
149
|
+
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
|
|
150
|
+
allowfullscreen>
|
|
151
|
+
</iframe>
|
|
55
152
|
|
|
56
153
|
---
|
|
57
154
|
layout: slide-08-titulo-texto
|
|
58
155
|
---
|
|
59
156
|
|
|
60
157
|
::title::
|
|
61
|
-
|
|
158
|
+
Síntesis conceptual
|
|
62
159
|
|
|
63
160
|
::content::
|
|
64
|
-
|
|
161
|
+
Utiliza este layout para desarrollar una explicación central sin imágenes.
|
|
65
162
|
|
|
66
|
-
|
|
163
|
+
Ejemplo de estructura sugerida:
|
|
67
164
|
|
|
68
|
-
|
|
165
|
+
* **Idea principal:** presentar el concepto fundamental.
|
|
166
|
+
* **Aplicación:** explicar cómo se observa en un contexto real.
|
|
167
|
+
* **Criterio de análisis:** indicar qué debe observar el estudiante.
|
|
168
|
+
* **Conclusión parcial:** cerrar con una frase que conecte con la actividad.
|
|
69
169
|
|
|
70
|
-
|
|
71
|
-
Notas del presentador:
|
|
72
|
-
Iniciar con una pregunta detonante o un ejemplo cercano al contexto del grupo. Evitar una exposición únicamente teórica: llevar el tema hacia decisiones, consecuencias, riesgos, oportunidades o productos concretos.
|
|
73
|
-
-->
|
|
170
|
+
También puedes usar párrafos breves cuando necesites explicar una idea con mayor profundidad académica.
|
|
74
171
|
|
|
75
172
|
---
|
|
76
173
|
layout: slide-10-titulo-dos-columnas
|
|
77
174
|
---
|
|
78
175
|
|
|
79
176
|
::title::
|
|
80
|
-
|
|
177
|
+
Comparación de enfoques
|
|
81
178
|
|
|
82
179
|
::left::
|
|
83
|
-
**Ideas clave**
|
|
84
180
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
181
|
+
### Enfoque 1
|
|
182
|
+
|
|
183
|
+
Este espacio puede usarse para presentar una primera postura, alternativa, componente o criterio de análisis.
|
|
184
|
+
|
|
185
|
+
* Característica principal.
|
|
186
|
+
* Ventaja.
|
|
187
|
+
* Riesgo o limitación.
|
|
188
|
+
* Ejemplo aplicado.
|
|
89
189
|
|
|
90
190
|
::right::
|
|
91
|
-
**Preguntas orientadoras**
|
|
92
191
|
|
|
93
|
-
|
|
94
|
-
- ¿Qué decisiones se pueden tomar a partir de este conocimiento?
|
|
95
|
-
- ¿Qué evidencias muestran que el estudiante comprendió el tema?
|
|
192
|
+
### Enfoque 2
|
|
96
193
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
194
|
+
Este espacio puede usarse para contrastar una segunda postura, alternativa, componente o criterio.
|
|
195
|
+
|
|
196
|
+
* Característica principal.
|
|
197
|
+
* Ventaja.
|
|
198
|
+
* Riesgo o limitación.
|
|
199
|
+
* Ejemplo aplicado.
|
|
101
200
|
|
|
102
201
|
---
|
|
103
|
-
layout: slide-
|
|
202
|
+
layout: slide-11-dos-titulos-dos-columnas
|
|
104
203
|
---
|
|
105
204
|
|
|
106
|
-
::
|
|
107
|
-
|
|
205
|
+
::leftTitle::
|
|
206
|
+
Antes del análisis
|
|
207
|
+
|
|
208
|
+
::rightTitle::
|
|
209
|
+
Después del análisis
|
|
108
210
|
|
|
109
211
|
::left::
|
|
110
|
-
|
|
212
|
+
En esta columna puedes describir la situación inicial, las ideas previas, los datos disponibles o las condiciones del problema.
|
|
111
213
|
|
|
112
|
-
|
|
113
|
-
- Analizar el caso, pregunta o reto propuesto por el docente.
|
|
114
|
-
- Construir una respuesta breve y justificable.
|
|
115
|
-
- Socializar una conclusión en plenaria.
|
|
214
|
+
Ejemplo:
|
|
116
215
|
|
|
117
|
-
|
|
118
|
-
|
|
216
|
+
* Información dispersa.
|
|
217
|
+
* Criterios poco claros.
|
|
218
|
+
* Necesidad de priorización.
|
|
219
|
+
* Dudas frente a la toma de decisiones.
|
|
119
220
|
|
|
120
|
-
|
|
221
|
+
::right::
|
|
222
|
+
En esta columna puedes mostrar el resultado esperado después del análisis.
|
|
121
223
|
|
|
122
|
-
|
|
224
|
+
Ejemplo:
|
|
123
225
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
226
|
+
* Criterios definidos.
|
|
227
|
+
* Decisiones justificadas.
|
|
228
|
+
* Evidencias organizadas.
|
|
229
|
+
* Conclusiones argumentadas.
|
|
128
230
|
|
|
129
231
|
---
|
|
130
|
-
layout: slide-
|
|
232
|
+
layout: slide-codigo
|
|
131
233
|
---
|
|
132
234
|
|
|
133
235
|
::title::
|
|
134
|
-
|
|
236
|
+
Ejemplo técnico guiado
|
|
135
237
|
|
|
136
238
|
::content::
|
|
137
|
-
El trabajo de la semana se articula con la actividad o evaluación del curso mediante:
|
|
138
239
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
240
|
+
```python {lines:true}
|
|
241
|
+
# Ejemplo base para reemplazar según el curso
|
|
242
|
+
# Este bloque puede usarse en asignaturas con práctica computacional,
|
|
243
|
+
# análisis de datos, simulación, seguridad, IoT o programación.
|
|
244
|
+
|
|
245
|
+
tema = "{{WEEK_THEME}}"
|
|
246
|
+
actividad = "{{WEEK_ACTIVITY}}"
|
|
144
247
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
248
|
+
def presentar_contexto(tema, actividad):
|
|
249
|
+
print("Tema central:", tema)
|
|
250
|
+
print("Actividad:", actividad)
|
|
251
|
+
print("Propósito: relacionar teoría, práctica y análisis crítico.")
|
|
252
|
+
|
|
253
|
+
presentar_contexto(tema, actividad)
|
|
254
|
+
```
|
|
149
255
|
|
|
150
256
|
---
|
|
151
257
|
layout: slide-08-titulo-texto
|
|
152
258
|
---
|
|
153
259
|
|
|
154
260
|
::title::
|
|
155
|
-
|
|
261
|
+
Actividad de aplicación
|
|
156
262
|
|
|
157
263
|
::content::
|
|
158
|
-
|
|
264
|
+
**{{WEEK_ACTIVITY}}**
|
|
265
|
+
|
|
266
|
+
Orientaciones sugeridas:
|
|
159
267
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
268
|
+
1. Leer la situación propuesta por el docente.
|
|
269
|
+
2. Identificar los conceptos de la semana presentes en el caso.
|
|
270
|
+
3. Analizar alternativas de solución o interpretación.
|
|
271
|
+
4. Socializar una conclusión breve con argumentos.
|
|
272
|
+
5. Relacionar la actividad con la evidencia o evaluación correspondiente.
|
|
164
273
|
|
|
165
|
-
|
|
166
|
-
Notas del presentador:
|
|
167
|
-
Mantener este bloque dentro de un máximo aproximado de quince minutos. Priorizar dudas que afecten la comprensión del tema o la entrega de la actividad.
|
|
168
|
-
-->
|
|
274
|
+
Duración estimada: **{{WEEK_DURATION}}**.
|
|
169
275
|
|
|
170
276
|
---
|
|
171
|
-
layout: slide-
|
|
277
|
+
layout: slide-10-titulo-dos-columnas
|
|
172
278
|
---
|
|
173
279
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
280
|
+
::title::
|
|
281
|
+
Preguntas orientadoras
|
|
282
|
+
|
|
283
|
+
::left::
|
|
284
|
+
|
|
285
|
+
### Para comprender
|
|
286
|
+
|
|
287
|
+
* ¿Cuál es el problema central?
|
|
288
|
+
* ¿Qué conceptos de la semana permiten analizarlo?
|
|
289
|
+
* ¿Qué información es necesaria para tomar una decisión?
|
|
290
|
+
* ¿Qué criterios deben priorizarse?
|
|
291
|
+
|
|
292
|
+
::right::
|
|
293
|
+
|
|
294
|
+
### Para aplicar
|
|
295
|
+
|
|
296
|
+
* ¿Qué alternativa parece más adecuada?
|
|
297
|
+
* ¿Qué riesgos o limitaciones existen?
|
|
298
|
+
* ¿Cómo se justificaría la decisión?
|
|
299
|
+
* ¿Qué aprendizaje se transfiere a un contexto profesional?
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
layout: slide-12-cierre
|
|
303
|
+
---
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { readdirSync } from "node:fs";
|
|
2
|
-
|
|
3
1
|
function normalizeBase(value) {
|
|
4
2
|
let base = value || "/";
|
|
5
3
|
|
|
@@ -16,52 +14,25 @@ function normalizeBase(value) {
|
|
|
16
14
|
|
|
17
15
|
const SITE_BASE = normalizeBase(process.env.SITE_BASE || "/");
|
|
18
16
|
|
|
19
|
-
function withBase(
|
|
20
|
-
return `${SITE_BASE}${
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
function getWeekNumber(filename) {
|
|
24
|
-
const match = filename.match(/_semana(\d+)\.md$/i);
|
|
25
|
-
return match ? Number(match[1]) : 999;
|
|
17
|
+
function withBase(value = "") {
|
|
18
|
+
return `${SITE_BASE}${value.replace(/^[/]+/, "")}`;
|
|
26
19
|
}
|
|
27
20
|
|
|
28
|
-
function getDeckName(filename) {
|
|
29
|
-
return filename.replace(/\.md$/i, "");
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
const rootFiles = readdirSync(process.cwd(), { withFileTypes: true })
|
|
33
|
-
.filter((item) => item.isFile())
|
|
34
|
-
.map((item) => item.name);
|
|
35
|
-
|
|
36
|
-
const weeklyEntries = rootFiles
|
|
37
|
-
.filter((name) => /^[a-z0-9_-]+_semana\d+\.md$/i.test(name))
|
|
38
|
-
.filter((name) => !name.startsWith("demo_"))
|
|
39
|
-
.sort((a, b) => {
|
|
40
|
-
const weekDiff = getWeekNumber(a) - getWeekNumber(b);
|
|
41
|
-
return weekDiff !== 0 ? weekDiff : a.localeCompare(b);
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
const weeklyDecks = weeklyEntries.map((entry) => {
|
|
45
|
-
const name = getDeckName(entry);
|
|
46
|
-
|
|
47
|
-
return {
|
|
48
|
-
name,
|
|
49
|
-
entry,
|
|
50
|
-
out: `dist/semanas/${name}`,
|
|
51
|
-
base: withBase(`semanas/${name}/`),
|
|
52
|
-
exportable: true,
|
|
53
|
-
};
|
|
54
|
-
});
|
|
55
|
-
|
|
56
21
|
export const decks = [
|
|
57
22
|
{
|
|
58
|
-
name: "openclass-
|
|
23
|
+
name: "openclass-demo",
|
|
59
24
|
entry: "slides.md",
|
|
60
25
|
out: "dist",
|
|
61
26
|
base: SITE_BASE,
|
|
62
27
|
exportable: false,
|
|
63
28
|
},
|
|
64
|
-
|
|
29
|
+
{
|
|
30
|
+
name: "demo_semana1",
|
|
31
|
+
entry: "demo_semana1.md",
|
|
32
|
+
out: "dist/semanas/demo_semana1",
|
|
33
|
+
base: withBase("semanas/demo_semana1/"),
|
|
34
|
+
exportable: true,
|
|
35
|
+
},
|
|
65
36
|
];
|
|
66
37
|
|
|
67
|
-
export default decks;
|
|
38
|
+
export default decks;
|