forked from vaishaksuresh/webdevchecklist.com
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
125 lines (89 loc) · 3.09 KB
/
script.js
File metadata and controls
125 lines (89 loc) · 3.09 KB
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
(function () {
var checkboxes = [],
details = [],
progress, bonus, fallback;
function findCheckboxes() {
var inputs = document.getElementsByTagName('input');
for (var i = 0; i < inputs.length; i++) {
if (inputs[i].type === 'checkbox') {
checkboxes.push(inputs[i]);
}
}
details = document.getElementsByTagName('em');
}
function initialize() {
bonus = document.getElementsByTagName("mark")[0];
progress = document.getElementsByTagName("progress")[0];
fallback = (progress.firstElementChild || progress.firstChild);
var max = 0;
for (var i = 0; i < checkboxes.length; i++) {
var checkbox = checkboxes[i];
var value = localStorage.getItem(checkbox.id) === "true";
checkbox.checked = value;
checkbox.onchange = calculateProgress;
if (checkbox.parentNode.className !== "optional")
max++;
}
for (var d = 0; d < details.length; d++) {
details[d].onclick = openDetails;
}
progress.max = max;
}
function openDetails(e) {
if (!e) e = window.event;
var detail = (e.target || e.srcElement);
var ul = (detail.nextElementSibling || detail.nextSibling);
if (ul.style.maxHeight !== '100px')
ul.style.maxHeight = '100px';
else
ul.style.maxHeight = '0';
for (var i = 0; i < details.length; i++) {
if (details[i] !== detail) {
var d = (details[i].nextElementSibling || details[i].nextSibling);
d.style.maxHeight = "0";
}
}
}
function calculateProgress() {
var count = 0,
optional = 0;
for (var i = 0; i < checkboxes.length; i++) {
var checkbox = checkboxes[i];
localStorage.setItem(checkbox.id, checkbox.checked);
if (checkbox.parentNode.className !== "optional") {
if (checkbox.checked) {
count++;
}
}
else {
if (checkbox.checked) {
optional++;
}
}
}
bonus.innerHTML = optional.toString();
setProgressValue(count);
}
function setProgressValue(value) {
progress.value = value;
var max = parseInt(progress.max, 10);
fallback.style.width = (value * 100 / max) + "%";
}
function clearAll() {
document.getElementById("clearall").onclick = function () {
for (var i = 0; i < checkboxes.length; i++) {
checkboxes[i].checked = false;
}
localStorage.clear();
calculateProgress();
return false;
};
}
if (localStorage) {
findCheckboxes();
initialize();
calculateProgress();
clearAll();
}
})();