UNPKG

react-jplayer

Version:

Html5 audio and video player library for React

249 lines (199 loc) 6.58 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _reactJplayerUtils = require('react-jplayer-utils'); var _initializeOptions = require('../initializeOptions/initializeOptions'); var _constants = require('../util/constants'); var _urlNotSetError = require('../util/errorHandlers/urlNotSetError'); var _urlNotSetError2 = _interopRequireDefault(_urlNotSetError); var _noFormatSupportedError = require('../util/errorHandlers/noFormatSupportedError'); var _noFormatSupportedError2 = _interopRequireDefault(_noFormatSupportedError); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } var updateFormats = function updateFormats(sources) { var formats = []; Object.keys(sources).forEach(function (supplied) { var canPlayType = void 0; try { // Some legacy browsers don't have canPlayType property canPlayType = document.createElement(_constants.formats[supplied].MEDIA).canPlayType(_constants.formats[supplied].CODEC); } catch (error) { canPlayType = ''; } formats.push({ supplied: supplied, supported: canPlayType }); }); return formats; }; var clearMedia = function clearMedia() { return _extends({}, _constants.defaultStatus, { media: _constants.defaultOptions.media }); }; var setMedia = function setMedia(_, _ref) { var media = _ref.media; var video = void 0; var src = void 0; var nonSupported = true; var error = void 0; var formats = updateFormats(media.sources); formats.forEach(function (format) { if (format.supported && nonSupported) { video = _constants.formats[format.supplied].MEDIA === 'video'; src = media.sources[format.supplied]; nonSupported = false; } }); if (nonSupported) { error = (0, _noFormatSupportedError2.default)('media.sources: \'' + Object.keys(media.sources).join(', ') + '\''); } return _extends({}, clearMedia(), { mediaSettings: { formats: formats, video: video, nonSupported: nonSupported }, media: media, video: video, src: src, paused: true, error: error }); }; var play = function play(jPlayer, _ref2) { var time = _ref2.time; if (jPlayer.src) { return { paused: false, newTime: !isNaN(time) ? time : null }; } return { error: (0, _urlNotSetError2.default)(play.name) }; }; var pause = function pause(jPlayer, _ref3) { var time = _ref3.time; if (jPlayer.src) { return { paused: true, newTime: !isNaN(time) ? time : null }; } return { error: (0, _urlNotSetError2.default)(pause.name) }; }; var setPlayHead = function setPlayHead(jPlayer, _ref4) { var percent = _ref4.percent; var limitedPercent = (0, _reactJplayerUtils.limitValue)(percent, 0, 100); if (jPlayer.src) { return { playHeadPercent: limitedPercent }; } return { error: (0, _urlNotSetError2.default)(setPlayHead.name) }; }; var setVolume = function setVolume(_, _ref5) { var volume = _ref5.volume; return { volume: (0, _reactJplayerUtils.limitValue)(volume, 0, 1), muted: volume <= 0 }; }; var setMute = function setMute(_, _ref6) { var mute = _ref6.mute; return { muted: mute }; }; var setOption = function setOption(jPlayer, _ref7) { var key = _ref7.key, value = _ref7.value; switch (key) { case 'media': { if (Object.keys(value).some(function (v) { return v; })) { return setMedia(jPlayer, { media: value }); } return clearMedia(); } case 'playHeadPercent': return setPlayHead(jPlayer, { percent: value }); case 'volume': return setVolume(jPlayer, { volume: value }); case 'muted': return setMute(jPlayer, { mute: value }); default: return _defineProperty({}, key, value); } }; var focus = function focus(state, id) { var newState = _extends({}, state); if (newState[id].keyEnabled) { Object.keys(newState).forEach(function (key) { if (key === id) { newState[key].focused = true; } else { newState[key].focused = false; } }); } return newState; }; var focusOnFirstKeyEnabledPlayer = function focusOnFirstKeyEnabledPlayer(state) { var firstKeyEnabledPlayer = Object.keys(state).filter(function (key) { return state[key].keyEnabled; }).shift(); if (state[firstKeyEnabledPlayer] !== undefined) { var focusedPlayer = _extends({}, state[firstKeyEnabledPlayer], { focused: true }); return _extends({}, state, _defineProperty({}, firstKeyEnabledPlayer, focusedPlayer)); } return state; }; var updateJPlayer = function updateJPlayer(state, action, fn) { var value = fn(state[action.id], action); var newState = state[action.id].keyEnabled ? focus(state, action.id) : focusOnFirstKeyEnabledPlayer(state); var jPlayer = newState[action.id]; return _extends({}, newState, _defineProperty({}, action.id, _extends({}, jPlayer, value))); }; var reducer = function reducer() { var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _initializeOptions.initialState; var action = arguments[1]; var updateValue = function updateValue(fn) { return updateJPlayer(state, action, fn); }; switch (action.type) { case _constants.actionNames.SET_MEDIA: return updateValue(setMedia); case _constants.actionNames.CLEAR_MEDIA: return updateValue(clearMedia); case _constants.actionNames.PLAY: return updateValue(play); case _constants.actionNames.PAUSE: return updateValue(pause); case _constants.actionNames.PLAY_HEAD: return updateValue(setPlayHead); case _constants.actionNames.VOLUME: return updateValue(setVolume); case _constants.actionNames.MUTE: return updateValue(setMute); case _constants.actionNames.SET_OPTION: return updateValue(setOption); case _constants.actionNames.FOCUS: return focus(state, action.id); default: return state; } }; exports.default = reducer;