1/** 2 * Fancybox wrapper. 3 * 4 * @author Htmlstream 5 * @version 1.0 6 * @requires 7 * 8 */ 9; 10(function ($) { 11 'use strict'; 12 13 $.HSCore.components.HSFancyBox = { 14 /** 15 * 16 * 17 * @var Object _baseConfig 18 */ 19 _baseConfig: { 20 parentEl: 'html', 21 baseClass: 'u-fancybox-theme', 22 slideClass: 'u-fancybox-slide', 23 speed: 1000, 24 slideSpeedCoefficient: 1, 25 infobar: false, 26 fullScreen: true, 27 thumbs: true, 28 closeBtn: true, 29 baseTpl: '<div class="fancybox-container" role="dialog" tabindex="-1">' + 30 '<div class="fancybox-content">' + 31 '<div class="fancybox-bg"></div>' + 32 '<div class="fancybox-controls" style="position: relative; z-index: 99999;">' + 33 '<div class="fancybox-infobar">' + 34 '<div class="fancybox-infobar__body">' + 35 '<span data-fancybox-index></span> / <span data-fancybox-count></span>' + 36 '</div>' + 37 '</div>' + 38 '<div class="fancybox-toolbar">{{BUTTONS}}</div>' + 39 '</div>' + 40 '<div class="fancybox-slider-wrap">' + 41 '<button data-fancybox-prev class="fancybox-arrow fancybox-arrow--left" title="Previous"></button>' + 42 '<button data-fancybox-next class="fancybox-arrow fancybox-arrow--right" title="Next"></button>' + 43 '<div class="fancybox-stage"></div>' + 44 '</div>' + 45 '<div class="fancybox-caption-wrap">' + 46 '<div class="fancybox-caption"></div>' + 47 '</div>' + 48 '</div>' + 49 '</div>', 50 animationEffect: 'fade' 51 }, 52 53 /** 54 * 55 * 56 * @var jQuery pageCollection 57 */ 58 pageCollection: $(), 59 60 /** 61 * Initialization of Fancybox wrapper. 62 * 63 * @param String selector (optional) 64 * @param Object config (optional) 65 * 66 * @return jQuery pageCollection - collection of initialized items. 67 */ 68 69 init: function (selector, config) { 70 if (!selector) return; 71 72 var $collection = $(selector); 73 74 if (!$collection.length) return; 75 76 config = config && $.isPlainObject(config) ? $.extend(true, {}, this._baseConfig, config) : this._baseConfig; 77 78 this.initFancyBox(selector, config); 79 }, 80 81 initFancyBox: function (el, conf) { 82 var $fancybox = $(el); 83 84 $fancybox.on('click', function () { 85 var $this = $(this), 86 animationDuration = $this.data('speed'), 87 isGroup = $this.data('fancybox'), 88 isInfinite = Boolean($this.data('is-infinite')), 89 isSlideShowAutoStart = Boolean($this.data('is-slideshow-auto-start')), 90 slideShowSpeed = $this.data('slideshow-speed'); 91 92 $.fancybox.defaults.animationDuration = animationDuration; 93 94 if (isInfinite === true) { 95 $.fancybox.defaults.loop = true; 96 } 97 98 if (isSlideShowAutoStart === true) { 99 $.fancybox.defaults.slideShow.autoStart = true; 100 } else { 101 $.fancybox.defaults.slideShow.autoStart = false;
102 } 103 104 if (isGroup) { 105 $.fancybox.defaults.transitionEffect = 'slide'; 106 $.fancybox.defaults.slideShow.speed = slideShowSpeed; 107 } 108 }); 109 110 $fancybox.fancybox($.extend(true, {}, conf, { 111 beforeShow: function (instance, slide) { 112 var $fancyModal = $(instance.$refs.container), 113 $fancyOverlay = $(instance.$refs.bg[0]), 114 $fancySlide = $(instance.current.$slide), 115 116 animateIn = instance.current.opts.$orig[0].dataset.animateIn, 117 animateOut = instance.current.opts.$orig[0].dataset.animateOut, 118 speed = instance.current.opts.$orig[0].dataset.speed, 119 overlayBG = instance.current.opts.$orig[0].dataset.overlayBg, 120 overlayBlurBG = instance.current.opts.$orig[0].dataset.overlayBlurBg; 121 122 if (animateIn && $('body').hasClass('u-first-slide-init')) { 123 var $fancyPrevSlide = $(instance.slides[instance.prevPos].$slide); 124 125 $fancySlide.addClass('has-animation'); 126 127 $fancyPrevSlide.addClass('animated ' + animateOut); 128 129 setTimeout(function () { 130 $fancySlide.addClass('animated ' + animateIn); 131 }, speed / 2); 132 } else if (animateIn) { 133 var $fancyPrevSlide = $(instance.slides[instance.prevPos].$slide); 134 135 $fancySlide.addClass('has-animation'); 136 137 $fancySlide.addClass('animated ' + animateIn); 138 139 $('body').addClass('u-first-slide-init'); 140 141 $fancySlide.on('animationend webkitAnimationEnd oAnimationEnd MSAnimationEnd', function (e) { 142 $fancySlide.removeClass(animateIn); 143 }); 144 } 145 146 if (speed) { 147 $fancyOverlay.css('transition-duration', speed + 'ms'); 148 } else { 149 $fancyOverlay.css('transition-duration', '1000ms'); 150 } 151 152 if (overlayBG) { 153 $fancyOverlay.css('background-color', overlayBG); 154 } 155 156 if (overlayBlurBG) { 157 $('body').addClass('u-blur-30'); 158 } 159 }, 160 161 beforeClose: function (instance, slide) { 162 var $fancyModal = $(instance.$refs.container), 163 $fancySlide = $(instance.current.$slide), 164 165 animateIn = instance.current.opts.$orig[0].dataset.animateIn, 166 animateOut = instance.current.opts.$orig[0].dataset.animateOut, 167 overlayBlurBG = instance.current.opts.$orig[0].dataset.overlayBlurBg; 168 169 if (animateOut) { 170 $fancySlide.removeClass(animateIn).addClass(animateOut); 171 $('body').removeClass('u-first-slide-init') 172 } 173 174 if (overlayBlurBG) { 175 $('body').removeClass('u-blur-30') 176 } 177 } 178 })); 179 } 180 } 181})(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.