PageSourceSearch

https://www.1045bobfm.com/wp-content/plugins/events-calendar-pro-n…/js/views/week-multiday-toggle.js?ver=5.6.0

js 1045bobfm.com collected 2026-10-08 19:46:52 UTC 6,747 bytes, 229 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 Week Multiday Toggle Object in the Global Tribe variable
13 *
14 * @since 4.7.7
15 *
16 * @type  {PlainObject}
17 */
18tribe.events.views.weekMultidayToggle = {};
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		weekMultidayRow: '[data-js="tribe-events-pro-week-multiday-events-row"]',
43		weekMultidayToggleButton: '[data-js="tribe-events-pro-week-multiday-toggle-button"]',
44		weekMultidayToggleButtonOpenClass: '.tribe-events-pro-week-grid__multiday-toggle-button--open',
45		weekMultidayMoreButtonWrapper: '[data-js="tribe-events-pro-week-multiday-more-events-wrapper"]',
46		weekMultidayMoreButton: '[data-js="tribe-events-pro-week-multiday-more-events"]',
47		tribeCommonA11yHiddenClass: '.tribe-common-a11y-hidden',
48	};
49
50	/**
51	 * Toggles the week multiday overflow events
52	 *
53	 * @since 4.7.7
54	 *
55	 * @param {Event} event event object of click event
56	 *
57	 * @return {void}
58	 */
59	obj.toggleMultidayEvents = function( event ) {
60		var $toggleButton = event.data.toggleButton;
61		var togglesAndContainers = event.data.togglesAndContainers;
62
63		if ( 'true' === $toggleButton.attr( 'aria-expanded' ) ) {
64			/**
65			 * Define empty jQuery object for content as toggle button
66			 * is not associated with a specific content
67			 */
68			tribe.events.views.accordion.closeAccordion( $toggleButton, $( '' ) );
69			$toggleButton.removeClass( obj.selectors.weekMultidayToggleButtonOpenClass.className() );
70		} else {
71			/**
72			 * Define empty jQuery object for content as toggle button
73			 * is not associated with a specific content
74			 */
75			tribe.events.views.accordion.openAccordion( $toggleButton, $( '' ) );
76			$toggleButton.addClass( obj.selectors.weekMultidayToggleButtonOpenClass.className() );
77		}
78
79		togglesAndContainers.forEach( function( item ) {
80			var $headerWrapper = item.headerWrapper;
81			var $header = item.header;
82			var $content = item.content;
83
84			if ( 'true' === $header.attr( 'aria-expanded' ) ) {
85				tribe.events.views.accordion.closeAccordion( $header, $content );
86				$headerWrapper.removeClass( obj.selectors.tribeCommonA11yHiddenClass.className() );
87			} else {
88				tribe.events.views.accordion.openAccordion( $header, $content );
89				$headerWrapper.addClass( obj.selectors.tribeCommonA11yHiddenClass.className() );
90			}
91		} );
92	};
93
94	/**
95	 * Create an assosiative array of objects containing
96	 * header wrapper, header, and content for the accordions.
97	 *
98	 * @since 4.7.7
99	 *
100	 * @param {jQuery} $multidayRow jQuery object of the row.
101	 * @param {array} containerIds Array containing a list of the toggle buttoons.
102	 *
103	 * @return {array}
104	 */
105	obj.getTogglesAndContainers = function( $multidayRow, containerIds ) {
106		var togglesAndContainers = [];
107
108		containerIds.forEach( function( toggleContent ) {
109			var $toggleContent = $multidayRow.find( '#' + toggleContent );
110			var $moreButtonWrapper = $toggleContent.siblings( obj.selectors.weekMultidayMoreButtonWrapper );
111			var $moreButton = $moreButtonWrapper.find( obj.selectors.weekMultidayMoreButton )
112
113			togglesAndContainers.push( {
114				headerWrapper: $moreButtonWrapper,
115				header: $moreButton,
116				content: $toggleContent,
117			} );
118		} );
119
120		return togglesAndContainers;
121	}
122
123	/**
124	 * Initialize toggle
125	 *
126	 * @since 4.7.7
127	 *
128	 * @param {jQuery} $container jQuery object of view container.
129	 *
130	 * @return {void}
131	 */
132	obj.initToggle = function( $container ) {
133		var $multidayRow = $container.find( obj.selectors.weekMultidayRow );
134		var $toggleButton = $multidayRow.find( obj.selectors.weekMultidayToggleButton );
135		var containerIds = $toggleButton.attr( 'aria-controls' ).split( ' ' );
136		var togglesAndContainers = obj.getTogglesAndContainers( $multidayRow, containerIds );
137
138		$toggleButton.on( 'click', {
139			toggleButton: $toggleButton,
140			togglesAndContainers: togglesAndContainers,
141		}, obj.toggleMultidayEvents );
142
143		togglesAndContainers.forEach( function( item ) {
144			var $moreButton = item.header;
145			$moreButton.on( 'click', {
146				toggleButton: $toggleButton,
147				togglesAndContainers: togglesAndContainers,
148			}, obj.toggleMultidayEvents );
149		} );
150	};
151
152	/**
153	 * Deinitialize toggle
154	 *
155	 * @since 4.7.7
156	 *
157	 * @param {jQuery} $container jQuery object of view container.
158	 *
159	 * @return {void}
160	 */
161	obj.deinitToggle = function( $container ) {
162		var $multidayRow = $container.find( obj.selectors.weekMultidayRow );
163
164		$multidayRow
165			.find( obj.selectors.weekMultidayToggleButton )
166			.off( 'click', obj.toggleMultidayEvents );
167
168		$multidayRow
169			.find( obj.selectors.weekMultidayMoreButton )
170			.each( function( index, moreButton ) {
171				$( moreButton ).off( 'click', obj.toggleMultidayEvents );
172		} );
173	};
174
175	/**
176	 * Deinitialize week multiday toggle JS.
177	 *
178	 * @since  4.7.7
179	 *
180	 * @param  {Event}       event    event object for 'afterSetup.tribeEvents' event
181	 * @param  {jqXHR}       jqXHR    Request object
182	 * @param  {PlainObject} settings Settings that this request was made with
183	 *
184	 * @return {void}
185	 */
186	obj.deinit = function( event, jqXHR, settings ) {
187		var $container = event.data.container;
188		obj.deinitToggle( $container );
189		$container.off( 'beforeAjaxSuccess.tribeEvents', obj.deinit );
190	};
191
192
193	/**
194	 * Initialize week multiday toggle JS.
195	 *
196	 * @since 4.7.7
197	 *
198	 * @param {Event}   event      JS event triggered.
199	 * @param {integer} index      jQuery.each index param from 'afterSetup.tribeEvents' event.
200	 * @param {jQuery}  $container jQuery object of view container.
201	 * @param {object}  data       data object passed from 'afterSetup.tribeEvents' event.
202	 *
203	 * @return {void}
204	 */
205	obj.init = function( event, index, $container, data ) {
206		var $toggleButton = $container.find( obj.selectors.weekMultidayToggleButton );
207
208		if ( ! $toggleButton.length ) {
209			return;
210		}
211
212		obj.initToggle( $container );
213		$container.on( 'beforeAjaxSuccess.tribeEvents', { container: $container }, obj.deinit );
214	};
215
216	/**
217	 * Handles the initialization of the week grid scroller when Document is ready
218	 *
219	 * @since 4.7.7
220	 *
221	 * @return {void}
222	 */
223	obj.ready = function() {
224		$document.on( 'afterSetup.tribeEvents', tribe.events.views.manager.selectors.container, obj.init );
225	};
226
227	// Configure on document ready
228	$( obj.ready );
229} )( jQuery, tribe.events.views.weekMultidayToggle );

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.