Niraj Tolia 5e0fe9561c
Corso website template + build framework (#723)
## Description

This PR imports a Tailwind-based website template and adds a
build hardness for it.

Please check the type of change your PR introduces:
- [x] 🌻 Feature

## Test Plan

- [x] 💪 Manual
2022-09-02 00:03:10 +00:00

253 lines
7.2 KiB
JavaScript

/* Template Name: Techwind - Multipurpose Tailwind CSS Landing Page Template
Author: Shreethemes
Email: support@shreethemes.in
Website: https://shreethemes.in
Version: 1.4.0
Created: May 2022
File Description: Main JS file of the template
*/
/*********************************/
/* INDEX */
/*================================
* 01. Loader *
* 02. Toggle Menus *
* 03. Active Menu *
* 04. Clickable Menu *
* 05. Back to top *
* 06. Feather icon *
* 06. DD Menu *
* 06. Active Sidebar Menu *
* 07. Contact us *
* 08. Wow Animation JS *
================================*/
window.addEventListener('load', fn, false)
// window.onload = function loader() {
function fn() {
// Preloader
if (document.getElementById('preloader')) {
setTimeout(() => {
document.getElementById('preloader').style.visibility = 'hidden';
document.getElementById('preloader').style.opacity = '0';
}, 350);
}
// Menus
activateMenu();
}
//Menu
/*********************/
/* Toggle Menu */
/*********************/
function toggleMenu() {
document.getElementById('isToggle').classList.toggle('open');
var isOpen = document.getElementById('navigation')
if (isOpen.style.display === "block") {
isOpen.style.display = "none";
} else {
isOpen.style.display = "block";
}
};
/*********************/
/* Menu Active */
/*********************/
function getClosest(elem, selector) {
// Element.matches() polyfill
if (!Element.prototype.matches) {
Element.prototype.matches =
Element.prototype.matchesSelector ||
Element.prototype.mozMatchesSelector ||
Element.prototype.msMatchesSelector ||
Element.prototype.oMatchesSelector ||
Element.prototype.webkitMatchesSelector ||
function (s) {
var matches = (this.document || this.ownerDocument).querySelectorAll(s),
i = matches.length;
while (--i >= 0 && matches.item(i) !== this) {}
return i > -1;
};
}
// Get the closest matching element
for (; elem && elem !== document; elem = elem.parentNode) {
if (elem.matches(selector)) return elem;
}
return null;
};
function activateMenu() {
var menuItems = document.getElementsByClassName("sub-menu-item");
if (menuItems) {
var matchingMenuItem = null;
for (var idx = 0; idx < menuItems.length; idx++) {
if (menuItems[idx].href === window.location.href) {
matchingMenuItem = menuItems[idx];
}
}
if (matchingMenuItem) {
matchingMenuItem.classList.add('active');
var immediateParent = getClosest(matchingMenuItem, 'li');
if (immediateParent) {
immediateParent.classList.add('active');
}
var parent = getClosest(matchingMenuItem, '.parent-menu-item');
if (parent) {
parent.classList.add('active');
var parentMenuitem = parent.querySelector('.menu-item');
if (parentMenuitem) {
parentMenuitem.classList.add('active');
}
var parentOfParent = getClosest(parent, '.parent-parent-menu-item');
if (parentOfParent) {
parentOfParent.classList.add('active');
}
} else {
var parentOfParent = getClosest(matchingMenuItem, '.parent-parent-menu-item');
if (parentOfParent) {
parentOfParent.classList.add('active');
}
}
}
}
}
/*********************/
/* Clickable manu */
/*********************/
if (document.getElementById("navigation")) {
var elements = document.getElementById("navigation").getElementsByTagName("a");
for (var i = 0, len = elements.length; i < len; i++) {
elements[i].onclick = function (elem) {
if (elem.target.getAttribute("href") === "javascript:void(0)") {
var submenu = elem.target.nextElementSibling.nextElementSibling;
submenu.classList.toggle('open');
}
}
}
}
/*********************/
/* Menu Sticky */
/*********************/
function windowScroll() {
const navbar = document.getElementById("topnav");
if (navbar != null) {
if (
document.body.scrollTop >= 50 ||
document.documentElement.scrollTop >= 50
) {
navbar.classList.add("nav-sticky");
} else {
navbar.classList.remove("nav-sticky");
}
}
}
window.addEventListener('scroll', (ev) => {
ev.preventDefault();
windowScroll();
})
/*********************/
/* Back To TOp */
/*********************/
window.onscroll = function () {
scrollFunction();
};
function scrollFunction() {
var mybutton = document.getElementById("back-to-top");
if(mybutton!=null){
if (document.body.scrollTop > 500 || document.documentElement.scrollTop > 500) {
mybutton.classList.add("block");
mybutton.classList.remove("hidden");
} else {
mybutton.classList.add("hidden");
mybutton.classList.remove("block");
}
}
}
function topFunction() {
document.body.scrollTop = 0;
document.documentElement.scrollTop = 0;
}
/*********************/
/* Active Sidebar */
/*********************/
(function () {
var current = location.pathname.substring(location.pathname.lastIndexOf('/') + 1);;
if (current === "") return;
var menuItems = document.querySelectorAll('.sidebar-nav a');
for (var i = 0, len = menuItems.length; i < len; i++) {
if (menuItems[i].getAttribute("href").indexOf(current) !== -1) {
menuItems[i].parentElement.className += " active";
}
}
})();
/*********************/
/* Feather Icons */
/*********************/
feather.replace();
/*********************/
/* DD Menu */
/*********************/
var ddmenu = document.getElementsByClassName("dd-menu");
for (var i = 0, len = ddmenu.length; i < len; i++) {
ddmenu[i].onclick = function (elem) {
elem.stopPropagation();
}
}
/*********************/
/* Small Menu */
/*********************/
try {
var spy = new Gumshoe('#navmenu-nav a');
} catch (err) {
}
/*********************/
/* Dark & Light Mode */
/*********************/
try {
function changeTheme(e){
e.preventDefault()
const htmlTag = document.getElementsByTagName("html")[0]
if (htmlTag.className.includes("dark")) {
htmlTag.className = 'light'
} else {
htmlTag.className = 'dark'
}
}
const switcher = document.getElementById("theme-mode")
switcher?.addEventListener("click" ,changeTheme )
const chk = document.getElementById('chk');
chk.addEventListener('change',changeTheme);
} catch (err) {
}
/*********************/
/* WoW Js */
/*********************/
try {
new WOW().init();
} catch (error) {
}