-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathplaygrounds.js
More file actions
73 lines (63 loc) · 2.42 KB
/
playgrounds.js
File metadata and controls
73 lines (63 loc) · 2.42 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
// deno-lint-ignore-file
const prefersDarkScheme = window.matchMedia('(prefers-color-scheme: dark)');
const currentTheme = localStorage.getItem('theme');
function load() {
document.querySelectorAll('aside').forEach(aside => {
aside.addEventListener('click', toggleAside);
});
if (currentTheme == 'dark')
document.body.classList.toggle('dark-mode');
else if (currentTheme == 'light')
document.body.classList.toggle('light-mode');
}
function toggleAside(event) {
event.target.classList.toggle('collapsed');
}
function toggleColorScheme(event) {
const classList = event.target.classList;
classList.toggle('fas');
classList.toggle('far');
document.documentElement.style.colorScheme = classList.contains('far') ? 'light' : 'dark';
}
function setBackground(svg) {
const bodyStyle = document.body.style;
bodyStyle.backgroundImage = `url("${svg}")`;
bodyStyle.backgroundSize = '100px 100px';
}
async function openPart(event) {
event.preventDefault();
document.getElementById("Part").setAttribute("src", event.target.href);
const readmeUrl = event.target.href.replace("index.html", "README.md");
try {
const response = await fetch(readmeUrl);
if (!response.ok) {
document.getElementById("README").innerHTML = "<em>No README available for this part.</em>";
} else {
const md = await response.text();
if (window.marked) {
document.getElementById("README").innerHTML = marked.parse(md);
} else {
document.getElementById("README").innerText = md;
}
}
} catch (_error) {
document.getElementById("README").innerHTML = "<em>No README available for this part.</em>";
}
}
window.openPart = openPart;
function checkCF(CF) {
const c = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',
v = '010005070913151719210100050709131517192102041820110306081214161022252423';
CF = CF.toUpperCase();
let sum = 0, i;
if (CF.match(/[A-Z]{6}\d{2}[A-Z]\d{2}[A-Z]\d{3}[A-Z]/)) {
for (i = 0; i < 14; i += 2) {
sum += parseInt(v.substring(2 * c.indexOf(CF[i])).substring(0, 2)) + CF.charCodeAt(i + 1) - 65;
if (CF[i].match(/\d/, i + 1, 1))
sum += 17;
}
sum += parseInt(v.substring(2 * c.indexOf(CF[i])).substring(0, 2));
return (sum % 26 + 65 == CF.charCodeAt(15));
}
return false;
}