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.