File size: 2,467 Bytes
afc1235 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | class LessonManager {
constructor() {
this.lessons = JSON.parse(localStorage.getItem('lessons')) || [];
this.currentLessonIndex = 0;
this.currentSlideIndex = 0;
}
saveLessons() {
localStorage.setItem('lessons', JSON.stringify(this.lessons));
}
addLesson(title) {
const newLesson = {
id: Date.now(),
title: title || `New Lesson ${this.lessons.length + 1}`,
slides: [this.createNewSlide()]
};
this.lessons.push(newLesson);
this.saveLessons();
return newLesson;
}
createNewSlide() {
return {
id: Date.now(),
title: 'New Slide',
content: '',
notes: '',
pinyin: '',
translation: '',
characters: ''
};
}
addSlide(lessonIndex) {
const newSlide = this.createNewSlide();
this.lessons[lessonIndex].slides.push(newSlide);
this.saveLessons();
return newSlide;
}
updateSlide(lessonIndex, slideIndex, data) {
const slide = this.lessons[lessonIndex].slides[slideIndex];
Object.assign(slide, data);
this.saveLessons();
}
deleteSlide(lessonIndex, slideIndex) {
this.lessons[lessonIndex].slides.splice(slideIndex, 1);
this.saveLessons();
}
deleteLesson(lessonIndex) {
this.lessons.splice(lessonIndex, 1);
this.saveLessons();
}
}
// Initialize speech recognition
function initSpeechRecognition(lang = 'cmn-Hans-CN') {
const recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();
recognition.lang = lang;
recognition.interimResults = true;
return recognition;
}
// Fullscreen slide functionality
function toggleFullscreenSlide(slideElement) {
if (!document.fullscreenElement) {
slideElement.classList.add('fullscreen-slide');
slideElement.requestFullscreen().catch(err => {
console.error(`Error attempting to enable fullscreen: ${err.message}`);
});
} else {
document.exitFullscreen();
slideElement.classList.remove('fullscreen-slide');
}
}
// Initialize the app
document.addEventListener('DOMContentLoaded', () => {
const lessonManager = new LessonManager();
window.lessonManager = lessonManager; // Make it globally available
// Event listeners will be handled by the web components
}); |