(function ($) {
"use strict";
/**
* @param $scope The Widget wrapper element as a jQuery element
* @param $ The jQuery alias
*/
/**
*
* Get slider options
*/
let getSliderOptions = function getSliderOptions($scope) {
let slider = $($(".tj__slider", $scope)[0]);
let slideExist = $scope.find(".tj__slider").length;
let sliderSettings = $($(".tj__slider-wrapper", $scope)[0]).data("settings") || {};
sliderSettings.handleElementorBreakpoints = true;
//remove the attribute after getting the slider settings
$($(".tj__slider-wrapper", $scope)[0]).removeAttr("data-settings");
return {
slider: slider,
options: sliderSettings,
slider_exist: slideExist,
};
};
let Slider = function Slider($scope, $) {
var _getSliderOptions = getSliderOptions($scope),
slider = _getSliderOptions.slider,
options = _getSliderOptions.options,
slider_exist = _getSliderOptions.slider_exist;
if (slider_exist) {
new elementorFrontend.utils.swiper(slider, options).then(function (newSwiperInstance) {
return newSwiperInstance;
});
}
};
// Make sure you run this code under Elementor.
$(window).on("elementor/frontend/init", function () {
// global widget
elementorFrontend.hooks.addAction("frontend/element_ready/widget", function ($scope, $) {
// background image
let bgImage = $scope.find("[data-bg-image]");
if (bgImage.length > 0) {
bgImage.each(function () {
$(this).css("background-image", "url(" + $(this).attr("data-bg-image") + ")");
});
}
let maskImage = $scope.find("[data-mask]");
if (maskImage.length > 0) {
maskImage.each(function () {
$(this).css("mask-image", "url(" + $(this).attr("data-mask") + ")");
});
}
// PureCounter initialization
let pureCounter = $scope.find(".purecounter");
if (pureCounter.length > 0 && typeof PureCounter !== "undefined") {
// Clear previous counter instance if necessary
if (window.pureCounter) {
window.pureCounter.destroy && window.pureCounter.destroy(); // optional cleanup if needed
}
// Create new counter instance
window.pureCounter = new PureCounter();
}
// right swipe
document.querySelectorAll(".rightSwipeWrap").forEach((wrap, i) => {
gsap.set(wrap.querySelectorAll(".right-swipe"), {
transformPerspective: 1200,
x: "10rem",
rotateY: -20,
opacity: 0,
transformOrigin: "right center",
});
gsap.to(wrap.querySelectorAll(".right-swipe"), {
transformPerspective: 1200,
x: 0,
rotateY: 0,
opacity: 1,
delay: 0.3,
ease: "power3.out",
scrollTrigger: {
trigger: wrap,
start: "top 80%",
id: "rightSwipeWrap-" + i,
toggleActions: "play none none none",
// markers: true,
},
});
});
// left swipe
document.querySelectorAll(".leftSwipeWrap").forEach((wrap, i) => {
gsap.set(wrap.querySelectorAll(".left-swipe"), {
transformPerspective: 1200,
x: "-10rem",
rotateY: 20,
opacity: 0,
transformOrigin: "left center",
});
gsap.to(wrap.querySelectorAll(".left-swipe"), {
transformPerspective: 1200,
x: 0,
rotateY: 0,
opacity: 1,
delay: 0.3,
ease: "power3.out",
scrollTrigger: {
trigger: wrap,
start: "top 80%",
id: "leftSwipeWrap-" + i,
toggleActions: "play none none none",
// markers: true,
},
});
});
});
// tj-blog-carousel
elementorFrontend.hooks.addAction("frontend/element_ready/tj-blog-carousel.default", Slider);
// tj-coming-soon
elementorFrontend.hooks.addAction(
"frontend/element_ready/tj-coming-soon.default",
function ($scope, $) {
const $wrap = $scope.find(".countdown");
if ($wrap.length > 0) {
const dateVal = $wrap.data("date");
const targetTime = new Date(dateVal).getTime();
// ⛔ Prevent NaN countdown
if (!dateVal || isNaN(targetTime)) {
$wrap.find(".countdown-value").text("00");
return;
}
const labels = {
day: $wrap.data("day_label") || "Days",
hour: $wrap.data("hour_label") || "Hours",
min: $wrap.data("min_label") || "Mins",
sec: $wrap.data("sec_label") || "Sec",
};
// Cache elements once
const el = {
days: $wrap.find(".days .countdown-value"),
hours: $wrap.find(".hours .countdown-value"),
mins: $wrap.find(".minutes .countdown-value"),
secs: $wrap.find(".seconds .countdown-value"),
labelDays: $wrap.find(".days .countdown-heading"),
labelHours: $wrap.find(".hours .countdown-heading"),
labelMins: $wrap.find(".minutes .countdown-heading"),
labelSecs: $wrap.find(".seconds .countdown-heading"),
};
const pad = n => String(n).padStart(2, "0");
// Labels set once
el.labelDays.text(labels.day);
el.labelHours.text(labels.hour);
el.labelMins.text(labels.min);
el.labelSecs.text(labels.sec);
function tick() {
const now = Date.now();
const diff = targetTime - now;
if (diff <= 0) {
el.days.text("00");
el.hours.text("00");
el.mins.text("00");
el.secs.text("00");
clearInterval(timer);
return;
}
const d = Math.floor(diff / 86400000);
const h = Math.floor((diff / 3600000) % 24);
const m = Math.floor((diff / 60000) % 60);
const s = Math.floor((diff / 1000) % 60);
el.days.text(pad(d));
el.hours.text(pad(h));
el.mins.text(pad(m));
el.secs.text(pad(s));
}
tick();
const timer = setInterval(tick, 1000);
}
}
);
// tj-hero-slider
elementorFrontend.hooks.addAction(
"frontend/element_ready/tj-hero-banner-slider.default",
function ($scope, $) {
let heroSlider = $scope.find(".full-slider-active");
let bannerWrap = $scope.find(".bannerWrap");
let loop = bannerWrap.attr("data-loop") == "yes" ? true : false;
let nav = bannerWrap.attr("data-nav") == "yes" ? true : false;
let autoplay = bannerWrap.attr("data-autoplay") == "yes" ? true : false;
let delay = bannerWrap.attr("data-delay") ? bannerWrap.attr("data-delay") : "5000";
if (heroSlider.length > 0) {
const sliderId = heroSlider.attr("id");
var heroSlide = new Swiper(`#${sliderId}`, {
slidesPerView: 1,
spaceBetween: 0,
effect: "fade",
loop: loop,
speed: 2000,
...(autoplay
? {
autoplay: {
delay: delay,
},
}
: {}),
...(nav
? {
navigation: {
prevEl: ".tj-btn-prev",
nextEl: ".tj-btn-next",
},
}
: {}),
pagination: {
el: ".tj-sw-pagination",
type: "fraction",
clickable: true,
renderFraction: function (currentClass, totalClass) {
return (
'' +
' ' +
''
);
},
},
on: {
init: function () {
updateDashWidth(this);
},
slideChange: function () {
updateDashWidth(this);
},
},
});
function updateDashWidth(swiper) {
const dashInner = swiper.el.querySelector(".dash-inner");
if (dashInner) {
const realIndex = swiper.realIndex;
const totalSlides = swiper.slides.length - swiper.loopedSlides * 2;
const progressPercent = ((realIndex + 1) / totalSlides) * 100;
dashInner.style.width = progressPercent + "%";
}
}
}
}
);
// tj-counter-two
elementorFrontend.hooks.addAction(
"frontend/element_ready/tj-counter-two.default",
function ($scope, $) {
var $counterItem = $scope.find(".funfact-item-two");
if ($counterItem.length > 0) {
var $counter = $counterItem.find(".odometer");
if (!$counter.length) {
return;
}
$counter.appear(
function () {
var odo = $counter;
odo.each(function () {
var countNumber = $(this).attr("data-count");
$(this).html(countNumber);
});
},
{
offset: "80%",
}
);
}
}
);
// tj-counter
elementorFrontend.hooks.addAction(
"frontend/element_ready/tj-counter.default",
function ($scope, $) {
var $counterItem = $scope.find(".counter-item");
if ($counterItem.length > 0) {
var $counter = $counterItem.find(".odometer");
if (!$counter.length) {
return;
}
$counter.appear(
function () {
var odo = $counter;
odo.each(function () {
var countNumber = $(this).attr("data-count");
$(this).html(countNumber);
});
},
{
offset: "80%",
}
);
}
}
);
// tj-about
elementorFrontend.hooks.addAction(
"frontend/element_ready/tj-about.default",
function ($scope, $) {
var $counterItem = $scope.find(".funfact-item-one");
if ($counterItem.length > 0) {
var $counter = $counterItem.find(".odometer");
if (!$counter.length) {
return;
}
$counter.appear(
function () {
var odo = $counter;
odo.each(function () {
var countNumber = $(this).attr("data-count");
$(this).html(countNumber);
});
},
{
offset: "80%",
}
);
}
}
);
// tj-about-two
elementorFrontend.hooks.addAction(
"frontend/element_ready/tj-about-two.default",
function ($scope, $) {
var $counterItem = $scope.find(".counter-item");
if ($counterItem.length > 0) {
var $counter = $counterItem.find(".odometer");
if (!$counter.length) {
return;
}
$counter.appear(
function () {
var odo = $counter;
odo.each(function () {
var countNumber = $(this).attr("data-count");
$(this).html(countNumber);
});
},
{
offset: "80%",
}
);
}
}
);
// tj-about-image
elementorFrontend.hooks.addAction(
"frontend/element_ready/tj-about-image.default",
function ($scope, $) {
var $counterItem = $scope.find(".testimonial-funfact");
if ($counterItem.length > 0) {
var $counter = $counterItem.find(".odometer");
if (!$counter.length) {
return;
}
$counter.appear(
function () {
var odo = $counter;
odo.each(function () {
var countNumber = $(this).attr("data-count");
$(this).html(countNumber);
});
},
{
offset: "80%",
}
);
}
}
);
// tj-banner-four
elementorFrontend.hooks.addAction(
"frontend/element_ready/tj-banner-four.default",
function ($scope, $) {
var $counterItem = $scope.find(".counter-item");
if ($counterItem.length > 0) {
var $counter = $counterItem.find(".odometer");
if (!$counter.length) {
return;
}
$counter.appear(
function () {
var odo = $counter;
odo.each(function () {
var countNumber = $(this).attr("data-count");
$(this).html(countNumber);
});
},
{
offset: "80%",
}
);
}
}
);
// image slider
elementorFrontend.hooks.addAction(
"frontend/element_ready/tj-image-slider.default",
function ($scope, $) {
let wrap = $scope.find(".carouselWrap");
var loop = wrap.attr("data-loop") == "yes" ? true : false;
var autoplay = wrap.attr("data-autoplay") == "yes" ? true : false;
var delay = wrap.attr("data-delay") ? wrap.attr("data-delay") : "1";
// Image Slider 1
let imageSlider = $scope.find(".h6-hero-slider");
if (imageSlider.length > 0) {
let sliderId = imageSlider.attr("id");
var imageSlide = new Swiper(`#${sliderId}`, {
slidesPerView: "auto",
spaceBetween: 30,
freemode: true,
centeredSlides: true,
loop: loop,
speed: 8000,
allowTouchMove: false,
...(autoplay
? {
autoplay: {
delay: delay,
},
}
: {}),
breakpoints: {
0: {
spaceBetween: 20,
},
1400: {
spaceBetween: 30,
},
},
});
}
}
);
// tj-services
elementorFrontend.hooks.addAction(
"frontend/element_ready/tj-services.default",
function ($scope, $) {
let wrap = $scope.find(".carouselWrap");
var loop = wrap.attr("data-loop") == "yes" ? true : false;
var dot = wrap.attr("data-dot") == "yes" ? true : false;
var autoplay = wrap.attr("data-autoplay") == "yes" ? true : false;
var delay = wrap.attr("data-delay") ? wrap.attr("data-delay") : "5000";
// Service Slider 1
let serviceSlider = $scope.find(".sw-slider-2");
if (serviceSlider.length > 0) {
let sliderId = serviceSlider.attr("id");
let swCarousel = $scope.find(".sw-carousel-2");
var preview_xs = parseFloat(swCarousel.data("xs")) || 1;
var preview_sm = parseFloat(swCarousel.data("sm")) || preview_xs;
var preview_md = parseFloat(swCarousel.data("md")) || 2;
var preview_lg = parseFloat(swCarousel.data("lg")) || 3;
var preview_xl = parseFloat(swCarousel.data("xl")) || 3;
var preview_xxl = parseFloat(swCarousel.data("xxl")) || 3;
var space_xs = parseFloat(swCarousel.data("space-xs")) || 24;
var space_sm = parseFloat(swCarousel.data("space-sm")) || space_xs;
var space_md = parseFloat(swCarousel.data("space-md")) || 24;
var space_lg = parseFloat(swCarousel.data("space-lg")) || 24;
var space_xl = parseFloat(swCarousel.data("space-xl")) || 24;
var space_xxl = parseFloat(swCarousel.data("space-xxl")) || 24;
var serviceSlide = new Swiper(`#${sliderId}`, {
slidesPerView: preview_xs,
spaceBetween: space_xs,
loop: loop,
speed: 1500,
...(autoplay
? {
autoplay: {
delay: delay,
},
}
: {}),
...(dot
? {
pagination: {
el: ".service-pagination",
clickable: true,
},
}
: {}),
navigation: {
nextEl: ".slider-next",
prevEl: ".slider-prev",
},
breakpoints: {
576: {
slidesPerView: preview_sm,
spaceBetween: space_sm,
},
768: {
slidesPerView: preview_md,
spaceBetween: space_md,
},
992: {
slidesPerView: preview_lg,
spaceBetween: space_lg,
},
1201: {
slidesPerView: preview_xl,
spaceBetween: space_xl,
},
1400: {
slidesPerView: preview_xxl,
spaceBetween: space_xxl,
},
},
});
}
let serviceSlider2 = $scope.find(".sw-slider-4");
if (serviceSlider2.length > 0) {
let sliderId = serviceSlider2.attr("id");
var swCarousel = $scope.find(".sw-carousel-4");
var preview_xs = parseFloat(swCarousel.data("xs")) || 1;
var preview_sm = parseFloat(swCarousel.data("sm")) || preview_xs;
var preview_md = parseFloat(swCarousel.data("md")) || 2;
var preview_lg = parseFloat(swCarousel.data("lg")) || 3;
var preview_xl = parseFloat(swCarousel.data("xl")) || 3;
var preview_xxl = parseFloat(swCarousel.data("xxl")) || 3;
var space_xs = parseFloat(swCarousel.data("space-xs")) || 24;
var space_sm = parseFloat(swCarousel.data("space-sm")) || space_xs;
var space_md = parseFloat(swCarousel.data("space-md")) || 24;
var space_lg = parseFloat(swCarousel.data("space-lg")) || 24;
var space_xl = parseFloat(swCarousel.data("space-xl")) || 24;
var space_xxl = parseFloat(swCarousel.data("space-xxl")) || 24;
var serviceSlide2 = new Swiper(`#${sliderId}`, {
slidesPerView: preview_xs,
spaceBetween: space_xs,
loop: loop,
speed: 1500,
...(autoplay
? {
autoplay: {
delay: delay,
},
}
: {}),
...(dot
? {
pagination: {
el: ".service-pagination",
clickable: true,
},
}
: {}),
navigation: {
nextEl: ".slider-next",
prevEl: ".slider-prev",
},
breakpoints: {
576: {
slidesPerView: preview_sm,
spaceBetween: space_sm,
},
768: {
slidesPerView: preview_md,
spaceBetween: space_md,
},
992: {
slidesPerView: preview_lg,
spaceBetween: space_lg,
},
1201: {
slidesPerView: preview_xl,
spaceBetween: space_xl,
},
1400: {
slidesPerView: preview_xxl,
spaceBetween: space_xxl,
},
},
});
}
let serviceSlider6 = $scope.find(".h6-services-slider");
if (serviceSlider6.length > 0) {
let sliderId6 = serviceSlider6.attr("id");
var swCarousel = $scope.find(".sw-carousel-5");
var preview_xs = parseFloat(swCarousel.data("xs")) || 1;
var preview_sm = parseFloat(swCarousel.data("sm")) || preview_xs;
var preview_md = parseFloat(swCarousel.data("md")) || 2;
var preview_lg = parseFloat(swCarousel.data("lg")) || 3;
var preview_xl = parseFloat(swCarousel.data("xl")) || 3;
var preview_xxl = parseFloat(swCarousel.data("xxl")) || 3;
var space_xs = parseFloat(swCarousel.data("space-xs")) || 30;
var space_sm = parseFloat(swCarousel.data("space-sm")) || space_xs;
var space_md = parseFloat(swCarousel.data("space-md")) || 30;
var space_lg = parseFloat(swCarousel.data("space-lg")) || 30;
var space_xl = parseFloat(swCarousel.data("space-xl")) || 30;
var space_xxl = parseFloat(swCarousel.data("space-xxl")) || 30;
var serviceSlide6 = new Swiper(`#${sliderId6}`, {
slidesPerView: preview_xs,
spaceBetween: space_xs,
loop: loop,
speed: 1500,
...(autoplay
? {
autoplay: {
delay: delay,
},
}
: {}),
...(dot
? {
pagination: {
el: ".swiper_pagination",
clickable: true,
},
}
: {}),
breakpoints: {
576: {
slidesPerView: preview_sm,
spaceBetween: space_sm,
},
768: {
slidesPerView: preview_md,
spaceBetween: space_md,
},
992: {
slidesPerView: preview_lg,
spaceBetween: space_lg,
},
1201: {
slidesPerView: preview_xl,
spaceBetween: space_xl,
},
1400: {
slidesPerView: preview_xxl,
spaceBetween: space_xxl,
},
},
});
}
// GSAP ScrollTrigger Animation
if (typeof gsap !== "undefined" && typeof ScrollTrigger !== "undefined") {
gsap.registerPlugin(ScrollTrigger);
const serviceStack = $scope.find(".service-stack");
if (serviceStack.length > 0 && window.innerWidth > 991) {
serviceStack.each(function () {
gsap.to(this, {
opacity: 0,
scale: 0.9,
y: 50,
scrollTrigger: {
trigger: this,
scrub: true,
start: "top top",
pin: true,
pinSpacing: false,
markers: false,
},
});
});
}
}
}
);
// service list
elementorFrontend.hooks.addAction("frontend/element_ready/tj-service-list.default", function ($scope, $) {
const wrap = $scope.find(".carouselWrap");
const loop = wrap.attr("data-loop") === "yes";
const dot = wrap.attr("data-dot") == "yes" ? true : false;
const autoplay = wrap.attr("data-autoplay") === "yes";
const delay = parseInt(wrap.attr("data-delay") || "5000");
let serviceContent = $scope.find(".h5-service-content");
let serviceItem = $scope.find(".service-style-5");
$(serviceContent).on("mouseover", function () {
$(this).parent(serviceItem).addClass("active").siblings().removeClass("active");
});
// home 9 service slider
const serviceSlider9 = $scope.find(".h9-services-slider");
if (serviceSlider9.length > 0) {
const sliderId = serviceSlider9.attr("id");
new Swiper(`#${sliderId}`, {
slidesPerView: 1,
spaceBetween: 30,
loop: loop,
speed: 1500,
...(autoplay && {
autoplay: {
delay: delay,
},
}),
...(dot
? {
pagination: {
el: ".swiper_pagination",
clickable: true,
},
}
: {}),
breakpoints: {
0: {
slidesPerView: 1,
},
768: {
slidesPerView: 2,
},
992: {
slidesPerView: 3,
},
},
});
}
});
// tj-project
elementorFrontend.hooks.addAction("frontend/element_ready/tj-project-carousel.default", function ($scope, $) {
const wrap = $scope.find(".carouselWrap");
const loop = wrap.attr("data-loop") === "yes";
const dot = wrap.attr("data-dot") == "yes" ? true : false;
const nav = wrap.attr("data-nav") == "yes" ? true : false;
const autoplay = wrap.attr("data-autoplay") === "yes";
const delay = parseInt(wrap.attr("data-delay") || "5000");
// Find Swiper inside this widget
const projectSlider = $scope.find(".project-slider");
if (projectSlider.length > 0) {
const sliderId = projectSlider.attr("id");
let swCarousel = $scope.find(".sw-carousel-project");
var preview_xs = parseFloat(swCarousel.data("xs")) || 1;
var preview_sm = parseFloat(swCarousel.data("sm")) || 2;
var preview_md = parseFloat(swCarousel.data("md")) || 2;
var preview_lg = parseFloat(swCarousel.data("lg")) || 3;
var preview_xl = parseFloat(swCarousel.data("xl")) || 3;
var preview_xxl = parseFloat(swCarousel.data("xxl")) || 4;
var space_xs = parseFloat(swCarousel.data("space-xs")) || 24;
var space_sm = parseFloat(swCarousel.data("space-sm")) || space_xs;
var space_md = parseFloat(swCarousel.data("space-md")) || 24;
var space_lg = parseFloat(swCarousel.data("space-lg")) || 24;
var space_xl = parseFloat(swCarousel.data("space-xl")) || 24;
var space_xxl = parseFloat(swCarousel.data("space-xxl")) || 24;
new Swiper(`#${sliderId}`, {
slidesPerView: preview_xs,
spaceBetween: space_xs,
loop: loop,
speed: 2000,
...(autoplay && {
autoplay: {
delay: delay,
},
}),
...(nav && {
navigation: {
nextEl: ".project-next",
prevEl: ".project-prev",
},
}),
breakpoints: {
576: {
slidesPerView: preview_sm,
spaceBetween: space_sm,
},
768: {
slidesPerView: preview_md,
spaceBetween: space_md,
},
992: {
slidesPerView: preview_lg,
spaceBetween: space_lg,
},
1201: {
slidesPerView: preview_xl,
spaceBetween: space_xl,
},
1400: {
slidesPerView: preview_xxl,
spaceBetween: space_xxl,
},
},
});
}
// Custom Cursor Logic
const cursor = document.querySelector(".tj-cursor"); // global
const container = $scope[0].querySelector(".project-slider-one"); // scoped swiper container
if (cursor && container) {
// Initial GSAP setup
gsap.set(cursor, { xPercent: -50, yPercent: -50 });
// Move cursor on pointer
document.addEventListener("pointermove", e => {
gsap.to(cursor, {
duration: 0,
x: e.clientX,
y: e.clientY,
});
});
// Show/hide on hover within this widget's container
container.addEventListener("mouseenter", () => {
cursor.style.opacity = "1";
cursor.style.visibility = "visible";
});
container.addEventListener("mouseleave", () => {
cursor.style.opacity = "0";
cursor.style.visibility = "hidden";
});
// Wrap `cursor` with jQuery
const $cursor = $(cursor);
$("a, .sub-menu").on("mouseenter", function () {
$cursor.addClass("d-none");
});
$("a, .sub-menu").on("mouseleave", function () {
$cursor.removeClass("d-none");
});
}
// home 5 projects
const projectSlider5 = $scope.find(".h5-case-study-slider");
if (projectSlider5.length > 0) {
const sliderId = projectSlider5.attr("id");
let swCarousel = $scope.find(".sw-carousel-project-5");
var preview_xs = parseFloat(swCarousel.data("xs")) || 1;
var preview_sm = parseFloat(swCarousel.data("sm")) || 1;
var preview_md = parseFloat(swCarousel.data("md")) || 1;
var preview_lg = parseFloat(swCarousel.data("lg")) || 2;
var preview_xl = parseFloat(swCarousel.data("xl")) || 2;
var preview_xxl = parseFloat(swCarousel.data("xxl")) || 2;
var space_xs = parseFloat(swCarousel.data("space-xs")) || 20;
var space_sm = parseFloat(swCarousel.data("space-sm")) || space_xs;
var space_md = parseFloat(swCarousel.data("space-md")) || 20;
var space_lg = parseFloat(swCarousel.data("space-lg")) || 30;
var space_xl = parseFloat(swCarousel.data("space-xl")) || 30;
var space_xxl = parseFloat(swCarousel.data("space-xxl")) || 30;
new Swiper(`#${sliderId}`, {
slidesPerView: preview_xs,
spaceBetween: space_xs,
loop: loop,
speed: 2000,
arrow: false,
...(autoplay && {
autoplay: {
delay: delay,
},
}),
...(dot
? {
pagination: {
el: ".swiper_pagination",
clickable: true,
},
}
: {}),
breakpoints: {
576: {
slidesPerView: preview_sm,
spaceBetween: space_sm,
},
768: {
slidesPerView: preview_md,
spaceBetween: space_md,
},
992: {
slidesPerView: preview_lg,
spaceBetween: space_lg,
},
1201: {
slidesPerView: preview_xl,
spaceBetween: space_xl,
},
1400: {
slidesPerView: preview_xxl,
spaceBetween: space_xxl,
},
},
});
}
// home 7 projects
const project7Slider = $scope.find(".h7-case-study-slider");
if (project7Slider.length > 0) {
const sliderId = project7Slider.attr("id");
var project7 = new Swiper(`#${sliderId}`, {
slidesPerView: 1,
loop: loop,
speed: 1800,
effect: "coverflow",
grabCursor: true,
centeredSlides: true,
spaceBetween: -100,
coverflowEffect: {
rotate: 0,
stretch: 0,
depth: 800,
modifier: 1,
slideShadows: false,
},
...(autoplay && {
autoplay: {
delay: delay,
},
}),
...(dot
? {
pagination: {
el: ".swiper_pagination",
clickable: true,
},
}
: {}),
...(nav
? {
navigation: {
nextEl: ".tj-project-nav-next",
prevEl: ".tj-project-nav-prev",
},
}
: {}),
});
}
// home 8 projects
const projectSlider8 = $scope.find(".h8-case-study-slider");
if (projectSlider8.length > 0) {
const sliderId = projectSlider8.attr("id");
let swCarousel = $scope.find(".sw-carousel-project-8");
var preview_xs = parseFloat(swCarousel.data("xs")) || 1;
var preview_sm = parseFloat(swCarousel.data("sm")) || 1;
var preview_md = parseFloat(swCarousel.data("md")) || 1;
var preview_lg = parseFloat(swCarousel.data("lg")) || 2;
var preview_xl = parseFloat(swCarousel.data("xl")) || 2;
var preview_xxl = parseFloat(swCarousel.data("xxl")) || 2;
var space_xs = parseFloat(swCarousel.data("space-xs")) || 20;
var space_sm = parseFloat(swCarousel.data("space-sm")) || space_xs;
var space_md = parseFloat(swCarousel.data("space-md")) || 20;
var space_lg = parseFloat(swCarousel.data("space-lg")) || 30;
var space_xl = parseFloat(swCarousel.data("space-xl")) || 30;
var space_xxl = parseFloat(swCarousel.data("space-xxl")) || 30;
new Swiper(`#${sliderId}`, {
slidesPerView: 1,
spaceBetween: 20,
loop: loop,
speed: 2000,
arrow: false,
...(autoplay && {
autoplay: {
delay: delay,
},
}),
...(dot
? {
pagination: {
el: ".swiper_pagination",
clickable: true,
},
}
: {}),
breakpoints: {
576: {
slidesPerView: preview_sm,
spaceBetween: space_sm,
},
768: {
slidesPerView: preview_md,
spaceBetween: space_md,
},
992: {
slidesPerView: preview_lg,
spaceBetween: space_lg,
},
1201: {
slidesPerView: preview_xl,
spaceBetween: space_xl,
},
1400: {
slidesPerView: preview_xxl,
spaceBetween: space_xxl,
},
},
});
}
// home 9 projects
let h8BlogWrap = $scope.find(".h9-case-study-wrapper");
if (h8BlogWrap.length > 0) {
$(".h9-case-study-item").on("mouseover", function () {
$(this).addClass("active").siblings().removeClass("active");
});
}
});
// tj project stack
elementorFrontend.hooks.addAction(
"frontend/element_ready/tj-project-list-2.default",
function ($scope, $) {
// GSAP ScrollTrigger Animation
if (typeof gsap !== "undefined" && typeof ScrollTrigger !== "undefined") {
gsap.registerPlugin(ScrollTrigger);
const h6ProjectStack = $scope.find(".project-stack");
if (h6ProjectStack.length > 0 && window.innerWidth > 991) {
h6ProjectStack.each(function () {
gsap.to(this, {
scrollTrigger: {
trigger: this,
scrub: true,
start: "top top",
pin: true,
pinSpacing: false,
markers: false,
},
});
});
}
const h10ProjectStack = $scope.find(".service-stack");
if (h10ProjectStack.length > 0 && window.innerWidth > 991) {
h10ProjectStack.each(function () {
gsap.to(this, {
opacity: 0,
scale: 0.9,
y: 50,
scrollTrigger: {
trigger: this,
scrub: true,
start: "top top",
pin: true,
pinSpacing: false,
markers: false,
},
});
});
}
}
}
);
// tj-brand-carousel
elementorFrontend.hooks.addAction(
"frontend/element_ready/tj-brand-carousel.default",
function ($scope, $) {
let wrap = $scope.find(".carouselWrap");
var loop = wrap.attr("data-loop") == "yes" ? true : false;
var autoplay = wrap.attr("data-autoplay") == "yes" ? true : false;
var delay = wrap.attr("data-delay") ? wrap.attr("data-delay") : "1";
// brand 1
let brandCarouselWrap1 = $scope.find(".brand-slider-1");
if (brandCarouselWrap1.length > 0) {
let carouselId = brandCarouselWrap1.attr("id");
var brandCarousel = new Swiper(`#${carouselId}`, {
slidesPerView: "auto",
spaceBetween: 30,
freemode: true,
centeredSlides: true,
allowTouchMove: false,
loop: loop,
speed: 3000,
...(autoplay
? {
autoplay: {
delay: delay,
disableOnInteraction: false,
},
}
: {}),
breakpoints: {
0: {
slidesPerView: 2,
},
576: {
slidesPerView: 2.5,
},
768: {
slidesPerView: 3.3,
},
992: {
slidesPerView: 4.5,
},
1200: {
slidesPerView: 5.2,
},
1400: {
slidesPerView: 6,
},
},
});
}
// brand 2
let brandCarouselWrap2 = $scope.find(".brand-slider-2");
if (brandCarouselWrap2.length > 0) {
let carouselId = brandCarouselWrap2.attr("id");
var brandCarousel2 = new Swiper(`#${carouselId}`, {
slidesPerView: "auto",
spaceBetween: 30,
freemode: true,
centeredSlides: true,
allowTouchMove: false,
loop: loop,
speed: 3000,
...(autoplay
? {
autoplay: {
delay: delay,
disableOnInteraction: false,
},
}
: {}),
breakpoints: {
0: {
slidesPerView: 2,
},
576: {
slidesPerView: 2.5,
},
768: {
slidesPerView: 3.3,
},
992: {
slidesPerView: 4.5,
},
1200: {
slidesPerView: 5.2,
},
1400: {
slidesPerView: 6,
},
},
});
}
}
);
// tj-marquee
elementorFrontend.hooks.addAction(
"frontend/element_ready/tj-marquee.default",
function ($scope, $) {
let marquee = $scope.find(".marquee-slider");
if (marquee.length > 0) {
const marqueeId = marquee.attr("id");
var marqueeSlider = new Swiper(`#${marqueeId}`, {
slidesPerView: "auto",
spaceBetween: 0,
freemode: true,
centeredSlides: true,
loop: true,
speed: 4000,
allowTouchMove: false,
autoplay: {
delay: 1,
disableOnInteraction: true,
},
});
}
// home 6
let h6Marquee = $scope.find(".h6-marquee-slider");
if (h6Marquee.length > 0) {
const marqueeId = h6Marquee.attr("id");
let marqueeSlider = new Swiper(`#${marqueeId}`, {
slidesPerView: "auto",
spaceBetween: 20,
freemode: true,
centeredSlides: true,
loop: true,
speed: 4000,
allowTouchMove: false,
autoplay: {
delay: 1,
},
});
}
}
);
// tj-project-list
elementorFrontend.hooks.addAction(
"frontend/element_ready/tj-project-list.default",
function ($scope, $) {
let scrollContent = $scope.find(".marquee-slider-wrapper-two");
if (scrollContent.length > 0) {
gsap.to(".marquee-slider-wrapper-two", {
scrollTrigger: {
trigger: ".tj-project-section-two",
start: "top center-=200",
pin: ".marquee-slider-wrapper-two",
end: "bottom bottom-=200",
markers: false,
pinSpacing: false,
scrub: 1,
},
});
}
}
);
// tj-team
elementorFrontend.hooks.addAction("frontend/element_ready/tj-team.default", function ($scope, $) {
let wrap = $scope.find(".carouselWrap");
let loop = wrap.attr("data-loop") == "yes" ? true : false;
let dot = wrap.attr("data-dot") == "yes" ? true : false;
let autoplay = wrap.attr("data-autoplay") == "yes" ? true : false;
let delay = wrap.attr("data-delay") ? wrap.attr("data-delay") : "5000";
let teamSlider = $scope.find(".tj-team-slider");
if (teamSlider.length > 0) {
const sliderId = teamSlider.attr("id");
let swCarousel = $scope.find(".sw-carousel-team");
var preview_xs = parseFloat(swCarousel.data("xs")) || 1;
var preview_sm = parseFloat(swCarousel.data("sm")) || 2;
var preview_md = parseFloat(swCarousel.data("md")) || 2;
var preview_lg = parseFloat(swCarousel.data("lg")) || 4;
var preview_xl = parseFloat(swCarousel.data("xl")) || 4;
var preview_xxl = parseFloat(swCarousel.data("xxl")) || 4;
var space_xs = parseFloat(swCarousel.data("space-xs")) || 24;
var space_sm = parseFloat(swCarousel.data("space-sm")) || space_xs;
var space_md = parseFloat(swCarousel.data("space-md")) || 24;
var space_lg = parseFloat(swCarousel.data("space-lg")) || 24;
var space_xl = parseFloat(swCarousel.data("space-xl")) || 24;
var space_xxl = parseFloat(swCarousel.data("space-xxl")) || 24;
var teamslide = new Swiper(`#${sliderId}`, {
slidesPerView: preview_xs,
spaceBetween: space_xs,
loop: loop,
speed: 1500,
...(autoplay
? {
autoplay: {
delay: delay,
},
}
: {}),
...(dot
? {
pagination: {
el: ".service-pagination",
clickable: true,
},
}
: {}),
breakpoints: {
576: {
slidesPerView: preview_sm,
spaceBetween: space_sm,
},
768: {
slidesPerView: preview_md,
spaceBetween: space_md,
},
992: {
slidesPerView: preview_lg,
spaceBetween: space_lg,
},
1201: {
slidesPerView: preview_xl,
spaceBetween: space_xl,
},
1400: {
slidesPerView: preview_xxl,
spaceBetween: space_xxl,
},
},
});
}
// home 10 team
let teamWrapper = $scope.find(".h10-team-wrapper");
if (teamWrapper.length > 0) {
$(".h10-team-item").on("mouseover", function () {
$(this).addClass("active").siblings().removeClass("active");
});
}
});
// tj-testimonial
elementorFrontend.hooks.addAction("frontend/element_ready/tj-testimonial.default", function ($scope, $) {
let wrap = $scope.find(".carouselWrap");
let loop = wrap.attr("data-loop") == "yes" ? true : false;
let nav = wrap.attr("data-nav") == "yes" ? true : false;
let dot = wrap.attr("data-dot") == "yes" ? true : false;
let autoplay = wrap.attr("data-autoplay") == "yes" ? true : false;
let delay = wrap.attr("data-delay") ? wrap.attr("data-delay") : "5000";
let testimonialSlider = $scope.find(".tj-testimonial-slider");
if (testimonialSlider.length > 0) {
const sliderId = testimonialSlider.attr("id");
let swCarousel = $scope.find(".sw-testimonial-1");
var preview_xs = parseFloat(swCarousel.data("xs")) || 1;
var preview_sm = parseFloat(swCarousel.data("sm")) || 1;
var preview_md = parseFloat(swCarousel.data("md")) || 1;
var preview_lg = parseFloat(swCarousel.data("lg")) || 2;
var preview_xl = parseFloat(swCarousel.data("xl")) || 2;
var preview_xxl = parseFloat(swCarousel.data("xxl")) || 2;
var space_xs = parseFloat(swCarousel.data("space-xs")) || 24;
var space_sm = parseFloat(swCarousel.data("space-sm")) || space_xs;
var space_md = parseFloat(swCarousel.data("space-md")) || 24;
var space_lg = parseFloat(swCarousel.data("space-lg")) || 24;
var space_xl = parseFloat(swCarousel.data("space-xl")) || 24;
var space_xxl = parseFloat(swCarousel.data("space-xxl")) || 24;
var testimonial = new Swiper(`#${sliderId}`, {
slidesPerView: preview_xs,
spaceBetween: space_xs,
loop: loop,
speed: 1500,
...(autoplay
? {
autoplay: {
delay: delay,
},
}
: {}),
...(nav
? {
navigation: {
nextEl: ".slider-next",
prevEl: ".slider-prev",
},
}
: {}),
...(dot
? {
pagination: {
el: ".testimonial-pagination",
clickable: true,
},
}
: {}),
breakpoints: {
576: {
slidesPerView: preview_sm,
spaceBetween: space_sm,
},
768: {
slidesPerView: preview_md,
spaceBetween: space_md,
},
992: {
slidesPerView: preview_lg,
spaceBetween: space_lg,
},
1201: {
slidesPerView: preview_xl,
spaceBetween: space_xl,
},
1400: {
slidesPerView: preview_xxl,
spaceBetween: space_xxl,
},
},
});
var star_rating_width = $(".fill-ratings span").width();
$(".star-ratings").width(star_rating_width);
}
// testimonial slider 2
let testimonialSlider2 = $scope.find(".tj-testimonial-slider-two");
if (testimonialSlider2.length > 0) {
const sliderId = testimonialSlider2.attr("id");
var testimonial = new Swiper(`#${sliderId}`, {
slidesPerView: 1,
spaceBetween: 0,
loop: loop,
speed: 1500,
...(autoplay
? {
autoplay: {
delay: delay,
},
}
: {}),
...(nav
? {
navigation: {
nextEl: ".slider-next",
prevEl: ".slider-prev",
},
}
: {}),
});
var star_rating_width = $(".fill-ratings span").width();
$(".star-ratings").width(star_rating_width);
}
// testimonial slider 3
let testimonialSlider3 = $scope.find(".testimonial-slider-two");
if (testimonialSlider3.length > 0) {
const sliderId = testimonialSlider3.attr("id");
let swCarousel = $scope.find(".sw-testimonial-3");
var preview_xs = parseFloat(swCarousel.data("xs")) || 1;
var preview_sm = parseFloat(swCarousel.data("sm")) || 1.5;
var preview_md = parseFloat(swCarousel.data("md")) || 1.5;
var preview_lg = parseFloat(swCarousel.data("lg")) || 1.5;
var preview_xl = parseFloat(swCarousel.data("xl")) || 1.9;
var preview_xxl = parseFloat(swCarousel.data("xxl")) || 2.9;
var space_xs = parseFloat(swCarousel.data("space-xs")) || 65;
var space_sm = parseFloat(swCarousel.data("space-sm")) || space_xs;
var space_md = parseFloat(swCarousel.data("space-md")) || 65;
var space_lg = parseFloat(swCarousel.data("space-lg")) || 65;
var space_xl = parseFloat(swCarousel.data("space-xl")) || 65;
var space_xxl = parseFloat(swCarousel.data("space-xxl")) || 65;
var testimonial = new Swiper(`#${sliderId}`, {
slidesPerView: preview_xs,
spaceBetween: space_xs,
centeredSlides: true,
loop: loop,
speed: 2000,
...(autoplay
? {
autoplay: {
delay: delay,
},
}
: {}),
...(dot
? {
pagination: {
el: ".testimonial-pagination",
clickable: true,
},
}
: {}),
breakpoints: {
576: {
slidesPerView: preview_sm,
spaceBetween: space_sm,
},
768: {
slidesPerView: preview_md,
spaceBetween: space_md,
},
992: {
slidesPerView: preview_lg,
spaceBetween: space_lg,
},
1201: {
slidesPerView: preview_xl,
spaceBetween: space_xl,
},
1420: {
slidesPerView: preview_xxl,
spaceBetween: space_xxl,
},
},
});
var star_rating_width = $(".fill-ratings span").width();
$(".star-ratings").width(star_rating_width);
}
// testimonial slider 4
let testimonialSlider4 = $scope.find(".h6-testimonial-slider");
if (testimonialSlider4.length > 0) {
let slider4Id = testimonialSlider4.attr("id");
let swCarousel = $scope.find(".sw-testimonial-5");
var preview_xs = parseFloat(swCarousel.data("xs")) || 1;
var preview_sm = parseFloat(swCarousel.data("sm")) || 1.5;
var preview_md = parseFloat(swCarousel.data("md")) || 1.5;
var preview_lg = parseFloat(swCarousel.data("lg")) || 2.5;
var preview_xl = parseFloat(swCarousel.data("xl")) || 2.5;
var preview_xxl = parseFloat(swCarousel.data("xxl")) || 3;
var space_xs = parseFloat(swCarousel.data("space-xs")) || 30;
var space_sm = parseFloat(swCarousel.data("space-sm")) || space_xs;
var space_md = parseFloat(swCarousel.data("space-md")) || 30;
var space_lg = parseFloat(swCarousel.data("space-lg")) || 30;
var space_xl = parseFloat(swCarousel.data("space-xl")) || 30;
var space_xxl = parseFloat(swCarousel.data("space-xxl")) || 30;
let testimonial = new Swiper(`#${slider4Id}`, {
slidesPerView: preview_xs,
spaceBetween: space_xs,
loop: loop,
speed: 1500,
...(autoplay
? {
autoplay: {
delay: delay,
},
}
: {}),
...(nav
? {
navigation: {
nextEl: ".slider-next",
prevEl: ".slider-prev",
},
}
: {}),
...(dot
? {
pagination: {
el: ".testimonial-pagination",
clickable: true,
},
}
: {}),
breakpoints: {
576: {
slidesPerView: preview_sm,
spaceBetween: space_sm,
},
768: {
slidesPerView: preview_md,
spaceBetween: space_md,
},
992: {
slidesPerView: preview_lg,
spaceBetween: space_lg,
},
1201: {
slidesPerView: preview_xl,
spaceBetween: space_xl,
},
1400: {
slidesPerView: preview_xxl,
spaceBetween: space_xxl,
},
},
});
var star_rating_width = $(".fill-ratings span").width();
$(".star-ratings").width(star_rating_width);
}
// testimonial tab
let h7TestimonialWrap = $scope.find(".h7-testimonial-wrap");
if (h7TestimonialWrap.length > 0) {
$(".h7-testimonial-single .testimonial-content").on("click", function () {
$(this).parent(".h7-testimonial-single").addClass("active").siblings().removeClass("active");
});
var star_rating_width = $(".fill-ratings span").width();
$(".star-ratings").width(star_rating_width);
}
// testimonial slider 8
const testimonialsMarqueeSliders = {};
function testimonialsMarquee(selector, isReverse = false, speed = 8000) {
const screenWidth = window.innerWidth;
const direction = screenWidth >= 768 ? "vertical" : "horizontal";
// Destroy previous instance if exists
if (testimonialsMarqueeSliders[selector]) {
testimonialsMarqueeSliders[selector].destroy(true, true);
}
// Init if element exists
if ($(selector).length > 0) {
testimonialsMarqueeSliders[selector] = new Swiper(selector, {
slidesPerView: "auto",
spaceBetween: screenWidth >= 768 ? 30 : 24,
centeredSlides: true,
loop: true,
allowTouchMove: false,
speed: speed,
direction: direction,
autoplay: {
delay: 0,
disableOnInteraction: false,
reverseDirection: isReverse,
},
});
}
}
// Use scoped selectors within widget
const upSelector = $scope.find(".tj-slider-up");
const downSelector = $scope.find(".tj-slider-down");
if (upSelector.length) {
testimonialsMarquee(`.${upSelector.attr("class").split(" ").join(".")}`, false, 8000);
}
if (downSelector.length) {
testimonialsMarquee(`.${downSelector.attr("class").split(" ").join(".")}`, true, 8000);
}
// home 9 testimonial
let clientThumb = $scope.find(".client-thumb");
if (clientThumb.length > 0) {
let clientId = clientThumb.attr("id");
var thumbs = new Swiper(`#${clientId}`, {
slidesPerView: 3,
spaceBetween: 20,
loop: true,
speed: 1500,
freeMode: true,
watchSlidesProgress: true,
slideToClickedSlide: true,
breakpoints: {
0: {
slidesPerView: 1.4,
spaceBetween: 10,
},
430: {
slidesPerView: 1.6,
},
530: {
slidesPerView: 2,
spaceBetween: 10,
},
768: {
slidesPerView: 2.4,
},
992: {
slidesPerView: 3,
centeredSlides: true,
},
},
});
}
let testimonialSlider9 = $scope.find(".h9-testimonial-slider");
if (testimonialSlider9.length > 0) {
let slider9Id = testimonialSlider9.attr("id");
let testimonial = new Swiper(`#${slider9Id}`, {
slidesPerView: 1,
spaceBetween: 28,
loopedSlides: 3,
loop: loop,
speed: 1500,
...(autoplay
? {
autoplay: {
delay: delay,
},
}
: {}),
...(nav
? {
navigation: {
nextEl: ".slider-next",
prevEl: ".slider-prev",
},
}
: {}),
...(dot
? {
pagination: {
el: ".swiper_pagination",
clickable: true,
},
}
: {}),
});
testimonial.controller.control = thumbs;
thumbs.controller.control = testimonial;
}
// home 10 testimonial
let testimonialSlider10 = $scope.find(".h10-testimonial-slider");
if (testimonialSlider10.length > 0) {
let slider10Id = testimonialSlider10.attr("id");
let swCarousel = $scope.find(".sw-testimonial-9");
var preview_xs = parseFloat(swCarousel.data("xs")) || 1;
var preview_sm = parseFloat(swCarousel.data("sm")) || 1;
var preview_md = parseFloat(swCarousel.data("md")) || 2;
var preview_lg = parseFloat(swCarousel.data("lg")) || 2;
var preview_xl = parseFloat(swCarousel.data("xl")) || 3;
var preview_xxl = parseFloat(swCarousel.data("xxl")) || 3;
var space_xs = parseFloat(swCarousel.data("space-xs")) || 30;
var space_sm = parseFloat(swCarousel.data("space-sm")) || space_xs;
var space_md = parseFloat(swCarousel.data("space-md")) || 30;
var space_lg = parseFloat(swCarousel.data("space-lg")) || 30;
var space_xl = parseFloat(swCarousel.data("space-xl")) || 30;
var space_xxl = parseFloat(swCarousel.data("space-xxl")) || 30;
let testimonial10 = new Swiper(`#${slider10Id}`, {
slidesPerView: preview_xs,
spaceBetween: space_xs,
loop: loop,
speed: 1500,
navigation: {
nextEl: ".slider-next",
prevEl: ".slider-prev",
},
...(autoplay
? {
autoplay: {
delay: delay,
},
}
: {}),
...(dot
? {
pagination: {
el: ".testimonial-pagination",
clickable: true,
},
}
: {}),
breakpoints: {
576: {
slidesPerView: preview_sm,
spaceBetween: space_sm,
},
768: {
slidesPerView: preview_md,
spaceBetween: space_md,
},
992: {
slidesPerView: preview_lg,
spaceBetween: space_lg,
},
1201: {
slidesPerView: preview_xl,
spaceBetween: space_xl,
},
1400: {
slidesPerView: preview_xxl,
spaceBetween: space_xxl,
},
},
});
}
});
// tj-progress-bar
elementorFrontend.hooks.addAction(
"frontend/element_ready/tj-progress-bar.default",
function ($scope, $) {
// circle progress bar
let progressItem = $scope.find(".knob");
if (typeof $.fn.knob != "undefined") {
$(progressItem).each(function () {
var $this = $(this),
knobVal = $this.attr("data-rel");
$this.knob({
draw: function () {
$(this.i).val(this.cv + "%");
},
});
$this.appear(
function () {
$({
value: 0,
}).animate(
{
value: knobVal,
},
{
duration: 2000,
easing: "swing",
step: function () {
$this.val(Math.ceil(this.value)).trigger("change");
},
}
);
},
{
accX: 0,
accY: -150,
}
);
});
}
// horizontal progress bar
const progressContainers = document.querySelectorAll(".tj-progress");
if (progressContainers?.length) {
progressContainers.forEach(progressContainer => {
const targetedProgressBar = progressContainer.querySelector(".tj-progress__bar");
const completedPercent = parseInt(targetedProgressBar.getAttribute("data-perchant"), 10) || 0;
gsap.to(targetedProgressBar, {
width: `${completedPercent}%`, // Correct width
ease: "power2.out",
duration: 1,
scrollTrigger: {
trigger: progressContainer, // Use container for better scroll handling
start: "top 90%",
end: "top 30%",
},
onUpdate: function () {
let progressValue = Math.round(this.progress() * 100); // Corrected scaling
let displayPercent = Math.round((completedPercent * progressValue) / 100); // Fixes low % issue
const percentageText = progressContainer.querySelector(".tj-progress__perchant");
if (percentageText) {
percentageText.textContent = displayPercent + "%";
}
},
});
});
}
}
);
// tj-process
elementorFrontend.hooks.addAction("frontend/element_ready/tj-process.default", function ($scope, $) {
let processItem = $scope.find(".h5-process_item");
if (processItem.length > 0) {
// Add active class to the first item by default
processItem.first().addClass("active");
// On hover, activate the hovered item and deactivate siblings
processItem.on("mouseenter", function () {
$(this).addClass("active").siblings().removeClass("active");
});
}
// process style 2
let processWrapper = $scope.find(".h7-process-inner");
if (processWrapper.length > 0) {
// process hover effect
const $processContainer = $(".h7-process-inner");
if ($processContainer.length) {
const $processItems = $processContainer.find(".h7-process-item");
const $processLineActive = $processContainer.find(".process-line-active");
// add active class to item
if ($processItems.length) {
const totalPortion = 100 / $processItems.length;
$processLineActive.css({
left: "0",
top: "0",
});
// Activate the first item by default
$processItems.removeClass("active");
$processItems.eq(0).addClass("active");
$processLineActive.css("top", `0%`);
$processItems.each(function (idx) {
$(this).on("mouseenter", function () {
$processItems.removeClass("active");
$processLineActive.css("top", `${totalPortion * idx}%`);
$(this).addClass("active");
});
});
}
}
}
// process style 3
let processWrapper8 = $scope.find(".h8-process-inner");
if (processWrapper8.length > 0) {
// process hover effect
const $processContainer8 = $(".h8-process-inner");
if ($processContainer8.length) {
const $processItems8 = $processContainer8.find(".process-item");
const $processLineActive8 = $processContainer8.find(".process-line-active");
// add active class to item
if ($processItems8.length) {
const totalPortion = 100 / $processItems8.length;
$processLineActive8.css({
left: "0",
top: "0",
});
// Activate the first item by default
$processItems8.removeClass("active");
$processItems8.eq(0).addClass("active");
$processLineActive8.css("left", `0%`);
$processItems8.each(function (idx) {
$(this).on("mouseenter", function () {
$processItems8.removeClass("active");
$processLineActive8.css("left", `${totalPortion * idx}%`);
$(this).addClass("active");
});
});
}
}
}
});
// tj-advanced-tab
elementorFrontend.hooks.addAction("frontend/element_ready/tj-advanced-tab.default", function ($scope, $) {
let wrapper = $scope.find(".h6-team-wrapper");
let teamSlider = $scope.find(".team-tab-slider");
let tabs = $scope.find(".h6-tab");
let tabsContent = $scope.find(".h6-tab-content");
if (wrapper.length > 0) {
let sliderID = teamSlider.attr("id");
let team = new Swiper(`#${sliderID}`, {
slidesPerView: 1,
spaceBetween: 24,
loop: false,
speed: 1500,
breakpoints: {
320: {
spaceBetween: 15,
slidesPerView: 2.5,
},
576: {
slidesPerView: 3.5,
},
768: {
slidesPerView: 4.2,
},
1024: {
slidesPerView: 5.5,
},
1200: {
slidesPerView: 6,
},
},
});
[...tabs].forEach(tab => {
tab.addEventListener("click", () => {
[...tabs].forEach(t => t.classList.remove("active"));
[...tabsContent].forEach(c => c.classList.remove("active"));
tab.classList.add("active");
const index = tab.getAttribute("data-index");
document.getElementById("tab-" + index).classList.add("active");
});
});
}
});
// tj-video-info
elementorFrontend.hooks.addAction("frontend/element_ready/tj-video-info.default", function ($scope, $) {
let videoPopup = $scope.find(".video-popup");
if (videoPopup.length > 0) {
new VenoBox({
selector: ".video-popup",
numeration: true,
spinner: "pulse",
});
}
});
// home 8 latest post
elementorFrontend.hooks.addAction("frontend/element_ready/tj-latest-posts.default", function ($scope, $) {
let h8BlogWrap = $scope.find(".h8-blog-wrapper");
if (h8BlogWrap.length > 0) {
$(".h8-blog-item .blog-images").on("mouseover", function () {
$(this).parent(".h8-blog-item").addClass("active").siblings().removeClass("active");
});
}
});
// home 9 hero banner
elementorFrontend.hooks.addAction("frontend/element_ready/tj-hero-banner.default", function ($scope, $) {
let marquee9 = $scope.find(".h9-hero-marquee-slider");
if (marquee9.length > 0) {
const marqueeId = marquee9.attr("id");
var marqueeSlider = new Swiper(`#${marqueeId}`, {
slidesPerView: "auto",
spaceBetween: 0,
freemode: true,
centeredSlides: true,
loop: true,
speed: 8000,
allowTouchMove: false,
autoplay: {
delay: 1,
disableOnInteraction: true,
},
});
}
// Initialize Chart.js pie chart
const ctx = $scope.find(".tj-pie-chart");
if (ctx.length > 0 && typeof Chart !== "undefined") {
ctx.each(function () {
const ctxSingle = this;
// Get data-color and sanitize
let bgColorsAttr = ctxSingle.getAttribute("data-color");
// Fix: support comma-separated or JSON-like string
let backgroundColors = ["#f7f7f7", "#f7f7f7", "#0075ff"];
if (bgColorsAttr) {
try {
// Try to parse as JSON first (if it's like '["#fff","#000"]')
if (bgColorsAttr.trim().startsWith("[")) {
backgroundColors = JSON.parse(bgColorsAttr);
} else {
// Fallback to comma-separated string
backgroundColors = bgColorsAttr.split(",").map(c => c.trim().replace(/^['"]|['"]$/g, ""));
}
} catch (e) {
console.warn("Invalid data-color format", e);
}
}
const data = {
datasets: [
{
label: "47",
data: [20, 12, 15],
backgroundColor: backgroundColors,
borderWidth: 0,
spacing: 4,
hoverOffset: 0,
},
],
};
const options = {
cutout: "60%",
};
new Chart(ctxSingle, {
type: "doughnut",
data,
options,
});
});
}
// end
});
elementorFrontend.hooks.addAction("frontend/element_ready/tj-accordion.default", function ($scope, $) {
let accordionItem = $scope.find(".tj-faq-item");
if (accordionItem.length > 0) {
$(".tj-faq-item button").on("click", function () {
if ($(this).parent().hasClass("active")) {
$(this).parent().removeClass("active");
} else {
$(this).parent().siblings().removeClass("active");
$(this).parent().addClass("active");
}
});
}
});
});
})(jQuery);