Halyul/hexo-theme-mdui

View on GitHub
layout/_partials/js/post.ejs

Summary

Maintainability
Test Coverage
<script type="text/javascript">
  themeRuntime.scriptsMap.post = [];
  if (document.querySelector('.theme-post__toc-fab__menu > ol') !== null && document.querySelector('.theme-post__toc > ol') !== null) {
    tocHighlight()
    function tocHighlight() {
      var timer;
      function doWork() {
        listens.forEach(function(value, index) {
          value[1]();
          value[0].classList.remove("mdui-list-item-active");
        })
        let actionToc = (listens[listens.reduce(function(r, v, index) {
          if (v[2] == true) {
            return index;
          } else return r;
        }, undefined)] || [])[0] || listens[0][0];
        actionToc.classList.add("mdui-list-item-active");
        if(actionToc.getClientRects().length == 0)return;
        showToc(actionToc);
      }
      function showToc(toc) {
        let offsetTop = toc.getClientRects()[0].top - cardToc.getClientRects()[0].top - 40;
        let offsetBottom = toc.getClientRects()[0].bottom - cardToc.getClientRects()[0].bottom + 40;
        let offset = 0;
        if (offsetTop < 0) offset = offsetTop;
        if (offsetBottom > 0) offset = offsetBottom;
        var targetTop = Math.max(0, Math.min(cardToc.scrollTop + offset, toclist.offsetHeight - cardToc.offsetHeight));
        clearInterval(timer);
        timer = setInterval(function() {
          var now = cardToc.scrollTop;
          var speed = (targetTop - now) / 10;
          speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
          if (Math.abs(now - targetTop) < 1) {
            clearInterval(timer);
          }
          cardToc.scrollTop = now + speed;
        }, 30);
      }
      var listens = [];
      var cardToc = document.querySelector('.theme-post__toc');
      var links = cardToc.querySelectorAll(".theme-post__toc__content__link");
      var toclist = document.querySelector(".theme-post__toc > ol");
      Array.prototype.forEach.call(links, function(value, index) {
        var id = (value.getAttribute("href") || "#").slice(1);
        var element = document.getElementById(id);
        listens.push([value, function() {
          var readed = false;
          var scrollTop = (document.documentElement && document.documentElement.scrollTop) || document.body.scrollTop;
          if (element.offsetTop <= scrollTop + element.clientHeight + 64) {
            readed = true;
          } else {
            readed = false;
          }
          listens[index][2] = readed;
        }, false])
      })
      doWork();
      window.addEventListener("scroll", doWork)
      var listener = {
        function:  doWork,
        event: 'scroll',
        el: window,
        removed: false
      }
      themeRuntime.scriptsMap.post.push(listener)
    }
  }
</script>

<script type="text/javascript">
  (function() {
    var postLastModifiedDate = <%= date(page.updated, 'x') %>
    var today = (new Date()).getTime()
    var difference = Math.floor((today - postLastModifiedDate)/(24*60*60*1000))
    if (difference >= 100) {
      document.querySelector('.theme-post__card__warning').style.display = 'block'
      document.querySelector('#content-warning').textContent = difference
    }
  })();
</script>

<script type="text/javascript">
  var images = document.querySelectorAll('.theme-post__card__content img')
  for (i = 0; i < images.length; i++) {
    //console.log('image added', i)
    images[i].addEventListener("click", openLG);
    var listener = {
      function:  openLG,
      event: 'click',
      el: images[i],
      removed: false
    }
    themeRuntime.scriptsMap.post.push(listener)
  }
  function openLG() {
    var img_src = this.getAttribute('src');
    var img_alt = this.getAttribute('alt');
    lightGallery(this, {
      dynamic: true,
      counter: false,
      dynamicEl: [{
        "src": img_src,
        'subHtml': "<span author><%= config.author %></span><div descr>" + img_alt + "</div>"
      }],
    });
  }
</script>

<% if (page.mathjax === true) { %>
    <!-- MathJax Load-->
    <%- partial('../../_widget/post_mathjax') %>
  <% } %>