home to your local SPACEGIRL 馃挮 arimelody.space
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at dev 90 lines 2.5 kB view raw
1import "./header.js"; 2import "./config.js"; 3import "./cursor.js"; 4 5function type_out(e) { 6 const text = e.innerText; 7 const original = e.innerHTML; 8 const delay = 25; 9 let chars = 0; 10 11 function insert_char(character, parent) { 12 if (chars == 0) parent.innerHTML = ""; 13 const c = document.createElement("span"); 14 c.innerText = character; 15 parent.appendChild(c); 16 c.classList.add("newchar"); 17 } 18 19 function normalize() { 20 e.innerHTML = original; 21 } 22 23 function increment_char() { 24 const newchar = text.substring(chars, chars + 1); 25 insert_char(newchar, e); 26 chars++; 27 if (chars <= text.length) { 28 setTimeout(increment_char, delay); 29 } else { 30 setTimeout(normalize, 250); 31 } 32 } 33 34 increment_char(); 35} 36 37function fill_list(list) { 38 const items = list.querySelectorAll("li a, li span"); 39 items.innerText = ""; 40 const delay = 100; 41 42 items.forEach((item, iter) => { 43 item.style.animationDelay = `${iter * delay}ms`; 44 item.style.animationPlayState = "playing"; 45 }); 46} 47 48export function hijackClickEvent(container, link) { 49 container.addEventListener('click', event => { 50 if (event.target.tagName.toLowerCase() === 'a') return; 51 event.preventDefault(); 52 link.dispatchEvent(new MouseEvent('click', { 53 bubbles: true, 54 cancelable: true, 55 view: window, 56 ctrlKey: event.ctrlKey, 57 metaKey: event.metaKey, 58 shiftKey: event.shiftKey, 59 altKey: event.altKey, 60 button: event.button, 61 })); 62 }); 63} 64 65document.addEventListener("DOMContentLoaded", () => { 66 [...document.querySelectorAll(".typeout")] 67 .filter((e) => e.innerText != "") 68 .forEach((e) => { 69 type_out(e); 70 }); 71 [...document.querySelectorAll("ol, ul")] 72 .filter((e) => e.innerText != "") 73 .forEach((e) => { 74 fill_list(e); 75 }); 76 77 const top_button = document.getElementById("backtotop"); 78 window.onscroll = () => { 79 if (!top_button) return; 80 const btt_threshold = 100; 81 if ( 82 document.body.scrollTop > btt_threshold || 83 document.documentElement.scrollTop > btt_threshold 84 ) { 85 top_button.classList.add("active"); 86 } else { 87 top_button.classList.remove("active"); 88 } 89 } 90});