PageSourceSearch

https://haeday.org/wp-content/plugins/multidate-picker-gravity-for…/assets/js/multi-date-picker.js?ver=1.1

js haeday.org collected 2026-10-02 10:12:34 UTC 2,965 bytes, 58 lines download raw bytes

1(function($) {
2    const configs = window.gfMultiDatePickerConfig || [];
3    const initializedFields = new Set();
4
5    function initializeMultiDatePickers() {
6        if (!$.fn.datepicker) {
7            console.warn('jQuery UI Datepicker is not available.');
8            return;
9        }
10
11        configs.forEach(config => {
12            const fieldSelector = `#input_${config.form_id}_${config.field_id}`;
13            if (initializedFields.has(fieldSelector)) return;
14            initializedFields.add(fieldSelector);
15
16            const hiddenFieldSelector = `${fieldSelector}_hidden`;
17            const selectedDates = new Set($(fieldSelector).val()?.split(', ').filter(Boolean));
18
19            $(fieldSelector).wrap('<div class="gf-multi-date-field"></div>').after('<span class="calendar-icon" role="button" aria-label="Open date picker"></span>');
20            if (!$(hiddenFieldSelector).length) {
21                $(fieldSelector).after(`<input type="hidden" id="${hiddenFieldSelector.replace('#', '')}" name="${hiddenFieldSelector.replace('#', '')}" value="${Array.from(selectedDates).join(', ')}">`);
22            }
23
24            $(fieldSelector).attr({
25                'aria-describedby': 'datepicker-instructions',
26                'aria-label': 'Select multiple dates'
27            }).datepicker({
28                dateFormat: config.date_format,
29                beforeShow: (input, inst) => {
30                    setTimeout(() => {
31                        if (!$(".ui-datepicker-close-btn").length) {
32                            $(inst.dpDiv).append('<button type="button" class="ui-datepicker-close-btn" aria-label="Close date picker">×</button>');
33                            $(".ui-datepicker-close-btn").on("click", () => $(fieldSelector).datepicker("hide"));
34                        }
35                    }, 10);
36                },
37                beforeShowDay: date => {
38                    const dateString = $.datepicker.formatDate("mm/dd/yy", date);
39                    return [true, selectedDates.has(dateString) ? "ui-state-highlight" : ""];
40                },
41                onSelect: dateText => {
42                    selectedDates.has(dateText) ? selectedDates.delete(dateText) : selectedDates.add(dateText);
43                    const datesArray = Array.from(selectedDates);
44                    $(fieldSelector).val(datesArray.join(", "));
45                    $(hiddenFieldSelector).val(datesArray.join(", "));
46                    $(fieldSelector).datepicker("refresh");
47                    setTimeout(() => $(fieldSelector).datepicker("show"), 0);
48                }
49            });
50
51            $(fieldSelector).parent().find(".calendar-icon").on("click", () => $(fieldSelector).datepicker("show"));
52            $(fieldSelector).on("focus click", function() { $(this).datepicker("show"); });
53        });
54    }
55
56    $(document).ready(initializeMultiDatePickers);
57    $(document).on('gform_post_render', initializeMultiDatePickers);
58})(jQuery);

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.