1// to enable the enqueue of this optional JS file, 2// you'll have to uncomment a row in the functions.php file 3// just read the comments in there mate 4 5document.addEventListener('DOMContentLoaded', function () { 6 jQuery(function ($) { 7 8 // SLIDER SCROLL ORIZZONTALE 9 $(document).ready(function () { 10 $("div[draggable='true']").not(".partial-view").each(function (index, item) { 11 bindHorizontalSlider({ $slider: $(item) }); 12 }); 13 14 centerSlider(); 15 setScrollBgPosition(); 16 17 $(".search-opener").on("click", function () { 18 $(".search-wrapper").addClass("open"); 19 $(".search-wrapper input").focus(); 20 $(".search-wrapper .bg-white-to-transparent").on("click", function () { 21 $(".search-wrapper").removeClass("open"); 22 $(".search-wrapper .bg-white-to-transparent").off("click"); 23 }); 24 }) 25 26 $("a.switch-photo").on("mouseover", function () { 27 $target = $($(this).data("target")); 28 $nextImg = $target.find("img.switch-hidden"); 29 $prevImg = $target.find("img").not($nextImg); 30 $nextImg.removeClass("switch-hidden").addClass("switch-visible"); 31 $prevImg.removeClass("switch-visible").addClass("switch-hidden"); 32 }).on("mouseout", function () { 33 $target = $($(this).data("target")); 34 $prevImg = $target.find("img.switch-hidden"); 35 $nextImg = $target.find("img").not($prevImg); 36 $prevImg.removeClass("switch-hidden").addClass("switch-visible"); 37 $nextImg.removeClass("switch-visible").addClass("switch-hidden"); 38 }); 39 }); 40 41 var centerTimeout; 42 $(window).on("resize", function () { 43 clearTimeout(centerTimeout); 44 centerTimeout = setTimeout(function () { 45 centerSlider(); 46 }, 500); 47 }); 48 49 function centerSlider() { 50 $(".centered-slider").each(function () { 51 padding = ($(window).width() - $(".container").width()) / 2; 52 $(this).css("padding", "0 calc(" + padding + "px - var(--bs-gutter-x) * .5)"); 53 }); 54 } 55 56 function bindHorizontalSlider({ 57 navigateButtonClass = "navigate-slider", 58 leftButtonClass = "navigate-left", 59 rightButtonClass = "navigate-right", 60 dotButtonClass = "navigate-dots", 61 itemClass = "slider-item", 62 $slider = $("div[draggable='true']"), 63 step = 1 // non utilizzato 64 }) { 65 navigateButtonClass = $slider.data("navigateclass") != undefined ? $slider.data("navigateclass") : navigateButtonClass; 66 var $leftButton = $slider.parent().find("." + navigateButtonClass + " ." + leftButtonClass); 67 var $rightButton = $slider.parent().find("." + navigateButtonClass + " ." + rightButtonClass); 68 var $navigateDotsContainer = $slider.parent().find("." + navigateButtonClass + " ." + dotButtonClass); 69 if ($slider.data("autoslide") != undefined) { 70 time = $slider.data("autoslide"); 71 setInterval(function () { 72 if ($rightButton.hasClass("invisible")) { 73 $navigateDotsContainer.find("a").eq(0).trigger("click"); 74 } else { 75 $rightButton.trigger("click"); 76 } 77 }, time); 78 } 79 $slider.parent().on("click", "." + navigateButtonClass + " a", function (e) { 80 e.preventDefault(); 81 e.stopPropagation(); 82 if ($(this).hasClass("disabled")) return; 83 $target = $($(this).data("target")); 84 if ($target != undefined) { 85 var left = parseFloat($target.scrollLeft()); 86 var column_width = $target.find("." + itemClass).eq(0).outerWidth(); 87 if ($(this).hasClass(leftButtonClass)) { 88 $target.animate({ scrollLeft: left - column_width }, 300, function () { 89 if (parseInt($target.scrollLeft) >= 0) $leftButton.addClass("disabled"); 90 else $leftButton.removeClass("disabled"); 91 findOverflows($slider.find(" ." + itemClass)); // DA COMPLETARE , $slider.find("." + itemClass).index(this)); 92 }); 93 } else if ($(this).hasClass(rightButtonClass)) { 94 $rightButton.addClass("disabled"); 95 $target.animate({ scrollLeft: left + column_width }, 300, function () { 96 $rightButton.removeClass("disabled"); 97 findOverflows($slider.find(" ." + itemClass)); 98 }); 99 } else if ($(this).parent().hasClass(dotButtonClass)) { 100 index = $navigateDotsContainer.find("a").index(this); 101 $leftButton.addClass("disabled"); 102 $rightButton.addClass("disabled"); 103 $target.animate({ scrollLeft: column_width * index }, 300, function () { 104 $leftButton.removeClass("disabled"); 105 $rightButton.removeClass("disabled"); 106 findOverflows($slider.find(" ." + itemClass), index); 107 }); 108 } else { 109 location.href = e.target.href; // Click su vedi tutti 110 } 111 } 112 }); 113 $(window).on("resize", function () { 114 findOverflows($slider.find(" ." + itemClass)); 115 }); 116 117 if ($slider != undefined) { 118 let isDown = false;
119 let startX, startY, scrollLeft, scrollTop, startClickX, startClickY; 120 $slider.on("click", (e) => { e.preventDefault(); }); 121 setTimeout(function () { findOverflows($slider.find(" ." + itemClass)); }, 100); 122 ['mousedown', 'touchstart'].forEach((event) => { 123 $slider[0].addEventListener(event, (e) => { 124 if (e.type == "mousedown") { 125 e.preventDefault(); 126 e.stopPropagation(); 127 } 128 isDown = true; 129 const pageX = e.pageX != undefined ? e.pageX : e.changedTouches[0].pageX; // su Android non esiste e.pageX 130 const pageY = e.pageY != undefined ? e.pageY : e.changedTouches[0].pageY; // su Android non esiste e.pageY 131 startClickX = pageX; 132 startClickY = pageY; 133 startX = pageX - $slider[0].offsetLeft; 134 startY = pageX - $slider[0].offsetLeft; 135 scrollLeft = $slider[0].scrollLeft; 136 scrollTop = window.scrollY; 137 }); 138 }); 139 ['mouseup', 'touchend', 'mouseleave'].forEach((event) => { 140 $slider[0].addEventListener(event, (e) => { 141 if (e.type == "mousedown" || e.type == "mouseleave") { 142 e.preventDefault(); 143 e.stopPropagation(); 144 } 145 isDown = false; 146 const pageX = e.pageX != undefined ? e.pageX : e.changedTouches[0].pageX; // su Android non esiste e.pageX 147 if (pageX == startClickX) { 148 // se è un click su un link, "propago" manualmente l'evento 149 anchor = null; 150 if (e.target.tagName == "A") { 151 anchor = e.target; 152 } else { 153 anchor = $(e.target).parents("a")[0]; 154 } 155 if (anchor != undefined) { 156 if ($(anchor).attr("target") == "_blank") 157 window.open(anchor.href, "_blank"); 158 else location.href = anchor.href; 159 } 160 } 161 correctPosition($slider, itemClass, scrollLeft); 162 }); 163 }); 164 165 var resizeTimeout; 166 $(window).on("resize", function () { 167 clearTimeout(resizeTimeout); 168 resizeTimeout = setTimeout(function () { 169 correctPosition($slider, itemClass, scrollLeft); 170 }, 100); 171 }); 172 173 ['mousemove', 'touchmove'].forEach((event) => { 174 $slider[0].addEventListener(event, (e) => { 175 const pageX = e.pageX != undefined ? e.pageX : e.changedTouches[0].pageX; // su Android non esiste e.pageX 176 const pageY = e.pageY != undefined ? e.pageY : e.changedTouches[0].pageY; // su Android non esiste e.pageY 177 const x = pageX - $slider[0].offsetLeft; 178 const walkX = (x - startX); 179 if (!isDown) return true; 180 if (Math.abs(walkX) > 30) { 181 $slider[0].scrollLeft = scrollLeft - walkX; 182 e.preventDefault(); 183 e.stopPropagation(); 184 } 185 return true; 186 }); 187 }); 188 189 } 190 191 function correctPosition($slider, itemClass, scrollLeft) { 192 // correggo posizione dello scroll orizzontale 193 $item = $slider[0].querySelectorAll("." + itemClass)[0]; 194 if ($item != undefined) { 195 width = $slider[0].querySelectorAll("." + itemClass)[0].offsetWidth; 196 var positions = scrollLeft > $slider[0].scrollLeft ? Math.floor($slider[0].scrollLeft / width) : Math.ceil($slider[0].scrollLeft / width); 197 $slider.animate({ scrollLeft: positions * width }, 300, () => { 198 overflows = findOverflows($slider.find(" ." + itemClass), positions); 199 }); 200 } 201 } 202 203 // trova quanti elementi sono visibili, quanti precedenti e quanti successivi nello slider 204 function findOverflows($items, dotIndex = null) { 205 const documentWidth = document.documentElement.offsetWidth; 206 var prev = 0; 207 var next = 0; 208 var visible = 0; 209 var parentBox = $items[0].parentElement.getBoundingClientRect(); 210 211 $items.each(function (index, element) { 212 const box = element.getBoundingClientRect(); 213 if (box.left < parentBox.left) { 214 prev++; 215 } else if (box.right > parentBox.right) { 216 next++; 217 } else { 218 visible++; 219 } 220 }); 221 222 $leftButton.toggleClass("invisible", prev <= 0); 223 $rightButton.toggleClass("invisible", next <= 0); 224 dot = $navigateDotsContainer.find("a")[0]; 225 $(dot).removeClass("active"); 226 $navigateDotsContainer.html(""); 227 for (i = 1; i <= $items.length; i++) { 228 $navigateDotsContainer.append($(dot).clone()); 229 } 230 $navigateDotsContainer.find("a").eq(dotIndex == null ? Math.ceil(prev / visible) : dotIndex).addClass("active"); 231 232 return { prev: prev, next: next, visible: visible }; 233 } 234 } 235 236 window.addEventListener('scroll', function () { 237 setScrollBgPosition(); 238 }); 239 240 $(document).ready(function () { 241 $(document).on("click", "a.photo-carousel-open", function (e) { 242 e.preventDefault(); 243 $target = $(this).data("target"); 244 $($target + " .carousel-item.active").removeClass("active"); 245 $($target + " .carousel-item[data-index='" + $(this).data("index") + "']").addClass("active"); 246 $(".photo-carousel-wrapper").removeClass("d-none"); 247 $(".photo-carousel-wrapper")[0].addEventListener('slide.bs.carousel', event => { 248 if ($(".carousel-item.active iframe").length > 0) 249 $(".carousel-item.active iframe")[0].contentWindow.postMessage('{"event":"command","func":"stopVideo","args":""}', '*'); 250 }); 251 }); 252 253 $(document).on("click", "a.photo-carousel-close", function (e) { 254 e.preventDefault(); 255 if ($(".carousel-item.active iframe").length > 0) { 256 $(".carousel-item.active iframe")[0].contentWindow.postMessage('{"event":"command","func":"stopVideo","args":""}', '*'); 257 } 258 $(".photo-carousel-wrapper").addClass("d-none"); 259 }); 260 }); 261 }); 262 function setScrollBgPosition() { 263 jQuery('.mask-background').each(function (index, element) { 264 var position = element.getBoundingClientRect(); 265 266 // checking for partial visibility 267 if (position.top < window.innerHeight && position.bottom >= 0) { 268 jQuery(element).css("top", (- (position.top + position.bottom) / 2 / window.innerHeight * 20) + "%"); 269 } 270 }); 271 } 272 273}); 274
275function lazyBackground($view) { 276 lazyBackgrounds = $view.find(".lazy-bg"); 277 if ("IntersectionObserver" in window) { 278 let lazyBackgroundObserver = new IntersectionObserver(function (entries, observer) { 279 entries.forEach(function (entry) { 280 if (entry.isIntersecting) { 281 entry.target.classList.remove("lazy-bg"); 282 lazyBackgroundObserver.unobserve(entry.target); 283 } 284 }); 285 }); 286 287 lazyBackgrounds.each(function (index, lazyBackground) { 288 lazyBackgroundObserver.observe(lazyBackground); 289 }); 290 } 291} 292 293function unsubscribe() { 294 jQuery(".result").attr("class", "result alert alert-info").html("<i class=\"fa-solid fa-cog fa-spin\"></i> Operazione in corso..."); 295 newsletter = document.querySelector("#newsletter").checked; 296 commercial = document.querySelector("#commercial").checked; 297 candidateid = document.querySelector("#CANDIDATEID").value; 298 candidateuniqueidentifier = document.querySelector("#CANDIDATEUNIQUEIDENTIFIER").value; 299 buttonSubmit = document.querySelector("#login-form button[type='submit']"); 300 buttonSubmit.disabled = true; 301 jQuery.ajax({ 302 url: '/wp-json/newsletter/unsubscribe', 303 method: "POST", 304 dataType: "json", 305 beforeSend: function (xhr) { 306 xhr.setRequestHeader('X-WP-Nonce', wpApiSettings.nonce); 307 }, 308 data: { 309 candidateid: candidateid, 310 candidateuniqueidentifier: candidateuniqueidentifier, 311 newsletter: newsletter, 312 commercial: commercial 313 }, 314 success: function (data) { 315 if (data == "OK") 316 jQuery(".result").attr("class", "result alert alert-success").html("Disiscrizione avvenuta con successo."); 317 else 318 jQuery(".result").attr("class", "result alert alert-warning").html(data); 319 buttonSubmit.disabled = false; 320 }, 321 error: function (data) { 322 jQuery(".result").attr("class", "result alert alert-danger").html(JSON.parse(data.responseText).message); 323 buttonSubmit.disabled = false; 324 } 325 }); 326}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.