2023-02-16 13:26:53 +01:00
|
|
|
|
|
|
|
import removeMd from 'remove-markdown'
|
|
|
|
|
2023-02-16 12:29:17 +01:00
|
|
|
export function rand(length) {
|
|
|
|
let result = '';
|
|
|
|
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
|
|
|
const charactersLength = characters.length;
|
|
|
|
let counter = 0;
|
|
|
|
while (counter < length) {
|
2023-02-16 13:26:53 +01:00
|
|
|
result += characters.charAt(Math.floor(Math.random() * charactersLength));
|
|
|
|
counter += 1;
|
2023-02-16 12:29:17 +01:00
|
|
|
}
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2023-02-16 21:20:57 +01:00
|
|
|
export function animateText (ev, interval = 50) {
|
2023-02-16 12:29:17 +01:00
|
|
|
if (!ev.target.getAttribute('data-text')) {
|
|
|
|
ev.target.setAttribute('data-text', ev.target.innerHTML)
|
|
|
|
}
|
|
|
|
if (ev.target.getAttribute('data-animate') === "1") {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
ev.target.setAttribute('data-animate', "1")
|
2023-02-16 21:20:57 +01:00
|
|
|
const orig = removeMd(ev.target.getAttribute('data-text')).replace('&', '&')
|
2023-02-16 12:29:17 +01:00
|
|
|
const steps = orig.length
|
|
|
|
|
2023-02-16 12:58:21 +01:00
|
|
|
const genRand = (pos = 0, len = null) => orig.substring(pos, len).split(' ').map(x => rand(x.length)).join(' ')
|
|
|
|
const random = genRand(0, orig.length)
|
|
|
|
|
2023-02-16 12:29:17 +01:00
|
|
|
ev.target.innerHTML = random
|
|
|
|
|
|
|
|
for (let i = 0; i <= steps; i++) {
|
|
|
|
setTimeout(() => {
|
2023-02-16 12:58:21 +01:00
|
|
|
ev.target.innerHTML = orig.substring(0, i) + genRand(i, orig.length)
|
2023-02-16 13:10:11 +01:00
|
|
|
//console.log(ev.target.innerHTML)
|
2023-02-16 12:29:17 +01:00
|
|
|
|
|
|
|
if (i === steps) {
|
|
|
|
ev.target.setAttribute('data-animate', "0")
|
|
|
|
}
|
2023-02-16 21:20:57 +01:00
|
|
|
}, interval * i)
|
2023-02-16 12:29:17 +01:00
|
|
|
}
|
2023-02-21 12:51:42 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
export async function handleAnchorClick (event) {
|
|
|
|
event.preventDefault()
|
|
|
|
const link = event.currentTarget
|
|
|
|
const anchorId = new URL(link.href).hash.replace('#', '')
|
|
|
|
const anchor = document.getElementById(anchorId || 'intro')
|
|
|
|
return window.scrollTo({
|
|
|
|
top: anchor.offsetTop,
|
|
|
|
behavior: 'smooth'
|
|
|
|
})
|
2023-02-16 12:29:17 +01:00
|
|
|
}
|