PageSourceSearch

https://www.power1043.com/wp-content/plugins/events-calendar-pro-n…/js/views/week-grid-scroller.js?ver=5.6.0

js power1043.com collected 2026-09-30 13:37:26 UTC 4,852 bytes, 184 lines download raw bytes

1/**
2 * Makes sure we have all the required levels on the Tribe Object
3 *
4 * @since 4.7.5
5 *
6 * @type   {PlainObject}
7 */
8tribe.events = tribe.events || {};
9tribe.events.views = tribe.events.views || {};
10
11/**
12 * Configures Week Grid Scroller Object in the Global Tribe variable
13 *
14 * @since 4.7.5
15 *
16 * @type  {PlainObject}
17 */
18tribe.events.views.weekGridScroller = {};
19
20/**
21 * Initializes in a Strict env the code that manages the Event Views
22 *
23 * @since 4.7.5
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.5
38	 *
39	 * @type {PlainObject}
40	 */
41	obj.selectors = {
42		weekGridEventsRowOuterWrapper: '[data-js="tribe-events-pro-week-grid-events-row-outer-wrapper"]',
43		weekGridEventsRowWrapper: '[data-js="tribe-events-pro-week-grid-events-row-wrapper"]',
44		weekGridEventsRowWrapperClass: '.tribe-events-pro-week-grid__events-row-wrapper',
45		weekGridEventsRowWrapperActiveClass: '.tribe-events-pro-week-grid__events-row-wrapper--active',
46		weekGridEventsPaneClass: '.tribe-events-pro-week-grid__events-row-scroll-pane',
47		weekGridEventsSliderClass: '.tribe-events-pro-week-grid__events-row-scroll-slider',
48		weekGridEvent: '[data-js="tribe-events-pro-week-grid-event"]',
49	};
50
51	/**
52	 * Get position of the event that starts the earliest by time.
53	 *
54	 * @since 4.7.9
55	 *
56	 * @param {jQuery} $container jQuery object of view container.
57	 *
58	 * @return {integer}
59	 */
60	obj.getFirstEventPosition = function( $container ) {
61		var $firstEvent = null;
62		var startTime = 0;
63		var position = 0;
64
65		$container
66			.find( obj.selectors.weekGridEvent )
67			.each( function( index, event ) {
68				var $event = $( event );
69				var eventStartTime = $event.data( 'start-time' );
70
71				if (
72					! $firstEvent ||
73					( $firstEvent && ( eventStartTime < startTime ) )
74				) {
75					$firstEvent = $event;
76					startTime = eventStartTime;
77				}
78			} );
79
80		var position = $firstEvent ? $firstEvent.position().top : position;
81
82		// Add 16px spacer to top of first event position
83		if ( position - 16 > 0 ) {
84			position -= 16;
85		} else {
86			position = 0;
87		}
88
89		return position;
90	};
91
92	/**
93	 * Deinitialize scroller
94	 *
95	 * @since 4.7.5
96	 *
97	 * @param {jQuery} $container jQuery object of view container.
98	 *
99	 * @return {void}
100	 */
101	obj.deinitScroller = function( $container ) {
102		$container
103			.find( obj.selectors.weekGridEventsRowOuterWrapper )
104			.nanoScroller( { destroy: true } );
105	};
106
107	/**
108	 * Initialize scroller
109	 *
110	 * @since 4.7.5
111	 *
112	 * @param {jQuery} $container jQuery object of view container.
113	 *
114	 * @return {void}
115	 */
116	obj.initScroller = function( $container ) {
117		var topPosition = obj.getFirstEventPosition( $container );
118
119		$container
120			.find( obj.selectors.weekGridEventsRowOuterWrapper )
121			.nanoScroller( {
122				paneClass: obj.selectors.weekGridEventsPaneClass.className(),
123				sliderClass: obj.selectors.weekGridEventsSliderClass.className(),
124				contentClass: obj.selectors.weekGridEventsRowWrapperClass.className(),
125				iOSNativeScrolling: true,
126				alwaysVisible: false,
127				scrollTop: topPosition,
128			} )
129			.find( obj.selectors.weekGridEventsRowWrapper )
130			.addClass( obj.selectors.weekGridEventsRowWrapperActiveClass.className() );
131	};
132
133	/**
134	 * Deinitialize week grid scroller.
135	 *
136	 * @since 4.7.5
137	 *
138	 * @param  {Event}       event    event object for 'afterSetup.tribeEvents' event
139	 * @param  {jqXHR}       jqXHR    Request object
140	 * @param  {PlainObject} settings Settings that this request was made with
141	 *
142	 * @return {void}
143	 */
144	obj.deinit = function( event, jqXHR, settings ) {
145		var $container = event.data.container;
146		obj.deinitScroller( $container );
147		$container.off( 'beforeAjaxSuccess.tribeEvents', obj.deinit );
148	};
149
150	/**
151	 * Initialize week grid scroller.
152	 *
153	 * @since 4.7.8
154	 *
155	 * @param {Event}   event      JS event triggered.
156	 * @param {integer} index      jQuery.each index param from 'afterSetup.tribeEvents' event.
157	 * @param {jQuery}  $container jQuery object of view container.
158	 * @param {object}  data       data object passed from 'afterSetup.tribeEvents' event.
159	 *
160	 * @return {void}
161	 */
162	obj.init = function( event, index, $container, data ) {
163		if ( 'week' !== data.slug ) {
164			return;
165		}
166
167		obj.initScroller( $container );
168		$container.on( 'beforeAjaxSuccess.tribeEvents', { container: $container }, obj.deinit );
169	};
170
171	/**
172	 * Handles the initialization of the week grid scroller when Document is ready
173	 *
174	 * @since 4.7.5
175	 *
176	 * @return {void}
177	 */
178	obj.ready = function() {
179		$document.on( 'afterSetup.tribeEvents', tribe.events.views.manager.selectors.container, obj.init );
180	};
181
182	// Configure on document ready
183	$( obj.ready );
184} )( jQuery, tribe.events.views.weekGridScroller );

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.