1jQuery(document).ready(function(){ 2 3 // the same height for all blocks / blog module, grid style 4 var maxHeightBlock = 0; 5 jQuery('.et_pb_blog_grid .et_pb_post').each(function() {maxHeightBlock = Math.max(maxHeightBlock, jQuery(this).height()); }).height(maxHeightBlock); 6 7}); 8 9/* ========================================================================== 10 Menu Toggle 11 ========================================================================== */ 12jQuery(function($){ 13$('.slide-in-open').click(function(){ 14 15 $('.et_pb_searchform input[name="et_pb_include_pages"]').remove(); 16 $('.et_pb_searchform input[name="et_pb_include_posts"]').remove(); 17 $('.et_pb_searchform input[name="et_pb_searchform_submit"]').remove(); 18 19$(this).toggleClass('open'); 20$('.slide-in-menu-container').toggleClass('slide-in-menu'); 21$('body').toggleClass('menu-open'); 22}); 23}); 24 25 26 27jQuery(window).load(function () { 28 setTimeout(function () { 29 setup_collapsible_submenus(); 30 }, 981); 31 32}); 33 34 35function setup_collapsible_submenus() { 36 jQuery('.et_mobile_menu .first-level ul.sub-menu li').each(function(e){ 37 jQuery(this).addClass('second-level'); 38 }) 39 var clicked = 0 40 var FirstLevel = jQuery('.et_mobile_menu .first-level > a'); 41 FirstLevel.off('click').click(function () { 42 43 var $this = jQuery(this); 44 if (!$this.siblings('.sub-menu').length) { 45 return true; 46 } 47 48 jQuery(this).attr('href', '#'); 49 if (jQuery(this).attr('class') == 'icon-switch') { 50 jQuery(this).parent().children().children().removeClass('reveal-items') 51 jQuery(this).removeClass('icon-switch') 52 } else { 53 if (FirstLevel.parent().children().children().hasClass('reveal-items')) { 54 FirstLevel.parent().children().children().removeClass('reveal-items') 55 FirstLevel.removeClass('icon-switch') 56 } 57 58 if (jQuery(this).parent().children().children().hasClass('reveal-items')) { 59 jQuery(this).parent().children().children().removeClass('reveal-items') 60 jQuery(this).removeClass('icon-switch') 61 } else { 62 jQuery(this).parent().children().children().addClass('reveal-items') 63 jQuery(this).addClass('icon-switch') 64 } 65 } 66 return false 67 }) 68} 69 70 71 72 73jQuery(document).ready(function ($) { 74 $('.menu-img-1').addClass('active'); 75 76 $(document).on('mouseenter', '.first-level[class*="menu-hover-"]', function () { 77 78 $('[class*="menu-img-"]').removeClass('active'); 79 80 let classes = $(this).attr('class'); 81 let match = classes.match(/menu-hover-(\d+)/); 82 83 if (match) { 84 let index = match[1]; 85 $('.menu-img-' + index).addClass('active'); 86 } 87 }); 88}); 89 90 91/* ========================================================================== 92 language_switcher 93 ========================================================================== */ 94 95jQuery(document).ready(function(){ 96 var theLanguage = jQuery('html').attr('lang'); 97 98 99 100 jQuery('body').on('change','select#lang-switch',function(e){ 101 var selectedVal = jQuery(this).val(); 102 window.location.href = selectedVal; 103 return false; 104 }); 105 106}); 107 108 109/* ========================================================================== 110 slick 111 ========================================================================== */ 112 113 114jQuery('.whatson-slider').slick({ 115 slidesToShow: 1, 116 slidesToScroll: 1, 117 centerMode: false, 118 centerPadding: '0px', 119 autoplay: false, 120 autoplaySpeed: 700, 121 arrows:true, 122 dots: false, 123 pauseOnHover: true, 124 variableWidth: true, 125 nextArrow: '.whatson-slider-btn .custom-next-btn', 126 prevArrow: '.whatson-slider-btn .custom-prev-btn', 127 128 }); 129 130 131jQuery('.event-slider').on('init', function () { 132 jQuery(this).find('.slick-prev, .slick-next').wrapAll('<div class="event-nav-wrapper custom-slider-btn"></div>'); 133 }); 134jQuery('.event-slider').slick({ 135 slidesToShow: 1, 136 slidesToScroll: 1, 137 centerMode: true, 138 centerPadding: '0px', 139 autoplay: false, 140 autoplaySpeed: 700, 141 arrows:true, 142 dots: false, 143 pauseOnHover: true, 144 145 }); 146 147 148
149jQuery('.news-slider').on('init', function () { 150 jQuery(this).find('.slick-prev, .slick-next').wrapAll('<div class="news-nav-wrapper custom-slider-btn"></div>'); 151 }); 152jQuery('.news-slider').slick({ 153 slidesToShow: 1, 154 slidesToScroll: 1, 155 centerMode: true, 156 centerPadding: '0px', 157 autoplay: false, 158 autoplaySpeed: 700, 159 arrows:true, 160 dots: false, 161 pauseOnHover: true, 162 163 }); 164 165 166 167jQuery('.hp-slider-row > .et_pb_column').on('init', function () { 168 jQuery(this).find('.slick-prev, .slick-next').wrapAll('<div class="slider-nav-wrapper"></div>'); 169 }); 170 171jQuery('.hp-slider-row > .et_pb_column').slick({ 172 slidesToShow: 1, 173 slidesToScroll: 1, 174 centerMode: true, 175 centerPadding: '0px', 176 autoplay: true, 177 autoplaySpeed: 2000, 178 arrows:true, 179 dots: false, 180 pauseOnHover: true, 181 182 }); 183 184 185 186jQuery('.hp-gallery-ct-slider').slick({ 187 slidesToShow: 1, 188 slidesToScroll: 1, 189 centerMode: true, 190 centerPadding: '0px', 191 autoplay: false, 192 autoplaySpeed: 700, 193 arrows:true, 194 dots: false, 195 pauseOnHover: true, 196 asNavFor: '.hp-gallery-image-slider', 197 nextArrow: '.hp-gallery-slider-btn .custom-next-btn', 198 prevArrow: '.hp-gallery-slider-btn .custom-prev-btn', 199 200 }); 201 202 203jQuery('.hp-gallery-image-slider').slick({ 204 slidesToShow: 1, 205 slidesToScroll: 1, 206 centerMode: true, 207 centerPadding: '0px', 208 autoplay: false, 209 autoplaySpeed: 700, 210 arrows:false, 211 dots: false, 212 pauseOnHover: true, 213 asNavFor: '.hp-gallery-ct-slider', 214 215 216 }); 217 218 219jQuery('.collezioni-text-slider').slick({ 220 slidesToShow: 1, 221 slidesToScroll: 1, 222 centerMode: true, 223 centerPadding: '0px', 224 autoplay: false, 225 autoplaySpeed: 700, 226 arrows:true, 227 dots: false, 228 pauseOnHover: true, 229 asNavFor: '.collezioni-image-sldier, .collezioni-bg-image-slider .et_pb_column', 230 nextArrow: '.collezioni-slider-btn .custom-next-btn', 231 prevArrow: '.collezioni-slider-btn .custom-prev-btn', 232 233 }); 234 235 236 237jQuery('.collezioni-image-sldier').slick({ 238 slidesToShow: 1, 239 slidesToScroll: 1, 240 centerMode: true, 241 centerPadding: '0px', 242 autoplay: false, 243 autoplaySpeed: 700, 244 arrows:false, 245 dots: false, 246 pauseOnHover: true, 247 asNavFor: '.collezioni-text-slider, .collezioni-bg-image-slider .et_pb_column', 248 249 }); 250 251jQuery('.collezioni-bg-image-slider .et_pb_column').slick({ 252 slidesToShow: 1, 253 slidesToScroll: 1, 254 centerMode: true, 255 centerPadding: '0px', 256 autoplay: false, 257 autoplaySpeed: 700, 258 arrows:false, 259 dots: false, 260 pauseOnHover: true, 261 asNavFor: '.collezioni-text-slider, .collezioni-image-sldier', 262 263 }); 264 265 266var $relatedSlider = jQuery('.related-work-slider'); 267$relatedSlider.slick({ 268 slidesToShow: 4, 269 slidesToScroll: 1, 270 centerMode: false, 271 centerPadding: '0px', 272 autoplay: false, 273 autoplaySpeed: 700, 274 arrows: true, 275 dots: false, 276 pauseOnHover: true, 277 nextArrow: '.related-slider-btn .custom-next-btn', 278 prevArrow: '.related-slider-btn .custom-prev-btn', 279 280 responsive: [ 281 { 282 breakpoint: 1199, 283 settings: { 284 slidesToShow: 3, 285 } 286 }, 287 { 288 breakpoint: 767, 289 settings: { 290 slidesToShow: 2, 291 } 292 } 293 294 ] 295 296}); 297 298 299jQuery(function () { 300 301 if (jQuery(".timeline-slider-row")[0]) { 302 303 var isMobile = function () { 304 return jQuery(window).width() <= 767; 305 }; 306 307 function getSlickOptions() { 308 if (isMobile()) { 309 return { 310 slidesToShow: 2, 311 slidesToScroll: 1, 312 infinite: false, 313 arrows: false, 314 dots: false, 315 vertical: true, 316 verticalSwiping: true 317 }; 318 } 319 return { 320 slidesToShow: 5, 321 slidesToScroll: 1, 322 infinite: false,
323 arrows: false, 324 dots: false, 325 variableWidth: true, 326 }; 327 } 328 329 function updateArrows($s, prev, next, mprev, mnext) { 330 var currentSlide = $s.slick('slickCurrentSlide'); 331 var slideCount = $s.slick('getSlick').slideCount; 332 var slidesToShow = $s.slick('getSlick').options.slidesToShow; 333 var atStart = currentSlide === 0; 334 var atEnd = currentSlide >= slideCount - slidesToShow; 335 jQuery(prev).toggleClass('inactive', atStart); 336 jQuery(next).toggleClass('inactive', atEnd); 337 jQuery(mprev).toggleClass('inactive', atStart); 338 jQuery(mnext).toggleClass('inactive', atEnd); 339 } 340 341 function initSlider(sel, prev, next, mprev, mnext) { 342 var $s = jQuery(sel); 343 $s.slick(getSlickOptions()); 344 345 jQuery(prev).on('click', function () { 346 $s.slick('slickPrev'); 347 }); 348 jQuery(next).on('click', function () { 349 $s.slick('slickNext'); 350 }); 351 jQuery(mprev).on('click', function () { 352 $s.slick('slickPrev'); 353 }); 354 jQuery(mnext).on('click', function () { 355 $s.slick('slickNext'); 356 }); 357 358 $s.on('afterChange', function () { 359 updateArrows($s, prev, next, mprev, mnext); 360 }); 361 updateArrows($s, prev, next, mprev, mnext); 362 363 $s.on('click', '.timeline-slide-item', function () { 364 var $item = jQuery(this); 365 var wasActive = $item.hasClass('active'); 366 $s.find('.timeline-slide-item').removeClass('active'); 367 if (!wasActive) { 368 $item.addClass('active'); 369 } 370 }); 371 } 372 373 initSlider('.slider-terra', '#prev-terra', '#next-terra', '#mprev-terra', '#mnext-terra'); 374 initSlider('.slider-primo', '#prev-primo', '#next-primo', '#mprev-primo', '#mnext-primo'); 375 376 function moveButtonsToAccordion() { 377 jQuery('.timeline-tab-content').each(function () { 378 var $content = jQuery(this); 379 var tab = $content.attr('id').replace('tab-', ''); 380 if (!$content.children('.timeline-accordion-body').length) { 381 $content.children().wrapAll('<div class="timeline-accordion-body"></div>'); 382 } 383 jQuery('.timeline-tab-btn[data-tab="' + tab + '"]').prependTo($content); 384 }); 385 } 386 387 function moveButtonsToTabsRow() { 388 jQuery('.timeline-tabs-row').append( 389 jQuery('.timeline-tab-btn[data-tab="primo"]'), 390 jQuery('.timeline-tab-btn[data-tab="terra"]') 391 ); 392 } 393 394 function syncAccordionOpen() { 395 jQuery('.timeline-tab-content').removeClass('accordion-open'); 396 jQuery('.timeline-tab-btn').removeClass('active'); 397 jQuery('.timeline-tab-content.active').addClass('accordion-open'); 398 jQuery('.timeline-tab-content.active > .timeline-tab-btn').addClass('active'); 399 } 400 401 if (isMobile()) { 402 moveButtonsToAccordion(); 403 syncAccordionOpen(); 404 } 405 406 var prevMobile = isMobile(); 407 jQuery(window).on('resize', function () { 408 var nowMobile = isMobile(); 409 if (nowMobile !== prevMobile) { 410 prevMobile = nowMobile; 411 if (nowMobile) { 412 moveButtonsToAccordion(); 413 syncAccordionOpen(); 414 } else { 415 moveButtonsToTabsRow(); 416 } 417 ['.slider-terra', '.slider-primo'].forEach(function (sel) { 418 var $s = jQuery(sel); 419 if ($s.hasClass('slick-initialized')) { 420 $s.slick('unslick'); 421 $s.slick(getSlickOptions()); 422 } 423 }); 424 425 updateArrows(jQuery('.slider-terra'), '#prev-terra', '#next-terra', '#mprev-terra', '#mnext-terra'); 426 updateArrows(jQuery('.slider-primo'), '#prev-primo', '#next-primo', '#mprev-primo', '#mnext-primo'); 427 } 428 }); 429 430 jQuery('.timeline-tab-btn').on('click', function () { 431 var tab = jQuery(this).data('tab'); 432 var $content = jQuery('#tab-' + tab); 433 if (isMobile()) { 434 var willOpen = !$content.hasClass('accordion-open'); 435 jQuery('.timeline-tab-btn').removeClass('active'); 436 jQuery('.timeline-tab-content').removeClass('active accordion-open'); 437 if (willOpen) { 438 jQuery(this).addClass('active'); 439 $content.addClass('active accordion-open'); 440 jQuery('.slider-' + tab).slick('setPosition'); 441 } 442 } else { 443 jQuery('.timeline-tab-btn').removeClass('active'); 444 jQuery(this).addClass('active'); 445 jQuery('.timeline-tab-content').removeClass('active'); 446 $content.addClass('active'); 447 jQuery('.slider-' + tab).slick('setPosition'); 448 } 449 }); 450 } 451}); 452 453 454function setWorkImageHeight() { 455 456 var maxHeight = 0; 457
458 jQuery('.work-grid .work-image').not('.work-list-grid .work-image').find('img').each(function () { 459 var imgHeight = jQuery(this).outerHeight(); 460 if (imgHeight > maxHeight) { 461 maxHeight = imgHeight; 462 } 463 464 }); 465 466 jQuery('.work-grid .work-image').not('.work-list-grid .work-image').height(maxHeight); 467 468} 469 470 // Run after images load 471 jQuery(window).on('load', function () { 472 setTimeout(function () { 473 setWorkImageHeight(); 474 }, 200); 475 }); 476 477 478 479 // Also run after slick initializes / changes 480 $relatedSlider.on('setPosition afterChange', function () { 481 setTimeout(function () { 482 setWorkImageHeight(); 483 }, 200); 484 }); 485 486 487 488 489jQuery('.hp-nav-ct-slider').slick({ 490 slidesToShow: 1, 491 slidesToScroll: 1, 492 centerMode: true, 493 centerPadding: '0px', 494 autoplay: false, 495 autoplaySpeed: 700, 496 arrows:true, 497 dots: false, 498 pauseOnHover: true, 499 asNavFor: '.hp-nav-image-slider', 500 nextArrow: '.strom-slider-btn .custom-next-btn', 501 prevArrow: '.strom-slider-btn .custom-prev-btn', 502 503 }); 504 505 506 507 var $slider = jQuery('.hp-nav-image-slider'); 508 $slider.slick({ 509 slidesToShow: 1, 510 slidesToScroll: 1, 511 centerMode: true, 512 centerPadding: '0px', 513 autoplay: false, 514 autoplaySpeed: 700, 515 arrows:false, 516 dots: false, 517 pauseOnHover: true, 518 asNavFor: '.hp-nav-ct-slider', 519 }); 520 521 522 523if (jQuery(window).width() < 980) { 524 var $stripSlider = jQuery('.horiz-column-strip'); 525 $stripSlider.slick({ 526 slidesToShow: 1, 527 centerMode: false, 528 centerPadding: '0px', 529 autoplay: false, 530 autoplaySpeed: 700, 531 arrows:true, 532 dots: false, 533 pauseOnHover: true, 534 variableWidth: true 535 }); 536} 537 538 539 540 541 542jQuery(document).ready(function ($) { 543 544 if ($(window).width() >= 980 && $('.hp-nav-image-slider').length) { 545 546 var zoomLevel = 1; 547 548 /* ----------- ADD LENS (once per slide) ----------- */ 549 550 function addLens() { 551 $slider.find('.et_pb_image').each(function () { 552 if (!$(this).find('.lens').length) { 553 $(this).append('<div class="lens"></div>'); 554 } 555 }); 556 } 557 558 /* ----------- SET INITIAL LENS (CENTER)----------- */ 559 560 function setInitialLens($wrapper) { 561 var $img = $wrapper.find('img'); 562 var $lens = $wrapper.find('.lens'); 563 if (!$img.length) 564 return; 565 if (!$img[0].complete) { 566 $img.on('load', function () { 567 setInitialLens($wrapper); 568 }); 569 return; 570 } 571 572 var imgSrc = $img.attr('src'); 573 var w = $img[0].naturalWidth || $img.width(); 574 var h = $img[0].naturalHeight || $img.height(); 575 576 var lensW = $lens.outerWidth(); 577 var lensH = $lens.outerHeight(); 578 579 var x = w / 2; 580 var y = h / 2; 581 582 $lens.css({ 583 display: 'block', 584 backgroundImage: "url('" + imgSrc + "')", 585 left: (x - lensW / 2) + 'px', 586 top: (y - lensH / 2) + 'px', 587 backgroundSize: (w * zoomLevel) + 'px ' + (h * zoomLevel) + 'px', 588 backgroundPosition: 589 '-' + ((x * zoomLevel) - lensW / 2) + 'px ' + 590 '-' + ((y * zoomLevel) - lensH / 2) + 'px' 591 }); 592 } 593 594 595 /* ----------- INIT ONLY ACTIVE SLIDE ----------- */ 596 597 function initLens() { 598 addLens(); 599 $slider.find('.slick-active.et_pb_image').each(function () { 600 setInitialLens($(this)); 601 }); 602 } 603 604 $slider.on('afterChange', function () { 605 requestAnimationFrame(function () { 606 requestAnimationFrame(function () { 607 initLens(); 608 }); 609 }); 610 }); 611 612 // Lazy load fix (Divi images) 613 $slider.on('lazyLoaded', function () { 614 setTimeout(function () { 615 initLens(); 616 }, 300); 617 }); 618 619 if ($slider.hasClass('slick-initialized')) { 620 initLens(); 621 } 622 623 var rafId = null; 624 var lastEvent = null; 625 var blurTimeout; 626 627 $slider.on('mousemove', '.et_pb_image', function (e) { 628 629 var $wrapper = $(this); 630 if (!$wrapper.closest('.slick-slide').hasClass('slick-active')) 631 return; 632 633 lastEvent = e; 634 if (rafId) 635 return; 636 637 rafId = requestAnimationFrame(function () { 638 var $img = $wrapper.find('img'); 639 $img.css('filter', 'blur(9px)'); 640 var $lens = $wrapper.find('.lens'); 641 642 if (!$img.length) { 643 rafId = null; 644 return; 645 } 646 647 var imgEl = $img[0]; 648 var rect = imgEl.getBoundingClientRect(); 649 650 var x = lastEvent.clientX - rect.left; 651 var y = lastEvent.clientY - rect.top; 652 653 var lensW = $lens.outerWidth(); 654 var lensH = $lens.outerHeight(); 655 656 var w = rect.width; 657 var h = rect.height; 658 659 x = Math.max(lensW / 2, Math.min(x, w - lensW / 2)); 660 y = Math.max(lensH / 2, Math.min(y, h - lensH / 2)); 661 662 // Move lens 663 $lens[0].style.left = (rect.left + x - lensW / 2 - $wrapper[0].getBoundingClientRect().left) + 'px'; 664 $lens[0].style.top = (rect.top + y - lensH / 2 - $wrapper[0].getBoundingClientRect().top) + 'px'; 665 666 // Ratios
667 var imgW = imgEl.naturalWidth; 668 var imgH = imgEl.naturalHeight; 669 670 var ratioX = imgW / w; 671 var ratioY = imgH / h; 672 673 var bgX = (x * ratioX * zoomLevel) - lensW / 2; 674 var bgY = (y * ratioY * zoomLevel) - lensH / 2; 675 676 $lens[0].style.backgroundPosition = '-' + bgX + 'px -' + bgY + 'px'; 677 678 rafId = null; 679 }); 680 }); 681 682 $slider.on('mouseleave', '.et_pb_image', function () { 683 var $img = $(this).find('img'); 684 $img.css('filter', 'blur(0px)'); 685 setInitialLens($(this)); 686 }); 687 } 688 689}); 690 691 692if (jQuery(".banner-zoom-section")[0]) { 693var zooImage = jQuery('#zoom-image-url').val(); 694var zviewer = OpenSeadragon({ 695 id: "openseadragon-viewer", 696 prefixUrl: "https://cdnjs.cloudflare.com/ajax/libs/openseadragon/4.1.0/images/", 697 tileSources: { 698 type: "image", 699 url: zooImage, 700 buildPyramid: false 701 }, 702 homeFillsViewer: true, 703 defaultZoomLevel: 1, 704 minZoomLevel: 0.8, 705 maxZoomLevel: 10, 706 visibilityRatio: 1, 707 showNavigator: true, 708 navigatorPosition: "TOP_RIGHT", 709 navigatorSizeRatio: 0.3, 710 showNavigationControl: true, 711 navigationControlAnchor: OpenSeadragon.ControlAnchor.TOP_RIGHT, 712 autoHideControls: false, 713 gestureSettingsMouse: { 714 scrollToZoom: false, 715 clickToZoom: false, 716 dblClickToZoom: false 717 } 718}); 719 720 721zviewer.addHandler('open', function () { 722 723 // Aggiungi classe al wrapper dei controlli 724 var container = document.querySelector('#openseadragon-viewer .openseadragon-container'); 725 if (container && container.children.length >= 3) { 726 container.children[2].classList.add('osd-controller-wrapper'); 727 } 728 729 // Pan in alto solo per immagini verticali 730 var tiledImage = zviewer.world.getItemAt(0); 731 if (tiledImage) { 732 var size = tiledImage.getContentSize(); 733 if (size.y > size.x) { 734 zviewer.viewport.panTo(new OpenSeadragon.Point(0.5, 0.55), true); 735 } 736 } 737 738}); 739 740// Scroll sul viewer: scorre la pagina (no zoom) 741jQuery("#openseadragon-viewer").on("wheel", function(event) { 742 if (event.originalEvent.ctrlKey) { 743 return; 744 } 745 event.preventDefault(); 746 requestAnimationFrame(function() { 747 window.scrollBy(0, event.originalEvent.deltaY); 748 }); 749}); 750 751// Scroll sul navigator: zoom 752zviewer.navigator.addHandler('scroll', function(event) { 753 event.preventDefault(); 754 zviewer.viewport.zoomBy(event.scroll > 0 ? 1.2 : 0.8); 755 zviewer.viewport.applyConstraints(); 756}); 757 758 759// Responsive: rimuovi controlli e thumbnail su mobile 760function adjustViewerForMobile() { 761 if (window.innerWidth <= 768) { 762 zviewer.showNavigator = false; 763 zviewer.showNavigationControl = false; 764 zviewer.forceRedraw(); 765 } else { 766 zviewer.showNavigator = true; 767 zviewer.showNavigationControl = true; 768 zviewer.forceRedraw(); 769 } 770} 771 772adjustViewerForMobile(); 773window.addEventListener("resize", adjustViewerForMobile); 774 775} 776 777 778// ------------------------- Popup Gallery ------------------------- 779 780let viewer; 781let viewer1, viewer2; 782 783jQuery('.open-gallery').click(function(){ 784 let img = jQuery(this).attr('src'); 785 jQuery('.thumbs img').removeClass('active'); 786 jQuery('.thumbs img[data-img="'+img+'"]').addClass('active'); 787 788 jQuery('.osd-popup').fadeIn(); 789 790 if(!viewer){ 791 viewer = OpenSeadragon({ 792 id: "osd-viewer", 793 prefixUrl: "https://cdnjs.cloudflare.com/ajax/libs/openseadragon/4.1.0/images/", 794 showZoomControl: true, 795 showHomeControl: false, 796 showFullPageControl: false, 797 showRotationControl: false, 798 tileSources: { 799 type:'image', 800 url: img 801 } 802 }); 803 } else { 804 viewer.open({ type:'image', url: img }); 805 } 806}); 807 808jQuery('.close').click(function(){ 809 jQuery('.osd-popup').fadeOut(); 810}); 811 812 813jQuery('.thumbs img').click(function(){ 814 let img = jQuery(this).data('img'); 815 jQuery('.thumbs img').removeClass('active'); 816 jQuery(this).addClass('active'); 817 if(viewer){
818 viewer.open({ type:'image', url: img }); 819 } 820}); 821 822 823jQuery('.download').click(function(){ 824 let img = jQuery('.thumbs img.active').data('img'); 825 window.open(img); 826}); 827 828let compareViewers = {}; 829 830// Compare 831jQuery('.compare').click(function(){ 832 let thumbs = jQuery('.thumbs img'); 833 if(thumbs.length < 2){ 834 alert('Need at least 2 images'); 835 return; 836 } 837 838 jQuery('.top-bar').hide(); 839 jQuery('#osd-viewer').hide(); 840 jQuery('.compare-container').addClass('active'); 841 let html = ''; 842 compareViewers = {}; 843 thumbs.each(function(){ 844 845 let img = jQuery(this).data('img'); 846 let uid = 'viewer_' + Math.random().toString(36).substr(2, 9); 847 html += ` 848 <div class="compare-view" data-id="${uid}"> 849 <button class="compare-close" data-id="${uid}">â</button> 850 <div id="${uid}" style="width:100%;height:100%;"></div> 851 </div> 852 `; 853 compareViewers[uid] = { 854 img: img, 855 instance: null 856 }; 857 }); 858 859 jQuery('.compare-container').html(html); 860 Object.keys(compareViewers).forEach(function(uid){ 861 862 compareViewers[uid].instance = OpenSeadragon({ 863 id: uid, 864 prefixUrl: "https://cdnjs.cloudflare.com/ajax/libs/openseadragon/4.1.0/images/", 865 showNavigationControl: false, 866 867 tileSources: { 868 type:'image', 869 url: compareViewers[uid].img 870 }, 871 872 gestureSettingsMouse: { 873 scrollToZoom: false, 874 clickToZoom: true, 875 dblClickToZoom: true 876 } 877 }); 878 879 }); 880 881}); 882 883 884jQuery(document).on('click', '.compare-close', function(){ 885 let uid = jQuery(this).data('id'); 886 let $parent = jQuery(this).closest('.compare-view'); 887 if(compareViewers[uid] && compareViewers[uid].instance){ 888 compareViewers[uid].instance.destroy(); 889 delete compareViewers[uid]; 890 } 891 892 $parent.remove(); 893 894 let remainingViews = jQuery('.compare-view'); 895 896 if(remainingViews.length === 1){ 897 jQuery('.top-bar').show(); 898 } 899 900 if(remainingViews.length <= 1){ 901 let lastImg = null; 902 remainingViews.each(function(){ 903 let id = jQuery(this).data('id'); 904 if(compareViewers[id]){ 905 lastImg = compareViewers[id].img; 906 } 907 }); 908 Object.keys(compareViewers).forEach(function(id){ 909 if(compareViewers[id].instance){ 910 compareViewers[id].instance.destroy(); 911 } 912 }); 913 914 compareViewers = {}; 915 jQuery('.compare-container').removeClass('active').empty(); 916 jQuery('#osd-viewer').show(); 917 if(viewer && lastImg){ 918 viewer.open({ 919 type:'image', 920 url: lastImg 921 }); 922 } 923 } 924 925}); 926 927 928jQuery('.external-thumbs img').click(function(){ 929 930 let img = jQuery(this).data('img'); 931 932 // Update main image 933 jQuery('.open-gallery').attr('src', img); 934 935 // Active state 936 jQuery('.external-thumbs img').removeClass('active'); 937 jQuery(this).addClass('active'); 938 939}); 940 941 942// ------------------------- Horizontal Gallery Strip ------------------------- 943 944 945if (document.querySelector('.horiz-gallery-strip') && jQuery(window).width() >= 980) { 946 947gsap.registerPlugin(ScrollTrigger); 948 949let container = document.querySelector('.horiz-gallery-strip') 950 951let horizontalScroll = gsap.to(container, { 952 ease: 'none', 953 x: () => -(container.scrollWidth - window.innerWidth), 954 scrollTrigger: { 955 trigger: '.horiz-gallery-wrapper', 956 start: 'center center', 957 end: () => '+=' + (container.scrollWidth - window.innerWidth), 958 scrub: true, 959 pin: true, 960 invalidateOnRefresh: true, 961 markers: false, 962 }, 963 }) 964 965gsap.to('.horiz-sidebar', { 966 ease: 'none', 967 x: () => window.innerWidth * 2, 968 scrollTrigger: { 969 containerAnimation: horizontalScroll, 970 trigger: '.horiz-sidebar', 971 start: 'left left', 972 end: () => '+=' + window.innerWidth * 2, 973 scrub: true, 974 invalidateOnRefresh: true, 975 onRefresh: self => self.animation.progress((horizontalScroll.time() - self.start) / (self.end - self.start)) 976 }, 977 }); 978 979} 980 981jQuery(function ($) { 982 983 jQuery('.custom-toggle-menu').removeClass('et-menu').removeClass('nav').removeClass('downwards').addClass('custom-toggle-menu'); 984 985 $('.custom-toggle-menu li.menu-item-has-children').each(function () { 986 $(this).append('<span class="toggle-btn">+</span>'); 987 }); 988 989 function toggleSubmenu($trigger) { 990 var $parent = $trigger.closest('li'); 991 var $btn = $parent.children('.toggle-btn'); 992 993 // close others 994 $parent.siblings('.open').removeClass('open') 995 .children('.toggle-btn').text('+'); 996 997 // toggle current 998 $parent.toggleClass('open'); 999 $btn.text($parent.hasClass('open') ? 'â' : '+'); 1000 } 1001 1002 $('.custom-toggle-menu').on('click', '.toggle-btn', function (e) { 1003 e.preventDefault(); 1004 toggleSubmenu($(this)); 1005 }); 1006 1007 $('.custom-toggle-menu').on('click', 'li.menu-item-has-children > a', function (e) { 1008 e.preventDefault(); 1009 toggleSubmenu($(this)); 1010 }); 1011 1012}); 1013 1014 1015jQuery(window).on('load', function () { 1016 1017 if (jQuery('.work-list-grid').length) { 1018 1019 let $grid = jQuery('.work-list-grid'); 1020 1021 $grid.masonry({
1022 itemSelector: '.work-grid', 1023 columnWidth: '.work-grid', 1024 percentPosition: true, 1025 gutter: 0 1026 }); 1027 1028 } 1029 1030}); 1031 1032jQuery(function($){ 1033 var $logo = $('.site-logo img'); 1034 if($logo.length){ 1035 var title = $logo.attr('title'); 1036 if(title){ 1037 $logo.attr( 1038 'title', 1039 title.replace(/'/g, "'") 1040 ); 1041 } 1042 } 1043}); 1044 1045 1046 const observer = new IntersectionObserver((entries) => { 1047 entries.forEach(entry => { 1048 if (entry.isIntersecting) { 1049 entry.target.classList.add('in-view'); 1050 observer.unobserve(entry.target); 1051 } 1052 }); 1053}, { threshold: 0.5 }); 1054 1055document.querySelectorAll('.page-heading').forEach(el => observer.observe(el)); 1056 1057 1058jQuery(document).ready(function () { 1059 if (jQuery('.chosen-select').length) { 1060 jQuery(".chosen-select").chosen(); 1061 } 1062}); 1063 1064jQuery(function ($) { 1065 if (jQuery('.chosen-select').length) { 1066 var isMobile = /Android|iPhone|iPad|iPod|Mobile/i.test(navigator.userAgent); 1067 1068 if (isMobile) { 1069 $('.chosen-select').each(function () { 1070 var placeholder = $(this).data('placeholder'); 1071 1072 $(this).find('option:first').text(placeholder); 1073 }); 1074 } 1075 1076 } 1077 1078});
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.