PageSourceSearch

https://thesavannahbananas.com/wp-content/plugins/mps-events-team-…/assets/js/events-filter.js?ver=1790273960

js thesavannahbananas.com collected 2026-09-24 18:50:24 UTC 4,834 bytes, 149 lines download raw bytes

1jQuery(document).ready(function ($) {
2  // Initialize datepicker with available dates
3  // Convert to array if it's an object (wp_localize_script sometimes converts arrays to objects)
4  var availableDates = etp_events.event_dates || [];
5  if (typeof availableDates === 'object' && !Array.isArray(availableDates)) {
6    availableDates = Object.values(availableDates);
7  }
8  
9  $('#event_start_date').datepicker({
10    showOtherMonths: true,
11    selectOtherMonths: true,
12    dateFormat: 'yy-mm-dd',
13    beforeShowDay: function(date) {
14      var dateString = $.datepicker.formatDate('yy-mm-dd', date);
15      var isAvailable = availableDates.indexOf(dateString) !== -1;
16      
17      // Return [enabled, cssClass, tooltip]
18      return [isAvailable, isAvailable ? 'has-event' : '', isAvailable ? 'Event available' : 'No events'];
19    },
20    onSelect: function() {
21      fetchEvents();
22      displaySelectedItems();
23    }
24  });
25
26  function fetchEvents() {
27    var months = $('#event_month').find('a.checked').map(function () {
28      return $(this).data('month');
29    }).get();
30
31    var startDate = $('#event_start_date').val();
32
33    var data = {
34      action: 'etp_filter_events',
35      event_months: months,
36      start_date: startDate,
37      security: etp_events.security,
38    };
39
40    $.ajax({
41      url: etp_events.ajax_url,
42      type: 'POST',
43      data: data,
44      beforeSend: function () {
45        $('.etp-events-grid-wrapper').addClass('loading');
46      },
47      success: function (response) {
48        if (response.success) {
49          $('.etp-events-grid-container').html(response.data);
50        }
51      },
52      complete: function () {
53        $('.etp-events-grid-wrapper').removeClass('loading');
54      },
55      error: function (xhr, status, error) {
56        console.error('AJAX Error:', status, error);
57        $('.etp-events-grid-wrapper').prepend('<div class="alert alert-error">There was an error fetching events. Please try again later.</div>');
58        $('.etp-events-grid-wrapper').removeClass('loading');
59        setTimeout(function () {
60          $('.etp-events-grid-wrapper .alert-error').remove();
61        }, 5000);
62      }
63    });
64  }
65
66  function displaySelectedItems() {
67    var selectedMonths = $('#event_month').find('a.checked:not(.any)').map(function () {
68      return $(this).text();
69    }).get();
70
71    // var startDate = $('#event_start_date').val();
72
73    var selectedItems = selectedMonths.slice();
74
75    // if (startDate) {
76    //   selectedItems.push('Date: ' + startDate);
77    // }
78
79    if (selectedItems.length === 0) {
80      $('.selected-filters').html('').css('display', 'none');
81      return;
82    }
83
84    var selectedItemsHTML = '<p>Selected Filters:</p><ul>';
85    selectedItems.forEach(function (item) {
86      selectedItemsHTML += '<li class="selected-item"><span class="selected-item-value">' + item + '</span><i class="fas fa-times"></i></li>';
87    });
88    selectedItemsHTML += '</ul>';
89
90    $('.selected-filters').html(selectedItemsHTML).css('display', 'flex');
91  }
92
93  // Clear date filters button
94  $('#clear_date_filters').on('click', function() {
95    $('#event_start_date').val('');
96    fetchEvents();
97    displaySelectedItems();
98  });
99
100  $(".dropdown").on("click", function () {
101    $(this).toggleClass("is-active");
102  });
103
104  $(".dropdown-content a").on("click", function (e) {
105    e.preventDefault();
106    e.stopPropagation();
107    if ($(this).hasClass("any")) {
108      $(this).closest(".dropdown").find(".dropdown-content a").removeClass("checked");
109      $(this).addClass("checked");
110    } else {
111      $(this).toggleClass("checked");
112      $(this).parents('.dropdown-content').find(".any").removeClass("checked");
113    }
114
115    if (!$(this).parents('.dropdown-content').find("a").hasClass("checked")) {
116      $(this).parents('.dropdown-content').find(".any").addClass("checked");
117    }
118
119    fetchEvents();
120    displaySelectedItems();
121  });
122
123  $(".selected-filters").on("click", ".selected-item i", function () {
124    var itemValue = $(this).siblings('.selected-item-value').text();
125    itemValue = itemValue.replace(/^\s+|\s+$/g, '');
126
127    // Check if it's a date filter
128    if (itemValue.startsWith('Date:')) {
129      $('#event_start_date').val('');
130    } else {
131      // It's a month filter
132      $('.dropdown-content').find('a').each(function () {
133        var dropdownItemValue = $(this).text().replace(/^\s+|\s+$/g, '');
134        if (dropdownItemValue === itemValue) {
135          $(this).removeClass('checked');
136        }
137      });
138    }
139
140    fetchEvents();
141    displaySelectedItems();
142  });
143
144  $(document).on("click", function (e) {
145    if (!$(e.target).closest(".dropdown").length) {
146      $(".dropdown").removeClass("is-active");
147    }
148  });
149});

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.