PluginProbe
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder / 51.1.49
King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder v51.1.49
51.1.83 51.1.82 51.1.81 51.1.79 51.1.78 51.1.77 51.1.76 51.1.74 51.1.75 51.1.65 51.1.64 51.1.63 trunk 51.1.14 51.1.2 51.1.35 51.1.36 51.1.37 51.1.38 51.1.39 51.1.44 51.1.45 51.1.46 51.1.47 51.1.49 All 37 releases
king-addons / includes / widgets / Quick_Card_Slider / script.js

script.js in King Addons for Elementor – 80+ Elementor Widgets, 4 000+ Elementor Templates, WooCommerce, Mega Menu, Popup Builder 51.1.49, at includes/widgets/Quick_Card_Slider/script.js

101 lines 3.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 "use strict";
2
3 (function ($) {
4 const parseNumber = (value, fallback) => {
5 const number = parseInt(value, 10);
6 return Number.isFinite(number) ? number : fallback;
7 };
8
9 const initCardSlider = ($scope) => {
10 const container = $scope[0]?.querySelector(".king-addons-card-slider__track");
11
12 if (!container || typeof Swiper === "undefined") {
13 return;
14 }
15
16 const settings = container.dataset;
17
18 const slidesPerView = parseNumber(settings.slidesPerView, 1);
19 const slidesPerViewTablet = parseNumber(settings.slidesPerViewTablet, slidesPerView);
20 const slidesPerViewMobile = parseNumber(settings.slidesPerViewMobile, slidesPerViewTablet);
21 const spaceBetween = parseNumber(settings.spaceBetween, 20);
22 const speed = parseNumber(settings.speed, 600);
23
24 const config = {
25 slidesPerView: slidesPerView,
26 spaceBetween: spaceBetween,
27 speed: speed,
28 loop: settings.loop === "yes",
29 breakpoints: {
30 0: { slidesPerView: slidesPerViewMobile },
31 768: { slidesPerView: slidesPerViewTablet },
32 1024: { slidesPerView: slidesPerView },
33 },
34 };
35
36 if (settings.autoplay === "yes") {
37 config.autoplay = {
38 delay: parseNumber(settings.autoplayDelay, 3200),
39 disableOnInteraction: false,
40 };
41 }
42
43 if (settings.pagination === "yes") {
44 config.pagination = {
45 el: container.querySelector(".king-addons-card-slider__pagination"),
46 clickable: true,
47 };
48 }
49
50 if (settings.navigation === "yes") {
51 config.navigation = {
52 nextEl: $scope[0].querySelector(".king-addons-card-slider__arrow--next"),
53 prevEl: $scope[0].querySelector(".king-addons-card-slider__arrow--prev"),
54 };
55 }
56
57 const isEditMode = elementorFrontend.isEditMode();
58 const swiperInstance = new Swiper(container, config); // eslint-disable-line no-new
59
60 // Card-level link handling: only bind on frontend to avoid blocking editor selection.
61 if (!isEditMode) {
62 const slides = $scope[0].querySelectorAll(".king-addons-card-slider__slide[data-card-link]");
63 slides.forEach((slide) => {
64 slide.addEventListener("click", (event) => {
65 // If clicking a real link inside, respect that link.
66 if (event.target.closest("a")) {
67 return;
68 }
69
70 const url = slide.dataset.cardLink;
71 if (!url) {
72 return;
73 }
74
75 const target = slide.dataset.cardLinkTarget || "_self";
76 window.open(url, target);
77 });
78 });
79 }
80
81 return swiperInstance;
82 };
83
84 $(window).on("elementor/frontend/init", function () {
85 elementorFrontend.hooks.addAction(
86 "frontend/element_ready/king-addons-quick-card-slider.default",
87 function ($scope) {
88 initCardSlider($scope);
89 }
90 );
91 });
92 })(jQuery);
93
94
95
96
97
98
99
100
101