//Removing Preloader
setTimeout(function () {
var preloader = document.getElementById("preloader");
if (preloader) {
preloader.classList.add("preloader-hide");
}
}, 150);
document.addEventListener("DOMContentLoaded", () => {
"use strict";
//Global Variables
let isPWA = true; // Enables or disables the service worker and PWA
let isAJAX = true; // AJAX transitions. Requires local server or server
var pwaName = "Azures"; //Local Storage Names for PWA
var pwaRemind = 1; //Days to re-remind to add to home
var pwaNoCache = false; //Requires server and HTTPS/SSL. Will clear cache with each visit
//Setting Service Worker Locations scope = folder | location = service worker js location
var pwaScope = "/mb/";
var pwaLocation = "/mb/_service-worker.js";
//Place all your custom Javascript functions and plugin calls below this line
function init_template() {
//Caching Global Variables
var i, e, el; //https://www.w3schools.com/js/js_performance.asp
//Greetig Heading
var pageTitle = document.querySelectorAll(
".page-title-large, .page-title-small, .menu-header a"
);
if (pageTitle) {
var greetingTime = new Date().getHours();
var greetingMessage;
var greetingExist = document.querySelectorAll(".greeting-text")[0];
if (greetingExist) {
var greetingUser = document
.querySelectorAll(".greeting-text")[0]
.getAttribute("data-username");
var greetingMorning = "Good morning";
var greetingAfternoon = "Good afternoon";
var greetingEvening = "Good evening";
if (greetingTime >= 0 && greetingTime < 12) {
greetingMessage = greetingMorning;
} else if (greetingTime >= 12 && greetingTime < 17) {
greetingMessage = greetingAfternoon;
} else if (greetingTime >= 17 && greetingTime < 24) {
greetingMessage = greetingEvening;
}
document
.querySelectorAll(".greeting-text")[0]
.insertAdjacentHTML(
"beforeend",
greetingMessage + ",
" + greetingUser
);
}
}
//Attaching Menu Hider
var menuHider = document.getElementsByClassName("menu-hider");
if (!menuHider.length) {
var hider = document.createElement("div");
hider.setAttribute("class", "menu-hider");
document.body.insertAdjacentElement("beforebegin", hider);
}
if (menuHider[0].classList.contains("menu-active")) {
menuHider[0].classList.remove("menu-active");
}
//Demo function for programtic creation of Menu
//menu('menu-settings', 'show', 250);
//Activating Menus
document.querySelectorAll(".menu").forEach((el) => {
el.style.display = "block";
});
//Validator
var inputField = document.querySelectorAll("input");
if (inputField.length) {
var mailValidator = /^[A-Z0-9._%+-]+@([A-Z0-9-]+\.)+[A-Z]{2,4}$/i;
var phoneValidator =
/^[(]{0,1}[0-9]{3}[)]{0,1}[-\s\.]{0,1}[0-9]{3}[-\s\.]{0,1}[0-9]{4}$/;
var nameValidator =
/^[a-zA-ZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ∂ð ,.'-]+$/u;
var passwordValidator = /[A-Za-z]{2}[A-Za-z]*[ ]?[A-Za-z]*/;
var numberValidator = /^(0|[1-9]\d*)$/;
var linkValidator = /^(http|https)?:\/\/[a-zA-Z0-9-\.]+\.[a-z]{2,4}/;
var textValidator = /[A-Za-z]{2}[A-Za-z]*[ ]?[A-Za-z]*/;
function valid(el) {
el.parentElement
.querySelectorAll(".valid")[0]
.classList.remove("disabled");
el.parentElement
.querySelectorAll(".invalid")[0]
.classList.add("disabled");
}
function invalid(el) {
el.parentElement
.querySelectorAll(".valid")[0]
.classList.add("disabled");
el.parentElement
.querySelectorAll(".invalid")[0]
.classList.remove("disabled");
}
function unfilled(el) {
el.parentElement.querySelectorAll("em")[0].classList.remove("disabled");
el.parentElement
.querySelectorAll(".valid")[0]
.classList.add("disabled");
el.parentElement
.querySelectorAll(".invalid")[0]
.classList.add("disabled");
}
var regularField = document.querySelectorAll(
'.input-style input:not([type="date"])'
);
regularField.forEach((el) =>
el.addEventListener("keyup", (e) => {
if (!el.value == "") {
el.parentElement.classList.add("input-style-active");
el.parentElement.querySelector("em").classList.add("disabled");
} else {
el.parentElement
.querySelectorAll(".valid")[0]
.classList.add("disabled");
el.parentElement
.querySelectorAll(".invalid")[0]
.classList.add("disabled");
el.parentElement.classList.remove("input-style-active");
el.parentElement.querySelector("em").classList.remove("disabled");
}
})
);
var regularTextarea = document.querySelectorAll(".input-style textarea");
regularTextarea.forEach((el) =>
el.addEventListener("keyup", (e) => {
if (!el.value == "") {
el.parentElement.classList.add("input-style-active");
el.parentElement.querySelector("em").classList.add("disabled");
} else {
el.parentElement.classList.remove("input-style-active");
el.parentElement.querySelector("em").classList.remove("disabled");
}
})
);
var selectField = document.querySelectorAll(".input-style select");
selectField.forEach((el) =>
el.addEventListener("change", (e) => {
if (el.value !== "default") {
el.parentElement.classList.add("input-style-active");
el.parentElement
.querySelectorAll(".valid")[0]
.classList.remove("disabled");
el.parentElement
.querySelectorAll(".invalid, em, span")[0]
.classList.add("disabled");
}
if (el.value == "default") {
el.parentElement
.querySelectorAll("span, .valid, em")[0]
.classList.add("disabled");
el.parentElement
.querySelectorAll(".invalid")[0]
.classList.remove("disabled");
el.parentElement.classList.add("input-style-active");
}
})
);
var dateField = document.querySelectorAll(
'.input-style input[type="date"]'
);
dateField.forEach((el) =>
el.addEventListener("change", (e) => {
el.parentElement.classList.add("input-style-active");
el.parentElement
.querySelectorAll(".valid")[0]
.classList.remove("disabled");
el.parentElement
.querySelectorAll(".invalid")[0]
.classList.add("disabled");
})
);
var validateField = document.querySelectorAll(
".validate-field input, .validator-field textarea"
);
if (validateField.length) {
validateField.forEach((el) =>
el.addEventListener("keyup", (e) => {
var getAttribute = el.getAttribute("type");
switch (getAttribute) {
case "name":
nameValidator.test(el.value) ? valid(el) : invalid(el);
break;
case "number":
numberValidator.test(el.value) ? valid(el) : invalid(el);
break;
case "email":
mailValidator.test(el.value) ? valid(el) : invalid(el);
break;
case "text":
textValidator.test(el.value) ? valid(el) : invalid(el);
break;
case "url":
linkValidator.test(el.value) ? valid(el) : invalid(el);
break;
case "tel":
phoneValidator.test(el.value) ? valid(el) : invalid(el);
break;
case "password":
passwordValidator.test(el.value) ? valid(el) : invalid(el);
break;
}
if (el.value === "") {
unfilled(el);
}
})
);
}
}
//OTP Boxes - Azures 3.9
var otp = document.querySelectorAll(".otp");
if (otp[0]) {
otp.forEach((el) => {
el.addEventListener("focus", (e) => {
el.value = "";
});
el.addEventListener("input", (e) => {
el.nextElementSibling ? el.nextElementSibling.focus() : el.blur();
});
});
}
//Image Sliders
var splide = document.getElementsByClassName("splide");
if (splide.length) {
var singleSlider = document.querySelectorAll(".single-slider");
if (singleSlider.length) {
singleSlider.forEach(function (e) {
var single = new Splide("#" + e.id, {
type: "loop",
autoplay: true,
interval: 4000,
perPage: 1,
}).mount();
var sliderNext = document.querySelectorAll(".slider-next");
var sliderPrev = document.querySelectorAll(".slider-prev");
sliderNext.forEach((el) =>
el.addEventListener("click", (el) => {
single.go(">");
})
);
sliderPrev.forEach((el) =>
el.addEventListener("click", (el) => {
single.go("<");
})
);
});
}
var doubleSlider = document.querySelectorAll(".double-slider");
if (doubleSlider.length) {
doubleSlider.forEach(function (e) {
var double = new Splide("#" + e.id, {
type: "loop",
autoplay: true,
interval: 4000,
arrows: false,
perPage: 2,
}).mount();
});
}
var trippleSlider = document.querySelectorAll(".tripple-slider");
if (trippleSlider.length) {
trippleSlider.forEach(function (e) {
var tripple = new Splide("#" + e.id, {
type: "loop",
autoplay: true,
padding: {
left: "0px",
right: "80px",
},
interval: 4000,
arrows: false,
perPage: 2,
perMove: 1,
}).mount();
});
}
}
var topicSlider = document.querySelectorAll(".topic-slider");
if (topicSlider.length) {
var topic = new Splide(".topic-slider", {
type: "loop",
autoplay: false,
padding: {
left: "15px",
right: "40px",
},
arrows: false,
perPage: 3,
perMove: 1,
}).mount();
}
var userSlider = document.querySelectorAll(".user-slider");
if (userSlider.length) {
var topic = new Splide(".user-slider", {
type: "loop",
autoplay: false,
padding: {
left: "0px",
right: "40px",
},
arrows: false,
perPage: 4,
perMove: 1,
}).mount();
}
//Don't jump on Empty Links
const emptyHref = document.querySelectorAll('a[href="#"]');
emptyHref.forEach((el) =>
el.addEventListener("click", (e) => {
e.preventDefault();
return false;
})
);
//Map Page
var fullMap = document.querySelectorAll(".hide-map");
if (fullMap.length) {
var mapActivator = document.querySelectorAll(".show-map");
var mapDisabler = document.querySelectorAll(".hide-map");
mapActivator[0].addEventListener("click", function (e) {
document
.getElementsByClassName("map-overlay")[0]
.classList.add("disabled");
document
.getElementsByClassName("card-center")[0]
.classList.add("disabled");
document
.getElementsByClassName("hide-map")[0]
.classList.remove("disabled");
});
mapDisabler[0].addEventListener("click", function (e) {
document
.getElementsByClassName("map-overlay")[0]
.classList.remove("disabled");
document
.getElementsByClassName("card-center")[0]
.classList.remove("disabled");
document
.getElementsByClassName("hide-map")[0]
.classList.add("disabled");
});
}
var checkedCard = document.querySelectorAll(".check-card");
checkedCard.forEach((el) =>
el.addEventListener("click", (e) => {
if (el.querySelector("input").getAttribute("checked") == "checked") {
el.querySelector("input").removeAttribute("checked");
} else {
el.querySelector("input").setAttribute("checked", "checked");
}
})
);
//To Do List
var toDoList = document.querySelectorAll(".todo-list a");
toDoList.forEach((el) =>
el.addEventListener("click", (e) => {
el.classList.toggle("opacity-80");
if (el.querySelector("input").getAttribute("checked") == "checked") {
el.querySelector("input").removeAttribute("checked");
} else {
el.querySelector("input").setAttribute("checked", "checked");
}
})
);
//Setting Sidebar Widths
var menus = document.querySelectorAll(".menu");
function menuFunction() {
if (menus.length) {
var menuSidebar = document.querySelectorAll(
".menu-box-left, .menu-box-right"
);
menuSidebar.forEach(function (e) {
if (e.getAttribute("data-menu-width") === "cover") {
e.style.width = "100%";
} else {
e.style.width = e.getAttribute("data-menu-width") + "px";
}
});
var menuSheets = document.querySelectorAll(
".menu-box-bottom, .menu-box-top, .menu-box-modal"
);
menuSheets.forEach(function (e) {
if (e.getAttribute("data-menu-width") === "cover") {
e.style.width = "100%";
e.style.height = "100%";
} else {
e.style.width = e.getAttribute("data-menu-width") + "px";
e.style.height = e.getAttribute("data-menu-height") + "px";
}
});
//Opening Menus
var menuOpen = document.querySelectorAll("[data-menu]");
var wrappers = document.querySelectorAll(
".header, #footer-bar, .page-content"
);
menuOpen.forEach((el) =>
el.addEventListener("click", (e) => {
//Close Existing Opened Menus
const activeMenu = document.querySelectorAll(".menu-active");
for (let i = 0; i < activeMenu.length; i++) {
activeMenu[i].classList.remove("menu-active");
}
//Open Clicked Menu
var menuData = el.getAttribute("data-menu");
var menuElement = document.getElementById(menuData);
if (menuElement) {
menuElement.classList.add("menu-active");
}
var menuHider = document.getElementsByClassName("menu-hider")[0];
if (menuHider) {
menuHider.classList.add("menu-active");
}
//Check and Apply Effects
var menu = document.getElementById(menuData);
if (!menu) {
return;
}
var menuEffect = menu.getAttribute("data-menu-effect");
var menuLeft = menu.classList.contains("menu-box-left");
var menuRight = menu.classList.contains("menu-box-right");
var menuTop = menu.classList.contains("menu-box-top");
var menuBottom = menu.classList.contains("menu-box-bottom");
var menuWidth = menu.offsetWidth;
var menuHeight = menu.offsetHeight;
var menuTimeout = menu.getAttribute("data-menu-hide");
if (menuTimeout) {
setTimeout(function () {
document
.getElementById(menuData)
.classList.remove("menu-active");
document
.getElementsByClassName("menu-hider")[0]
.classList.remove("menu-active");
}, menuTimeout);
}
if (menuEffect === "menu-push") {
var menuWidth = document
.getElementById(menuData)
.getAttribute("data-menu-width");
if (menuLeft) {
for (let i = 0; i < wrappers.length; i++) {
wrappers[i].style.transform =
"translateX(" + menuWidth + "px)";
}
}
if (menuRight) {
for (let i = 0; i < wrappers.length; i++) {
wrappers[i].style.transform =
"translateX(-" + menuWidth + "px)";
}
}
if (menuBottom) {
for (let i = 0; i < wrappers.length; i++) {
wrappers[i].style.transform =
"translateY(-" + menuHeight + "px)";
}
}
if (menuTop) {
for (let i = 0; i < wrappers.length; i++) {
wrappers[i].style.transform =
"translateY(" + menuHeight + "px)";
}
}
}
if (menuEffect === "menu-parallax") {
var menuWidth = document
.getElementById(menuData)
.getAttribute("data-menu-width");
if (menuLeft) {
for (let i = 0; i < wrappers.length; i++) {
wrappers[i].style.transform =
"translateX(" + menuWidth / 10 + "px)";
}
}
if (menuRight) {
for (let i = 0; i < wrappers.length; i++) {
wrappers[i].style.transform =
"translateX(-" + menuWidth / 10 + "px)";
}
}
if (menuBottom) {
for (let i = 0; i < wrappers.length; i++) {
wrappers[i].style.transform =
"translateY(-" + menuHeight / 5 + "px)";
}
}
if (menuTop) {
for (let i = 0; i < wrappers.length; i++) {
wrappers[i].style.transform =
"translateY(" + menuHeight / 5 + "px)";
}
}
}
})
);
//Closing Menus
const menuClose = document.querySelectorAll(".close-menu, .menu-hider");
menuClose.forEach((el) =>
el.addEventListener("click", (e) => {
const activeMenu = document.querySelectorAll(".menu-active");
for (let i = 0; i < activeMenu.length; i++) {
activeMenu[i].classList.remove("menu-active");
}
for (let i = 0; i < wrappers.length; i++) {
wrappers[i].style.transform = "translateX(-" + 0 + "px)";
}
})
);
}
}
menuFunction();
function activateMenus() {
const menuActive = document.querySelectorAll("[data-menu-active]")[0];
if (menuActive) {
var selectedMenu = menuActive.getAttribute("data-menu-active");
var selectedElement = document.querySelectorAll("#" + selectedMenu)[0];
if (selectedElement) {
selectedElement.classList.add("nav-item-active");
if (
selectedElement.parentNode &&
selectedElement.parentNode.getAttribute("class") === "submenu"
) {
var subId = "#" + selectedElement.parentNode.getAttribute("id");
var subData = selectedElement.parentNode.getAttribute("id");
var subElement = document.querySelectorAll(subId)[0];
if (subElement) {
var subSize = subElement.children.length;
var subHeight = subElement.offsetHeight;
subElement.style.transition = "all 250ms";
subElement.style.height = subSize * 50 + 26 + "px";
var submenuActive = document.querySelectorAll(
'[data-submenu="' + subData + '"]'
)[0];
if (submenuActive) {
submenuActive.classList.add("nav-item-active");
}
}
}
}
}
document.querySelectorAll("[data-submenu]").forEach(function (e) {
var subID = e.getAttribute("data-submenu");
var subElement = document.getElementById(subID);
if (subElement && subElement.children) {
var subChildren = subElement.children.length;
var subtest = e.querySelectorAll("strong")[0];
if (subtest) {
subtest.insertAdjacentHTML("beforeend", subChildren);
}
}
});
var submenuLink = document.querySelectorAll("[data-submenu]");
submenuLink.forEach((el) =>
el.addEventListener("click", (e) => {
el.classList.toggle("nav-item-active");
var subData = el.getAttribute("data-submenu");
var subId = "#" + subData;
var subSize = document.querySelectorAll(subId)[0].children.length;
var subHeight = document.querySelectorAll(subId)[0].offsetHeight;
if (subHeight === 0) {
console.log("true");
document.querySelectorAll(subId)[0].style.transition = "all 250ms";
document.querySelectorAll(subId)[0].style.height =
subSize * 50 + 26 + "px";
} else {
console.log("false");
document.querySelectorAll(subId)[0].style.transition = "all 250ms";
document.querySelectorAll(subId)[0].style.height = "0px";
}
})
);
}
//Back Button
const backButton = document.querySelectorAll("[data-back-button]");
if (backButton.length) {
backButton.forEach((el) =>
el.addEventListener("click", (e) => {
e.stopPropagation;
e.preventDefault;
window.history.go(-1);
})
);
}
//Back to Top
function backUp() {
const backToTop = document.querySelectorAll(
".back-to-top-icon, .back-to-top-badge, .back-to-top"
);
if (backToTop) {
backToTop.forEach((el) =>
el.addEventListener("click", (e) => {
window.scrollTo({ top: 0, behavior: `smooth` });
})
);
}
}
//Check iOS Version and add min-ios15 class if higher or equal to iOS15
function iOSversion() {
let d, v;
if (/iP(hone|od|ad)/.test(navigator.platform)) {
v = navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/);
d = {
status: true,
version: parseInt(v[1], 10),
info:
parseInt(v[1], 10) +
"." +
parseInt(v[2], 10) +
"." +
parseInt(v[3] || 0, 10),
};
} else {
d = { status: false, version: false, info: "" };
}
return d;
}
let iosVer = iOSversion();
if (iosVer.version > 14) {
document.querySelectorAll("#page")[0].classList.add("min-ios15");
}
//Card Extender
const cards = document.getElementsByClassName("card");
function card_extender() {
var headerHeight, footerHeight, headerOnPage;
var headerOnPage = document.querySelectorAll(
".header:not(.header-transparent)"
)[0];
var footerOnPage = document.querySelectorAll("#footer-bar")[0];
headerOnPage
? (headerHeight = document.querySelectorAll(".header")[0].offsetHeight)
: (headerHeight = 0);
footerOnPage
? (footerHeight =
document.querySelectorAll("#footer-bar")[0].offsetHeight)
: (footerHeight = 0);
for (let i = 0; i < cards.length; i++) {
if (cards[i].getAttribute("data-card-height") === "cover") {
if (window.matchMedia("(display-mode: fullscreen)").matches) {
var windowHeight = window.outerHeight;
}
if (!window.matchMedia("(display-mode: fullscreen)").matches) {
var windowHeight = window.innerHeight;
}
//Fix for iOS 15 pages with data-height="cover"
var coverHeight = windowHeight + "px";
// - Remove this for iOS 14 issues - var coverHeight = windowHeight - headerHeight - footerHeight + 'px';
}
if (cards[i].getAttribute("data-card-height") === "cover-card") {
var windowHeight = window.innerHeight;
var coverHeight = windowHeight - 173 + "px";
cards[i].style.height = coverHeight;
}
if (cards[i].getAttribute("data-card-height") === "cover-full") {
if (window.matchMedia("(display-mode: fullscreen)").matches) {
var windowHeight = window.outerHeight;
}
if (!window.matchMedia("(display-mode: fullscreen)").matches) {
var windowHeight = window.innerHeight;
}
var coverHeight = windowHeight + "px";
cards[i].style.height = coverHeight;
}
if (cards[i].hasAttribute("data-card-height")) {
var getHeight = cards[i].getAttribute("data-card-height");
cards[i].style.height = getHeight + "px";
if (getHeight === "cover") {
var totalHeight = getHeight;
cards[i].style.height = coverHeight;
}
}
}
}
if (cards.length) {
card_extender();
window.addEventListener("resize", card_extender);
}
//Activate Remembered Highlight
function selectHighlight() {
var rememberHighlight = localStorage.getItem(pwaName + "-Highlight");
if (rememberHighlight) {
document
.querySelectorAll(
'[data-change-highlight="' + rememberHighlight + '"]'
)[0]
.classList.add("highlight-active");
document.body.setAttribute("data-highlight", rememberHighlight);
}
}
//Page Highlights
function highlightColors() {
var highlightData = document.querySelectorAll("[data-change-highlight]");
highlightData.forEach((el) =>
el.addEventListener("click", (e) => {
const activeHighlight =
document.querySelectorAll(".highlight-active");
for (let i = 0; i < activeHighlight.length; i++) {
activeHighlight[i].classList.remove("highlight-active");
}
el.classList.add("highlight-active");
var highlight = el.getAttribute("data-change-highlight");
var pageHighlight = document.querySelectorAll(".page-highlight");
if (pageHighlight.length) {
pageHighlight.forEach(function (e) {
e.remove();
});
}
var loadHighlight = document.createElement("link");
loadHighlight.rel = "stylesheet";
loadHighlight.className = "page-highlight";
loadHighlight.type = "text/css";
loadHighlight.href =
"styles/highlights/highlight_" + highlight + ".css";
document.getElementsByTagName("head")[0].appendChild(loadHighlight);
document.body.setAttribute(
"data-highlight",
"highlight-" + highlight
);
localStorage.setItem(pwaName + "-Highlight", highlight);
})
);
var rememberHighlight = localStorage.getItem(pwaName + "-Highlight");
if (rememberHighlight) {
var loadHighlight = document.createElement("link");
loadHighlight.rel = "stylesheet";
loadHighlight.className = "page-highlight";
loadHighlight.type = "text/css";
loadHighlight.href =
"styles/highlights/highlight_" + rememberHighlight + ".css";
if (!document.querySelectorAll(".page-highlight").length) {
document.getElementsByTagName("head")[0].appendChild(loadHighlight);
document.body.setAttribute(
"data-highlight",
"highlight-" + rememberHighlight
);
}
}
}
highlightColors();
//Background Gradient Color
var gradientData = document.querySelectorAll("[data-change-background]");
gradientData.forEach((el) =>
el.addEventListener("click", (e) => {
var gradient = el.getAttribute("data-change-background");
document.body.setAttribute("data-gradient", "body-" + gradient + "");
localStorage.setItem(pwaName + "-Gradient", gradient);
})
);
//Set Background and Highlight
var pageBackground = localStorage.getItem(pwaName + "-Gradient");
if (pageBackground) {
document.body.setAttribute(
"data-gradient",
"body-" + pageBackground + ""
);
}
//Dark Mode
function checkDarkMode() {
const toggleDark = document.querySelectorAll("[data-toggle-theme]");
function activateDarkMode() {
document.body.classList.add("theme-dark");
document.body.classList.remove("theme-light", "detect-theme");
for (let i = 0; i < toggleDark.length; i++) {
toggleDark[i].checked = "checked";
}
localStorage.setItem(pwaName + "-Theme", "dark-mode");
}
function activateLightMode() {
document.body.classList.add("theme-light");
document.body.classList.remove("theme-dark", "detect-theme");
for (let i = 0; i < toggleDark.length; i++) {
toggleDark[i].checked = false;
}
localStorage.setItem(pwaName + "-Theme", "light-mode");
}
function removeTransitions() {
var falseTransitions = document.querySelectorAll(
".btn, .header, #footer-bar, .menu-box, .menu-active"
);
for (let i = 0; i < falseTransitions.length; i++) {
falseTransitions[i].style.transition = "all 0s ease";
}
}
function addTransitions() {
var trueTransitions = document.querySelectorAll(
".btn, .header, #footer-bar, .menu-box, .menu-active"
);
for (let i = 0; i < trueTransitions.length; i++) {
trueTransitions[i].style.transition = "";
}
}
function setColorScheme() {
const isDarkMode = window.matchMedia(
"(prefers-color-scheme: dark)"
).matches;
const isLightMode = window.matchMedia(
"(prefers-color-scheme: light)"
).matches;
const isNoPreference = window.matchMedia(
"(prefers-color-scheme: no-preference)"
).matches;
window
.matchMedia("(prefers-color-scheme: dark)")
.addListener((e) => e.matches && activateDarkMode());
window
.matchMedia("(prefers-color-scheme: light)")
.addListener((e) => e.matches && activateLightMode());
if (isDarkMode) activateDarkMode();
if (isLightMode) activateLightMode();
}
//Activating Dark Mode
var darkModeSwitch = document.querySelectorAll("[data-toggle-theme]");
darkModeSwitch.forEach((el) =>
el.addEventListener("click", (e) => {
if (document.body.className == "theme-light") {
removeTransitions();
activateDarkMode();
} else if (document.body.className == "theme-dark") {
removeTransitions();
activateLightMode();
}
setTimeout(function () {
addTransitions();
}, 350);
})
);
//Set Color Based on Remembered Preference.
if (localStorage.getItem(pwaName + "-Theme") == "dark-mode") {
for (let i = 0; i < toggleDark.length; i++) {
toggleDark[i].checked = "checked";
}
document.body.className = "theme-dark";
}
if (localStorage.getItem(pwaName + "-Theme") == "light-mode") {
document.body.className = "theme-light";
}
if (document.body.className == "detect-theme") {
setColorScheme();
}
//Detect Dark/Light Mode
const darkModeDetect = document.querySelectorAll(".detect-dark-mode");
darkModeDetect.forEach((el) =>
el.addEventListener("click", (e) => {
document.body.classList.remove("theme-light", "theme-dark");
document.body.classList.add("detect-theme");
setTimeout(function () {
setColorScheme();
}, 50);
})
);
}
if (localStorage.getItem(pwaName + "-Theme") == "dark-mode") {
document.body.className = "theme-dark";
}
if (localStorage.getItem(pwaName + "-Theme") == "light-mode") {
document.body.className = "theme-light";
}
//Accordion Rotate
const accordionBtn = document.querySelectorAll(".accordion-btn");
if (accordionBtn.length) {
accordionBtn.forEach((el) =>
el.addEventListener("click", (event) => {
el.querySelector("i:last-child").classList.toggle("fa-rotate-180");
})
);
}
//File Upload
const inputArray = document.getElementsByClassName("upload-file");
if (inputArray.length) {
inputArray[0].addEventListener("change", prepareUpload, false);
function prepareUpload(event) {
if (this.files && this.files[0]) {
var img = document.getElementById("image-data");
img.src = URL.createObjectURL(this.files[0]);
}
const files = event.target.files;
const fileName = files[0].name;
document
.getElementsByClassName("file-data")[0]
.classList.add("disabled");
document
.getElementsByClassName("upload-file-data")[0]
.classList.remove("disabled");
document.getElementsByClassName("upload-file-name")[0].innerHTML =
files[0].name;
document.getElementsByClassName("upload-file-modified")[0].innerHTML =
files[0].lastModifiedDate;
document.getElementsByClassName("upload-file-size")[0].innerHTML =
files[0].size / 1000 + "kb";
document.getElementsByClassName("upload-file-type")[0].innerHTML =
files[0].type;
}
}
var locationBut = document.querySelectorAll(".get-location");
if (locationBut.length) {
var locationSupport =
document.getElementsByClassName("location-support")[0];
if (typeof locationSupport != "undefined" && locationSupport != null) {
//Geo Location
if ("geolocation" in navigator) {
locationSupport.innerHTML =
'Your browser and device support Geolocation.';
} else {
locationSupport.innerHTML =
'Your browser and device support Geolocation.';
}
}
function geoLocate() {
const locationCoordinates = document.querySelector(
".location-coordinates"
);
function success(position) {
const latitude = position.coords.latitude;
const longitude = position.coords.longitude;
locationCoordinates.innerHTML =
"Longitude: " +
longitude +
"
Latitude: " +
latitude;
var mapL1 =
"https://www.google.com/maps/embed/v1/view?key=AIzaSyAM3nxDVrkjyKwdIZp8QOplmBKLRVI5S_Y¢er=";
var mapL2 = latitude + ",";
var mapL3 = longitude;
var mapL4 = "&zoom=16&maptype=satellite";
var mapL5 = "";
document
.getElementsByClassName("location-map")[0]
.setAttribute("src", mapLinkEmbed);
document
.getElementsByClassName("location-button")[0]
.setAttribute("href", mapLinkAddress);
document
.getElementsByClassName("location-button")[0]
.classList.remove("disabled");
}
function error() {
locationCoordinates.textContent = "Unable to retrieve your location";
}
if (!navigator.geolocation) {
locationCoordinates.textContent =
"Geolocation is not supported by your browser";
} else {
locationCoordinates.textContent = "Locating";
navigator.geolocation.getCurrentPosition(success, error);
}
}
var getLocation = document.getElementsByClassName("get-location")[0];
if (typeof getLocation != "undefined" && getLocation != null) {
getLocation.addEventListener("click", function () {
this.classList.add("disabled");
geoLocate();
});
}
}
//Card Effects
const cardScale = document.querySelectorAll(".card-scale");
if (cardScale.length) {
cardScale.forEach((el) =>
el.addEventListener("mouseenter", (event) => {
el.querySelectorAll("img")[0].classList.add("card-scale-image");
})
);
cardScale.forEach((el) =>
el.addEventListener("mouseleave", (event) => {
el.querySelectorAll("img")[0].classList.remove("card-scale-image");
})
);
}
const cardHide = document.querySelectorAll(".card-hide");
if (cardHide.length) {
cardHide.forEach((el) =>
el.addEventListener("mouseenter", (event) => {
el.querySelectorAll(
".card-center, .card-bottom, .card-top, .card-overlay"
)[0].classList.add("card-hide-image");
})
);
cardHide.forEach((el) =>
el.addEventListener("mouseleave", (event) => {
el.querySelectorAll(
".card-center, .card-bottom, .card-top, .card-overlay"
)[0].classList.remove("card-hide-image");
})
);
}
const cardRotate = document.querySelectorAll(".card-rotate");
if (cardRotate.length) {
cardRotate.forEach((el) =>
el.addEventListener("mouseenter", (event) => {
el.querySelectorAll("img")[0].classList.add("card-rotate-image");
})
);
cardRotate.forEach((el) =>
el.addEventListener("mouseleave", (event) => {
el.querySelectorAll("img")[0].classList.remove("card-rotate-image");
})
);
}
const cardGray = document.querySelectorAll(".card-grayscale");
if (cardGray.length) {
cardGray.forEach((el) =>
el.addEventListener("mouseenter", (event) => {
el.querySelectorAll("img")[0].classList.add("card-grayscale-image");
})
);
cardGray.forEach((el) =>
el.addEventListener("mouseleave", (event) => {
el.querySelectorAll("img")[0].classList.remove(
"card-grayscale-image"
);
})
);
}
const cardBlur = document.querySelectorAll(".card-blur");
if (cardBlur.length) {
cardBlur.forEach((el) =>
el.addEventListener("mouseenter", (event) => {
el.querySelectorAll("img")[0].classList.add("card-blur-image");
})
);
cardBlur.forEach((el) =>
el.addEventListener("mouseleave", (event) => {
el.querySelectorAll("img")[0].classList.remove("card-blur-image");
})
);
}
//Adding Local Storage for Visited Links
var checkVisited = document.querySelectorAll(".check-visited");
if (checkVisited.length) {
function check_visited_links() {
var visited_links =
JSON.parse(localStorage.getItem(pwaName + "_Visited_Links")) || [];
var links = document.querySelectorAll(".check-visited a");
for (let i = 0; i < links.length; i++) {
var that = links[i];
that.addEventListener("click", function (e) {
var clicked_url = this.href;
if (visited_links.indexOf(clicked_url) == -1) {
visited_links.push(clicked_url);
localStorage.setItem(
pwaName + "_Visited_Links",
JSON.stringify(visited_links)
);
}
});
if (visited_links.indexOf(that.href) !== -1) {
that.className += " visited-link";
}
}
}
check_visited_links();
}
//Footer Bar Activation
var footerBar = document.querySelectorAll(".footer-bar-5")[0];
if (footerBar) {
var footerBar_select = document.querySelectorAll(
"#footer-bar .active-nav"
)[0];
footerBar_select.insertAdjacentHTML("beforeend", "");
}
//Detect Ad Block
var adblockMessage = document.getElementById("adblock-message");
if (adblockMessage) {
var adblockEnabled = false;
document.body.innerHTML +=
'
' + get_qr_url + "
"; document.getElementsByClassName("generate-qr-result")[0].innerHTML = qr_img; qr_btn.innerHTML = "Generate New Button"; }); } } if (window.location.protocol === "file:") { var linksLocal = document.querySelectorAll("a"); linksLocal.forEach((el) => el.addEventListener("mouseover", (event) => { // console.log("You are seeing these errors because your file is on your local computer. For real life simulations please use a Live Server or a Local Server such as AMPPS or WAMPP or simulate a Live Preview using a Code Editor like http://brackets.io (it's 100% free) - PWA functions and AJAX Page Transitions will only work in these scenarios."); }) ); } //Search Page var searchField = document.querySelectorAll("[data-search]"); if (searchField.length) { var searchResults = document.querySelectorAll(".search-results"); var searchNoResults = document.querySelectorAll(".search-no-results"); var searchTotal = document.querySelectorAll(".search-results div")[0] .childElementCount; var searchTrending = document.querySelectorAll(".search-trending"); function searchFunction() { var searchStr = searchField[0].value; var searchVal = searchStr.toLowerCase(); if (searchVal != "") { searchResults[0].classList.remove("disabled-search-list"); var searchFilterItem = document.querySelectorAll("[data-filter-item]"); for (let i = 0; i < searchFilterItem.length; i++) { var searchData = searchFilterItem[i].getAttribute("data-filter-name"); if (searchData.includes(searchVal)) { searchFilterItem[i].classList.remove("disabled"); if (searchTrending.length) { searchTrending[0].classList.add("disabled"); } } else { searchFilterItem[i].classList.add("disabled"); if (searchTrending.length) { searchTrending[0].classList.remove("disabled"); } } var disabledResults = document .querySelectorAll(".search-results div")[0] .getElementsByClassName("disabled").length; if (disabledResults === searchTotal) { searchNoResults[0].classList.remove("disabled"); if (searchTrending.length) { searchTrending[0].classList.add("disabled"); } } else { searchNoResults[0].classList.add("disabled"); if (searchTrending.length) { searchTrending[0].classList.add("disabled"); } } } } if (searchVal === "") { searchResults[0].classList.add("disabled-search-list"); searchNoResults[0].classList.add("disabled"); if (searchTrending.length) { searchTrending[0].classList.remove("disabled"); } } } searchField[0].addEventListener("keyup", function () { searchFunction(); }); searchField[0].addEventListener("click", function () { searchFunction(); }); var searchClick = document.querySelectorAll(".search-trending a"); searchClick.forEach((el) => el.addEventListener("click", (event) => { var trendingResult = el .querySelectorAll("span")[0] .textContent.toLowerCase(); searchField[0].value = trendingResult; searchField[0].click(); }) ); } //Sharing function shareLinks() { var shareTitle = document.title; var shareText = document.title; var shareLink = window.location.href; if ( document.querySelectorAll( ".shareToFacebook, .shareToTwitter, .shareToLinkedIn" )[0] ) { document .querySelectorAll( ".shareToFacebook, .shareToTwitter, .shareToLinkedIn, .shareToWhatsApp, .shareToMail" ) .forEach((x) => { x.setAttribute("target", "_blank"); }); document .querySelectorAll(".shareToFacebook") .forEach((x) => x.setAttribute( "href", "https://www.facebook.com/sharer/sharer.php?u=" + shareLink ) ); document .querySelectorAll(".shareToTwitter") .forEach((x) => x.setAttribute( "href", "http://twitter.com/share?text=" + shareTitle + "%20" + shareLink ) ); document .querySelectorAll(".shareToPinterest") .forEach((x) => x.setAttribute( "href", "https://pinterest.com/pin/create/button/?url=" + shareLink ) ); document .querySelectorAll(".shareToWhatsApp") .forEach((x) => x.setAttribute("href", "whatsapp://send?text=" + shareLink) ); document .querySelectorAll(".shareToMail") .forEach((x) => x.setAttribute("href", "mailto:?body=" + shareLink)); document .querySelectorAll(".shareToLinkedIn") .forEach((x) => x.setAttribute( "href", "https://www.linkedin.com/shareArticle?mini=true&url=" + shareLink + "&title=" + shareTitle + "&summary=&source=" ) ); //Menu Share Web API if (navigator.canShare) { const shareData = { title: shareTitle, text: shareText, url: shareLink, }; var shareMenu = document.querySelectorAll( '[data-menu="menu-share"], [data-show-share]' ); if (shareMenu) { shareMenu.forEach((el) => { el.addEventListener("click", async () => { menu("menu-share", "hide", 0); try { await navigator.share(shareData); } catch (err) {} }); }); } } var copyLink = document.querySelectorAll(".shareToCopyLink")[0]; copyLink.addEventListener("click", function (e) { navigator.clipboard.writeText(shareLink); copyLink.querySelector(".not-copied").classList.add("disabled"); copyLink.querySelector(".copied").classList.remove("disabled"); setTimeout(function () { copyLink.querySelector(".not-copied").classList.remove("disabled"); copyLink.querySelector(".copied").classList.add("disabled"); }, 1000); }); } } //Contact Form var contactForm = document.querySelectorAll(".contact-form"); if (contactForm.length) { var form = document.getElementById("contactForm"); form.onsubmit = function (e) { // Stop the regular form submission e.preventDefault(); //Validate Fields var nameField = document.getElementById("contactNameField"); var mailField = document.getElementById("contactEmailField"); var textField = document.getElementById("contactMessageTextarea"); var validateMail = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/; if (nameField.value === "") { form.setAttribute("data-form", "invalid"); nameField.classList.add("border-red-dark"); document .getElementById("validator-name") .classList.remove("disabled"); } else { form.setAttribute("data-form", "valid"); document.getElementById("validator-name").classList.add("disabled"); nameField.classList.remove("border-red-dark"); } if (mailField.value === "") { form.setAttribute("data-form", "invalid"); mailField.classList.add("border-red-dark"); document .getElementById("validator-mail1") .classList.remove("disabled"); } else { document.getElementById("validator-mail1").classList.add("disabled"); if (!validateMail.test(mailField.value)) { form.setAttribute("data-form", "invalid"); mailField.classList.add("border-red-dark"); document .getElementById("validator-mail2") .classList.remove("disabled"); } else { form.setAttribute("data-form", "valid"); document .getElementById("validator-mail2") .classList.add("disabled"); mailField.classList.remove("border-red-dark"); } } if (textField.value === "") { form.setAttribute("data-form", "invalid"); textField.classList.add("border-red-dark"); document .getElementById("validator-text") .classList.remove("disabled"); } else { form.setAttribute("data-form", "valid"); document.getElementById("validator-text").classList.add("disabled"); textField.classList.remove("border-red-dark"); } if (form.getAttribute("data-form") === "valid") { document .querySelectorAll(".form-sent")[0] .classList.remove("disabled"); document .querySelectorAll(".contact-form")[0] .classList.add("disabled"); // Collect the form data while iterating over the inputs var data = {}; for (let i = 0, ii = form.length; i < ii; ++i) { let input = form[i]; if (input.name) { data[input.name] = input.value; } } // Construct an HTTP request var xhr = new XMLHttpRequest(); xhr.open(form.method, form.action, true); xhr.setRequestHeader("Accept", "application/json; charset=utf-8"); xhr.setRequestHeader( "Content-Type", "application/json; charset=UTF-8" ); // Send the collected data as JSON xhr.send(JSON.stringify(data)); // Callback function xhr.onloadend = function (response) { if (response.target.status === 200) { console.log("Form Submitted"); } }; } }; } //Collapse Flip Icon var collapseBtn = document.querySelectorAll( '[data-bs-toggle="collapse"]:not(.no-effect)' ); if (collapseBtn.length) { collapseBtn.forEach((el) => el.addEventListener("click", (e) => { if (el.querySelectorAll("i").length) { el.querySelector("i").classList.toggle("fa-rotate-180"); } }) ); } //Tabs var tabTrigger = document.querySelectorAll(".tab-controls a"); if (tabTrigger.length) { tabTrigger.forEach(function (e) { if (e.hasAttribute("data-active")) { var highlightColor = e.parentNode.getAttribute("data-highlight"); e.classList.add(highlightColor); e.classList.add("no-click"); } }); tabTrigger.forEach((el) => el.addEventListener("click", (e) => { var highlightColor = el.parentNode.getAttribute("data-highlight"); var tabParentGroup = el.parentNode.querySelectorAll("a"); tabParentGroup.forEach(function (e) { e.classList.remove(highlightColor); e.classList.remove("no-click"); }); el.classList.add(highlightColor); el.classList.add("no-click"); }) ); } //Extending Menu Functions function menu(menuName, menuFunction, menuTimeout) { setTimeout(function () { if (menuFunction === "show") { return ( document.getElementById(menuName).classList.add("menu-active"), document .querySelectorAll(".menu-hider")[0] .classList.add("menu-active") ); } else { return ( document.getElementById(menuName).classList.remove("menu-active"), document .querySelectorAll(".menu-hider")[0] .classList.remove("menu-active") ); } }, menuTimeout); } var autoActivate = document.querySelectorAll("[data-auto-activate]"); if (autoActivate.length) { var autoActivateData = autoActivate[0].getAttribute("data-auto-activate"); var autoActivateTime = autoActivateData * 1000; setTimeout(function () { autoActivate[0].classList.add("menu-active"); menuHider[0].classList.add("menu-active"); }, autoActivateTime); } //Copyright Year function copyright_year() { var copyrightYear = document.getElementById("copyright-year"); if (copyrightYear) { var dteNow = new Date(); const intYear = dteNow.getFullYear(); copyrightYear.textContent = intYear; } } //Check Age var checkAge = document.querySelectorAll(".check-age"); if (checkAge.length) { checkAge[0].addEventListener("click", function () { var dateBirthday = document.querySelectorAll("#date-birth-day")[0].value; var dateBirthMonth = document.querySelectorAll("#date-birth-month")[0].value; var dateBirthYear = document.querySelectorAll("#date-birth-year")[0].value; var age = 18; var mydate = new Date(); mydate.setFullYear(dateBirthYear, dateBirthMonth - 1, dateBirthday); var currdate = new Date(); var setDate = new Date(); setDate.setFullYear( mydate.getFullYear() + age, dateBirthMonth - 1, dateBirthday ); var menuAge = document.querySelectorAll("#menu-age"); var menuAgeFail = document.querySelectorAll("#menu-age-fail"); var menuAgeOkay = document.querySelectorAll("#menu-age-okay"); console.log(currdate); console.log(setDate); console.log(dateBirthMonth); if (currdate - setDate > 0) { console.log("above 18"); menuAge[0].classList.remove("menu-active"); menuAgeOkay[0].classList.add("menu-active"); } else { menuAge[0].classList.remove("menu-active"); menuAgeFail[0].classList.add("menu-active"); } return true; }); } feather.replace(); function featherIcons() { var featherIcon = document.querySelectorAll(".feather"); featherIcon.forEach((el) => { var strokeWidth = el.getAttribute("data-feather-line"); var featherSize = el.getAttribute("data-feather-size"); el.style.strokeWidth = strokeWidth; el.style.width = featherSize; el.style.height = featherSize; }); } featherIcons(); function shapeChanger() { var shapeCutLeft = document.getElementById("shape-cut-left"); var shapeCutRight = document.querySelectorAll("#shape-cut-right")[0]; var shapeCutRound = document.querySelectorAll("#shape-rounded")[0]; var headerCard = document.querySelectorAll(".header-card")[0]; var colorCard = document.querySelectorAll(".color-card")[0]; var footerCard = document.querySelectorAll(".footer-card")[0]; if (shapeCutLeft) { shapeCutLeft.addEventListener("click", function (e) { headerCard.classList.remove("shape-rounded", "shape-cut-right"); headerCard.classList.add("shape-cut-left"); footerCard.classList.remove("shape-rounded", "shape-cut-right"); footerCard.classList.add("shape-cut-left"); colorCard.classList.remove("shape-rounded", "shape-cut-right"); colorCard.classList.add("shape-cut-left"); }); shapeCutRight.addEventListener("click", function () { headerCard.classList.remove("shape-rounded", "shape-cut-left"); headerCard.classList.add("shape-cut-right"); footerCard.classList.remove("shape-rounded", "shape-cut-left"); footerCard.classList.add("shape-cut-right"); colorCard.classList.remove("shape-rounded", "shape-cut-left"); colorCard.classList.add("shape-cut-right"); }); shapeCutRound.addEventListener("click", function () { headerCard.classList.remove("shape-cut-left", "shape-cut-right"); headerCard.classList.add("shape-rounded"); footerCard.classList.remove("shape-cut-left", "shape-cut-right"); footerCard.classList.add("shape-rounded"); colorCard.classList.remove("shape-cut-left", "shape-cut-right"); colorCard.classList.add("shape-rounded"); }); } } //Calling Functions Required After External Menus are Loaded var dataMenuLoad = document.querySelectorAll("[data-menu-load]"); dataMenuLoad.forEach(function (e) { var menuLoad = e.getAttribute("data-menu-load"); fetch(menuLoad) .then((data) => data.text()) .then((html) => (e.innerHTML = html)) .then((data) => { setTimeout(function () { if (dataMenuLoad[dataMenuLoad.length - 1] === e) { menuFunction(); checkDarkMode(); activateMenus(); shareLinks(); highlightColors(); selectHighlight(); card_extender(); backUp(); shapeChanger(); copyright_year(); feather.replace(); featherIcons(); } }, 500); }); }); //Detecting Mobile OS let isMobile = { Android: function () { return navigator.userAgent.match(/Android/i); }, iOS: function () { return navigator.userAgent.match(/iPhone|iPad|iPod/i); }, any: function () { return isMobile.Android() || isMobile.iOS(); }, }; const androidDev = document.getElementsByClassName("show-android"); const iOSDev = document.getElementsByClassName("show-ios"); const noDev = document.getElementsByClassName("show-no-device"); if (!isMobile.any()) { for (let i = 0; i < iOSDev.length; i++) { iOSDev[i].classList.add("disabled"); } for (let i = 0; i < androidDev.length; i++) { androidDev[i].classList.add("disabled"); } } if (isMobile.iOS()) { document.querySelectorAll("#page")[0].classList.add("device-is-ios"); for (let i = 0; i < noDev.length; i++) { noDev[i].classList.add("disabled"); } for (let i = 0; i < androidDev.length; i++) { androidDev[i].classList.add("disabled"); } } if (isMobile.Android()) { document.querySelectorAll("#page")[0].classList.add("device-is-android"); for (let i = 0; i < iOSDev.length; i++) { iOSDev[i].classList.add("disabled"); } for (let i = 0; i < noDev.length; i++) { noDev[i].classList.add("disabled"); } } //Creating Offline Alert Messages var addOfflineClasses = document.querySelectorAll(".offline-message"); if (!addOfflineClasses.length) { const offlineAlert = document.createElement("p"); const onlineAlert = document.createElement("p"); offlineAlert.className = "offline-message bg-red-dark color-white"; offlineAlert.textContent = "No internet connection detected"; onlineAlert.className = "online-message bg-green-dark color-white"; onlineAlert.textContent = "You are back online"; document.getElementsByTagName("body")[0].appendChild(offlineAlert); document.getElementsByTagName("body")[0].appendChild(onlineAlert); } //Online / Offline Settings //Activating and Deactivating Links Based on Online / Offline State function offlinePage() { //Enable the code below to disable offline mode. //var anchorsDisabled = document.querySelectorAll('a'); //anchorsDisabled.forEach(function(e){ // var hrefs = e.getAttribute('href'); // if(hrefs.match(/.html/)){e.classList.add('show-offline'); e.setAttribute('data-link',hrefs); e.setAttribute('href','#');} //}); var showOffline = document.querySelectorAll(".show-offline"); showOffline.forEach((el) => el.addEventListener("click", (event) => { document .getElementsByClassName("offline-message")[0] .classList.add("offline-message-active"); setTimeout(function () { document .getElementsByClassName("offline-message")[0] .classList.remove("offline-message-active"); }, 1500); }) ); } function onlinePage() { var anchorsEnabled = document.querySelectorAll("[data-link]"); anchorsEnabled.forEach(function (e) { var hrefs = e.getAttribute("data-link"); if (hrefs.match(/.html/)) { e.setAttribute("href", hrefs); e.removeAttribute("data-link", ""); } }); } //Defining Offline/Online Variables var offlineMessage = document.getElementsByClassName("offline-message")[0]; var onlineMessage = document.getElementsByClassName("online-message")[0]; //Online / Offine Status function isOnline() { onlinePage(); onlineMessage.classList.add("online-message-active"); setTimeout(function () { onlineMessage.classList.remove("online-message-active"); }, 2000); console.info("Connection: Online"); } function isOffline() { offlinePage(); offlineMessage.classList.add("offline-message-active"); setTimeout(function () { offlineMessage.classList.remove("offline-message-active"); }, 2000); console.info("Connection: Offline"); } var simulateOffline = document.querySelectorAll(".simulate-offline"); var simulateOnline = document.querySelectorAll(".simulate-online"); if (simulateOffline.length) { simulateOffline[0].addEventListener("click", function () { isOffline(); }); simulateOnline[0].addEventListener("click", function () { isOnline(); }); } //Check if Online / Offline function updateOnlineStatus(event) { var condition = navigator.onLine ? "online" : "offline"; isOnline(); } function updateOfflineStatus(event) { isOffline(); } window.addEventListener("online", updateOnlineStatus); window.addEventListener("offline", updateOfflineStatus); //iOS Badge const iOSBadge = document.querySelectorAll(".simulate-iphone-badge"); iOSBadge.forEach((el) => el.addEventListener("click", (e) => { document .getElementsByClassName("add-to-home")[0] .classList.add("add-to-home-visible", "add-to-home-ios"); document .getElementsByClassName("add-to-home")[0] .classList.remove("add-to-home-android"); }) ); //Android Badge const AndroidBadge = document.querySelectorAll(".simulate-android-badge"); AndroidBadge.forEach((el) => el.addEventListener("click", (e) => { document .getElementsByClassName("add-to-home")[0] .classList.add("add-to-home-visible", "add-to-home-android"); document .getElementsByClassName("add-to-home")[0] .classList.remove("add-to-home-ios"); }) ); //Remove Add to Home Badge const addToHomeBadgeClose = document.querySelectorAll(".add-to-home"); addToHomeBadgeClose.forEach((el) => el.addEventListener("click", (e) => { document .getElementsByClassName("add-to-home")[0] .classList.remove("add-to-home-visible"); }) ); //PWA Settings if (isPWA === true) { var checkPWA = document.getElementsByTagName("html")[0]; if (!checkPWA.classList.contains("isPWA")) { if ("serviceWorker" in navigator) { window.addEventListener("load", function () { navigator.serviceWorker .register(pwaLocation, { scope: pwaScope }) .then(function (registration) { registration.update(); }); }); } //Setting Timeout Before Prompt Shows Again if Dismissed var hours = pwaRemind * 24; // Reset when storage is more than 24hours var now = Date.now(); var setupTime = localStorage.getItem(pwaName + "-PWA-Timeout-Value"); if (setupTime == null) { localStorage.setItem(pwaName + "-PWA-Timeout-Value", now); } else if (now - setupTime > hours * 60 * 60 * 1000) { localStorage.removeItem(pwaName + "-PWA-Prompt"); localStorage.setItem(pwaName + "-PWA-Timeout-Value", now); } const pwaClose = document.querySelectorAll(".pwa-dismiss"); pwaClose.forEach((el) => el.addEventListener("click", (e) => { const pwaWindows = document.querySelectorAll( "#menu-install-pwa-android, #menu-install-pwa-ios" ); for (let i = 0; i < pwaWindows.length; i++) { pwaWindows[i].classList.remove("menu-active"); } localStorage.setItem(pwaName + "-PWA-Timeout-Value", now); localStorage.setItem(pwaName + "-PWA-Prompt", "install-rejected"); console.log( "PWA Install Rejected. Will Show Again in " + pwaRemind + " Days" ); }) ); //Trigger Install Prompt for Android const pwaWindows = document.querySelectorAll( "#menu-install-pwa-android, #menu-install-pwa-ios" ); if (pwaWindows.length) { if (isMobile.Android()) { if ( localStorage.getItem(pwaName + "-PWA-Prompt") != "install-rejected" ) { function showInstallPrompt() { setTimeout(function () { if ( !window.matchMedia("(display-mode: fullscreen)").matches ) { console.log("Triggering PWA Window for Android"); document .getElementById("menu-install-pwa-android") .classList.add("menu-active"); document .querySelectorAll(".menu-hider")[0] .classList.add("menu-active"); } }, 3500); } var deferredPrompt; window.addEventListener("beforeinstallprompt", (e) => { e.preventDefault(); deferredPrompt = e; showInstallPrompt(); }); } const pwaInstall = document.querySelectorAll(".pwa-install"); pwaInstall.forEach((el) => el.addEventListener("click", (e) => { deferredPrompt.prompt(); deferredPrompt.userChoice.then((choiceResult) => { if (choiceResult.outcome === "accepted") { console.log("Added"); } else { localStorage.setItem(pwaName + "-PWA-Timeout-Value", now); localStorage.setItem( pwaName + "-PWA-Prompt", "install-rejected" ); setTimeout(function () { if ( !window.matchMedia("(display-mode: fullscreen)").matches ) { document .getElementById("menu-install-pwa-android") .classList.remove("menu-active"); document .querySelectorAll(".menu-hider")[0] .classList.remove("menu-active"); } }, 50); } deferredPrompt = null; }); }) ); window.addEventListener("appinstalled", (evt) => { document .getElementById("menu-install-pwa-android") .classList.remove("menu-active"); document .querySelectorAll(".menu-hider")[0] .classList.remove("menu-active"); }); } //Trigger Install Guide iOS if (isMobile.iOS()) { if ( localStorage.getItem(pwaName + "-PWA-Prompt") != "install-rejected" ) { setTimeout(function () { if (!window.matchMedia("(display-mode: fullscreen)").matches) { console.log("Triggering PWA Window for iOS"); document .getElementById("menu-install-pwa-ios") .classList.add("menu-active"); document .querySelectorAll(".menu-hider")[0] .classList.add("menu-active"); } }, 3500); } } } } checkPWA.setAttribute("class", "isPWA"); } //End of isPWA if (pwaNoCache === true) { caches.delete("workbox-runtime").then(function () {}); sessionStorage.clear(); caches.keys().then((cacheNames) => { cacheNames.forEach((cacheName) => { caches.delete(cacheName); }); }); } //Lazy Loading var lazyLoad = new LazyLoad(); // Check Documentation folder for detailed explanations on // Externally loading Javascript files for better performance. var plugIdent, plugClass, plugMain, plugCall; var plugLoc = "plugins/"; let plugins = [ { id: "uniqueID", // to detect if loaded and unload if needed plug: "pluginName/plugin.js", // the main plugin javascript file call: "pluginName/pluginName-call.js", // the plugin call functions style: "pluginName/pluginName-style.css", // the plugin stylesheet trigger: ".pluginTriggerClass", // the trigger that will activate the loading and initializing of the plugin }, { id: "chart", plug: "charts/charts.js", call: "charts/charts-call-charts.js", trigger: ".chart", }, { id: "chart", plug: "charts/charts.js", call: "charts/charts-call-wallet.js", trigger: ".wallet-chart", }, { id: "chart", plug: "charts/charts.js", call: "charts/charts-call-dashboard.js", trigger: ".dashboard-chart", }, { id: "graph", plug: "charts/charts.js", call: "charts/charts-call-graphs.js", trigger: ".graph", }, { id: "count", plug: "countdown/countdown.js", trigger: ".countdown", }, { id: "gallery", plug: "glightbox/glightbox.js", call: "glightbox/glightbox-call.js", style: "glightbox/glightbox.css", trigger: "[data-gallery]", }, { id: "gallery-views", plug: "galleryViews/gallery-views.js", trigger: ".gallery-view-controls", }, { id: "filter", plug: "filterizr/filterizr.js", call: "filterizr/filterizr-call.js", style: "filterizr/filterizr.css", trigger: ".gallery-filter", }, { id: "embedly", plug: "embedly/embedly.js", trigger: ".embedly-card", }, ]; for (let i = 0; i < plugins.length; i++) { //Remove Previous Calls if (document.querySelectorAll("." + plugins[i].id + "-c").length) { document.querySelectorAll("." + plugins[i].id + "-c")[0].remove(); } //Load Plugins var plugTrigger = document.querySelectorAll(plugins[i].trigger); if (plugTrigger.length) { var loadScript = document.getElementsByTagName("script")[1], loadScriptJS = document.createElement("script"); loadScriptJS.type = "text/javascript"; loadScriptJS.className = plugins[i].id + "-p"; loadScriptJS.src = plugLoc + plugins[i].plug; loadScriptJS.addEventListener("load", function () { //Once plugin is loaded, load the call. if (plugins[i].call !== undefined) { var callFn = document.getElementsByTagName("script")[2], callJS = document.createElement("script"); callJS.type = "text/javascript"; callJS.className = plugins[i].id + "-c"; callJS.src = plugLoc + plugins[i].call; callFn.parentNode.insertBefore(callJS, callFn); } }); //If plugin doesn't exist, load it if (!document.querySelectorAll("." + plugins[i].id + "-p").length) { loadScript.parentNode.insertBefore(loadScriptJS, loadScript); } else { //If plugin doesn't exist, only load the call function setTimeout(function () { var loadScript = document.getElementsByTagName("script")[1], loadScriptJS = document.createElement("script"); loadScriptJS.type = "text/javascript"; loadScriptJS.className = plugins[i].id + "-c"; loadScriptJS.src = plugLoc + plugins[i].call; loadScript.parentNode.insertBefore(loadScriptJS, loadScript); }, 50); } //If Style doesn't exist in array, don't do anything if (plugins[i].style !== undefined) { //if style already exists, don't re-add to page. if (!document.querySelectorAll("." + plugins[i].id + "-s").length) { var loadCSS = document.createElement("link"); loadCSS.className = plugins[i].id + "-s"; loadCSS.rel = "stylesheet"; loadCSS.type = "text/css"; loadCSS.href = plugLoc + plugins[i].style; document.getElementsByTagName("head")[0].appendChild(loadCSS); } } } } } //Fix Scroll for AJAX pages. if ("scrollRestoration" in window.history) window.history.scrollRestoration = "manual"; //End of Init Template if (isAJAX === true) { if (window.location.protocol !== "file:") { const options = { containers: ["#page"], cache: false, animateHistoryBrowsing: false, plugins: [new SwupPreloadPlugin()], linkSelector: 'a:not(.external-link):not(.default-link):not([href^="https"]):not([href^="http"]):not([data-gallery])', }; const swup = new Swup(options); document.addEventListener("swup:pageView", (e) => { init_template(); }); } } init_template(); });