1( function( $ ) { 2 3 "use strict"; 4 5 var servicesListPublic = { 6 7 settings: { 8 selectors: { 9 main: '.services-container', 10 filter: '.cherry-services-filter', 11 loadMore: '.ajax-more-btn', 12 pager: '.services-ajax-pager', 13 filterLink: '.cherry-services-filter_link', 14 result: '.services-listing', 15 container: '.cherry-services', 16 loader: '.services-loader', 17 }, 18 actions: { 19 filter: 'cherry_services_filter_posts', 20 more: 'cherry_services_load_more', 21 pager: 'cherry_services_pager' 22 }, 23 templates: { 24 loaderLarge: '<div class="services-loader loader-large">' + window.cherryServices.loader + '</div>', 25 loaderSmall: '<div class="services-loader loader-small">' + window.cherryServices.loader + '</div>', 26 }, 27 state: { 28 filters: false, 29 more: false, 30 pager: false 31 } 32 33 }, 34 35 init: function () { 36 37 var self = this; 38 39 // Document ready event check 40 if ( CherryJsCore.status.is_ready ) { 41 self.render( self ); 42 } else { 43 CherryJsCore.variable.$document.on( 'ready', self.render( self ) ); 44 } 45 46 }, 47 48 render: function ( self ) { 49 50 if ( ! window.elementorFrontend ) { 51 $( self.settings.selectors.main ).each( function() { 52 self.initFilters( $( this ) ); 53 self.initLoadMore( $( this ) ); 54 self.initPager( $( this ) ); 55 } ); 56 } else { 57 $( window ).on( 'elementor/frontend/init', self.initElementorWidget ); 58 } 59 60 }, 61 62 initElementorWidget: function() { 63 64 window.elementorFrontend.hooks.addAction( 65 'frontend/element_ready/cherry_services.default', 66 function( $scope ) { 67 68 var $container = $scope.find( servicesListPublic.settings.selectors.main ); 69 70 if ( $container.length ) { 71 72 if ( window.elementorFrontend.isEditMode() ) { 73 servicesListPublic.settings.state.filters = false; 74 servicesListPublic.settings.state.more = false; 75 servicesListPublic.settings.state.pager = false; 76 } 77 78 servicesListPublic.initFilters( $container ); 79 servicesListPublic.initLoadMore( $container ); 80 servicesListPublic.initPager( $container ); 81 82 } 83 84 } 85 ); 86 87 }, 88 89 addLoader: function( $container, isMore ) { 90 91 var template = this.settings.templates.loaderSmall; 92 93 if ( false === isMore ) { 94 $container.addClass( 'in-progress' ); 95 template = this.settings.templates.loaderLarge; 96 } 97 98 $container.append( template ); 99 }, 100 101 removeLoader: function( $container, isMore ) { 102 103 if ( false === isMore ) { 104 $container.removeClass( 'in-progress' ); 105 } 106 107 $container.find( this.settings.selectors.loader ).remove(); 108 }, 109 110 initFilters: function( $item ) { 111 112 if ( false !== servicesListPublic.settings.state.filters ) { 113 return; 114 } 115 116 servicesListPublic.settings.state.filters = true; 117 118 var $filter = $item.find( servicesListPublic.settings.selectors.filter ), 119 $result = $item.find( servicesListPublic.settings.selectors.result ), 120 $container = $item.find( servicesListPublic.settings.selectors.container ), 121 data = new Object(); 122 123 $filter.on( 'click', servicesListPublic.settings.selectors.filterLink, function( event ) { 124 125 var $this = $( this ), 126 $parent = $this.parent(); 127 128 event.preventDefault(); 129 130 if ( $parent.hasClass( 'active' ) ) { 131 return; 132 } 133 134 data.cat = $this.data( 'term' ); 135 data.atts = $container.data( 'atts' ); 136 data.cats = $container.data( 'cat' ); 137 data.action = servicesListPublic.settings.actions.filter; 138 139 $parent.addClass( 'active' ).siblings().removeClass( 'active' ); 140 servicesListPublic.addLoader( $container, false ); 141 142 $.ajax({
143 url: window.cherryServices.ajaxurl, 144 type: 'post', 145 dataType: 'json', 146 data: data, 147 error: function() { 148 servicesListPublic.removeLoader( $container, false ); 149 } 150 }).done( function( response ) { 151 servicesListPublic.removeLoader( $container, false ); 152 $result.html( response.data.result ); 153 $container.data( 'atts', response.data.atts ); 154 $container.data( 'page', 1 ); 155 $container.data( 'pages', response.data.pages ); 156 157 if ( 1 < response.data.pages && $( servicesListPublic.settings.selectors.loadMore, $item ).length ) { 158 $( servicesListPublic.settings.selectors.loadMore, $item ).removeClass( 'btn-hidden' ); 159 } 160 161 if ( 1 == response.data.pages && $( servicesListPublic.settings.selectors.loadMore, $item ).length ) { 162 $( servicesListPublic.settings.selectors.loadMore, $item ).addClass( 'btn-hidden' ); 163 } 164 165 if ( $( servicesListPublic.settings.selectors.pager, $item ).length ) { 166 $( servicesListPublic.settings.selectors.pager, $item ).remove(); 167 } 168 169 $container.append( response.data.pager ); 170 171 }); 172 }); 173 }, 174 175 initLoadMore: function( $item ) { 176 177 if ( false !== servicesListPublic.settings.state.more ) { 178 return; 179 } 180 181 servicesListPublic.settings.state.more = true; 182 183 $item.on( 'click', servicesListPublic.settings.selectors.loadMore, function( event ) { 184 185 var $this = $( this ), 186 $result = $item.find( servicesListPublic.settings.selectors.result ), 187 $container = $item.find( servicesListPublic.settings.selectors.container ), 188 pages = $container.data( 'pages' ), 189 data = new Object(); 190 191 event.preventDefault(); 192 193 data.page = $container.data( 'page' ); 194 data.atts = $container.data( 'atts' ); 195 data.action = servicesListPublic.settings.actions.more; 196 197 servicesListPublic.addLoader( $container, true ); 198 199 $.ajax({
200 url: window.cherryServices.ajaxurl, 201 type: 'post', 202 dataType: 'json', 203 data: data, 204 error: function() { 205 servicesListPublic.removeLoader( $container, true ); 206 } 207 }).done( function( response ) { 208 servicesListPublic.removeLoader( $container, true ); 209 $result.append( response.data.result ); 210 $container.data( 'page', response.data.page ); 211 212 if ( response.data.page == pages ) { 213 $this.addClass( 'btn-hidden' ); 214 } 215 216 }); 217 218 }); 219 220 }, 221 222 initPager: function( $item ) { 223 224 if ( false !== servicesListPublic.settings.state.pager ) { 225 return; 226 } 227 228 servicesListPublic.settings.state.pager = true; 229 230 $item.on( 'click', servicesListPublic.settings.selectors.pager + ' a.page-numbers', function( event ) { 231 232 var $this = $( this ), 233 $result = $item.find( servicesListPublic.settings.selectors.result ), 234 $container = $item.find( servicesListPublic.settings.selectors.container ), 235 pages = $container.data( 'pages' ), 236 data = new Object(); 237 238 event.preventDefault(); 239 240 data.page = $this.data( 'page' ); 241 data.atts = $container.data( 'atts' ); 242 data.action = servicesListPublic.settings.actions.pager; 243 244 servicesListPublic.addLoader( $container, false ); 245 246 $this.addClass( 'current' ).siblings().removeClass( 'current' ); 247 248 $.ajax({
249 url: window.cherryServices.ajaxurl, 250 type: 'post', 251 dataType: 'json', 252 data: data, 253 error: function() { 254 servicesListPublic.removeLoader( $container, false ); 255 } 256 }).done( function( response ) { 257 258 servicesListPublic.removeLoader( $container, false ); 259 $result.html( response.data.result ); 260 $container.data( 'page', response.data.page ); 261 262 }); 263 264 }); 265 266 } 267 268 } 269 270 servicesListPublic.init(); 271 272}( jQuery ) );
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.