1// This script is loaded both on the frontend page and in the Visual Builder. 2( function( $ ) { 3 $.fn.JustifiedGalleryExtendedPagination = function( $options = {} ) { 4 let $defaults = { 5 paginationClass: 'el_masonry_gallery_pagination', 6 hideOnlyOnePage: true, 7 totalPages: 1, 8 visiblePages: 10, 9 startPage: 1, 10 initiateStartPageClick: false, 11 first: false, 12 last: false, 13 prev: false, 14 next: false, 15 }, 16 $pagination = this; 17 18 $options = $.extend({}, $defaults, $options); 19 $pagination.twbsPagination($options); 20 } 21} ( jQuery ) ); 22 23jQuery( document ).ready( function($) { 24 // Justified Gallery Script. 25 if ( $(document).find('.el-justified-gallery-wrap').length > 0 ) { 26 $( '.el-justified-gallery-wrap' ).each( function() { 27 dge_init_justified_gallery( $( this ).parents( '.el_justified_gallery' ) ); 28 } ); 29 } 30} ); 31 32// Init justified gallery. 33function dge_init_justified_gallery( $this ) { 34 let $ = jQuery, 35 $wrapper = $this.find( '.el-justified-gallery-wrap' ), 36 $inner = $wrapper.find( '.el-justified-gallery-container' ), 37 $settings = $wrapper.attr( 'data-settings' ); 38 39 $settings = JSON.parse( $settings ) 40 41 let justified_settings = { 42 rowHeight : ( $settings?.row_height ) ? $settings.row_height : 200, 43 captions : false, 44 margins : ( $settings?.column_spacing ) ? $settings.column_spacing : 10, 45 lastRow: ( $settings?.lastrow_align ) ? $settings.lastrow_align : 'justify', 46 waitThumbnailsLoad: true, 47 refreshTime: 500,
48 filter: 'div:not(.dge-hidden-item)', // init filter. 49 sizeRangeSuffixes: { 50 'lt100': '_t', 51 'lt240': '_m', 52 'lt320': '_n', 53 'lt500': '', 54 'lt640': '_z', 55 'lt1024': '_b' 56 } 57 }; 58 59 // Init justified gallery. 60 $inner.justifiedGallery( justified_settings ); 61 $inner.imagesLoaded( function() { 62 $inner.justifiedGallery( 'norewind' ); 63 } ); 64 65 // Load other images. 66 $wrapper.find( '.el-justified-gallery-load-more' ).on( 'click', function(e) { 67 e.preventDefault(); 68 let $load_more_btn = $( this ), 69 $options = $load_more_btn.parent().data( 'options' ); 70 $settings = $wrapper.attr( 'data-settings' ); 71 72 $settings = JSON.parse( $settings ); 73 74 $load_more_btn.css( 'opacity', '0.5' ).prop( 'disabled', true ); 75 76 // Get selected category if filter exists. 77 let selected_cat = ''; 78 if ( $wrapper.find( '.dge-justified-gallery-filter' ).length > 0 ) { 79 selected_cat = $wrapper.find( '.dge-justified-gallery-filter li.active a' ).data( 'filter' ); 80 } 81 82 // Selected category class to filter. 83 let selectedCatClass = selected_cat; 84 if ( '*' === selected_cat ) { 85 selectedCatClass = ''; 86 } 87 88 const perPage = ( $options?.images_per_page ) ? $options?.images_per_page : 8; 89 const totalImages = parseInt( $wrapper.find( '.el-justified-gallery-item' + selectedCatClass ).length ); 90 const totalPages = Math.ceil( totalImages / parseInt( perPage ) ); 91 92 let loadPage = ( $options.page ) ? $options.page : 2; 93 94 // If all pages are visibled. 95 if ( loadPage > totalPages ) { 96 $load_more_btn.hide(); 97 return; 98 } 99 100 let $startIndex = 0; 101 let $endIndex = perPage; 102 if ( 1 !== loadPage ) { 103 $startIndex = ( perPage * ( loadPage - 1 ) ); 104 $endIndex = perPage * loadPage; 105 } 106 107 for ( $i = $startIndex; $i < $endIndex; $i++ ) { 108 $wrapper.find( '.el-justified-gallery-item.dge-hidden-item' + selectedCatClass + ':first' ).removeClass( 'dge-hidden-item' ); 109 } 110 111 // no review to view with new images. 112 $inner.justifiedGallery( justified_settings ).on( 'jg.complete', function (e) { 113 $wrapper.find( '.el-justified-gallery-container .el-justified-gallery-item' ).fadeIn('slow'); 114 } ); 115 116 // Update the options. 117 $options['page'] = parseInt( $options['page'] ) + 1; 118 $load_more_btn.parent().data( 'options', $options ); 119 120 $load_more_btn.css( 'opacity', '1' ).prop( 'disabled', false ); 121 if ( $endIndex >= totalImages ) { 122 $load_more_btn.hide(); 123 } 124 125 /* ***** 126 $settings['_wpnonce'] = DGEObj.restNonce; 127 128 // Ajax for load more images 129 $.ajax( { 130 type : 'GET', 131 url : DGEObj.restURL + 'justified-gallery/ajax', 132 data : $.extend( $options, $settings ), 133 success: function(response) { 134 if ( response.success ) { 135 // Append the elements 136 let $elements = $( response.data.items ); 137 $wrapper.find( '.el-justified-gallery-container' ).append( $elements ); 138 139 // Update the options 140 $options['page'] = parseInt( $options['page'] ) + 1; 141 $load_more_btn.parent().data( 'options', $options ); 142 143 let $imgs_array = $options['images'].split(","); 144 let $total_pages = Math.ceil( parseInt( $imgs_array.length ) / parseInt( $options['images_per_page'] ) ); 145 146 if ( $elements.length < $options.images_per_page || $total_pages < $options['page'] ) { 147 $load_more_btn.fadeOut(); 148 } 149 150 // Set the filter again 151 $wrapper.imagesLoaded( function() { 152 // no review to view with new images 153 $wrapper.find( '.el-justified-gallery-container' ).justifiedGallery( 'norewind' ); 154 155 // Reset with gallery filter 156 setTimeout( function() { 157 // Check if category filter is there 158 if ( $( '.dge-justified-gallery-filter' ).length > 0 ) { 159 // Set the current filter 160 let selected_cat = $wrapper.find( '.dge-justified-gallery-filter li.active a' ).data( 'filter' ); 161 if ( '*' === selected_cat ) { 162 $wrapper.find( '.el-justified-gallery-container .el-justified-gallery-item' ).removeClass( 'dge-hidden-item' ); 163 } else { 164 $wrapper.find( '.el-justified-gallery-container .el-justified-gallery-item' ).addClass( 'dge-hidden-item' ); 165 $wrapper.find( '.el-justified-gallery-container .el-justified-gallery-item' + selected_cat ).removeClass( 'dge-hidden-item' ); 166 } 167 168 // Add category to filtered 169 justified_settings.filter = selected_cat; 170 } 171 172 $wrapper.find( '.el-justified-gallery-container' ).justifiedGallery( justified_settings ) 173 .on( 'jg.complete', function (e) { 174 $wrapper.find( '.el-justified-gallery-container .el-justified-gallery-item' ).fadeIn('slow'); 175 } ); 176 }, 300 ); 177 } ); 178 } else { 179 $load_more_btn.fadeOut(); 180 } 181 182 $load_more_btn.css( 'opacity', '1' ).prop( 'disabled', false ); 183 } 184 } ); // End of ajax 185 *********** */ 186 } ); // End of clicked on load more button 187 188 // Number pagination. 189 if ( $wrapper.find( '.et_pb_button_wrapper ul' ).length > 0 ) { 190 191 let $pagin_wrapper = $wrapper.find( '.et_pb_button_wrapper' ), 192 $pagination = $pagin_wrapper.find( 'ul' ), 193 $options = $pagin_wrapper.data( 'options' ); 194 195 // Get selected category if filter exists. 196 let selected_cat = ''; 197 if ( $wrapper.find( '.dge-justified-gallery-filter' ).length > 0 ) { 198 selected_cat = $wrapper.find( '.dge-justified-gallery-filter li.active a' ).data( 'filter' ); 199 } 200 201 // Selected category class to filter. 202 let selectedCatClass = selected_cat; 203 if ( '*' === selected_cat ) { 204 selectedCatClass = ''; 205 } 206 207 const perPage = ( $options?.images_per_page ) ? $options?.images_per_page : 8; 208 const totalImages = parseInt( $options?.total_images );
209 const totalPages = Math.ceil( totalImages / parseInt( perPage ) ); 210 211 let $paginationArgs = { 212 totalPages: totalPages, 213 onPageClick: function (event, page) { 214 215 let $startIndex = 0; 216 let $endIndex = perPage; 217 if ( 1 !== page ) { 218 $startIndex = ( perPage * ( page - 1 ) ); 219 $endIndex = perPage * page; 220 } 221 222 // Hide all first. 223 $wrapper.find( '.el-justified-gallery-container .el-justified-gallery-item' ).addClass( 'dge-hidden-item' ); 224 225 const $elements = $wrapper.find( '.el-justified-gallery-container .el-justified-gallery-item.dge-hidden-item' + selectedCatClass ); 226 $elements.each( function( $index ) { 227 if ( parseInt($index) + 1 > $startIndex && parseInt($index) + 1 <= $endIndex ) { 228 $( this ).removeClass( 'dge-hidden-item' ); 229 } 230 } ); 231 232 // no review to view with new images. 233 $inner.justifiedGallery( justified_settings ).on( 'jg.complete', function (e) { 234 $wrapper.find( '.el-justified-gallery-container .el-justified-gallery-item' ).fadeIn('slow'); 235 } ); 236 237 if ( $wrapper.offset().top > 0 ) { 238 let topHeaderHeight = 0, 239 mainHeaderHeight = 0, 240 tbHeaderHeight = 0; 241 242 if ( $('body').find('#top-header').length > 0 && $('body').hasClass('et_fixed_nav') ) { 243 topHeaderHeight = parseFloat( $('#top-header').innerHeight() ); 244 } 245 if ( $('body').find('#main-header').length > 0 && $('body').hasClass('et_fixed_nav') ) { 246 mainHeaderHeight = parseFloat( $('#main-header').innerHeight() ); 247 } 248 if ( $('body').find('.et-l--header').length > 0 && $('body').find('.et-l--header .et_builder_inner_content').hasClass('has_et_pb_sticky') ) { 249 tbHeaderHeight = parseFloat( $('.et-l--header').innerHeight() ); 250 } 251 252 let headerHeight = topHeaderHeight + mainHeaderHeight + tbHeaderHeight + 50; 253 $( 'html, body' ).animate( { 254 scrollTop: ( $wrapper.offset().top - headerHeight ) 255 } ); 256 } 257 } 258 }; 259 260 if ( 'on' === $options?.show_prev_next ) { 261 $paginationArgs.prev = $options?.prev_text; 262 $paginationArgs.next = $options?.next_text; 263 } 264 265 $pagination.JustifiedGalleryExtendedPagination( $paginationArgs ); 266 } 267 268 // Filter the gallery. 269 $wrapper.find( '.dge-justified-gallery-filter a' ).on( 'click', function(e) { 270 e.preventDefault(); 271 272 const $this = $( this ); 273 if ( $this.parent().hasClass( 'active' ) ) { 274 return false; 275 } 276 277 const selected_cat = $this.data( 'filter' ); 278 let selectedCatClass = selected_cat; 279 if ( '*' === selected_cat ) { 280 selectedCatClass = ''; 281 } 282 283 // Check if load more, re-render it. 284 if ( $wrapper.find( '.et_pb_button_wrapper .el-justified-gallery-load-more' ).length > 0 || 285 $wrapper.find( '.et_pb_button_wrapper ul' ).length > 0 286 ) { 287 let $options = $wrapper.find( '.et_pb_button_wrapper' ).data( 'options' ); 288 289 $wrapper.find( '.el-justified-gallery-container .el-justified-gallery-item' ).addClass( 'dge-hidden-item' ); 290 291 const perPage = ( $options.images_per_page ) ? $options.images_per_page : 8; 292 const totalImage = parseInt( $wrapper.find( '.el-justified-gallery-container .el-justified-gallery-item' + selectedCatClass ).length ); 293 294 if ( totalImage > perPage ) { 295 let $startIndex = 0; 296 let $endIndex = perPage; 297 for ( $i = $startIndex; $i < $endIndex; $i++ ) { 298 $wrapper.find( '.el-justified-gallery-container .el-justified-gallery-item.dge-hidden-item' + selectedCatClass + ':first' ).removeClass( 'dge-hidden-item' ); 299 } 300 301 // Show button, it hidden. 302 $wrapper.find( '.et_pb_button_wrapper .el-justified-gallery-load-more' ).show(); 303 } else { 304 $wrapper.find( '.el-justified-gallery-container .el-justified-gallery-item' + selectedCatClass ).removeClass( 'dge-hidden-item' ); 305 $wrapper.find( '.et_pb_button_wrapper .el-justified-gallery-load-more' ).hide(); 306 } 307 308 // Update the options. 309 $options['page'] = 2; 310 $wrapper.find( '.et_pb_button_wrapper' ).data( 'options', $options ); 311 312 // Re-render number pagination. 313 if ( $wrapper.find( '.et_pb_button_wrapper ul' ).length > 0 ) { 314 315 let $pagin_wrapper = $wrapper.find( '.et_pb_button_wrapper' ), 316 $pagination = $pagin_wrapper.find( 'ul' ); 317 318 let $paginationArgs = { 319 totalPages: parseInt( Math.ceil( totalImage / perPage ) ), 320 onPageClick: function (event, page) { 321 322 let $startIndex = 0; 323 let $endIndex = perPage; 324 if ( 1 !== page ) { 325 $startIndex = ( perPage * ( page - 1 ) ); 326 $endIndex = perPage * page; 327 } 328 329 // Hide all first. 330 $wrapper.find( '.el-justified-gallery-container .el-justified-gallery-item' ).addClass( 'dge-hidden-item' ); 331 332 const $elements = $wrapper.find( '.el-justified-gallery-container .el-justified-gallery-item.dge-hidden-item' + selectedCatClass ); 333 $elements.each( function( $index ) { 334 if ( parseInt($index) + 1 > $startIndex && parseInt($index) + 1 <= $endIndex ) { 335 $( this ).removeClass( 'dge-hidden-item' ); 336 } 337 } ); 338 339 // no review to view with new images. 340 $inner.justifiedGallery( justified_settings ).on( 'jg.complete', function (e) { 341 $wrapper.find( '.el-justified-gallery-container .el-justified-gallery-item' ).fadeIn('slow'); 342 } ); 343 344 if ( $wrapper.offset().top > 0 ) { 345 let topHeaderHeight = 0, 346 mainHeaderHeight = 0, 347 tbHeaderHeight = 0; 348 349 if ( $('body').find('#top-header').length > 0 && $('body').hasClass('et_fixed_nav') ) { 350 topHeaderHeight = parseFloat( $('#top-header').innerHeight() ); 351 } 352 if ( $('body').find('#main-header').length > 0 && $('body').hasClass('et_fixed_nav') ) { 353 mainHeaderHeight = parseFloat( $('#main-header').innerHeight() ); 354 } 355 if ( $('body').find('.et-l--header').length > 0 && $('body').find('.et-l--header .et_builder_inner_content').hasClass('has_et_pb_sticky') ) { 356 tbHeaderHeight = parseFloat( $('.et-l--header').innerHeight() ); 357 } 358 359 let headerHeight = topHeaderHeight + mainHeaderHeight + tbHeaderHeight + 50; 360 $( 'html, body' ).animate( { 361 scrollTop: ( $wrapper.offset().top - headerHeight ) 362 } ); 363 } 364 } 365 }; 366 367 if ( 'on' === $options.show_prev_next ) { 368 $paginationArgs.prev = $options.prev_text; 369 $paginationArgs.next = $options.next_text; 370 } 371 372 $pagination.twbsPagination( 'destroy' ); 373 $pagination.JustifiedGalleryExtendedPagination( $paginationArgs ); 374 } 375 } else { 376 // Hide all first. 377 $wrapper.find( '.el-justified-gallery-container .el-justified-gallery-item' ).addClass( 'dge-hidden-item' ); 378 $wrapper.find( '.el-justified-gallery-container .el-justified-gallery-item' + selectedCatClass ).removeClass( 'dge-hidden-item' ); 379 } 380 381 $wrapper.find( '.dge-justified-gallery-filter li' ).removeClass( 'active' ); 382 $this.parent().addClass( 'active' ); 383 384 // Add category to filtered. 385 // justified_settings.filter = selected_cat; 386 $inner.justifiedGallery( justified_settings ).on( 'jg.complete', function (e) { 387 $inner.find( '.el-justified-gallery-item' ).fadeIn('slow'); 388 } ); 389 } ); // End of clicked on filter. 390 391 // Lightbox. 392 if ( $settings?.click_trigger && ( 'lightbox' === $settings.click_trigger || 'zoom_n_link' === $settings.click_trigger ) ) { 393 let $orderClass = $this.prop('class').match(/(el_justified_gallery\_[^\s]*)/)[0] + '_lightbox', 394 $effect = $settings.lightbox_effect, 395 $zoom = 'zoom' === $effect ? true : false, 396 $duration = 'none' !== $effect ? parseInt( $settings.lightbox_transition_duration ) : 0, 397 $navigation = ( 'on' === $settings.enable_navigation ) ? true : false;
398 399 let clickDeligate = '.el-justified-gallery-item figure'; 400 if ( 'zoom_n_link' === $settings.click_trigger ) { 401 clickDeligate = '.el-justified-gallery-item .dge-overlay-lightbox'; 402 } 403 404 $wrapper.magnificPopup( { 405 delegate: clickDeligate, 406 type: 'image', 407 removalDelay: $duration, 408 closeOnContentClick: false, 409 closeBtnInside: false, 410 mainClass: 'mfp-with-zoom mfp-img-mobile el_justified_gallery_lightbox ' + $orderClass + ' dipl_mfp_' + $effect, 411 gallery: { 412 enabled: $navigation, 413 navigateByImgClick: false, 414 tPrev: '', 415 tNext: '', 416 tCounter: '' 417 }, 418 zoom: { 419 enabled: $zoom, 420 duration: $duration, 421 easing: 'ease-in-out', 422 opener: function(element) { 423 return element; 424 } 425 }, 426 image: { 427 markup: '<div class="mfp-figure">'+ 428 '<div class="mfp-close"></div>'+ 429 '<div class="mfp-img"></div>'+ 430 '<div class="mfp-bottom-bar">'+ 431 '<div class="mfp-title"></div>'+ 432 '</div>'+ 433 '</div>', 434 titleSrc: function(item) { 435 if ( 'zoom_n_link' === $settings.click_trigger ) { 436 return item.el.parents( '.el-justified-gallery-item' ).find( 'figcaption .el-item-content' ).length > 0 ? item.el.parents( '.el-justified-gallery-item' ).find( 'figcaption .el-item-content' ).html() : ''; 437 } 438 return item.el.find('figcaption .el-item-content').length > 0 ? item.el.find('figcaption .el-item-content').html() : ''; 439 }, 440 tError: '<a href="%url%">The image</a> could not be loaded.', 441 }, 442 allowHTMLInTemplate: true 443 } ); 444 } 445}
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.