PageSourceSearch

https://www.cmaquarium.org/app/plugins/the-events-calendar/src/resources/js/views/events-bar.js?ver=5.2.1

js cmaquarium.org collected 2026-09-25 18:18:15 UTC 8,798 bytes, 330 lines download raw bytes

1/**
2 * Makes sure we have all the required levels on the Tribe Object
3 *
4 * @since 4.9.4
5 *
6 * @type   {PlainObject}
7 */
8tribe.events = tribe.events || {};
9tribe.events.views = tribe.events.views || {};
10
11/**
12 * Configures Events Bar Object in the Global Tribe variable
13 *
14 * @since 4.9.4
15 *
16 * @type   {PlainObject}
17 */
18tribe.events.views.eventsBar = {};
19
20/**
21 * Initializes in a Strict env the code that manages the Event Views
22 *
23 * @since 4.9.4
24 *
25 * @param  {PlainObject} $   jQuery
26 * @param  {PlainObject} obj tribe.events.views.eventsBar
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.9.4
38	 *
39	 * @type {PlainObject}
40	 */
41	obj.selectors = {
42		eventsBar: '[data-js="tribe-events-events-bar"]',
43		searchButton: '[data-js="tribe-events-search-button"]',
44		searchButtonActiveClass: '.tribe-events-c-events-bar__search-button--active',
45		searchContainer: '[data-js="tribe-events-search-container"]',
46	};
47
48	/**
49	 * Object of key codes
50	 *
51	 * @since 4.9.4
52	 *
53	 * @type {PlainObject}
54	 */
55	obj.keyCode = {
56		END: 35,
57		HOME: 36,
58		LEFT: 37,
59		RIGHT: 39,
60	};
61
62	/**
63	 * Deinitialize accordion based on header and content
64	 *
65	 * @since 4.9.7
66	 *
67	 * @param {jQuery} $header jQuery object of header
68	 * @param {jQuery} $content jQuery object of contents
69	 *
70	 * @return {void}
71	 */
72	obj.deinitAccordion = function( $header, $content ) {
73		tribe.events.views.accordion.deinitAccordion( 0, $header );
74		tribe.events.views.accordion.deinitAccordionA11yAttrs( $header, $content );
75		$content.css( 'display', '' );
76	};
77
78	/**
79	 * Initialize accordion based on header and content
80	 *
81	 * @since 4.9.7
82	 *
83	 * @param {jQuery} $container jQuery object of view container
84	 * @param {jQuery} $header jQuery object of header
85	 * @param {jQuery} $content jQuery object of contents
86	 *
87	 * @return {void}
88	 */
89	obj.initAccordion = function( $container, $header, $content ) {
90		tribe.events.views.accordion.initAccordion( $container )( 0, $header );
91		tribe.events.views.accordion.initAccordionA11yAttrs( $header, $content );
92	};
93
94	/**
95	 * Toggles active class on search button
96	 *
97	 * @since 4.9.7
98	 *
99	 * @param {Event} event event object for click event
100	 *
101	 * @return {void}
102	 */
103	obj.handleSearchButtonClick = function( event ) {
104		event.data.target.toggleClass( obj.selectors.searchButtonActiveClass.className() );
105	};
106
107	/**
108	 * Deinitialize search button accordion
109	 *
110	 * @since 4.9.8
111	 *
112	 * @param {jQuery} $container jQuery object of view container
113	 *
114	 * @return {void}
115	 */
116	obj.deinitSearchAccordion = function( $container ) {
117		var $searchButton = $container.find( obj.selectors.searchButton );
118		$searchButton.removeClass( obj.selectors.searchButtonActiveClass.className() );
119		var $searchContainer = $container.find( obj.selectors.searchContainer );
120		obj.deinitAccordion( $searchButton, $searchContainer );
121		$searchButton.off( 'click', obj.handleSearchButtonClick );
122	};
123
124	/**
125	 * Initialize search button accordion
126	 *
127	 * @since 4.9.4
128	 *
129	 * @param {jQuery} $container jQuery object of view container
130	 *
131	 * @return {void}
132	 */
133	obj.initSearchAccordion = function( $container ) {
134		var $searchButton = $container.find( obj.selectors.searchButton );
135		var $searchContainer = $container.find( obj.selectors.searchContainer );
136		obj.initAccordion( $container, $searchButton, $searchContainer );
137		$searchButton.on( 'click', { target: $searchButton }, obj.handleSearchButtonClick );
138	};
139
140	/**
141	 * Initializes events bar state
142	 *
143	 * @since 4.9.8
144	 *
145	 * @param {jQuery} $container jQuery object of view container
146	 *
147	 * @return {void}
148	 */
149	obj.initState = function( $container ) {
150		var $eventsBar = $container.find( obj.selectors.eventsBar );
151		var state = {
152			mobileInitialized: false,
153			desktopInitialized: false,
154		};
155
156		$eventsBar.data( 'tribeEventsState', state );
157	};
158
159	/**
160	 * Deinitializes events bar
161	 *
162	 * @since 4.9.5
163	 *
164	 * @param {jQuery} $container jQuery object of view container
165	 *
166	 * @return {void}
167	 */
168	obj.deinitEventsBar = function( $container ) {
169		obj.deinitSearchAccordion( $container );
170	};
171
172	/**
173	 * Initializes events bar
174	 *
175	 * @since 4.9.8
176	 *
177	 * @param {jQuery} $container jQuery object of view container
178	 *
179	 * @return {void}
180	 */
181	obj.initEventsBar = function( $container ) {
182		var $eventsBar = $container.find( obj.selectors.eventsBar );
183
184		if ( $eventsBar.length ) {
185			var state = $eventsBar.data( 'tribeEventsState' );
186			var containerState = $container.data( 'tribeEventsState' );
187			var isMobile = containerState.isMobile;
188
189			// If viewport is mobile and mobile state is not initialized
190			if ( isMobile && ! state.mobileInitialized ) {
191				obj.initSearchAccordion( $container );
192				state.desktopInitialized = false;
193				state.mobileInitialized = true;
194				$eventsBar.data( 'tribeEventsState', state );
195
196			// If viewport is desktop and desktop state is not initialized
197			} else if ( ! isMobile && ! state.desktopInitialized ) {
198				obj.deinitSearchAccordion( $container );
199				state.mobileInitialized = false;
200				state.desktopInitialized = true;
201				$eventsBar.data( 'tribeEventsState', state );
202			}
203		}
204	};
205
206	/**
207	 * Handles 'resize.tribeEvents' event
208	 *
209	 * @since 4.9.7
210	 *
211	 * @param {Event} event event object for 'resize.tribeEvents' event
212	 *
213	 * @return {void}
214	 */
215	obj.handleResize = function( event ) {
216		obj.initEventsBar( event.data.container );
217	};
218
219	/**
220	 * Handles click event on document
221	 *
222	 * @since 4.9.7
223	 *
224	 * @param {Event} event event object for click event
225	 *
226	 * @return {void}
227	 */
228	obj.handleClick = function( event ) {
229		var $target = $( event.target );
230		var isParentSearchButton = Boolean( $target.closest( obj.selectors.searchButton ).length );
231		var isParentSearchContainer = Boolean( $target.closest( obj.selectors.searchContainer ).length );
232
233		if ( ! ( isParentSearchButton || isParentSearchContainer ) ) {
234			var $container = event.data.container;
235			var $eventsBar = $container.find( obj.selectors.eventsBar );
236			var $searchButton = $eventsBar.find( obj.selectors.searchButton );
237
238			if ( $searchButton.hasClass( obj.selectors.searchButtonActiveClass.className() ) ) {
239				var $searchContainer = $eventsBar.find( obj.selectors.searchContainer );
240				$searchButton.removeClass( obj.selectors.searchButtonActiveClass.className() );
241				tribe.events.views.accordion.closeAccordion( $searchButton, $searchContainer );
242			}
243		}
244	};
245
246	/**
247	 * Unbind events for events bar
248	 *
249	 * @since 4.9.7
250	 *
251	 * @param  {jQuery}  $container jQuery object of view container
252	 *
253	 * @return {void}
254	 */
255	obj.unbindEvents = function( $container ) {
256		$container.off( 'resize.tribeEvents', obj.handleResize );
257		$document.off( 'click', obj.handleClick );
258	};
259
260	/**
261	 * Bind events for events bar
262	 *
263	 * @since 4.9.7
264	 *
265	 * @param  {jQuery}  $container jQuery object of view container
266	 *
267	 * @return {void}
268	 */
269	obj.bindEvents = function( $container ) {
270		$container.on( 'resize.tribeEvents', { container: $container }, obj.handleResize );
271		$document.on( 'click', { container: $container }, obj.handleClick );
272	};
273
274	/**
275	 * Deinitialize events bar JS
276	 *
277	 * @since 4.9.4
278	 *
279	 * @param  {Event}       event    event object for 'beforeAjaxSuccess.tribeEvents' event
280	 * @param  {jqXHR}       jqXHR    Request object
281	 * @param  {PlainObject} settings Settings that this request was made with
282	 *
283	 * @return {void}
284	 */
285	obj.deinit = function( event, jqXHR, settings ) {
286		var $container = event.data.container;
287		obj.deinitEventsBar( $container );
288		obj.unbindEvents( $container );
289		$container.off( 'beforeAjaxSuccess.tribeEvents', obj.deinit );
290	};
291
292	/**
293	 * Initialize events bar JS
294	 *
295	 * @since  4.9.8
296	 *
297	 * @param  {Event}   event      event object for 'afterSetup.tribeEvents' event
298	 * @param  {integer} index      jQuery.each index param from 'afterSetup.tribeEvents' event
299	 * @param  {jQuery}  $container jQuery object of view container
300	 * @param  {object}  data       data object passed from 'afterSetup.tribeEvents' event
301	 *
302	 * @return {void}
303	 */
304	obj.init = function( event, index, $container, data ) {
305		var $eventsBar = $container.find( obj.selectors.eventsBar );
306
307		if ( ! $eventsBar.length ) {
308			return;
309		}
310
311		obj.initState( $container );
312		obj.initEventsBar( $container );
313		obj.bindEvents( $container );
314		$container.on( 'beforeAjaxSuccess.tribeEvents', { container: $container }, obj.deinit );
315	};
316
317	/**
318	 * Handles the initialization of events bar when Document is ready
319	 *
320	 * @since 4.9.4
321	 *
322	 * @return {void}
323	 */
324	obj.ready = function() {
325		$document.on( 'afterSetup.tribeEvents', tribe.events.views.manager.selectors.container, obj.init );
326	};
327
328	// Configure on document ready
329	$document.ready( obj.ready );
330} )( jQuery, tribe.events.views.eventsBar );

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.