summaryrefslogtreecommitdiffstats
path: root/assets/js/videojs.hotkeys.js
diff options
context:
space:
mode:
Diffstat (limited to 'assets/js/videojs.hotkeys.js')
-rw-r--r--assets/js/videojs.hotkeys.js413
1 files changed, 0 insertions, 413 deletions
diff --git a/assets/js/videojs.hotkeys.js b/assets/js/videojs.hotkeys.js
deleted file mode 100644
index fed12206..00000000
--- a/assets/js/videojs.hotkeys.js
+++ /dev/null
@@ -1,413 +0,0 @@
-/*
- * Video.js Hotkeys
- * https://github.com/ctd1500/videojs-hotkeys
- *
- * Copyright (c) 2015 Chris Dougherty
- * Licensed under the Apache-2.0 license.
- */
-
-;(function(root, factory) {
- if (typeof window !== 'undefined' && window.videojs) {
- factory(window.videojs);
- } else if (typeof define === 'function' && define.amd) {
- define('videojs-hotkeys', ['video.js'], function (module) {
- return factory(module.default || module);
- });
- } else if (typeof module !== 'undefined' && module.exports) {
- module.exports = factory(require('video.js'));
- }
-}(this, function (videojs) {
- "use strict";
- if (typeof window !== 'undefined') {
- window['videojs_hotkeys'] = { version: "0.2.22" };
- }
-
- var hotkeys = function(options) {
- var player = this;
- var pEl = player.el();
- var doc = document;
- var def_options = {
- volumeStep: 0.1,
- seekStep: 5,
- enableMute: true,
- enableVolumeScroll: true,
- enableHoverScroll: true,
- enableFullscreen: true,
- enableNumbers: true,
- enableJogStyle: false,
- alwaysCaptureHotkeys: false,
- enableModifiersForNumbers: true,
- enableInactiveFocus: true,
- skipInitialFocus: false,
- playPauseKey: playPauseKey,
- rewindKey: rewindKey,
- forwardKey: forwardKey,
- volumeUpKey: volumeUpKey,
- volumeDownKey: volumeDownKey,
- muteKey: muteKey,
- fullscreenKey: fullscreenKey,
- customKeys: {}
- };
-
- var cPlay = 1,
- cRewind = 2,
- cForward = 3,
- cVolumeUp = 4,
- cVolumeDown = 5,
- cMute = 6,
- cFullscreen = 7;
-
- // Use built-in merge function from Video.js v5.0+ or v4.4.0+
- var mergeOptions = videojs.mergeOptions || videojs.util.mergeOptions;
- options = mergeOptions(def_options, options || {});
-
- var volumeStep = options.volumeStep,
- seekStep = options.seekStep,
- enableMute = options.enableMute,
- enableVolumeScroll = options.enableVolumeScroll,
- enableHoverScroll = options.enableHoverScroll,
- enableFull = options.enableFullscreen,
- enableNumbers = options.enableNumbers,
- enableJogStyle = options.enableJogStyle,
- alwaysCaptureHotkeys = options.alwaysCaptureHotkeys,
- enableModifiersForNumbers = options.enableModifiersForNumbers,
- enableInactiveFocus = options.enableInactiveFocus,
- skipInitialFocus = options.skipInitialFocus;
-
- // Set default player tabindex to handle keydown and doubleclick events
- if (!pEl.hasAttribute('tabIndex')) {
- pEl.setAttribute('tabIndex', '-1');
- }
-
- // Remove player outline to fix video performance issue
- pEl.style.outline = "none";
-
- if (alwaysCaptureHotkeys || !player.autoplay()) {
- if (!skipInitialFocus) {
- player.one('play', function() {
- pEl.focus(); // Fixes the .vjs-big-play-button handing focus back to body instead of the player
- });
- }
- }
-
- if (enableInactiveFocus) {
- player.on('userinactive', function() {
- // When the control bar fades, re-apply focus to the player if last focus was a control button
- var cancelFocusingPlayer = function() {
- clearTimeout(focusingPlayerTimeout);
- };
- var focusingPlayerTimeout = setTimeout(function() {
- player.off('useractive', cancelFocusingPlayer);
- var activeElement = doc.activeElement;
- var controlBar = pEl.querySelector('.vjs-control-bar');
- if (activeElement && activeElement.parentElement == controlBar) {
- pEl.focus();
- }
- }, 10);
-
- player.one('useractive', cancelFocusingPlayer);
- });
- }
-
- player.on('play', function() {
- // Fix allowing the YouTube plugin to have hotkey support.
- var ifblocker = pEl.querySelector('.iframeblocker');
- if (ifblocker && ifblocker.style.display === '') {
- ifblocker.style.display = "block";
- ifblocker.style.bottom = "39px";
- }
- });
-
- var keyDown = function keyDown(event) {
- var ewhich = event.which, wasPlaying, seekTime;
- var ePreventDefault = event.preventDefault;
- var duration = player.duration();
- // When controls are disabled, hotkeys will be disabled as well
- if (player.controls()) {
-
- // Don't catch keys if any control buttons are focused, unless alwaysCaptureHotkeys is true
- var activeEl = doc.activeElement;
- if (alwaysCaptureHotkeys ||
- activeEl == pEl ||
- activeEl == pEl.querySelector('.vjs-tech') ||
- activeEl == pEl.querySelector('.vjs-control-bar') ||
- activeEl == pEl.querySelector('.iframeblocker')) {
-
- switch (checkKeys(event, player)) {
- // Spacebar toggles play/pause
- case cPlay:
- ePreventDefault();
- if (alwaysCaptureHotkeys) {
- // Prevent control activation with space
- event.stopPropagation();
- }
-
- if (player.paused()) {
- player.play();
- } else {
- player.pause();
- }
- break;
-
- // Seeking with the left/right arrow keys
- case cRewind: // Seek Backward
- wasPlaying = !player.paused();
- ePreventDefault();
- if (wasPlaying) {
- player.pause();
- }
- seekTime = player.currentTime() - seekStepD(event);
- // The flash player tech will allow you to seek into negative
- // numbers and break the seekbar, so try to prevent that.
- if (seekTime <= 0) {
- seekTime = 0;
- }
- player.currentTime(seekTime);
- if (wasPlaying) {
- player.play();
- }
- break;
- case cForward: // Seek Forward
- wasPlaying = !player.paused();
- ePreventDefault();
- if (wasPlaying) {
- player.pause();
- }
- seekTime = player.currentTime() + seekStepD(event);
- // Fixes the player not sending the end event if you
- // try to seek past the duration on the seekbar.
- if (seekTime >= duration) {
- seekTime = wasPlaying ? duration - .001 : duration;
- }
- player.currentTime(seekTime);
- if (wasPlaying) {
- player.play();
- }
- break;
-
- // Volume control with the up/down arrow keys
- case cVolumeDown:
- ePreventDefault();
- if (!enableJogStyle) {
- player.volume(player.volume() - volumeStep);
- } else {
- seekTime = player.currentTime() - 1;
- if (player.currentTime() <= 1) {
- seekTime = 0;
- }
- player.currentTime(seekTime);
- }
- break;
- case cVolumeUp:
- ePreventDefault();
- if (!enableJogStyle) {
- player.volume(player.volume() + volumeStep);
- } else {
- seekTime = player.currentTime() + 1;
- if (seekTime >= duration) {
- seekTime = duration;
- }
- player.currentTime(seekTime);
- }
- break;
-
- // Toggle Mute with the M key
- case cMute:
- if (enableMute) {
- player.muted(!player.muted());
- }
- break;
-
- // Toggle Fullscreen with the F key
- case cFullscreen:
- if (enableFull) {
- if (player.isFullscreen()) {
- player.exitFullscreen();
- } else {
- player.requestFullscreen();
- }
- }
- break;
-
- default:
- // Number keys from 0-9 skip to a percentage of the video. 0 is 0% and 9 is 90%
- if ((ewhich > 47 && ewhich < 59) || (ewhich > 95 && ewhich < 106)) {
- // Do not handle if enableModifiersForNumbers set to false and keys are Ctrl, Cmd or Alt
- if (enableModifiersForNumbers || !(event.metaKey || event.ctrlKey || event.altKey)) {
- if (enableNumbers) {
- var sub = 48;
- if (ewhich > 95) {
- sub = 96;
- }
- var number = ewhich - sub;
- ePreventDefault();
- player.currentTime(player.duration() * number * 0.1);
- }
- }
- }
-
- // Handle any custom hotkeys
- for (var customKey in options.customKeys) {
- var customHotkey = options.customKeys[customKey];
- // Check for well formed custom keys
- if (customHotkey && customHotkey.key && customHotkey.handler) {
- // Check if the custom key's condition matches
- if (customHotkey.key(event)) {
- ePreventDefault();
- customHotkey.handler(player, options, event);
- }
- }
- }
- }
- }
- }
- };
-
- var doubleClick = function doubleClick(event) {
- // When controls are disabled, hotkeys will be disabled as well
- if (player.controls()) {
-
- // Don't catch clicks if any control buttons are focused
- var activeEl = event.relatedTarget || event.toElement || doc.activeElement;
- if (activeEl == pEl ||
- activeEl == pEl.querySelector('.vjs-tech') ||
- activeEl == pEl.querySelector('.iframeblocker')) {
-
- if (enableFull) {
- if (player.isFullscreen()) {
- player.exitFullscreen();
- } else {
- player.requestFullscreen();
- }
- }
- }
- }
- };
-
- var volumeHover = false;
- var volumeSelector = pEl.querySelector('.vjs-volume-menu-button') || pEl.querySelector('.vjs-volume-panel');
- volumeSelector.onmouseover = function() { volumeHover = true; }
- volumeSelector.onmouseout = function() { volumeHover = false; }
-
- var mouseScroll = function mouseScroll(event) {
- if (enableHoverScroll) {
- // If we leave this undefined then it can match non-existent elements below
- var activeEl = 0;
- } else {
- var activeEl = doc.activeElement;
- }
-
- // When controls are disabled, hotkeys will be disabled as well
- if (player.controls()) {
- if (alwaysCaptureHotkeys ||
- activeEl == pEl ||
- activeEl == pEl.querySelector('.vjs-tech') ||
- activeEl == pEl.querySelector('.iframeblocker') ||
- activeEl == pEl.querySelector('.vjs-control-bar') ||
- volumeHover) {
-
- if (enableVolumeScroll) {
- event = window.event || event;
- var delta = Math.max(-1, Math.min(1, (event.wheelDelta || -event.detail)));
- event.preventDefault();
-
- if (delta == 1) {
- player.volume(player.volume() + volumeStep);
- } else if (delta == -1) {
- player.volume(player.volume() - volumeStep);
- }
- }
- }
- }
- };
-
- var checkKeys = function checkKeys(e, player) {
- // Allow some modularity in defining custom hotkeys
-
- // Play/Pause check
- if (options.playPauseKey(e, player)) {
- return cPlay;
- }
-
- // Seek Backward check
- if (options.rewindKey(e, player)) {
- return cRewind;
- }
-
- // Seek Forward check
- if (options.forwardKey(e, player)) {
- return cForward;
- }
-
- // Volume Up check
- if (options.volumeUpKey(e, player)) {
- return cVolumeUp;
- }
-
- // Volume Down check
- if (options.volumeDownKey(e, player)) {
- return cVolumeDown;
- }
-
- // Mute check
- if (options.muteKey(e, player)) {
- return cMute;
- }
-
- // Fullscreen check
- if (options.fullscreenKey(e, player)) {
- return cFullscreen;
- }
- };
-
- function playPauseKey(e) {
- // Space bar or MediaPlayPause
- return (e.which === 32 || e.which === 179);
- }
-
- function rewindKey(e) {
- // Left Arrow or MediaRewind
- return (e.which === 37 || e.which === 177);
- }
-
- function forwardKey(e) {
- // Right Arrow or MediaForward
- return (e.which === 39 || e.which === 176);
- }
-
- function volumeUpKey(e) {
- // Up Arrow
- return (e.which === 38);
- }
-
- function volumeDownKey(e) {
- // Down Arrow
- return (e.which === 40);
- }
-
- function muteKey(e) {
- // M key
- return (e.which === 77);
- }
-
- function fullscreenKey(e) {
- // F key
- return (e.which === 70);
- }
-
- function seekStepD(e) {
- // SeekStep caller, returns an int, or a function returning an int
- return (typeof seekStep === "function" ? seekStep(e) : seekStep);
- }
-
- player.on('keydown', keyDown);
- player.on('dblclick', doubleClick);
- player.on('mousewheel', mouseScroll);
- player.on("DOMMouseScroll", mouseScroll);
-
- return this;
- };
-
- var registerPlugin = videojs.registerPlugin || videojs.plugin;
- registerPlugin('hotkeys', hotkeys);
-}));