aboutsummaryrefslogtreecommitdiffstats
path: root/src/js/plyr.js
diff options
context:
space:
mode:
authorSam Potts <me@sampotts.me>2016-01-14 00:59:18 +1100
committerSam Potts <me@sampotts.me>2016-01-14 00:59:18 +1100
commit7d487553b2d7d994ab9bdad7078895eceec56ecd (patch)
tree7ced25e4c8dd04340ce6bf5b3e60162e4ed002d4 /src/js/plyr.js
parentca8fd08e81e79875505f432b304e8140a3978ed4 (diff)
downloadplyr-7d487553b2d7d994ab9bdad7078895eceec56ecd.tar.lz
plyr-7d487553b2d7d994ab9bdad7078895eceec56ecd.tar.xz
plyr-7d487553b2d7d994ab9bdad7078895eceec56ecd.zip
Tab focus tweaks
Diffstat (limited to 'src/js/plyr.js')
-rw-r--r--src/js/plyr.js83
1 files changed, 46 insertions, 37 deletions
diff --git a/src/js/plyr.js b/src/js/plyr.js
index 79597b99..e21e7bf8 100644
--- a/src/js/plyr.js
+++ b/src/js/plyr.js
@@ -89,7 +89,8 @@
enabled: 'plyr--fullscreen-enabled',
active: 'plyr--fullscreen-active',
hideControls: 'plyr--fullscreen--hide-controls'
- }
+ },
+ tabFocus: 'tab-focus'
},
captions: {
defaultActive: false
@@ -487,16 +488,18 @@
// Toggle class on an element
function _toggleClass(element, className, state) {
if (element) {
- if (element.classList) {
- element.classList[state ? 'add' : 'remove'](className);
- }
- else {
- var current = (' ' + element.className + ' ').replace(/\s+/g, ' ').replace(' ' + className + ' ', '');
- element.className = current + (state ? ' ' + className : '');
- }
+ element.classList[state ? 'add' : 'remove'](className);
}
}
+ // Has class name
+ function _hasClass(element, className) {
+ if (element) {
+ return element.classList.contains(className);
+ }
+ return false;
+ }
+
// Toggle event
function _toggleHandler(element, events, callback, toggle) {
var eventList = events.split(' ');
@@ -878,6 +881,7 @@
plyr.buttons.fullscreen = _getElement(config.selectors.buttons.fullscreen);
// Inputs
+ plyr.buttons.volume = _getElement(config.selectors.buttons.volume);
plyr.buttons.mute = _getElement(config.selectors.buttons.mute);
plyr.buttons.captions = _getElement(config.selectors.buttons.captions);
plyr.checkboxes = _getElements('[type="checkbox"]');
@@ -2075,22 +2079,33 @@
// IE doesn't support input event, so we fallback to change
var inputEvent = (plyr.browser.name == 'IE' ? 'change' : 'input');
- // Click play/pause helpers
- function _onPlay() {
- _play();
- setTimeout(function() {
- if(plyr.buttons.pause) {
- plyr.buttons.pause.focus();
- }
- }, 100);
- }
- function _onPause() {
- _pause();
- setTimeout(function() {
- if(plyr.buttons.play) {
- plyr.buttons.play.focus();
- }
- }, 100);
+ // Click play/pause helper
+ function _togglePlay(play) {
+ // Toggle playback
+ if (play) {
+ _play();
+ }
+ else {
+ _pause();
+ }
+
+ // Determine which buttons
+ var trigger = plyr.buttons[play ? "play" : "pause"],
+ target = plyr.buttons[play ? "pause" : "play"];
+
+ // Setup focus and tab focus
+ if(target) {
+ var hadTabFocus = _hasClass(trigger, config.classes.tabFocus);
+
+ setTimeout(function() {
+ target.focus();
+
+ if(hadTabFocus) {
+ _toggleClass(trigger, config.classes.tabFocus, false);
+ _toggleClass(target, config.classes.tabFocus, true);
+ }
+ }, 100);
+ }
}
// Detect tab focus
@@ -2105,7 +2120,7 @@
for (var button in plyr.buttons) {
var element = plyr.buttons[button];
- _toggleClass(element, 'tab-focus', (element === focused));
+ _toggleClass(element, config.classes.tabFocus, (element === focused));
}
}
_on(window, 'keyup', function(event) {
@@ -2115,19 +2130,13 @@
checkFocus();
}
});
- for (var button in plyr.buttons) {
- var element = plyr.buttons[button];
-
- _on(element, 'blur', function() {
- _toggleClass(element, 'tab-focus', false);
- });
- }
+ _on(document.body, 'click', checkFocus);
// Play
- _on(plyr.buttons.play, 'click', _onPlay);
+ _on(plyr.buttons.play, 'click', function() { _togglePlay(true); });
// Pause
- _on(plyr.buttons.pause, 'click', _onPause);
+ _on(plyr.buttons.pause, 'click', function() { _togglePlay(); });
// Restart
_on(plyr.buttons.restart, 'click', _seek);
@@ -2196,14 +2205,14 @@
if (plyr.type === 'video' && config.click) {
_on(plyr.videoContainer, 'click', function() {
if (plyr.media.paused) {
- _onPlay();
+ _play();
}
else if (plyr.media.ended) {
_seek();
- _onPlay();
+ _play();
}
else {
- _onPause();
+ _pause();
}
});
}