UNPKG

react-player-cu

Version:

A React component for playing a hls and mp4 videos. It is a fork of Pete Cook's <pete@cookpete.com> (http://github.com/cookpete) react-player.

297 lines (256 loc) 9.49 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); exports.parseStartTime = parseStartTime; exports.parseEndTime = parseEndTime; exports.randomString = randomString; exports.queryString = queryString; exports.getSDK = getSDK; exports.getConfig = getConfig; exports.omit = omit; exports.callPlayer = callPlayer; exports.isObject = isObject; exports.isEqual = isEqual; exports.isMediaStream = isMediaStream; var _loadScript = require('load-script'); var _loadScript2 = _interopRequireDefault(_loadScript); var _deepmerge = require('deepmerge'); var _deepmerge2 = _interopRequireDefault(_deepmerge); var _props = require('./props'); 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 MATCH_START_QUERY = /[?&#](?:start|t)=([0-9hms]+)/; var MATCH_END_QUERY = /[?&#]end=([0-9hms]+)/; var MATCH_START_STAMP = /(\d+)(h|m|s)/g; var MATCH_NUMERIC = /^\d+$/; // Parse YouTube URL for a start time param, ie ?t=1h14m30s // and return the start time in seconds function parseTimeParam(url, pattern) { var match = url.match(pattern); if (match) { var stamp = match[1]; if (stamp.match(MATCH_START_STAMP)) { return parseTimeString(stamp); } if (MATCH_NUMERIC.test(stamp)) { return parseInt(stamp); } } return undefined; } function parseTimeString(stamp) { var seconds = 0; var array = MATCH_START_STAMP.exec(stamp); while (array !== null) { var _array = array, _array2 = _slicedToArray(_array, 3), count = _array2[1], period = _array2[2]; if (period === 'h') seconds += parseInt(count, 10) * 60 * 60; if (period === 'm') seconds += parseInt(count, 10) * 60; if (period === 's') seconds += parseInt(count, 10); array = MATCH_START_STAMP.exec(stamp); } return seconds; } function parseStartTime(url) { return parseTimeParam(url, MATCH_START_QUERY); } function parseEndTime(url) { return parseTimeParam(url, MATCH_END_QUERY); } // http://stackoverflow.com/a/38622545 function randomString() { return Math.random().toString(36).substr(2, 5); } function queryString(object) { return Object.keys(object).map(function (key) { return key + '=' + object[key]; }).join('&'); } // Util function to load an external SDK // or return the SDK if it is already loaded var resolves = {}; function getSDK(url, sdkGlobal) { var sdkReady = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var isLoaded = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : function () { return true; }; var fetchScript = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : _loadScript2['default']; if (window[sdkGlobal] && isLoaded(window[sdkGlobal])) { return Promise.resolve(window[sdkGlobal]); } return new Promise(function (resolve, reject) { // If we are already loading the SDK, add the resolve // function to the existing array of resolve functions if (resolves[url]) { resolves[url].push(resolve); return; } resolves[url] = [resolve]; var onLoaded = function onLoaded(sdk) { // When loaded, resolve all pending promises resolves[url].forEach(function (resolve) { return resolve(sdk); }); }; if (sdkReady) { var previousOnReady = window[sdkReady]; window[sdkReady] = function () { if (previousOnReady) previousOnReady(); onLoaded(window[sdkGlobal]); }; } fetchScript(url, function (err) { if (err) reject(err); if (!sdkReady) { onLoaded(window[sdkGlobal]); } }); }); } function getConfig(props, defaultProps, showWarning) { var config = (0, _deepmerge2['default'])(defaultProps.config, props.config); var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = _props.DEPRECATED_CONFIG_PROPS[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var p = _step.value; if (props[p]) { var key = p.replace(/Config$/, ''); config = (0, _deepmerge2['default'])(config, _defineProperty({}, key, props[p])); if (showWarning) { var link = 'https://github.com/CookPete/react-player#config-prop'; var message = 'ReactPlayer: %c' + p + ' %cis deprecated, please use the config prop instead \u2013 ' + link; console.warn(message, 'font-weight: bold', ''); } } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator['return']) { _iterator['return'](); } } finally { if (_didIteratorError) { throw _iteratorError; } } } return config; } function omit(object) { var _ref; for (var _len = arguments.length, arrays = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { arrays[_key - 1] = arguments[_key]; } var omitKeys = (_ref = []).concat.apply(_ref, arrays); var output = {}; var keys = Object.keys(object); var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; try { for (var _iterator2 = keys[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var key = _step2.value; if (omitKeys.indexOf(key) === -1) { output[key] = object[key]; } } } catch (err) { _didIteratorError2 = true; _iteratorError2 = err; } finally { try { if (!_iteratorNormalCompletion2 && _iterator2['return']) { _iterator2['return'](); } } finally { if (_didIteratorError2) { throw _iteratorError2; } } } return output; } function callPlayer(method) { var _player; // Util method for calling a method on this.player // but guard against errors and console.warn instead if (!this.player || !this.player[method]) { var message = 'ReactPlayer: ' + this.constructor.displayName + ' player could not call %c' + method + '%c \u2013 '; if (!this.player) { message += 'The player was not available'; } else if (!this.player[method]) { message += 'The method was not available'; } console.warn(message, 'font-weight: bold', ''); return null; } for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { args[_key2 - 1] = arguments[_key2]; } return (_player = this.player)[method].apply(_player, args); } function isObject(val) { return val !== null && (typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object'; } // Deep comparison of two objects but ignoring // functions, for use in shouldComponentUpdate function isEqual(a, b) { if (typeof a === 'function' && typeof b === 'function') { return true; } if (a instanceof Array && b instanceof Array) { if (a.length !== b.length) { return false; } for (var i = 0; i !== a.length; i++) { if (!isEqual(a[i], b[i])) { return false; } } return true; } if (isObject(a) && isObject(b)) { if (Object.keys(a).length !== Object.keys(b).length) { return false; } var _iteratorNormalCompletion3 = true; var _didIteratorError3 = false; var _iteratorError3 = undefined; try { for (var _iterator3 = Object.keys(a)[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { var key = _step3.value; if (!isEqual(a[key], b[key])) { return false; } } } catch (err) { _didIteratorError3 = true; _iteratorError3 = err; } finally { try { if (!_iteratorNormalCompletion3 && _iterator3['return']) { _iterator3['return'](); } } finally { if (_didIteratorError3) { throw _iteratorError3; } } } return true; } return a === b; } function isMediaStream(url) { return typeof window !== 'undefined' && typeof window.MediaStream !== 'undefined' && url instanceof window.MediaStream; }