PageSourceSearch

https://apeclub.sk/wp-content/plugins/events-calendar-pro/src/resources/js/views/datepicker-pro.js?ver=6.0.1

js apeclub.sk collected 2026-10-06 18:07:46 UTC 6,680 bytes, 238 lines download raw bytes

1/**
2 * Makes sure we have all the required levels on the Tribe Object
3 *
4 * @since 4.7.7
5 *
6 * @type   {Object}
7 */
8tribe.events = tribe.events || {};
9tribe.events.views = tribe.events.views || {};
10
11/**
12 * Configures Map Events Scroller Object in the Global Tribe variable
13 *
14 * @since 4.7.9
15 *
16 * @type  {Object}
17 */
18tribe.events.views.datepickerPro = {};
19
20/**
21 * Initializes in a Strict env the code that manages the Event Views
22 *
23 * @since 4.7.9
24 *
25 * @param  {Object} $   jQuery
26 * @param  {Object} obj tribe.events.views.manager
27 *
28 * @return {void}
29 */
30( function( $, obj ) {
31	'use strict';
32	var $document = $( document );
33
34	/**
35	 * Selectors used for configuration and setup
36	 *
37	 * @since 4.7.9
38	 *
39	 * @type {Object}
40	 */
41	obj.selectors = {
42		datepickerDays: '.datepicker-days',
43		datepickerDaysRow: '.datepicker-days tbody tr',
44		datepickerDay: '.day',
45		datepickerDayNotDisabled: '.day:not(.disabled)',
46		activeClass: '.active',
47		disabledClass: '.disabled',
48		focusedClass: '.focused',
49		hoveredClass: '.hovered',
50		currentClass: '.current',
51	};
52
53	/**
54	 * Toggle hover class
55	 *
56	 * @since 4.7.9
57	 *
58	 * @param {Event} event event object for 'mouseenter' and 'mouseleave' events
59	 *
60	 * @return {void}
61	 */
62	obj.toggleHoverClass = function( event ) {
63		event.data.row.toggleClass( obj.selectors.hoveredClass.className() );
64	};
65
66	/**
67	 * Handle disabled day click event
68	 *
69	 * @since 4.7.9
70	 *
71	 * @param {Event} event event object for 'click' event
72	 *
73	 * @return {void}
74	 */
75	obj.handleDisabledDayClick = function( event ) {
76		event.data.row.find( obj.selectors.datepickerDayNotDisabled ).click(); // eslint-disable-line es5/no-es6-methods,max-len
77	};
78
79	/**
80	 * Bind datepicker row events
81	 *
82	 * @since 4.7.9
83	 *
84	 * @param {Event} event event object for 'show' event
85	 *
86	 * @return {void}
87	 */
88	obj.bindRowEvents = function( event ) {
89		var $datepickerDays = event.data.container.find( obj.selectors.datepickerDays ); // eslint-disable-line es5/no-es6-methods,max-len
90		var config = { attributes: true, childList: true, subtree: true };
91
92		var $container = event.data.container;
93		var $rows = $container.find( obj.selectors.datepickerDaysRow );
94
95		// for each row, add mouseenter and mouseleave event listeners to toggle hover class
96		$rows.each( function( index, row ) {
97			var $row = $( row );
98			$row
99				.off( 'mouseenter mouseleave', obj.toggleHoverClass )
100				.on( 'mouseenter mouseleave', { row: $row }, obj.toggleHoverClass )
101				.find( obj.selectors.datepickerDay )
102				.each( function( index, day ) {
103					var $day = $( day );
104
105					// if day has disabled class, allow clicking day to select first day of the week
106					if ( $day.hasClass( obj.selectors.disabledClass.className() ) ) {
107						$day
108							.off( 'click', obj.handleDisabledDayClick )
109							.on( 'click', { row: $row }, obj.handleDisabledDayClick );
110					}
111
112					// if day has focused class, add focused class to row
113					if ( $day.hasClass( obj.selectors.focusedClass.className() ) ) {
114						$row.addClass( obj.selectors.focusedClass.className() );
115					}
116
117					// if day has active class, add active class to row
118					if ( $day.hasClass( obj.selectors.activeClass.className() ) ) {
119						$row.addClass( obj.selectors.activeClass.className() );
120					}
121
122					// if day has current class, add current class to row
123					if ( $day.hasClass( obj.selectors.currentClass.className() ) ) {
124						$row.addClass( obj.selectors.currentClass.className() );
125					}
126				} );
127		} );
128
129		event.data.observer.observe( $datepickerDays[ 0 ], config );
130	};
131
132	/**
133	 * PRO tasks to run after deinitializing datepicker
134	 *
135	 * @since  4.7.9
136	 *
137	 * @param  {Event}  event    event object for 'afterDatepickerDeinit.tribeEvents' event
138	 * @param  {jqXHR}  jqXHR    Request object
139	 * @param  {Object} settings Settings that this request was made with
140	 *
141	 * @return {void}
142	 */
143	obj.afterDeinit = function( event, jqXHR, settings ) { // eslint-disable-line no-unused-vars
144		var $container = event.data.container;
145		$container
146			.off( 'afterDatepickerDeinit.tribeEvents', obj.afterDeinit )
147			.off( 'handleMutationMonthChange.tribeEvents', obj.bindRowEvents )
148			.find( obj.selectors.input )
149			.off( 'show', obj.bindRowEvents );
150	};
151
152	/**
153	 * PRO tasks to run before initializing datepicker
154	 *
155	 * @since  4.7.9
156	 *
157	 * @param  {Event}   event      event object for 'beforeDatepickerInit.tribeEvents' event
158	 * @param  {Integer} index      jQuery.each index param from 'beforeDatepickerInit.tribeEvents' event
159	 * @param  {jQuery}  $container jQuery object of view container
160	 * @param  {object}  data       data object passed from 'beforeDatepickerInit.tribeEvents' event
161	 *
162	 * @return {void}
163	 */
164	obj.beforeInit = function( event, index, $container, data ) {
165		var daysOfWeekDisabled = [];
166
167		if ( 'week' === data.slug ) {
168			[ 0, 1, 2, 3, 4, 5, 6 ].forEach( function( value ) {
169				if ( data.start_of_week == value ) { // eslint-disable-line eqeqeq
170					return;
171				}
172
173				daysOfWeekDisabled.push( value );
174			} );
175		}
176
177		tribe.events.views.datepicker.options.daysOfWeekDisabled = daysOfWeekDisabled;
178	};
179
180	/**
181	 * PRO tasks to run after initializing datepicker
182	 *
183	 * @since  4.7.9
184	 *
185	 * @param  {Event}   event      event object for 'afterDatepickerInit.tribeEvents' event
186	 * @param  {Integer} index      jQuery.each index param from 'afterDatepickerInit.tribeEvents' event
187	 * @param  {jQuery}  $container jQuery object of view container
188	 * @param  {object}  data       data object passed from 'afterDatepickerInit.tribeEvents' event
189	 *
190	 * @return {void}
191	 */
192	obj.afterInit = function( event, index, $container, data ) {
193		if ( 'week' !== data.slug ) {
194			return;
195		}
196
197		$container
198			.on(
199				'afterDatepickerDeinit.tribeEvents',
200				{ container: $container, viewSlug: data.slug },
201				obj.afterDeinit
202			)
203			.on(
204				'handleMutationMonthChange.tribeEvents',
205				{ container: $container, observer: tribe.events.views.datepicker.observer },
206				obj.bindRowEvents
207			)
208			.find( tribe.events.views.datepicker.selectors.input )
209			.on(
210				'show',
211				{ container: $container, observer: tribe.events.views.datepicker.observer },
212				obj.bindRowEvents
213			);
214	};
215
216	/**
217	 * Handles the initialization of the Datepicker when datepicker init events are triggered.
218	 *
219	 * @since 4.7.9
220	 *
221	 * @return {void}
222	 */
223	obj.ready = function() {
224		$document.on(
225			'beforeDatepickerInit.tribeEvents',
226			tribe.events.views.manager.selectors.container,
227			obj.beforeInit
228		);
229		$document.on(
230			'afterDatepickerInit.tribeEvents',
231			tribe.events.views.manager.selectors.container,
232			obj.afterInit
233		);
234	};
235
236	// Configure on document ready
237	$( obj.ready );
238} )( jQuery, tribe.events.views.datepickerPro );

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.