PageSourceSearch

https://www.wyevalleybrewery.co.uk/scripts/site.js?v=1.0.999

js wyevalleybrewery.co.uk collected 2026-10-03 22:25:52 UTC 24,376 bytes, 684 lines download raw bytes

1(function($, throttle, TweenMax, Power2, Instafeed) {
2    'use strict';
3
4    $(function() {
5        // site wide
6        var $body = $('body');
7        var throttleInterval = 250;
8        var scrollDistance = 160;
9        var tolerance = 10;
10
11        var condenseHeader = function() {
12            var currentDistance = $(window).scrollTop();
13            var scrolledClass = 'scrolled';
14        
15            if (currentDistance < (scrollDistance - tolerance)) {
16                $body.removeClass(scrolledClass);
17            } else if (currentDistance > (scrollDistance + tolerance)) {
18                $body.addClass(scrolledClass);
19            }
20        };
21
22        condenseHeader();
23        
24        $(window).on('scroll', throttle( function() {
25            condenseHeader();
26        }, throttleInterval));
27
28        $('.js-to-top').on('click', function(){
29            $('html, body').animate(
30                { scrollTop: $body.offset().top },
31                500
32            );
33        });
34        
35        const $siteWideAlert = $('.site-alert:visible');
36        
37        if ($siteWideAlert.length) {
38            $('body').addClass('site-alert-visible');
39        }
40        
41        const $siteHeader = $('.site-header');
42        const $siteFooter = $('.site-footer');
43        
44        $(window).on('load resize', throttle( function() {
45            if ($siteFooter.height() > ($(window).height() - $siteHeader.height())) {
46                $siteFooter.addClass('disable-reveal');
47            } else {
48                $siteFooter.removeClass('disable-reveal');
49            }
50        }, throttleInterval));
51
52        const $navItems = $('.js-dropdown-parent');
53        if ($navItems.length) {
54            var openClass = 'open';
55            var mobileBreakpoint = 1200;
56
57            function collapse($jQueryCollection) {
58                $jQueryCollection.removeClass(openClass);
59            }
60            
61            $(window).on('resize', throttle( function() {
62                $navItems.removeClass(openClass);
63            }, throttleInterval));
64            
65            $(window).on('site-nav-toggled', function(e){
66                $navItems.removeClass(openClass);
67                if ( ($(window).width() < 1200) && e.state =='active') {
68                    $('.js-dropdown-parent[data-mobile-default="true"]').addClass(openClass);
69                }
70                
71                if (e.state === 'active') {
72                    $siteHeader.addClass('site-nav-active');
73                } else {
74                    $siteHeader.removeClass('site-nav-active');
75                }
76            });
77        }
78        
79        const $minicartBasket = $('.minicart-link.is-basket');
80        
81        if ($minicartBasket.length) {
82            const $minicart = $minicartBasket.closest('.minicart');
83            
84            $minicartBasket.on('mouseenter', () => {
85                const $withItems = $minicartBasket.closest('.minicart.contains-items');
86                
87                if (!$withItems.length) {
88                    return;
89                }
90                
91                $minicart.addClass('open');
92            });
93
94            $minicart.on('mouseleave', () => $minicart.removeClass('open'));
95            $minicart.on('click', '.js-minicart-close', () => $minicart.removeClass('open'));
96        }
97
98        $('.js-become-stockist').on('click', function() {
99            callGoogleAnalytics('click', 'data', {
100                component: 'button',
101                value: 'Become Stockist'
102            });
103        });
104
105        if ($('.js-sticky-atc').length) {
106            var $atc = $('.js-sticky-atc');
107            var $atcWrapper = $('.js-sticky-atc-container');
108
109            setATCWidth($atc, $atcWrapper);
110
111
112            $(window).on('resize', throttle(function () {
113                setATCWidth($atc, $atcWrapper);
114            }, throttleInterval));
115
116            var siteFooter = document.querySelector('#site-footer-main');
117
118            function io_callback (entries, io_observer) {
119                // console.log(entries[0]);
120                if (entries[0].isIntersecting ) {
121                    $atc.removeClass('stuck');
122                } else {
123                    $atc.addClass('stuck')
124                }
125            }
126
127            var io_observer = new IntersectionObserver(io_callback);
128            io_observer.observe(siteFooter);
129        }
130
131        function setStickyPos($elem) {
132            if ($elem.hasClass('stuck')) {
133                $elem.css('top', $('#site-header').height())
134            } else {
135                $elem.css('top', '');
136            }
137        }
138
139        function setATCWidth($elem, $wrapper) {
140            $elem.css('width', $wrapper.width())
141        }
142
143        // analytics
144        function callGoogleAnalytics(event, dataType, data) {
145            if (!dataType || !data) {
146                window.dataLayer.push({ event });
147                return;
148            }
149
150            window.dataLayer.push({ [dataType]: null })
151            window.dataLayer.push({
152                event,
153                [dataType]: data
154            });
155        }
156
157        // toggles eg shop page
158        if ($('.js-active-desktop').length && $(window).width() > 960) {
159            $('.js-active-desktop').addClass(activeClass);
160        }
161
162        // trade page
163        if ($('.js-include-trade-map').length) {
164            var tradeMapHTML    = '<div class="trade-map js-trade-map">'
165                                + '<div class="tm-circle-pulse"></div>'
166                                + '<div class="tm-circle"></div>'
167                                + '<div class="tm-roads"></div>'
168                                + '<div class="tm-center-trees"></div>'
169                                + '<div class="tm-building"></div>'
170                                + '<div class="tm-trees"></div>'
171                                + '<div id="truck1" class="tm-truck truck-1"></div>'
172                                + '<div id="truck2" class="tm-truck truck-2"></div>'
173                                + '<div id="truck3" class="tm-truck truck-3"></div>'
174                                + '<div class="tm-crest"></div>'
175                                + '</div>';
176
177            $('.js-include-trade-map').append(tradeMapHTML);
178
179            var $tradeMap = $('.js-include-trade-map').find('.js-trade-map');
180
181            if ($tradeMap.is(':visible')) {
182                animateTrademap();
183            }
184
185            $(window).on('resize', throttle(function () {
186                if ($tradeMap.is(':visible')) {
187                    animateTrademap();
188                }
189            }, throttleInterval));
190        }
191
192        function animateTrademap() {
193            var $truck1 = $tradeMap.find('#truck1');
194            var $truck2 = $tradeMap.find('#truck2');
195            var $truck3 = $tradeMap.find('#truck3');
196
197            TweenMax.to($truck1, 12, {
198                x: 400,
199                y: -130,
200                ease: Power2.easeOut,
201                repeatDelay:1,
202                repeat:-1
203            });
204            TweenMax.to($truck2, 10, {
205                x: 500,
206                y: 20,
207                delay: 2,
208                ease: Power2.easeOut,
209                repeatDelay:1,
210                repeat:-1
211            });
212            TweenMax.to($truck3, 12, {
213                x: -650,
214                delay: 4,
215                ease: Power2.easeOut,
216                repeat:-1
217            });
218        }
219
220        // sliders
221        if ($('.js-hero-slider').length) {
222            var $heroSlider = $('.js-hero-slider');
223            var numSlides = parseInt($heroSlider.data('total-products'));
224
225            $heroSlider.slick({
226                slidesToShow: 1,
227                slidesToScroll: 1,
228                fade: true,
229                adaptiveHeight: false,
230                speed: 1
231            }).on('init', function(){
232                $heroSlider.attr('data-product', $('.slick-slide').eq(0).data('product'));
233            }).on('beforeChange', function(event, slick, currentSlide, nextSlide){
234                $heroSlider.attr('data-product', $('.slick-slide').eq(nextSlide).data('product'));
235                $heroSlider.attr('data-current', nextSlide);
236
237                var rotateAmount = nextSlide / numSlides * 360 + 'deg';
238                document.documentElement.style.setProperty('--watermarkRotate', rotateAmount);
239            });
240
241            $('.js-hero-slider-nav').slick({
242                slidesToShow: 6,
243                slidesToScroll: 1,
244                asNavFor: '.js-hero-slider',
245                focusOnSelect: true,
246                infinite: true,
247                responsive: [
248                    {
249                        breakpoint: 780,
250                        settings: {
251                            slidesToShow: 5,
252                            slidesToScroll: 1,
253                        }
254                    },
255                    {
256                        breakpoint: 600,
257                        settings: {
258                            slidesToShow: 4,
259                            slidesToScroll: 1,
260                        }
261                    },
262                    {
263                        breakpoint: 480,
264                        settings: {
265                            slidesToShow: 3,
266                            arrows: true,
267                            slidesToScroll: 1,
268                        }
269                    }
270                ]
271            });
272        }
273        
274        if ($('.js-slick-slider.ticker').length) {
275
276            $('.js-slick-slider.ticker').each(function() {
277                const _this = $(this).slick({
278                    dots: false,
279                    arrows: false,
280                    lazyLoad: 'ondemand',
281                    infinite: true,
282                    slidesToShow: 7,
283                    slidesToScroll: 1,
284                    autoplay: true,
285                    autoplaySpeed: 0,
286                    speed: 3000,
287                    cssEase:'linear',
288                    draggable: false,
289                    variableWidth: true,
290                    responsive: [
291                        {
292                            breakpoint: 1024,
293                            settings: {
294                                slidesToShow: 7,
295                                speed: 3000,
296                            }
297                        },
298                        {
299                            breakpoint: 600,
300                            settings: {
301                                slidesToShow: 4,
302                                speed: 4000,
303                            }
304                        },
305                        {
306                            breakpoint: 480,
307                            settings: {
308                                slidesToShow: 2,
309                                speed: 4000,
310                            }
311                        }
312                    ]
313                });
314            });
315        }
316
317
318        if ($('.js-slick-slider.carousel').length) {
319            $('.js-slick-slider.carousel').each(function() {
320                const _this = $(this).slick({
321                    dots: false,
322                    arrows: true,
323                    lazyLoad: 'ondemand',
324                    infinite: true,
325                    autoplay: false,
326                    draggable: true,
327                    swipeToSlide: true,
328                    slidesToShow: 1,
329                    slidesToScroll: 1,
330                    speed: 1000,
331                    variableWidth: true,
332                });
333            });
334        }
335
336        if ($('.js-slick-slider.beer-carousel').length) {
337            $('.js-slick-slider.beer-carousel').each(function() {
338                const _this = $(this).slick({
339                    dots: false,
340                    arrows: true,
341                    lazyLoad: 'ondemand',
342                    infinite: true,
343                    vertical: true,
344                    autoplay: false,
345                    swipeToSlide: true,
346                    draggable: true,
347                    slidesToShow: 3,
348                    slidesToScroll: 1,
349                    speed: 1000,
350                    focusOnSelect: true,
351                    adaptiveHeight: true,
352                    responsive: [
353                        {
354                            breakpoint: 800,
355                            settings: {
356                                slidesToShow: 1,
357                                vertical: false,
358                                adaptiveHeight: true,
359                                centerPadding: '32px',
360                                centerMode: true,
361                            }
362                        },
363                    ]
364                }).on('beforeChange', function(event, slick, currentSlide, nextSlide){
365                    const bg = slick.$slides[nextSlide].dataset.bg
366                    $('.beerCarouselBlock').css('--beer-carousel-bg-next', 'url(' + bg + ')').addClass('fade');
367                }).on('afterChange', function(event, slick, currentSlide){
368                    const bg = slick.$slides[currentSlide].dataset.bg
369                    $('.beerCarouselBlock').css('--beer-carousel-bg-current', 'url(' + bg + ')').removeClass('fade');
370                });
371            })
372        }
373        
374        if ($('.js-slider').length) {
375            var playMode = $(window).width() > 600 ? true : false;
376
377            $('.js-slider').each(function() {
378                var _this = $(this).bxSlider({
379                    mode: 'horizontal'
380                    , auto: playMode
381                    , autoHover: true
382                    , pause: 4000
383                    , speed: 600
384                    , infiniteLoop: true
385                    , controls: true
386                    , pager: true
387                    , easing: 'swing'
388                    , touchEnabled: true
389                    , responsive: true
390                });
391                _this.mouseenter(function() {
392                    _this.startAuto();
393                }).mouseleave(function() {
394                    _this.stopAuto();
395                });
396            });
397
398            var sliders = $('.js-slider').map(function() {
399                return $(this).bxSlider();
400            });
401
402              $(window).on('resize', throttle(function () {
403                sliders.each(function() {
404                    $(this).reloadSlider();
405                });
406            }, 200));
407        }
408
409        if ($('.js-slider-ms').length) {
410            var monthlySpecialsSlider = $('.js-slider-ms').bxSlider({
411                mode: 'vertical',
412                auto: false,
413                autoHover: true,
414                pause: 4000,
415                speed: 600,
416                pager: true,
417                controls: false,
418                easing: 'swing',
419                // adaptiveHeight: true,
420                pagerCustom: '.js-slider-nav'
421            });
422
423            $(window).on('resize', throttle(function () {
424                monthlySpecialsSlider.reloadSlider();
425            }, 200));
426        }
427
428        //Timeline 
429        const timelineBlocks = $('.timelineBlock');
430        if(timelineBlocks.length) {
431            timelineBlocks.each(function() {
432                const block = this;                
433                
434                const heading = block.querySelector('.heading');
435                if (!heading) return; // skip if no heading
436                const word = heading.querySelector('.heading .word');
437                if (!word) return; // skip if no word in heading
438
439                const chars = [...word.querySelectorAll('.char')];
440
441                // Store heading height for CSS variable
442                block.style.setProperty('--heading-height', heading.offsetHeight + 'px');
443
444                function updateTitleGradient(step) {
445                    const width = chars
446                        .slice(0, step)
447                        .reduce((w, el) => w + el.offsetWidth, 0);
448
449                    word.style.setProperty('--fill', `${width}px`);
450                }
451
452                $('.timelineBlock .js-slick-slider').on('afterChange', function(event, slick, currentSlide){
453                    updateTitleGradient(currentSlide + 1);
454                });
455
456                updateTitleGradient(1);
457            })
458        }
459        
460        //Parallax Content 
461        const parallaxContentBlocks = $('.parallaxContentBlock');
462        if(parallaxContentBlocks.length) {
463            gsap.registerPlugin(ScrollTrigger);
464
465            let mm = gsap.matchMedia();
466            
467            parallaxContentBlocks.each(function() {
468                const block = this;
469                
470                const primaryImage = block?.querySelector('.primary-img');
471                if(primaryImage) {
472                    mm.add("(min-width: 1200px)", () => {
473                        gsap.fromTo(
474                            primaryImage,
475                            {yPercent: 10},
476                            {
477                                yPercent: -10,
478                                delay: 0.5,
479                                ease: "none",
480                                scrollTrigger: {
481                                    trigger: block,
482                                    start: "top bottom",
483                                    end: "bottom top",
484                                    scrub: true
485                                }
486                            }
487                        );
488                    });
489                }
490
491                const secondaryImage = block?.querySelector('.secondary-img');
492                if(secondaryImage) {
493                    mm.add("(min-width: 1200px)", () => {
494                        gsap.fromTo(
495                            secondaryImage,
496                            {yPercent: 75},
497                            {
498                                yPercent: -75,
499                                ease: "none",
500                                scrollTrigger: {
501                                    trigger: block,
502                                    start: "top bottom",
503                                    end: "bottom top",
504                                    scrub: true
505                                }
506                            }
507                        );
508                    });
509                }
510            });
511        }
512
513        // Limited releases ticker
514        if ($('.js-ticker-slider').length) {
515            var ticker = $('.js-ticker-slider').bxSlider({
516                ticker: true
517                , tickerHover: true
518                , minSlides: 1
519                , maxSlides: 24
520                , speed: $(window).width() * $('.js-ticker-slider li').length * 2.5
521                , onSliderLoad: function () {
522                    // by default the ticker only shows the items initially on screen
523                    // expand the width to  include all gallery items
524                    var $ticker = $('.js-ticker-gallery:first-of-type');
525                    var $tickerItems = $ticker.find('li');
526                    var galleryWidth = $tickerItems.outerWidth() * $tickerItems.length;
527                    $('.js-ticker-gallery').css('width', galleryWidth);
528                    // fixes width calculation issue in firefox
529                    $ticker.closest('.bx-viewport').css('max-width', $body.innerWidth());
530                }
531            });
532
533            $(window).on('resize', throttle(function () {
534                ticker.reloadSlider();
535            }, 200));
536        }
537    });
538
539
540    let assemblyVersion = $('meta[name=assembly-version]').attr('content');
541    let prevControl = `
542            <svg role="img" class="icon homepage-content__slider-icon homepage-content__slider-icon--prev">
543                <use xlink:href="/img/icons.svg?v=${assemblyVersion}#icon-chevron-thin-left"></use>
544            </svg>
545            <span class="visually-hidden">cask</span>
546        `
547
548    let nextControl = `
549            <svg role="img" class="icon homepage-content__slider-icon homepage-content__slider-icon--next">
550                <use xlink:href="/img/icons.svg?v=${assemblyVersion}#icon-chevron-thin-left"></use>
551            </svg>
552            <span class="visually-hidden">cask</span>
553        `
554
555
556        jQuery('#homepage-content__slider').slick({
557            infinite: true,
558            slidesToShow: 3,
559            slidesToScroll: 3,
560            prevArrow: prevControl,
561            nextArrow: nextControl,
562            responsive: [
563                {
564                    breakpoint: 1000,
565                    settings: {
566                        slidesToShow: 2,
567                        slidesToScroll: 2,
568                        infinite: true,
569                        dots: false
570                    }
571                },
572                {
573                    breakpoint: 768,
574                    settings: {
575                        slidesToShow: 1,
576                        slidesToScroll: 1,
577                        infinite: true,
578                        dots: false
579                    }
580                },
581
582            ]
583        });
584
585    jQuery('#pub-slider').slick({
586        infinite: true,
587        slidesToShow: 1,
588        slidesToScroll: 1,
589        pager: false,
590        controls: false,
591        auto: true,
592    });
593
594
595    if ($('#mailing-list-signup').length) {
596
597        var $mlSignup = $('#mailing-list-signup');
598        var wvbPrefs = window.localStorage;
599
600        setMLSVisbility($mlSignup);
601
602        $('#mailing-list-signup .js-close').on('click', function() {
603            wvbPrefs.setItem('mailingListSignupLastShown', (new Date()).getTime());
604            updateMLSVisbility(true)
605        });
606
607        $('#subForm').on('submit', function(){
608            wvbPrefs.setItem('mailingListSubscribed', true);
609        });
610
611    }
612
613    function setMLSVisbility($mlSignup) {
614        var formHidden = false;
615        var wvbPrefs = window.localStorage;
616
617        if (wvbPrefs.mailingListSubscribed || window.location.href.indexOf('utm_medium=email') > 0)  {
618            formHidden = true;
619        } else if (wvbPrefs.mailingListSignupLastShown) {
620            var mlFormHidden = wvbPrefs.mailingListSignupLastShown;
621            var now = new Date();
622            var daysSinceFormClosed = getDifferenceInDays(now.getTime(), mlFormHidden);
623            if (daysSinceFormClosed < 30 ) {
624                $mlSignup.hide();
625                return false;
626            }
627        }
628
629        updateMLSVisbility(formHidden)
630    }
631
632    function updateMLSVisbility(formHidden) {
633        if (formHidden) {
634            $mlSignup.hide();
635            showTestLinkOnDevSite();
636            $('body').removeClass('mlf-visible')
637        } else {
638            $('body').addClass('mlf-visible')
639        }
640    }
641
642    function getDifferenceInDays(timeOne, timeTwo) {
643        var differenceInTime = timeOne - timeTwo;
644        return parseInt(differenceInTime / (1000 * 3600 * 24));
645    }
646
647    function showTestLinkOnDevSite() {
648        if (window.location.href.toLowerCase().indexOf('localhost') !== -1 || window.location.href.toLowerCase().indexOf('staging') !== -1 ) {
649            $('.site-footer').append('<a class="js-reset-MLSForm" href="#" style="color: white; padding: 0.5rem;">show form</a> ');
650
651            $('body').on('click', '.js-reset-MLSForm', function(e){
652                e.preventDefault();
653                window.localStorage.removeItem('mailingListSignupLastShown');
654                window.localStorage.removeItem('mailingListSubscribed');
655                window.location.reload();
656            });
657        }
658    }
659
660    $(window).on('load', function(){
661        // hide the hamburger button until the page loads
662        if ($('.js-hide-until-page-loads').length) {
663            $('.js-hide-until-page-loads').removeClass('is-hidden');
664        }
665
666        if ($('#instafeed').length) {
667            var userFeed = new Instafeed({
668                limit: 10,
669                accessToken: InstagramToken,
670                template: `<a style="background-image: url({{image}})" href="{{link}}" target="_blank"></a>`,
671                transform: function(item) {
672                    var d = new Date(item.timestamp);
673                    item.date = [d.getDate(), d.getMonth(), d.getYear()].join('/');
674                    return item;
675                },
676
677            });
678            userFeed.run();
679
680
681        }
682    });
683
684})(window.jQuery, window.throttle, window.TweenMax, window.Power2, window.Instafeed);

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.