{{ partial "page-meta-links.html" . }}
{{ if not .Params.notoc }}
{{ with .TableOfContents }}
{{ if ge (len .) 200 }}
{{ . }}
{{ end }}
{{ end }}
{{ end }}

<script>
  $(function () {
    var $toc = $("#TableOfContents");
    if (!$toc || !$toc.length) {
      return;
    }
    var top = $toc.offset().top;
    $(window).on("scroll", debounce(setTop, 100))
    $(window).on("scroll", debounce(addActive, 30))

    function addActive() {
      var scrollValue = $(window).scrollTop();
      var topEle = null;
      $.each($('main h1, main h2, main h3'), function (index, item) {
        if ($(item).offset().top - 70 > scrollValue) {
          return
        }
        if (!topEle) {
          topEle = item
        } else if ($(item).offset().top >= $(topEle).offset().top) {
          topEle = item
        }
        if (topEle) {
          var id = $(item).attr('id');
          $toc.find('a').removeClass("active").end().find('a[href="' + '#' + id + '"]').addClass("active")
        }
      })
    }

    function setTop() {
      var scrollValue = $(window).scrollTop();
      if (scrollValue >= top - 70) {
        $toc.addClass('fixed')
      } else {
        $toc.removeClass('fixed')
      }
    }

    function debounce(fn, wait) {
      var timeout = null;
      return function () {
        clearTimeout(timeout);
        timeout = setTimeout(() => {
          fn.apply(this, arguments);
        }, wait);
      };
    }
  })

</script>
