149 lines
3.8 KiB
HTML
149 lines
3.8 KiB
HTML
<!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' && !isNaN(s) && s >= 0 && s < 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 Fri Jan 26 2018 12:37:44 GMT-0500 (EST)
|
|
</footer>
|
|
|
|
<script> prettyPrint(); </script>
|
|
<script src="scripts/linenumber.js"> </script>
|
|
</body>
|
|
</html>
|