Home Reference Source

js/ui/codepage.js

import { HandleUnhandledPromise } from '~/helpers/ErrorManager';

export const CODEPAGE_TABLE = document.getElementById("codepage-table");

if (CODEPAGE_TABLE) {
    (async () => {
        const { default: ClipboardJS } = await import('clipboard');
        const clipboard = new ClipboardJS('.codepage-table__char', {
            text: (el) => String.fromCodePoint(+el.dataset.codepoint)
        });

        let lastTimeout = null,
            lastTextNode = null;
        clipboard.on('success', (event) => {
            if (lastTimeout) {
                clearTimeout(lastTimeout);
                lastTextNode.data = 'copy';

                lastTimeout = null;
                lastTextNode = null;
            }

            const copyButton = event.trigger.getElementsByClassName('codepage-table__char__copy')[0];
            const textNode = document.createTextNode("copied!");

            while (copyButton.firstChild) copyButton.removeChild(copyButton.firstChild);
            copyButton.appendChild(textNode);

            lastTextNode = textNode;
            lastTimeout = setTimeout(() => {
                textNode.data = 'copy';
            }, 800);
        });
    })().catch(HandleUnhandledPromise);
}