summaryrefslogtreecommitdiff
path: root/src/js/includeheader.js
blob: 5ac7d0676af0fdfca08a899e202462c9a8ab6dfc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
function includeHeader() {
  var z, i, elmnt, file, xhttp;
  // loop through a collection of all HTML elements
  z = document.getElementsByTagName("*");
  for (i = 0; i < z.length; i++) {
    elmnt = z[i];
    // search for elements with a certain attribute
    file = elmnt.getAttribute("include-header");
    if (file) {
      // make an HTTP request using the attribute value as the file name
      xhttp = new XMLHttpRequest();
      xhttp.onreadystatechange = function() {
        if (this.readyState == 4) {
          if (this.status == 200) {
            elmnt.innerHTML = this.responseText;
            setActiveLink(); // Set the active link after including the HTML
          }
          if (this.status == 404) {
            elmnt.innerHTML = "Page not found.";
          }
          // remove the attribute and call this function once more
          elmnt.removeAttribute("include-header");
          includeHeader();
        }
      };
      xhttp.open("GET", file, true);
      xhttp.send();
      // exit the function
      return;
    }
  }
}

// Set the active link based on the current page
function setActiveLink() {
  var currentPath = window.location.pathname;
  var navLinks = document.getElementsByClassName("navBar")[0].getElementsByTagName("a");
  for (var i = 0; i < navLinks.length; i++) {
    var link = navLinks[i];
    var href = link.getAttribute("href");
    if (href === currentPath) {
      link.classList.add("active");
    } else {
      link.classList.remove("active");
    }
  }
}