1;(function ($, namespace) { 2 var $players = $('[data-youtube-player]'), 3 Player = { 4 players: [] 5 }; 6 7 Player.init = function () { 8 var tag = document.createElement('script'); 9 tag.src = "https://www.youtube.com/iframe_api"; 10 11 var firstScriptTag = document.getElementsByTagName('script')[0]; 12 firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); 13 14 var stripURL = function (url) { 15 var regExp = /^.*(youtu\.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/; 16 var match = url.match(regExp); 17 if (match && match[2].length === 11) { 18 return match[2]; 19 } else { 20 return url; 21 } 22 }; 23 24 window.onYouTubeIframeAPIReady = function () { 25 $players.each(function (i) { 26 var $wrap = $(this).find('.js-banner-bg'), 27 $player = $('<div/>').attr('id', 'youtubeplayer' + i), 28 videoid = stripURL($(this).data('youtubePlayer')), 29 settings = { 30 videoId: videoid, 31 height: '100%', 32 width: '100%', 33 playerVars: { 34 autoplay: 1, 35 color: 'white', 36 controls: 0, 37 disablekb: 1, 38 fs: 0, 39 iv_load_policy: 3, 40 loop: 1, 41 playlist: videoid, 42 modestbranding: true, 43 playsinline: 1, 44 rel: 0, 45 showinfo: 1 46 }, 47 events: { 48 'onReady': function (e) { 49 Player.onPlayerReady(e, i, $wrap); 50 }, 51 'onStateChange': function (e) { 52 Player.onPlayerStateChange(e, i, $wrap); 53 }, 54 'onError': Player.onPlayerError 55 } 56 }; 57 58 $wrap.prepend($player); 59 60 Player.players[i] = new YT.Player('youtubeplayer' + i, settings); 61 Player.players[i]['done'] = false; 62 }); 63 } 64 }; 65 66 Player.vidRescale = function ($wrap, i) { 67 var $wrap = ($wrap) ? $wrap : $(window), 68 w = $wrap.width(), 69 h = $wrap.height(); 70 71 if (w / h > 16 / 9) { 72 Player.players[i].setSize(w, w / 16 * 9); 73 $wrap.find('iframe').css({ 74 'left': '0px', 75 'maxWidth': 'none' 76 }); 77 } else { 78 Player.players[i].setSize(h / 9 * 16, h); 79 $wrap.find('iframe').css({ 80 'left': -($wrap.find('iframe').outerWidth() - w) / 2, 81 'maxWidth': 'none' 82 }); 83 } 84 }; 85 86 Player.isInViewport = function ($elem) { 87 var elemTop = $elem.offset().top, 88 elemBottom = elemTop + $elem.outerHeight(), 89 viewportTop = $(window).scrollTop(), 90 viewportBottom = viewportTop + $(window).height(); 91 92 return elemBottom > viewportTop && elemTop < viewportBottom; 93 }; 94 95 Player.onPlayerReady = function (e, id, $wrap) { 96 e.target.mute(); 97 e.target.playVideo(); 98 $(window).on('resize', function () { 99 if (Player.isInViewport($wrap)) { 100 Player.vidRescale($wrap, id); 101 } 102 }); 103 }; 104 105 Player.onPlayerStateChange = function (e, id, $wrap) { 106 if (Player.isInViewport($wrap)) { 107 Player.vidRescale($wrap, id); 108 } 109 }; 110 111 Player.onPlayerError = function () { 112 console.log('error video'); 113 }; 114 115 Player.stopVideo = function () { 116 console.log('stop video'); 117 }; 118 119 if (isDesk() && $players.length > 0) { 120 Player.init(); 121 } 122 123 namespace.Player = Player || {}; 124 125})(jQuery, window.neusta = window.neusta || {});
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.