-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
81 lines (76 loc) · 3.37 KB
/
index.js
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
// 1. Loop to render various lesson cards
const amountOfLessonsToPrerender = 10
const originalLessonCard = document.querySelector('#original')
const section = document.querySelector('section')
for (let e = 1; e <= amountOfLessonsToPrerender; e++) {
const lessonCard = originalLessonCard.cloneNode(true)
lessonCard.removeAttribute('id')
lessonCard.classList.add('lesson-card')
section.append(lessonCard)
console.debug(`Element ${e} added`)
}
// 2. Function to modify all the lesson cards
/* const LESSON_STATES = {
WITHOUT_START: 0,
WITHOUT_FINISH: 1,
DONE: 2,
} */
const lessons = JSON.parse(window.localStorage.getItem('lessons'))
if (!lessons) {
fetch('./rust-book.json')
.then((response) => response.json())
.then((json) => {
console.debug(typeof json)
main(json)
}).catch((reason) => console.error(reason))
} else { main(lessons) }
/**
* @param {array} lessons - All the lessons from comprehensive rust page.
* @returns {number} returns 0 if all finished correctly or 1 otherwise
*/
function main(lessons) {
const prerenderedLessons = section.querySelectorAll('.lesson-card')
for (const prerenderedLesson of prerenderedLessons) {
section.removeChild(prerenderedLesson)
}
lessons.forEach((lesson) => {
const lessonCard = originalLessonCard.cloneNode(true)
lessonCard.removeAttribute('id')
lessonCard.classList.add('lesson-card')
const lessonCardSvgElement = lessonCard.querySelector('svg')
lessonCardSvgElement.classList.remove('state-0')
lessonCardSvgElement.classList.add(`state-${lesson.state}`)
const lessonCardText = lessonCard.querySelector('strong')
lessonCardText.innerText = lesson.title
const lessonCardSelectElement = lessonCard.querySelector('select')
lessonCardSelectElement.value = lesson.state
section.append(lessonCard)
console.log(lesson)
})
section.removeChild(originalLessonCard)
window.localStorage.setItem('lessons', JSON.stringify(lessons))
// Add event lisener to the select element of lesson cards.
const lessonsInStorage = JSON.parse(window.localStorage.getItem('lessons'))
const lessonCards = section.querySelectorAll('.lesson-card')
lessonCards.forEach((lessonCard) => {
const lessonCardSelectElement = lessonCard.querySelector('select')
lessonCardSelectElement.addEventListener('change', (event) => {
const lessonCardSvgElement = lessonCard.querySelector('svg')
lessonCardSvgElement.classList.remove('state-0', 'state-1', 'state-2')
lessonCardSvgElement.classList.add(`state-${event.target.value}`)
// Add code to modify the object in localStorage and rewrite
const lessonCardText = lessonCard.querySelector('strong')
lessonsInStorage.forEach((lesson) => {
if (lessonCardText.innerText == lesson.title) {
lesson.state = Number(event.target.value)
}
})
console.log("End of for-loop #2")
window.localStorage.setItem('lessons', JSON.stringify(lessonsInStorage))
console.log(JSON.parse(window.localStorage.getItem('lessons')))
})
console.log("End of event hadler")
})
console.log("End of for-loop #1")
console.log(JSON.parse(window.localStorage.getItem('lessons')))
}