PageSourceSearch

https://marleighprimary.org/wp-content/themes/altheme/js/scripts.js?ver=1788430504

js marleighprimary.org collected 2026-09-29 11:28:12 UTC 20,246 bytes, 633 lines download raw bytes

1  const toggleSwitch = document.getElementById('high_contrast_toggle');
2  const highContrastBtn = document.getElementById('high_contrast');
3  const overlay = document.getElementById('site-overlay');
4  const bsNotifyEnhancer = () => {
5    const notify = document.getElementById('__bs_notify__');
6    if (!notify) {
7      return false;
8    }
9    notify.setAttribute('role', 'region');
10    if (!notify.hasAttribute('aria-label') && !notify.hasAttribute('aria-labelledby')) {
11      notify.setAttribute('aria-label', 'BrowserSync connection status');
12    }
13    return true;
14  };
15  if (!bsNotifyEnhancer()) {
16    const observer = new MutationObserver((mutations, obs) => {
17      if (bsNotifyEnhancer()) {
18        obs.disconnect();
19      }
20    });
21    observer.observe(document.body, { childList: true, subtree: true });
22  }
23
24
25
26  setTimeout(() => {
27        overlay.classList.add('hidden');
28  }, 50);
29
30  toggleSwitch.addEventListener('click', toggleHighContrast);
31
32  highContrastBtn.addEventListener('click', function(e) {
33      if (e.target.id !== 'high_contrast_toggle') {
34          toggleHighContrast();
35      }
36  });
37
38function ensureHighContrastStylesheet() {
39    if (document.getElementById('high-contrast-css') || !window.anglianHighContrastStylesheet) {
40        return;
41    }
42
43    var stylesheet = document.createElement('link');
44    stylesheet.id = 'high-contrast-css';
45    stylesheet.rel = 'stylesheet';
46    stylesheet.href = window.anglianHighContrastStylesheet;
47    document.head.appendChild(stylesheet);
48}
49
50function toggleHighContrast() {
51    toggleSwitch.classList.toggle('active');
52    document.documentElement.classList.toggle('high-contrast');
53
54    if (document.documentElement.classList.contains('high-contrast')) {
55        ensureHighContrastStylesheet();
56    }
57
58    // Save state
59    if (document.documentElement.classList.contains('high-contrast')) {
60        localStorage.setItem('highContrast', 'true');
61
62        // Set cookies so the it's enabled on page load.
63        const cookieDays = 30;
64        const date = new Date();
65        date.setTime(date.getTime() + (cookieDays*24*60*60*1000));
66        const expires = "expires="+ date.toUTCString();
67        document.cookie = "high_contrast_mode=1;" + expires + ";path=/";
68
69    } else {
70        localStorage.removeItem('highContrast');
71        document.cookie = "high_contrast_mode=0;expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/";
72    }
73}
74
75
76// Google Translate calls this after its deferred API script has loaded.
77window.googleTranslateElementInit = function () {
78  if (window.google && google.translate && google.translate.TranslateElement) {
79    new google.translate.TranslateElement(
80      {pageLanguage: 'en'},
81      'google_translate_el'
82    );
83  }
84};
85
86function loadGoogleTranslate() {
87  if (
88    document.querySelector('script[data-google-translate]') ||
89    (window.google && google.translate && google.translate.TranslateElement)
90  ) {
91    return;
92  }
93
94  var script = document.createElement('script');
95  script.src = 'https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit';
96  script.async = true;
97  script.dataset.googleTranslate = 'true';
98  document.head.appendChild(script);
99}
100
101var translateControl = document.querySelector('.translate');
102if (translateControl) {
103  translateControl.addEventListener('pointerenter', loadGoogleTranslate, { once: true });
104  translateControl.addEventListener('focusin', loadGoogleTranslate, { once: true });
105  translateControl.addEventListener('touchstart', loadGoogleTranslate, { once: true, passive: true });
106  translateControl.addEventListener('click', loadGoogleTranslate, { once: true });
107}
108
109function loadDeferredIframes() {
110  var iframes = document.querySelectorAll('iframe[data-src]');
111  var loadIframe = function (iframe) {
112    iframe.src = iframe.dataset.src;
113    iframe.removeAttribute('data-src');
114  };
115
116  if (!('IntersectionObserver' in window)) {
117    iframes.forEach(loadIframe);
118    return;
119  }
120
121  var observer = new IntersectionObserver(function (entries, currentObserver) {
122    entries.forEach(function (entry) {
123      if (entry.isIntersecting) {
124        loadIframe(entry.target);
125        currentObserver.unobserve(entry.target);
126      }
127    });
128  }, { rootMargin: '0px' });
129
130  iframes.forEach(function (iframe) {
131    observer.observe(iframe);
132  });
133}
134function initFooterMap(element) {
135  if (!window.L || element.dataset.mapReady) {
136    return;
137  }
138
139  var lat = parseFloat(element.dataset.mapLat);
140  var lng = parseFloat(element.dataset.mapLng);
141  if (isNaN(lat) || isNaN(lng)) {
142    return;
143  }
144
145  element.dataset.mapReady = '1';
146  var map = L.map(element).setView({lon: lng, lat: lat}, 15);
147  L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
148    maxZoom: 19
149  }).addTo(map);
150  L.control.scale().addTo(map);
151  L.marker({lon: lng, lat: lat}).addTo(map);
152}
153
154function loadDeferredMap() {
155  var element = document.querySelector('#map[data-map-lat]');
156  if (!element) {
157    return;
158  }
159
160  var start = function () {
161    if (window.L) {
162      initFooterMap(element);
163      return;
164    }
165
166    var assets = window.anglianLeafletAssets;
167    if (!assets || element.dataset.mapLoading) {
168      return;
169    }
170
171    element.dataset.mapLoading = '1';
172    // The stylesheet has to be in place before the map measures itself,
173    // otherwise the tiles are laid out against an unstyled container.
174    new Promise(function (resolve) {
175      var stylesheet = document.createElement('link');
176      stylesheet.rel = 'stylesheet';
177      stylesheet.href = assets.style;
178      stylesheet.onload = resolve;
179      stylesheet.onerror = resolve;
180      document.head.appendChild(stylesheet);
181    }).then(function () {
182      var script = document.createElement('script');
183      script.src = assets.script;
184      script.onload = function () {
185        initFooterMap(element);
186      };
187      document.body.appendChild(script);
188    });
189  };
190
191  if (!('IntersectionObserver' in window)) {
192    start();
193    return;
194  }
195
196  var observer = new IntersectionObserver(function (entries, currentObserver) {
197    entries.forEach(function (entry) {
198      if (entry.isIntersecting) {
199        start();
200        currentObserver.unobserve(entry.target);
201      }
202    });
203  }, { rootMargin: '200px 0px' });
204
205  observer.observe(element);
206}
207
208function loadDeferredFeedAssets() {
209  var assets = window.anglianDeferredFeedAssets;
210  if (!assets) {
211    return;
212  }
213
214  var loadedFeeds = {};
215  var loadFeed = function (feed) {
216    if (loadedFeeds[feed] || !assets[feed]) {
217      return;
218    }
219
220    loadedFeeds[feed] = true;
221    var styleLoads = assets[feed].styles.map(function (href) {
222      return new Promise(function (resolve) {
223        var stylesheet = document.createElement('link');
224        stylesheet.rel = 'stylesheet';
225        stylesheet.href = href;
226        stylesheet.onload = resolve;
227        stylesheet.onerror = resolve;
228        document.head.appendChild(stylesheet);
229      });
230    });
231
232    Promise.all(styleLoads).then(function () {
233      assets[feed].scripts.forEach(function (asset) {
234        if (asset.data) {
235          var data = document.createElement('script');
236          data.text = asset.data;
237          document.body.appendChild(data);
238        }
239
240        var script = document.createElement('script');
241        script.src = asset.src;
242        script.async = true;
243        document.body.appendChild(script);
244      });
245    });
246  };
247
248  var feedTargets = [
249    { selector: '.facebook-feed', feed: 'facebook' },
250    { selector: '#sb_instagram', feed: 'instagram' }
251  ];
252
253  if (!('IntersectionObserver' in window)) {
254    feedTargets.forEach(function (target) {
255      loadFeed(target.feed);
256    });
257    return;
258  }
259
260  var observer = new IntersectionObserver(function (entries, currentObserver) {
261    entries.forEach(function (entry) {
262      if (entry.isIntersecting) {
263        loadFeed(entry.target.dataset.deferredFeed);
264        currentObserver.unobserve(entry.target);
265      }
266    });
267  }, { rootMargin: '100px 0px' });
268
269  feedTargets.forEach(function (target) {
270    var element = document.querySelector(target.selector);
271    if (element) {
272      element.dataset.deferredFeed = target.feed;
273      observer.observe(element);
274    }
275  });
276}
277
278jQuery( document ).ready(function() {
279  loadDeferredFeedAssets();
280  loadDeferredIframes();
281  loadDeferredMap();
282  //BACK TO TOP
283  jQuery('.backtotop').on("click", function () {
284    jQuery("html, body").animate({ scrollTop: 0 });
285  });
286  //back button on mobile
287  jQuery('#stickynav .back-button').on("click",function() {
288    var target = jQuery(this).attr('data-link');
289    window.location.replace(target);
290  })
291  //SCROLLING
292  jQuery('body').scroll(function(){
293    var windowtop = jQuery('body').scrollTop();
294    jQuery('.container-white-laurel').css('background-position-y',950-(windowtop/5));
295    if (jQuery(window).width() < 992) {
296      if (windowtop > 100) {
297        jQuery('.back-button').fadeIn();
298      } else {
299        jQuery('.back-button').hide();
300      } 
301    } else {
302      jQuery('.back-button').hide();
303    }
304  });
305
306  //WINDOW RESIZE
307    jQuery(window).resize(function(){
308      if(jQuery('.header-images-slick-slider')[0] === undefined) return;
309      jQuery('.header-images-slick-slider')[0].slick.refresh();
310
311        if (jQuery('body').width() > 750) {
312          
313          var current = jQuery(".navbar-nav  li.active");
314          hovericon(current);
315          jQuery('.back-button').hide();
316        }
317    });
318   
319  
320  //Partners
321  jQuery('.partner-slider').slick({
322    speed: 1000,
323    slidesToShow: 5,
324    slidesToScroll: 1,
325    arrows: true,
326    nextArrow: '.next-slide-lower',
327    prevArrow: '.prev-slide-lower',
328    autoplay: true,
329    accessibility: false,
330    responsive: [
331      {
332        breakpoint: 1000,
333        settings: {
334          slidesToShow: 3,
335        }
336      },
337      {
338        breakpoint: 760,
339        settings: {
340          slidesToShow: 2,
341        }
342      },
343    ]
344  });
345  //remove aria hidden
346  // jQuery('.partner-slider').parents('[aria-hidden="true"]').removeAttr('aria-hidden');
347  //Hide partner arrows if less than 6 slides
348  if (!(jQuery('.slick-track .slick-slide').length > 6)) {
349    jQuery('.slick-controls-lower').hide();
350  }
351  jQuery('.partners').fadeIn();
352  //Homepage SLider
353  var homeSlider = jQuery('.header-images-slick-slider');
354  var loadSliderImage = function(image) {
355    if (!image || !image.dataset.src) {
356      return;
357    }
358
359    image.srcset = image.dataset.srcset;
360    image.sizes = image.dataset.sizes;
361    image.src = image.dataset.src;
362    image.removeAttribute('data-src');
363    image.removeAttribute('data-srcset');
364    image.removeAttribute('data-sizes');
365  };
366
367  var loadSlideAt = function(slick, index) {
368    if (!slick || !slick.$slides || !slick.$slides.length) {
369      return;
370    }
371
372    loadSliderImage(slick.$slides.eq(index % slick.$slides.length).find('.image-slider__image[data-src]').get(0));
373  };
374
375  // Only the first slide is in the initial HTML. Autoplay stays on, but the
376  // following slide is fetched after the page has finished loading and each
377  // later slide is fetched one rotation ahead, so they never compete with the
378  // hero image for bandwidth during the initial render.
379  homeSlider.on('init', function(event, slick) {
380    var preloadNext = function() {
381      loadSlideAt(slick, slick.currentSlide + 1);
382    };
383
384    if (document.readyState === 'complete') {
385      preloadNext();
386    } else {
387      window.addEventListener('load', preloadNext, { once: true });
388    }
389  });
390
391  homeSlider.on('beforeChange', function(event, slick, currentSlide, nextSlide) {
392    loadSlideAt(slick, nextSlide);
393  });
394
395  homeSlider.on('afterChange', function(event, slick, currentSlide) {
396    loadSlideAt(slick, currentSlide + 1);
397  });
398
399  homeSlider.slick({
400    dots: true,
401    speed: 1000,
402    fade: true,
403    autoplay: true,
404    arrows: false,
405    accessibility: false,
406    appendDots: '#slider_nav'
407  });
408  //Twitter
409  jQuery('.slick-twitter').slick({
410    slidesToShow: 1,
411    slidesToScroll: 1,
412    nextArrow: '.next-tweet',
413    prevArrow: '.prev-tweet',
414    accessibility: false,
415    adaptiveHeight: true,
416    fade: true
417  });
418  //Lightbox
419   jQuery('body').on('click', '[data-toggle="lightbox"]', function(event) {
420    event.preventDefault();
421    jQuery(this).ekkoLightbox({
422      loadingMessage: '<div class="spinner-grow" role="status"> <span class="sr-only">Loading...</span></div>',
423      alwaysShowClose	: true,
424      showArrows : true,
425      leftArrow: '<i class="fas fa-chevron-circle-left left"></i>',
426      rightArrow: '<i class="fas fa-chevron-circle-right right"></i>',
427    });
428  });
429  //Menu hover
430  //set to under current item - school icon
431  if( jQuery(".navbar .navbar-nav li.active").length ){
432    var onloadleft = jQuery(".navbar .navbar-nav li.active").offset().left;
433    var leftpadding = jQuery(".navbar .navbar-nav li.active").width()/2-18;
434  } else {
435    var onloadleft = jQuery(".navbar .navbar-nav li:first-child").offset().left;
436    var leftpadding = jQuery(".navbar .navbar-nav li:first-child").width()/2-18;
437  }
438  jQuery(".navbar .currenthover").css("left",onloadleft+leftpadding);
439  jQuery(".navbar .currenthover").css("display","block");
440  if(jQuery('.navbar .navbar-nav li.active').is('.navbar-nav li:last-child')) {
441    jQuery(".navbar .currenthover").hide();
442    var lasthover = jQuery('.navbar .navbar-nav li.active').prev('li');
443    hovericon(lasthover);
444  }
445  jQuery(".navbar-nav li").on("mouseover", function () {
446    if(jQuery(this).is(':last-child')) {
447      var lasthover = jQuery(this).prev('li');
448      hovericon(lasthover);
449    } else {
450      hovericon(this);
451    }
452  });
453  //MOBILE MENU - DONT LINK THROUGH TO PARENT PAGES 
454  if (jQuery(window).width() < 992) {
455    jQuery('.menu-item-has-children').children('a').click(function(e) {
456      e.preventDefault();
457    });
458    //copy parent into menu
459    jQuery( "#mainnav li.menu-item-has-children" ).each(function( index ) {
460      var url = jQuery(this).children().attr('href');
461      if (url == "#"){return;}
462      var parent_item_html = jQuery(this).children('a').html();
463      jQuery(this).find('.dropdown-menu').prepend('<li><a class="dropdown-item" href="'+url+'">'+parent_item_html+'</a></li>');
464    });
465    //copy parent into menu for sidebars
466    jQuery( "#sidebar-menu li.menu-item-has-children" ).each(function( index ) {
467      var url = jQuery(this).children().attr('href');
468      if (url == "#"){return;}
469      var parent_item_html = jQuery(this).children('a').html();
470      jQuery(this).find('.sub-menu').prepend('<li><a class="dropdown-item" href="'+url+'">'+parent_item_html+'</a></li>');
471    }); 
472  }
473
474  //SIDEBAR MENU ON MOBILE
475  jQuery("#sidebar-menu").each(function (i, el) {
476    var isWrapped = false;
477    var $parent = jQuery(el).parent();
478    var $el = jQuery(el);
479
480    var check = function() {
481      if (jQuery(window).width() < 780 && !isWrapped) {
482        if (jQuery('#sidebar-menu li:not(.sub-menu li)').length > 4) {
483          $wrap = jQuery('<div class="mobile-sidebarnav-contain"></div>')
484          $down = jQuery('<div class="showall"><i class="fas fa-chevron-circle-down"></i></div>');
485    
486          $el.wrapAll($wrap);
487          $el.parent().append($down);
488          isWrapped = true;
489          $down.click(function (e) {
490            $el.parent().toggleClass("open");
491          });
492        }
493      } else if(jQuery(window).width() >= 780 && isWrapped) {
494        $parent.append($el);
495        $parent.find(".mobile-sidebarnav-contain").remove();
496        isWrapped = false;
497      }
498    };
499    jQuery(window).resize(check);
500    check();
501  });
502
503
504  //add class if has submenu for top buttons
505  jQuery('#menu-top-buttons li').has("i").addClass('hasdropdown');
506
507  //Homepage Tabs
508  jQuery('.homepage-tabs-nav .tab_button').on("click", function () {
509    jQuery('.homepage-tabs-nav .tab_button').removeClass('active');
510    jQuery(this).addClass('active');
511    var num = jQuery('.homepage-tabs-nav .tab_button').index(this)+1;
512    jQuery('.tabcontent .container').removeClass('active');
513    jQuery('.tabcontent #tab-'+num).addClass('active');
514  });
515
516  //Newspage Pagnation
517  jQuery(".newseventcontainer").slice(0, 6).show();
518  jQuery("#loadMore").on("click", function(e){
519    e.preventDefault();
520    jQuery(".newseventcontainer:hidden").slice(0, 3).slideDown();
521    if(jQuery(".newseventcontainer:hidden").length == 0) {
522      jQuery("#loadMore").text("No More Posts").addClass("disabled");
523    }
524  });
525
526  //Newspage Newsletter Pagnation
527  jQuery(".newslettercontainer").slice(0, 6).show();
528  jQuery("#loadMore").on("click", function(e){
529    e.preventDefault();
530    jQuery(".newslettercontainer:hidden").slice(0, 600).slideDown();
531    if(jQuery(".newslettercontainer:hidden").length == 0) {
532      jQuery("#loadMore").text("No More Posts").addClass("disabled");
533    }
534  });
535
536  //Add search to burger menu
537    var search_html = jQuery('.google_search #searchform').parent().html();
538    search_html = '<div id="mobilesearch">'+search_html+'</div>';
539    jQuery('#mainnav').prepend(search_html);
540
541  //Clicking on search form button
542  jQuery(".searchformcontain .btn").on("click", function () {
543    jQuery(this).closest("form").submit();
544  });
545   
546  //Search Form Submit
547  jQuery("input[name='s']").closest("form").on("submit", function () {
548    var searchvalue = jQuery(this).val();
549    location.href = 'https://'+document.location.hostname+'?s='+searchvalue;
550  });
551 
552  //Remove top pixels when anchor link present
553  function offsetAnchor() {
554    if (location.hash.length !== 0) {
555      jQuery('body').scrollTop(jQuery(location.hash).position().top-200);
556      jQuery(location.hash).find('a.btn-primary').click();
557    }
558  }
559  window.setTimeout(offsetAnchor, 0);
560
561  //Staff With pics page read more
562  jQuery('.read-more-button').on( "click", function() {
563    jQuery(this).parent().find('.allcontent,.desc_short').toggle();
564    jQuery(this).text(jQuery(this).text() == 'More' ? 'Less' : 'More');
565  });
566  //Register an Interest form on vacancies page
567  if (document.body.classList.contains('page-template-vacancies')) {
568    jQuery('input:file').change(function(e){
569      var filename = new String(e.target.files[0].name);
570      var file = '<p class="fileuploadname"><i class="fas fa-file-alt"></i>&nbsp;<span>'+filename+'</span></p>';
571      jQuery('.cv_upload small').append(file);
572    });
573    jQuery('.vacancy .btn-primary').click(function(){ 
574      jQuery(this).text(function(i,old){
575        return old=='View details' ?  'Hide details' : 'View details';
576      });
577    });
578  }
579  
580
581});
582
583function hovericon(location){
584  var newleft = jQuery(location).offset().left;
585  var leftpadding = jQuery(location).width()/2-18;
586  jQuery(".navbar .currenthover").css("left",newleft+leftpadding);
587  jQuery(".navbar .currenthover").css("display","block");
588}
589
590(function() {
591  // Check if the body has the class "wp-admin"
592  if (document.body.classList.contains('wp-admin')) {
593
594    tinymce.PluginManager.add('custom_button', function(editor, url) {
595      editor.addButton('custom_button', {
596        title: 'Add Button',
597        icon: 'icon dashicons-before dashicons-format-aside',
598        onclick: function() {
599          // Add your custom button functionality here
600
601          let button_url = prompt("Please enter your URL", "");
602          let button_text = prompt("Please enter your button text", "");
603          let button_target = prompt("Would you like your page to open in a new window? Enter Yes or No.", "");
604
605          if (button_target.toLowerCase() === 'yes') {
606            editor.insertContent('<a target="_blank" href="' + button_url + '" class="custom_button"><button class="btn">' + button_text + '</button></a>');
607          } else {
608            editor.insertContent('<a href="' + button_url + '" class="custom_button"><button class="btn">' + button_text + '</button></a>');
609          }
610        }
611      });
612    });
613
614    tinymce.PluginManager.add('colour_block', function(editor, url) {
615      editor.addButton('colour_block', {
616         title: 'Add Colour block',
617         icon: 'icon dashicons-before dashicons-format-aside',
618         onclick: function() {
619            // Add your custom button functionality here
620  
621            editor.insertContent('<table class="custom_colour_block"><tbody><tr><td>Add content here</td></tr></tbody></table>');
622  
623         }
624      });
625    });
626
627
628  }
629
630  
631
632  
633})();

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.