PageSourceSearch

https://www.cmaquarium.org/app/plugins/events-calendar-pro/src/resources/js/views/map-events.js?ver=5.1.6

js cmaquarium.org collected 2026-09-25 18:17:45 UTC 7,178 bytes, 263 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   {PlainObject}
7 */
8tribe.events = tribe.events || {};
9tribe.events.views = tribe.events.views || {};
10
11/**
12 * Configures Map Events Object in the Global Tribe variable
13 *
14 * @since 4.7.7
15 *
16 * @type  {PlainObject}
17 */
18tribe.events.views.mapEvents = {};
19
20/**
21 * Initializes in a Strict env the code that manages the Event Views
22 *
23 * @since 4.7.7
24 *
25 * @param  {PlainObject} $   jQuery
26 * @param  {PlainObject} 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.7
38	 *
39	 * @type {PlainObject}
40	 */
41	obj.selectors = {
42		eventCardButton: '[data-js="tribe-events-pro-map-event-card-button"]',
43		eventCardWrapper: '[data-js="tribe-events-pro-map-event-card-wrapper"]',
44		eventCardWrapperActiveClass: '.tribe-events-pro-map__event-card-wrapper--active',
45	};
46
47	/**
48	 * Deselect events by setting aria attribute and active class
49	 *
50	 * @since 4.7.7
51	 *
52	 * @param {jQuery} $buttons jQuery object of all event buttons.
53	 *
54	 * @return {void}
55	 */
56	obj.deselectAllEvents = function( $buttons ) {
57		$buttons.each( function( index, button ) {
58			obj.deselectEvent( $( button ) );
59		} );
60	};
61
62	/**
63	 * Deselect event by setting aria attribute and active class
64	 *
65	 * @since 4.7.7
66	 *
67	 * @param {jQuery} $button jQuery object of event button.
68	 *
69	 * @return {void}
70	 */
71	obj.deselectEvent = function( $button ) {
72		$button
73			.attr( 'aria-selected', 'false' )
74			.closest( obj.selectors.eventCardWrapper )
75			.removeClass( obj.selectors.eventCardWrapperActiveClass.className() );
76
77		var contentId = $button.attr( 'aria-controls' );
78		if ( contentId ) {
79			var $content = $button.closest( obj.selectors.eventCardWrapper ).find( '#' + contentId );
80			tribe.events.views.accordion.closeAccordion( $button, $content );
81		}
82	};
83
84	/**
85	 * Select event by setting aria attribute and active class
86	 *
87	 * @since 4.7.7
88	 *
89	 * @param {jQuery} $button jQuery object of event button.
90	 *
91	 * @return {void}
92	 */
93	obj.selectEvent = function( $button ) {
94		$button
95			.attr( 'aria-selected', 'true' )
96			.closest( obj.selectors.eventCardWrapper )
97			.addClass( obj.selectors.eventCardWrapperActiveClass.className() );
98
99		var contentId = $button.attr( 'aria-controls' );
100		if ( contentId ) {
101			var $content = $button.closest( obj.selectors.eventCardWrapper ).find( '#' + contentId );
102			tribe.events.views.accordion.openAccordion( $button, $content );
103		}
104	};
105
106	/**
107	 * Handle event card button click
108	 *
109	 * @since 4.7.7
110	 *
111	 * @param {Event} event event object for 'afterSetup.tribeEvents' event
112	 *
113	 * @return {void}
114	 */
115	obj.handleEventClick = function( event ) {
116		var $container = event.data.container;
117		var $button = event.data.target;
118		var $buttons = event.data.buttons;
119
120		$container.trigger( 'beforeMapEventClick.tribeEvents', [ $container, $button ] );
121
122		obj.deselectAllEvents( $buttons );
123		obj.selectEvent( $button );
124
125		$container.trigger( 'afterMapEventClick.tribeEvents', [ $container, $button ] );
126	};
127
128	/**
129	 * Trigger events for unbind events
130	 *
131	 * @since 4.7.7
132	 *
133	 * @param {jQuery} $container jQuery object of view container.
134	 *
135	 * @return {void}
136	 */
137	obj.unbindEvents = function( $container ) {
138		$container.trigger( 'beforeMapUnbindEvents.tribeEvents', [ $container ] );
139
140		$container
141			.find( obj.selectors.eventCardButton )
142			.each( function( buttonIndex, button ) {
143				$( button ).off( 'click', obj.handleEventClick );
144			} );
145
146		$container.trigger( 'afterMapUnbindEvents.tribeEvents', [ $container ] );
147	};
148
149	/**
150	 * Trigger events for bind events
151	 *
152	 * @since 4.7.7
153	 *
154	 * @param {integer} index      jQuery.each index param from 'afterSetup.tribeEvents' event.
155	 * @param {jQuery}  $container jQuery object of view container.
156	 * @param {object}  data       data object passed from 'afterSetup.tribeEvents' event.
157	 *
158	 * @return {void}
159	 */
160	obj.bindEvents = function( index, $container, data ) {
161		$container.trigger( 'beforeMapBindEvents.tribeEvents', [ index, $container, data ] );
162
163		var $buttons = $container.find( obj.selectors.eventCardButton );
164		$buttons.each( function( buttonIndex, button ) {
165			var $button = $( button );
166			var eventData = {
167				target: $button,
168				buttons: $buttons,
169				container: $container,
170			};
171
172			$button.on( 'click', eventData, obj.handleEventClick );
173		} );
174
175		$container.trigger( 'afterMapBindEvents.tribeEvents', [ index, $container, data ] );
176	};
177
178	/**
179	 * Trigger events for deinitialize map
180	 *
181	 * @since 4.7.7
182	 *
183	 * @param {jQuery} $container jQuery object of view container.
184	 *
185	 * @return {void}
186	 */
187	obj.deinitMap = function( $container ) {
188		$container.trigger( 'beforeMapDeinit.tribeEvents', [ $container ] );
189		$container.trigger( 'mapDeinit.tribeEvents', [ $container ] );
190		$container.trigger( 'afterMapDeinit.tribeEvents', [ $container ] );
191	}
192
193	/**
194	 * Trigger events for initialize map
195	 *
196	 * @since 4.7.7
197	 *
198	 * @param {integer} index      jQuery.each index param from 'afterSetup.tribeEvents' event.
199	 * @param {jQuery}  $container jQuery object of view container.
200	 * @param {object}  data       data object passed from 'afterSetup.tribeEvents' event.
201	 *
202	 * @return {void}
203	 */
204	obj.initMap = function( index, $container, data ) {
205		$container.trigger( 'beforeMapInit.tribeEvents', [ index, $container, data ] );
206		$container.trigger( 'mapInit.tribeEvents', [ index, $container, data ] );
207		$container.trigger( 'afterMapInit.tribeEvents', [ index, $container, data ] );
208	};
209
210	/**
211	 * Deinitialize map events.
212	 *
213	 * @since 4.7.7
214	 *
215	 * @param  {Event}       event    event object for 'afterSetup.tribeEvents' event
216	 * @param  {jqXHR}       jqXHR    Request object
217	 * @param  {PlainObject} settings Settings that this request was made with
218	 *
219	 * @return {void}
220	 */
221	obj.deinit = function( event, jqXHR, settings ) {
222		var $container = event.data.container;
223		obj.deinitMap( $container );
224		obj.unbindEvents( $container );
225		$container.off( 'beforeAjaxSuccess.tribeEvents', obj.deinit );
226	};
227
228	/**
229	 * Initialize map events.
230	 *
231	 * @since 4.7.7
232	 *
233	 * @param {Event}   event      JS event triggered.
234	 * @param {integer} index      jQuery.each index param from 'afterSetup.tribeEvents' event.
235	 * @param {jQuery}  $container jQuery object of view container.
236	 * @param {object}  data       data object passed from 'afterSetup.tribeEvents' event.
237	 *
238	 * @return {void}
239	 */
240	obj.init = function( event, index, $container, data ) {
241		if ( 'map' !== data.slug ) {
242			return;
243		}
244
245		obj.initMap( index, $container, data );
246		obj.bindEvents( index, $container, data );
247		$container.on( 'beforeAjaxSuccess.tribeEvents', { container: $container }, obj.deinit );
248	};
249
250	/**
251	 * Handles the initialization of the map events when Document is ready
252	 *
253	 * @since 4.7.7
254	 *
255	 * @return {void}
256	 */
257	obj.ready = function() {
258		$document.on( 'afterSetup.tribeEvents', tribe.events.views.manager.selectors.container, obj.init );
259	};
260
261	// Configure on document ready
262	$document.ready( obj.ready );
263} )( jQuery, tribe.events.views.mapEvents );

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.