UNPKG

videojs-playlist

Version:
3 lines (2 loc) 5.93 kB
/*! @name videojs-playlist @version 5.2.0 @license Apache-2.0 */ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("video.js")):"function"==typeof define&&define.amd?define(["video.js"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).videojsPlaylist=t(e.videojs)}(this,(function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r=t(e);let n=e=>{const t=e.playlist.autoadvance_;t.timeout&&e.clearTimeout(t.timeout),t.trigger&&e.off("ended",t.trigger),t.abortOrErrorHandler&&e.off(["abort","error"],t.abortOrErrorHandler),t.timeout=null,t.trigger=null,t.abortOrErrorHandler=null};const a=(e,t)=>{var r;(n(e),"number"==typeof(r=t)&&!isNaN(r)&&r>=0&&r<1/0)?(e.playlist.autoadvance_.delay=t,e.playlist.autoadvance_.trigger=function(){const r=()=>a(e,t);e.one("play",r),e.playlist.autoadvance_.timeout=e.setTimeout((()=>{n(e),e.off("play",r),e.one("loadstart",(function(){e.playlist.isAutoadvancing=!0})),e.playlist.next(!0)}),1e3*t)},e.playlist.autoadvance_.abortOrErrorHandler=function(){e.playlist.isAutoadvancing=!1},e.one("ended",e.playlist.autoadvance_.trigger),e.one(["abort","error"],e.playlist.autoadvance_.abortOrErrorHandler)):e.playlist.autoadvance_.delay=null};let l=1;const o=e=>{let t=e;return e&&"object"==typeof e||(t=Object(e),t.originalValue=e),t.playlistItemId_=l++,t},i=e=>e.map(o),s=(e,t)=>{let r=e,n=t;return"object"==typeof e&&(r=e.src),"object"==typeof t&&(n=t.src),/^\/\//.test(r)&&(n=n.slice(n.indexOf("//"))),/^\/\//.test(n)&&(r=r.slice(r.indexOf("//"))),r===n},u=(e,t)=>{for(let r=0;r<e.length;r++){const n=e[r].sources;if(Array.isArray(n))for(let e=0;e<n.length;e++){const a=n[e];if(a&&s(a,t))return r}}return-1};function c(e,t,l=0){let o=null,s=!1;const c=e.playlist=(t,r=0)=>{if(s)throw new Error("do not call playlist() during a playlist change");if(Array.isArray(t)){const n=Array.isArray(o)?o.slice():null;o=i(t),s=!0,e.trigger({type:"duringplaylistchange",nextIndex:r,nextPlaylist:t,previousIndex:c.currentIndex_,previousPlaylist:n||[]}),s=!1,-1!==r&&c.currentItem(r),n&&e.setTimeout((()=>{e.trigger({type:"playlistchange",action:"change"})}),0)}return o.map((e=>e.originalValue||e))};return e.on("loadstart",(()=>{-1===c.currentItem()&&n(e)})),c.currentIndex_=-1,c.player_=e,c.autoadvance_={},c.repeat_=!1,c.currentPlaylistItemId_=null,c.currentItem=(e,t)=>{if(s)return c.currentIndex_;if("number"==typeof e&&c.currentIndex_!==e&&e>=0&&e<o.length)return c.currentIndex_=e,((e,t,r=!1)=>{const n=!e.paused()||e.ended(),l=()=>{e.audioPosterMode()&&e.poster(t.poster||"")};e.trigger("beforeplaylistitem",t.originalValue||t),t.playlistItemId_&&(e.playlist.currentPlaylistItemId_=t.playlistItemId_),e.poster(r?"":t.poster||""),e.off("audiopostermodechange",l),e.one("audiopostermodechange",l),e.src(t.sources),(e=>{const t=e.remoteTextTracks();let r=t&&t.length||0;for(;r--;)e.removeRemoteTextTrack(t[r])})(e),e.ready((()=>{if((t.textTracks||[]).forEach(e.addRemoteTextTrack.bind(e)),e.trigger("playlistitem",t.originalValue||t),n){const t=e.play();void 0!==t&&"function"==typeof t.then&&t.then(null,(e=>{}))}a(e,e.playlist.autoadvance_.delay)}))})(c.player_,o[c.currentIndex_],t),c.currentIndex_;const r=c.player_.currentSrc()||"";if(c.currentPlaylistItemId_){const e=((e,t)=>{for(let r=0;r<e.length;r++)if(e[r].playlistItemId_===t)return r;return-1})(o,c.currentPlaylistItemId_),t=o[e];if(t&&Array.isArray(t.sources)&&u([t],r)>-1)return c.currentIndex_=e,c.currentIndex_;c.currentPlaylistItemId_=null}return c.currentIndex_=c.indexOf(r),c.currentIndex_},c.add=(t,r)=>{if(s)throw new Error("cannot modify a playlist that is currently changing");("number"!=typeof r||r<0||r>o.length)&&(r=o.length),Array.isArray(t)||(t=[t]),o.splice(r,0,...i(t)),e.trigger({type:"playlistchange",action:"add"}),e.trigger({type:"playlistadd",count:t.length,index:r})},c.remove=(t,r=1)=>{if(s)throw new Error("cannot modify a playlist that is currently changing");"number"!=typeof t||t<0||t>o.length||(o.splice(t,r),e.trigger({type:"playlistchange",action:"remove"}),e.trigger({type:"playlistremove",count:r,index:t}))},c.contains=e=>-1!==c.indexOf(e),c.indexOf=e=>{if("string"==typeof e)return u(o,e);const t=Array.isArray(e)?e:e.sources;for(let e=0;e<t.length;e++){const r=t[e];if("string"==typeof r)return u(o,r);if(r.src)return u(o,r.src)}return-1},c.currentIndex=()=>c.currentItem(),c.lastIndex=()=>o.length-1,c.nextIndex=()=>{const e=c.currentItem();if(-1===e)return-1;const t=c.lastIndex();return c.repeat_&&e===t?0:Math.min(e+1,t)},c.previousIndex=()=>{const e=c.currentItem();return-1===e?-1:c.repeat_&&0===e?c.lastIndex():Math.max(e-1,0)},c.first=()=>{if(s)return;const e=c.currentItem(0);if(o.length)return o[e].originalValue||o[e];c.currentIndex_=-1},c.last=()=>{if(s)return;const e=c.currentItem(c.lastIndex());if(o.length)return o[e].originalValue||o[e];c.currentIndex_=-1},c.next=(e=!1)=>{if(s)return;const t=c.nextIndex();if(t!==c.currentIndex_){const r=c.currentItem(t,e);return o[r].originalValue||o[r]}},c.previous=()=>{if(s)return;const e=c.previousIndex();if(e!==c.currentIndex_){const t=c.currentItem(e);return o[t].originalValue||o[t]}},c.autoadvance=e=>{a(c.player_,e)},c.repeat=e=>void 0===e?c.repeat_:"boolean"==typeof e?(c.repeat_=!!e,c.repeat_):void r.default.log.error("videojs-playlist: Invalid value for repeat",e),c.sort=t=>{o.length&&(o.sort(t),s||e.trigger("playlistsorted"))},c.reverse=()=>{o.length&&(o.reverse(),s||e.trigger("playlistsorted"))},c.shuffle=({rest:t}={})=>{let r=0,n=o;t&&(r=c.currentIndex_+1,n=o.slice(r)),n.length<=1||((e=>{let t=-1;const r=e.length-1;for(;++t<e.length;){const n=t+Math.floor(Math.random()*(r-t+1)),a=e[n];e[n]=e[t],e[t]=a}})(n),t&&o.splice(...[r,n.length].concat(n)),s||e.trigger("playlistsorted"))},Array.isArray(t)?c(t,l):o=[],c}const d=function(e,t){c(this,e,t)};return(r.default.registerPlugin||r.default.plugin)("playlist",d),d.VERSION="5.2.0",d}));