1/** 2 * Makes sure we have all the required levels on the Tribe Object 3 * 4 * @since 4.7.7 5 * 6 * @type {Object} 7 */ 8tribe.events = tribe.events || {}; 9tribe.events.views = tribe.events.views || {}; 10 11/** 12 * Configures Map Events Scroller Object in the Global Tribe variable 13 * 14 * @since 4.7.9 15 * 16 * @type {Object} 17 */ 18tribe.events.views.datepickerPro = {}; 19 20/** 21 * Initializes in a Strict env the code that manages the Event Views 22 * 23 * @since 4.7.9 24 * 25 * @param {Object} $ jQuery 26 * @param {Object} 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.9 38 * 39 * @type {Object} 40 */ 41 obj.selectors = { 42 datepickerDays: '.datepicker-days', 43 datepickerDaysRow: '.datepicker-days tbody tr', 44 datepickerDay: '.day', 45 datepickerDayNotDisabled: '.day:not(.disabled)', 46 activeClass: '.active', 47 disabledClass: '.disabled', 48 focusedClass: '.focused', 49 hoveredClass: '.hovered', 50 currentClass: '.current', 51 }; 52 53 /** 54 * Toggle hover class 55 * 56 * @since 4.7.9 57 * 58 * @param {Event} event event object for 'mouseenter' and 'mouseleave' events 59 * 60 * @return {void} 61 */ 62 obj.toggleHoverClass = function( event ) { 63 event.data.row.toggleClass( obj.selectors.hoveredClass.className() ); 64 }; 65 66 /** 67 * Handle disabled day click event 68 * 69 * @since 4.7.9 70 * 71 * @param {Event} event event object for 'click' event 72 * 73 * @return {void} 74 */ 75 obj.handleDisabledDayClick = function( event ) { 76 event.data.row.find( obj.selectors.datepickerDayNotDisabled ).click(); // eslint-disable-line es5/no-es6-methods,max-len 77 }; 78 79 /** 80 * Bind datepicker row events 81 * 82 * @since 4.7.9 83 * 84 * @param {Event} event event object for 'show' event 85 * 86 * @return {void} 87 */ 88 obj.bindRowEvents = function( event ) { 89 var $datepickerDays = event.data.container.find( obj.selectors.datepickerDays ); // eslint-disable-line es5/no-es6-methods,max-len 90 var config = { attributes: true, childList: true, subtree: true }; 91 92 var $container = event.data.container; 93 var $rows = $container.find( obj.selectors.datepickerDaysRow ); 94 95 // for each row, add mouseenter and mouseleave event listeners to toggle hover class 96 $rows.each( function( index, row ) { 97 var $row = $( row ); 98 $row 99 .off( 'mouseenter mouseleave', obj.toggleHoverClass ) 100 .on( 'mouseenter mouseleave', { row: $row }, obj.toggleHoverClass ) 101 .find( obj.selectors.datepickerDay ) 102 .each( function( index, day ) { 103 var $day = $( day ); 104 105 // if day has disabled class, allow clicking day to select first day of the week 106 if ( $day.hasClass( obj.selectors.disabledClass.className() ) ) { 107 $day 108 .off( 'click', obj.handleDisabledDayClick ) 109 .on( 'click', { row: $row }, obj.handleDisabledDayClick ); 110 } 111 112 // if day has focused class, add focused class to row 113 if ( $day.hasClass( obj.selectors.focusedClass.className() ) ) { 114 $row.addClass( obj.selectors.focusedClass.className() ); 115 } 116 117 // if day has active class, add active class to row 118 if ( $day.hasClass( obj.selectors.activeClass.className() ) ) { 119 $row.addClass( obj.selectors.activeClass.className() ); 120 } 121 122 // if day has current class, add current class to row 123 if ( $day.hasClass( obj.selectors.currentClass.className() ) ) { 124 $row.addClass( obj.selectors.currentClass.className() ); 125 } 126 } ); 127 } ); 128 129 event.data.observer.observe( $datepickerDays[ 0 ], config ); 130 }; 131 132 /** 133 * PRO tasks to run after deinitializing datepicker 134 * 135 * @since 4.7.9 136 * 137 * @param {Event} event event object for 'afterDatepickerDeinit.tribeEvents' event 138 * @param {jqXHR} jqXHR Request object 139 * @param {Object} settings Settings that this request was made with 140 * 141 * @return {void} 142 */ 143 obj.afterDeinit = function( event, jqXHR, settings ) { // eslint-disable-line no-unused-vars 144 var $container = event.data.container; 145 $container 146 .off( 'afterDatepickerDeinit.tribeEvents', obj.afterDeinit ) 147 .off( 'handleMutationMonthChange.tribeEvents', obj.bindRowEvents ) 148 .find( obj.selectors.input ) 149 .off( 'show', obj.bindRowEvents ); 150 }; 151 152 /** 153 * PRO tasks to run before initializing datepicker 154 * 155 * @since 4.7.9 156 * 157 * @param {Event} event event object for 'beforeDatepickerInit.tribeEvents' event 158 * @param {Integer} index jQuery.each index param from 'beforeDatepickerInit.tribeEvents' event 159 * @param {jQuery} $container jQuery object of view container 160 * @param {object} data data object passed from 'beforeDatepickerInit.tribeEvents' event 161 * 162 * @return {void} 163 */ 164 obj.beforeInit = function( event, index, $container, data ) { 165 var daysOfWeekDisabled = []; 166 167 if ( 'week' === data.slug ) { 168 [ 0, 1, 2, 3, 4, 5, 6 ].forEach( function( value ) { 169 if ( data.start_of_week == value ) { // eslint-disable-line eqeqeq 170 return; 171 } 172 173 daysOfWeekDisabled.push( value ); 174 } ); 175 } 176 177 tribe.events.views.datepicker.options.daysOfWeekDisabled = daysOfWeekDisabled; 178 }; 179 180 /** 181 * PRO tasks to run after initializing datepicker 182 * 183 * @since 4.7.9 184 * 185 * @param {Event} event event object for 'afterDatepickerInit.tribeEvents' event 186 * @param {Integer} index jQuery.each index param from 'afterDatepickerInit.tribeEvents' event 187 * @param {jQuery} $container jQuery object of view container 188 * @param {object} data data object passed from 'afterDatepickerInit.tribeEvents' event 189 * 190 * @return {void} 191 */ 192 obj.afterInit = function( event, index, $container, data ) { 193 if ( 'week' !== data.slug ) { 194 return; 195 } 196 197 $container 198 .on( 199 'afterDatepickerDeinit.tribeEvents', 200 { container: $container, viewSlug: data.slug }, 201 obj.afterDeinit 202 ) 203 .on( 204 'handleMutationMonthChange.tribeEvents', 205 { container: $container, observer: tribe.events.views.datepicker.observer }, 206 obj.bindRowEvents 207 ) 208 .find( tribe.events.views.datepicker.selectors.input ) 209 .on( 210 'show', 211 { container: $container, observer: tribe.events.views.datepicker.observer }, 212 obj.bindRowEvents 213 ); 214 }; 215 216 /** 217 * Handles the initialization of the Datepicker when datepicker init events are triggered. 218 * 219 * @since 4.7.9 220 * 221 * @return {void} 222 */ 223 obj.ready = function() { 224 $document.on( 225 'beforeDatepickerInit.tribeEvents', 226 tribe.events.views.manager.selectors.container, 227 obj.beforeInit 228 ); 229 $document.on( 230 'afterDatepickerInit.tribeEvents', 231 tribe.events.views.manager.selectors.container, 232 obj.afterInit 233 ); 234 }; 235 236 // Configure on document ready 237 $( obj.ready ); 238} )( jQuery, tribe.events.views.datepickerPro );
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.