# Documentación de CourseNav.js **Versión:** 1.1.5 **Autor:** Salvador Martínez Gaytán **Licencia:** Comercial Propietaria --- ## Descripción **CourseNav.js** es una librería en Vanilla JS para gestionar: - Carga dinámica de contenido (HTML + scripts) - Navegación “prev/next” con bloqueo hasta completar cada slide - Integración con SCORM (pipwerks wrapper) - Control de audio avanzado (Howler.js) - Diálogos de inicio/retomar con SweetAlert2 - Barra de progreso y eventos custom No depende de jQuery, Swiper ni Bootstrap, y funciona incluso con CSP/CORS restrictivos. --- ## Prerrequisitos Antes de `coursenav.js` debes incluir en tu HTML: ```html ``` --- ## Estructura del DOM requerida ```html
``` > Si cambias los IDs, ajusta las llamadas a `document.getElementById(...)` en el código. --- ## Inicialización automática Al cargarse el DOM, CourseNav: 1. Inicializa SCORM o sessionStorage 2. Carga `config.json` mediante XHR con cookies y cabecera `X-Requested-With` 3. Construye el array `courseData.contentArray` 4. Muestra diálogo “Retomar / Comenzar de nuevo” o arranca el curso 5. Carga el primer slide e instala la navegación --- ## API pública ```js const CN = window.CourseNav; ``` ### Control de Audio - `CN.audioController` - `loadAudio(url)` - `playAudio()`, `pauseAudio()`, `stopAudio()` - `toggleAudio()`, `toggleMute()` - `CN.createSound(audioUrl)` → retorna `ExtendedHowl` - `CN.soundClick()` → reproduce sonido de clic - `CN.isDebug()` → `true` si debug activo ### Navegación de Slides - `CN.nextSlide()`, `CN.prevSlide()` - `CN.gotoSlide(index)` → salta a slide validado - `CN.isVisited()` → `true` si slide actual ya visitado - `CN.isCompletedSlideIndex(idx)` → `visited` de slide `idx` - `CN.getCurrentSlide()` → `{ title, content, audio, visited }` - `CN.setSlideVisited([state])` → marca visitado + dispara evento - `CN.markSlidesAsVisited(indicesArray)` - `CN.updateProgressBar()` → refresca `#progress-bar` ### SCORM / Progreso - `CN.getStudentName()` - `CN.getLessonLocation()`, `CN.setLessonLocation(loc)` - `CN.getLessonStatus()`, `CN.setLessonStatus(status)` - `CN.getScore()`, `CN.setScore(score)` - `CN.getSuspendData()`, `CN.setSuspendData(data)` - `CN.getScormData(key)`, `CN.setScormData(key,value)` - `CN.save()` → guarda en SCORM o sessionStorage - `CN.completeLesson()` → marca estado SCORM “completed” ### Utilitarios - `CN.resetCourse()` → reinicia todo el progreso - `CN.reload()` → recarga slide actual --- ## Eventos personalizados ```js document.body.addEventListener("slideChange", e => { console.log("Slide cambiado:", e.detail.slideIndex); }); document.body.addEventListener("slideCompleted", e => { console.log("Slide completado:", e.detail.slideIndex); }); ``` > `e.detail` contiene `{ message, slideIndex, totalSlides, slide }`. --- ## Ejemplos de uso ### Saltar a un slide ```js CourseNav.gotoSlide(4); // va al slide índice 4 ``` ### Control de audio desde UI ```html ``` --- ## Notas técnicas - **XHR** en `loadConfig()` para sortear CSP/CORS de SuccessFactors. - **executeInjectedScripts()** re-ejecuta `