single.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. window.addEventListener('DOMContentLoaded', () => {
  2. // =========== Add anchor to the headers ================
  3. function addAnchor (element) {
  4. element.innerHTML = `<a href="#${element.id}" class="header-anchor">${element.innerHTML}<sup><i class="fas fa-link fa-sm"></i></sup></a>`
  5. }
  6. const postContent = document.getElementById('post-content')
  7. if (postContent != null) {
  8. const headerTypes = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6']
  9. for (let i = 0; i < headerTypes.length; i++) {
  10. const headers = postContent.querySelectorAll(headerTypes[i])
  11. if (headers) {
  12. headers.forEach(addAnchor)
  13. }
  14. }
  15. }
  16. // =============== Make TOC Compatible with Bootstrap Scroll Spy ========
  17. // add "navbar" class to the "nav" element
  18. const toc = document.getElementById('TableOfContents')
  19. if (toc) {
  20. toc.classList.add('navbar')
  21. // add "nav-pills" class to the "ul" elements
  22. let elems = toc.getElementsByTagName('ul')
  23. for (let i = 0; i < elems.length; i++) {
  24. elems[i].classList.add('nav-pills')
  25. }
  26. // add "nav-item" class to the "li" elements
  27. elems = toc.getElementsByTagName('li')
  28. for (let i = 0; i < elems.length; i++) {
  29. elems[i].classList.add('nav-item')
  30. }
  31. // add "nav-link" class to the "a" elements
  32. elems = toc.getElementsByTagName('a')
  33. for (let i = 0; i < elems.length; i++) {
  34. elems[i].classList.add('nav-link')
  35. }
  36. }
  37. // add scroll to top button
  38. const btn = document.getElementById('scroll-to-top')
  39. if(btn) {
  40. window.addEventListener('scroll', function () {
  41. if (window.scrollY > 300) {
  42. btn.classList.add('show')
  43. } else {
  44. btn.classList.remove('show')
  45. }
  46. })
  47. btn.addEventListener('click', function (e) {
  48. e.preventDefault()
  49. window.scrollTo({
  50. top: 0,
  51. behavior: 'smooth'
  52. })
  53. })
  54. }
  55. })