芝麻web文件管理V1.00
编辑当前文件:/home/freeclou/app.optimyar.com/backend/node_modules/video-react/lib/components/Shortcut.js
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _react = require("react"); var _propTypes = _interopRequireDefault(require("prop-types")); var _dom = require("../utils/dom"); var propTypes = { clickable: _propTypes["default"].bool, dblclickable: _propTypes["default"].bool, manager: _propTypes["default"].object, actions: _propTypes["default"].object, player: _propTypes["default"].object, shortcuts: _propTypes["default"].array }; var defaultProps = { clickable: true, dblclickable: true }; var Shortcut = /*#__PURE__*/ function (_Component) { (0, _inherits2["default"])(Shortcut, _Component); function Shortcut(props, context) { var _this; (0, _classCallCheck2["default"])(this, Shortcut); _this = (0, _possibleConstructorReturn2["default"])(this, (0, _getPrototypeOf2["default"])(Shortcut).call(this, props, context)); _this.defaultShortcuts = [{ keyCode: 32, // spacebar handle: _this.togglePlay }, { keyCode: 75, // k handle: _this.togglePlay }, { keyCode: 70, // f handle: _this.toggleFullscreen }, { keyCode: 37, // Left arrow handle: function handle(player, actions) { if (!player.hasStarted) { return; } actions.replay(5, { action: 'replay-5', source: 'shortcut' }); // Go back 5 seconds } }, { keyCode: 74, // j handle: function handle(player, actions) { if (!player.hasStarted) { return; } actions.replay(10, { action: 'replay-10', source: 'shortcut' }); // Go back 10 seconds } }, { keyCode: 39, // Right arrow handle: function handle(player, actions) { if (!player.hasStarted) { return; } actions.forward(5, { action: 'forward-5', source: 'shortcut' }); // Go forward 5 seconds } }, { keyCode: 76, // l handle: function handle(player, actions) { if (!player.hasStarted) { return; } actions.forward(10, { action: 'forward-10', source: 'shortcut' }); // Go forward 10 seconds } }, { keyCode: 36, // Home handle: function handle(player, actions) { if (!player.hasStarted) { return; } actions.seek(0); // Go to beginning of video } }, { keyCode: 35, // End handle: function handle(player, actions) { if (!player.hasStarted) { return; } // Go to end of video actions.seek(player.duration); } }, { keyCode: 38, // Up arrow handle: function handle(player, actions) { // Increase volume 5% var v = player.volume + 0.05; if (v > 1) { v = 1; } actions.changeVolume(v, { action: 'volume-up', source: 'shortcut' }); } }, { keyCode: 40, // Down arrow handle: function handle(player, actions) { // Decrease volume 5% var v = player.volume - 0.05; if (v < 0) { v = 0; } var action = v > 0 ? 'volume-down' : 'volume-off'; actions.changeVolume(v, { action: action, source: 'shortcut' }); } }, { keyCode: 190, // Shift + > shift: true, handle: function handle(player, actions) { // Increase speed var playbackRate = player.playbackRate; if (playbackRate >= 1.5) { playbackRate = 2; } else if (playbackRate >= 1.25) { playbackRate = 1.5; } else if (playbackRate >= 1.0) { playbackRate = 1.25; } else if (playbackRate >= 0.5) { playbackRate = 1.0; } else if (playbackRate >= 0.25) { playbackRate = 0.5; } else if (playbackRate >= 0) { playbackRate = 0.25; } actions.changeRate(playbackRate, { action: 'fast-forward', source: 'shortcut' }); } }, { keyCode: 188, // Shift + < shift: true, handle: function handle(player, actions) { // Decrease speed var playbackRate = player.playbackRate; if (playbackRate <= 0.5) { playbackRate = 0.25; } else if (playbackRate <= 1.0) { playbackRate = 0.5; } else if (playbackRate <= 1.25) { playbackRate = 1.0; } else if (playbackRate <= 1.5) { playbackRate = 1.25; } else if (playbackRate <= 2) { playbackRate = 1.5; } actions.changeRate(playbackRate, { action: 'fast-rewind', source: 'shortcut' }); } }]; _this.shortcuts = (0, _toConsumableArray2["default"])(_this.defaultShortcuts); _this.mergeShortcuts = _this.mergeShortcuts.bind((0, _assertThisInitialized2["default"])(_this)); _this.handleKeyPress = _this.handleKeyPress.bind((0, _assertThisInitialized2["default"])(_this)); _this.handleClick = _this.handleClick.bind((0, _assertThisInitialized2["default"])(_this)); _this.handleDoubleClick = _this.handleDoubleClick.bind((0, _assertThisInitialized2["default"])(_this)); return _this; } (0, _createClass2["default"])(Shortcut, [{ key: "componentDidMount", value: function componentDidMount() { this.mergeShortcuts(); document.addEventListener('keydown', this.handleKeyPress); document.addEventListener('click', this.handleClick); document.addEventListener('dblclick', this.handleDoubleClick); } }, { key: "componentDidUpdate", value: function componentDidUpdate(prevProps) { if (prevProps.shortcuts !== this.props.shortcuts) { this.mergeShortcuts(); } } }, { key: "componentWillUnmount", value: function componentWillUnmount() { document.removeEventListener('keydown', this.handleKeyPress); document.removeEventListener('click', this.handleClick); document.removeEventListener('dblclick', this.handleDoubleClick); } // merge the shortcuts from props }, { key: "mergeShortcuts", value: function mergeShortcuts() { var getShortcutKey = function getShortcutKey(_ref) { var _ref$keyCode = _ref.keyCode, keyCode = _ref$keyCode === void 0 ? 0 : _ref$keyCode, _ref$ctrl = _ref.ctrl, ctrl = _ref$ctrl === void 0 ? false : _ref$ctrl, _ref$shift = _ref.shift, shift = _ref$shift === void 0 ? false : _ref$shift, _ref$alt = _ref.alt, alt = _ref$alt === void 0 ? false : _ref$alt; return "".concat(keyCode, ":").concat(ctrl, ":").concat(shift, ":").concat(alt); }; var defaultShortcuts = this.defaultShortcuts.reduce(function (shortcuts, shortcut) { return Object.assign(shortcuts, (0, _defineProperty2["default"])({}, getShortcutKey(shortcut), shortcut)); }, {}); var mergedShortcuts = (this.props.shortcuts || []).reduce(function (shortcuts, shortcut) { var keyCode = shortcut.keyCode, handle = shortcut.handle; if (keyCode && typeof handle === 'function') { return Object.assign(shortcuts, (0, _defineProperty2["default"])({}, getShortcutKey(shortcut), shortcut)); } return shortcuts; }, defaultShortcuts); var gradeShortcut = function gradeShortcut(s) { var score = 0; var ps = ['ctrl', 'shift', 'alt']; ps.forEach(function (key) { if (s[key]) { score++; } }); return score; }; this.shortcuts = Object.keys(mergedShortcuts).map(function (key) { return mergedShortcuts[key]; }).sort(function (a, b) { return gradeShortcut(b) - gradeShortcut(a); }); } }, { key: "togglePlay", value: function togglePlay(player, actions) { if (player.paused) { actions.play({ action: 'play', source: 'shortcut' }); } else { actions.pause({ action: 'pause', source: 'shortcut' }); } } }, { key: "toggleFullscreen", value: function toggleFullscreen(player, actions) { actions.toggleFullscreen(player); } }, { key: "handleKeyPress", value: function handleKeyPress(e) { var _this$props = this.props, player = _this$props.player, actions = _this$props.actions; if (!player.isActive) { return; } if (document.activeElement && ((0, _dom.hasClass)(document.activeElement, 'video-react-control') || (0, _dom.hasClass)(document.activeElement, 'video-react-menu-button-active') || // || hasClass(document.activeElement, 'video-react-slider') (0, _dom.hasClass)(document.activeElement, 'video-react-big-play-button'))) { return; } var keyCode = e.keyCode || e.which; var ctrl = e.ctrlKey || e.metaKey; var shift = e.shiftKey; var alt = e.altKey; var shortcut = this.shortcuts.filter(function (s) { if (!s.keyCode || s.keyCode - keyCode !== 0) { return false; } if (s.ctrl !== undefined && s.ctrl !== ctrl || s.shift !== undefined && s.shift !== shift || s.alt !== undefined && s.alt !== alt) { return false; } return true; })[0]; if (shortcut) { shortcut.handle(player, actions); e.preventDefault(); } } // only if player is active and player is ready }, { key: "canBeClicked", value: function canBeClicked(player, e) { if (!player.isActive || e.target.nodeName !== 'VIDEO' || player.readyState !== 4) { return false; } return true; } }, { key: "handleClick", value: function handleClick(e) { var _this$props2 = this.props, player = _this$props2.player, actions = _this$props2.actions, clickable = _this$props2.clickable; if (!this.canBeClicked(player, e) || !clickable) { return; } this.togglePlay(player, actions); // e.preventDefault(); } }, { key: "handleDoubleClick", value: function handleDoubleClick(e) { var _this$props3 = this.props, player = _this$props3.player, actions = _this$props3.actions, dblclickable = _this$props3.dblclickable; if (!this.canBeClicked(player, e) || !dblclickable) { return; } this.toggleFullscreen(player, actions); // e.preventDefault(); } // this component dose not render anything // it's just for the key down event }, { key: "render", value: function render() { return null; } }]); return Shortcut; }(_react.Component); exports["default"] = Shortcut; Shortcut.propTypes = propTypes; Shortcut.defaultProps = defaultProps; Shortcut.displayName = 'Shortcut';