1/** 2 * Makes sure we have all the required levels on the Tribe Object 3 * 4 * @since 4.9.4 5 * 6 * @type {PlainObject} 7 */ 8tribe.events = tribe.events || {}; 9tribe.events.views = tribe.events.views || {}; 10 11/** 12 * Configures Events Bar Inputs Object in the Global Tribe variable 13 * 14 * @since 4.9.4 15 * 16 * @type {PlainObject} 17 */ 18tribe.events.views.eventsBarInputs = {}; 19 20/** 21 * Initializes in a Strict env the code that manages the Event Views 22 * 23 * @since 4.9.4 24 * 25 * @param {PlainObject} $ jQuery 26 * @param {PlainObject} obj tribe.events.views.eventsBarInputs 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.9.4 38 * 39 * @type {PlainObject} 40 */ 41 obj.selectors = { 42 input: '[data-js="tribe-events-events-bar-input-control-input"]', 43 inputWrapper: '[data-js="tribe-events-events-bar-input-control"]', 44 }; 45 46 /** 47 * Toggles input class if it has a value 48 * 49 * @since 4.9.4 50 * 51 * @param {Event} event event object of click event 52 * 53 * @return {void} 54 */ 55 obj.handleInputChange = function( event ) { 56 var $input = event.data.target; 57 var $wrapper = event.data.wrapper; 58 59 // Set the focus class if it has content. 60 $wrapper.toggleClass( event.data.inputClassFocus, '' !== $input.val().trim() ); 61 }; 62 63 /** 64 * Unbind events for the events bar input. 65 * 66 * @since 4.9.5 67 * 68 * @param {jQuery} $container jQuery object of container. 69 * 70 * @return {void} 71 */ 72 obj.unbindInputEvents = function( $container ) { 73 $container 74 .find( obj.selectors.inputWrapper ) 75 .each( function( index, wrapper ) { 76 var $input = $( wrapper ).find( obj.selectors.input ); 77 78 // Bail in case we dont find the input. 79 if ( ! $input.length ) { 80 return; 81 } 82 83 $input.off(); 84 } ); 85 }; 86 87 /** 88 * Bind events for the events bar input, on focus and according to their value. 89 * 90 * @since 4.9.4 91 * 92 * @param {jQuery} $container jQuery object of container. 93 * 94 * @return {void} 95 */ 96 obj.bindInputEvents = function( $container ) { 97 $container 98 .find( obj.selectors.inputWrapper ) 99 .each( function( index, wrapper ) { 100 var inputWrapperClass = wrapper 101 .className 102 .match( /tribe-events-c-search__input-control--[a-z]+/ ); 103 104 if ( ! inputWrapperClass ) { 105 return; 106 } 107 108 var inputWrapperFocus = inputWrapperClass[0] + '-focus'; 109 var $wrapper = $( wrapper ); 110 var $input = $wrapper.find( obj.selectors.input ); 111 112 // Bail in case we dont find the input. 113 if ( ! $input.length ) { 114 return; 115 } 116 117 $wrapper.toggleClass( inputWrapperFocus, '' !== $input.val().trim() ); 118 119 $input.on( 120 'change', 121 { target: $input, wrapper: $wrapper, inputClassFocus: inputWrapperFocus }, 122 obj.handleInputChange 123 ); 124 } ); 125 }; 126 127 /** 128 * Unbinds events for container 129 * 130 * @since 4.9.5 131 * 132 * @param {Event} event event object for 'beforeAjaxSuccess.tribeEvents' event 133 * @param {jqXHR} jqXHR Request object 134 * @param {PlainObject} settings Settings that this request was made with 135 * 136 * @return {void} 137 */ 138 obj.unbindEvents = function( event, jqXHR, settings ) { // eslint-disable-line no-unused-vars 139 var $container = event.data.container; 140 obj.unbindInputEvents( $container ); 141 $container.off( 'beforeAjaxSuccess.tribeEvents', obj.unbindEvents ); 142 }; 143 144 /** 145 * Binds events for the events bar input change listeners 146 * 147 * @since 4.9.8 148 * 149 * @param {Event} event event object for 'afterSetup.tribeEvents' event 150 * @param {integer} index jQuery.each index param from 'afterSetup.tribeEvents' event 151 * @param {jQuery} $container jQuery object of view container 152 * @param {object} data data object passed from 'afterSetup.tribeEvents' event 153 * 154 * @return {void} 155 */ 156 obj.bindEvents = function( event, index, $container, data ) { // eslint-disable-line no-unused-vars, max-len 157 var $inputWrapper = $container.find( obj.selectors.inputWrapper ); 158 159 if ( ! $inputWrapper.length ) { 160 return; 161 } 162 163 obj.bindInputEvents( $container ); 164 $container.on( 'beforeAjaxSuccess.tribeEvents', { container: $container }, obj.unbindEvents ); 165 }; 166 167 /** 168 * Handles the initialization of the Events Bar Inputs when Document is ready 169 * 170 * @since 4.9.4 171 * 172 * @return {void} 173 */ 174 obj.ready = function() { 175 $document.on( 176 'afterSetup.tribeEvents', 177 tribe.events.views.manager.selectors.container, 178 obj.bindEvents 179 ); 180 }; 181 182 // Configure on document ready 183 $( obj.ready ); 184} )( jQuery, tribe.events.views.eventsBarInputs );
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.