first commit
This commit is contained in:
702
public/assets/js/active.js
Normal file
702
public/assets/js/active.js
Normal file
@@ -0,0 +1,702 @@
|
||||
"use strict";
|
||||
|
||||
/* ---------------------
|
||||
[Master JavaScript]
|
||||
Template Name: Softora - IT Solutions & Technology HTML Template
|
||||
Version: 1.0.0
|
||||
Author: Nano Theme
|
||||
--------------------- */
|
||||
|
||||
/* ---------------------
|
||||
[Table of Contents]
|
||||
|
||||
1. Core Features
|
||||
1.1.0 Sticky Header (sticky-header)
|
||||
1.2.0 Mobile Dropdown Menu (mobile-menu)
|
||||
1.3.0 Anchor Prevent Default (anchor-prevent)
|
||||
1.4.0 Search Form (search-form)
|
||||
2. Sliders & Carousels
|
||||
2.1.0 Service Swiper Slide (service-slide)
|
||||
2.2.0 Service Swiper Slide Two (service-slide-two)
|
||||
2.3.0 Project Swiper Slide (portfolio-swiper)
|
||||
2.4.0 Project Two Swiper Slide (portfolio-two-swiper)
|
||||
2.5.0 Testimonial Swiper Slide (testimonial-swiper)
|
||||
2.6.0 Testimonial Swiper Slide Two (testimonial-swiper-two)
|
||||
2.7.0 Testimonial Swiper Slide Three (testimonial-swiper-three)
|
||||
2.8.0 Team Swiper Slide (team-swiper)
|
||||
3. UI Enhancements
|
||||
3.1.0 Counter Up (counter-up)
|
||||
3.2.0 Scroll to Top (scroll-top)
|
||||
3.3.0 Video Popup
|
||||
3.4.0 Isotope
|
||||
3.5.0 Rotating Image
|
||||
3.6.0 Progress Bar
|
||||
3.7.0 Pricing Plan Switching
|
||||
3.8.0 Copyright Year
|
||||
3.9.0 WOW Activation
|
||||
3.10.0 Tooltip Activation
|
||||
3.11.0 Toast Activation
|
||||
3.12.0 Popover Activation
|
||||
3.13.0 Preloader
|
||||
--------------------- */
|
||||
|
||||
// 1.1 Sticky Header
|
||||
|
||||
const navarToggler = document.querySelector('.navbar-toggler');
|
||||
const header = document.querySelector('.header-area');
|
||||
|
||||
if (navarToggler) {
|
||||
navarToggler.addEventListener('click', () => {
|
||||
header.classList.toggle('mobile-menu-open');
|
||||
});
|
||||
}
|
||||
|
||||
/*
|
||||
if (header) {
|
||||
function stickyNavigation() {
|
||||
if (window.pageYOffset > 10) {
|
||||
header.classList.add('sticky-on');
|
||||
} else {
|
||||
header.classList.remove('sticky-on');
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener('load', stickyNavigation);
|
||||
window.addEventListener('scroll', stickyNavigation);
|
||||
}
|
||||
*/
|
||||
|
||||
// 1.2 Mobile Dropdown Menu
|
||||
|
||||
/*
|
||||
function mobileDropdownMenu() {
|
||||
const sbdropdown = document.querySelectorAll('.softora-dd');
|
||||
if (sbdropdown.length > 0) {
|
||||
const navUrl = document.querySelectorAll('.navbar-nav li ul');
|
||||
navUrl.forEach(url => {
|
||||
url.insertAdjacentHTML('beforebegin', '<div class="dropdown-toggler"><i class="bi bi-caret-down-fill"></i></div>');
|
||||
});
|
||||
|
||||
const ddtrogglers = document.querySelectorAll('.dropdown-toggler');
|
||||
ddtrogglers.forEach(ddtoggler => {
|
||||
ddtoggler.addEventListener('click', () => {
|
||||
const ddNext = ddtoggler.nextElementSibling;
|
||||
slideToggle(ddNext, 300);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
window.addEventListener('load', mobileDropdownMenu);
|
||||
*/
|
||||
|
||||
// 1.3 Anchor Prevent Default
|
||||
|
||||
const anchors = document.querySelectorAll('a[href="#"]');
|
||||
anchors.forEach(anchor => {
|
||||
anchor.addEventListener('click', e => e.preventDefault());
|
||||
});
|
||||
|
||||
// 1.4 Search Form
|
||||
|
||||
const searchButton = document.getElementById('searchButton');
|
||||
const searchClose = document.getElementById('searchClose');
|
||||
const searchFormPopup = document.querySelector('.search-form-popup');
|
||||
const searchOverlay = document.getElementById('searchOverlay');
|
||||
|
||||
if (searchButton) {
|
||||
searchButton.addEventListener('click', () => {
|
||||
searchFormPopup.classList.add('open');
|
||||
searchOverlay.classList.add('open');
|
||||
});
|
||||
searchClose.addEventListener('click', () => {
|
||||
searchFormPopup.classList.remove('open');
|
||||
searchOverlay.classList.remove('open');
|
||||
});
|
||||
}
|
||||
|
||||
// 2.1.0 Service Swiper Slide
|
||||
|
||||
const serviceSwiper = document.querySelector('.service-swiper-slider');
|
||||
|
||||
if (serviceSwiper) {
|
||||
// Check if Swiper is defined
|
||||
if (typeof Swiper !== 'undefined') {
|
||||
new Swiper('.service-swiper-slider', {
|
||||
loop: true,
|
||||
slidesPerView: 3,
|
||||
spaceBetween: 30,
|
||||
autoplay: {
|
||||
delay: 5000,
|
||||
disableOnInteraction: false,
|
||||
},
|
||||
pagination: {
|
||||
el: ".service-pagination",
|
||||
clickable: true,
|
||||
},
|
||||
breakpoints: {
|
||||
320: {
|
||||
slidesPerView: 1,
|
||||
spaceBetween: 0,
|
||||
},
|
||||
768: {
|
||||
slidesPerView: 2,
|
||||
spaceBetween: 20,
|
||||
},
|
||||
1200: {
|
||||
slidesPerView: 3,
|
||||
spaceBetween: 30,
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 2.2.0 Service Swiper Slide Two
|
||||
|
||||
const serviceSwiperTwo = document.querySelector('.service-swiper-slider-two');
|
||||
|
||||
if (serviceSwiperTwo) {
|
||||
if (typeof Swiper !== 'undefined') {
|
||||
new Swiper('.service-swiper-slider-two', {
|
||||
loop: true,
|
||||
slidesPerView: 6,
|
||||
spaceBetween: 30,
|
||||
centeredSlides: true,
|
||||
autoplay: {
|
||||
delay: 5000,
|
||||
disableOnInteraction: false,
|
||||
},
|
||||
pagination: {
|
||||
el: ".service-pagination-two",
|
||||
clickable: true,
|
||||
},
|
||||
breakpoints: {
|
||||
320: {
|
||||
slidesPerView: 1,
|
||||
spaceBetween: 10,
|
||||
},
|
||||
480: {
|
||||
slidesPerView: 1.5,
|
||||
spaceBetween: 20,
|
||||
},
|
||||
576: {
|
||||
slidesPerView: 2,
|
||||
spaceBetween: 20,
|
||||
},
|
||||
768: {
|
||||
slidesPerView: 2.5,
|
||||
spaceBetween: 20,
|
||||
},
|
||||
992: {
|
||||
slidesPerView: 3,
|
||||
spaceBetween: 20,
|
||||
},
|
||||
1200: {
|
||||
slidesPerView: 4,
|
||||
spaceBetween: 30,
|
||||
},
|
||||
1400: {
|
||||
slidesPerView: 5,
|
||||
spaceBetween: 30,
|
||||
},
|
||||
1800: {
|
||||
slidesPerView: 6,
|
||||
spaceBetween: 30,
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 2.3.0 Project Swiper Slide
|
||||
|
||||
const projectSwiper = document.querySelector('.project-swiper');
|
||||
|
||||
if (projectSwiper) {
|
||||
if (typeof Swiper !== 'undefined') {
|
||||
new Swiper('.project-swiper', {
|
||||
loop: true,
|
||||
slidesPerView: 4,
|
||||
spaceBetween: 30,
|
||||
navigation: {
|
||||
nextEl: '.project-button-next',
|
||||
prevEl: '.project-button-prev',
|
||||
},
|
||||
autoplay: {
|
||||
delay: 5000,
|
||||
disableOnInteraction: false,
|
||||
},
|
||||
breakpoints: {
|
||||
320: {
|
||||
slidesPerView: 1,
|
||||
spaceBetween: 10,
|
||||
},
|
||||
480: {
|
||||
slidesPerView: 1,
|
||||
spaceBetween: 20,
|
||||
},
|
||||
576: {
|
||||
slidesPerView: 2,
|
||||
spaceBetween: 20,
|
||||
},
|
||||
768: {
|
||||
slidesPerView: 3,
|
||||
spaceBetween: 20,
|
||||
},
|
||||
1200: {
|
||||
slidesPerView: 4,
|
||||
spaceBetween: 30,
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 2.4.0 Project Two Swiper Slide
|
||||
|
||||
const swiperInstances = [];
|
||||
const projectTwoSwipers = document.querySelectorAll('.project-two-swiper');
|
||||
|
||||
if (projectTwoSwipers.length > 0) {
|
||||
if (typeof Swiper !== 'undefined') {
|
||||
projectTwoSwipers.forEach((swiperEl, index) => {
|
||||
const projectSwiper = new Swiper(swiperEl, {
|
||||
loop: true,
|
||||
slidesPerView: 'auto',
|
||||
spaceBetween: 30,
|
||||
pagination: {
|
||||
el: swiperEl.querySelector('.project-two-pagination'),
|
||||
clickable: true,
|
||||
},
|
||||
grabCursor: true,
|
||||
watchSlidesProgress: true,
|
||||
});
|
||||
|
||||
swiperInstances.push(projectSwiper);
|
||||
|
||||
swiperEl.querySelectorAll('.project-two-card').forEach(slide => {
|
||||
slide.addEventListener('click', () => {
|
||||
swiperEl.querySelectorAll('.project-two-card').forEach(s => {
|
||||
s.classList.remove('slide-expand');
|
||||
});
|
||||
slide.classList.add('slide-expand');
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const tabSwipers = document.querySelectorAll('[data-bs-toggle="tab"]');
|
||||
|
||||
if (tabSwipers.length > 0) {
|
||||
tabSwipers.forEach(tabBtn => {
|
||||
tabBtn.addEventListener('shown.bs.tab', (e) => {
|
||||
const targetTab = document.querySelector(e.target.getAttribute('data-bs-target'));
|
||||
const targetSwiperEl = targetTab.querySelector('.project-two-swiper');
|
||||
|
||||
if (targetSwiperEl) {
|
||||
const swiperIndex = Array.from(document.querySelectorAll('.project-two-swiper')).indexOf(targetSwiperEl);
|
||||
const projectSwiper = swiperInstances[swiperIndex];
|
||||
|
||||
setTimeout(() => {
|
||||
projectSwiper.update();
|
||||
}, 100);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// 2.5.0 Testimonial Swiper Slide
|
||||
|
||||
const testimonialSwiper = document.querySelector('.testimonial-swiper');
|
||||
|
||||
if (testimonialSwiper) {
|
||||
if (typeof Swiper !== 'undefined') {
|
||||
new Swiper('.testimonial-swiper', {
|
||||
loop: true,
|
||||
spaceBetween: 0,
|
||||
slidesPerView: 1,
|
||||
autoplay: {
|
||||
delay: 5000,
|
||||
disableOnInteraction: false,
|
||||
},
|
||||
pagination: {
|
||||
el: ".testimonial-pagination",
|
||||
clickable: true,
|
||||
},
|
||||
navigation: {
|
||||
nextEl: '.testimonial-button-next',
|
||||
prevEl: '.testimonial-button-prev',
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 2.6.0 Testimonial Swiper Slide Two
|
||||
|
||||
const testimonialSwiperTwo = document.querySelector('.testimonial-swiper-two');
|
||||
|
||||
if (testimonialSwiperTwo) {
|
||||
if (typeof Swiper !== 'undefined') {
|
||||
new Swiper('.testimonial-swiper-two', {
|
||||
loop: true,
|
||||
spaceBetween: 30,
|
||||
slidesPerView: 3,
|
||||
centeredSlides: true,
|
||||
autoplay: {
|
||||
delay: 5000,
|
||||
disableOnInteraction: false,
|
||||
},
|
||||
pagination: {
|
||||
el: ".testimonial-swiper-two-pagination",
|
||||
clickable: true,
|
||||
},
|
||||
breakpoints: {
|
||||
320: {
|
||||
slidesPerView: 1,
|
||||
spaceBetween: 10,
|
||||
},
|
||||
480: {
|
||||
slidesPerView: 1,
|
||||
spaceBetween: 20,
|
||||
},
|
||||
768: {
|
||||
slidesPerView: 2,
|
||||
spaceBetween: 20,
|
||||
},
|
||||
1200: {
|
||||
slidesPerView: 3,
|
||||
spaceBetween: 30,
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 2.7.0 Team Swiper Slide
|
||||
|
||||
const teamSwiper = document.querySelector('.team-swiper');
|
||||
|
||||
if (teamSwiper) {
|
||||
if (typeof Swiper !== 'undefined') {
|
||||
new Swiper('.team-swiper', {
|
||||
loop: true,
|
||||
spaceBetween: 30,
|
||||
slidesPerView: 4,
|
||||
autoplay: {
|
||||
delay: 5000,
|
||||
disableOnInteraction: false,
|
||||
},
|
||||
navigation: {
|
||||
nextEl: '.team-button-next',
|
||||
prevEl: '.team-button-prev',
|
||||
},
|
||||
breakpoints: {
|
||||
320: {
|
||||
slidesPerView: 1.5,
|
||||
spaceBetween: 10,
|
||||
},
|
||||
480: {
|
||||
slidesPerView: 2,
|
||||
spaceBetween: 20,
|
||||
},
|
||||
576: {
|
||||
slidesPerView: 2.5,
|
||||
spaceBetween: 20,
|
||||
},
|
||||
768: {
|
||||
slidesPerView: 3,
|
||||
spaceBetween: 20,
|
||||
},
|
||||
992: {
|
||||
slidesPerView: 4,
|
||||
spaceBetween: 20,
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 3.1.0 Counter Up
|
||||
|
||||
const counterElements = document.querySelectorAll('.counter');
|
||||
|
||||
if (counterElements.length > 0) {
|
||||
if (window.counterUp) {
|
||||
const counterUp = window.counterUp.default;
|
||||
|
||||
const callback = (entries) => {
|
||||
entries.forEach(entry => {
|
||||
const counterElement = entry.target;
|
||||
if (entry.isIntersecting && !counterElement.classList.contains('is-visible')) {
|
||||
counterUp(counterElement, {
|
||||
duration: 2000,
|
||||
delay: 20
|
||||
});
|
||||
counterElement.classList.add('is-visible');
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
const IO = new IntersectionObserver(callback, {
|
||||
threshold: 1
|
||||
});
|
||||
counterElements.forEach(element => IO.observe(element));
|
||||
}
|
||||
}
|
||||
|
||||
// 3.2.0 Scroll to Top
|
||||
|
||||
const scrollButton = document.getElementById('scrollTopButton');
|
||||
const topDistance = 600;
|
||||
|
||||
if (scrollButton) {
|
||||
window.addEventListener('scroll', () => {
|
||||
if (document.body.scrollTop > topDistance || document.documentElement.scrollTop > topDistance) {
|
||||
scrollButton.classList.add('scrolltop-show');
|
||||
scrollButton.classList.remove('scrolltop-hide');
|
||||
} else {
|
||||
scrollButton.classList.add('scrolltop-hide');
|
||||
scrollButton.classList.remove('scrolltop-show');
|
||||
}
|
||||
});
|
||||
|
||||
scrollButton.addEventListener('click', () => {
|
||||
window.scrollTo({
|
||||
top: 0,
|
||||
left: 0,
|
||||
behavior: 'smooth'
|
||||
});
|
||||
});
|
||||
|
||||
function updateScrollProgress() {
|
||||
const scrollY = window.scrollY;
|
||||
const windowHeight = window.innerHeight;
|
||||
const documentHeight = document.documentElement.scrollHeight;
|
||||
const scrollPercent = (scrollY / (documentHeight - windowHeight)) * 100;
|
||||
scrollButton.style.setProperty('--scroll-progress', `${scrollPercent}%`);
|
||||
}
|
||||
|
||||
window.addEventListener('scroll', updateScrollProgress);
|
||||
}
|
||||
|
||||
// 3.3.0 Video Popup
|
||||
|
||||
const videoPopup = document.getElementById("videoPopup");
|
||||
const videoFrame = document.getElementById("videoFrame");
|
||||
const closeBtn = document.getElementById("videoCloseButton");
|
||||
const videoBtns = document.querySelectorAll(".video-btn");
|
||||
|
||||
if (closeBtn && videoBtns.length > 0) {
|
||||
videoBtns.forEach(button => {
|
||||
button.addEventListener("click", function () {
|
||||
let videoUrl = this.getAttribute("data-video");
|
||||
|
||||
if (videoUrl) {
|
||||
let separator = videoUrl.includes("?") ? "&" : "?";
|
||||
|
||||
if (videoUrl.includes("youtu.be")) {
|
||||
let videoId = videoUrl.split("/").pop();
|
||||
videoUrl = `https://www.youtube.com/embed/${videoId}`;
|
||||
}
|
||||
|
||||
if (videoUrl.includes("youtube.com/watch")) {
|
||||
let videoId = new URL(videoUrl).searchParams.get("v");
|
||||
videoUrl = `https://www.youtube.com/embed/${videoId}`;
|
||||
}
|
||||
|
||||
if (videoUrl.includes("youtube.com") || videoUrl.includes("vimeo.com")) {
|
||||
videoUrl += `${separator}autoplay=1`;
|
||||
}
|
||||
|
||||
videoFrame.src = videoUrl;
|
||||
videoFrame.setAttribute("allow", "autoplay; encrypted-media");
|
||||
videoPopup.style.display = "flex";
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
closeBtn.addEventListener("click", () => {
|
||||
videoPopup.style.display = "none";
|
||||
videoFrame.src = "";
|
||||
});
|
||||
|
||||
window.addEventListener("click", (event) => {
|
||||
if (event.target === videoPopup) {
|
||||
videoPopup.style.display = "none";
|
||||
videoFrame.src = "";
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 3.4.0 Isotope
|
||||
|
||||
const grids = document.querySelectorAll('.softora-filter');
|
||||
|
||||
if (grids.length > 0) {
|
||||
if (typeof Isotope !== 'undefined' && typeof imagesLoaded !== 'undefined') {
|
||||
grids.forEach(grid => {
|
||||
imagesLoaded(grid, () => {
|
||||
const iso = new Isotope(grid, {
|
||||
itemSelector: '.filter-item',
|
||||
percentPosition: true,
|
||||
layoutMode: 'masonry',
|
||||
masonry: {
|
||||
columnWidth: '.filter-item'
|
||||
}
|
||||
});
|
||||
|
||||
const filtersElem = grid.closest('.softora-container').querySelector('.softora-filter-nav');
|
||||
|
||||
if (filtersElem) {
|
||||
filtersElem.addEventListener('click', (event) => {
|
||||
if (!event.target.matches('button')) return;
|
||||
const filterValue = event.target.getAttribute('data-filter');
|
||||
iso.arrange({
|
||||
filter: filterValue
|
||||
});
|
||||
});
|
||||
|
||||
const radioButtonGroup = (buttonGroup) => {
|
||||
buttonGroup.addEventListener('click', (event) => {
|
||||
if (!event.target.matches('button')) return;
|
||||
buttonGroup.querySelector('.active').classList.remove('active');
|
||||
event.target.classList.add('active');
|
||||
});
|
||||
};
|
||||
|
||||
radioButtonGroup(filtersElem);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 3.5.0 Rotating Image
|
||||
|
||||
const rotatingImages = document.querySelectorAll('.rotatingImage');
|
||||
|
||||
if (rotatingImages.length > 0) {
|
||||
window.addEventListener('scroll', () => {
|
||||
const scrollTop = window.pageYOffset || document.documentElement.scrollTop;
|
||||
const rotateValue = scrollTop % 360;
|
||||
rotatingImages.forEach(image => {
|
||||
image.style.transform = `rotate(${rotateValue}deg)`;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// 3.6.0 Progress Bar
|
||||
|
||||
const progressBars = document.querySelectorAll('.progress-bar');
|
||||
|
||||
if (progressBars.length > 0) {
|
||||
progressBars.forEach(function (progressBar) {
|
||||
const value = parseInt(progressBar.getAttribute('data-value'), 10); // Added radix
|
||||
|
||||
progressBar.style.width = value + '%';
|
||||
const spanElements = progressBar.closest('.progress-item').querySelectorAll('.progress-info span');
|
||||
if (spanElements.length > 1) {
|
||||
const percentSpan = spanElements[1];
|
||||
percentSpan.textContent = value + '%';
|
||||
percentSpan.style.marginRight = (100 - value) + '%';
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 3.7.0 Pricing Plan Switching
|
||||
|
||||
const switchButtons = document.querySelectorAll(".pricing-plan-switching .btn");
|
||||
const priceCards = document.querySelectorAll(".price-table-one");
|
||||
|
||||
if (switchButtons.length > 0 && priceCards.length > 0) {
|
||||
switchButtons.forEach(btn => {
|
||||
btn.addEventListener("click", () => {
|
||||
switchButtons.forEach(b => b.classList.remove("active"));
|
||||
btn.classList.add("active");
|
||||
|
||||
const isYearly = btn.textContent.trim().toLowerCase() === "yearly";
|
||||
|
||||
priceCards.forEach(card => {
|
||||
const priceDisplay = card.querySelector(".price-display");
|
||||
const priceAmountEl = card.querySelector(".price-amount");
|
||||
const priceTypeEl = card.querySelector(".price-type");
|
||||
priceDisplay.classList.add("fade-out");
|
||||
|
||||
setTimeout(() => {
|
||||
const newPrice = isYearly ? card.dataset.yearly : card.dataset.monthly;
|
||||
const newLabel = isYearly ? "/Year" : "/Month";
|
||||
priceAmountEl.textContent = `$${newPrice}`;
|
||||
priceTypeEl.textContent = newLabel;
|
||||
priceDisplay.classList.remove("fade-out");
|
||||
priceDisplay.classList.add("fade-in");
|
||||
setTimeout(() => {
|
||||
priceDisplay.classList.remove("fade-in");
|
||||
}, 400);
|
||||
}, 300);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// 3.8.0 Copyright Year
|
||||
|
||||
const year = document.getElementById("year");
|
||||
if (year) {
|
||||
const currentYear = new Date().getFullYear();
|
||||
year.textContent = currentYear;
|
||||
}
|
||||
|
||||
// 3.9.0 WOW Activation
|
||||
|
||||
const wowjs = document.querySelectorAll('.wow').length;
|
||||
|
||||
if (wowjs > 0) {
|
||||
if (typeof WOW !== 'undefined') {
|
||||
new WOW().init();
|
||||
}
|
||||
}
|
||||
|
||||
// 3.10 Tooltip Activation
|
||||
|
||||
if (typeof bootstrap !== 'undefined') {
|
||||
let softoraTooltip = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
|
||||
let tooltipList = softoraTooltip.map(function (sbTooltip) {
|
||||
return new bootstrap.Tooltip(sbTooltip);
|
||||
});
|
||||
|
||||
// 3.11 Toast Activation
|
||||
|
||||
let softoraToast = [].slice.call(document.querySelectorAll('.toast'));
|
||||
let toastList = softoraToast.map(function (sbToast) {
|
||||
return new bootstrap.Toast(sbToast);
|
||||
});
|
||||
toastList.forEach(toast => toast.show());
|
||||
|
||||
// 3.12 Popover Activation
|
||||
|
||||
let softoraPopover = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))
|
||||
let popoverList = softoraPopover.map(function (sbPopover) {
|
||||
return new bootstrap.Popover(sbPopover);
|
||||
});
|
||||
}
|
||||
|
||||
// 3.13 Preloader
|
||||
|
||||
const preloader = document.getElementById('preloader');
|
||||
|
||||
if (preloader) {
|
||||
window.addEventListener('load', function () {
|
||||
let fadeOut = setInterval(function () {
|
||||
if (!preloader.style.opacity) {
|
||||
preloader.style.opacity = 1;
|
||||
}
|
||||
if (preloader.style.opacity > 0) {
|
||||
preloader.style.opacity -= 0.1;
|
||||
} else {
|
||||
clearInterval(fadeOut);
|
||||
preloader.remove();
|
||||
}
|
||||
}, 100);
|
||||
});
|
||||
}
|
||||
7
public/assets/js/bootstrap.bundle.min.js
vendored
Normal file
7
public/assets/js/bootstrap.bundle.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
35
public/assets/js/cookiealert.js
Normal file
35
public/assets/js/cookiealert.js
Normal file
@@ -0,0 +1,35 @@
|
||||
(function () {
|
||||
"use strict";
|
||||
var cookieAlert = document.querySelector(".cookiealert");
|
||||
var acceptButton = document.querySelector(".acceptcookies");
|
||||
|
||||
function getCookie(name) {
|
||||
var value = "; " + document.cookie;
|
||||
var parts = value.split("; " + name + "=");
|
||||
if (parts.length === 2) return parts.pop().split(";").shift();
|
||||
return "";
|
||||
}
|
||||
|
||||
function setCookie(name, value, days) {
|
||||
var expires = "";
|
||||
if (days) {
|
||||
var date = new Date();
|
||||
date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
|
||||
expires = "; expires=" + date.toUTCString();
|
||||
}
|
||||
document.cookie = name + "=" + value + expires + "; path=/";
|
||||
}
|
||||
|
||||
if (cookieAlert) {
|
||||
if (!getCookie("acceptCookies")) {
|
||||
cookieAlert.classList.add("show"); // Show alert if no cookie is set
|
||||
} else {
|
||||
cookieAlert.classList.remove("show"); // Hide if cookie exists
|
||||
}
|
||||
|
||||
acceptButton?.addEventListener("click", function () {
|
||||
setCookie("acceptCookies", "true", 365);
|
||||
cookieAlert.classList.remove("show"); // Hide alert on accept
|
||||
});
|
||||
}
|
||||
})();
|
||||
12
public/assets/js/imagesloaded.pkgd.min.js
vendored
Normal file
12
public/assets/js/imagesloaded.pkgd.min.js
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
/*!
|
||||
* imagesLoaded PACKAGED v5.0.0
|
||||
* JavaScript is all like "You images are done yet or what?"
|
||||
* MIT License
|
||||
*/
|
||||
!function(t,e){"object"==typeof module&&module.exports?module.exports=e():t.EvEmitter=e()}("undefined"!=typeof window?window:this,(function(){function t(){}let e=t.prototype;return e.on=function(t,e){if(!t||!e)return this;let i=this._events=this._events||{},s=i[t]=i[t]||[];return s.includes(e)||s.push(e),this},e.once=function(t,e){if(!t||!e)return this;this.on(t,e);let i=this._onceEvents=this._onceEvents||{};return(i[t]=i[t]||{})[e]=!0,this},e.off=function(t,e){let i=this._events&&this._events[t];if(!i||!i.length)return this;let s=i.indexOf(e);return-1!=s&&i.splice(s,1),this},e.emitEvent=function(t,e){let i=this._events&&this._events[t];if(!i||!i.length)return this;i=i.slice(0),e=e||[];let s=this._onceEvents&&this._onceEvents[t];for(let n of i){s&&s[n]&&(this.off(t,n),delete s[n]),n.apply(this,e)}return this},e.allOff=function(){return delete this._events,delete this._onceEvents,this},t})),
|
||||
/*!
|
||||
* imagesLoaded v5.0.0
|
||||
* JavaScript is all like "You images are done yet or what?"
|
||||
* MIT License
|
||||
*/
|
||||
function(t,e){"object"==typeof module&&module.exports?module.exports=e(t,require("ev-emitter")):t.imagesLoaded=e(t,t.EvEmitter)}("undefined"!=typeof window?window:this,(function(t,e){let i=t.jQuery,s=t.console;function n(t,e,o){if(!(this instanceof n))return new n(t,e,o);let r=t;var h;("string"==typeof t&&(r=document.querySelectorAll(t)),r)?(this.elements=(h=r,Array.isArray(h)?h:"object"==typeof h&&"number"==typeof h.length?[...h]:[h]),this.options={},"function"==typeof e?o=e:Object.assign(this.options,e),o&&this.on("always",o),this.getImages(),i&&(this.jqDeferred=new i.Deferred),setTimeout(this.check.bind(this))):s.error(`Bad element for imagesLoaded ${r||t}`)}n.prototype=Object.create(e.prototype),n.prototype.getImages=function(){this.images=[],this.elements.forEach(this.addElementImages,this)};const o=[1,9,11];n.prototype.addElementImages=function(t){"IMG"===t.nodeName&&this.addImage(t),!0===this.options.background&&this.addElementBackgroundImages(t);let{nodeType:e}=t;if(!e||!o.includes(e))return;let i=t.querySelectorAll("img");for(let t of i)this.addImage(t);if("string"==typeof this.options.background){let e=t.querySelectorAll(this.options.background);for(let t of e)this.addElementBackgroundImages(t)}};const r=/url\((['"])?(.*?)\1\)/gi;function h(t){this.img=t}function d(t,e){this.url=t,this.element=e,this.img=new Image}return n.prototype.addElementBackgroundImages=function(t){let e=getComputedStyle(t);if(!e)return;let i=r.exec(e.backgroundImage);for(;null!==i;){let s=i&&i[2];s&&this.addBackground(s,t),i=r.exec(e.backgroundImage)}},n.prototype.addImage=function(t){let e=new h(t);this.images.push(e)},n.prototype.addBackground=function(t,e){let i=new d(t,e);this.images.push(i)},n.prototype.check=function(){if(this.progressedCount=0,this.hasAnyBroken=!1,!this.images.length)return void this.complete();let t=(t,e,i)=>{setTimeout((()=>{this.progress(t,e,i)}))};this.images.forEach((function(e){e.once("progress",t),e.check()}))},n.prototype.progress=function(t,e,i){this.progressedCount++,this.hasAnyBroken=this.hasAnyBroken||!t.isLoaded,this.emitEvent("progress",[this,t,e]),this.jqDeferred&&this.jqDeferred.notify&&this.jqDeferred.notify(this,t),this.progressedCount===this.images.length&&this.complete(),this.options.debug&&s&&s.log(`progress: ${i}`,t,e)},n.prototype.complete=function(){let t=this.hasAnyBroken?"fail":"done";if(this.isComplete=!0,this.emitEvent(t,[this]),this.emitEvent("always",[this]),this.jqDeferred){let t=this.hasAnyBroken?"reject":"resolve";this.jqDeferred[t](this)}},h.prototype=Object.create(e.prototype),h.prototype.check=function(){this.getIsImageComplete()?this.confirm(0!==this.img.naturalWidth,"naturalWidth"):(this.proxyImage=new Image,this.img.crossOrigin&&(this.proxyImage.crossOrigin=this.img.crossOrigin),this.proxyImage.addEventListener("load",this),this.proxyImage.addEventListener("error",this),this.img.addEventListener("load",this),this.img.addEventListener("error",this),this.proxyImage.src=this.img.currentSrc||this.img.src)},h.prototype.getIsImageComplete=function(){return this.img.complete&&this.img.naturalWidth},h.prototype.confirm=function(t,e){this.isLoaded=t;let{parentNode:i}=this.img,s="PICTURE"===i.nodeName?i:this.img;this.emitEvent("progress",[this,s,e])},h.prototype.handleEvent=function(t){let e="on"+t.type;this[e]&&this[e](t)},h.prototype.onload=function(){this.confirm(!0,"onload"),this.unbindEvents()},h.prototype.onerror=function(){this.confirm(!1,"onerror"),this.unbindEvents()},h.prototype.unbindEvents=function(){this.proxyImage.removeEventListener("load",this),this.proxyImage.removeEventListener("error",this),this.img.removeEventListener("load",this),this.img.removeEventListener("error",this)},d.prototype=Object.create(h.prototype),d.prototype.check=function(){this.img.addEventListener("load",this),this.img.addEventListener("error",this),this.img.src=this.url,this.getIsImageComplete()&&(this.confirm(0!==this.img.naturalWidth,"naturalWidth"),this.unbindEvents())},d.prototype.unbindEvents=function(){this.img.removeEventListener("load",this),this.img.removeEventListener("error",this)},d.prototype.confirm=function(t,e){this.isLoaded=t,this.emitEvent("progress",[this,this.element,e])},n.makeJQueryPlugin=function(e){(e=e||t.jQuery)&&(i=e,i.fn.imagesLoaded=function(t,e){return new n(this,t,e).jqDeferred.promise(i(this))})},n.makeJQueryPlugin(),n}));
|
||||
1
public/assets/js/index.js
Normal file
1
public/assets/js/index.js
Normal file
@@ -0,0 +1 @@
|
||||
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.counterUp=t():e.counterUp=t()}(self,(function(){return(()=>{"use strict";var e={d:(t,n)=>{for(var o in n)e.o(n,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:n[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{default:()=>n,divideNumbers:()=>r});const n=(e,t={})=>{const{action:n="start",duration:i=1e3,delay:u=16}=t;if("stop"===n)return void o(e);if(o(e),!/[0-9]/.test(e.innerHTML))return;const l=r(e.innerHTML,{duration:i||e.getAttribute("data-duration"),delay:u||e.getAttribute("data-delay")});e._countUpOrigInnerHTML=e.innerHTML,e.innerHTML=l[0]||" ",e.style.visibility="visible";const c=function(){e.innerHTML=l.shift()||" ",l.length?(clearTimeout(e.countUpTimeout),e.countUpTimeout=setTimeout(c,u)):e._countUpOrigInnerHTML=void 0};e.countUpTimeout=setTimeout(c,u)},o=e=>{clearTimeout(e.countUpTimeout),e._countUpOrigInnerHTML&&(e.innerHTML=e._countUpOrigInnerHTML,e._countUpOrigInnerHTML=void 0),e.style.visibility=""},r=(e,t={})=>{const{duration:n=1e3,delay:o=16}=t,r=n/o,i=e.toString().split(/(<[^>]+>|[0-9.][,.0-9]*[0-9]*)/),u=[];for(let e=0;e<r;e++)u.push("");for(let e=0;e<i.length;e++)if(/([0-9.][,.0-9]*[0-9]*)/.test(i[e])&&!/<[^>]+>/.test(i[e])){let t=i[e];const n=[...t.matchAll(/[.,]/g)].map((e=>({char:e[0],i:t.length-e.index-1}))).sort(((e,t)=>e.i-t.i));t=t.replace(/[.,]/g,"");let o=u.length-1;for(let e=r;e>=1;e--){let i=parseInt(t/r*e,10);i=n.reduce(((e,{char:t,i:n})=>e.length<=n?e:e.slice(0,-n)+t+e.slice(-n)),i.toString()),u[o--]+=i}}else for(let t=0;t<r;t++)u[t]+=i[e];return u[u.length]=e.toString(),u};return t})()}));
|
||||
12
public/assets/js/isotope.pkgd.min.js
vendored
Normal file
12
public/assets/js/isotope.pkgd.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
6
public/assets/js/jarallax.min.js
vendored
Normal file
6
public/assets/js/jarallax.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2
public/assets/js/slideToggle.min.js
vendored
Normal file
2
public/assets/js/slideToggle.min.js
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/* plain JS slideToggle https://github.com/ericbutler555/plain-js-slidetoggle */
|
||||
function slideToggle(t,e,o){0===t.clientHeight?j(t,e,o,!0):j(t,e,o)}function slideUp(t,e,o){j(t,e,o)}function slideDown(t,e,o){j(t,e,o,!0)}function j(t,e,o,i){void 0===e&&(e=400),void 0===i&&(i=!1),t.style.overflow="hidden",i&&(t.style.display="block");var p,l=window.getComputedStyle(t),n=parseFloat(l.getPropertyValue("height")),a=parseFloat(l.getPropertyValue("padding-top")),s=parseFloat(l.getPropertyValue("padding-bottom")),r=parseFloat(l.getPropertyValue("margin-top")),d=parseFloat(l.getPropertyValue("margin-bottom")),g=n/e,y=a/e,m=s/e,u=r/e,h=d/e;window.requestAnimationFrame(function l(x){void 0===p&&(p=x);var f=x-p;i?(t.style.height=g*f+"px",t.style.paddingTop=y*f+"px",t.style.paddingBottom=m*f+"px",t.style.marginTop=u*f+"px",t.style.marginBottom=h*f+"px"):(t.style.height=n-g*f+"px",t.style.paddingTop=a-y*f+"px",t.style.paddingBottom=s-m*f+"px",t.style.marginTop=r-u*f+"px",t.style.marginBottom=d-h*f+"px"),f>=e?(t.style.height="",t.style.paddingTop="",t.style.paddingBottom="",t.style.marginTop="",t.style.marginBottom="",t.style.overflow="",i||(t.style.display="none"),"function"==typeof o&&o()):window.requestAnimationFrame(l)})}
|
||||
14
public/assets/js/swiper-bundle.min.js
vendored
Normal file
14
public/assets/js/swiper-bundle.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2
public/assets/js/wow.min.js
vendored
Normal file
2
public/assets/js/wow.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user