aboutsummaryrefslogtreecommitdiff
path: root/static/js/codecopy.js
blob: 11d28e2533a67a8138e7574e4140a7226a382134 (plain)
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
const changeIcon = (copyDiv, className) => {
    copyDiv.classList.add(className);
    setTimeout(() => copyDiv.classList.remove(className), 2500);
};

const copyCodeAndChangeIcon = async (copyDiv, block) => {
    const code = getCodeContent(block);
    try {
        await navigator.clipboard.writeText(code);
        changeIcon(copyDiv, "yes");
    } catch (error) {
        changeIcon(copyDiv, "err");
    }
};

const getCodeContent = (block) => {
    return [...block.querySelectorAll('.giallo-l')]
        .map(line => {
            const clone = line.cloneNode(true);
            const ln = clone.querySelector('.giallo-ln');
            if (ln) ln.remove();
            return clone.textContent;
        })
        .join('\n');
};

document.querySelectorAll("pre").forEach((block) => {
    const copyDiv = document.createElement("div");
    copyDiv.className = "cc svgs svgh copy";
    copyDiv.innerHTML = " ";
    block.prepend(copyDiv);
    copyDiv.addEventListener("click", () => copyCodeAndChangeIcon(copyDiv, block));
});