PageSourceSearch

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

js cmaquarium.org collected 2026-09-25 18:18:04 UTC 5,629 bytes, 252 lines download raw bytes

1/**
2 * Makes sure we have all the required levels on the Tribe Object
3 *
4 * @since 4.7.9
5 *
6 * @type   {PlainObject}
7 */
8tribe.events = tribe.events || {};
9tribe.events.views = tribe.events.views || {};
10
11/**
12 * Configures Week Multiday Toggle Object in the Global Tribe variable
13 *
14 * @since 4.7.9
15 *
16 * @type  {PlainObject}
17 */
18tribe.events.views.weekEventLink = {};
19
20/**
21 * Initializes in a Strict env the code that manages the Event Views
22 *
23 * @since 4.7.9
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	 * Config used for link hover
36	 *
37	 * @since 4.7.9
38	 *
39	 * @type {PlainObject}
40	 */
41	obj.config = {
42		delayHoverIn: 600,
43	};
44
45	/**
46	 * Selectors used for configuration and setup
47	 *
48	 * @since 4.7.9
49	 *
50	 * @type {PlainObject}
51	 */
52	obj.selectors = {
53		weekEventLink: '[data-js~="tribe-events-pro-week-grid-event-link"]',
54		weekEventLinkHoverClass: '.tribe-events-pro-week-grid__event-link--hover',
55		weekEventLinkIntendedClass: '.tribe-events-pro-week-grid__event-link--intended',
56	};
57
58	/**
59	 * Add intended class to event link after timeout
60	 *
61	 * @since 4.7.9
62	 *
63	 * @param {jQuery} $link jQuery object of link
64	 *
65	 * @return {void}
66	 */
67	obj.addIntendedClass = function( $link ) {
68		setTimeout( function() {
69			// if link is not focused or hovered
70			if (
71				! $link.is( ':focus' ) &&
72				! $link.hasClass( obj.selectors.weekEventLinkHoverClass.className() )
73			) {
74				return;
75			}
76
77			$link.addClass( obj.selectors.weekEventLinkIntendedClass.className() );
78		}, obj.config.delayHoverIn );
79	};
80
81	/**
82	 * Remove intended class from event link
83	 *
84	 * @since 4.7.9
85	 *
86	 * @param {jQuery} $link jQuery object of link
87	 *
88	 * @return {void}
89	 */
90	obj.removeIntendedClass = function( $link ) {
91		// if link is focused or hovered
92		if (
93			$link.is( ':focus' ) ||
94			$link.hasClass( obj.selectors.weekEventLinkHoverClass.className() )
95		) {
96			return;
97		}
98
99		$link.removeClass( obj.selectors.weekEventLinkIntendedClass.className() );
100	};
101
102	/**
103	 * Handle mouse enter event
104	 *
105	 * @since 4.7.9
106	 *
107	 * @param {Event} event Event object
108	 *
109	 * @return {void}
110	 */
111	obj.handleMouseEnter = function( event ) {
112		var $link = event.data.target;
113		$link.addClass( obj.selectors.weekEventLinkHoverClass.className() );
114		obj.addIntendedClass( $link );
115	};
116
117	/**
118	 * Handle mouse leave event
119	 *
120	 * @since 4.7.9
121	 *
122	 * @param {Event} event Event object
123	 *
124	 * @return {void}
125	 */
126	obj.handleMouseLeave = function( event ) {
127		var $link = event.data.target;
128		$link.removeClass( obj.selectors.weekEventLinkHoverClass.className() );
129		obj.removeIntendedClass( $link );
130	};
131
132	/**
133	 * Handle focus event
134	 *
135	 * @since 4.7.9
136	 *
137	 * @param {Event} event Event object
138	 *
139	 * @return {void}
140	 */
141	obj.handleFocus = function( event ) {
142		var $link = event.data.target;
143		obj.addIntendedClass( $link );
144	};
145
146	/**
147	 * Handle blur event
148	 *
149	 * @since 4.7.9
150	 *
151	 * @param {Event} event Event object
152	 *
153	 * @return {void}
154	 */
155	obj.handleBlur = function( event ) {
156		var $link = event.data.target;
157		obj.removeIntendedClass( $link );
158	};
159
160	/**
161	 * Deinitialize week event link
162	 *
163	 * @since 4.7.9
164	 *
165	 * @param {jQuery} $container jQuery object of view container.
166	 *
167	 * @return {void}
168	 */
169	obj.deinitEventLink = function( $container ) {
170		$container
171			.find( obj.selectors.weekEventLink )
172			.each( function( index, link ) {
173				$( link ).off();
174			} );
175	};
176
177
178	/**
179	 * Initialize week event link
180	 *
181	 * @since 4.7.9
182	 *
183	 * @param {jQuery} $container jQuery object of view container.
184	 *
185	 * @return {void}
186	 */
187	obj.initEventLink = function( $container ) {
188		$container
189			.find( obj.selectors.weekEventLink )
190			.each( function( index, link ) {
191				var $link = $( link );
192				$link
193					.on( 'mouseenter touchstart', { target: $link }, obj.handleMouseEnter )
194					.on( 'mouseleave touchstart', { target: $link }, obj.handleMouseLeave )
195					.on( 'focus', { target: $link }, obj.handleFocus )
196					.on( 'blur', { target: $link }, obj.handleBlur );
197			} );
198	};
199
200	/**
201	 * Deinitialize week event link JS.
202	 *
203	 * @since  4.7.9
204	 *
205	 * @param  {Event}       event    event object for 'afterSetup.tribeEvents' event
206	 * @param  {jqXHR}       jqXHR    Request object
207	 * @param  {PlainObject} settings Settings that this request was made with
208	 *
209	 * @return {void}
210	 */
211	obj.deinit = function( event, jqXHR, settings ) {
212		var $container = event.data.container;
213		obj.deinitEventLink( $container );
214		$container.off( 'beforeAjaxSuccess.tribeEvents', obj.deinit );
215	};
216
217
218	/**
219	 * Initialize week event link JS.
220	 *
221	 * @since 4.7.9
222	 *
223	 * @param {Event}   event      JS event triggered.
224	 * @param {integer} index      jQuery.each index param from 'afterSetup.tribeEvents' event.
225	 * @param {jQuery}  $container jQuery object of view container.
226	 * @param {object}  data       data object passed from 'afterSetup.tribeEvents' event.
227	 *
228	 * @return {void}
229	 */
230	obj.init = function( event, index, $container, data ) {
231		if ( 'week' !== data.slug ) {
232			return;
233		}
234
235		obj.initEventLink( $container );
236		$container.on( 'beforeAjaxSuccess.tribeEvents', { container: $container }, obj.deinit );
237	};
238
239	/**
240	 * Handles the initialization of the week grid scroller when Document is ready
241	 *
242	 * @since 4.7.9
243	 *
244	 * @return {void}
245	 */
246	obj.ready = function() {
247		$document.on( 'afterSetup.tribeEvents', tribe.events.views.manager.selectors.container, obj.init );
248	};
249
250	// Configure on document ready
251	$document.ready( obj.ready );
252} )( jQuery, tribe.events.views.weekEventLink );

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.