1( function( $ ) { 2 3 // parse query string 4 var parseQueryString = function( name, str ) { 5 var regex = new RegExp( '[?&]' + name.replace( /[\[\]]/g, '\\$&' ) + '(=([^&#]*)|&|#|$)' ); 6 var results = regex.exec( '&' + str ); 7 8 return ( ! results || ! results[2] ? '' : decodeURIComponent( results[2].replace( /\+/g, ' ' ) ) ); 9 } 10 11 // observe DOM changes 12 var observeContentChanges = function( el, onlyAdded, callback ) { 13 if ( typeof MutationObserver !== 'undefined' ) { 14 // define a new observer 15 var observer = new MutationObserver( function( mutations, observer ) { 16 if ( onlyAdded ) { 17 if ( mutations[0].addedNodes.length ) 18 callback(); 19 } else { 20 if ( mutations[0].addedNodes.length || mutations[0].removedNodes.length ) 21 callback(); 22 } 23 } ); 24 25 // have the observer observe for changes in children 26 observer.observe( el, { childList: true, subtree: true } ); 27 } 28 }; 29 30 // ready event 31 $( function() { 32 initPlugin(); 33 } ); 34 35 // custom events trigger 36 $( document ).on( rlArgs.customEvents, function() { 37 initPlugin(); 38 } ); 39 40 function initPlugin() { 41 var containers = []; 42 43 // check for infinite galleries 44 $( '.rl-gallery-container' ).each( function() { 45 var container = $( this ); 46 47 // is it ifinite scroll gallery? 48 if ( container.hasClass( 'rl-pagination-infinite' ) ) 49 containers.push( container ); 50 // remove loading class 51 else 52 container.removeClass( 'rl-loading' ); 53 } ); 54 55 // any infinite galleries? 56 if ( containers.length > 0 ) { 57 var infArgs = []; 58 59 for ( var i = 0; i < containers.length; i++ ) { 60 var container = containers[i]; 61 var gallery = container.find( '.rl-gallery' ); 62 var galleryId = parseInt( container.data( 'gallery_id' ) ); 63 var galleryScrollType = container.find( '.rl-pagination-bottom' ).data( 'button' ); 64 var galleryButton = typeof galleryScrollType !== 'undefined' && galleryScrollType === 'manually'; 65 66 infArgs[i] = { 67 container: container, 68 gallery: gallery, 69 galleryId: galleryId, 70 galleryButton: galleryButton 71 }; 72 73 // initialize infinite scroll 74 infArgs[i].gallery.infiniteScroll( { 75 path: '.rl-gallery-container[data-gallery_id="' + infArgs[i].galleryId + '"] .rl-pagination-bottom .next', 76 append: '.rl-gallery-container[data-gallery_id="' + infArgs[i].galleryId + '"] .rl-gallery-item', 77 status: false, 78 hideNav: '.rl-gallery-container[data-gallery_id="' + infArgs[i].galleryId + '"] .rl-pagination-bottom', 79 prefill: ! infArgs[i].galleryButton, 80 loadOnScroll: true, 81 scrollThreshold: infArgs[i].galleryButton ? false : 400, 82 button: infArgs[i].galleryButton ? '.rl-gallery-container[data-gallery_id="' + infArgs[i].galleryId + '"] .rl-load-more' : false, 83 debug: false, 84 history: false, 85 responseBody: 'text', 86 onInit: function() { 87 // get current arguments 88 var args = infArgs[i]; 89 90 // infinite with button? 91 if ( args.container.hasClass( 'rl-pagination-infinite' ) && args.galleryButton ) { 92 // remove loading class 93 args.container.removeClass( 'rl-loading' ); 94 } 95 96 // request event 97 this.on( 'request', function() { 98 // add loading class 99 args.container.addClass( 'rl-loading' ); 100 } ); 101 102 // append event 103 this.on( 'append', function( body, path, items, response ) { 104 // remove loading class 105 args.container.removeClass( 'rl-loading' ); 106 107 $.event.trigger( { 108 type: 'doResponsiveLightbox', 109 script: rlArgs.script, 110 selector: rlArgs.selector, 111 args: rlArgs, 112 pagination_type: 'infinite', 113 gallery_id: args.galleryId, 114 masonry: args.gallery.hasClass( 'rl-masonry-gallery' ) || args.gallery.hasClass( 'rl-basicmasonry-gallery' ), 115 delayLightbox: args.gallery.hasClass( 'rl-expander-gallery' ), 116 infinite: { 117 gallery: args.gallery, 118 body: body, 119 items: items, 120 response: response 121 } 122 } ); 123 } ); 124 } 125 } ); 126 } 127 } 128 129 // initialize event 130 $.event.trigger( { 131 type: 'doResponsiveLightbox', 132 script: rlArgs.script, 133 selector: rlArgs.selector, 134 args: rlArgs 135 } ); 136 } 137 138 // pagination 139 $( document ).on( 'click', '.rl-pagination a.page-numbers', function( e ) { 140 var link = $( this ); 141 var container = link.closest( '.rl-gallery-container' ); 142 143 // ajax type pagination? 144 if ( container.hasClass( 'rl-pagination-ajax' ) ) { 145 e.preventDefault(); 146 e.stopPropagation(); 147 148 var galleryId = container.data( 'gallery_id' ); 149 var galleryNo = container.find( '.rl-gallery' ).data( 'gallery_no' ); 150 151 // add loading class 152 container.addClass( 'rl-loading' ); 153 154 $.post( rlArgs.ajaxurl, { 155 action: 'rl-get-gallery-page-content', 156 gallery_id: galleryId, 157 gallery_no: galleryNo, 158 post_id: rlArgs.postId, 159 page: parseQueryString( 'rl_page', link.prop( 'href' ) ), 160 nonce: rlArgs.nonce, 161 preview: rlArgs.preview ? 'true' : 'false', 162 lightbox: rlArgs.script 163 } ).done( function( response ) { 164 // replace container with new content 165 container.replaceWith( $( response ).removeClass( 'rl-loading' ) ); 166 167 // trigger main event 168 $.event.trigger( { 169 type: 'doResponsiveLightbox', 170 script: rlArgs.script, 171 selector: rlArgs.selector, 172 args: rlArgs, 173 pagination_type: 'ajax', 174 gallery_id: galleryId, 175 gallery_no: galleryNo 176 } ); 177 } ).always( function() { 178 container.removeClass( 'rl-loading' ); 179 } ); 180 181 return false; 182 } 183 } ); 184 185 // this is similar to the WP function add_action(); 186 $( document ).on( 'doResponsiveLightbox', function( event ) { 187 if ( typeof event.masonry !== 'undefined' && event.masonry === true ) 188 return false; 189 190 var script = event.script; 191 var selector = event.selector; 192 193 if ( typeof script === 'undefined' || typeof selector === 'undefined' ) 194 return false; 195 196 var args = event.args; 197 var delayLightbox = false; 198 199 if ( typeof event.delayLightbox !== 'undefined' && event.delayLightbox === true ) 200 delayLightbox = true; 201 202 rl_view_image = function( script, url ) { 203 $.event.trigger( { 204 type: 'doLightboxViewImage', 205 script: script, 206 url: url 207 } ); 208 } 209 210 rl_hide_image = function( script, url ) { 211 $.event.trigger( { 212 type: 'doLightboxHideImage', 213 script: script, 214 url: url 215 } ); 216 } 217 218 // WooCommerce 3.0+ compatibility 219 setTimeout( function() { 220 var flex = $( '.flex-viewport' ); 221 222 if ( args.woocommerce_gallery ) { 223 var gallery = $( '.woocommerce-product-gallery' ); 224 225 if ( gallery.find( '.woocommerce-product-gallery__trigger' ).length === 0 ) { 226 gallery.prepend( '<a href="#" class="woocommerce-product-gallery__trigger">ð</a>' ); 227 228 gallery.on( 'click', '.woocommerce-product-gallery__trigger', function( e ) { 229 e.preventDefault(); 230 e.stopPropagation(); 231 232 if ( script === 'lightgallery' ) { 233 if ( flex.length ) { 234 var image = flex.find( '.flex-active-slide a[data-rel] img' ); 235 var linkId = flex.find( '.flex-active-slide a[data-rel]' ).data( 'lg-id' ); 236 237 image.trigger( 'click.lgcustom-item-' + linkId ); 238 } else { 239 var link = gallery.find( 'a[data-rel]' ).first(); 240 var image = link.find( 'img' ); 241 242 image.trigger( 'click.lgcustom-item-' + link.data( 'lg-id' ) ); 243 } 244 } else if ( script === 'fancybox_pro' ) { 245 if ( flex.length ) { 246 var index = flex.find( '.flex-active-slide' ).index(); 247 var imageId = flex.find( '.flex-active-slide a[data-rel]' ).data( 'fancybox' ); 248 249 Fancybox.fromOpener( '[data-fancybox="' + imageId + '"]', { 250 startIndex: index 251 } ); 252 } else { 253 var link = gallery.find( 'a[data-rel]' ).first(); 254 255 Fancybox.fromOpener( '[data-fancybox="' + link.data( 'fancybox' ) + '"]', { 256 startIndex: 0 257 } ); 258 } 259 } else { 260 if ( flex.length ) 261 flex.find( '.flex-active-slide a[data-rel]' ).trigger( 'click' ); 262 else 263 gallery.find( 'a[data-rel]' ).first().trigger( 'click' ); 264 } 265 } ); 266 } 267 } 268 }, 10 ); 269 270 if ( delayLightbox ) { 271 setTimeout( function() { 272 initLightbox( event ); 273 }, 0 ); 274 } else 275 initLightbox( event ); 276 } ); 277 278 /** 279 * Initialize lightbox script. 280 */ 281 function initLightbox( event ) { 282 var script = event.script; 283 var selector = event.selector; 284 var args = event.args; 285 286 switch ( script ) { 287 case 'swipebox': 288 var slide = $( '#swipebox-overlay' ).find( '.slide.current' ); 289 var imageSource = ''; 290 var allowHide = false; 291 var closeExecuted = false; 292 293 $( 'a[rel*="' + selector + '"], a[data-rel*="' + selector + '"]' ).swipebox( { 294 useCSS: args.animation, 295 useSVG: args.useSVG, 296 hideCloseButtonOnMobile: args.hideCloseButtonOnMobile, 297 removeBarsOnMobile: args.removeBarsOnMobile, 298 hideBarsDelay: args.hideBars ? parseInt( args.hideBarsDelay ) : 0, 299 videoMaxWidth: parseInt( args.videoMaxWidth ), 300 loopAtEnd: args.loopAtEnd, 301 afterOpen: function() { 302 closeExecuted = false; 303 304 // update current slide container 305 slide = $( '#swipebox-overlay' ).find( '.slide.current' ); 306 307 // get image source
308 var image = slide.find( 'img' ).attr( 'src' ); 309 310 // valid image source? 311 if ( typeof image !== 'undefined' ) { 312 imageSource = image; 313 314 // trigger image view 315 rl_view_image( script, imageSource ); 316 } else 317 imageSource = ''; 318 319 // add current slide observer 320 observeContentChanges( document.getElementById( 'swipebox-slider' ), false, function() { 321 if ( imageSource === '' ) { 322 // get image source 323 var image = slide.find( 'img' ).attr( 'src' ); 324 325 // valid image source? 326 if ( typeof image !== 'undefined' ) { 327 imageSource = image; 328 329 // trigger image view 330 rl_view_image( script, imageSource ); 331 } else 332 imageSource = ''; 333 } 334 } ); 335 }, 336 nextSlide: function() { 337 // update current slide container 338 slide = $( '#swipebox-overlay' ).find( '.slide.current' ); 339 340 // get image source 341 var image = slide.find( 'img' ).attr( 'src' ); 342 343 // valid image source? 344 if ( typeof image !== 'undefined' ) { 345 imageSource = image; 346 347 // trigger image view 348 rl_view_image( script, imageSource ); 349 } else 350 imageSource = ''; 351 }, 352 prevSlide: function() { 353 // update current slide container 354 slide = $( '#swipebox-overlay' ).find( '.slide.current' ); 355 356 // get image source 357 var image = slide.find( 'img' ).attr( 'src' ); 358 359 // valid image source? 360 if ( typeof image !== 'undefined' ) { 361 imageSource = image; 362 363 // trigger image view 364 rl_view_image( script, imageSource ); 365 } else 366 imageSource = ''; 367 }, 368 afterClose: function() { 369 // afterClose event executed 370 closeExecuted = true; 371 372 // allow to hide image? 373 if ( allowHide ) { 374 // trigger image hide 375 rl_hide_image( script, imageSource ); 376 377 allowHide = false; 378 } 379 } 380 } ); 381 382 // additional event to prevent rl_hide_image to execure while opening modal 383 $( window ).on( 'resize', function() { 384 if ( ! closeExecuted ) { 385 allowHide = true; 386 } 387 } ); 388 break; 389 390 case 'prettyphoto': 391 var viewDisabled = false; 392 var lastImage = ''; 393 394 $( 'a[rel*="' + selector + '"], a[data-rel*="' + selector + '"]' ).each( function() { 395 var el = $( this ); 396 var title = el.data( 'rl_title' ); 397 var caption = el.data( 'rl_caption' ); 398 399 if ( ! title ) 400 title = ''; 401 402 if ( ! caption ) 403 caption = ''; 404 405 // set description 406 el.attr( 'title', caption ); 407 408 // set title
409 el.find( 'img' ).attr( 'alt', title ); 410 } ); 411 412 $( 'a[rel*="' + selector + '"], a[data-rel*="' + selector + '"]' ).prettyPhoto( { 413 hook: 'data-rel', 414 animation_speed: args.animationSpeed, 415 slideshow: args.slideshow ? parseInt( args.slideshowDelay ) : false, 416 autoplay_slideshow: args.slideshowAutoplay, 417 opacity: args.opacity, 418 show_title: args.showTitle, 419 allow_resize: args.allowResize, 420 allow_expand: args.allowExpand, 421 default_width: parseInt( args.width ), 422 default_height: parseInt( args.height ), 423 counter_separator_label: args.separator, 424 theme: args.theme, 425 horizontal_padding: parseInt( args.horizontalPadding ), 426 hideflash: args.hideFlash, 427 wmode: args.wmode, 428 autoplay: args.videoAutoplay, 429 modal: args.modal, 430 deeplinking: args.deeplinking, 431 overlay_gallery: args.overlayGallery, 432 keyboard_shortcuts: args.keyboardShortcuts, 433 social_tools: args.social ? '<div class="pp_social"><div class="twitter"><a href="//twitter.com/share" class="twitter-share-button" data-count="none">Tweet</a><script type="text/javascript" src="//platform.twitter.com/widgets.js"></script></div><div class="facebook"><iframe src="//www.facebook.com/plugins/like.php?locale=en_US&href=' + location.href + '&layout=button_count&show_faces=true&width=500&action=like&font&colorscheme=light&height=23" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:500px; height:23px;" allowTransparency="true"></iframe></div></div>' : '', 434 ie6_fallback: true, 435 changepicturecallback: function() { 436 // is view disabled? 437 if ( viewDisabled ) { 438 // enable view 439 viewDisabled = false; 440 441 return; 442 } 443 444 lastImage = $( '#pp_full_res' ).find( 'img' ).attr( 'src' ); 445 446 // trigger image view 447 rl_view_image( script, lastImage ); 448 449 // is expanding allowed? 450 if ( args.allowExpand ) { 451 // disable changepicturecallback event after expanding 452 $( 'a.pp_expand' ).on( 'click', function() { 453 viewDisabled = true; 454 } ); 455 } 456 }, 457 callback: function() { 458 // trigger image hide 459 rl_hide_image( script, lastImage ); 460 } 461 } ); 462 break; 463 464 case 'fancybox': 465 var lastImage = ''; 466 467 $( 'a[rel*="' + selector + '"], a[data-rel*="' + selector + '"]' ).fancybox( { 468 modal: args.modal, 469 overlayShow: args.showOverlay, 470 showCloseButton: args.showCloseButton, 471 enableEscapeButton: args.enableEscapeButton, 472 hideOnOverlayClick: args.hideOnOverlayClick, 473 hideOnContentClick: args.hideOnContentClick, 474 cyclic: args.cyclic, 475 showNavArrows: args.showNavArrows, 476 autoScale: args.autoScale, 477 scrolling: args.scrolling, 478 centerOnScroll: args.centerOnScroll, 479 opacity: args.opacity, 480 overlayOpacity: parseFloat( args.overlayOpacity / 100 ), 481 overlayColor: args.overlayColor, 482 titleShow: args.titleShow, 483 titlePosition: args.titlePosition, 484 transitionIn: args.transitions, 485 transitionOut: args.transitions, 486 easingIn: args.easings, 487 easingOut: args.easings, 488 speedIn: parseInt( args.speeds ), 489 speedOut: parseInt( args.speeds ), 490 changeSpeed: parseInt( args.changeSpeed ), 491 changeFade: parseInt( args.changeFade ), 492 padding: parseInt( args.padding ), 493 margin: parseInt( args.margin ), 494 width: parseInt( args.videoWidth ), 495 height: parseInt( args.videoHeight ), 496 onComplete: function() { 497 lastImage = $( '#fancybox-content' ).find( 'img' ).attr( 'src' ); 498 499 // trigger image view 500 rl_view_image( script, lastImage ); 501 }, 502 onClosed: function() { 503 // trigger image hide 504 rl_hide_image( script, lastImage ); 505 } 506 } ); 507 break; 508 509 case 'nivo': 510 $.each( $( 'a[rel*="' + selector + '"], a[data-rel*="' + selector + '"]' ), function() { 511 var attr = $( this ).attr( 'data-rel' ); 512 513 // check data-rel attribute first 514 if ( typeof attr === 'undefined' || attr == false ) { 515 // if not found then try to check rel attribute for backward compatibility 516 attr = $( this ).attr( 'rel' ); 517 } 518 519 // for some browsers, `attr` is undefined; for others, `attr` is false. Check for both. 520 if ( typeof attr !== 'undefined' && attr !== false ) { 521 var match = attr.match( new RegExp( selector + '\\-(gallery\\-(?:[\\da-z]{1,4}))', 'ig' ) ); 522 523 if ( match !== null ) 524 $( this ).attr( 'data-lightbox-gallery', match[0] ); 525 } 526 } ); 527 528 var observerInitialized = false; 529 var changeAllowed = true; 530 var lastImage = ''; 531 532 $( 'a[rel*="' + selector + '"], a[data-rel*="' + selector + '"]' ).nivoLightbox( { 533 effect: args.effect, 534 clickOverlayToClose: args.clickOverlayToClose, 535 keyboardNav: args.keyboardNav, 536 errorMessage: args.errorMessage, 537 afterShowLightbox: function( lightbox ) { 538 var content = $( lightbox )[0].find( '.nivo-lightbox-content' ); 539 540 // is observer initialized? 541 if ( ! observerInitialized ) { 542 // turn it off 543 observerInitialized = true; 544 545 // add content observer 546 observeContentChanges( document.getElementsByClassName( 'nivo-lightbox-content' )[0], true, function() { 547 if ( changeAllowed ) { 548 lastImage = content.find( '.nivo-lightbox-image img' ).attr( 'src' ); 549 550 // trigger image view 551 rl_view_image( script, lastImage ); 552 553 // disallow observer changes 554 changeAllowed = false; 555 } 556 } ); 557 } 558 }, 559 afterHideLightbox: function() { 560 // allow observer changes 561 changeAllowed = true; 562 563 // trigger image hide 564 rl_hide_image( script, lastImage ); 565 }, 566 onPrev: function( element ) { 567 // disallow observer changes 568 changeAllowed = false; 569 570 lastImage = element[0].attr( 'href' ); 571 572 // trigger image view 573 rl_view_image( script, lastImage ); 574 }, 575 onNext: function( element ) { 576 // disallow observer changes 577 changeAllowed = false; 578 579 lastImage = element[0].attr( 'href' ); 580 581 // trigger image view 582 rl_view_image( script, lastImage ); 583 } 584 } ); 585 break; 586 587 case 'imagelightbox': 588 var selectors = []; 589 var lastImage = ''; 590 591 $( 'a[rel*="' + selector + '"], a[data-rel*="' + selector + '"]' ).each( function( i, item ) { 592 var attr = $( item ).attr( 'data-rel' ); 593 594 // check data-rel attribute first 595 if ( typeof attr !== 'undefined' && attr !== false && attr !== 'norl' ) 596 selectors.push( attr ); 597 // if not found then try to check rel attribute for backward compatibility 598 else { 599 attr = $( item ).attr( 'rel' ); 600 601 if ( typeof attr !== 'undefined' && attr !== false && attr !== 'norl' ) 602 selectors.push( attr ); 603 } 604 } ); 605 606 if ( selectors.length > 0 ) { 607 // make unique 608 selectors = _.uniq( selectors ); 609 610 $( selectors ).each( function( i, item ) { 611 if ( typeof event.pagination_type !== 'undefined' ) { 612 $( 'a[data-rel="' + item + '"], a[rel="' + item + '"]' ).each( function() { 613 $( this ).off( 'click.imageLightbox' ); 614 } ); 615 } 616 617 $( 'a[data-rel="' + item + '"], a[rel="' + item + '"]' ).imageLightbox( { 618 animationSpeed: parseInt( args.animationSpeed ), 619 preloadNext: args.preloadNext, 620 enableKeyboard: args.enableKeyboard, 621 quitOnEnd: args.quitOnEnd, 622 quitOnImgClick: args.quitOnImageClick, 623 quitOnDocClick: args.quitOnDocumentClick, 624 onLoadEnd: function() { 625 lastImage = $( '#imagelightbox' ).attr( 'src' ); 626 627 // trigger image view 628 rl_view_image( script, lastImage ); 629 }, 630 onEnd: function() { 631 // trigger image hide 632 rl_hide_image( script, lastImage ); 633 } 634 } ); 635 } ); 636 } 637 break; 638 639 case 'tosrus': 640 var selectors = []; 641 var lastImage = ''; 642 643 $( 'a[rel*="' + selector + '"], a[data-rel*="' + selector + '"]' ).each( function( i, item ) { 644 var attr = $( item ).attr( 'data-rel' ); 645 646 // check data-rel attribute first 647 if ( typeof attr !== 'undefined' && attr !== false && attr !== 'norl' ) 648 selectors.push( attr ); 649 // if not found then try to check rel attribute for backward compatibility 650 else { 651 attr = $( item ).attr( 'rel' ); 652 653 if ( typeof attr !== 'undefined' && attr !== false && attr !== 'norl' ) 654 selectors.push( attr ); 655 } 656 } ); 657 658 if ( selectors.length > 0 ) { 659 // make unique 660 selectors = _.uniq( selectors ); 661 662 $( selectors ).each( function( i, item ) { 663 if ( typeof event.pagination_type !== 'undefined' ) { 664 $( 'body' ).find( '.tosrus-' + item ).remove(); 665 666 $( 'a[data-rel="' + item + '"], a[rel="' + item + '"]' ).each( function() { 667 $( this ).off( 'click.tos' ); 668 } ); 669 } 670 671 var tos = $( 'a[data-rel="' + item + '"], a[rel="' + item + '"]' ).tosrus( { 672 infinite: args.infinite, 673 autoplay: { 674 play: args.autoplay, 675 pauseOnHover: args.pauseOnHover, 676 timeout: args.timeout 677 }, 678 effect: args.effect, 679 keys: { 680 prev: args.keys, 681 next: args.keys, 682 close: args.keys 683 }, 684 pagination: { 685 add: args.pagination, 686 type: args.paginationType 687 }, 688 // forced 689 show: false, 690 buttons: true, 691 caption: { 692 add: true, 693 attributes: [ "title" ] 694 }, 695 wrapper: { 696 classes: 'tosrus-' + item, 697 onClick: args.closeOnClick ? 'close' : 'toggleUI' 698 } 699 } ); 700 701 tos.on( 'sliding.tos', function( event, number ) { 702 lastImage = $( $( event.target ).find( '.tos-slider .tos-slide' )[number] ).find( 'img' ).attr( 'src' ); 703 704 // trigger image view 705 rl_view_image( script, lastImage ); 706 } ); 707 708 tos.on( 'closing.tos', function() { 709 // trigger image hide 710 rl_hide_image( script, lastImage ); 711 } ); 712 } ); 713 } 714 break; 715 716 case 'featherlight': 717 var selectors = []; 718 var lastImage = ''; 719 720 $( 'a[rel*="' + selector + '"], a[data-rel*="' + selector + '"]' ).each( function( i, item ) { 721 var attr = $( item ).attr( 'data-rel' ); 722 723 // check data-rel attribute first 724 if ( typeof attr !== 'undefined' && attr !== false && attr !== 'norl' ) 725 selectors.push( attr ); 726 // if not found then try to check rel attribute for backward compatibility 727 else { 728 attr = $( item ).attr( 'rel' ); 729 730 if ( typeof attr !== 'undefined' && attr !== false && attr !== 'norl' ) 731 selectors.push( attr ); 732 } 733 } ); 734 735 if ( selectors.length > 0 ) { 736 // make unique 737 selectors = _.uniq( selectors ); 738 739 // set defaults 740 $.extend( $.featherlight.defaults, { 741 openSpeed: parseInt( args.openSpeed ), 742 closeSpeed: parseInt( args.closeSpeed ), 743 closeOnClick: args.closeOnClick, 744 closeOnEsc: args.closeOnEsc, 745 afterOpen: function( event ) { 746 lastImage = event.currentTarget.href; 747 748 // trigger image view 749 rl_view_image( script, lastImage ); 750 }, 751 afterClose: function() { 752 // trigger image hide 753 rl_hide_image( script, lastImage ); 754 } 755 } ); 756 757 $( selectors ).each( function( i, item ) { 758 if ( typeof event.pagination_type !== 'undefined' ) { 759 $( 'a[data-rel="' + item + '"], a[rel="' + item + '"]' ).each( function() { 760 $( this ).off( 'click.featherlight' ); 761 } ); 762 } 763 764 // gallery? 765 if ( /-gallery-/.test( item ) ) { 766 $( 'a[data-rel="' + item + '"], a[rel="' + item + '"]' ).featherlightGallery( { 767 galleryFadeIn: parseInt( args.galleryFadeIn ), 768 galleryFadeOut: parseInt( args.galleryFadeOut ), 769 previousIcon: '❮', 770 nextIcon: '❯' 771 } ); 772 // video? 773 } else if ( /-video-/.test( item ) ) { 774 $( 'a[data-rel="' + item + '"], a[rel="' + item + '"]' ).featherlight(); 775 // single image? 776 } else { 777 $( 'a[data-rel="' + item + '"], a[rel="' + item + '"]' ).featherlight(); 778 } 779 } ); 780 } 781 break; 782 783 case 'magnific': 784 var selectors = []; 785 var lastImage = ''; 786 787 $( 'a[rel*="' + selector + '"], a[data-rel*="' + selector + '"]' ).each( function( i, item ) { 788 var attr = $( item ).attr( 'data-rel' ); 789 790 // check data-rel attribute first 791 if ( typeof attr !== 'undefined' && attr !== false && attr !== 'norl' ) 792 selectors.push( attr ); 793 // if not found then try to check rel attribute for backward compatibility 794 else { 795 attr = $( item ).attr( 'rel' ); 796 797 if ( typeof attr !== 'undefined' && attr !== false && attr !== 'norl' ) 798 selectors.push( attr ); 799 } 800 } ); 801 802 if ( selectors.length > 0 ) { 803 // make unique 804 selectors = _.uniq( selectors ); 805 806 $( selectors ).each( function( i, item ) { 807 var subselector = $( 'a[data-rel="' + item + '"], a[rel="' + item + '"]' ); 808 var element = $( subselector[0] ); 809 var media_type = element.data( 'magnific_type' ); 810 var content_type = element.data( 'rl_content' ); 811 812 // check content type first 813 if ( typeof content_type !== 'undefined' ) 814 media_type = content_type; 815 816 // then media type if needed 817 if ( typeof media_type === 'undefined' ) 818 media_type = 'image'; 819 820 var fixedContentPos = 'auto'; 821 var fixedBgPos = 'auto'; 822 823 if ( args.fixedContentPos === 'true' ) 824 fixedContentPos = true; 825 else if ( args.fixedContentPos === 'false' ) 826 fixedContentPos = false; 827 828 if ( args.fixedBgPos === 'true' ) 829 fixedBgPos = true; 830 else if ( args.fixedBgPos === 'false' ) 831 fixedBgPos = false; 832 833 subselector.magnificPopup( { 834 type: media_type === 'gallery' ? 'image' : ( media_type === 'video' ? 'iframe' : media_type ), 835 disableOn: args.disableOn, 836 midClick: args.midClick, 837 preloader: args.preloader, 838 closeOnContentClick: args.closeOnContentClick, 839 closeOnBgClick: args.closeOnBgClick, 840 closeBtnInside: args.closeBtnInside, 841 showCloseBtn: args.showCloseBtn, 842 enableEscapeKey: args.enableEscapeKey, 843 alignTop: args.alignTop, 844 autoFocusLast: args.autoFocusLast, 845 fixedContentPos: fixedContentPos, 846 fixedBgPos: fixedBgPos, 847 image: { 848 titleSrc: function( item ) { 849 var title = item.el.data( 'rl_title' ); 850 var caption = item.el.data( 'rl_caption' ); 851 852 if ( ! title ) 853 title = ''; 854 855 if ( ! caption ) 856 caption = ''; 857 858 return title + '<small>' + caption + '</small>'; 859 } 860 }, 861 gallery: { 862 enabled: subselector.length > 1 && media_type === 'gallery', 863 navigateByImgClick: true, 864 preload: [0,1] 865 }, 866 callbacks: { 867 close: function() { 868 rl_hide_image( script, this.currItem.src ); 869 }, 870 imageLoadComplete: function() { 871 // trigger image view 872 rl_view_image( script, this.currItem.src ); 873 } 874 } 875 } ); 876 } ); 877 } 878 break; 879 } 880 } 881 882} )( 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.