Initial commit.
Signed-off-by: Andreas Widen <aw@luflow.net>
This commit is contained in:
commit
a4a5c7daa5
1389 changed files with 241399 additions and 0 deletions
39
static/scripts/copy-to-clipboard.js
Normal file
39
static/scripts/copy-to-clipboard.js
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
/* luflow.net web site */
|
||||
/* Public domain 2025. All rights waived */
|
||||
|
||||
// copy code button:
|
||||
let copyButtonLabel = 'Copy';
|
||||
let codeBlocks = Array.from(document.querySelectorAll('pre'));
|
||||
|
||||
for (let codeBlock of codeBlocks) {
|
||||
let wrapper = document.createElement('div');
|
||||
wrapper.style.position = 'relative';
|
||||
|
||||
let copyButton = document.createElement('button');
|
||||
copyButton.className = 'copy-code';
|
||||
copyButton.innerHTML = copyButtonLabel;
|
||||
|
||||
codeBlock.setAttribute('tabindex', '0');
|
||||
codeBlock.appendChild(copyButton);
|
||||
// wrap codebock with relative parent element:
|
||||
codeBlock.parentNode.insertBefore(wrapper, codeBlock);
|
||||
wrapper.appendChild(codeBlock);
|
||||
|
||||
copyButton.addEventListener('click', async () => {
|
||||
await copyCode(codeBlock, copyButton);
|
||||
});
|
||||
}
|
||||
|
||||
async function copyCode(block, button) {
|
||||
let code = block.querySelector('code');
|
||||
let text = code.innerText;
|
||||
|
||||
await navigator.clipboard.writeText(text);
|
||||
|
||||
// visual feedback that task is completed:
|
||||
button.innerText = 'Copied!';
|
||||
|
||||
setTimeout(() => {
|
||||
button.innerText = copyButtonLabel;
|
||||
}, 700);
|
||||
}
|
||||
44
static/scripts/core.js
Normal file
44
static/scripts/core.js
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
/* luflow.net web site */
|
||||
/* Public domain 2025. All rights waived */
|
||||
|
||||
// handle menu toggle while in mobile (or smaller) type screens:
|
||||
let menuToggle = document.querySelector('.menuToggle');
|
||||
let header = document.querySelector('header');
|
||||
menuToggle.onclick = function () {
|
||||
header.classList.toggle('active');
|
||||
};
|
||||
|
||||
// hide header navigation bar when scrolling down, and show again when scrolling up:
|
||||
let lastScrollTop = 0;
|
||||
let navbarHeight = 100;
|
||||
let didScroll = false;
|
||||
let delta = 5;
|
||||
|
||||
window.onscroll = function () {
|
||||
didScroll = true;
|
||||
};
|
||||
|
||||
setInterval(function () {
|
||||
if (didScroll) {
|
||||
hasScrolled();
|
||||
didScroll = false;
|
||||
}
|
||||
}, 250);
|
||||
|
||||
function hasScrolled() {
|
||||
let scrollTop = document.documentElement.scrollTop;
|
||||
|
||||
if (Math.abs(lastScrollTop - scrollTop) <= delta) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (scrollTop > lastScrollTop && scrollTop > navbarHeight) {
|
||||
header.classList.add('nav-up');
|
||||
header.classList.remove('nav-down');
|
||||
} else {
|
||||
header.classList.remove('nav-up');
|
||||
header.classList.add('nav-down');
|
||||
}
|
||||
|
||||
lastScrollTop = scrollTop;
|
||||
}
|
||||
Loading…
Reference in a new issue