1/** 2 * Makes sure we have all the required levels on the Tribe Object 3 * 4 * @since 5.0.0 5 * 6 * @type {Object} 7 */ 8tribe.events = tribe.events || {}; 9tribe.events.views = tribe.events.views || {}; 10 11/** 12 * Configures Breakpoints Object in the Global Tribe variable 13 * 14 * @since 5.0.0 15 * 16 * @type {Object} 17 */ 18tribe.events.views.breakpoints = {}; 19 20/** 21 * Initializes in a Strict env the code that manages the Event Views 22 * 23 * @since 5.0.0 24 * 25 * @param {FunctionConstructor} $ jQuery 26 * @param {Object} obj tribe.events.views.breakpoints 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 5.0.0 38 * 39 * @type {Object} 40 */ 41 obj.selectors = { 42 container: '[data-js="tribe-events-view"]', 43 dataScript: '[data-js="tribe-events-view-data"]', 44 breakpointClassPrefix: 'tribe-common--breakpoint-', 45 }; 46 47 /** 48 * Object of breakpoints 49 * 50 * @since 5.0.0 51 * 52 * @type {Object} 53 */ 54 obj.breakpoints = {}; 55 56 /** 57 * Sets container classes based on breakpoint 58 * 59 * @since 5.0.0 60 * 61 * @param {jQuery} $container jQuery object of view container. 62 * @param {object} data data object passed from 'afterSetup.tribeEvents' event. 63 * 64 * @return {void} 65 */ 66 obj.setContainerClasses = function( $container, data ) { 67 var breakpoints = Object.keys( data.breakpoints ); 68 69 breakpoints.forEach( function( breakpoint ) { 70 var className = obj.selectors.breakpointClassPrefix + breakpoint; 71 obj.breakpoints[ breakpoint ] = data.breakpoints[ breakpoint ]; 72 73 if ( $container.outerWidth() < data.breakpoints[ breakpoint ] ) { 74 $container.removeClass( className ); 75 } else { 76 $container.addClass( className ); 77 } 78 } ); 79 }; 80 81 /** 82 * Handles resize event for window 83 * 84 * @since 5.0.0 85 * 86 * @param {Event} event event object for 'resize' event 87 * 88 * @return {void} 89 */ 90 obj.handleResize = function( event ) { 91 obj.setContainerClasses( event.data.container, event.data.data ); 92 }; 93 94 /** 95 * Unbinds events for container 96 * 97 * @since 5.0.0 98 * 99 * @param {jQuery} $container jQuery object of view container 100 * 101 * @return {void} 102 */ 103 obj.unbindEvents = function( $container ) { 104 $container 105 .off( 'resize.tribeEvents', obj.handleResize ) 106 .off( 'beforeAjaxSuccess.tribeEvents', obj.deinit ); 107 }; 108 109 /** 110 * Binds events for container 111 * 112 * @since 5.0.0 113 * 114 * @param {jQuery} $container jQuery object of view container. 115 * @param {object} data data object passed from 'afterSetup.tribeEvents' event. 116 * 117 * @return {void} 118 */ 119 obj.bindEvents = function( $container, data ) { 120 $container 121 .on( 'resize.tribeEvents', { container: $container, data: data }, obj.handleResize ) 122 .on( 'beforeAjaxSuccess.tribeEvents', { container: $container }, obj.deinit ); 123 }; 124 125 /** 126 * De-initialize breakpoints JS 127 * 128 * @since 5.0.0 129 * 130 * @param {Event} event event object for 'beforeAjaxSuccess.tribeEvents' event 131 * @param {jqXHR} jqXHR Request object 132 * @param {Object} settings Settings that this request was made with 133 * 134 * @return {void} 135 */ 136 obj.deinit = function( event, jqXHR, settings ) { // eslint-disable-line no-unused-vars 137 obj.unbindEvents( event.data.container ); 138 }; 139 140 /** 141 * Common initialization tasks 142 * 143 * @since 5.0.0 144 * 145 * @param {jQuery} $container jQuery object of view container. 146 * @param {object} data data object passed from 'afterSetup.tribeEvents' event. 147 * 148 * @return {void} 149 */ 150 obj.initTasks = function( $container, data ) { 151 if ( ! ( $container instanceof jQuery ) ) { 152 // eslint-disable-next-line no-param-reassign 153 $container = $( $container ); 154 } 155 156 obj.bindEvents( $container, data ); 157 obj.setContainerClasses( $container, data ); 158 159 var state = { initialized: true }; 160 $container.data( 'tribeEventsBreakpoints', state ); 161 }; 162 163 /** 164 * Initialize breakpoints JS 165 * 166 * @since 5.0.0 167 * 168 * @param {Event} event event object for 'afterSetup.tribeEvents' event 169 * @param {int} index jQuery.each index param from 'afterSetup.tribeEvents' event. 170 * @param {jQuery} $container jQuery object of view container. 171 * @param {object} data data object passed from 'afterSetup.tribeEvents' event. 172 * 173 * @return {void} 174 */ 175 obj.init = function( event, index, $container, data ) { 176 if ( ! ( $container instanceof jQuery ) ) { 177 // eslint-disable-next-line no-param-reassign 178 $container = $( $container ); 179 } 180 181 var state = $container.data( 'tribeEventsBreakpoints' ); 182 if ( state && state.initialized ) { 183 return; 184 } 185 186 obj.initTasks( $container, data ); 187 }; 188 189 /** 190 * Setup breakpoints JS 191 * 192 * @since 5.0.0 193 * 194 * @param {HTMLElement} container HTML element of the script tag calling setup 195 * 196 * @return {void} 197 */ 198 obj.setup = function( container ) { 199 var $container = $( container ); 200 201 if ( ! $container.is( obj.selectors.container ) ) { 202 return; 203 } 204 var $data = $container.find( obj.selectors.dataScript ); 205 var data = {}; 206 207 // If we have data element set it up. 208 if ( $data.length ) { 209 data = JSON.parse( $data.text().trim() ); 210 } 211 212 obj.initTasks( $container, data ); 213 }; 214 215 /** 216 * Handles the initialization of breakpoints when Document is ready 217 * 218 * @since 5.0.0 219 * 220 * @return {void} 221 */ 222 obj.ready = function() { 223 $document.on( 'afterSetup.tribeEvents', obj.selectors.container, obj.init ); 224 }; 225 226 // Configure on document ready 227 $( obj.ready ); 228} )( jQuery, tribe.events.views.breakpoints );
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.