-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlearn-vasya.js
96 lines (83 loc) · 2.28 KB
/
learn-vasya.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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
function randomInt(min, max) {
// min and max are included
var rand = min + Math.random() * (max + 1 - min);
rand = Math.floor(rand);
return rand;
}
const schoolParts = [
'😕',
'🤯',
'💩',
'👍'
];
const univerParts = [
'😕',
'🤯',
'💩',
'🍺',
'👩',
'👍'
];
const coursesParts = [
'🤯',
'🤯',
'💩',
'💩',
'👍'
];
const tmpl = () => `
<div class="learning-percents">0%</div>
<div class="learning-bar"></div>
`;
function learnVasya(progressElementId, progressParts) {
const STEPS = 10;
let count = 0;
const el = document.getElementById(progressElementId);
el.innerHTML = tmpl();
const bar = el.getElementsByClassName('learning-bar')[0]
const percents = el.getElementsByClassName('learning-percents')[0]
const totals = el.getElementsByClassName('learning-totals')[0]
bar.innerHTML = '';
const timer = setInterval(() => {
bar.innerHTML += progressParts[randomInt(0, progressParts.length - 1)];
count++;
percents.innerHTML = (count / STEPS * 100) + '%';
if (count == STEPS) {
clearInterval(timer);
percents.innerHTML = "🏆 обучение завершено";
}
}, 300);
}
const emojiStringToArray = (str) => {
split = str.split(/([\uD800-\uDBFF][\uDC00-\uDFFF])/);
arr = [];
for (var i = 0; i < split.length; i++) {
char = split[i]
if (char !== "") {
arr.push(char);
}
}
return arr;
};
function totalProgress(totalsId) {
const bars = document.querySelectorAll('.learning-bar');
let totalStr = '';
for (let bar of bars) {
totalStr += bar.innerHTML;
}
const totals = emojiStringToArray(totalStr);
const fails = totals.filter(part => part != '👍');
const failPercents = parseInt(fails.length / totals.length * 100);
const failParts = fails.reduce(function(acc, cur) {
if(acc.indexOf(cur) == -1) {
acc.push(cur);
}
return acc;
}, [])
document.getElementById(totalsId).innerHTML = `
<table><tr>
<td>👍</td><td>${100 - failPercents}%</td></tr>
<tr><td>${failParts.join('')}</td><td>${failPercents}% (потрачено)</td>
</tr>
`;
}