PageSourceSearch

https://www.lincoln.gov.uk/lincoln-city/widgets/js/widget.js?1790262306

js lincoln.gov.uk collected 2026-09-24 18:42:48 UTC 13,519 bytes, 439 lines download raw bytes

1/******** 38015 internalID:MzgwMTUx *********/
2
3const customCard = document.querySelectorAll('[data-component="custom--card"]');
4
5customCard.forEach(card => {
6    const mainLink = card.querySelector('.custom-card-pattern__card-link');
7    const clickableElements = Array.from(card.querySelectorAll("a"));  
8
9    clickableElements.forEach((element) =>
10    element.addEventListener("click", (e) => e.stopPropagation())
11    );
12
13    function handleEvent(event){
14        const noTextSelected = !window.getSelection().toString();
15        if(noTextSelected){
16            mainLink.click();
17        }
18    }
19    card.addEventListener('click', handleEvent);
20});/******** 100003 internalID:MTAwMDAzMQ *********/
21
22$(document).ready(function() {
23
24   if (typeof $.fn.slick === 'function') {
25    $('.custom-slick-process-carousel').slick({
26      arrowsPlacement:'split',
27      dots: true,
28      adaptiveHeight: true,
29      autoplay: false,
30      infinite: false,
31      autoplaySpeed: 5000,
32      prevArrow: '<button type="button" class="custom-slick-process-arrows custom-slick-process-arrows--prev">'
33             + '  <span class="fa fa-solid-chevron-left"></span>'
34             + '  <span class="visually-hidden">Previous slide</span>'
35             + '</button>',
36      nextArrow: '<button type="button" class="custom-slick-process-arrows custom-slick-process-arrows--next">'
37              + '  <span class="fa fa-solid-chevron-right"></span>'
38              + '  <span class="visually-hidden">Next slide</span>'
39              + '</button>',
40    });
41   }
42  });/******** 38011 internalID:MzgwMTEx *********/
43
44  /* focusin/out event polyfill (firefox) */
45!function(){
46  var w = window,
47  d = w.document;
48
49  if( w.onfocusin === undefined ){
50    d.addEventListener('focus' ,addPolyfill ,true);
51    d.addEventListener('blur' ,addPolyfill ,true);
52    d.addEventListener('focusin' ,removePolyfill ,true);
53    d.addEventListener('focusout' ,removePolyfill ,true);
54  }
55  function addPolyfill(e){
56    var type = e.type === 'focus' ? 'focusin' : 'focusout';
57    var event = new CustomEvent(type, { bubbles:true, cancelable:false });
58    event.c1Generated = true;
59    e.target.dispatchEvent( event );
60  }
61  function removePolyfill(e){
62if(!e.c1Generated){ // focus after focusin, so chrome will the first time trigger tow times focusin
63  d.removeEventListener('focus' ,addPolyfill ,true);
64  d.removeEventListener('blur' ,addPolyfill ,true);
65  d.removeEventListener('focusin' ,removePolyfill ,true);
66  d.removeEventListener('focusout' ,removePolyfill ,true);
67}
68setTimeout(function(){
69  d.removeEventListener('focusin' ,removePolyfill ,true);
70  d.removeEventListener('focusout' ,removePolyfill ,true);
71});
72}
73}();
74
75var myCarousel = (function() {
76
77  var carousel, slides, index, slidenav, settings, timer, setFocus, animationSuspended;
78
79  function forEachElement(elements, fn) {
80    for (var i = 0; i < elements.length; i++)
81      fn(elements[i], i);
82  }
83
84  function removeClass(el, className) {
85    if (el.classList) {
86      el.classList.remove(className);
87    } else {
88      el.className = el.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' ');
89    }
90  }
91
92  function hasClass(el, className) {
93    if (el.classList) {
94      return el.classList.contains(className);
95    } else {
96      return new RegExp('(^| )' + className + '( |$)', 'gi').test(el.className);
97    }
98  }
99
100  function init(set) {
101    settings = set;
102    carousel = document.getElementById(settings.id);
103    
104    /*Return where page isn't using the carousel*/
105    try {
106      slides = carousel.querySelectorAll(".slide");
107    } catch (err) {
108      return;
109    }
110
111    carousel.className = 'active carousel';
112
113    var ctrls = document.createElement('ul');
114
115    ctrls.className = 'controls';
116    ctrls.innerHTML = '<li>' +
117        '<button type="button" class="btn-prev"><span class="visuallyhidden">go to previous slide</span></button>' +
118      '</li>' +
119      '<li>' +
120        '<button type="button" class="btn-next"><span class="visuallyhidden">
120go to next slide</span></button>' +
121      '</li>';
122
123    ctrls.querySelector('.btn-prev')
124      .addEventListener('click', function () {
125        prevSlide(true);
126      });
127    ctrls.querySelector('.btn-next')
128      .addEventListener('click', function () {
129        nextSlide(true);
130      });
131
132    carousel.appendChild(ctrls);
133
134    if (settings.slidenav || settings.animate) {
135      slidenav = document.createElement('ul');
136
137      slidenav.className = 'slidenav';
138
139      if (settings.animate) {
140        var li = document.createElement('li');
141
142        if (settings.startAnimated) {
143          li.innerHTML = '<button data-action="stop"><span class="visuallyhidden">Stop Animation </span>ï¿­</button>';
144        } else {
145          li.innerHTML = '<button data-action="start"><span class="visuallyhidden">Start Animation </span>▶</button>';
146        }
147
148        slidenav.appendChild(li);
149      }
150
151      if (settings.slidenav) {
152        
153        forEachElement(slides, function(el, i){
154          var li = document.createElement('li');
155          var klass = (i===0) ? 'class="current" ' : '';
156          var kurrent = (i===0) ? ' <span class="visuallyhidden">(Current Item)</span>' : '';
157
158          li.innerHTML = '<button '+ klass +'data-slide="' + i + '"><span class="visuallyhidden">Event item</span> ' + (i+1) + kurrent + '</button>';
159          slidenav.appendChild(li);
160        });
161      }
162
163      slidenav.addEventListener('click', function(event) {
164        var button = event.target;
165        if (button.localName == 'button') {
166          if (button.getAttribute('data-slide')) {
167            stopAnimation();
168            setSlides(button.getAttribute('data-slide'), true);
169          } else if (button.getAttribute('data-action') == "stop") {
170            stopAnimation();
171          } else if (button.getAttribute('data-action') == "start") {
172            startAnimation();
173          }
174        }
175      }, true);
176
177      carousel.className = 'active carousel with-slidenav';
178      carousel.appendChild(slidenav);
179    }
180
181    var liveregion = document.createElement('div');
182    liveregion.setAttribute('aria-live', 'polite');
183    liveregion.setAttribute('aria-atomic', 'true');
184    liveregion.setAttribute('class', 'liveregion visuallyhidden');
185    carousel.appendChild(liveregion);
186
187      slides[0].parentNode.addEventListener('transitionend', function (event) {
188        var slide = event.target;
189        removeClass(slide, 'in-transition');
190        if (hasClass(slide, 'current'))  {
191          if(setFocus) {
192            slide.setAttribute('tabindex', '-1');
193            slide.focus();
194            setFocus = false;
195          }
196        }
197      });
198
199      carousel.addEventListener('mouseenter', suspendAnimation);
200      carousel.addEventListener('mouseleave', function(event) {
201        if (animationSuspended) {
202          startAnimation();
203        }
204      });
205
206      carousel.addEventListener('focusin', function(event) {
207        if (!hasClass(event.target, 'slide')) {
208          suspendAnimation();
209        }
210      });
211      carousel.addEventListener('focusout', function(event) {
212        if (!hasClass(event.target, 'slide') && animationSuspended) {
213          startAnimation();
214        }
215      });
216
217    index = 0;
218    setSlides(index);
219
220     if (settings.startAnimated) {
221      timer = setTimeout(nextSlide, 5000);
222    }
223  }
224
225  function setSlides(new_current, setFocusHere, transition, announceItemHere) {
226    setFocus = typeof setFocusHere !== 'undefined' ? setFocusHere : false;
227    announceItem = typeof announceItemHere !== 'undefined' ? announceItemHere : false;
228    transition = typeof transition !== 'undefined' ? transition : 'none';
229
230    new_current = parseFloat(new_current);
231
232    var length = slides.length;
233    var new_next = new_current+1;
234    var new_prev = new_current-1;
235
236    if(new_next === length) {
237      new_next = 0;
238    } else if(new_prev < 0) {
239      new_prev = length-1;
240    }
241
242    for (var i = slides.length - 1; i >= 0; i--) {
243      slides[i].className = "slide";
244    }
245
246    slides[new_next].className = 'next slide' + ((transition == 'next') ? ' in-transition' : '');
247    slides[new_next].setAttribute('aria-hidden', 'true');
248
249    slides[new_prev].className = 'prev slide' + ((transition == 'prev') ? ' in-transition' : '');
250    slides[new_prev].setAttribute('aria-hidden', 'true');
251
252
253    slides[new_current].className = 'current slide';
254    slides[new_current].removeAttribute('aria-hidden');
255
256
257    if (announceItem) {
258      carousel.querySelector('.liveregion').textContent = 'Item ' + (new_current + 1) + ' of ' +   slides.length;
259    }
260
261    if(settings.slidenav) {
262      var buttons = carousel.querySelectorAll('.slidenav button[data-sli
262de]');
263      for (var j = buttons.length - 1; j >= 0; j--) {
264        buttons[j].className = '';
265        buttons[j].innerHTML = '<span class="visuallyhidden">Event item</span> ' + (j+1);
266      }
267      buttons[new_current].className = "current";
268      buttons[new_current].innerHTML = '<span class="visuallyhidden">Event item</span> ' + (new_current+1) + ' <span class="visuallyhidden">(Current Item)</span>';
269    }
270
271    index = new_current;
272
273  }
274
275  function nextSlide(announceItem) {
276    announceItem = typeof announceItem !== 'undefined' ? announceItem : false;
277
278    var length = slides.length,
279    new_current = index + 1;
280
281    if(new_current === length) {
282      new_current = 0;
283    }
284
285    setSlides(new_current, false, 'prev', announceItem);
286
287    if (settings.animate) {
288      timer = setTimeout(nextSlide, 5000);
289    }
290
291  }
292
293  function prevSlide(announceItem) {
294    announceItem = typeof announceItem !== 'undefined' ? announceItem : false;
295
296    var length = slides.length,
297    new_current = index - 1;
298
299    if(new_current < 0) {
300      new_current = length-1;
301    }
302
303    setSlides(new_current, false, 'next', announceItem);
304
305  }
306
307  function stopAnimation() {
308    clearTimeout(timer);
309    settings.animate = false;
310    animationSuspended = false;
311    _this = carousel.querySelector('[data-action]');
312    _this.innerHTML = '<span class="visuallyhidden">Start Animation </span>▶';
313    _this.setAttribute('data-action', 'start');
314  }
315
316  function startAnimation() {
317    settings.animate = true;
318    animationSuspended = false;
319    timer = setTimeout(nextSlide, 5000);
320    _this = carousel.querySelector('[data-action]');
321    _this.innerHTML = '<span class="visuallyhidden">Stop Animation </span>ï¿­';
322    _this.setAttribute('data-action', 'stop');
323  }
324
325  function suspendAnimation() {
326    if(settings.animate) {
327      clearTimeout(timer);
328      settings.animate = false;
329      animationSuspended = true;
330    }
331  }
332
333  return {
334    init:init,
335    next:nextSlide,
336    prev:prevSlide,
337    goto:setSlides,
338    stop:stopAnimation,
339    start:startAnimation
340  };
341});
342
343var c = new myCarousel();
344c.init({
345  id: 'c',
346  slidenav: true,
347  animate: true,
348  startAnimated: true
349});/******** 38005 internalID:MzgwMDUx *********/
350
351// Matching non-linear element heights - v1.0 - 18/12/2016 - M.J.Foskett - https://websemantics.uk/
352var matchHeights = function () {
353
354  "use strict";
355
356  var dataAttr = "data-matchHeights";
357  var minViewportWidth = 460;
358
359  function _getHeightSetsArray(dataAttr) {
360    // Return an array containing the different values of data-data-heightmatch
361    var value;
362    var arr = [];
363    var sets = document.querySelectorAll("[" + dataAttr + "]");
364    var i = sets.length;
365    while (i--) {
366      value = sets[i].getAttribute(dataAttr);
367      if (arr.indexOf(value) === -1) {
368        arr.push(value);
369      }
370    }
371    return arr;
372  }
373
374  function _resetMinHeights(set) {
375    // reset min-heights by removing the inline style.
376    var i = set.length;
377    while (i--) {
378      set[i].removeAttribute("style");
379    }
380  }
381
382  function _getMaxSetHeight(set) {
383    // return the height of the tallest element in set
384    var maxHeight = 0;
385    var currentHeight;
386    var i = set.length;
387    while (i--) {
388      currentHeight = set[i].clientHeight;
389      if (currentHeight > maxHeight) {
390        maxHeight = currentHeight;
391      }
392    }
393    return maxHeight;
394  }
395
396  function _setMinHeight(set, matchedHeight) {
397    var i = set.length;
398
399    while (i--) {
400      set[i].style.minHeight = matchedHeight + "px";
401    }
402  }
403
404  function init() {
405
406    var sets = _getHeightSetsArray(dataAttr);
407    var i = sets.length;
408    var set;
409
410    while (i--) {
411
412      set = document.querySelectorAll("[" + dataAttr + "=\"" + sets[i] + "\"]");
413
414      _resetMinHeights(set);
415
416      // Only above minimum screen width
417      if (document.body.clientWidth >= minViewportWidth) {
418
419        _setMinHeight(set, _getMaxSetHeight(set));
420
421      }
422    }
423  }
424
425  init();
426
427};
428
429
430// https://john-dugan.com/javascript-debounce/
431// https://codepen.io/johndugan/pen/BNwBWL?editors=001
432var debounce=function(e,t,n){var a;return function(){var r=this,i=arguments,o=function(){a=null,n||e.apply(r,i)},s=n&&!a;clearTimeout(a),a=setTimeout(o,t||200),s&&e.apply(r,i)}};
433
434
435window.addEventListener("load", matchHeights, false);
436window.addEventListener("resize", debounce(matchHeights, 100, false), false);
437/******** 38003 internalID:MzgwMDMx *********/
438
439//todo

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.