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.