"use strict"; (function ($) { $(window).on("elementor/frontend/init", () => { elementorFrontend.hooks.addAction( "frontend/element_ready/king-addons-magazine-grid.default", ($scope) => { elementorFrontend.elementsHandler.addHandler( elementorModules.frontend.handlers.Base.extend({ onInit() { const $element = this.$element; const $grid = $element.find(".king-addons-magazine-grid-wrap"); const slickSettings = $grid.attr("data-slick"); const slideEffect = $grid.attr("data-slide-effect"); // Initialize Slick if settings exist. if (typeof slickSettings !== "undefined" && slickSettings !== false) { $grid.slick({ fade: slideEffect === "fade" }); } // Make grid visible once the document is ready. $(document).ready(() => $grid.css("opacity", 1)); // --- Overlay Link Handling --- const $mediaWrap = $grid.find(".king-addons-grid-media-wrap"); if ( $mediaWrap.attr("data-overlay-link") === "yes" && !$("body").hasClass("elementor-editor-active") ) { $mediaWrap.css("cursor", "pointer").on("click", function (event) { const targetClass = event.target.className; if ( targetClass.includes("inner-block") || targetClass.includes("king-addons-cv-inner") || targetClass.includes("king-addons-grid-media-hover") ) { event.preventDefault(); const itemUrl = $(this) .find(".king-addons-grid-media-hover-bg") .attr("data-url"); const $link = $grid.find(".king-addons-grid-item-title a"); if ($link.length && itemUrl) { try { const url = new URL(itemUrl); const allowedProtocols = ["http:", "https:"]; if (allowedProtocols.includes(url.protocol)) { const safeUrl = url.href; if ($link.attr("target") === "_blank") { window.open(safeUrl, "_blank").focus(); } else { window.location.href = safeUrl; } } else { // console.error("Invalid URL scheme:", url.protocol); } } catch (e) { // console.error("Invalid URL:", itemUrl); } } } }); } // --- Sharing Trigger Handling --- const $sharingTrigger = $element.find(".king-addons-sharing-trigger"); if ($sharingTrigger.length) { const $sharingInner = $element.find(".king-addons-post-sharing-inner"); let totalWidth = 5; $sharingInner .first() .find("a") .each(function () { const $link = $(this); totalWidth += $link.outerWidth() + parseInt($link.css("margin-right"), 10); }); const sharingMargin = parseInt($sharingInner.find("a").css("margin-right"), 10); const direction = $sharingTrigger.attr("data-direction"); switch (direction) { case "left": $sharingInner.css({ width: `${totalWidth}px`, left: `-${sharingMargin + totalWidth}px` }); break; case "right": $sharingInner.css({ width: `${totalWidth}px`, right: `-${sharingMargin + totalWidth}px` }); break; case "top": $sharingInner.find("a").css({ "margin-right": "0", "margin-top": `${sharingMargin}px` }); $sharingInner.css({ top: `-${sharingMargin}px`, left: "50%", "-webkit-transform": "translate(-50%, -100%)", transform: "translate(-50%, -100%)" }); break; case "bottom": $sharingInner.find("a").css({ "margin-right": "0", "margin-bottom": `${sharingMargin}px` }); $sharingInner.css({ bottom: `-${sharingMargin}px`, left: "50%", "-webkit-transform": "translate(-50%, 100%)", transform: "translate(-50%, 100%)" }); break; } // Helper function to toggle sharing visibility. const toggleSharing = ($inner) => { const $links = $inner.find("a"); if ($inner.css("visibility") === "hidden") { $inner.css("visibility", "visible"); $links.css({ opacity: 1, top: 0 }); setTimeout(() => $links.addClass("king-addons-no-transition-delay"), $links.length * 100); } else { $links.removeClass("king-addons-no-transition-delay").css({ opacity: 0, top: "-5px" }); setTimeout(() => $inner.css("visibility", "hidden"), $links.length * 100); } }; if ($sharingTrigger.attr("data-action") === "click") { $sharingTrigger.on("click", function () { toggleSharing($(this).next()); }); } else { $sharingTrigger.on("mouseenter", function () { const $inner = $(this).next(); $inner.css("visibility", "visible"); $inner.find("a").css({ opacity: 1, top: 0 }); setTimeout( () => $inner.find("a").addClass("king-addons-no-transition-delay"), $inner.find("a").length * 100 ); }); $element.find(".king-addons-grid-item-sharing").on("mouseleave", function () { const $inner = $(this).find(".king-addons-post-sharing-inner"); $inner.find("a").removeClass("king-addons-no-transition-delay").css({ opacity: 0, top: "-5px" }); setTimeout(() => $inner.css("visibility", "hidden"), $inner.find("a").length * 100); }); } } // --- Post Like Button Handling --- const $likeButton = $element.find(".king-addons-post-like-button"); if ($likeButton.length) { $likeButton.on("click", function () { const $btn = $(this); const postId = $btn.attr("data-post-id"); if (postId !== "") { $.ajax({ type: "POST", url: $btn.attr("data-ajax"), data: { action: "king_addons_likes_init", post_id: postId, nonce: $btn.attr("data-nonce") }, beforeSend: () => $btn.fadeTo(500, 0.5), success(response) { const iconClass = $btn.attr("data-icon"); let countHTML = response.count; if (!countHTML.replace(/<\/?[^>]+(>|$)/g, "")) { countHTML = `${$btn.attr("data-text")}`; if (!$btn.hasClass("king-addons-likes-zero")) { $btn.addClass("king-addons-likes-zero"); } } else { $btn.removeClass("king-addons-likes-zero"); } if ($btn.hasClass("king-addons-already-liked")) { $btn.prop("title", "Like") .removeClass("king-addons-already-liked") .html(`${countHTML}`); } else { $btn.prop("title", "Unlike") .addClass("king-addons-already-liked") .html(`${countHTML}`); } $btn.fadeTo(500, 1); } }); } return false; }); } } }), { $element: $scope } ); } ); }); })(jQuery);