Guest User

Untitled

a guest
Oct 30th, 2023
18
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. !function(w, d) {
  2.     if (!w.HTMLInclude) {
  3.         w.HTMLInclude = function() {
  4.             function isInViewport(element, offset) {
  5.                 return element.getBoundingClientRect().top <= (+offset + w.innerHeight)
  6.             }
  7.             function ajax(url, elements) {
  8.                 let xhr = new XMLHttpRequest()
  9.                 xhr.onreadystatechange = function() {
  10.                     if (xhr.readyState == 4 && xhr.status == 200) {
  11.                         elements.forEach(function(element) {
  12.                             let dataReplace = element.getAttribute("data-replace")
  13.                             let z = xhr.responseText
  14.                             if (dataReplace) {
  15.                                 dataReplace.split(",").forEach(function(el) {
  16.                                     let o = el.trim().split(":")
  17.                                     z = z.replace(new RegExp(o[0], "g"), o[1])
  18.                                 })
  19.                             }
  20.                             element.outerHTML = z
  21.                             let scripts = new DOMParser().parseFromString(z, 'text/html').querySelectorAll("SCRIPT")
  22.                             let i = 0
  23.                             let j = scripts.length
  24.                             while (i < j) {
  25.                                 let newScript = d.createElement("SCRIPT")
  26.                                 scripts[i].src ? newScript.src = scripts[i].src : newScript.innerHTML = scripts[i].innerHTML
  27.                                 d.head.appendChild(newScript)
  28.                                 i++
  29.                             }
  30.                         })
  31.                     }
  32.                 }
  33.                 xhr.open("GET", url, true)
  34.                 xhr.send()
  35.             }
  36.             function lazyLoad(element, offset) {
  37.                 w.addEventListener("scroll", function scrollFunc() {
  38.                     if (isInViewport(element, offset)) {
  39.                         w.removeEventListener("scroll", scrollFunc)
  40.                         ajax(element.getAttribute("data-include"), [element])
  41.                     }
  42.                 })
  43.             }
  44.             let store = {}
  45.             let dis = d.querySelectorAll('[data-include]:not([data-in])')
  46.             let i = dis.length
  47.             while (i--) {
  48.                 let di = dis[i].getAttribute('data-include')
  49.                 let laziness = dis[i].getAttribute('data-lazy')
  50.                 dis[i].setAttribute("data-in", "")
  51.                 if (!laziness || (laziness && isInViewport(dis[i], laziness))) {
  52.                     store[di] = store[di] || []
  53.                     store[di].push(dis[i])
  54.                 } else {
  55.                     lazyLoad(dis[i], laziness)
  56.                 }
  57.             }
  58.             for (let key in store) {
  59.                 ajax(key, store[key])
  60.             }
  61.         }
  62.     }
  63.     w.HTMLInclude()
  64. }(window, document)
Advertisement
Add Comment
Please, Sign In to add comment