/* Template Name: Landrick - Saas & Software Landing Page Template Author: Shreethemes E-mail: support@shreethemes.in Created: August 2019 Version: 3.5.0 Updated: July 2021 File Description: Common JS file of the template(plugins.init.js) */ /*********************************/ /* INDEX */ /*================================ * 01. Tiny Slider * * 02. Swiper slider * * 03. Countdown Js * (For Comingsoon pages) * 04. Maintenance js * (For Maintenance page) * 05. Data Counter * * 06. Datepicker js * * 07. Gallery filter js * (For Portfolio pages) * 08. Tobii lightbox * (For Portfolio pages) * 09. CK Editor * (For Compose mail) * 10. Fade Animation * * 11. Typed Text animation (animation) * * 12. Validation Form * * 13. Switcher Pricing Plan * ================================*/ //=========================================// /* 01) Tiny slider */ //=========================================// if(document.getElementsByClassName('tiny-single-item').length > 0) { var slider = tns({ container: '.tiny-single-item', items: 1, controls: false, mouseDrag: true, loop: true, rewind: true, autoplay: true, autoplayButtonOutput: false, autoplayTimeout: 3000, navPosition: "bottom", speed: 400, gutter: 16, }); }; if(document.getElementsByClassName('tiny-two-item').length > 0) { var slider = tns({ container: '.tiny-two-item', controls: false, mouseDrag: true, loop: true, rewind: true, autoplay: true, autoplayButtonOutput: false, autoplayTimeout: 3000, navPosition: "bottom", speed: 400, gutter: 12, responsive: { 992: { items: 2 }, 767: { items: 2 }, 320: { items: 1 }, }, }); }; if(document.getElementsByClassName('tiny-three-item').length > 0) { var slider = tns({ container: '.tiny-three-item', controls: false, mouseDrag: true, loop: true, rewind: true, autoplay: true, autoplayButtonOutput: false, autoplayTimeout: 3000, navPosition: "bottom", speed: 400, gutter: 12, responsive: { 992: { items: 3 }, 767: { items: 2 }, 320: { items: 1 }, }, }); }; if(document.getElementsByClassName('tiny-four-item').length > 0) { var slider = tns({ container: '.tiny-four-item', controls: false, mouseDrag: true, loop: true, rewind: true, autoplay: true, autoplayButtonOutput: false, autoplayTimeout: 3000, navPosition: "bottom", speed: 400, gutter: 12, responsive: { 992: { items: 4 }, 767: { items: 2 }, 320: { items: 1 }, }, }); }; if(document.getElementsByClassName('roadmaps').length > 0) { var slider = tns({ container: '.roadmaps', controls: false, mouseDrag: true, loop: true, rewind: true, autoplay: true, autoplayButtonOutput: false, autoplayTimeout: 3000, nav: false, speed: 400, gutter: 12, responsive: { 992: { items: 4 }, 767: { items: 2 }, 320: { items: 1 }, }, }); }; if(document.getElementsByClassName('tiny-six-item').length > 0) { var slider = tns({ container: '.tiny-six-item', controls: false, mouseDrag: true, loop: true, rewind: true, autoplay: true, autoplayButtonOutput: false, autoplayTimeout: 3000, navPosition: "bottom", speed: 400, gutter: 12, responsive: { 992: { items: 6 }, 767: { items: 3 }, 320: { items: 1 }, }, }); }; if(document.getElementsByClassName('tiny-twelve-item').length > 0) { var slider = tns({ container: '.tiny-twelve-item', controls: true, mouseDrag: true, loop: true, rewind: true, autoplay: true, autoplayButtonOutput: false, autoplayTimeout: 3000, navPosition: "bottom", controlsText: ['', ''], nav: false, speed: 400, gutter: 0, responsive: { 1025: { items: 10 }, 992: { items: 8 }, 767: { items: 6 }, 320: { items: 2 }, }, }); }; //=========================================// /* 02) Swiper slider */ //=========================================// try { var menu = []; var interleaveOffset = 0.5; var swiperOptions = { loop: true, speed: 1000, parallax: true, autoplay: { delay: 6500, disableOnInteraction: false, }, watchSlidesProgress: true, pagination: { el: '.swiper-pagination', clickable: true, renderBullet: function (index, className) { return '' + 0 + (index + 1) + ''; }, }, navigation: { nextEl: '.swiper-button-next', prevEl: '.swiper-button-prev', }, on: { progress: function () { var swiper = this; for (var i = 0; i < swiper.slides.length; i++) { var slideProgress = swiper.slides[i].progress; var innerOffset = swiper.width * interleaveOffset; var innerTranslate = slideProgress * innerOffset; swiper.slides[i].querySelector(".slide-inner").style.transform = "translate3d(" + innerTranslate + "px, 0, 0)"; } }, touchStart: function () { var swiper = this; for (var i = 0; i < swiper.slides.length; i++) { swiper.slides[i].style.transition = ""; } }, setTransition: function (speed) { var swiper = this; for (var i = 0; i < swiper.slides.length; i++) { swiper.slides[i].style.transition = speed + "ms"; swiper.slides[i].querySelector(".slide-inner").style.transition = speed + "ms"; } } } }; // DATA BACKGROUND IMAGE var swiper = new Swiper(".swiper-container", swiperOptions); let data = document.querySelectorAll(".slide-bg-image") data.forEach((e) => { e.style.backgroundImage = `url(${e.getAttribute('data-background')})`; }) } catch (err) { } //=========================================// /*/* 03) Countdown js */ //=========================================// try { if(document.getElementById("days")){ // The data/time we want to countdown to var eventCountDown = new Date("December 25, 2022 16:37:52").getTime(); // Run myfunc every second var myfunc = setInterval(function () { var now = new Date().getTime(); var timeleft = eventCountDown - now; // Calculating the days, hours, minutes and seconds left var days = Math.floor(timeleft / (1000 * 60 * 60 * 24)); var hours = Math.floor((timeleft % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); var minutes = Math.floor((timeleft % (1000 * 60 * 60)) / (1000 * 60)); var seconds = Math.floor((timeleft % (1000 * 60)) / 1000); // Result is output to the specific element document.getElementById("days").innerHTML = days + "
Days
" document.getElementById("hours").innerHTML = hours + "Hours
" document.getElementById("mins").innerHTML = minutes + "Mins
" document.getElementById("secs").innerHTML = seconds + "Secs
" // Display the message when countdown is over if (timeleft < 0) { clearInterval(myfunc); document.getElementById("days").innerHTML = "" document.getElementById("hours").innerHTML = "" document.getElementById("mins").innerHTML = "" document.getElementById("secs").innerHTML = "" document.getElementById("end").innerHTML = "00:00:00:00"; } }, 1000); } } catch (err) { } //=========================================// /*/* 04) Maintenance js */ //=========================================// try { if(document.getElementById("maintenance")){ var seconds = 3599; function secondPassed() { var minutes = Math.round((seconds - 30) / 60); var remainingSeconds = seconds % 60; if (remainingSeconds < 10) { remainingSeconds = "0" + remainingSeconds; } document.getElementById('maintenance').innerHTML = minutes + ":" + remainingSeconds; if (seconds == 0) { clearInterval(countdownTimer); document.getElementById('maintenance').innerHTML = "Buzz Buzz"; } else { seconds--; } } var countdownTimer = setInterval('secondPassed()', 1000); } } catch (err) { } //=========================================// /*/* 05) Data Counter */ //=========================================// try { const counter = document.querySelectorAll('.counter-value'); const speed = 2500; // The lower the slower counter.forEach(counter_value => { const updateCount = () => { const target = +counter_value.getAttribute('data-target'); const count = +counter_value.innerText; // Lower inc to slow and higher to slow var inc = target / speed; if (inc < 1) { inc = 1; } // Check if target is reached if (count < target) { // Add inc to count and output in counter_value counter_value.innerText = (count + inc).toFixed(0); // Call function every ms setTimeout(updateCount, 1); } else { counter_value.innerText = target; } }; updateCount(); }); } catch (err) { } //=========================================// /*/* 06) Datepicker js*/ //=========================================// try { const start = datepicker('.start', { id: 1 }) const end = datepicker('.end', { id: 1 }) } catch (err) { } //=========================================// /*/* 07) Gallery filter js */ //=========================================// try { var Shuffle = window.Shuffle; class Demo { constructor(element) { if(element){ this.element = element; this.shuffle = new Shuffle(element, { itemSelector: '.picture-item', sizer: element.querySelector('.my-sizer-element'), }); // Log events. this.addShuffleEventListeners(); this._activeFilters = []; this.addFilterButtons(); } } /** * Shuffle uses the CustomEvent constructor to dispatch events. You can listen * for them like you normally would (with jQuery for example). */ addShuffleEventListeners() { this.shuffle.on(Shuffle.EventType.LAYOUT, (data) => { console.log('layout. data:', data); }); this.shuffle.on(Shuffle.EventType.REMOVED, (data) => { console.log('removed. data:', data); }); } addFilterButtons() { const options = document.querySelector('.filter-options'); if (!options) { return; } const filterButtons = Array.from(options.children); const onClick = this._handleFilterClick.bind(this); filterButtons.forEach((button) => { button.addEventListener('click', onClick, false); }); } _handleFilterClick(evt) { const btn = evt.currentTarget; const isActive = btn.classList.contains('active'); const btnGroup = btn.getAttribute('data-group'); this._removeActiveClassFromChildren(btn.parentNode); let filterGroup; if (isActive) { btn.classList.remove('active'); filterGroup = Shuffle.ALL_ITEMS; } else { btn.classList.add('active'); filterGroup = btnGroup; } this.shuffle.filter(filterGroup); } _removeActiveClassFromChildren(parent) { const { children } = parent; for (let i = children.length - 1; i >= 0; i--) { children[i].classList.remove('active'); } } } document.addEventListener('DOMContentLoaded', () => { window.demo = new Demo(document.getElementById('grid')); }); } catch (err) { } //=========================================// /*/* 08) Tobii lightbox */ //=========================================// try { const tobii = new Tobii() } catch (err) { } //=========================================// /*/* 09) CK Editor */ //=========================================// try { ClassicEditor .create(document.querySelector('#editor')) .catch(error => { console.error(error); }); } catch(err) { } //=========================================// /*/* 10) Fade Animation */ //=========================================// try { AOS.init({ easing: 'ease-in-out-sine', duration: 1000 }); } catch (err) { } //=========================================// /*/* 11) Typed Text animation (animation) */ //=========================================// try { var TxtType = function (el, toRotate, period) { this.toRotate = toRotate; this.el = el; this.loopNum = 0; this.period = parseInt(period, 10) || 2000; this.txt = ''; this.tick(); this.isDeleting = false; }; TxtType.prototype.tick = function () { var i = this.loopNum % this.toRotate.length; var fullTxt = this.toRotate[i]; if (this.isDeleting) { this.txt = fullTxt.substring(0, this.txt.length - 1); } else { this.txt = fullTxt.substring(0, this.txt.length + 1); } this.el.innerHTML = '' + this.txt + ''; var that = this; var delta = 200 - Math.random() * 100; if (this.isDeleting) { delta /= 2; } if (!this.isDeleting && this.txt === fullTxt) { delta = this.period; this.isDeleting = true; } else if (this.isDeleting && this.txt === '') { this.isDeleting = false; this.loopNum++; delta = 500; } setTimeout(function () { that.tick(); }, delta); }; function typewrite() { if (toRotate === 'undefined') { changeText() } else var elements = document.getElementsByClassName('typewrite'); for (var i = 0; i < elements.length; i++) { var toRotate = elements[i].getAttribute('data-type'); var period = elements[i].getAttribute('data-period'); if (toRotate) { new TxtType(elements[i], JSON.parse(toRotate), period); } } // INJECT CSS var css = document.createElement("style"); css.type = "text/css"; css.innerHTML = ".typewrite > .wrap { border-right: 0.08em solid transparent}"; document.body.appendChild(css); }; window.onload(typewrite()); } catch(err) { } //=========================================// /*/* 12) Validation Shop Checkouts */ //=========================================// (function () { 'use strict' if(document.getElementsByClassName('needs-validation').length > 0) { // Fetch all the forms we want to apply custom Bootstrap validation styles to var forms = document.querySelectorAll('.needs-validation') // Loop over them and prevent submission Array.prototype.slice.call(forms) .forEach(function (form) { form.addEventListener('submit', function (event) { if (!form.checkValidity()) { event.preventDefault() event.stopPropagation() } form.classList.add('was-validated') }, false) }) } })() //=========================================// /*/* 13) Switcher Pricing Plans */ //=========================================// try { var e = document.getElementById("filt-monthly"), d = document.getElementById("filt-yearly"), t = document.getElementById("switcher"), m = document.getElementById("monthly"), y = document.getElementById("yearly"); e.addEventListener("click", function(){ t.checked = false; e.classList.add("toggler--is-active"); d.classList.remove("toggler--is-active"); m.classList.remove("hide"); y.classList.add("hide"); }); d.addEventListener("click", function(){ t.checked = true; d.classList.add("toggler--is-active"); e.classList.remove("toggler--is-active"); m.classList.add("hide"); y.classList.remove("hide"); }); t.addEventListener("click", function(){ d.classList.toggle("toggler--is-active"); e.classList.toggle("toggler--is-active"); m.classList.toggle("hide"); y.classList.toggle("hide"); }) } catch(err) { }