aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/js/plyr.js52
1 files changed, 46 insertions, 6 deletions
diff --git a/src/js/plyr.js b/src/js/plyr.js
index 60385711..6cf4d5b9 100644
--- a/src/js/plyr.js
+++ b/src/js/plyr.js
@@ -1,6 +1,6 @@
// ==========================================================================
// Plyr
-// plyr.js v2.0.9
+// plyr.js v2.0.10
// https://github.com/selz/plyr
// License: The MIT License (MIT)
// ==========================================================================
@@ -45,7 +45,7 @@
displayDuration: true,
loadSprite: true,
iconPrefix: 'plyr',
- iconUrl: 'https://cdn.plyr.io/2.0.9/plyr.svg',
+ iconUrl: 'https://cdn.plyr.io/2.0.10/plyr.svg',
clickToPlay: true,
hideControls: true,
showPosterOnEnd: false,
@@ -190,7 +190,7 @@
speed: null
},
// Events to watch on HTML5 media elements
- events: ['ready', 'ended', 'progress', 'stalled', 'playing', 'waiting', 'canplay', 'canplaythrough', 'loadstart', 'loadeddata', 'loadedmetadata', 'timeupdate', 'volumechange', 'play', 'pause', 'error', 'seeking', 'emptied'],
+ events: ['ready', 'ended', 'progress', 'stalled', 'playing', 'waiting', 'canplay', 'canplaythrough', 'loadstart', 'loadeddata', 'loadedmetadata', 'timeupdate', 'volumechange', 'play', 'pause', 'error', 'seeking', 'seeked', 'emptied'],
// Logging
logPrefix: '[Plyr]'
};
@@ -576,6 +576,18 @@
}
};
+ // Parse YouTube ID from url
+ function _parseYouTubeId(url) {
+ var regex = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/;
+ return (url.match(regex)) ? RegExp.$2 : url;
+ }
+
+ // Parse Vimeo ID from url
+ function _parseVimeoId(url) {
+ var regex = /^.*(vimeo.com\/|video\/)(\d+).*/;
+ return (url.match(regex)) ? RegExp.$2 : url;
+ }
+
// Fullscreen API
var _fullscreen;
(function() {
@@ -1688,9 +1700,23 @@
// Setup YouTube/Vimeo
function _setupEmbed() {
var container = document.createElement('div'),
- mediaId = plyr.embedId,
+ mediaId,
id = plyr.type + '-' + Math.floor(Math.random() * (10000));
+ // Parse IDs from URLs if supplied
+ switch (plyr.type) {
+ case 'youtube':
+ mediaId = _parseYouTubeId(plyr.embedId);
+ break;
+
+ case 'vimeo':
+ mediaId = _parseVimeoId(plyr.embedId);
+ break;
+
+ default:
+ mediaId = plyr.embedId;
+ }
+
// Remove old containers
var containers = _getElements('[id^="' + plyr.type + '-"]');
for (var i = containers.length - 1; i >= 0; i--) {
@@ -1907,6 +1933,12 @@
case 1:
plyr.media.paused = false;
+
+ // If we were seeking, fire seeked event
+ if (plyr.media.seeking) {
+ _triggerEvent(plyr.media, 'seeked');
+ }
+
plyr.media.seeking = false;
_triggerEvent(plyr.media, 'play');
_triggerEvent(plyr.media, 'playing');
@@ -2031,6 +2063,12 @@
}
});
+ plyr.embed.on('seeked', function() {
+ plyr.media.seeking = false;
+ _triggerEvent(plyr.media, 'seeked');
+ _triggerEvent(plyr.media, 'play');
+ });
+
plyr.embed.on('ended', function() {
plyr.media.paused = true;
_triggerEvent(plyr.media, 'ended');
@@ -2222,7 +2260,6 @@
// Embeds
if (_inArray(config.types.embed, plyr.type)) {
- // YouTube
switch(plyr.type) {
case 'youtube':
plyr.embed.seekTo(targetTime);
@@ -2242,11 +2279,14 @@
_pause();
}
- // Trigger timeupdate for embeds
+ // Trigger timeupdate
_triggerEvent(plyr.media, 'timeupdate');
// Set seeking flag
plyr.media.seeking = true;
+
+ // Trigger seeking
+ _triggerEvent(plyr.media, 'seeking');
}
// Logging