1/*! UIkit 2.26.1 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ 2(function(addon) { 3 4 var component; 5 6 if (window.UIkit) { 7 component = addon(UIkit); 8 } 9 10 if (typeof define == "function" && define.amd) { 11 define("uikit-slideshow", ["uikit"], function() { 12 return component || addon(UIkit); 13 }); 14 } 15 16})(function(UI) { 17 18 "use strict"; 19 20 var Animations, playerId = 0; 21 22 UI.component('slideshow', { 23 24 defaults: { 25 animation : "fade", 26 duration : 500, 27 height : "auto", 28 start : 0, 29 autoplay : false, 30 autoplayInterval : 7000, 31 videoautoplay : true, 32 videomute : true, 33 slices : 15, 34 pauseOnHover : true, 35 kenburns : false, 36 kenburnsanimations : [ 37 'uk-animation-middle-left', 38 'uk-animation-top-right', 39 'uk-animation-bottom-left', 40 'uk-animation-top-center', 41 '', // middle-center 42 'uk-animation-bottom-right' 43 ] 44 }, 45 46 current : false, 47 interval : null, 48 hovering : false, 49 50 boot: function() { 51 52 // init code 53 UI.ready(function(context) { 54 55 UI.$('[data-uk-slideshow]', context).each(function() { 56 57 var slideshow = UI.$(this); 58 59 if (!slideshow.data("slideshow")) { 60 UI.slideshow(slideshow, UI.Utils.options(slideshow.attr("data-uk-slideshow"))); 61 } 62 }); 63 }); 64 }, 65 66 init: function() { 67 68 var $this = this, canvas, kbanimduration; 69 70 this.container = this.element.hasClass('uk-slideshow') ? this.element : UI.$(this.find('.uk-slideshow')); 71 this.slides = this.container.children(); 72 this.slidesCount = this.slides.length; 73 this.current = this.options.start; 74 this.animating = false; 75 this.triggers = this.find('[data-uk-slideshow-item]'); 76 this.fixFullscreen = navigator.userAgent.match(/(iPad|iPhone|iPod)/g) && this.container.hasClass('uk-slideshow-fullscreen'); // viewport unit fix for height:100vh - should be fixed in iOS 8 77 78 if (this.options.kenburns) { 79 80 kbanimduration = this.options.kenburns === true ? '15s': this.options.kenburns; 81 82 if (!String(kbanimduration).match(/(ms|s)$/)) { 83 kbanimduration += 'ms'; 84 } 85 86 if (typeof(this.options.kenburnsanimations) == 'string') { 87 this.options.kenburnsanimations = this.options.kenburnsanimations.split(','); 88 } 89 } 90 91 this.slides.each(function(index) { 92 93 var slide = UI.$(this), 94 media = slide.children('img,video,iframe').eq(0); 95 96 slide.data('media', media); 97 slide.data('sizer', media); 98 99 if (media.length) { 100 101 var placeholder; 102 103 switch(media[0].nodeName) { 104 case 'IMG': 105 106 var cover = UI.$('<div class="uk-cover-background uk-position-cover"></div>').css({'background-image':'url('+ media.attr('src') + ')'}); 107 108 if (media.attr('width') && media.attr('height')) { 109 placeholder = UI.$('<canvas></canvas>').attr({width:media.attr('width'), height:media.attr('height')}); 110 media.replaceWith(placeholder); 111 media = placeholder; 112 placeholder = undefined; 113 } 114 115 media.css({width: '100%',height: 'auto', opacity:0}); 116 slide.prepend(cover).data('cover', cover); 117 break; 118 119 case 'IFRAME': 120 121 var src = media[0].src, iframeId = 'sw-'+(++playerId); 122 123 media 124 .attr('src', '').on('load', function(){ 125 126 if (index !== $this.current || (index == $this.current && !$this.options.videoautoplay)) { 127 $this.pausemedia(media); 128 } 129 130 if ($this.options.videomute) { 131 132 $this.mutemedia(media); 133 134 var inv = setInterval((function(ic) { 135 return function() { 136 $this.mutemedia(media); 137 if (++ic >= 4) clearInterval(inv); 138 } 139 })(0), 250); 140 } 141 142 }) 143 .data('slideshow', $this) // add self-reference for the vimeo-ready listener 144 .attr('data-player-id', iframeId) // add frameId for the vimeo-ready listener 145 .attr('src', [src, (src.indexOf('?') > -1 ? '&':'?'), 'enablejsapi=1&api=1&player_id='+iframeId].join('')) 146 .addClass('uk-position-absolute'); 147 148 // disable pointer events 149 if(!UI.support.touch) media.css('pointer-events', 'n
149one'); 150 151 placeholder = true; 152 153 if (UI.cover) { 154 UI.cover(media); 155 media.attr('data-uk-cover', '{}'); 156 } 157 158 break; 159 160 case 'VIDEO': 161 media.addClass('uk-cover-object uk-position-absolute'); 162 placeholder = true; 163 164 if ($this.options.videomute) $this.mutemedia(media); 165 } 166 167 if (placeholder) { 168 169 canvas = UI.$('<canvas></canvas>').attr({'width': media[0].width, 'height': media[0].height}); 170 var img = UI.$('<img style="width:100%;height:auto;">').attr('src', canvas[0].toDataURL()); 171 172 slide.prepend(img); 173 slide.data('sizer', img); 174 } 175 176 } else { 177 slide.data('sizer', slide); 178 } 179 180 if ($this.hasKenBurns(slide)) { 181 182 slide.data('cover').css({ 183 '-webkit-animation-duration': kbanimduration, 184 'animation-duration': kbanimduration 185 }); 186 } 187 }); 188 189 this.on("click.uk.slideshow", '[data-uk-slideshow-item]', function(e) { 190 191 e.preventDefault(); 192 193 var slide = UI.$(this).attr('data-uk-slideshow-item'); 194 195 if ($this.current == slide) return; 196 197 switch(slide) { 198 case 'next': 199 case 'previous': 200 $this[slide=='next' ? 'next':'previous'](); 201 break; 202 default: 203 $this.show(parseInt(slide, 10)); 204 } 205 206 $this.stop(); 207 }); 208 209 // Set start slide 210 this.slides.attr('aria-hidden', 'true').eq(this.current).addClass('uk-active').attr('aria-hidden', 'false'); 211 this.triggers.filter('[data-uk-slideshow-item="'+this.current+'"]').addClass('uk-active'); 212 213 UI.$win.on("resize load", UI.Utils.debounce(function() { 214 $this.resize(); 215 216 if ($this.fixFullscreen) { 217 $this.container.css('height', window.innerHeight); 218 $this.slides.css('height', window.innerHeight); 219 } 220 }, 100)); 221 222 // chrome image load fix 223 setTimeout(function(){ 224 $this.resize(); 225 }, 80); 226 227 // Set autoplay 228 if (this.options.autoplay) { 229 this.start(); 230 } 231 232 if (this.options.videoautoplay && this.slides.eq(this.current).data('media')) { 233 this.playmedia(this.slides.eq(this.current).data('media')); 234 } 235 236 if (this.options.kenburns) { 237 this.applyKenBurns(this.slides.eq(this.current)); 238 } 239 240 this.container.on({ 241 mouseenter: function() { if ($this.options.pauseOnHover) $this.hovering = true; }, 242 mouseleave: function() { $this.hovering = false; } 243 }); 244 245 this.on('swipeRight swipeLeft', function(e) { 246 $this[e.type=='swipeLeft' ? 'next' : 'previous'](); 247 }); 248 249 this.on('display.uk.check', function(){ 250 if ($this.element.is(":visible")) { 251 252 $this.resize(); 253 254 if ($this.fixFullscreen) { 255 $this.container.css('height', window.innerHeight); 256 $this.slides.css('height', window.innerHeight); 257 } 258 } 259 }); 260 }, 261 262 263 resize: function() { 264 265 if (this.container.hasClass('uk-slideshow-fullscreen')) return; 266 267 var height = this.options.height; 268 269 if (this.options.height === 'auto') { 270 271 height = 0; 272 273 this.slides.css('height', '').each(function() { 274 height = Math.max(height, UI.$(this).height()); 275 }); 276 } 277 278 this.container.css('height', height); 279 this.slides.css('height', height); 280 }, 281 282 show: function(index, direction) { 283 284 if (this.animating || this.current == index) return; 285 286 this.animating = true; 287 288 var $this = this, 289 current = this.slides.eq(this.current), 290 next = this.slides.eq(index), 291 dir = direction ? direction : this.current < index ? 1 : -1, 292 currentmedia = current.data('media'), 293 animation = Animations[this.options.animation] ? this.options.animation : 'fade', 294 nextmedia = next.data('media'), 295 finalize = function() { 296 297 if (!$this.animating) return; 298 299 if (currentmedia && currentmedia.is('video,iframe')) { 300 $this.pausemedia(currentmedia); 301 } 302 303 if (nextmedia && nextmedia.is('video,iframe')) { 304 $this.playmedia(nextmedia); 305 } 306 307 next.addClass("uk-active").attr('aria-hidden', 'false'); 308 current.removeClass("uk-active").attr('aria-hidden', 'true'); 309 310 $this.animating = false;
311 $this.current = index; 312 313 UI.Utils.checkDisplay(next, '[class*="uk-animation-"]:not(.uk-cover-background.uk-position-cover)'); 314 315 $this.trigger('show.uk.slideshow', [next, current, $this]); 316 }; 317 318 $this.applyKenBurns(next); 319 320 // animation fallback 321 if (!UI.support.animation) { 322 animation = 'none'; 323 } 324 325 current = UI.$(current); 326 next = UI.$(next); 327 328 $this.trigger('beforeshow.uk.slideshow', [next, current, $this]); 329 330 Animations[animation].apply(this, [current, next, dir]).then(finalize); 331 332 $this.triggers.removeClass('uk-active'); 333 $this.triggers.filter('[data-uk-slideshow-item="'+index+'"]').addClass('uk-active'); 334 }, 335 336 applyKenBurns: function(slide) { 337 338 if (!this.hasKenBurns(slide)) { 339 return; 340 } 341 342 var animations = this.options.kenburnsanimations, 343 index = this.kbindex || 0; 344 345 346 slide.data('cover').attr('class', 'uk-cover-background uk-position-cover').width(); 347 slide.data('cover').addClass(['uk-animation-scale', 'uk-animation-reverse', animations[index].trim()].join(' ')); 348 349 this.kbindex = animations[index + 1] ? (index+1):0; 350 }, 351 352 hasKenBurns: function(slide) { 353 return (this.options.kenburns && slide.data('cover')); 354 }, 355 356 next: function() { 357 this.show(this.slides[this.current + 1] ? (this.current + 1) : 0, 1); 358 }, 359 360 previous: function() { 361 this.show(this.slides[this.current - 1] ? (this.current - 1) : (this.slides.length - 1), -1); 362 }, 363 364 start: function() { 365 366 this.stop(); 367 368 var $this = this; 369 370 this.interval = setInterval(function() { 371 if (!$this.hovering) $this.next(); 372 }, this.options.autoplayInterval); 373 374 }, 375 376 stop: function() { 377 if (this.interval) clearInterval(this.interval); 378 }, 379 380 playmedia: function(media) { 381 382 if (!(media && media[0])) return; 383 384 switch(media[0].nodeName) { 385 case 'VIDEO': 386 387 if (!this.options.videomute) { 388 media[0].muted = false; 389 } 390 391 media[0].play(); 392 break; 393 case 'IFRAME': 394 395 if (!this.options.videomute) { 396 media[0].contentWindow.postMessage('{ "event": "command", "func": "unmute", "method":"setVolume", "value":1}', '*'); 397 } 398 399 media[0].contentWindow.postMessage('{ "event": "command", "func": "playVideo", "method":"play"}', '*'); 400 break; 401 } 402 }, 403 404 pausemedia: function(media) { 405 406 switch(media[0].nodeName) { 407 case 'VIDEO': 408 media[0].pause(); 409 break; 410 case 'IFRAME': 411 media[0].contentWindow.postMessage('{ "event": "command", "func": "pauseVideo", "method":"pause"}', '*'); 412 break; 413 } 414 }, 415 416 mutemedia: function(media) { 417 418 switch(media[0].nodeName) { 419 case 'VIDEO': 420 media[0].muted = true; 421 break; 422 case 'IFRAME': 423 media[0].contentWindow.postMessage('{ "event": "command", "func": "mute", "method":"setVolume", "value":0}', '*'); 424 break; 425 } 426 } 427 }); 428 429 Animations = { 430 431 'none': function() { 432 433 var d = UI.$.Deferred(); 434 d.resolve(); 435 return d.promise(); 436 }, 437 438 'scroll': function(current, next, dir) { 439 440 var d = UI.$.Deferred(); 441 442 current.css('animation-duration', this.options.duration+'ms'); 443 next.css('animation-duration', this.options.duration+'ms'); 444 445 next.css('opacity', 1).one(UI.support.animation.end, function() { 446 447 current.removeClass(dir == -1 ? 'uk-slideshow-scroll-backward-out' : 'uk-slideshow-scroll-forward-out'); 448 next.css('opacity', '').removeClass(dir == -1 ? 'uk-slideshow-scroll-backward-in' : 'uk-slideshow-scroll-forward-in'); 449 d.resolve(); 450 451 }.bind(this)); 452 453 current.addClass(dir == -1 ? 'uk-slideshow-scroll-backward-out' : 'uk-slideshow-scroll-forward-out'); 454 next.addClass(dir == -1 ? 'uk-slideshow-scroll-backward-in' : 'uk-slideshow-scroll-forward-in'); 455 next.width(); // force redraw 456 457 return d.promise(); 458 }, 459 460 'swipe': function(current, next, dir) { 461 462 var d = UI.$.Deferred(); 463 464 current.css('animation-duration', this.options.duration+'ms'); 465 next.css('animation-duration', this.options.duration+'ms'); 466 467 next.css('opacity', 1).one(UI.support.animation.end, function() { 468 469 current.removeClass(dir === -1 ? 'uk-slideshow-swipe-backward-out' : 'uk-slideshow-swipe-forward-out'); 470 next.css('opacity', '').removeClass(dir === -1 ? 'uk-slideshow-swipe-backward-in' : 'uk-slideshow-swipe-forward-in'); 471 d.resolve(); 472 473 }.bind(this)); 474 475 current.addClass(dir == -1 ? 'uk-slideshow-swipe-backward-out' : 'uk-slideshow-swipe-forward-out'); 476 next.addClass(dir == -1 ? 'uk-slideshow-swipe-backward-in' : 'uk-slideshow-swipe-forward-in'); 477 next.width(); // force redraw 478 479 return d.promise(); 480 }, 481 482 'scale': function(current, next, dir) { 483 484 var d = UI.$.Deferred(); 485 486 current.css('animation-duration', this.options.duration+'ms'); 487 next.css('animation-duration', this.options.duration+'ms'); 488 489 next.css('opacity', 1); 490 491 current.one(UI.support.animation.end, function() { 492 493 current.removeClass('uk-slideshow-scale-out'); 494 next.css('opacity', ''); 495 d.resolve(); 496 497 }.bind(this)); 498 499 current.addClass('uk-slideshow-scale-out'); 500 current.width(); // force redraw 501 502 return d.promise(); 503 }, 504 505 'fade': function(current, next, dir) { 506 507 var d = UI.$.Deferred(); 508 509 current.css('animation-duration', this.options.duration+'ms'); 510 next.css('animation-duration', this.options.duration+'ms'); 511 512 next.css('opacity', 1); 513 514 // for plain text content slides - looks smoother 515 if (!(next.data('cover') || next.data('placeholder'))) { 516 517 next.css('opacity', 1).one(UI.support.animation.end, function() { 518 next.removeClass('uk-slideshow-fade-in'); 519 }).addClass('uk-slideshow-fade-in'); 520 } 521 522 current.one(UI.support.animation.end, function() { 523 524 current.removeClass('uk-slideshow-fade-out'); 525 next.css('opacity', ''); 526 d.resolve(); 527 528 }.bind(this)); 529 530 current.addClass('uk-slideshow-fade-out'); 531 current.width(); // force redraw 532 533 return d.promise(); 534 } 535 }; 536 537 UI.slideshow.animations = Animations; 538 539 // Listen for messages from the vimeo player 540 window.addEventListener('message', function onMessageReceived(e) { 541 542 var data = e.data, iframe; 543 544 if (typeof(data) == 'string') { 545 546 try { 547 data = JSON.parse(data); 548 } catch(err) { 549 data = {}; 550 } 551 } 552 553 if (e.origin && e.origin.indexOf('vimeo') > -1 && data.event == 'ready' && data.player_id) { 554 iframe = UI.$('[data-player-id="'+ data.player_id+'"]'); 555 556 if (iframe.length) { 557 iframe.data('slideshow').mutemedia(iframe); 558 } 559 } 560 }, false); 561 562});
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.