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.