PageSourceSearch

https://www.muzeumjizerky.cz/components/com_gridbox/libraries/modules/initMasonryBlog.js?2.20.3.1

js muzeumjizerky.cz collected 2026-10-07 22:18:32 UTC 14,100 bytes, 285 lines download raw bytes

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.