(function( $ ) {
'use strict';
/**
* Init player.
*/
function initPlayer( $el ) {
// Vars
var playerId = $el.data( 'id' );
var settings = $el.data( 'params' );
// Player
var loadPlayer = function() {
settings.player.html5 = {
vhs: {
overrideNative: ! videojs.browser.IS_ANY_SAFARI,
}
};
var player = videojs( playerId, settings.player );
var overlays = [];
var hasVideoStarted = false;
// Trigger ready event.
var options = {
id: playerId, // Backward compatibility to 3.3.0
player_id: playerId,
config: settings, // Backward compatibility to 3.3.0
settings: settings,
player: player
};
$el.trigger( 'player.init', options );
// Fired when the player is ready.
player.ready(function() {
$el.removeClass( 'vjs-waiting' );
$el.find( '.vjs-big-play-button' ).one( 'click', function() {
if ( ! hasVideoStarted ) {
$el.addClass( 'vjs-waiting' );
}
});
});
// On metadata loaded.
player.one( 'loadedmetadata', function() {
// Standard quality selector.
$el.find( '.vjs-quality-selector .vjs-menu-item' ).each(function() {
var $this = $( this );
var text = $this.find( '.vjs-menu-item-text' ).html();
var resolution = text.replace( /\D/g, '' );
if ( resolution >= 2160 ) {
$this.append( '' );
} else if ( resolution >= 720 ) {
$this.append( '' );
}
});
// Add support for SRT.
if ( settings.hasOwnProperty( 'tracks' ) ) {
for ( var i = 0, max = settings.tracks.length; i < max; i++ ) {
var track = settings.tracks[ i ];
var mode = '';
if ( i == 0 && settings.cc_load_policy == 1 ) {
mode = 'showing';
}
if ( /srt/.test( track.src.toLowerCase() ) ) {
addSrtTextTrack( player, track, mode );
} else {
var obj = {
kind: 'subtitles',
src: track.src,
label: track.label,
srclang: track.srclang
};
if ( mode ) {
obj.mode = mode;
}
player.addRemoteTextTrack( obj, true );
}
}
}
// Chapters
if ( settings.hasOwnProperty( 'chapters' ) ) {
addMarkers( player, settings.chapters );
}
});
// Chapters
if ( settings.hasOwnProperty( 'chapters' ) ) {
try {
player.getDescendant([
'controlBar',
'progressControl',
'seekBar',
'mouseTimeDisplay',
'timeTooltip',
]).update = function( seekBarRect, seekBarPoint, time ) {
var markers = settings.chapters;
var markerIndex = markers.findIndex(({ time: markerTime }) => markerTime == formatedTimeToSeconds( time ));
if ( markerIndex > -1 ) {
var label = markers[ markerIndex ].label;
videojs.dom.emptyEl( this.el() );
videojs.dom.appendContent( this.el(), [labelEl( label ), timeEl( time )] );
return false;
}
this.write( time );
};
} catch ( error ) {
/** console.log( error ); */
}
}
// Fired the first time a video is played.
player.one( 'play', function( e ) {
hasVideoStarted = true;
$el.removeClass( 'vjs-waiting' );
updateViewsCount( settings );
$( '.aiovg-player-standard' ).trigger( 'playRequested', { playerId: playerId } );
});
$el.on( 'playRequested', function( event, args ) {
if ( playerId != args.playerId ) {
player.pause();
}
});
player.on( 'playing', function() {
player.trigger( 'controlsshown' );
});
player.on( 'ended', function() {
player.trigger( 'controlshidden' );
});
// Standard quality selector.
player.on( 'qualitySelected', function( event, source ) {
var resolution = source.label.replace( /\D/g, '' );
player.removeClass( 'vjs-4k' );
player.removeClass( 'vjs-hd' );
if ( resolution >= 2160 ) {
player.addClass( 'vjs-4k' );
} else if ( resolution >= 720 ) {
player.addClass( 'vjs-hd' );
}
});
// HLS quality selector.
var src = player.src();
if ( /.m3u8/.test( src ) || /.mpd/.test( src ) ) {
if ( settings.player.controlBar.children.indexOf( 'qualitySelector' ) !== -1 ) {
player.qualityMenu();
}
}
// Offset
var offset = {};
if ( settings.hasOwnProperty( 'start' ) ) {
offset.start = settings.start;
}
if ( settings.hasOwnProperty( 'end' ) ) {
offset.end = settings.end;
}
if ( Object.keys( offset ).length > 1 ) {
offset.restart_beginning = false;
player.offset( offset );
}
// Share / Embed.
if ( settings.hasOwnProperty( 'share' ) || settings.hasOwnProperty( 'embed' ) ) {
overlays.push({
content: '',
class: 'vjs-share',
align: 'top-right',
start: 'controlsshown',
end: 'controlshidden',
showBackground: false
});
}
// Download
if ( settings.hasOwnProperty( 'download' ) ) {
var className = 'vjs-download';
if ( settings.hasOwnProperty( 'share' ) || settings.hasOwnProperty( 'embed' ) ) {
className += ' vjs-has-share';
}
overlays.push({
content: 'Download',
class: className,
align: 'top-right',
start: 'controlsshown',
end: 'controlshidden',
showBackground: false
});
}
// Logo
if ( settings.hasOwnProperty( 'logo' ) ) {
var attributes = [];
attributes['src'] = settings.logo.image;
if ( settings.logo.margin ) {
settings.logo.margin = settings.logo.margin - 5;
}
var align = 'bottom-left';
attributes['style'] = 'margin: ' + settings.logo.margin + 'px;';
switch ( settings.logo.position ) {
case 'topleft':
align = 'top-left';
attributes['style'] = 'margin: ' + settings.logo.margin + 'px;';
break;
case 'topright':
align = 'top-right';
attributes['style'] = 'margin: ' + settings.logo.margin + 'px;';
break;
case 'bottomright':
align = 'bottom-right';
attributes['style'] = 'margin: ' + settings.logo.margin + 'px;';
break;
}
var logo = '';
if ( settings.logo.link ) {
logo = '' + logo + '';
}
overlays.push({
content: logo,
class: 'vjs-logo',
align: align,
start: 'controlsshown',
end: 'controlshidden',
showBackground: false
});
}
// Overlay
if ( overlays.length > 0 ) {
player.overlay({
content: '',
overlays: overlays
});
if ( settings.hasOwnProperty( 'share' ) || settings.hasOwnProperty( 'embed' ) ) {
var options = {};
options.content = $el.find( '.vjs-share-embed' ).get(0);
options.temporary = false;
var ModalDialog = videojs.getComponent( 'ModalDialog' );
var modal = new ModalDialog( player, options );
modal.addClass( 'vjs-modal-dialog-share-embed' );
player.addChild( modal );
var wasPlaying = true;
$el.find( '.vjs-share-embed-button' ).on( 'click', function() {
wasPlaying = ! player.paused;
modal.open();
});
modal.on( 'modalclose', function() {
if ( wasPlaying ) {
player.play();
}
});
}
if ( settings.hasOwnProperty( 'embed' ) ) {
$el.find( '.vjs-copy-embed-code' ).on( 'focus', function() {
$( this ).select();
document.execCommand( 'copy' );
});
}
}
// Keyboard hotkeys.
if ( settings.hotkeys ) {
player.hotkeys();
}
// Custom contextmenu.
if ( settings.hasOwnProperty( 'contextmenu' ) ) {
if ( ! $( '#aiovg-contextmenu' ).length ) {
$( 'body' ).append( '