document.querySelectorAll('.table-code').forEach((el) => { el.addEventListener('click', event => { if (event.target && (event.target as HTMLElement).matches('.line-num')) { Array.from(document.querySelectorAll('.table-code .selected')).forEach((el) => el.classList.remove('selected')); const nextSibling = (event.target as HTMLElement).nextSibling; if (nextSibling instanceof HTMLElement) { nextSibling.classList.add('selected'); } const filename = el.dataset.filenameSlug; const line = (event.target as HTMLElement).textContent; const url = location.protocol + '//' + location.host + location.pathname; const hash = '#file-' + filename + '-' + line; window.history.pushState(null, null, url + hash); location.hash = hash; } }); }); let copybtnhtml = ``; document.querySelectorAll('.markdown-body pre').forEach((el) => { el.innerHTML = copybtnhtml + `` + el.innerHTML + ``; }); document.querySelectorAll('.md-code-copy-btn').forEach(button => { button.addEventListener('click', function() { let code = this.nextElementSibling.textContent; navigator.clipboard.writeText(code).catch((err) => { console.error('Could not copy text: ', err); }); }); }); let checkboxes = document.querySelectorAll('li[data-checkbox-nb] input[type=checkbox]'); if (document.getElementById('gist').dataset.own) { document.querySelectorAll('li[data-checkbox-nb]').forEach((el) => { let input: HTMLButtonElement = el.querySelector('input[type=checkbox]'); input.disabled = false; let checkboxNb = (el as HTMLElement).dataset.checkboxNb; let filename = input.closest('div[data-file]').dataset.file; input.addEventListener('change', function () { const data = new URLSearchParams(); data.append('checkbox', checkboxNb); data.append('file', filename); if (document.getElementsByName('_csrf').length !== 0) { data.append('_csrf', ((document.getElementsByName('_csrf')[0] as HTMLInputElement).value)); } checkboxes.forEach((el: HTMLButtonElement) => { el.disabled = true; el.classList.add('text-gray-400') }); fetch(window.location.href.split('#')[0] + '/checkbox', { method: 'PUT', credentials: 'same-origin', body: data, }).then((response) => { if (response.status === 200) { checkboxes.forEach((el: HTMLButtonElement) => { el.disabled = false; el.classList.remove('text-gray-400') }); } }); }); }); } else { checkboxes.forEach((el: HTMLButtonElement) => { el.disabled = true; }); }