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.