Manipulación del DOM en sistema de notas

Clase 31 de 39Curso de Fundamentos de JavaScript

Resumen

Impulsa tu sistema de notas Markdown con una base sólida: flujo de trabajo en GitHub, persistencia con localStorage y manipulación del DOM para mostrar editor y preview. Con documentación clara en JSDoc y apoyo de herramientas de IA como Copilot o ChatGPT, avanzar se vuelve más rápido y mantenible.

¿Cómo se integra Git y GitHub para persistencia y colaboración?

Un pull request bien armado acelera el trabajo en equipo. Aquí se agrega un nuevo feature: la persistencia del sistema de notas con localStorage. La plantilla del pull request incluye: descripción breve, cambios realizados, motivación, impacto y notas de implementación. También se asigna un reviewer (por ejemplo, Felipe), se define un assignee y se añaden labels como mejora.

  • Ver el diff permite identificar dónde solo se agregó documentación y dónde hubo cambios reales de lógica.
  • Comentar en línea fomenta el trabajo colaborativo antes del merge.
  • Documentar cada función mejora la lectura e historial de cambios.
  • El sistema ahora usa localStorage para crear el store y guardar notas.

¿Qué funciones del DOM muestran y ocultan editor y preview?

Para controlar la interfaz, primero se define una variable global que acompañará el flujo de selección y edición de notas. Luego, dos funciones simples alternan la visibilidad del editor y el preview con display.

// Variable global para la nota activa let currentNoteID = null; /** * Muestra el editor y el preview. * No recibe parámetros ni retorna valor: manipula el DOM directamente. */ function showEditorAndPreview() { const editorSection = document.querySelector('.editor-section'); const previewSection = document.querySelector('.preview-section'); editorSection.style.display = 'flex'; previewSection.style.display = 'flex'; } /** * Oculta el editor y el preview. * No recibe parámetros ni retorna valor: manipula el DOM directamente. */ function hideEditorAndPreview() { const editorSection = document.querySelector('.editor-section'); const previewSection = document.querySelector('.preview-section'); editorSection.style.display = 'none'; previewSection.style.display = 'none'; }

Puntos clave para evitar errores: usar correctamente document.querySelector, respetar la convención de clases como .editor-section y .preview-section, y cuidar el autocompletado para no confundir style ni los valores de display.

¿Por qué documentar con JSDoc en cada paso?

  • JSDoc deja claro el objetivo, parámetros y posibles valores nulos.
  • Facilita pedir ayuda a la IA con contexto preciso.
  • Sirve de guía para pruebas y futuras refactorizaciones.

¿Cómo renderizar la lista, el editor y el preview con apoyo de IA?

Se plantean tres tareas con JSDoc: renderizar la lista de notas en el DOM, renderizar el editor con el contenido de una nota (o vacío) y renderizar el preview del contenido Markdown. Para la primera, se propone usar una lista corta de subtareas y pedir a Copilot o ChatGPT la implementación usando solo DOM nativo.

¿Qué subtareas debe cumplir renderNoteList?

  • Crear renderNoteList que reciba una lista de notas.
  • Limpiar el contenedor .note-list antes de renderizar.
  • Si la lista está vacía, mostrar un mensaje de empty state.
  • Si hay notas, renderizar título, extracto y fecha.
  • Marcar la nota activa comparando su ID con currentNoteID.
/** * Renderiza la lista de notas en el DOM. * @param {Array} notes - array de notas a renderizar. */ function renderNoteList(notes) { const listEl = document.querySelector('.note-list'); listEl.innerHTML = ''; if (!notes || notes.length === 0) { const empty = document.createElement('div'); empty.classList.add('note-empty'); empty.textContent = 'No hay notas todavía.'; listEl.appendChild(empty); return; } notes.forEach(note => { const item = document.createElement('article'); item.classList.add('note-item'); item.dataset.id = note.id; const title = document.createElement('h3'); title.classList.add('note-title'); title.textContent = note.title || 'Sin título'; const excerpt = document.createElement('p'); excerpt.classList.add('note-excerpt'); excerpt.textContent = note.excerpt || ''; const date = document.createElement('time'); date.classList.add('note-date'); date.textContent = note.date || ''; if (String(note.id) === String(currentNoteID)) { item.classList.add('is-active'); } item.appendChild(title); item.appendChild(excerpt); item.appendChild(date); listEl.appendChild(item); }); }

¿Cómo documentar editor y preview para que la IA ayude mejor?

  • Editor: “renderizar el editor con el contenido de una nota”. Parámetro: objeto nota o null para editor vacío.
  • Preview: “renderizar el preview del contenido Markdown”. Parámetro: string content con Markdown a transformar.
  • Mantener las tareas en menos de cinco bullets evita resultados ruidosos y facilita el testing paso a paso.

Habilidades y conceptos reforzados: pull request colaborativo, persistencia con localStorage, manipulación del DOM, JSDoc, diseño de pseudocódigo en subtareas, uso estratégico de IA para implementar código nativo y revisión mediante diff antes de integrar.

¿Con qué herramienta de IA vas a implementar el preview y el editor: Cursor, Windsor, Copilot o ChatGPT? Comparte en comentarios tu enfoque y resultados.