/**
* Simple Poster Plugin for jme
* @author Matt Dertinger
* @version 1.0.0
*
* http://protofunc.com/jme
* http://github.com/aFarkas/jMediaelement
*
* @description
*
* HTML:
*
*
*
* OR
*
*
*

* ...
*
*
* API:
*
* $('video, audio').setPosterAttribute()
*
* $('video, audio').enablePoster(index|object)
*
* $('video, audio').disablePoster(index|object)
*
* Config:
*
* Documentation:
*
*/
(function($){
//enable posters
$(document).bind('jmeEmbed', function(e, data){
data = data.data;
var mm = $(e.target);
mm.setPosterAttribute();
if ($.attr(e.target, 'poster')) {
data.posterDisplay = $('
', {
src : $.attr(e.target, 'poster'),
"class": "poster-display inactive-poster-display",
alt : ""
}).insertAfter(e.target);
if( data.posterDisplay ){
mm.enablePoster(data.posterDisplay, data);
}
//add fullwindow support
if(data.posterDisplay.videoOverlay && mm.is('video')){
data.posterDisplay
.videoOverlay({
fullscreenClass: 'poster-in-fullscreen',
video: mm,
startCSS: {
width: 'auto',
zIndex: 99999
},
position: {
bottom: 0,
left: 0,
right: 0
}
})
;
}
mm
.bind('play', function(){
mm.disablePoster(data.posterDisplay, data);
})
.bind('ended', function(){
mm.enablePoster(data.posterDisplay, data);
//worarkound:
mm.pause();
})
;
}
});
/*
* extend jme api
*/
$.multimediaSupport.fn._extend({
positionPoster: function(object, _data){
object = (isFinite(object)) ? posters.filter(':eq('+ object +')') : $(object);
if( !_data ){
_data = $.data(this.element, 'mediaElemSupport');
}
// Only if the poster is visible
if (!_data.posterDisplay || _data.posterDisplay.is(":hidden")) { return; }
_data.posterDisplay.height($(this.element).height() + "px"); // Need incase controlsBelow
_data.posterDisplay.width($(this.element).width() + "px"); // Could probably do 100% of box
},
disablePoster: function(object, _data){
object = (isFinite(object)) ? posters.filter(':eq('+ object +')') : $(object);
if( !_data ){
_data = $.data(this.element, 'mediaElemSupport');
}
object.removeAttr('data-enabled');
_data.posterDisplay.addClass('inactive-poster-display').fadeOut('slow');
},
enablePoster: function(object, _data){
var posters = $('img.poster-display', this.element),
that = this,
mm = $(this.element),
posterData,
found
;
if( !_data ){
_data = mm.data('mediaElemSupport');
}
object = (isFinite(object)) ? posters.filter(':eq('+ object +')') : $(object);
posters
.filter('[data-enabled]')
.each(function(){
if(this !== object[0]){
that.disablePoster(this, _data);
}
})
;
if (!object[0]) { return; }
posterData = $.data(object[0], 'jmePoster') || $.data(object[0], 'jmePoster', {load: false});
posterData.posterDisplay = _data.posterDisplay;
posterData.posterDisplay.removeClass('inactive-poster-display').fadeIn("slow");
// We may not need this. But if we do, we should make it respect config.
/* if (this.options.fit) {
that.positionPoster(this, _data);
} */
object.attr('data-enabled', 'enabled');
},
setPosterAttribute: function() {
if (!$.attr(this.element, 'poster')) {
var image = $('img.photo[data-enabled]', this.element).first();
if (image) { $.attr(this.element, 'poster', image.attr('src')); }
}
}
}, true);
})(jQuery);