window.addEventListener("DOMContentLoaded", function () { var allAnnotations = this.document.querySelectorAll(".fn-annotatation"); let level = 0; const updateShownAnnotations = () => { allAnnotations.forEach((el) => { const elLevel = parseInt(el.getAttribute("level")); console.log(elLevel, level); if (elLevel < level) { el.classList.add("visible"); } else { el.classList.remove("visible"); } }) } updateShownAnnotations(); document.querySelector(".fn-annotation-slider").addEventListener("input", (e) => { level = Math.round(e.currentTarget.value / 100); updateShownAnnotations(); }) const doTimeTravel = (e) => { var next = allFiles[parseInt(e.target.value)]; // TODO: loading state // TODO: trigger the loading state on input, only debounce the request // TODO: make sure when visiting /log/{log}.html, this interaction also works // TODO: better error management // TODO: display the current selected file somewhere fetch(window.location.href.replace("index.html", "") + "logs/" + next).then(function (response) { return response.text(); }).then(function (html) { var parser = new DOMParser(); var parsed = parser.parseFromString(html, 'text/html'); var newContent = parsed.querySelector(".main__inner"); var container = document.body.querySelector(".main__inner"); if(newContent) { container.innerHTML = newContent.innerHTML; } else { container.innerHTML = "Couldn't load" } }).catch(function (err) { // There was an error console.warn('Something went wrong.', err); }); } const debounce = (callback, waitTime) => { let timer; return (...args) => { clearTimeout(timer); timer = setTimeout(() => { callback(...args); }, waitTime); }; } document.querySelector(".fn-time-slider").addEventListener('input', debounce(doTimeTravel, 1000)); })