PageSourceSearch

https://pafikabupatenkupang.org/frontend/assets/gallery/script.js

js pafikabupatenkupang.org collected 2026-10-06 21:36:48 UTC 11,173 bytes, 307 lines download raw bytes

1(function($) {
2    'use strict';
3
4    function getVideoId(url) {
5        if ('false' === url) return false;
6        var result = /(?:\?v=|\/embed\/|\.be\/)([-a-z0-9_]+)/i.exec(url) || /^([-a-z0-9_]+)$/i.exec(url);
7
8        return result ? result[1] : false;
9    }
10
11    function onPlayerReady(event) {
12        if ($(event.target).closest('.mbr-slider').hasClass('in')) {
13            event.target.playVideo();
14        }
15    }
16
17    var isBuilder = $('html').hasClass('is-builder');
18
19    /* get youtube id */
20    if (!isBuilder) {
21        /* google iframe */
22        var tag = document.createElement('script');
23        tag.src = "https://www.youtube.com/iframe_api";
24        var firstScriptTag = document.getElementsByTagName('script')[0];
25        firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
26        var players = [];
27
28        $('.carousel-item.video-container img').css('display','none');
29
30        /* google iframe api init function */
31        window.onYouTubeIframeAPIReady = function() {
32            var ytp = ytp || {};
33            ytp.YTAPIReady || (ytp.YTAPIReady = !0,
34                jQuery(document).trigger("YTAPIReady"));
35
36            $('.video-slide').each(function(i) {
37                $('.video-container').eq(i).append('<div id ="mbr-video-' + i + '" class="mbr-background-video" data-video-num="' + i + '"></div>')
38                    .append('<div class="item-overlay"></div>');
39                $(this).attr('data-video-num', i);
40
41                if ($(this).attr('data-video-url').indexOf('vimeo.com') !== -1) {
42                    var options = {
43                        id: $(this).attr('data-video-url'),
44                        width: '100%',
45                        height: '100%',
46                        loop: true
47                    };
48
49                    var player = new Vimeo.Player('mbr-video-' + i, options);
50
51                    player.playVideo = Vimeo.play;
52                } else {
53                    var player = new YT.Player('mbr-video-' + i, {
54                        height: '100%',
55                        width: '100%',
56                        videoId: getVideoId($(this).attr('data-video-url')),
57                        events: {
58                            'onReady': onPlayerReady
59                        },
60                        playerVars: {
61                            rel: 0
62                        }
63                    });
64                }
65
66                players.push(player);
67            });
68        };
69    }
70
71    function updateMasonry(event){
72        var $section = $(event.target);
73        if (typeof $.fn.masonry !== 'undefined') {
74            $section.outerFind('.mbr-gallery').each(function() {
75                var $msnr = $(this).find('.mbr-gallery-row').masonry({
76                    itemSelector: '.mbr-gallery-item:not(.mbr-gallery-item__hided)',
77                    percentPosition: true,
78                    horizontalOrder: true
79                });
80                // reload masonry (need for adding new or re-sort items)
81                $msnr.masonry('reloadItems');
82                $msnr.on('filter', function() {
83                    $msnr.masonry('reloadItems');
84                    $msnr.masonry('layout');
85                    // update parallax backgrounds
86                    $(window).trigger('update.parallax');
87                }.bind(this, $msnr));
88                // layout Masonry after each image loads
89                $msnr.imagesLoaded().progress(function() {
90                    $msnr.masonry('layout');
91                });
92            });
93        }
94    };
95
96    /* Masonry Grid */
97    $(document).on('add.cards', function(event) {
98        var $section = $(event.target),
99            allItem = $section.find('.mbr-gallery-filter-all');
100        var filterList = [];
101        $section.on('click', '.mbr-gallery-filter li > .btn', function(e) {
102            e.preventDefault();
103            var $li = $(this).closest('li');
104
105            $li.parent().find('li').removeClass('active');
106            $li.addClass('active');
107
108            var $mas = $li.closest('section').find('.mbr-gallery-row');
109            var filter = $(this).html().trim();
110
111            $section.find('.mbr-gallery-item').each(function(i, el) {
112                var $elem = $(this);
113                var tagsAttr = $elem.attr('data-tags');
114                var tags = tagsAttr.split(',');
115
116                var tagsTrimmed = tags.map(function(el) {
117                    return el.trim();
118                });
119
120                if ($.inArray(filter, tagsTrimmed) === -1 && !$li.hasClass('mbr-gallery-filter-all')) {
121                    $elem.addClass('mbr-gallery-item__hided');
122
123                    $elem.css('left', '300px');
124                } else {
125                    $elem.removeClass('mbr-gallery-item__hided');
126                }
127            });
128
129            $mas.closest('.mbr-gallery-row').trigger('filter');
130        });
131    })
132    $(document).on('add.cards changeParameter.cards', function(event) {
133        var $section = $(event.target),
134            allItem = $section.find('.mbr-gallery-filter-all');
135        var filterList = [];
136        $section.find('.mbr-gallery-item').each(function(el) {
137            var tagsAttr = ($(this).attr('data-tags') || "").trim();
138            var tagsList = tagsAttr.split(',');
139
140            tagsList.map(function(el) {
141                var tag = el.trim();
142
143                if ($.inArray(tag, filterList) === -1)
144                    filterList.push(tag);
145            });
146        });
147
148        if ($section.find('.mbr-gallery-filter').length > 0 && $(event.target).find('.mbr-gallery-filter').hasClass('gallery-filter-active')) {
149            var filterHtml = '';
150
151            $section.find('.mbr-gallery-filter ul li:not(li:eq(0))').remove();
152
153            filterList.map(function(el) {
154                filterHtml += '<li><a class="btn btn-md btn-primary-outline" href>' + el + '</a></li>';
155            });
156            $section.find('.mbr-gallery-filter ul').append(allItem).append(filterHtml);
157
158        } else {
159            $section.find('.mbr-gallery-item__hided').removeClass('mbr-gallery-item__hided');
160            $section.find('.mbr-gallery-row').trigger('filter');
161        }
162
163        updateMasonry(event);
164    });
165
166    $(document).on('change.cards', function(event) {
167        updateMasonry(event);
168    });
169
170    $('.mbr-gallery-item').on('click', 'a', function(e) {
171        e.stopPropagation();
172    });
173
174    var timeout2, timeout, objectLightBox;
175
176    /* Lightbox Fit */
177    function styleVideo($carouselItem, wndH, windowPadding, bottomPadding){
178        $carouselItem.css({
179            'top': windowPadding,
180            'height': wndH - 2 * windowPadding - 2 * bottomPadding
181        })
182    }
183
184    function styleImg($carouselItem, wndH, wndW, windowPadding, bottomPadding){
185        var $currentImg = $carouselItem.find('img');
186
187        var setWidth, setTop;
188        var lbW = $currentImg[0].naturalWidth;
189        var lbH = $currentImg[0].naturalHeight;
190
191         // height change
192        if (wndW / wndH > lbW / lbH) {
193            var needH = wndH - bottomPadding * 2;
194            setWidth = needH * lbW / lbH;
195        } else { // width change
196            setWidth = wndW - bottomPadding * 2;
197        }
198        // check for maw width
199        setWidth = setWidth >= lbW ? lbW : setWidth;
200
201        // set top to vertical center
202        setTop = (wndH - setWidth * lbH / lbW) / 2;
203
204        $currentImg.css({
205            width: parseInt(setWidth),
206            height: setWidth * lbH / lbW
207        });
208        $carouselItem.css('top', setTop + windowPadding);
209    }
210
211    function timeOutCarousel($lightBox, wndW, wndH, windowPadding, bottomPadding, flagResize){
212        var $carouselItems = $lightBox.find('.modal-dialog .carousel-item');
213
214        $carouselItems.each(function() {
215            if ((!flagResize && !$(this)[0].classList.contains('carousel-item-next') && !$(this)[0].classList.contains('carousel-item-prev')) || (flagResize && !$(this)[0].classList.contains('active'))){
216                if ($(this)[0].classList.contains('video-container')){
217                    styleVideo($(this), wndH, windowPadding, bottomPadding);
218                }
219                else{
220                    styleImg($(this), wndH, wndW, windowPadding, bottomPadding);
221                }
222            }
223        });
224    }
225
226    function fitLightbox() {
227        var windowPadding = 0;
228        var bottomPadding = 10;
229        var wndW = $(window).width() - windowPadding * 2;
230        var wndH = $(window).height() - windowPadding * 2;
231
232        if (!objectLightBox) {
233            return;
234        }
235
236        var $carouselItemActive, flagResize = false;
237        if (objectLightBox.find('.modal-dialog .carousel-item.carousel-item-next, .modal-dialog .carousel-item.carousel-item-prev').length){
238            $carouselItemActive = objectLightBox.find('.modal-dialog .carousel-item.carousel-item-next, .modal-dialog .carousel-item.carousel-item-prev');
239        }
240        else{
241            $carouselItemActive = objectLightBox.find('.modal-dialog .carousel-item.active');
242            flagResize = true;
243        }
244
245        if($carouselItemActive[0].classList.contains('video-container')){
246            styleVideo($carouselItemActive, wndH, windowPadding, bottomPadding);
247        }
248        else{
249            styleImg($carouselItemActive, wndH, wndW, windowPadding, bottomPadding);
250        }
251
252        clearTimeout(timeout);
253
254        timeout = setTimeout( timeOutCarousel, 200, objectLightBox, wndW, wndH, windowPadding, bottomPadding, flagResize);
255
256    }
257
258    /* pause/start video on different events and fit lightbox */
259    var $window = $(document).find('.mbr-gallery');
260
261    $window.on('show.bs.modal', function(e) {
262        clearTimeout(timeout2);
263
264        timeout2 = setTimeout(function() {
265            var index = $(e.relatedTarget).parent().index();
266            var slide = $(e.target).find('.carousel-item').eq(index).find('.mbr-background-video');
267            $(e.target).find('.carousel-item .mbr-background-video');
268            if (slide.length > 0) {
269                var player = players[+slide.attr('data-video-num')];
270                player.playVideo ? player.playVideo() : player.play();
271            }
272        }, 500);
273
274        objectLightBox = $(e.target);
275
276        fitLightbox();
277
278    });
279
280    $window.on('slide.bs.carousel', function(e) {
281        var ytv = $(e.target).find('.carousel-item.active .mbr-background-video');
282        if (ytv.length > 0) {
283            var player = players[+ytv.attr('data-video-num')];
284            player.pauseVideo ? player.pauseVideo() : player.pause();
285        }
286    });
287
288    $(window).on('resize load', fitLightbox);
289
290    $window.on('slid.bs.carousel', function(e) {
291        var ytv = $(e.target).find('.carousel-item.active .mbr-background-video');
292
293        if (ytv.length > 0) {
294            var player = players[+ytv.attr('data-video-num')];
295            player.playVideo ? player.playVideo() : player.play();
296        }
297        
298    });
299
300    $window.on('hide.bs.modal', function(e) {
301        players.map(function(player, i) {
302            player.pauseVideo ? player.pauseVideo() : player.pause();
303        });
304
305        objectLightBox = null;
306    });
307}(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.