aboutsummaryrefslogtreecommitdiffstats
path: root/src/js
diff options
context:
space:
mode:
Diffstat (limited to 'src/js')
-rw-r--r--src/js/plyr.js117
1 files changed, 62 insertions, 55 deletions
diff --git a/src/js/plyr.js b/src/js/plyr.js
index b8b2f17d..4a548bfa 100644
--- a/src/js/plyr.js
+++ b/src/js/plyr.js
@@ -1,6 +1,6 @@
// ==========================================================================
// Plyr
-// plyr.js v1.1.1
+// plyr.js v1.1.2
// https://github.com/selz/plyr
// License: The MIT License (MIT)
// ==========================================================================
@@ -80,7 +80,8 @@
enabled: true,
key: "plyr_volume"
},
- controls: ["restart", "rewind", "play", "fast-forward", "current-time", "duration", "mute", "volume", "captions", "fullscreen"]
+ controls: ["restart", "rewind", "play", "fast-forward", "current-time", "duration", "mute", "volume", "captions", "fullscreen"],
+ onSetup: function() {},
};
// Build the default HTML
@@ -234,8 +235,8 @@
function _browserSniff() {
var nAgt = navigator.userAgent,
name = navigator.appName,
- fullVersion = ""+parseFloat(navigator.appVersion),
- majorVersion = parseInt(navigator.appVersion,10),
+ fullVersion = "" + parseFloat(navigator.appVersion),
+ majorVersion = parseInt(navigator.appVersion, 10),
nameOffset,
verOffset,
ix;
@@ -248,46 +249,47 @@
// MSIE
else if ((verOffset=nAgt.indexOf("MSIE")) !== -1) {
name = "IE";
- fullVersion = nAgt.substring(verOffset+5);
+ fullVersion = nAgt.substring(verOffset + 5);
}
// Chrome
else if ((verOffset=nAgt.indexOf("Chrome")) !== -1) {
name = "Chrome";
- fullVersion = nAgt.substring(verOffset+7);
+ fullVersion = nAgt.substring(verOffset + 7);
}
// Safari
else if ((verOffset=nAgt.indexOf("Safari")) !== -1) {
name = "Safari";
- fullVersion = nAgt.substring(verOffset+7);
+ fullVersion = nAgt.substring(verOffset + 7);
if ((verOffset=nAgt.indexOf("Version")) !== -1) {
- fullVersion = nAgt.substring(verOffset+8);
+ fullVersion = nAgt.substring(verOffset + 8);
}
}
// Firefox
else if ((verOffset=nAgt.indexOf("Firefox")) !== -1) {
name = "Firefox";
- fullVersion = nAgt.substring(verOffset+8);
+ fullVersion = nAgt.substring(verOffset + 8);
}
// In most other browsers, "name/version" is at the end of userAgent
- else if ( (nameOffset=nAgt.lastIndexOf(" ")+1) < (verOffset=nAgt.lastIndexOf("/")) ) {
+ else if ((nameOffset=nAgt.lastIndexOf(" ") + 1) < (verOffset=nAgt.lastIndexOf("/"))) {
name = nAgt.substring(nameOffset,verOffset);
- fullVersion = nAgt.substring(verOffset+1);
- if (name.toLowerCase()==name.toUpperCase()) {
+ fullVersion = nAgt.substring(verOffset + 1);
+
+ if (name.toLowerCase() == name.toUpperCase()) {
name = navigator.appName;
}
}
// Trim the fullVersion string at semicolon/space if present
- if ((ix=fullVersion.indexOf(";")) !== -1) {
- fullVersion=fullVersion.substring(0,ix);
+ if ((ix = fullVersion.indexOf(";")) !== -1) {
+ fullVersion = fullVersion.substring(0, ix);
}
- if ((ix=fullVersion.indexOf(" ")) !== -1) {
- fullVersion=fullVersion.substring(0,ix);
+ if ((ix = fullVersion.indexOf(" ")) !== -1) {
+ fullVersion = fullVersion.substring(0, ix);
}
// Get major version
- majorVersion = parseInt(""+fullVersion,10);
+ majorVersion = parseInt("" + fullVersion, 10);
if (isNaN(majorVersion)) {
- fullVersion = ""+parseFloat(navigator.appVersion);
- majorVersion = parseInt(navigator.appVersion,10);
+ fullVersion = "" + parseFloat(navigator.appVersion);
+ majorVersion = parseInt(navigator.appVersion, 10);
}
// Return data
@@ -340,7 +342,7 @@
// Wrap an element
function _wrap(elements, wrapper) {
- // Convert `elms` to an array, if necessary.
+ // Convert `elements` to an array, if necessary.
if (!elements.length) {
elements = [elements];
}
@@ -348,16 +350,16 @@
// Loops backwards to prevent having to clone the wrapper on the
// first element (see `child` below).
for (var i = elements.length - 1; i >= 0; i--) {
- var child = (i > 0) ? wrapper.cloneNode(true) : wrapper;
- var el = elements[i];
+ var child = (i > 0) ? wrapper.cloneNode(true) : wrapper;
+ var element = elements[i];
// Cache the current parent and sibling.
- var parent = el.parentNode;
- var sibling = el.nextSibling;
+ var parent = element.parentNode;
+ var sibling = element.nextSibling;
// Wrap the element (is automatically removed from its current
// parent).
- child.appendChild(el);
+ child.appendChild(element);
// If the element had a sibling, insert the wrapper before
// the sibling to maintain the HTML structure; otherwise, just
@@ -519,7 +521,7 @@
}
}
- // Safari doesn't support the ALLOW_KEYBOARD_INPUT flag so set it to not supported
+ // Safari doesn't support the ALLOW_KEYBOARD_INPUT flag (for security) so set it to not supported
// https://bugs.webkit.org/show_bug.cgi?id=121496
if(fullscreen.prefix === "webkit" && !!navigator.userAgent.match(/Version\/[\d\.]+.*Safari/)) {
fullscreen.supportsFullScreen = false;
@@ -531,19 +533,16 @@
// Sometimes the prefix is "ms", sometimes "MS" to keep you on your toes
fullscreen.fullScreenEventName = (fullscreen.prefix == "ms" ? "MSFullscreenChange" : fullscreen.prefix + "fullscreenchange");
- fullscreen.isFullScreen = function() {
+ fullscreen.isFullScreen = function(element) {
+ if(typeof element == "undefined") {
+ element = document;
+ }
+
switch (this.prefix) {
case "":
- return document.fullScreen;
- case "webkit":
- return document.webkitIsFullScreen;
- case "ms":
- // Docs say document.msFullScreenElement returns undefined
- // if no element is full screem but it returns null, cheers
- // https://msdn.microsoft.com/en-us/library/ie/dn265028%28v=vs.85%29.aspx
- return (document.msFullscreenElement !== null);
+ return document.fullscreenElement == element;
default:
- return document[this.prefix + "FullScreen"];
+ return document[this.prefix + "FullscreenElement"] == element;
}
};
fullscreen.requestFullScreen = function(element) {
@@ -1035,7 +1034,7 @@
targetTime = input;
}
// Event
- else if (typeof input === "object" && (input.type === "change" || input.type === "input")) {
+ else if (typeof input === "object" && (input.type === "input" || input.type === "change")) {
// It's the seek slider
// Seek to the selected time
targetTime = ((input.target.value / input.target.max) * player.media.duration);
@@ -1072,17 +1071,18 @@
// Toggle fullscreen
function _toggleFullscreen(event) {
// Check for native support
- var nativeSupport = fullscreen.supportsFullScreen;
+ var nativeSupport = fullscreen.supportsFullScreen,
+ container = player.container;
// If it's a fullscreen change event, it's probably a native close
if(event && event.type === fullscreen.fullScreenEventName) {
- config.fullscreen.active = fullscreen.isFullScreen();
+ player.isFullscreen = fullscreen.isFullScreen(container);
}
// If there's native support, use it
else if(nativeSupport) {
// Request fullscreen
- if(!fullscreen.isFullScreen()) {
- fullscreen.requestFullScreen(player.container);
+ if(!fullscreen.isFullScreen(container)) {
+ fullscreen.requestFullScreen(container);
}
// Bail from fullscreen
else {
@@ -1090,14 +1090,14 @@
}
// Check if we're actually full screen (it could fail)
- config.fullscreen.active = fullscreen.isFullScreen();
+ player.isFullscreen = fullscreen.isFullScreen(container);
}
else {
// Otherwise, it's a simple toggle
- config.fullscreen.active = !config.fullscreen.active;
+ player.isFullscreen = !player.isFullscreen;
// Bind/unbind escape key
- if(config.fullscreen.active) {
+ if(player.isFullscreen) {
_on(document, "keyup", _handleEscapeFullscreen);
document.body.style.overflow = "hidden";
}
@@ -1108,13 +1108,13 @@
}
// Set class hook
- _toggleClass(player.container, config.classes.fullscreen.active, config.fullscreen.active);
+ _toggleClass(container, config.classes.fullscreen.active, player.isFullscreen);
}
// Bail from faux-fullscreen
function _handleEscapeFullscreen(event) {
// If it's a keypress and not escape, bail
- if((event.which || event.charCode || event.keyCode) === 27 && config.fullscreen.active) {
+ if((event.which || event.charCode || event.keyCode) === 27 && player.isFullscreen) {
_toggleFullscreen();
}
}
@@ -1391,6 +1391,9 @@
// Listen for events
function _listeners() {
+ // IE doesn't support input event, so we fallback to change
+ var inputEvent = (player.browser.name == "IE" ? "change" : "input");
+
// Play
_on(player.buttons.play, "click", function() {
_play();
@@ -1412,9 +1415,11 @@
// Fast forward
_on(player.buttons.forward, "click", _forward);
- // Get the HTML5 range input element and append audio volume adjustment on change/input
- // IE10 doesn't support the "input" event so they have to wait for change
- _on(player.volume, "change input", function() {
+ // Seek
+ _on(player.buttons.seek, inputEvent, _seek);
+
+ // Set volume
+ _on(player.volume, inputEvent, function() {
_setVolume(this.value);
});
@@ -1440,9 +1445,6 @@
// Display duration
_on(player.media, "loadedmetadata", _displayDuration);
- // Seek
- _on(player.buttons.seek, "change input", _seek);
-
// Captions
_on(player.buttons.captions, "change", function() {
_toggleCaptions(this.checked);
@@ -1578,11 +1580,13 @@
rewind: _rewind,
forward: _forward,
seek: _seek,
+ source: _parseSource,
+ poster: _updatePoster,
setVolume: _setVolume,
toggleMute: _toggleMute,
toggleCaptions: _toggleCaptions,
- source: _parseSource,
- poster: _updatePoster,
+ toggleFullscreen: _toggleFullscreen,
+ isFullscreen: function() { return player.isFullscreen || false; },
support: function(mimeType) { return _supportMime(player, mimeType); }
}
}
@@ -1646,9 +1650,12 @@
// Set plyr to false if setup failed
element.plyr = (Object.keys(instance).length ? instance : false);
+
+ // Callback
+ config.onSetup.apply(element.plyr);
}
- // Add to return array
+ // Add to return array even if it's already setup
players.push(element.plyr);
}