1(function ($) { 2 ('use strict'); 3 /** 4 * All of the code for your public-facing JavaScript source 5 * should reside in this file. 6 * 7 * Note: It has been assumed you will write jQuery code here, so the 8 * $ function reference has been prepared for usage within the scope 9 * of this function. 10 * 11 * This enables you to define handlers, for when the DOM is ready: 12 * 13 * $(function() { 14 * 15 * }); 16 * 17 * When the window is loaded: 18 * 19 * $( window ).load(function() { 20 * 21 * }); 22 * 23 * ...and/or other possibilities. 24 * 25 * Ideally, it is not considered best practise to attach more than a 26 * single DOM-ready or window-load handler for a particular page. 27 * Although scripts in the WordPress core, Plugins and Themes may be 28 * practising this, we should strive to set a better example in our own work. 29 */ 30 window.addEventListener('load', function () { 31 var nextSelector = selector['nextSelector']; 32 var navigationSelector = selector['navigationSelector']; 33 var contentSelector = selector['contentSelector']; 34 var itemSelector = selector['itemSelector']; 35 var themeName = selector.theme; 36 37 /** Support for TwentyTwenty theme */ 38 if( 'twentytwenty' === themeName ) { 39 if ('' !== contentSelector) { 40 itemSelector = 41 selector['contentSelector'] + ' ' + selector['itemSelector']; 42 } else { 43 itemSelector = selector['itemSelector']; 44 } 45 } else { 46 if ( 47 "." !== selector.contentSelector.charAt(0) && 48 "#" !== selector.contentSelector.charAt(0) 49 ) { 50 if ($("." + selector.contentSelector).length) { 51 contentSelector = "." + selector.contentSelector; 52 } else if ($("#" + selector.contentSelector).length) { 53 contentSelector = "#" + selector.contentSelector; 54 } 55 } else { 56 contentSelector = selector.contentSelector; 57 } 58 itemSelector = contentSelector + " " + selector['itemSelector']; 59 } 60 61 var destUrl = $(nextSelector).attr('href'); 62 var finished = false; 63 var flag = false; 64 65 if ( 66 $(nextSelector).length && 67 $(navigationSelector).length && 68 // $(contentSelector).length && 69 $(itemSelector).length 70 ) { 71 $(navigationSelector).css('display', 'none'); 72 $('body').addClass('infinite-scroll'); 73 74 var trigger = selector['event']; 75 $(itemSelector) 76 .last() 77 .after( 78 '<div id="ctis-loading" class="infinite-loader ctis-loader-elements"><span class="spinner"><img src="' + 79 selector['image'] + 80 '" alt="catch-infinite-scroll-loader"></span></div>' 81 ); 82 if ('click' == trigger) { 83 $(itemSelector) 84 .last() 85 .after( 86 '<div id="infinite-handle" class="ctis-load-more-container ctis-loader-elements"><span class="ctis-load-more"><button>
86' + 87 selector['load_more_text'] + 88 '</button></span></div>' 89 ); 90 load_on_click(); 91 } else { 92 load_on_scroll(); 93 } 94 95 $(window).on('scroll', function () { 96 var t = $(this), 97 elem = $(itemSelector).last(); 98 99 if (typeof elem == 'undefined') { 100 return; 101 } 102 103 if ( 104 finished && 105 t.scrollTop() + t.height() >= 106 elem.offset().top + elem.height() 107 ) { 108 setTimeout(function () { 109 $('.ctis-finished-notice').fadeOut('slow'); 110 }, 3000); 111 } 112 }); 113 } 114 115 function ctis_load_more() { 116 $.ajax({ 117 url: destUrl, 118 beforeSend: show_loader(), 119 success: function (results) { 120 if (selector['jetpack_enabled']) { 121 $('.infinite-loader').css('text-indent', '0'); 122 $('.infinite-loader').css('height', 'auto'); 123 } 124 hide_loader(); 125 var obj = $(results); 126 127 var elem = obj.find(itemSelector); 128 // console.log(elem); 129 var next = obj.find(nextSelector); 130 131 if (next.length !== 0) { 132 $(nextSelector).attr('href', next.attr('href')); 133 } 134 135 // var itemClass = selector['itemSelector'].split('.'); 136 137 elem = elem.each(function (index, value) { 138 var el; 139 if ( 140 $(value).find('img').hasClass('lazy') && 141 $(value).find('img').attr('data-src') !== undefined 142 ) { 143 var src = $(value).find('img').attr('data-src'); 144 $(value) 145 .find('img') 146 .attr('src', src) 147 .removeClass('lazy') 148 .removeAttr('data-src'); 149 } 150 151 /** Support: Logic for prepending separator in TwentyTwenty theme */ 152 var el; 153 if ('twentytwenty' === themeName) { 154 /* sepp = document.getElementsByClassName('post-separator'); 155 console.log(sepp[0].classList); */ 156 // Create a hr separator as in the theme as using existing element from the DOM didn't work in this theme for some reason 157 var hr = document.createElement('HR'); 158 hr.classList.add( 159 'post-separator', 160 'styled-separator', 161 'is-style-wide', 162 'section-inner' 163 ); 164 // console.log(hr); 165 // hr.appendChild($(value)); 166 el = $(value).prepend(hr); 167 //el = $(value); 168 } else { 169 el = $(value); 170 } 171 return el; 172 }); 173 174 elem.each(function (i, v) { 175 $(itemSelector).last().after($(this)); 176 }); 177 178 $(itemSelector).trigger('post-load'); 179 180 if (next.length !== 0 && next.attr('href') != '#') { 181 destUrl = $(nextSelector).attr('href'); 182 } else { 183 finished = true; 184 $('body').addClass('infinity-end'); 185 $('.ctis-load-more-container').hide(); 186 $(itemSelector) 187 .last() 188 .after( 189 '<div class="ctis-finished-notice infinite-loader ctis-loader-elements"><span class="finish-text spinner">' + 190 selector['finish_text'] + 191 '</span></div>' 192 ); 193 } 194 195 // Create the event 196 let event = new CustomEvent('afterScroll', { 197 detail: 'Hook some event after load completes', 198 }); 199 200 // Dispatch/Trigger/Fire the event 201 document.dispatchEvent(event); 202 }, 203 error: function () { 204 hide_loader(); 205 //$(".ctis-finished-notice").html('Error retrieving posts...'); 206 }, 207 }); 208 } 209 210 function show_loader() { 211 flag = true; 212 $('#ctis-loading').show(); 213 // $('.infinite-loader').show(); 214 $('.ctis-load-more-container').hide(); 215 } 216 217 function hide_loader() { 218 $('#ctis-loading').hide(); 219 // $('.infinite-loader').hide(); 220 $('.ctis-load-more-container').show(); 221 setTimeout(function () { 222 flag = false; 223 }, 500); 224 } 225 226 function load_on_scroll() { 227 $(window).on('scroll', function () { 228 var t = $(this), 229 elem = $(itemSelector).last(); 230 231 if (typeof elem == 'undefined') { 232 return; 233 } 234 235 if ( 236 flag === false && 237 !finished && 238 t.scrollTop() + t.height() >= 239 elem.offset().top + elem.height() 240 ) { 241 ctis_load_more(); 242 } 243 }); 244 } 245 246 function load_on_click() { 247 $('body').on('click', '.ctis-load-more', function () { 248 ctis_load_more(); 249 }); 250 } 251 }); 252})(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.