# SlideShow Application - Complete Function Call Flow ## 📋 APPLICATION STARTUP SEQUENCE ``` 🚀 HTML LOADS JAVASCRIPT FILES (in order): slideAppGlobals.js → slideTransitions.js → slideAudio.js → slideUI.js → slideFileSelector.js → slideMain.js → slidePlayListLoader.js → slideLoader.js 📡 DOM CONTENT LOADED EVENTS: ├── slideMain.js: Initialize app, wait for JSON selection ├── slideUI.js: Setup UI event listeners └── slideFileSelector.js: JsonFileSelector.init() ├── setupEventListeners() └── discoverDirectories() → Auto-find JSON files ``` ## 📁 JSON FILE DISCOVERY FLOW ``` JsonFileSelector.discoverDirectories() ├── generatePotentialDirectories() → ['', 'bk1/', 'template/', ...] ├── checkDirectoryForJsonFiles(dir) → Test each directory │ └── generateJsonCandidates(dir) → Generate *.json patterns │ └── generateJsonFilePatterns() → ['slides.json', 'images.json', ...] └── scanForAllJsonFiles() → Populate file selector ``` ## 🎬 SLIDESHOW STARTUP FLOW ``` User selects JSON → JsonFileSelector.startSlideshow() ├── loadSelectedFile() → fetch(file) + detectJsonFileType() ├── Store in SlideApp.slides/playList/images ├── Hide modal, show slideshow container └── showSlide(0) → Display first slide ``` ## 🖼️ CORE SLIDE DISPLAY ``` showSlide(index) [slideLoader.js] ├── Validate index and slides array ├── Get slide = SlideApp.slides[index] ├── Update DOM: image, title, category, season, audio, etc. ├── Apply transition: slideContainer.className = slide.transition ├── Handle audio: testAudioFile() → tryFallbackAudio() └── Update status displays ``` ## 🎮 USER INTERACTIONS ``` UI Controls [slideUI.js]: ├── Next/Previous → safeShowSlide(newIndex) ├── Play/Pause → playSlides() / pauseSlides() ├── Beginning/End → safeShowSlide(0 or length-1) └── playSlides() → setInterval() → auto-advance every 5s ``` ## 🔧 SAFETY & UTILITIES ``` safeShowSlide(index) → Check function exists → showSlide(index) SlideApp.safeLog(msg) → Safe console logging SlideApp.showToast(msg, type) → User notifications ``` ## 🔊 AUDIO SYSTEM ``` testAudioFile(file) → Try slide audio → tryFallbackAudio() if fails Audio Controls: play/pause/mute/volume/timeline Playlist Management: populate dropdown from SlideApp.playList ``` ## 🎯 KEY ENTRY POINTS 1. **App Start**: DOMContentLoaded → JsonFileSelector.init() 2. **File Select**: startSlideshow() → showSlide(0) 3. **Navigation**: UI events → safeShowSlide() 4. **Auto-play**: playSlides() → interval → safeShowSlide() ## 🔗 DEPENDENCIES - slideAppGlobals.js (FIRST - contains SlideApp) - slideFileSelector.js (file discovery) - slideLoader.js (core display) - slideUI.js (user controls) - slideAudio.js (audio system) ## 🎭 FLOW PATTERNS **Sync**: DOM updates, UI, state changes **Async**: File loading, JSON parsing, audio **Events**: User clicks, timers, audio events **Safe**: Wrapper functions, validation, error handling