window.onload = function () {
  let container = document.querySelector('#toc-aside');
  if (container != null) {
    resize_toc(container);
    toc_scroll_position(container);
    window.onscroll = function () { toc_scroll_position(container) };
  }

  let theme = localStorage.getItem("theme");
  if (theme != null) {
    setTimeout(() => {
      set_giscus_theme(theme)
    }, 500);
  }
}

function resize_toc(container) {
  let containerHeight = container.clientHeight;

  let resize = function () {
    if (containerHeight > document.documentElement.clientHeight - 100) {
      container.classList.add('coarse');
    } else {
      container.classList.remove('coarse');
    }
  };
  resize();

  let resizeId;
  window.onresize = function () {
    clearTimeout(resizeId);
    resizeId = setTimeout(resize, 300);
  };
}

function toc_scroll_position(container) {
  if (container.offsetParent === null) {
    // skip computation if ToC is not visible
    return;
  }

  // remove active class for all items
  for (item of container.querySelectorAll("li")) {
    item.classList.remove("active");
  }

  // look for active item
  let site_offset = document.documentElement.scrollTop;
  let current_toc_item = null;
  for (item of container.querySelectorAll("li")) {
    if (item.offsetParent === null) {
      // skip items that are not visible
      continue;
    }
    let anchor = item.firstElementChild.getAttribute("href");
    let heading = document.querySelector(anchor);
    if (heading.offsetTop <= (site_offset + document.documentElement.clientHeight / 3)) {
      current_toc_item = item;
    } else {
      break;
    }
  }

  // set active class for current ToC item
  if (current_toc_item != null) {
    current_toc_item.classList.add("active");
  }
}

function toggle_lights() {
  if (document.documentElement.getAttribute("data-theme") === "dark") {
    set_theme("light")
  } else if (document.documentElement.getAttribute("data-theme") === "light") {
    set_theme("dark")
  } else {
    set_theme(window.matchMedia("(prefers-color-scheme: dark)").matches ? "light" : "dark")
  }
}

function set_theme(theme) {
  document.documentElement.setAttribute("data-theme", theme)
  set_giscus_theme(theme)
  localStorage.setItem("theme", theme)
}

function clear_theme_override() {
  document.documentElement.removeAttribute("data-theme");
  set_giscus_theme("preferred_color_scheme")
  localStorage.removeItem("theme")
}

function set_giscus_theme(theme) {
  let comment_form = document.querySelector("iframe.giscus-frame");
  if (comment_form != null) {
    comment_form.contentWindow.postMessage({
      giscus: { setConfig: { theme: theme } }
    }, "https://giscus.app")
  }
}

