|
1 | 1 | // ================================================== |
2 | | -// fancyBox v3.0.29 |
| 2 | +// fancyBox v3.0.30 |
3 | 3 | // |
4 | 4 | // Licensed GPLv3 for open source use |
5 | 5 | // or fancyBox Commercial License for commercial use |
|
231 | 231 | } |
232 | 232 |
|
233 | 233 | // Save last active element and current scroll position |
234 | | - self.$lastFocus = $(document.activeElement); |
| 234 | + self.$lastFocus = $(document.activeElement).blur(); |
235 | 235 |
|
236 | 236 | // Collection of interface DOM elements |
237 | 237 | self.elems = {}; |
|
526 | 526 | $( window ).on('orientationchange.fb resize.fb', function(e) { |
527 | 527 | requestAFrame(function() { |
528 | 528 |
|
529 | | - if ( e.type == "orientationchange" ) { |
| 529 | + if ( e && e.originalEvent && e.originalEvent.type == "orientationchange" ) { |
530 | 530 | self.$refs.slider_wrap.hide(); |
531 | 531 |
|
532 | 532 | requestAFrame( runUpdate ); |
|
733 | 733 |
|
734 | 734 | // Create slides |
735 | 735 |
|
736 | | - self.createSlide( pos ); |
| 736 | + self.current = self.createSlide( pos ); |
737 | 737 |
|
738 | 738 | if ( self.group.length > 1 ) { |
739 | 739 |
|
|
746 | 746 | } |
747 | 747 | } |
748 | 748 |
|
749 | | - self.current = self.slides[ pos ]; |
750 | | - |
751 | 749 | self.current.isMoved = false; |
752 | 750 | self.current.isComplete = false; |
753 | 751 |
|
|
794 | 792 | var self = this; |
795 | 793 | var $slide; |
796 | 794 | var index; |
| 795 | + var found; |
797 | 796 |
|
798 | 797 | index = pos % self.group.length; |
799 | 798 | index = index < 0 ? self.group.length + index : index; |
800 | 799 |
|
801 | 800 | if ( !self.slides[ pos ] && self.group[ index ] ) { |
| 801 | + |
| 802 | + // If we are looping and slide with that index already exists, then reuse it |
| 803 | + if ( self.opts.loop && self.group.length > 2 ) { |
| 804 | + for (var key in self.slides) { |
| 805 | + if ( self.slides[ key ].index === index ) { |
| 806 | + found = self.slides[ key ]; |
| 807 | + found.pos = pos; |
| 808 | + |
| 809 | + self.slides[ pos ] = found; |
| 810 | + |
| 811 | + delete self.slides[ key ]; |
| 812 | + |
| 813 | + self.updateSlide( found ); |
| 814 | + |
| 815 | + return found; |
| 816 | + } |
| 817 | + } |
| 818 | + } |
| 819 | + |
802 | 820 | $slide = $('<div class="fancybox-slide"></div>').appendTo( self.$refs.slider ); |
803 | 821 |
|
804 | 822 | self.slides[ pos ] = $.extend( true, {}, self.group[ index ], { |
|
810 | 828 |
|
811 | 829 | } |
812 | 830 |
|
| 831 | + return self.slides[ pos ]; |
| 832 | + |
813 | 833 | }, |
814 | 834 |
|
815 | 835 | zoomInOut : function( type, duration, callback ) { |
|
908 | 928 | $.fancybox.setTranslate( $what, end ); |
909 | 929 |
|
910 | 930 | setTimeout(function() { |
911 | | - var reset; |
| 931 | + requestAFrame(function() { |
| 932 | + var reset; |
912 | 933 |
|
913 | | - $what.css( 'transition', 'none' ); |
| 934 | + $what.css( 'transition', 'none' ); |
914 | 935 |
|
915 | | - reset = $.fancybox.getTranslate( $what ); |
| 936 | + reset = $.fancybox.getTranslate( $what ); |
916 | 937 |
|
917 | | - reset.scaleX = 1; |
918 | | - reset.scaleY = 1; |
| 938 | + reset.scaleX = 1; |
| 939 | + reset.scaleY = 1; |
919 | 940 |
|
920 | | - // Reset scalex/scaleY values; this helps for perfomance |
921 | | - $.fancybox.setTranslate( $what, reset ); |
| 941 | + // Reset scalex/scaleY values; this helps for perfomance |
| 942 | + $.fancybox.setTranslate( $what, reset ); |
922 | 943 |
|
923 | | - self.trigger( 'afterZoom' + type ); |
| 944 | + self.trigger( 'afterZoom' + type ); |
924 | 945 |
|
925 | | - callback.apply( self ); |
926 | | - |
927 | | - self.isAnimating = false; |
| 946 | + callback.apply( self ); |
928 | 947 |
|
| 948 | + self.isAnimating = false; |
| 949 | + }); |
929 | 950 | }, duration); |
930 | 951 |
|
931 | 952 | }); |
|
1204 | 1225 |
|
1205 | 1226 | var self = this; |
1206 | 1227 | var $what = slide.$placeholder; |
| 1228 | + var leftPos; |
1207 | 1229 |
|
1208 | 1230 | slide = slide || self.current; |
1209 | 1231 |
|
1210 | 1232 | if ( !slide || self.isClosing ) { |
1211 | 1233 | return; |
1212 | 1234 | } |
1213 | 1235 |
|
1214 | | - $.fancybox.setTranslate( slide.$slide, { top: 0, left : ( slide.pos * Math.floor( slide.$slide.width() ) ) + ( slide.pos * slide.opts.gutter) } ); |
| 1236 | + leftPos = ( slide.pos * Math.floor( slide.$slide.width() ) ) + ( slide.pos * slide.opts.gutter); |
| 1237 | + |
| 1238 | + if ( leftPos !== slide.leftPos ) { |
| 1239 | + $.fancybox.setTranslate( slide.$slide, { top: 0, left : leftPos } ); |
| 1240 | + |
| 1241 | + slide.leftPos = leftPos; |
| 1242 | + } |
1215 | 1243 |
|
1216 | 1244 | if ( andContent !== false && $what ) { |
1217 | 1245 | $.fancybox.setTranslate( $what, self.getFitPos( slide ) ); |
|
1485 | 1513 | // ====================== |
1486 | 1514 |
|
1487 | 1515 | setBigImage : function ( slide ) { |
1488 | | - |
1489 | 1516 | var self = this; |
1490 | 1517 | var $img = $('<img />'); |
1491 | 1518 |
|
|
1544 | 1571 | } |
1545 | 1572 |
|
1546 | 1573 | if ( slide.opts.image.protect ) { |
1547 | | - $('<div class="fancybox-spaceball"></div>').appendTo( slide.$placeholder ); |
| 1574 | + $('<div class="fancybox-spaceball"></div>').appendTo( slide.$placeholder ).on('contextmenu.fb',function(e){ |
| 1575 | + if ( e.button == 2 ) { |
| 1576 | + e.preventDefault(); |
| 1577 | + } |
| 1578 | + |
| 1579 | + return true; |
| 1580 | + }); |
1548 | 1581 | } |
1549 | 1582 |
|
1550 | 1583 | }, |
|
1639 | 1672 | // it will fail if frame is not with the same origin |
1640 | 1673 |
|
1641 | 1674 | try { |
1642 | | - $contents = $iframe.contents(); |
1643 | | - $body = $contents.find('body'); |
| 1675 | + $contents = $iframe.contents(); |
| 1676 | + $body = $contents.find('body'); |
1644 | 1677 |
|
1645 | 1678 | } catch (ignore) {} |
1646 | 1679 |
|
|
1895 | 1928 |
|
1896 | 1929 | self.trigger( 'onComplete' ); |
1897 | 1930 |
|
1898 | | - if ( current.opts.focus ) { |
| 1931 | + // Try to focus on the first focusable element, skip for images and iframes |
| 1932 | + if ( current.opts.focus && ( current.type === 'image' || current.type === 'iframe' ) ) { |
1899 | 1933 | self.focus(); |
1900 | 1934 | } |
1901 | 1935 |
|
|
1934 | 1968 |
|
1935 | 1969 | focus : function() { |
1936 | 1970 |
|
1937 | | - var $el = this.current && this.current.isComplete ? this.current.$slide.find('button,:input,[tabindex],a:not(".disabled")').filter(':visible:first') : null; |
| 1971 | + var current = this.current; |
| 1972 | + var $el; |
| 1973 | + |
| 1974 | + $el = current && current.isComplete ? current.$slide.find('button,:input,[tabindex],a:not(".disabled")').filter(':visible:first') : null; |
1938 | 1975 |
|
1939 | 1976 | if ( !$el || !$el.length ) { |
1940 | 1977 | $el = this.$refs.container; |
|
1947 | 1984 | this.$refs.slider_wrap.scrollLeft(0); |
1948 | 1985 |
|
1949 | 1986 | // And the same goes for slide element |
1950 | | - if ( this.current ) { |
1951 | | - this.current.$slide.scrollTop(0); |
| 1987 | + if ( current ) { |
| 1988 | + current.$slide.scrollTop(0); |
1952 | 1989 | } |
1953 | 1990 | }, |
1954 | 1991 |
|
|
2226 | 2263 |
|
2227 | 2264 | $.fancybox = { |
2228 | 2265 |
|
2229 | | - version : "3.0.29", |
| 2266 | + version : "3.0.30", |
2230 | 2267 | defaults : defaults, |
2231 | 2268 |
|
2232 | 2269 |
|
|
0 commit comments