1/** 2* @package Gridbox 3* @author Balbooa http://www.balbooa.com/ 4* @copyright Copyright @ Balbooa 5* @license http://www.gnu.org/licenses/gpl.html GNU/GPL 6*/ 7 8function setPostMasonryHeight(key) 9{ 10 var computed = null, 11 reviews = document.getElementById(key).classList.contains('ba-item-recent-reviews'), 12 gap = 20, 13 height = 0; 14 $g('#'+key).find('.ba-blog-posts-wrapper, .ba-categories-wrapper').not('.ba-masonry-layout').find('.ba-blog-post').each(function(){ 15 this.classList.remove('ba-masonry-image-loaded'); 16 this.style.gridRowEnd = ''; 17 }); 18 $g('#'+key+' .ba-masonry-layout .empty-list').each(function(){ 19 this.closest('.ba-masonry-layout').classList.add('empty-masonry-wrapper'); 20 }) 21 $g('#'+key+' .ba-masonry-layout .ba-blog-post').each(function(){ 22 var post = this, 23 offsetHeight = post.querySelector('.ba-blog-post-content').offsetHeight, 24 $this = this.querySelector('.ba-blog-post-image img'), 25 img = document.createElement('img'); 26 if (!computed) { 27 computed = getComputedStyle(this) 28 } 29 offsetHeight += (computed.paddingBottom.replace(/[^\d\.]/g, '') * 1)+(computed.paddingTop.replace(/[^\d\.]/g, '') * 1); 30 offsetHeight += (computed.borderBottomWidth.replace(/[^\d\.]/g, '') * 1)+(computed.borderTopWidth.replace(/[^\d\.]/g, '') * 1); 31 if (!$this || reviews) { 32 post.style.gridRowEnd = "span "+Math.ceil(((offsetHeight + gap) / (height + gap)) + 0); 33 if (!post.classList.contains('ba-masonry-image-loaded')) { 34 post.classList.add('ba-masonry-image-loaded'); 35 } 36 } else if ($this.src.indexOf('default-lazy-load.webp') != -1) { 37 $this.onload = function(){ 38 offsetHeight += $this.offsetHeight; 39 post.style.gridRowEnd = "span "+Math.ceil(((offsetHeight + gap) / (height + gap)) + 0); 40 if (!post.classList.contains('ba-masonry-image-loaded')) { 41 post.classList.add('ba-masonry-image-loaded'); 42 } 43 } 44 } else { 45 img.onload = function(){ 46 offsetHeight += $this.offsetHeight; 47 post.style.gridRowEnd = "span "+Math.ceil(((offsetHeight + gap) / (height + gap)) + 0); 48 if (!post.classList.contains('ba-masonry-image-loaded')) { 49 post.classList.add('ba-masonry-image-loaded'); 50 } 51 } 52 img.src = $this.src; 53 } 54 this.closest('.ba-masonry-layout').classList.remove('empty-masonry-wrapper'); 55 }); 56} 57 58app.initMasonryBlog = function(obj, key){ 59 setPostMasonryHeight(key); 60 $g('#'+key).off('mouseover.options').on('mouseover.options', '.ba-blog-post-product-option', function(event){ 61 let search = 'ba-blog-post-product-option', 62 t1 = event.target ? event.target.closest('.'+search) : null, 63 t2 = event.relatedTarget ? event.relatedTarget.closest('.'+search) : null; 64 if (t1 != t2) { 65 let post = this.closest('.ba-blog-post'); 66 if (this.dataset.image) { 67 let image = !app.isExternal(this.dataset.image) ? JUri+this.dataset.image : this.dataset.image; 68 post.style.setProperty('--product-option-image', 'url('+image+')'); 69 } else { 70 post.style.setProperty('--product-option-image', ''); 71 } 72 post.classList.add('product-option-hovered'); 73 } 74 }).off('mouseout.options').on('mouseout.options', '.ba-blog-post-product-option', function(event){ 75 let search = 'ba-blog-post-product-option', 76 t1 = event.target ? event.target.closest('.'+search) : null, 77 t2 = event.relatedTarget ? event.relatedTarget.closest('.'+search) : null; 78 if (t1 != t2 && (!t2 || !t2.classList.contains(search))) { 79 let post = this.closest('.ba-blog-post'); 80 post.classList.remove('product-option-hovered'); 81 post.style.setProperty('--product-option-image', ''); 82 } 83 }).off('click.wishlist keyup.wishlist').on('click.wishlist keyup.wishlist', '.ba-blog-post-wishlist-wrapper', function(event){ 84 app.AccessibilityHelper.processAction(event, () => { 85 if (themeData.page.view == 'gridbox') { 86 return false; 87 } 88 let post = this.closest('.ba-blog-post') 89 app.fetch(JUri+'index.php?option=com_gridbox&task=store.addPostToWishlist', { 90 id: post.dataset.id 91 }).then(function(text){ 92 let response = JSON.parse(text), 93 str = ''; 94 if (response.status) { 95 if (response.data.images.length) { 96 response.data.image = response.data.images[0]; 97 } 98 if (response.data.image && !app.isExternal(response.data.image)) { 99 response.data.image = JUri+response.data.image; 100 } 101 str = '<span class="ba-product-notice-message">'; 102 if (response.data.image) { 103 str += '<span class="ba-product-notice-image-wrapper"><img src="'+response.data.image+'"></span>'; 104 } 105 str += '<span class="ba-product-notice-text-wrapper">'+response.data.title+ 106 ' '+ app._('ADDED_TO_WISHLIST') +'</span></span>'; 107 app.showNotice(str, 'ba-product-notice'); 108 if (app.wishlist) { 109 app.wishlist.updateWishlist(); 110 } 111 } else if (!response.status && response.message) { 112 app.showNotice(response.message, 'ba-alert'); 113 } else { 114 localStorage.setItem('select-options', app._('PLEASE_SELECT_OPTION')); 115 post.querySelector('.ba-blog-post-title a').click(); 116 } 117 }); 118 }) 119 }).off('click.cart keyup.cart').on('click.cart keyup.cart', '.ba-blog-post-add-to-cart', function(event){ 120 app.AccessibilityHelper.processAction(event, () => { 121 if (themeData.page.view == 'gridbox') { 122 return false; 123 } 124 let post = this.closest('.ba-blog-post'), 125 $this = this; 126 app.fetch(JUri+'index.php?option=com_gridbox&task=store.addPostToCart', { 127 id: post.dataset.id 128 }).then(function(text){ 129 let response = JSON.parse(text); 130 if (!response.status) { 131 localStorage.setItem('select-options', app._('PLEASE_SELECT_OPTION')); 132 post.querySelector('.ba-blog-post-title a').click(); 133 return; 134 } 135 if (app.storeCart) { 136 app.storeCart.updateCartTotal(); 137 $g('.ba-item-cart a').first().trigger('click'); 138 } else { 139 window.location.href = $this.dataset.url 140 } 141 }); 142 }); 143 }).on('change', '.blog-posts-sorting', function(){ 144 if (themeData.page.view == 'gridbox') { 145 return false; 146 } 147 window.location.href = this.dataset.url+this.value; 148 });
149 if (obj.type == 'recent-posts' && themeData.page.view != 'gridbox') { 150 $g('#'+key).off('click.pagination').on('click.pagination', '.ba-blog-posts-pagination a', function(event){ 151 event.preventDefault(); 152 if (!this.dataset.clicked) { 153 this.dataset.clicked = true; 154 let match = this.href.match(/page=\d+/), 155 page = match[0].match(/\d+/), 156 notId = [], 157 notStr = ''; 158 if (obj.sorting == 'random') { 159 $g('#'+key+' .ba-blog-post').each(function(){ 160 notId.push(this.dataset.id); 161 }); 162 notStr = notId.join(','); 163 } 164 if (obj.layout.pagination == 'load-more' || (obj.layout.pagination == 'load-more-infinity' && page[0] == 2)) { 165 $g('#'+key+' .ba-blog-posts-wrapper').addClass('ba-blog-posts-content-loading'); 166 } 167 $g.ajax({ 168 type: "POST", 169 dataType: 'text', 170 url: JUri+"index.php?option=com_gridbox&task=page.getRecentPosts", 171 data: { 172 id : obj.app, 173 limit : obj.limit, 174 sorting : obj.sorting, 175 category : Object.keys(obj.categories), 176 tags: Object.keys(obj.tags), 177 type: obj.posts_type ? obj.posts_type : '', 178 maximum : obj.maximum, 179 featured: Number(obj.featured), 180 page: page[0], 181 pagination: obj.layout.pagination, 182 not: notStr, 183 item: JSON.stringify(obj) 184 }, 185 complete: function(msg){ 186 let object = JSON.parse(msg.responseText); 187 $g('#'+key+' .ba-blog-posts-pagination').remove(); 188 $g('#'+key+' .ba-blog-posts-wrapper').append(object.posts).removeClass('ba-blog-posts-content-loading').after(object.pagination); 189 if (obj.tag != 'h3') { 190 $g('#'+key+' h3[class*="-title"]').each(function(){ 191 var h = document.createElement(obj.tag); 192 h.className = this.className; 193 h.innerHTML = this.innerHTML; 194 $g(this).replaceWith(h); 195 }); 196 } 197 setPostMasonryHeight(key); 198 $g('#'+key+' .ba-blog-post-button-wrapper a') 199 .text(obj.buttonLabel ? obj.buttonLabel : app._('READ_MORE')); 200 if (obj.layout.pagination == 'load-more-infinity' && page[0] == 2) { 201 $g(document).on('scroll.'+key, function(){ 202 recentPostsInfinityAction(key); 203 }); 204 } 205 } 206 }); 207 } 208 }); 209 if (obj.layout.pagination == 'infinity') { 210 $g(document).on('scroll.'+key, function(){ 211 recentPostsInfinityAction(key); 212 }); 213 recentPostsInfinityAction(key); 214 } 215 } else if ((obj.type == 'blog-posts' || obj.type == 'search-result' || obj.type == 'store-search-result') && themeData.page.view != 'gridbox') { 216 let pagination = obj.pagination || obj.layout.pagination; 217 $g('#'+key).off('click.pagination').on('click.pagination', '.ba-blog-posts-pagination a', function(event){ 218 if (!pagination) { 219 return; 220 } 221 event.preventDefault(); 222 if (this.dataset.clicked || this.closest('.disabled')) { 223 return; 224 } 225 let page = this.dataset.page, 226 wrapper = $g('#'+key+' .ba-blog-posts-wrapper'); 227 if (pagination == 'load-more' || (pagination == 'load-more-infinity' && page == 2)) { 228 wrapper.addClass('ba-blog-posts-content-loading'); 229 } 230 this.dataset.clicked = true; 231 fetch(this.href).then((response) => { 232 return response.text(); 233 }).then((text) => { 234 let div = document.createElement('div'); 235 div.innerHTML = text; 236 div.querySelectorAll('#'+key+' .ba-blog-posts-wrapper .ba-blog-post').forEach((el) => { 237 if (wrapper.find('.ba-blog-post[data-id="'+el.dataset.id+'"]').length == 0) { 238 wrapper.append(el); 239 } 240 }); 241 $g('style[data-id="adaptive-images"]').each(function(){ 242 let item = div.querySelector('style[data-id="adaptive-images"]'); 243 if (item) { 244 this.innerHTML = item.innerHTML; 245 } 246 }); 247 $g('#'+key+' .ba-blog-posts-pagination')[0].innerHTML = div.querySelector('.ba-blog-posts-pagination').innerHTML; 248 if (app.lazyLoad) { 249 app.lazyLoad.check(); 250 } 251 setPostMasonryHeight(key); 252 if (pagination == 'load-more-infinity' && page == 2) { 253 $g(document).on('scroll.'+key, function(){ 254 recentPostsInfinityAction(key); 255 }); 256 } 257 wrapper.removeClass('ba-blog-posts-content-loading'); 258 }); 259 }); 260 if (pagination == 'infinity') { 261 $g(document).on('scroll.'+key, function(){ 262 recentPostsInfinityAction(key); 263 }); 264 recentPostsInfinityAction(key); 265 } 266 } 267 initItems();
268} 269 270if (app.modules.initMasonryBlog) { 271 app.initMasonryBlog(app.modules.initMasonryBlog.data, app.modules.initMasonryBlog.selector); 272} 273 274function recentPostsInfinityAction(key) 275{ 276 let scroll = window.scrollY + window.innerHeight, 277 rect = document.querySelector('#'+key+' .ba-blog-posts-wrapper').getBoundingClientRect(), 278 y = rect.bottom + window.scrollY, 279 btn = document.querySelector('#'+key+' .ba-blog-posts-pagination a'); 280 if (y < scroll && btn && !btn.dataset.clicked) { 281 btn.click(); 282 } else if (!btn) { 283 $g(document).off('scroll.'+key); 284 } 285}
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.