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 } 96 97 function ctis_load_more() { 98 $.ajax({ 99 url: destUrl, 100 beforeSend: show_loader(), 101 success: function (results) { 102 if (selector['jetpack_enabled']) { 103 $('.infinite-loader').css('text-indent', '0'); 104 $('.infinite-loader').css('height', 'auto'); 105 } 106 hide_loader(); 107 var obj = $(results); 108 109 var elem = obj.find(itemSelector); 110 // console.log(elem); 111 var next = obj.find(nextSelector); 112 113 if (next.length !== 0) { 114 $(nextSelector).attr('href', next.attr('href')); 115 } 116 117 // var itemClass = selector['itemSelector'].split('.'); 118 119 elem = elem.each(function (index, value) { 120 var el; 121 if ( 122 $(value).find('img').hasClass('lazy') && 123 $(value).find('img').attr('data-src') !== undefined 124 ) { 125 var src = $(value).find('img').attr('data-src'); 126 $(value) 127 .find('img') 128 .attr('src', src) 129 .removeClass('lazy') 130 .removeAttr('data-src'); 131 } 132 133 /** Support: Logic for prepending separator in TwentyTwenty theme */ 134 var el; 135 if ('twentytwenty' === themeName) { 136 /* sepp = document.getElementsByClassName('post-separator'); 137 console.log(sepp[0].classList); */ 138 // Create a hr separator as in the theme as using existing element from the DOM didn't work in this theme for some reason 139 var hr = document.createElement('HR'); 140 hr.classList.add( 141 'post-separator', 142 'styled-separator', 143 'is-style-wide', 144 'section-inner' 145 ); 146 // console.log(hr); 147 // hr.appendChild($(value)); 148 el = $(value).prepend(hr); 149 //el = $(value); 150 } else { 151 el = $(value); 152 } 153 return el; 154 }); 155 156 elem.each(function (i, v) { 157 $(itemSelector).last().after($(this)); 158 }); 159 160 $(itemSelector).trigger('post-load'); 161 162 if (next.length !== 0 && next.attr('href') != '#') { 163 destUrl = $(nextSelector).attr('href'); 164 } else { 165 finished = true; 166 $('body').addClass('infinity-end'); 167 $('.ctis-load-more-container').hide(); 168 $(itemSelector) 169 .last() 170 .after( 171 '<div class="ctis-finished-notice infinite-loader ctis-loader-elements"><span class="finish-text spinner">' + 172 selector['finish_text'] + 173 '</span></div>' 174 ); 175 } 176 177 // Create the event 178 let event = new CustomEvent('afterScroll', { 179 detail: 'Hook some event after load completes', 180 }); 181 182 // Dispatch/Trigger/Fire the event 183 document.dispatchEvent(event); 184 }, 185 error: function () { 186 hide_loader(); 187 //$(".ctis-finished-notice").html('Error retrieving posts...'); 188 }, 189 }); 190 } 191 192 function show_loader() { 193 flag = true; 194 $('#ctis-loading').show(); 195 // $('.infinite-loader').show(); 196 $('.ctis-load-more-container').hide(); 197 } 198 199 function hide_loader() { 200 $('#ctis-loading').hide(); 201 // $('.infinite-loader').hide(); 202 $('.ctis-load-more-container').show(); 203 setTimeout(function () { 204 flag = false; 205 }, 500); 206 } 207 208 function load_on_scroll() { 209 $(window).on('scroll', function () { 210 var t = $(this), 211 elem = $(itemSelector).last(); 212 213 if (typeof elem == 'undefined') { 214 return; 215 } 216 217 if ( 218 flag === false && 219 !finished && 220 t.scrollTop() + t.height() >= 221 elem.offset().top + elem.height() 222 ) { 223 ctis_load_more(); 224 } 225 }); 226 } 227 228 function load_on_click() { 229 $('body').on('click', '.ctis-load-more', function () { 230 ctis_load_more(); 231 }); 232 } 233 }); 234})(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.