/*******************************************************************************
* Copyright (c) 2017 Genialist Software Ltd.
* All rights reserved.
******************************************************************************/
function pYouTubeMediaPlayer(p_element) {
var that = this, eh = new pEventHandler(), m_enabled = true, m_source, m_element = pElement.x(p_element), m_player, play_requested, iframe_timeout;
this.tracePrefix = 'YouTubeMediaPlayer';
// "id" property
Object.defineProperty(this, "id", { get: function() { return m_element.id; }});
//*** EXPOSE EVENT HANDLER
this.addEventListener = function(eid, f) {
return eh.addEventListener(eid, f);
};
this.removeEventListener = function(eid, f) {
return eh.removeEventListener(eid, f);
};
// "currentTime" property
Object.defineProperty(this, "currentTime", { get: function() {
if (m_player && m_player.getCurrentTime)
return m_player.getCurrentTime() * 1000;
return 0;
}, set: function(p_time) { m_player.seekTo(p_time / 1000, false); }});
this.play = function() {
if (m_player && m_player.playVideo)
m_player.playVideo();
else
play_requested = true;
};
this.pause = function() {
if (m_player && m_player.pauseVideo) m_player.pauseVideo();
};
this.load = function() {
};
this.controls = function() {
return null;//this.m_element.content.findName("mediaPlayer");
};
// "source" property
Object.defineProperty(this, "source", { get: function() { m_source; }, set:
function(p_src) {
if (null==p_src || null==p_src.url) {
m_element.onerror = null;
m_element.onload = null;
clearTimeout(iframe_timeout);
if (m_player && m_player.stopVideo) m_player.stopVideo();
return;
}
m_element.onerror = function(p_event) {
pConsole.error(that, "error");
};
m_element.onload = function(p_event) {
clearTimeout(iframe_timeout);
pConsole.info(that, "load");
};
iframe_timeout = setTimeout(function() { pConsole.error(that, "Video did not load after 10s..."); }, 10000);
resizeYouTubePlayer();
var i_v = pLocation.param(p_src.url, 'v'), u;
if (i_v) {
u = 'https://www.youtube.com/embed/'+i_v + /*((pDevice.isIOS())?*/ '?autoplay=1&playsinline=1&showinfo=0&enablejsapi=1&origin='+location.protocol+'//'+location.host+'&html5=1';
u += '&rel=' + (pPlaylistUtil.OPTION_YOUTUBE_SHOW_RELATED===true? '1':'0');
}
else
u = p_src.url + '?showinfo=0&enablejsapi=1&origin=http://localhost:8089&html5=1';
u += '&modestbranding=1&showinfo=0';
pConsole.info(that, "URL: " + u);
if (!m_player || !m_player.loadVideoByUrl) {
pApplicationUI.errorDialog({ text: 'Failed to load YouTube video...'/*, icon: { src: '/resources/html/images/32x32/picture_error.png' }*/ });
}
else {
m_player.loadVideoByUrl({ mediaContentUrl: u });
eh.fireEvent('source', that);
}
} });
this.canTranscode = function() { return false; }
this.canPlayLocalFiles = function() { return false; };
// "enabled" property
Object.defineProperty(this, "enabled", { get: function() { return m_enabled; }, set: function(v) { if (typeof v == "boolean") m_enabled = v; }});
// "type" property
Object.defineProperty(this, "type", { get: function() { return "video" }});
// "fullscreen" property
//Object.defineProperty(this, "fullscreen", { get: function() { return this.m_element.fullscreen; }, set: function(value) { if (typeof value == "boolean" && value === true) this.m_element.requestFullscreen(); }});
Object.defineProperty(this, "fullscreen", { get: pDocument.isFullScreen, set: function(s) {
if (typeof s == "boolean") {
if (s === false)
pDocument.exitFullScreen();//this.m_element);
else
pDocument.fullScreen(m_element);
}
}});
// "providers" property
Object.defineProperty(this, "providers", { get: function() { return [ "youtube" ]} });
//*** LOAD YOUTUBE iframe API
window.onYouTubeIframeAPIReady = function() {
m_player = new YT.Player(m_element.id, {
playerVars: { showinfo: 0, playsinline: 1 },
events: {
'onReady': onYTPlayerReady,
'onStateChange': onYTPlayerStateChange,
'onError': onYTPlayerError
}
});
};
var tag = document.createElement('script');
tag.id = 'script-youtube';
tag.src = 'https://www.youtube.com/iframe_api';
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
setTimeout(function() {
if (!m_player) {
pConsole.error(that, "Youtube iFrame API did not load after 10s...");
eh.fireEvent("error", that);
}
}, 10000);
function onYTPlayerStateChange(event) {
if (event.data == 0 && !pPlaylistUtil.OPTION_YOUTUBE_SHOW_RELATED)
eh.fireEvent("ended", that);
else if (event.data == 1)
eh.fireEvent("play", that);
else if (event.data == 2)
eh.fireEvent("pause", that);
}
function onYTPlayerError(event) {
eh.fireEvent("error", that);
}
function onYTPlayerReady(event) {
// find iframe that API replaced
m_element = pElement.x(m_element.id);
resizeYouTubePlayer();
if (play_requested === true) {
play_requested = null;
m_player.playVideo();
}
}
this.show = function() {
pDocument.hide('video-controls');
pDocument.show(m_element);
};
this.hide = function() {
pDocument.hide(m_element);
pDocument.show('video-controls');
};
function resizeYouTubePlayer() {
window.resizeVideoImpl(m_element);
}
pDocument.addOnResize(resizeYouTubePlayer);
};
/******************************************************************************/
/******************************************************************************/
/******************************************************************************/
function pVLCPlaylist(p_id) {
var that = this, m_id = p_id;
// "id" property
Object.defineProperty(this, "id", { get: function() { return m_id; }});
// "autoClose" property
this.autoClose = true;
this.m_func_open_before = function() {
pElement.setInnerHTML('vlc-title', ' ');
pElement.setInnerHTML('vlc-fullscreen-title', ' ');
pDocument.showComponent('window-play', 'player-hide');
pDocument.showComponent('div-vlc-header');
pDocument.showComponent('div-vlc-main');
//pDocument.showComponent('div-vlc-footer');
pDocumenti.addOnKeyDown(that.m_playlist.close, pKeys.escape, false, 'vlc.close');
pDocument.stopwait();
if (window.f_resize_play)
window.f_resize_play();
};
this.m_func_ended = function() {
//*** EXIT FULLSCREEN
if (that.m_playlist) {
that.m_playlist.pause();
that.m_playlist.fullscreen = false;
}
//i_vlc_playlist.m_player.m_element.video.fullscreen = false;
if (that.autoClose===true)
that.m_func_hide_video();
//*** RESTORE TITLE
if (pString.v(that.m_playlist.doc_title_old))
document.title = that.m_playlist.doc_title_old;
};
this.m_func_hide_video = function() {
//pDocument.hideComponent('div-vlc-footer');
pDocument.hideComponent('window-play');
//pDocument.hideComponent('div-vlc-main');
//pDocument.hideComponent('div-vlc-header');
pDocumenti.removeOnKeyDown(that.m_playlist.close, pKeys.escape, 'vlc.close');
};
//*** CREATE PLAYLIST
var x_audio = pElement.x('audio_0');
//var x_vlc = pElement.x('video0-vlc');
var x_video = pElement.x('video0-video');
//var x_wmp = pElement.x('video0-wmp');
var x_youtube = pElement.x('video0-youtube');
var i_players = this.m_players = [
(null!=x_audio)? new pMediaPlayer_Audio(x_audio) : null,
//(null!=x_vlc)? new pVLCMediaPlayer(x_vlc) : null,
(null!=x_video)? new pMediaPlayer(x_video) : null,
//(null!=x_wmp)? new pWindowsMediaPlayer(x_wmp) : null,
(null!=x_youtube)? new pYouTubeMediaPlayer(x_youtube) : null
];
//if (i_players[0]) i_players[0].enabled = /*false;*/(this.usevlc === true)? true : false;
//if (i_players[1]) i_players[1].enabled = /*false;*/(this.usevlc === false)? true : false;
//if (i_players[2]) i_players[2].enabled = this.usewmp;
var i_playlist = this.m_playlist = pPlaylistManager.create(p_id, this.m_players, {
previous: new pToggleElement([ 'music-player-previous', 'music-player-previous2', 'music-player-previous3' ]),//{ enabled:"video_0.previous.enabled", disabled:"video_0.previous.disabled" },
next: new pToggleElement([ 'music-player-next', 'music-player-next2', 'music-player-next3' ]),//{ enabled:"video_0.next.enabled", disabled:"video_0.next.disabled" },
play: new pToggleElement([ 'music-player-play', 'music-player-play2' ]),//"video_0.play",
pause: new pToggleElement([ 'music-player-pause', 'music-player-pause2' ])//"video_0.pause"
});
//this.playlist.setVideoPlayer(this);
i_playlist.addEventListener("open-before", this.m_func_open_before);
i_playlist.addEventListener("show-video", this.m_func_open_before);
i_playlist.addEventListener("hide-video", this.m_func_hide_video);
i_playlist.addEventListener("ended", this.m_func_ended);
i_playlist.addEventListener("close-after", this.m_func_ended);
//i_playlist.addEventListener("transcode", function() {});
i_playlist.addEventListener("title", function() {
pElement.setTextContent('vlc-title', that.m_playlist.title);
pElement.setTextContent('vlc-fullscreen-title', that.m_playlist.title);
});
this.m_playlist.scale = function(p_vlc_elem_id) {
//this is the playlist
var i_media = this.medias.getCurrentMedia();
if (null==i_media)
return;
var i_player = this.getPlayer();
if (null==i_player)
return;
if (i_media.width != undefined && i_media.height != undefined) {
var i_rect = i_player.m_element.getBoundingClientRect();
if ((i_media.width > i_rect.right - i_rect.left) || (i_media.height > i_rect.bottom - i_rect.top)) {
i_player.m_element.width = "100%";
i_player.m_element.height = "100%";
}
else {
i_player.m_element.width = i_media.width;
i_player.m_element.height = i_media.height;
}
pDocument.show(this.id+ ".scale.selected", 'inline');
pDocument.hide(this.id+ ".scale");
pDocument.hide(this.id+ ".scaleMax.selected");
pDocument.show(this.id+ ".scaleMax", 'inline');
}
return;
};
this.m_playlist.scaleMax = function(p_vlc_elem_id) {
//this is the playlist
var i_player = this.getPlayer();
if (null==i_player)
return;
i_player.m_element.width = "100%";
i_player.m_element.height = "100%";
pDocument.hide(this.id+ ".scale.selected");
pDocument.show(this.id+ ".scale", 'inline');
pDocument.show(this.id+ ".scaleMax.selected", 'inline');
pDocument.hide(this.id+ ".scaleMax");
};
}
/******************************************************************************/
/*** PAGE INIT **************************************************************/
/******************************************************************************/
var m_vlc = null;
var m_vlc_langs = null;
/******************************************************************************/
/*** END OF PAGE ************************************************************/
/******************************************************************************/