//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 += '
'; var adElement = document.getElementById("ad-detector"); var adElementStyle = getComputedStyle(adElement, null); if (adElementStyle.display === "none") { document.getElementById("adblock-message").classList.remove("disabled"); } } //Ads //Scroll Ads var scrollItems = document.querySelectorAll( ".scroll-ad, .header-auto-show" ); if (scrollItems.length) { var scrollAd = document.querySelectorAll(".scroll-ad"); var scrollHeader = document.querySelectorAll(".header-auto-show"); var pageTitle = document.querySelectorAll(".page-title"); window.addEventListener("scroll", function () { if (document.querySelectorAll(".scroll-ad, .header-auto-show").length) { function showScrollAd() { scrollAd[0].classList.add("scroll-ad-visible"); } function hideScrollAd() { scrollAd[0].classList.remove("scroll-ad-visible"); } function showHeader() { scrollHeader[0].classList.add("header-active"); } function hideHeader() { scrollHeader[0].classList.remove("header-active"); } var window_height = window.outerWidth; var total_scroll_height = document.documentElement.scrollTop; let inside_header = total_scroll_height <= 80; var passed_header = total_scroll_height >= 80; let inside_footer = window_height - total_scroll_height + 500 <= 150; if (scrollAd.length) { inside_header ? hideScrollAd() : null; passed_header ? showScrollAd() : null; inside_footer ? hideScrollAd() : null; } if (scrollHeader.length) { inside_header ? hideHeader() : null; passed_header ? showHeader() : null; } } }); } //Stepper var stepperAdd = document.querySelectorAll(".stepper-add"); var stepperSub = document.querySelectorAll(".stepper-sub"); if (stepperAdd.length) { stepperAdd.forEach((el) => el.addEventListener("click", (event) => { var currentValue = el.parentElement.querySelector("input").value; el.parentElement.querySelector("input").value = +currentValue + 1; }) ); stepperSub.forEach((el) => el.addEventListener("click", (event) => { var currentValue = el.parentElement.querySelector("input").value; el.parentElement.querySelector("input").value = +currentValue - 1; }) ); } //Link List Toggle var linkListToggle = document.querySelectorAll( "[data-trigger-switch]:not([data-toggle-theme])" ); if (linkListToggle.length) { linkListToggle.forEach((el) => el.addEventListener("click", (event) => { var switchData = el.getAttribute("data-trigger-switch"); var getCheck = document.getElementById(switchData); getCheck.checked ? (getCheck.checked = false) : (getCheck.checked = true); }) ); } //Classic Toggle var classicToggle = document.querySelectorAll(".classic-toggle"); if (classicToggle.length) { classicToggle.forEach((el) => el.addEventListener("click", (event) => { el.querySelector("i:last-child").classList.toggle("fa-rotate-180"); el.querySelector("i:last-child").style.transition = "all 250ms ease"; }) ); } //Toasts var toastTrigger = document.querySelectorAll("[data-toast]"); if (toastTrigger.length) { toastTrigger.forEach((el) => el.addEventListener("click", (event) => { var toastData = el.getAttribute("data-toast"); var notificationToast = document.getElementById(toastData); var notificationToast = new bootstrap.Toast(notificationToast); notificationToast.show(); }) ); } //Tooltips /*Deprecated feature for Mobiles. Requires popper.min.js v2 to work var tooltips = document.querySelectorAll('[data-bs-tooltip]'); if(tooltips.length){ var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')) var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) { return new bootstrap.Tooltip(tooltipTriggerEl) }) } */ //Dropdown var dropdownElementList = [].slice.call( document.querySelectorAll('[data-bs-toggle="dropdown"]') ); if (dropdownElementList.length) { var dropdownList = dropdownElementList.map(function (dropdownToggleEl) { return new bootstrap.Dropdown(dropdownToggleEl); }); } var workingHours = document.querySelectorAll( ".show-business-opened, .show-business-closed, .working-hours" ); if (workingHours.length) { //Working Hours var d = new Date(); var n = d.getDay(); var now = d.getHours() + "." + d.getMinutes(); var weekdays = [ ["Sunday"], ["Monday", 9.0, 17.0], ["Tuesday", 9.0, 17.0], ["Wednesday", 9.0, 17.0], ["Thursday", 9.0, 17.0], ["Friday", 9.0, 17.0], ["Saturday", 9.0, 13.0], // we are closed, sorry! ]; var day = weekdays[n]; var openClass = document.querySelectorAll(".show-business-opened"); var closeClass = document.querySelectorAll(".show-business-closed"); if ((now > day[1] && now < day[2]) || (now > day[3] && now < day[4])) { openClass.forEach(function (e) { e.classList.remove("disabled"); }); closeClass.forEach(function (e) { e.classList.add("disabled"); }); } else { openClass.forEach(function (e) { e.classList.add("disabled"); }); closeClass.forEach(function (e) { e.classList.remove("disabled"); }); } var workingHours = document.querySelectorAll(".working-hours[data-day]"); workingHours.forEach(function (entry) { var matchDay = entry.getAttribute("data-day"); if (matchDay === day[0]) { var matchData = '[data-day="' + day[0] + '"]'; if ( (now > day[1] && now < day[2]) || (now > day[3] && now < day[4]) ) { document .querySelectorAll(matchData)[0] .classList.add("bg-green-dark"); document .querySelectorAll(matchData + " p") .forEach(function (whiteText) { whiteText.classList.add("color-white"); }); } else { document .querySelectorAll(matchData)[0] .classList.add("bg-red-dark"); document .querySelectorAll(matchData + " p") .forEach(function (whiteText) { whiteText.classList.add("color-white"); }); } } }); } //Vibrate API var vibrateButton = document.querySelectorAll("[data-vibrate]"); if (vibrateButton.length) { var startVibrating = document.getElementsByClassName("start-vibrating")[0]; var stopVibrating = document.getElementsByClassName("stop-vibrating")[0]; startVibrating.addEventListener("click", function () { var vibrateTime = document.getElementsByClassName("vibrate-demo")[0].value; window.navigator.vibrate(vibrateTime); }); stopVibrating.addEventListener("click", function () { window.navigator.vibrate(0); }); vibrateButton.forEach((el) => el.addEventListener("click", (e) => { var vibrateTime = el.getAttribute("data-vibrate"); window.navigator.vibrate(vibrateTime); }) ); } //Time Ads var timedAd = document.querySelectorAll("[data-timed-ad]"); if (timedAd.length) { timedAd.forEach((el) => el.addEventListener("click", (e) => { var timedAdTime = el.getAttribute("data-timed-ad"); var timedAdData = el.getAttribute("data-menu"); var timedAdTimer = timedAdTime; var timerAdFunction = setInterval(function () { if (timedAdTimer <= 1) { clearInterval(timerAdFunction); document .getElementById(timedAdData) .querySelectorAll(".fa-times")[0] .classList.remove("disabled"); document .getElementById(timedAdData) .querySelectorAll(".close-menu")[0] .classList.remove("no-click"); document .getElementById(timedAdData) .querySelectorAll("span")[0].style.display = "none"; } else { //console.log(timedAdTimer); } document .getElementById(timedAdData) .querySelectorAll("span")[0].innerHTML = timedAdTimer -= 1; }, 1000); }) ); } //Auto Show Ads var autoAd = document.querySelectorAll("[data-auto-show-ad]"); if (autoAd.length) { var autoAdTime = autoAd[0].getAttribute("data-auto-show-ad"); var timerAdFunction = setInterval(function () { if (autoAdTime <= 1) { clearInterval(timerAdFunction); var autoAdId = autoAd[0].getAttribute("data-menu"); document.getElementById(autoAdId).classList.add("menu-active"); var autoAdCloseTime = autoAd[0].getAttribute("data-timed-ad"); var downloadTimer = setInterval(function () { if (autoAdCloseTime <= 0) { clearInterval(downloadTimer); document .getElementById(autoAdId) .querySelectorAll(".fa-times")[0] .classList.remove("disabled"); document .getElementById(autoAdId) .querySelectorAll(".close-menu")[0] .classList.remove("no-click"); document .getElementById(autoAdId) .querySelectorAll("span")[0].style.display = "none"; } document .getElementById(autoAdId) .querySelectorAll("span")[0].innerHTML = autoAdCloseTime -= 1; }, 1000); } autoAdTime -= 1; }, 1000); } //Visit Detection var visitDetection = document.querySelectorAll(".visit-detection")[0]; if (visitDetection) { var neverVisited = document.querySelectorAll(".never-visited")[0]; var beforeVisited = document.querySelectorAll(".before-visited")[0]; var visitBeforeTime = document.querySelectorAll(".visit-before-time")[0]; var lastVisitValue = localStorage.getItem(pwaName + "-Last-Visited"); var d = new Date(); var strDate = d.getFullYear() + "/" + (d.getMonth() + 1) + "/" + d.getDate(); var strTime = d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds(); if (!lastVisitValue) { neverVisited.style.display = "block"; beforeVisited.style.display = "none"; localStorage.setItem( pwaName + "-Last-Visited", "Your last visit was " + strDate + " at " + strTime ); } else { neverVisited.style.display = "none"; beforeVisited.style.display = "block"; visitBeforeTime.append(lastVisitValue); localStorage.setItem( pwaName + "-Last-Visited", "Your last visit was " + strDate + " at " + strTime ); } } //Reading Time var readingTextDiv = document.querySelectorAll("#reading-progress-text"); if (readingTextDiv.length) { var readingWords = readingTextDiv[0].innerHTML.split(" ").length; var readingMinutes = Math.floor(readingWords / 250); var readingSeconds = readingWords % 60; document.getElementsByClassName("reading-progress-words")[0].innerHTML = readingWords; document.getElementsByClassName("reading-progress-time")[0].innerHTML = readingMinutes + ":" + readingSeconds; } //Text Resizer var textSizeChanger = document.querySelectorAll(".text-size-changer"); if (textSizeChanger.length) { var textSizeIncrease = document.querySelectorAll(".text-size-increase"); var textSizeDecrease = document.querySelectorAll(".text-size-decrease"); var textSizeDefault = document.querySelectorAll(".text-size-default"); textSizeIncrease[0].addEventListener("click", function () { textSizeChanger[0].querySelectorAll("*").forEach(function (element) { const getFontSize = window .getComputedStyle(element) .fontSize.split("px", 2)[0]; element.style.fontSize = +getFontSize + 1 + "px"; }); }); textSizeDecrease[0].addEventListener("click", function () { textSizeChanger[0].querySelectorAll("*").forEach(function (element) { const getFontSize = window .getComputedStyle(element) .fontSize.split("px", 2)[0]; element.style.fontSize = +getFontSize - 1 + "px"; }); }); textSizeDefault[0].addEventListener("click", function () { textSizeChanger[0].querySelectorAll("*").forEach(function (element) { const getFontSize = window .getComputedStyle(element) .fontSize.split("px", 2)[0]; element.style.fontSize = ""; }); }); } //QR Generator var qr_image = document.querySelectorAll(".qr-image"); if (qr_image.length) { var qr_this = window.location.href; var qr_auto = document.getElementsByClassName("generate-qr-auto")[0]; var qr_api_address = "https://api.qrserver.com/v1/create-qr-code/?size=200x200&data="; if (qr_auto) { qr_auto.setAttribute("src", qr_api_address + qr_this); } var qr_btn = document.getElementsByClassName("generate-qr-button")[0]; if (qr_btn) { qr_btn.addEventListener("click", function () { var get_qr_url = document.getElementsByClassName("qr-url")[0].value; var qr_api_address = "https://api.qrserver.com/v1/create-qr-code/?size=200x200&data="; var qr_img = 'img

' + 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(); });