/*!
* lazyYT (lazy load YouTube videos)
* v1.0.1 - 2014-12-30
* (CC) This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
* http://creativecommons.org/licenses/by-sa/4.0/
* Contributors: https://github.com/tylerpearson/lazyYT/graphs/contributors || https://github.com/daugilas/lazyYT/graphs/contributors
*
* Usage:
loading...
*
* Note: Discourse has forked this from the original, beware when updating the file.
*
*/
(function ($) {
'use strict';
function setUp($el, settings) {
var width = $el.data('width'),
height = $el.data('height'),
ratio = ($el.data('ratio')) ? $el.data('ratio') : settings.default_ratio,
id = $el.data('youtube-id'),
title = $el.data('youtube-title'),
padding_bottom,
innerHtml = [],
$thumb,
thumb_img,
youtube_parameters = $el.data('parameters') || '';
ratio = ratio.split(":");
// width and height might override default_ratio value
if (typeof width === 'number' && typeof height === 'number') {
$el.width(width);
padding_bottom = height + 'px';
} else if (typeof width === 'number') {
$el.width(width);
padding_bottom = (width * ratio[1] / ratio[0]) + 'px';
} else {
width = $el.width();
// no width means that container is fluid and will be the size of its parent
if (width === 0) {
width = $el.parent().width();
}
padding_bottom = (ratio[1] / ratio[0] * 100) + '%';
}
//
// This HTML will be placed inside 'lazyYT' container
innerHtml.push('');
// Play button from YouTube (exactly as it is in YouTube)
innerHtml.push('
'); // end of .ytp-large-play-button
innerHtml.push('
'); // end of .ytp-thumbnail
// Video title (info bar)
innerHtml.push('');
innerHtml.push('
');
innerHtml.push('
'); // .html5-title
innerHtml.push('
'); // .html5-title-text-wrapper
innerHtml.push('
'); // end of Video title .html5-info-bar
$el.css({
'padding-bottom': padding_bottom
})
.html(innerHtml.join(''));
if (width > 640) {
thumb_img = 'maxresdefault.jpg';
} else if (width > 480) {
thumb_img = 'sddefault.jpg';
} else if (width > 320) {
thumb_img = 'hqdefault.jpg';
} else if (width > 120) {
thumb_img = 'mqdefault.jpg';
} else if (width === 0) { // sometimes it fails on fluid layout
thumb_img = 'hqdefault.jpg';
} else {
thumb_img = 'default.jpg';
}
$thumb = $el.find('.ytp-thumbnail').css({
'background-image': `url(http://img.youtube.com/vi/${id}/${thumb_img})`
})
.addClass('lazyYT-image-loaded')
.on('click', function (e) {
e.preventDefault();
if (!$el.hasClass('lazyYT-video-loaded') && $thumb.hasClass('lazyYT-image-loaded')) {
$el.html('')
.addClass('lazyYT-video-loaded');
}
if (settings.onPlay) {
settings.onPlay(e, $el);
}
});
}
$.fn.lazyYT = function (newSettings) {
var defaultSettings = {
default_ratio: '16:9',
callback: null, // ToDO execute callback if given
container_class: 'lazyYT-container'
};
var settings = $.extend(defaultSettings, newSettings);
return this.each(function () {
var $el = $(this).addClass(settings.container_class);
setUp($el, settings);
});
};
})(jQuery);