//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 = "/";
var pwaLocation = "/_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');
document.getElementById(menuData).classList.add('menu-active');
document.getElementsByClassName('menu-hider')[0].classList.add('menu-active');
//Check and Apply Effects
var menu = document.getElementById(menuData);
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');
document.querySelectorAll('#'+selectedMenu)[0].classList.add('nav-item-active');
if(document.querySelectorAll('#'+selectedMenu)[0].parentNode.getAttribute('class') === "submenu"){
var subId = '#' + document.querySelectorAll('#'+selectedMenu)[0].parentNode.getAttribute('id')
var subData = document.querySelectorAll('#'+selectedMenu)[0].parentNode.getAttribute('id')
var subSize = document.querySelectorAll(subId)[0].children.length;
var subHeight = document.querySelectorAll(subId)[0].offsetHeight;
document.querySelectorAll(subId)[0].style.transition = "all 250ms";
document.querySelectorAll(subId)[0].style.height = (subSize*50)+26+'px';
document.querySelectorAll('[data-submenu="'+subData+'"]')[0].classList.add('nav-item-active')
}
}
document.querySelectorAll('[data-submenu]').forEach(function(e){
var subID = e.getAttribute('data-submenu');
var subChildren = document.getElementById(subID).children.length;
var subtest = e.querySelectorAll('strong')[0];
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(); });