Skip to content

Arquitectura del proyecto DAWS (VitePress) ​

Estado: propuesta de reorganización, pendiente de aplicar y verificar.
Principio: simplificar sin romper los apuntes existentes.
Alcance actual: containers Markdown-it y componentes Vue. La unificación de estilos es una segunda fase.

1. Criterios de diseño ​

  • Container Markdown-it para bloques didácticos de contenido Markdown con título, utils y cuerpo.
  • Componente Vue para interactividad, estado, ejecución de código o presentaciones reutilizables cuya implementación lo justifique.
  • Un solo registro por nombre de container.
  • Un archivo de definición por container, con una función común de creación.
  • Mantener la sintaxis pública y el HTML/CSS actuales durante la migración; cualquier cambio visual debe ser deliberado.
  • No eliminar archivos ni cambiar nombres sin localizar antes todas sus referencias.

2. Estructura objetivo ​

text
docs/.vitepress/
├── ARQUITECTURA.md
├── config.mts
├── markdowns/
│   ├── index.ts                 # Registro único
│   ├── crearContainer.ts        # Funcionalidad compartida
│   └── containers/
│       ├── objetivos.ts
│       ├── definicion.ts
│       ├── pageinfo.ts
│       ├── recuerda.ts
│       ├── practica.ts
│       ├── pregunta.ts
│       └── previo.ts
└── theme/
    ├── index.ts
    ├── components/
    │   ├── ejercicios/
    │   ├── PhpRunner.vue
    │   ├── Quiz.vue
    │   └── ...
    └── css/
        ├── colores.css          # Segunda fase
        └── containers.css

Importante: la estructura anterior es objetivo, no una descripción comprobada del árbol completo actual. Conservar los nombres y rutas reales cuando difieran.

3. Inventario de containers actuales ​

NombreFunciónDecisión provisionalObservaciones
objetivosObjetivos de aprendizajeMantenerRegistrado dos veces en containers.ts; conservar título interior grande
definicionDefinir conceptosMantenerExiste un archivo definicion.ts incompleto; no registrarlo junto al actual
pageinfoInformación complementariaMantenerConservar su presentación, que ya funciona
recuerdaIdea importanteMantenerDiferenciar de pageinfo por finalidad
practicaTarea que realiza el alumnadoMantenerRevisar solapamiento con actividad
actividadActividad inmediataRevisar/fusionarMantener como alias temporal si ya se utiliza
preguntaPregunta de reflexiónMantenerBloque didáctico propio
previoConocimientos previosMantenerBloque didáctico propio
finalidadResultado esperadoRevisarPosible solapamiento con objetivos
referenciasRecursos y fuentesRevisarValorar Markdown normal si no requiere estilo propio

Sintaxis prevista ​

md
:::definicion Variable | fa-solid fa-book-open
Una variable permite acceder a un valor.
:::

:::pageinfo PHP genera la respuesta | fa-solid fa-lightbulb
PHP se ejecuta en el servidor.
:::

:::objetivos Qué aprenderemos | fa-solid fa-list-check
- Comprender las variables.
- Utilizar los tipos de datos.
:::

La sintaxis con | indica título e utils opcional. El formato concreto de objetivos debe conservar su título interior.

4. Reglas para los containers ​

  1. Cada container se registra una sola vez desde markdowns/index.ts.
  2. La lógica de lectura de título, utils y escape HTML se centraliza en crearContainer.ts.
  3. Las particularidades visuales se expresan mediante clases CSS; objetivos puede requerir una variante de plantilla.
  4. Se usa md.utils.escapeHtml() para los valores que se incorporan como texto o atributos.
  5. Los nombres de las clases existentes (daws-objetivos, daws-pageinfo, etc.) se preservan hasta migrar el CSS.
  6. No cambiar la semántica de un container sin actualizar este documento y los apuntes afectados.

5. Inventario de componentes Vue ​

ComponenteDecisión provisionalMotivo o revisión
Objetivos.vueMigrar gradualmente a containerDuplica el bloque objetivos
Definicion.vueMigrar gradualmente a containerRevisar usos y props antes de retirar
Ejercicio.vueMantenerEjercicios reutilizables
TituloEjercicio.vueRevisarComprobar si debe integrarse en Ejercicio.vue
PhpRunner.vueMantenerEjecución interactiva de PHP
Quiz.vueMantenerInteractividad
DropDown.vueMantenerInteracción y posible contraseña
CollapsibleHeading.vueMantenerComportamiento de plegado
IndiceCurso.vueMantenerÍndice de tarjetas
RequestJourney.vueMantenerVisualización especializada
StackOficial.vueMantenerVisualización especializada
ObjetivosModulo.vueMantenerPresentación del módulo; revisar posible duplicidad conceptual
Cmd.vue, CmdPane.vueRevisar conjuntamentePosible relación contenedor/contenido
Card.vue, CardPane.vueRevisar conjuntamentePosible relación contenedor/contenido
Color.vueMantener si se usaUtilidad visual
ButtonSlides.vueMantenerEnlace a diapositivas
PrintButton.vueMantenerImpresión
EnConstruccion.vueMantenerEstado de contenido
VisitorCount.vueMantener si se usaContador de visitas

Regla: un componente sin <script> puede seguir teniendo sentido si encapsula una presentación reutilizable; no debe eliminarse solo por carecer de lógica JavaScript. El criterio es si duplica otra abstracción.

6. Sistema de colores (segunda fase) ​

Paleta provisional aprobada para estudiar y ajustar sobre las páginas reales:

RolValor
Azul principal / cabecera#24547D
Azul hover#173B59
Verde objetivos#176B50
Ámbar pageinfo#9A5B08
Fondo pageinfo#FFF7E8
Fondo objetivos#EAF5EE
Texto principal#263445
Texto secundario / TOC#64748B
Bordes#E2E8F0
  • Azul: identidad, navegación, enlaces y botones principales.
  • Verde: objetivos, aprendizaje y ejecución de código.
  • Ámbar: información destacada, actividades y advertencias diferenciadas por utils/título.
  • Rojo: errores y acciones destructivas, no navegación ordinaria.
  • pageinfo: mantener su estructura actual y valorar el ámbar oscuro.
  • Definir variables en theme/css/colores.css y consumirlas desde los estilos existentes.
  • Revisar modo oscuro y contraste antes de cerrar la paleta.

7. Plan de migración reversible ​

  • [ ] Crear una rama Git de trabajo o commit de respaldo.
  • [ ] Buscar usos de todos los containers (:::nombre) y componentes (<Nombre).
  • [ ] Resolver el doble registro de objetivos sin cambiar el HTML resultante.
  • [ ] Revisar definicion.ts incompleto y el registro real en config.mts.
  • [ ] Crear markdowns/index.ts como punto único de registro.
  • [ ] Separar un container cada vez, manteniendo sintaxis y clases.
  • [ ] Comprobar npm run docs:dev y npm run docs:build tras cada grupo de cambios.
  • [ ] Verificar páginas representativas de objetivos, definición, pageinfo y prácticas.
  • [ ] Retirar componentes redundantes solo después de migrar sus usos.
  • [ ] Centralizar colores y revisar contraste, TOC, botones y modo oscuro.

8. Convención de mantenimiento ​

Cuando se cree o modifique un elemento, registrar:

  1. Nombre y propósito: qué necesidad cubre.
  2. Ubicación: archivo de implementación y archivo de estilos.
  3. Uso: ejemplo mínimo de Markdown o Vue.
  4. Dependencias: otros componentes o registros requeridos.
  5. Estado: activo, pendiente de migración o retirado.

Regla principal: no añadir un container o componente nuevo si uno existente puede resolver el caso de forma clara y sin complejidad adicional.

Arquitectura DAWS — Containers Markdown-it ​

Objetivo ​

Un registro por container, un fichero de configuración por tipo y un único generador crearContainer.ts. Esta primera fase no cambia los estilos CSS ni los contenidos Markdown.

Ubicación ​

Los archivos del directorio markdows/ se copian a docs/.vitepress/markdows/ (se conserva el nombre real actual, aunque tenga una errata).

ContainerUsoDiseño HTML actualSintaxis
objetivosObjetivos de aprendizajeespecial, cabecera + título interior::: objetivos Tema
finalidadPropósito del aprendizajeclásico (kicker/sub/body)::: finalidad Subtítulo
referenciasFuentes de consultaclásico::: referencias Subtítulo
previoConocimientos previosclásico::: previo Subtítulo
actividadTarea de aulaclásico::: actividad Subtítulo
preguntaReflexiónclásico::: pregunta Subtítulo
pageinfoInformación complementariacabecera + cuerpo::: pageinfo Título | fa-solid fa-lightbulb
definicionConceptoscabecera + cuerpo::: definicion Variable | fa-solid fa-code
recuerdaIdeas clavecabecera + cuerpo::: recuerda Título
practicaAplicación prácticacabecera + cuerpo::: practica Título

Nota: En los cinco containers clásicos, el texto después del nombre sigue siendo un subtítulo completo, incluso si contiene |. No se cambia esa semántica en esta fase.

Instalación reversible ​

  1. Crear una rama Git o un commit previo: git add . && git commit -m "Antes de reorganizar containers".
  2. Copiar markdows/crearContainer.ts, markdows/index.ts y markdows/containers/*.ts a docs/.vitepress/markdows/.
  3. No borrar todavía docs/.vitepress/markdows/containers.ts ni el antiguo definicion.ts.
  4. En docs/.vitepress/config.mts, cambiar solo la ruta de importación de dawsContainers de ./markdows/containers a ./markdows/index. Mantener la llamada dawsContainers(md).
  5. Ejecutar npm run docs:build y revisar visualmente objetivos, definición, pageinfo, actividad, pregunta, recuerda y práctica.
  6. Si hay diferencias, revertir exclusivamente el import de config.mts.
  7. Solo tras validar, retirar los archivos antiguos no importados en otro commit.

Compatibilidad ​

  • Conserva las clases CSS antiguas de los diez containers.
  • Conserva el doble nivel de objetivos (__header, __content, __title, __body).
  • Conserva __kicker, __sub, __body en los cinco containers clásicos.
  • Conserva los títulos e iconos por defecto que mostraban los registros activos.
  • No modifica Objetivos.vue ni sus nueve usos; su migración será otra fase.
  • No introduce variables de color ni altera containers.css.

Decisiones pendientes ​

  • Migración de los nueve ::: objetivos a :::objetivos.
  • Revisión de posibles fusiones actividad/practica y finalidad/objetivos, sin pérdida de contenido.
  • Segunda fase de diseño: colores.css, normalización de estilos y modo oscuro.
© 2026 · DAWS · Desarrollo Web en Entorno Servidor