UNPKG

videojs-playlist

Version:
149 lines (116 loc) 3.87 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>JSDoc: Source: auto-advance.js</title> <script src="scripts/prettify/prettify.js"> </script> <script src="scripts/prettify/lang-css.js"> </script> <!--[if lt IE 9]> <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> </head> <body> <div id="main"> <h1 class="page-title">Source: auto-advance.js</h1> <section> <article> <pre class="prettyprint source linenums"><code> /** * Validates a number of seconds to use as the auto-advance delay. * * @private * @param {number} s * The number to check * * @return {boolean} * Whether this is a valid second or not */ const validSeconds = s => typeof s === 'number' &amp;&amp; !isNaN(s) &amp;&amp; s >= 0 &amp;&amp; s &lt; Infinity; /** * Resets the auto-advance behavior of a player. * * @param {Player} player * The player to reset the behavior on */ let reset = (player) => { const aa = player.playlist.autoadvance_; if (aa.timeout) { player.clearTimeout(aa.timeout); } if (aa.trigger) { player.off('ended', aa.trigger); } aa.timeout = null; aa.trigger = null; }; /** * Sets up auto-advance behavior on a player. * * @param {Player} player * the current player * * @param {number} delay * The number of seconds to wait before each auto-advance. * * @return {undefined} * Used to short circuit function logic */ const setup = (player, delay) => { reset(player); // Before queuing up new auto-advance behavior, check if `seconds` was // called with a valid value. if (!validSeconds(delay)) { player.playlist.autoadvance_.delay = null; return; } player.playlist.autoadvance_.delay = delay; player.playlist.autoadvance_.trigger = function() { // This calls setup again, which will reset the existing auto-advance and // set up another auto-advance for the next "ended" event. const cancelOnPlay = () => setup(player, delay); // If there is a "play" event while we're waiting for an auto-advance, // we need to cancel the auto-advance. This could mean the user seeked // back into the content or restarted the content. This is reproducible // with an auto-advance > 0. player.one('play', cancelOnPlay); player.playlist.autoadvance_.timeout = player.setTimeout(() => { reset(player); player.off('play', cancelOnPlay); player.playlist.next(); }, delay * 1000); }; player.one('ended', player.playlist.autoadvance_.trigger); }; /** * Used to change the reset function in this module at runtime * This should only be used in tests. * * @param {Function} fn * The function to se the reset to */ const setReset_ = (fn) => { reset = fn; }; export { setReset_, reset, setup }; </code></pre> </article> </section> </div> <nav> <h2><a href="index.html">Home</a></h2><h3>Events</h3><ul><li><a href="global.html#event:playlistsorted">playlistsorted</a></li></ul><h3>Global</h3><ul><li><a href="global.html#clearTracks">clearTracks</a></li><li><a href="global.html#playItem">playItem</a></li><li><a href="global.html#plugin">plugin</a></li><li><a href="global.html#reset">reset</a></li><li><a href="global.html#setReset_">setReset_</a></li><li><a href="global.html#setup">setup</a></li></ul> </nav> <br class="clear"> <footer> Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Thu Jan 25 2018 13:27:02 GMT-0500 (EST) </footer> <script> prettyPrint(); </script> <script src="scripts/linenumber.js"> </script> </body> </html>