SPARC / app.js
Setoka's picture
Add SPARC illustrated explainer and arXiv citation
5c1b22b verified
Raw
History Blame Contribute Delete
1.57 kB
const tabs = Array.from(document.querySelectorAll('[role="tab"]'));
function selectTab(tab) {
for (const item of tabs) {
const selected = item === tab;
item.setAttribute('aria-selected', String(selected));
item.tabIndex = selected ? 0 : -1;
const panel = document.getElementById(item.dataset.panel);
panel.hidden = !selected;
if (!selected) panel.querySelectorAll('video').forEach(video => video.pause());
}
}
tabs.forEach((tab, index) => {
tab.addEventListener('click', () => selectTab(tab));
tab.addEventListener('keydown', event => {
let next;
if (event.key === 'ArrowRight') next = (index + 1) % tabs.length;
if (event.key === 'ArrowLeft') next = (index + tabs.length - 1) % tabs.length;
if (event.key === 'Home') next = 0;
if (event.key === 'End') next = tabs.length - 1;
if (next === undefined) return;
event.preventDefault();
selectTab(tabs[next]);
tabs[next].focus();
});
});
document.getElementById('copy-citation').addEventListener('click', async () => {
const text = document.getElementById('bibtex').textContent;
const status = document.getElementById('copy-status');
try {
await navigator.clipboard.writeText(text);
status.textContent = 'BibTeX copied.';
} catch {
const selection = window.getSelection();
const range = document.createRange();
range.selectNodeContents(document.getElementById('bibtex'));
selection.removeAllRanges();
selection.addRange(range);
status.textContent = 'Citation selected. Use your browser’s Copy command.';
}
});