-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathminecaptcha.js
More file actions
69 lines (56 loc) · 2.3 KB
/
minecaptcha.js
File metadata and controls
69 lines (56 loc) · 2.3 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
document.addEventListener('DOMContentLoaded', e => {
let challenge = {
puzzle: [2, 0, 1, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 1, 0, 1],
solution: [false, false, false, false, true, true, false, false, false, true, false, true, false, false, false, false]
};
let containers = document.getElementsByClassName('mc');
for (container of containers) {
let label = container.querySelector('.mc-label');
label.addEventListener('click', e => {
e.preventDefault();
if (!(label.dataset.state == 'check' || label.dataset.state == 'failed')) return;
label.dataset.state = 'progress';
let userSolution = [];
let popup = document.createElement('DIV');
popup.classList.add('mc-popup');
let header = document.createElement('DIV');
header.classList.add('mc-popup-header');
let content = document.createElement('DIV');
content.classList.add('mc-popup-content');
let confirm = document.createElement('DIV');
confirm.classList.add('mc-popup-confirm');
header.innerHTML = '<div>to proceed, click<br>all the pictures of</div><h1>Mines</h1>';
confirm.innerHTML = 'confirm';
for (let i = 0; i < challenge.puzzle.length; i ++) {
userSolution[i] = false;
let cell = document.createElement('DIV');
cell.classList.add('mc-popup-cell');
if (challenge.puzzle[i] > 0) {
cell.innerText = challenge.puzzle[i];
} else {
cell.classList.add('mc-selectable');
cell.addEventListener('click', e => {
cell.classList.toggle('mc-selected');
userSolution[i] = cell.classList.contains('mc-selected');
});
}
content.appendChild(cell);
}
confirm.addEventListener('click', e => {
label.dataset.state = checkSolution(userSolution, challenge.solution) ? 'done' : 'failed';
container.removeChild(popup);
container.querySelector('input[type="checkbox"]').checked = label.dataset.state == 'done';
});
popup.appendChild(header);
popup.appendChild(content);
popup.appendChild(confirm);
container.appendChild(popup);
});
}
function checkSolution (check, solution) {
for (i in solution) {
if (solution[i] !== check[i] && solution[i] !== null) return false;
}
return true;
}
});