API improvements
This commit is contained in:
153
src/js/plyr.js
153
src/js/plyr.js
@ -1,6 +1,6 @@
|
||||
// ==========================================================================
|
||||
// Plyr
|
||||
// plyr.js v1.0.27
|
||||
// plyr.js v1.0.28
|
||||
// https://github.com/selz/plyr
|
||||
// License: The MIT License (MIT)
|
||||
// ==========================================================================
|
||||
@ -219,7 +219,7 @@
|
||||
// Check for mime type support against a player instance
|
||||
// Credits: http://diveintohtml5.info/everything.html
|
||||
// Related: http://www.leanbackplayer.com/test/h5mt.html
|
||||
function _support(player, mimeType) {
|
||||
function _supportMime(player, mimeType) {
|
||||
var media = player.media;
|
||||
|
||||
// Only check video types for video players
|
||||
@ -496,7 +496,7 @@
|
||||
// Seek the manual caption time and update UI
|
||||
function _seekManualCaptions(time) {
|
||||
// If it's not video, or we're using textTracks, bail.
|
||||
if (player.usingTextTracks || player.type !== "video") {
|
||||
if (player.usingTextTracks || player.type !== "video" || !player.supported.full) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -681,8 +681,6 @@
|
||||
|
||||
// Setup media
|
||||
function _setupMedia() {
|
||||
player.media = player.container.querySelectorAll("audio, video")[0];
|
||||
|
||||
// If there's no media, bail
|
||||
if(!player.media) {
|
||||
_log("No audio or video element found!", true);
|
||||
@ -690,10 +688,9 @@
|
||||
}
|
||||
|
||||
// Remove native video controls
|
||||
player.media.removeAttribute("controls");
|
||||
|
||||
// Set media type
|
||||
player.type = player.media.tagName.toLowerCase();
|
||||
if(player.supported.full) {
|
||||
player.media.removeAttribute("controls");
|
||||
}
|
||||
|
||||
// Add type class
|
||||
_toggleClass(player.container, config.classes[player.type], true);
|
||||
@ -707,7 +704,7 @@
|
||||
}
|
||||
|
||||
// Inject the player wrapper
|
||||
if(player.type === "video") {
|
||||
if(player.type === "video" && player.supported.full) {
|
||||
// Create the wrapper div
|
||||
var wrapper = document.createElement("div");
|
||||
wrapper.setAttribute("class", config.classes.videoWrapper);
|
||||
@ -1027,8 +1024,15 @@
|
||||
volume = 10;
|
||||
}
|
||||
|
||||
player.volume.value = volume;
|
||||
// If the controls are there
|
||||
if(player.supported.full) {
|
||||
player.volume.value = volume;
|
||||
}
|
||||
|
||||
// Set the player volume
|
||||
player.media.volume = parseFloat(volume / 10);
|
||||
|
||||
// Update the UI
|
||||
_checkMute();
|
||||
|
||||
// Store the volume in storage
|
||||
@ -1040,24 +1044,35 @@
|
||||
// Mute
|
||||
function _toggleMute(muted) {
|
||||
// If the method is called without parameter, toggle based on current value
|
||||
if(typeof active === "undefined") {
|
||||
if(typeof muted === "undefined") {
|
||||
muted = !player.media.muted;
|
||||
}
|
||||
|
||||
// If the controls are there
|
||||
if(player.supported.full) {
|
||||
player.buttons.mute.checked = muted;
|
||||
}
|
||||
|
||||
// Set mute on the player
|
||||
player.media.muted = muted;
|
||||
|
||||
// Update UI
|
||||
_checkMute();
|
||||
}
|
||||
|
||||
// Toggle captions
|
||||
function _toggleCaptions(active) {
|
||||
// If the method is called without parameter, toggle based on current value
|
||||
if(typeof active === "undefined") {
|
||||
active = (player.container.className.indexOf(config.classes.captions.active) === -1);
|
||||
player.buttons.captions.checked = active;
|
||||
function _toggleCaptions(show) {
|
||||
if(!player.supported.plyr) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (active) {
|
||||
// If the method is called without parameter, toggle based on current value
|
||||
if(typeof active === "undefined") {
|
||||
show = (player.container.className.indexOf(config.classes.captions.active) === -1);
|
||||
player.buttons.captions.checked = show;
|
||||
}
|
||||
|
||||
if (show) {
|
||||
_toggleClass(player.container, config.classes.captions.active, true);
|
||||
}
|
||||
else {
|
||||
@ -1214,7 +1229,9 @@
|
||||
}
|
||||
|
||||
// Reset time display
|
||||
_timeUpdate();
|
||||
if(player.supported.full) {
|
||||
_timeUpdate();
|
||||
}
|
||||
|
||||
// Re-load sources
|
||||
player.media.load();
|
||||
@ -1270,7 +1287,9 @@
|
||||
_on(player.buttons.fullscreen, "click", _toggleFullscreen);
|
||||
|
||||
// Handle user exiting fullscreen by escaping etc
|
||||
_on(document, fullscreen.fullScreenEventName, _toggleFullscreen);
|
||||
if(fullscreen.supportsFullScreen) {
|
||||
_on(document, fullscreen.fullScreenEventName, _toggleFullscreen);
|
||||
}
|
||||
|
||||
// Time change on media
|
||||
_on(player.media, "timeupdate seeking", _timeUpdate);
|
||||
@ -1336,48 +1355,63 @@
|
||||
// Setup the fullscreen api
|
||||
fullscreen = _fullscreen();
|
||||
|
||||
// Sniff
|
||||
// Sniff out the browser
|
||||
player.browser = _browserSniff();
|
||||
|
||||
// Check for full support
|
||||
player.supported = api.supported();
|
||||
|
||||
// If no native support, bail
|
||||
if(!player.supported.basic) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Get the media element
|
||||
player.media = player.container.querySelectorAll("audio, video")[0];
|
||||
|
||||
// Set media type
|
||||
player.type = player.media.tagName.toLowerCase();
|
||||
|
||||
// If iPhone/iPod and video, customisation support is limited
|
||||
if(/iPhone|iPod/i.test(navigator.userAgent) && player.type === "video") {
|
||||
player.supported.full = false;
|
||||
}
|
||||
|
||||
// Debug info
|
||||
_log(player.browser.name + " " + player.browser.version);
|
||||
|
||||
// If IE8, stop customization (use fallback)
|
||||
// If IE9, stop customization (use native controls)
|
||||
if (player.browser.name === "IE" && (player.browser.version === 8 || player.browser.version === 9) ) {
|
||||
_log("Browser not suppported.", true);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Setup media
|
||||
_setupMedia();
|
||||
|
||||
// Generate random number for id/for attribute values for controls
|
||||
player.random = Math.floor(Math.random() * (10000));
|
||||
|
||||
// Inject custom controls
|
||||
_injectControls();
|
||||
// If there's full support
|
||||
if(player.supported.full) {
|
||||
// Inject custom controls
|
||||
_injectControls();
|
||||
|
||||
// Find the elements
|
||||
if(!_findElements()) {
|
||||
return false;
|
||||
// Find the elements
|
||||
if(!_findElements()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Set up aria-label for Play button with the title option
|
||||
_setupAria();
|
||||
|
||||
// Captions
|
||||
_setupCaptions();
|
||||
|
||||
// Set volume
|
||||
_setVolume();
|
||||
|
||||
// Setup fullscreen
|
||||
_setupFullscreen();
|
||||
|
||||
// Listeners
|
||||
_listeners();
|
||||
}
|
||||
|
||||
// Set up aria-label for Play button with the title option
|
||||
_setupAria();
|
||||
|
||||
// Captions
|
||||
_setupCaptions();
|
||||
|
||||
// Set volume
|
||||
_setVolume();
|
||||
|
||||
// Setup fullscreen
|
||||
_setupFullscreen();
|
||||
|
||||
// Listeners
|
||||
_listeners();
|
||||
|
||||
// Successful setup
|
||||
return true;
|
||||
}
|
||||
@ -1399,10 +1433,21 @@
|
||||
toggleCaptions: _toggleCaptions,
|
||||
source: _parseSource,
|
||||
poster: _updatePoster,
|
||||
support: function(mimeType) { return _support(player, mimeType); }
|
||||
support: function(mimeType) { return _supportMime(player, mimeType); }
|
||||
}
|
||||
}
|
||||
|
||||
// Check for support
|
||||
api.supported = function() {
|
||||
var browser = _browserSniff(),
|
||||
basic = (!!document.createElement("audio").canPlayType && !!document.createElement("video").canPlayType);
|
||||
|
||||
return {
|
||||
basic: basic,
|
||||
full: basic && !(browser.name === "IE" && (browser.version <= 9))
|
||||
};
|
||||
}
|
||||
|
||||
// Expose setup function
|
||||
api.setup = function(options){
|
||||
// Extend the default options with user specified
|
||||
@ -1410,7 +1455,7 @@
|
||||
|
||||
// If enabled carry on
|
||||
// You may want to disable certain UAs etc
|
||||
if(!config.enabled) {
|
||||
if(!config.enabled || !api.supported().basic) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1423,13 +1468,6 @@
|
||||
// Get the current element
|
||||
var element = elements[i];
|
||||
|
||||
// Disabled for <video> for iPhone
|
||||
// Since it doesn't allow customisation
|
||||
if (element.querySelectorAll("audio, video")[0].tagName.toLowerCase() === "video"
|
||||
&& /iPhone/i.test(navigator.userAgent)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Setup a player instance and add to the element
|
||||
if(typeof element.plyr === "undefined") {
|
||||
// Create new instance
|
||||
@ -1445,4 +1483,5 @@
|
||||
|
||||
return players;
|
||||
}
|
||||
|
||||
}(this.plyr = this.plyr || {}));
|
Reference in New Issue
Block a user