PageSourceSearch

https://nunspeetuitdekunst.nl/wp-content/themes/nunspreetuitde/assets/js/custom.js?ver=1.1

js nunspeetuitdekunst.nl collected 2026-10-02 21:25:23 UTC 34,671 bytes, 1,149 lines download raw bytes

1
2
3// The theme renders a single #map. initMap() is re-run on every filter/AJAX
4// refresh, so the live map, its clusterer and its markers are kept here and
5// replaced wholesale; the document-level handlers at the bottom of this block
6// are bound once and read from this state instead of closing over it.
7let nunspeetMapState = null;
8
9// Bumped on every initMap() call. Because initMap() awaits importLibrary(), a
10// slow earlier call could otherwise publish its state after a newer one.
11let nunspeetMapGeneration = 0;
12
13function nunspeetMarkerIconUrl(city) {
14  switch (String(city).toLowerCase()) {
15    case "elspeet":
16      return nunsp_ajax_object.theme_url + "/assets/images/map-pin-1.svg";
17    case "hulshorst":
18      return nunsp_ajax_object.theme_url + "/assets/images/map-pin-2.svg";
19    case "vierhouten":
20      return nunsp_ajax_object.theme_url + "/assets/images/map-pin-3.svg";
21    default:
22      return nunsp_ajax_object.theme_url + "/assets/images/map-pin.svg";
23  }
24}
25
26function nunspeetInfoWindowContent(markerData, btnText) {
27  return (
28    '<div class="mapsec-box"><div class="mapbox"><a href="' +
29    markerData.pageUrl +
30    '"> <span class="close"><i class="fal fa-times"></i></span></a>' +
31    '<div class="mapbox-img"> <img src="' +
32    markerData.image +
33    '" alt="img">' +
34    '</div> <div class="mapbox-txt"> <h6>' +
35    markerData.title +
36    '</h6> <span class="label">' +
37    markerData.address.city +
38    "</span>" +
39    "<p></p>" +
40    '<a href="' +
41    markerData.pageUrl +
42    '" class="common-btn btn">' +
43    btnText +
44    ' <i class="far fa-chevron-right"></i></a>' +
45    "</div></div></div>"
46  );
47}
48
49// Builds the AdvancedMarkerElements for one set of API markers and returns them
50// together with the bounds that enclose them.
51function nunspeetBuildMarkers(markerDataList, context) {
52  const { map, AdvancedMarkerElement, infowindow, btnText } = context;
53  const bounds = new google.maps.LatLngBounds();
54
55  const gmarkers = markerDataList.map((markerData) => {
56    const pos = new google.maps.LatLng(
57      markerData.latitude,
58      markerData.longitude
59    );
60    const contentString = nunspeetInfoWindowContent(markerData, btnText);
61
62    // Create a div element for the custom icon
63    const iconDiv = document.createElement("div");
64    iconDiv.innerHTML = `<img src="${nunspeetMarkerIconUrl(
65      markerData.address.city
66    )}" alt="Marker Icon" style="width: 50px; height: 50px;">`;
67
68    const marker = new AdvancedMarkerElement({
69      map,
70      position: pos,
71      content: iconDiv,
72      title: markerData.title,
73    });
74
75    // Marker click listener
76    marker.addListener("click", () => {
77      infowindow.setContent(contentString);
78      infowindow.open(map, marker);
79    });
80
81    bounds.extend(marker.position);
82    return marker;
83  });
84
85  return { gmarkers, bounds };
86}
87
88async function initMap(markers) {
89  // functions.php omits the Maps loader when no API key is configured; without
90  // it there is nothing to initialise and the list view has to stay usable.
91  if (!window.google || !google.maps || !google.maps.importLibrary) {
92    return;
93  }
94
95  const mapElement = document.getElementById("map");
96  if (!mapElement) {
97    return;
98  }
99
100  const generation = ++nunspeetMapGeneration;
101
102  // Request needed libraries.
103  const { Map } = await google.maps.importLibrary("maps");
104  const { AdvancedMarkerElement } = await google.maps.importLibrary("marker");
105
106  // A newer rebuild started while we were awaiting — let that one win.
107  if (generation !== nunspeetMapGeneration) {
108    return;
109  }
110
111  const jsonObject = markers.map(JSON.stringify);
112  const uniqueSet = new Set(jsonObject);
113  markers = Array.from(uniqueSet).map(JSON.parse);
114
115  // Create an object to keep track of seen coordinates
116  let seenCoordinates = {};
117
118  // Filter the array to remove duplicates based on latitude and longitude
119  const uniqueData = markers.filter(function (item) {
120    const key = item.latitude + "-" + item.longitude;
121
122    // If we haven't seen this coordinate before, mark it as seen and keep the item
123    if (!seenCoordinates[key]) {
124      seenCoordinates[key] = true;
125      return true;
126    }
127    return false;
128  });
129
130  markers = uniqueData;
131
132  const mapOptions = {
133    zoom: 3,
134    center: { lat: -28.024, lng: 140.887 },
135    mapTypeId: "roadmap",
136    fullscreenControl: false,
137    streetViewControl: false,
138    mapTypeControl: false,
139    mapId: "8b2776595e5c47f2",
140  };
141
142  const map = new Map(mapElement, mapOptions);
143
144  let btnText;
145
146  switch (nunsp_ajax_object.wpml_current_language) {
147    case "en":
148      btnText = "Read more";
149      break;
150    case "de":
151      btnText = "Weiterlesen";
152      break;
153    default:
154      btnText = "Lees meer";
155  }
156
157  const infowindow = new google.maps.InfoWindow();
158  const context = { map, AdvancedMarkerElement, infowindow, btnText };
159  const { gmarkers, bounds } = nunspeetBuildMarkers(markers, context);
160
161  map.fitBounds(bounds);
162
163  let clusterAlgo = new markerClusterer.SuperClusterAlgorithm({
164    maxZoom: 15,
165  });
166
167  const svg = window.btoa(
168    `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 30"><path fill="#23397c" stroke="#23397c" stroke-width="3" stroke-opacity="0.25" d="M15,5c5.524,0,10,4.478,10,10s-4.478,10-10,10S5,20.522,5,15S9.478,5,15,5z"/></svg>`
169  );
170
171  const renderer = {
172    render: ({ count, position }) =>
173      new google.maps.Marker({
174        label: {
175          text: String(count),
176          color: "#FFFFFF",
177          fontSize: "16px",
178          fontWeight: "600",
179        },
180        icon: {
181          url: `data:image/svg+xml;base64,${svg}`,
182          scaledSize: new google.maps.Size(65, 65),
183        },
184        position,
185        // adjust zIndex to be above other markers
186        zIndex: Number(google.maps.Marker.MAX_ZINDEX) + count,
187      }),
188  };
189
190  // Marker clusterer
191  let cluster = new markerClusterer.MarkerClusterer({
192    map: map,
193    markers: gmarkers,
194    algorithm: clusterAlgo,
195    renderer,
196  });
197
198  // Publish the live map so the list/map view switch and the filter handlers
199  // below can reach it. The map is often built while #map is still
200  // display:none, which makes this first fitBounds() run against a zero-sized
201  // container — refitNunspeetMap() corrects that once the map view is shown.
202  nunspeetMapState = {
203    map,
204    cluster,
205    infowindow,
206    btnText,
207    AdvancedMarkerElement,
208    markers,
209    bounds,
210  };
211}
212
213// Bound once: initMap() runs again on every AJAX refresh, so registering these
214// inside it would stack up a handler per rebuild.
215jQuery(document).on(
216  "change",
217  ".mapsec .location_filter input:checkbox[name^='location']",
218  function () {
219    const state = nunspeetMapState;
220    if (!state) {
221      return;
222    }
223
224    let filters = [];
225    jQuery(
226      ".mapsec .location_filter input:checkbox[name^='location']:checked"
227    ).each(function (index, elem) {
228      filters.push(jQuery(elem).val());
229    });
230
231    const filteredMarkers = filterByCity(state.markers, filters);
232
233    state.cluster.clearMarkers();
234
235    const { gmarkers, bounds } = nunspeetBuildMarkers(filteredMarkers, state);
236
237    state.map.fitBounds(bounds);
238    state.bounds = bounds;
239
240    state.cluster.addMarkers(gmarkers);
241  }
242);
243
244jQuery(document).on("click", "button#reset", function (event) {
245  const state = nunspeetMapState;
246  if (!state) {
247    return;
248  }
249  if (document.querySelector('input[name="location[]"]:checked') !== null) {
250    state.cluster.clearMarkers();
251    initMap(state.markers);
252  }
253});
254
255jQuery(function ($) {
256  //Home slider//
257  var swiper = new Swiper(".homepage-banner", {});
258  $(
259    ".home .about-txt .moreless-button, .innerpageabsec.aboutsec .about-txt .moreless-button"
260  ).click(function () {
261    $(
262      ".home .about-txt .moretext, .innerpageabsec.aboutsec .about-txt .moretext"
263    ).slideToggle();
264  });
265
266  $(".about-txt .moreless-button").click(function () {
267    if ($(".about-txt .moreless-button").text() == "Lees meer") {
268      $(this).text("Lees minder");
269      $(this).addClass("active");
270      $(".moretext").addClass("autoheight");
271    } else {
272      $(this).text("Lees meer");
273      $(this).removeClass("active");
274      $(".moretext").removeClass("autoheight");
275    }
276  });
277
278  $(".innerpageabsec.aboutsec.listsec .moretext .moreless-button").on(
279    "click",
280    function () {
281      $(".innerpageabsec.aboutsec.listsec .moretext").clearQueue();
282      $(".innerpageabsec.aboutsec.listsec .moretext").stop();
283      e.stopPropagation();
284    }
285  );
286
287  $(".reservation-lists .moreless-button").click(function () {
288    $(".reservation-lists .extratxt").slideToggle();
289    if ($(".reservation-lists .moreless-button").text() == "Lees meer") {
290      $(this).text("Lees minder");
291      $(this).addClass("active");
292    } else {
293      $(this).text("Lees meer");
294      $(this).removeClass("active");
295    }
296  });
297  //menu//
298  $("header .navbar-toggler").click(function () {
299    $(this).toggleClass("active");
300    $("header").toggleClass("nav-show");
301    $(".navbar").toggleClass("show");
302    $("body").toggleClass("overflow_body");
303  });
304  //search//
305  $(".searchbox").click(function () {
306    $(".search-mainbar").addClass("show");
307  });
308  $(".search-mainbar .close").click(function () {
309    $(".search-mainbar").removeClass("show");
310  });
311  // stickyHeader
312  $(function () {
313    var shrinkHeader = 100;
314    $(window).scroll(function () {
315      var scroll = getCurrentScroll();
316      if (scroll >= shrinkHeader) {
317        $("header").addClass("sticky");
318      } else {
319        $("header").removeClass("sticky");
320      }
321    });
322    function getCurrentScroll() {
323      return window.pageYOffset || document.documentElement.scrollTop;
324    }
325
326    $("header ul.navbar-nav li.menu-item-has-children > a").prepend(
327      '<span class="parent_arrow"></span>'
328    );
329
330    jQuery(
331      "#menu-header-menu > li.menu-item-has-children > a > .parent_arrow"
332    ).click(function (e) {
333      e.preventDefault();
334      jQuery("ul.sub-menu").slideUp();
335      if (jQuery(this).hasClass("isOpen")) {
336        jQuery(this).removeClass("isOpen");
337      } else {
338        jQuery(".parent_arrow").removeClass("isOpen");
339        jQuery(this).addClass("isOpen");
340        jQuery(this).parent().parent().children("ul.sub-menu").slideDown();
341      }
342    });
343
344    jQuery("#menu-header-menu ul.sub-menu li a .parent_arrow").click(function (
345      e
346    ) {
347      e.preventDefault();
348      if (jQuery(this).hasClass("isOpen")) {
349        jQuery(this).parent().next().slideUp();
350      } else {
351        jQuery(this).parent().next().slideDown();
352      }
353
354      jQuery(this).toggleClass("isOpen");
355    });
356  });
357  //slider//
358  var swiperTech = new Swiper(".eventslider", {
359    slidesPerView: 1,
360    spaceBetween: 30,
361    loop: true,
362    spaceBetween: 30,
363    slidesPerGroup: 1,
364    navigation: {
365      nextEl: ".eventslider .swiper-arrows .swiper-button-next",
366      prevEl: ".eventslider .swiper-arrows .swiper-button-prev",
367    },
368    pagination: {
369      el: ".eventslider .swiper-pagination",
370      clickable: true,
371    },
372
373    breakpoints: {
374      767: {
375        slidesPerView: 2,
376        spaceBetween: 30,
377        slidesPerGroup: 2,
378      },
379      1100: {
380        slidesPerView: 2,
381        spaceBetween: 30,
382        slidesPerGroup: 2,
383      },
384      1280: {
385        slidesPerView: 4,
386        spaceBetween: 30,
387        slidesPerGroup: 4,
388      },
389      1990: {
390        slidesPerView: 4,
391        spaceBetween: 30,
392        slidesPerGroup: 4,
393      },
394    },
395  });
396  var swiperTech = new Swiper(".whatslider", {
397    slidesPerView: 1,
398    spaceBetween: 30,
399    loop: true,
400    spaceBetween: 30,
401    slidesPerGroup: 1,
402    navigation: {
403      nextEl: ".whatslider .swiper-arrows .swiper-button-next",
404      prevEl: ".whatslider .swiper-arrows .swiper-button-prev",
405    },
406    pagination: {
407      el: ".whatslider .swiper-pagination",
408      clickable: true,
409    },
410
411    breakpoints: {
412      767: {
413        slidesPerView: 2,
414        spaceBetween: 30,
415        slidesPerGroup: 2,
416      },
417      1280: {
418        slidesPerView: 2,
419        spaceBetween: 30,
420        slidesPerGroup: 2,
421      },
422      1990: {
423        slidesPerView: 2,
424        spaceBetween: 30,
425        slidesPerGroup: 2,
426      },
427    },
428  });
429
430  var ovlslides = $(".overviewlistslider .swiper-slide").length;
431  var swiperTech = new Swiper(".overviewlistslider", {
432    slidesPerView: 1,
433    spaceBetween: 30,
434    loop: ovlslides > 3 ? true : false,
435    spaceBetween: 30,
436    autoHeight: true,
437    slidesPerGroup: 1,
438    navigation: {
439      nextEl: ".overviewlistslider .swiper-arrows .swiper-button-next",
440      prevEl: ".overviewlistslider .swiper-arrows .swiper-button-prev",
441    },
442    pagination: {
443      el: ".overviewlistslider .swiper-pagination",
444      clickable: true,
445    },
446
447    breakpoints: {
448      767: {
449        slidesPerView: 2,
450        spaceBetween: 30,
451        slidesPerGroup: 2,
452      },
453      1100: {
454        slidesPerView: 3,
455        spaceBetween: 30,
456        slidesPerGroup: 3,
457      },
458      1280: {
459        slidesPerView: 4,
460        spaceBetween: 30,
461        slidesPerGroup: 4,
462      },
463      1990: {
464        slidesPerView: 4,
465        spaceBetween: 30,
466        slidesPerGroup: 4,
467      },
468    },
469  });
470
471  var swiper = new Swiper(".listthumbslider", {
472    spaceBetween: 20,
473    slidesPerView: 3,
474    freeMode: true,
475    watchSlidesProgress: true,
476  });
477  // var swiper2 = new Swiper(".listthumbslider2", {
478  //   spaceBetween: 10,
479  //   navigation: {
480  //     nextEl: ".listthumbslider .swiper-button-next",
481  //     prevEl: ".listthumbslider .swiper-button-prev",
482  //   },
483  //   thumbs: {
484  //     swiper: swiper,
485  //   },
486  // });
487
488  //dropdown//
489  $(".dropdown > .caption").on("click", function () {
490    $(this).parent().toggleClass("open");
491  });
492  $(".dropdown > .list > .item").on("click", function () {
493    $(".dropdown > .list > .item").removeClass("selected");
494    $(this)
495      .addClass("selected")
496      .parent()
497      .parent()
498      .removeClass("open")
499      .children(".caption")
500      .html($(this).html());
501
502    if ($(this).data("item") == "RUB") {
503    } else if ($(this).data("item") == "UAH") {
504    } else {
505    }
506  });
507  $(document).on("keyup", function (evt) {
508    if ((evt.keyCode || evt.which) === 27) {
509      $(".dropdown").removeClass("open");
510    }
511  });
512  $(document).on("click", function (evt) {
513    if ($(evt.target).closest(".dropdown > .caption").length === 0) {
514      $(".dropdown").removeClass("open");
515    }
516  });
517
518  jQuery(".lang-cls").click(function (e) {
519    //e.preventDefault();
520    var en_slug = jQuery(this).attr("data-en-slug");
521    var de_slug = jQuery(this).attr("data-de-slug");
522    var nl_slug = jQuery(this).attr("data-nl-slug");
523    localStorage.setItem("en_slug", en_slug);
524    localStorage.setItem("de_slug", de_slug);
525    localStorage.setItem("nl_slug", nl_slug);
526  });
527
528  /*Map Initialize For overnachen sub category */
529  if ($(".location-category").length) {
530    var canBeLoaded = true,
531      bottomOffset = 2000; // the distance (in px) from the page bottom when you want to load more posts
532    var theLanguage = jQuery("html").attr("lang");
533    var category = nunsp_ajax_object.category;
534    var lastScrollTop = 0;
535
536    $(window).scroll(function () {
537      if (
538        $(".overviewsec .container .location_list_loading").length &&
539        !$(".overviewsec .container .location_list_loading").hasClass("hide")
540      ) {
541        var total_page = document.getElementsByName("total_page");
542        var total_count = document.getElementsByName("total_count");
543        var total_post_count = total_count[0].value;
544        var total_page_count = total_page[0].value;
545        if (jQuery(".location-grid .mappin a").hasClass("active")) {
546          var current_view = "map";
547        } else {
548          var current_view = "grid";
549        }
550
551        var st = $(this).scrollTop();
552        if (st > lastScrollTop) {
553          // downscroll code
554          var location_ids_str = jQuery
555            .map(
556              jQuery(":checkbox[name=location\\[\\]]:checked"),
557              function (n, i) {
558                return n.value;
559              }
560            )
561            .join(",");
562
563          var data = {
564            action: "get_location_filter_category",
565            location_ids_str: location_ids_str,
566            category: category,
567            lang: theLanguage,
568            page: Number(nunsp_ajax_object.current_page) + 1,
569            current_view: current_view,
570          };
571          if (
572            $(document).scrollTop() > $(document).height() - bottomOffset &&
573            canBeLoaded == true &&
574            total_post_count > 20
575          ) {
576            if (nunsp_ajax_object.current_page < total_page_count) {
577              jQuery(".overviewsec .overlay-loader").show();
578              $.ajax({
579                url: nunsp_ajax_object.ajaxurl,
580                data: data,
581                type: "POST",
582                beforeSend: function (xhr) {
583                  canBeLoaded = false;
584                },
585                success: function (data) {
586                  if (data.grid_view) {
587                    jQuery(".overviewsec .overlay-loader").hide();
588                    jQuery(
589                      ".location-list .container .location_list_loading"
590                    ).append(data.grid_view);
591
592                    if (nunsp_ajax_object.current_page <= total_page_count) {
593                      canBeLoaded = true;
594                    } else {
595                      canBeLoaded = false;
596                    }
597                    nunsp_ajax_object.current_page++;
598                  }
599                },
600              });
601            }
602          }
603        } else {
604          // upscroll code
605        }
606        lastScrollTop = st;
607      }
608    });
609  }
610
611  if ($(".ziendoen-subcategories").length) {
612    var canBeLoaded = true,
613      bottomOffset = 1500; // the distance (in px) from the page bottom when you want to load more posts
614    var theLanguage = jQuery("html").attr("lang");
615    var category = nunsp_ajax_object.category;
616    var category_id = jQuery("#category_id_zoen").val();
617    var hide_filter = jQuery("#hide_filter").val();
618    var lastScrollTop = 0;
619    $(window).on("load", function () {
620      nunsp_ajax_object.current_page = 1;
621      jQuery.ajax({
622        type: "post",
623        dataType: "html",
624        url: nunsp_ajax_object.ajaxurl,
625        data: {
626          action: "get_location_filter_map",
627          lang: nunsp_ajax_object.wpml_current_language,
628        },
629        success: function (response) {
630          const result = jQuery.parseJSON(response);
631          const myObj = JSON.parse(result.map_view);
632
633          if (myObj.status == 200) {
634            initMap(myObj.body);
635          }
636        },
637      });
638    });
639    $(window).scroll(function () {
640      if (
641        $(".overviewsec .container .location_list_loading").length &&
642        !$(".overviewsec .container .location_list_loading").hasClass("hide")
643      ) {
644        var total_page = document.getElementsByName("total_page");
645        var total_count = document.getElementsByName("total_count");
646        var total_post_count = total_count[0].value;
647        var total_page_count = total_page[0].value;
648        if (jQuery(".location-grid .mappin a").hasClass("active")) {
649          var current_view = "map";
650        } else {
651          var current_view = "grid";
652        }
653
654        var st = $(this).scrollTop();
655        if (st > lastScrollTop) {
656          // downscroll code
657          var location_ids_str = jQuery
658            .map(
659              jQuery(":checkbox[name=location\\[\\]]:checked"),
660              function (n, i) {
661                return n.value;
662              }
663            )
664            .join(",");
665
666          var data = {
667            action: "get_location_filter_category",
668            location_ids_str: location_ids_str,
669            category: category,
670            lang: theLanguage,
671            page: Number(nunsp_ajax_object.current_page) + 1,
672            current_view: current_view,
673            id: category_id,
674            is_filter: hide_filter,
675          };
676          if (
677            $(document).scrollTop() > $(document).height() - bottomOffset &&
678            canBeLoaded == true &&
679            Number(nunsp_ajax_object.current_page) < total_page_count
680          ) {
681            if (hide_filter != 0) {
682              console.log(hide_filter);
683              if (nunsp_ajax_object.current_page <= total_page_count) {
684                jQuery(".overviewsec .overlay-loader").show();
685                $.ajax({
686                  url: nunsp_ajax_object.ajaxurl,
687                  data: data,
688                  type: "POST",
689                  beforeSend: function (xhr) {
690                    canBeLoaded = false;
691                  },
692                  success: function (data) {
693                    if (data.grid_view) {
694                      jQuery(".overviewsec .overlay-loader").hide();
695                      jQuery(
696                        ".location-list .container .location_list_loading"
697                      ).append(data.grid_view);
698
699                      if (nunsp_ajax_object.current_page <= total_page_count) {
700                        canBeLoaded = true;
701                      } else {
702                        canBeLoaded = false;
703                      }
704                      nunsp_ajax_object.current_page++;
705                    }
706                  },
707                });
708              }
709            }
710          }
711        } else {
712          // upscroll code
713        }
714        lastScrollTop = st;
715      }
716    });
717  }
718
719  // The agenda overview page has a different slug per language
720  // (agenda-overzicht / events-calendar / veranstaltungskalender), so detect it
721  // by the markup the 'agenda_lijst' layout renders instead of by body class.
722  if ($(".agenda-filter").length) {
723    let canBeLoaded = true; // allow AJAX call only if necessary
724    let isLoading = false; // flag to prevent multiple AJAX calls
725    let current_id = "";
726    var updateMap = true; // flag to manage map updates
727    var bottomOffset = 2500;
728
729    var firstLoad = true;
730    $(window).on("load", function () {
731      nunsp_ajax_object.total_pages = jQuery("#total_page").val();
732      jQuery("#from").datepicker({
733        changeMonth: true,
734        dateFormat: "dd-mm-yy",
735      });
736
737      jQuery.ajax({
738        type: "post",
739        dataType: "html",
740        url: nunsp_ajax_object.ajaxurl,
741        cache: false,
742        data: {
743          action: "get_events_map",
744        },
745        success: function (response) {
746          if (response) {
747            const result = jQuery.parseJSON(response);
748            const myObj = JSON.parse(result.map_view);
749            if (myObj.status === 200) {
750              initMap(myObj.body);
751            }
752          }
753        },
754      });
755
756      nunsp_ajax_object.current_page = 2;
757    });
758    function loadAgendaData() {
759      let product_ids_str = jQuery
760        .map(jQuery(":checkbox[name=category\\[\\]]:checked"), function (n, i) {
761          return n.value;
762        })
763        .join(",");
764      let location_ids_str = jQuery
765        .map(jQuery(":checkbox[name=location\\[\\]]:checked"), function (n, i) {
766          return n.value;
767        })
768        .join(",");
769      let from_date = jQuery("#from").val();
770
771      let current_view = jQuery(".location-grid .mappin a").hasClass("active")
772        ? "map"
773        : "grid";
774
775      jQuery.ajax({
776        type: "post",
777        dataType: "html",
778        url: nunsp_ajax_object.ajaxurl,
779        cache: false,
780        data: {
781          action: "get_event_filter",
782          product_ids_str: product_ids_str,
783          location_ids_str: location_ids_str,
784          from_date: from_date,
785          lang: nunsp_ajax_object.wpml_current_language,
786          page: 1, // Always fetch the first page of results
787          current_view: current_view,
788          current_id: current_id,
789        },
790        beforeSend: function (xhr) {
791          canBeLoaded = false;
792          isLoading = true;
793        },
794        success: function (response) {
795          if (response) {
796            const result = jQuery.parseJSON(response);
797
798            // Replace content in the event list
799            jQuery(".agenda-filter > .container").html(result.grid_view);
800
801            // Rebuild the markers so the map view reflects the same filters.
802            if (result.map_view) {
803              const mapObj = JSON.parse(result.map_view);
804              if (mapObj.status === 200) {
805                initMap(mapObj.body);
806              }
807            }
808
809            if (current_view === "map") {
810              jQuery(".location-grid .mappin a").addClass("active");
811              jQuery(".location-grid .grid a").removeClass("active");
812              jQuery(".agenda-filter #map").show();
813            }
814
815            var elementf = document.getElementById("from");
816            if (typeof elementf !== "undefined" && elementf !== null) {
817              jQuery("#from").datepicker({
818                changeMonth: true,
819                dateFormat: "dd-mm-yy",
820              });
821            }
822
823            jQuery(".overviewsec .overlay-loader").hide();
824          }
825          isLoading = false;
826        },
827        error: function () {
828          isLoading = false;
829        },
830      });
831    }
832
833    // Remove scrolling-based lazy loading by commenting out this code
834    /*
835$(window).scroll(function () {
836    if (!$(".overviewsec .container .event_list_loading").hasClass("hide")) {
837        if ((canBeLoaded == true) && $(window).scrollTop() + $(window).height() >= $(document).height() - bottomOffset && !isLoading && (nunsp_ajax_object.current_page <= nunsp_ajax_object.total_pages)) {
838            updateMap = false;
839            loadAgendaData();
840        }
841    }
842});
843*/
844
845    // Keep filter functionality
846    jQuery(document).on("change", "#from", function (event) {
847      nunsp_ajax_object.current_page = 1;
848      firstLoad = false;
849      updateMap = true;
850      loadAgendaData();
851    });
852    jQuery(document).on(
853      "click",
854      "#Vandaag, #Morgen, #Ditweekend",
855      function (event) {
856        event.preventDefault();
857        current_id = jQuery(this).attr("id");
858        nunsp_ajax_object.current_page = 1;
859        firstLoad = false;
860        updateMap = true;
861        loadAgendaData();
862      }
863    );
864    jQuery(document).on(
865      "change",
866      '.agenda-filter input[type="checkbox"]',
867      function (event) {
868        nunsp_ajax_object.current_page = 1;
869        firstLoad = false;
870        updateMap = true;
871        loadAgendaData();
872      }
873    );
874    jQuery(document).on("click", ".agenda-filter #reset", function (event) {
875      event.preventDefault();
876      jQuery(".agenda-filter .location_filter input[type=checkbox]").prop(
877        "checked",
878        false
879      );
880      jQuery(".agenda-filter .category_filter input[type=checkbox]").prop(
881        "checked",
882        false
883      );
884      jQuery("#from").val("");
885      nunsp_ajax_object.current_page = 1;
886      firstLoad = false;
887      updateMap = true;
888      loadAgendaData();
889    });
890  }
891
892  /*Map Js call for home page map */
893  if ($("body").hasClass("home")) {
894    jQuery.ajax({
895      type: "post",
896      dataType: "html",
897      url: nunsp_ajax_object.ajaxurl,
898      data: {
899        action: "get_location_filter_map",
900        lang: nunsp_ajax_object.wpml_current_language,
901      },
902      success: function (response) {
903        const result = jQuery.parseJSON(response);
904        const myObj = JSON.parse(result.map_view);
905
906        if (myObj.status == 200) {
907          initMap(myObj.body);
908        }
909      },
910    });
911  }
912});
913
914/*Mobile Menu*/
915jQuery(".down-arrow").click(function () {
916  jQuery(this).toggleClass("active").next().toggle(500);
917});
918jQuery(".respo_btn").click(function () {
919  jQuery("body").toggleClass("overflow_body");
920  jQuery(this).next("ul").slideToggle(300);
921  if (!jQuery(this).hasClass("active")) {
922    jQuery(this).find("img").attr("src", "images/close_menu.png");
923    jQuery(this).addClass("active");
924  } else {
925    jQuery(this).find("img").attr("src", "images/menu.png");
926    jQuery(this).removeClass("active");
927  }
928});
929/*Mobile Menu*/
930const slidesCount = document.querySelectorAll(
931  ".eventlistslider .swiper-slide"
932).length;
933
934// find the max slidesPerView from your breakpoints
935const breakpoints = {
936  767: 2,
937  1100: 3,
938  1280: 4,
939  1990: 4,
940};
941const maxSlidesPerView = Math.max(...Object.values(breakpoints), 1);
942
943var swiperTech = new Swiper(".eventlistslider", {
944  slidesPerView: 1,
945  spaceBetween: 30,
946  loop: slidesCount > maxSlidesPerView, // only loop if more slides than can be shown
947  autoHeight: true,
948  slidesPerGroup: 1,
949  navigation: {
950    nextEl: ".eventlistslider .swiper-arrows .swiper-button-next",
951    prevEl: ".eventlistslider .swiper-arrows .swiper-button-prev",
952  },
953  pagination: {
954    el: ".eventlistslider .swiper-pagination",
955    clickable: true,
956  },
957  breakpoints: {
958    767: {
959      slidesPerView: 2,
960      spaceBetween: 30,
961      slidesPerGroup: 2,
962    },
963    1100: {
964      slidesPerView: 3,
965      spaceBetween: 30,
966      slidesPerGroup: 3,
967    },
968    1280: {
969      slidesPerView: 4,
970      spaceBetween: 30,
971      slidesPerGroup: 4,
972    },
973    1990: {
974      slidesPerView: 4,
975      spaceBetween: 30,
976      slidesPerGroup: 4,
977    },
978  },
979});
980
981jQuery("#projectKey").on("change", function () {
982  url = this.value;
983  window.location = url;
984});
985
986jQuery(document).on(
987  "click",
988  ".ziendoen-subcategories #reset",
989  function (event) {
990    event.preventDefault();
991    if (
992      jQuery(".combo-filter .location_filter input[type=checkbox]").is(
993        ":checked"
994      )
995    ) {
996      jQuery(".combo-filter .location_filter input[type=checkbox]").prop(
997        "checked",
998        false
999      );
1000      nunsp_ajax_object.current_page = 1;
1001      loadMapData();
1002    }
1003  }
1004);
1005
1006jQuery(document).on("change", ".combo-filter", function (event) {
1007  if (
1008    event.target.matches(
1009      '.location-list .location_filter input[type="checkbox"]'
1010    )
1011  ) {
1012    nunsp_ajax_object.current_page = 1;
1013    loadMapData();
1014  }
1015});
1016
1017function loadMapData() {
1018  var subcat = nunsp_ajax_object.category;
1019  var id = nunsp_ajax_object.name;
1020  var category = subcat ? subcat : id;
1021  var category_id = jQuery("#category_id_zoen").val();
1022  var theLanguage = jQuery("html").attr("lang");
1023  var location_ids_str = jQuery
1024    .map(jQuery(":checkbox[name=location\\[\\]]:checked"), function (n, i) {
1025      return n.value;
1026    })
1027    .join(",");
1028
1029  jQuery(".overviewsec .overlay-loader").show();
1030
1031  if (jQuery(".location-grid .mappin a").hasClass("active")) {
1032    var current_view = "map";
1033  } else {
1034    var current_view = "grid";
1035  }
1036  jQuery.ajax({
1037    type: "post",
1038    dataType: "html",
1039    url: nunsp_ajax_object.ajaxurl,
1040    data: {
1041      action: "get_location_filter_category",
1042      location_ids_str: location_ids_str,
1043      category: category,
1044      lang: theLanguage,
1045      current_view: current_view,
1046      id: category_id,
1047    },
1048    success: function (response) {
1049      let result = jQuery.parseJSON(response);
1050      result.grid_view = jQuery(result.grid_view).filter(function () {
1051        return !jQuery(this).hasClass("aboutsec");
1052      });
1053      jQuery(".location-list").replaceWith(result.grid_view);
1054
1055      var myObj = JSON.parse(result.map_view);
1056
1057      if (myObj.status == 200) {
1058        initMap(myObj.body);
1059      }
1060
1061      if (current_view == "map") {
1062        jQuery(".overviewsec .container .event_list_loading").hide();
1063        jQuery(".overviewsec .container .location_list_loading").hide();
1064        jQuery(".overviewsec .container .event_list_loading").addClass("hide");
1065        jQuery(".overviewsec .container .location_list_loading").addClass(
1066          "hide"
1067        );
1068        jQuery(".location-grid .mappin a").addClass("active");
1069        jQuery(".overviewsec.overview-subcatsec").addClass("overlap");
1070        jQuery(".location-list").addClass("overlap");
1071        jQuery(".overviewsec #map").show();
1072        jQuery(".location-category.overviewsec").addClass("listmap-viewshow");
1073        refitNunspeetMap();
1074      } else {
1075        jQuery(".location-grid .grid a").addClass("active");
1076      }
1077      jQuery(".overviewsec .overlay-loader").hide();
1078    },
1079  });
1080}
1081
1082function filterByCity(data, cities) {
1083  if (cities && Array.isArray(cities) && cities.length > 0) {
1084    // Filter the array based on the specified cities
1085    return data.filter((item) =>
1086      cities
1087        .map((city) => city.toLowerCase())
1088        .includes(item.address.city.toLowerCase())
1089    );
1090  } else {
1091    // If no cities are specified, return the original array
1092    return data;
1093  }
1094}
1095
1096jQuery(document).on("click", ".location-grid .grid a", function (event) {
1097  jQuery(".overviewsec .container .event_list_loading").css("display", "flex");
1098  jQuery(".overviewsec .container .location_list_loading").css(
1099    "display",
1100    "flex"
1101  );
1102  jQuery(".overviewsec .container .event_list_loading").removeClass("hide");
1103  jQuery(".overviewsec .container .location_list_loading").removeClass("hide");
1104  jQuery(this).addClass("active");
1105  jQuery(".location-grid .mappin a").removeClass("active");
1106  jQuery(".overviewsec.overview-subcatsec").removeClass("overlap");
1107  jQuery(".location-list").removeClass("overlap");
1108  jQuery(".location-category.overviewsec").removeClass("listmap-viewshow");
1109  jQuery(".ziendoen-subcategories.overviewsec").removeClass("listmap-viewshow");
1110  jQuery(".overviewsec #map").hide();
1111});
1112
1113jQuery(document).on("click", ".location-grid .mappin a", function (event) {
1114  jQuery(".overviewsec .container .event_list_loading").hide();
1115  jQuery(".overviewsec .container .location_list_loading").hide();
1116  jQuery(".overviewsec .container .event_list_loading").addClass("hide");
1117  jQuery(".overviewsec .container .location_list_loading").addClass("hide");
1118  jQuery(this).addClass("active");
1119  jQuery(".location-grid .grid a").removeClass("active");
1120  jQuery(".overviewsec.overview-subcatsec").addClass("overlap");
1121  jQuery(".location-list").addClass("overlap");
1122  jQuery(".overviewsec #map").show();
1123  jQuery(".location-category.overviewsec").addClass("listmap-viewshow");
1124  jQuery(".ziendoen-subcategories.overviewsec").addClass("listmap-viewshow");
1125  refitNunspeetMap();
1126});
1127
1128// #map is hidden while the grid view is active, so the map instance was sized
1129// against a 0x0 container. Re-fit it once the container is visible.
1130function refitNunspeetMap() {
1131  const state = nunspeetMapState;
1132  if (!state || typeof google === "undefined") {
1133    return;
1134  }
1135  google.maps.event.trigger(state.map, "resize");
1136  if (state.bounds && !state.bounds.isEmpty()) {
1137    state.map.fitBounds(state.bounds);
1138  }
1139}
1140
1141jQuery(document).ready(function ($) {
1142  $(".socialicon ul li a[href]").attr("target", "_blank");
1143  $(".heateor_sss_horizontal_sharing .heateor_sss_sharing_ul a[href]").attr(
1144    "target",
1145    "_blank"
1146  );
1147});
1148
1149/////////////////// ANTI SPAM EMAIL FORM

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.