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.