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.