@plutotcool/vue-freecaster
Version:
Freecaster video player integration for vue
2 lines (1 loc) • 10.5 kB
JavaScript
;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("vue");function T(t={}){const{element:n,options:s,enabled:e,player:a,listeners:o={}}=t,u={...t,listeners:o,key:l.shallowRef(0),attributes:l.shallowRef({}),element:l.toRef(n),options:l.toRef(s),enabled:l.toRef(e),player:l.isRef(a)?a:l.shallowRef(a)};return _(u),N(u),R(u),D(u),V(u),x(u),z(u),I(u),G(u),U(u),O(u),u}const B={class:"freecaster-player","data-playsinline":"true"},C={videoId:"video-id",watermarkEnabled:"watermark.enabled",thumbnailsSrc:"thumbnails.src",subtitlesDefaultLang:"subtitles.default_lang",subtitlesLang:"subtitles.lang",subtitlesNative:"subtitles.native",floatOnScroll:"float_on_scroll",chaptersEnabled:"chapters.enabled",chaptersStyle:"chapters.style",chaptersList:"chapters.list",audioOnly:"audio_only",trackersGaEnabled:"trackers.ga.enabled",trackersGaTagIds:"trackers.ga.tag_ids string",speedOptions:"speed.options",speedLabels:"speed.labels"},b=["abort","canplay","canplaythrough","durationchange","emptied","encrypted","ended","error","load","loadeddata","loadedmetadata","loadstart","pause","play","playing","progress","ratechange","seeked","seeking","stalled","suspend","timeupdate","volumechange","waiting","waitingforkey","enterpictureinpicture","leavepictureinpicture","resize","fullscreenenter","fullscreenexit","viewenter","viewleave","fcplayerDestroy","fcplayerSrcChanged","fcplayerConfigChanged","fcplayerCountdownTick","fcplayerCountdownEnabled","fcplayerCountdownDisabled","fcplayerCountdownZero"];function M(t,n){g(t),t.player.value=n,F(t)}function g(t){var u;const n=t.element.value,s=n==null?void 0:n.parentNode,e=s&&Array.from(s.childNodes),a=n&&(e==null?void 0:e.indexOf(n)),o=a!==void 0&&(e==null?void 0:e[a+1]);A(t),(u=t.player.value)==null||u.destroy(),t.player.value=void 0,!(!n||!s||n.parentNode)&&(o?s.insertBefore(n,o):s.appendChild(n))}function F({listeners:t,player:n}){if(n.value)for(const s of b){const e=t==null?void 0:t[w(s)];e&&n.value.addEventListener(s,e)}}function A({listeners:t,player:n}){if(n.value)for(const s of b){const e=t==null?void 0:t[w(s)];e&&n.value.removeEventListener(s,e)}}function O({enabled:t,options:n,...s}){const e=a=>{var o;t.value&&((o=s.element.value)==null?void 0:o.id)===a.id&&M(s,a)};l.watch([t,()=>{var a;return(a=n.value)==null?void 0:a.videoId}],([a,o])=>{var u;o?a&&((u=s.player.value)==null||u.loadVideo(o)):g(s)}),l.watch([t,s.element],([a,o])=>{(!a||!o)&&g(s)}),l.onMounted(()=>{(window._fcpr||(window._fcpr=[])).push(e)}),l.onUnmounted(()=>{const a=(window._fcpr||(window._fcpr=[])).indexOf(e);a===-1||_fcpr.splice(a,1),g(s)})}function I({listeners:t,emit:n}){if(n)for(const s of b){const e=w(s),a=u=>n(s,u),o=t[e];t[e]=o?u=>{o(u),a(u)}:a}}function R({listeners:t,player:n,options:s,paused:e}){if(!e)return;const{onPlay:a,onPause:o}=t;let u=!1;const r=()=>{const i=n.value?n.value.paused:!0;u=e.value!==i,e.value=i};t.onPlay=a?i=>{r(),a(i)}:r,t.onPause=o?i=>{r(),o(i)}:r,l.watch([n,()=>{var i;return(i=s.value)==null?void 0:i.videoId}],(i,[c])=>{c||r()}),l.watch([e,n],([i,c])=>{if(u){u=!1;return}i?c==null||c.pause():c==null||c.play()})}function N({listeners:t,player:n,volume:s,muted:e}){let a=!1,o=!1,u=e==null?void 0:e.value,r=s==null?void 0:s.value;const{onVolumechange:i,onFcplayerSrcChanged:c}=t,f=e&&(()=>{a=u!==e.value,e.value=!!u}),v=s&&(()=>{o=r!==s.value,s.value=typeof r=="number"?r:1}),m=()=>{n.value&&(n.value.muted=!!u,n.value.volume=typeof r=="number"?r:1)},h=()=>{var d;((d=n.value)!=null&&d.readyState||0>=HTMLMediaElement.HAVE_CURRENT_DATA)&&(u=n.value.muted,r=n.value.volume,f==null||f(),v==null||v())};t.onFcplayerSrcChanged=c?d=>{m(),c(d)}:m,t.onVolumechange=i?d=>{h(),i(d)}:h,e&&l.watch([e,n],([d,p])=>{if(a){a=!1;return}p&&(p.muted=d)}),s&&l.watch([s,n],([d,p])=>{if(o){o=!1;return}p&&(p.volume=d)})}function D({listeners:t,player:n,options:s,currentTime:e}){if(!e)return;const{onTimeupdate:a}=t;let o=!1;const u=()=>{const r=n.value?n.value.currentTime:0;o=r!==e.value,e.value=r};t.onTimeupdate=a?r=>{u(),a(r)}:u,l.watch([n,()=>{var r;return(r=s.value)==null?void 0:r.videoId}],u),l.watch([e,n],([r,i])=>{if(o){o=!1;return}i&&(i.currentTime=r)})}function V({listeners:t,player:n,fullscreen:s}){if(!s)return;const{onFullscreenenter:e,onFullscreenexit:a}=t;let o=!1;const u=()=>{o=!s.value,s.value=!0},r=()=>{o=!!s.value,s.value=!1};t.onFullscreenenter=e?()=>{u(),e()}:u,t.onFullscreenexit=a?()=>{r(),a()}:r,l.watch([s,n],([i,c])=>{if(o){o=!1;return}i?c==null||c.requestFullscreen():document==null||document.exitFullscreen()})}function x({player:t,subtitles:n,currentSubtitles:s}){if(!n&&!s)return;n||(n=l.shallowRef([]));const e=()=>{const a=t!=null&&t.value.textTracks.length?Array.from(t==null?void 0:t.value.textTracks).filter(o=>o.kind==="subtitles"):[];(n.value.length!==a.length||n.value.some((o,u)=>o!==a[u]))&&(n.value=a),s&&(s.value=a.find(o=>o.mode!=="disabled"))};s&&l.watch(s,a=>{var o;for(const u of n.value)a===u?(a.is_active=!0,a.mode=(o=t.value)!=null&&o.config.subtitles.native?"showing":"hidden"):(u.is_active=!1,u.mode="disabled")}),l.watch(t,(a,o)=>{o==null||o.textTracks.removeEventListener("addtrack",e),o==null||o.textTracks.removeEventListener("removetrack",e),o==null||o.textTracks.removeEventListener("change",e),a==null||a.textTracks.addEventListener("addtrack",e),a==null||a.textTracks.addEventListener("removetrack",e),a==null||a.textTracks.addEventListener("change",e),e()})}function z({listeners:t,player:n,options:s,readyState:e}){if(!e)return;const{onLoadeddata:a}=t,o=()=>{e.value=n.value?n.value.readyState:0};t.onLoadeddata=a?u=>{o(),a(u)}:o,l.watch([n,()=>{var u;return(u=s.value)==null?void 0:u.videoId}],o)}function G({enabled:t,options:n,attributes:s}){l.watch([t,n],([e,a])=>{s.value=e?P(a):{}},{deep:!0,immediate:!0})}function U({enabled:t,options:n,key:s}){l.watch([()=>{var e;return(e=n.value)==null?void 0:e.videoId},t],([e,a],[o])=>{(!a||!e!=!o)&&s.value++})}function _({listeners:t,player:n}){const s=()=>{n.value&&!Array.isArray(n.value.config.chapters.list)&&(n.value.config.chapters.list=[])},{onFcplayerSrcChanged:e}=t;t.onFcplayerSrcChanged=e?a=>{s(),e(a)}:s}function P(t={}){return Object.entries(t).reduce((s,[e,a])=>{const o=C[e]||e;return s[`data-${o}`]=a,s},{...B})}function w(t){return`on${t[0].toUpperCase()}${t.slice(1)}`}const E=l.defineComponent({__name:"FreecasterPlayer",props:l.mergeModels({enabled:{type:Boolean},videoId:{},height:{},width:{},preload:{},volume:{},autoplay:{type:Boolean},autopause:{type:Boolean},controls:{type:Boolean},muted:{type:Boolean},loop:{type:Boolean},cast:{type:Boolean},playsinline:{type:Boolean},watermarkEnabled:{type:Boolean},lang:{},stats:{type:Boolean},noads:{type:Boolean},thumbnailsSrc:{},poster:{},stretching:{type:[String,Boolean]},subtitlesDefaultLang:{},subtitlesLang:{},subtitlesNative:{type:Boolean},floatOnScroll:{type:Boolean},multiplay:{type:Boolean},chaptersEnabled:{type:Boolean},chaptersStyle:{},chaptersList:{},audioOnly:{type:Boolean},trackersGaEnabled:{type:Boolean},trackersGaTagIds:{},speedOptions:{},speedLabels:{}},{modelValue:{},modelModifiers:{},paused:{type:Boolean,default:!0},pausedModifiers:{},muted:{type:Boolean,default:!1},mutedModifiers:{},fullscreen:{type:Boolean,default:!1},fullscreenModifiers:{},volume:{default:1},volumeModifiers:{},currentTime:{default:0},currentTimeModifiers:{},readyState:{default:0},readyStateModifiers:{},currentSubtitles:{},currentSubtitlesModifiers:{},subtitles:{default:[]},subtitlesModifiers:{}}),emits:l.mergeModels(["abort","canplay","canplaythrough","durationchange","emptied","encrypted","ended","error","load","loadeddata","loadedmetadata","loadstart","pause","play","playing","progress","ratechange","seeked","seeking","stalled","suspend","timeupdate","volumechange","waiting","waitingforkey","enterpictureinpicture","leavepictureinpicture","resize","fullscreenenter","fullscreenexit","viewenter","viewleave","fcplayerDestroy","fcplayerSrcChanged","fcplayerConfigChanged","fcplayerCountdownTick","fcplayerCountdownEnabled","fcplayerCountdownDisabled","fcplayerCountdownZero"],["update:modelValue","update:paused","update:muted","update:fullscreen","update:volume","update:currentTime","update:readyState","update:currentSubtitles","update:subtitles"]),setup(t,{expose:n,emit:s}){const e=t;l.useSlots();const a=s,o=l.useModel(t,"modelValue"),u=l.useModel(t,"paused"),r=l.useModel(t,"muted"),i=l.useModel(t,"fullscreen"),c=l.useModel(t,"volume"),f=l.useModel(t,"currentTime"),v=l.useModel(t,"readyState"),m=l.useModel(t,"currentSubtitles"),h=l.useModel(t,"subtitles");n({player:o,paused:u,muted:r,fullscreen:i,volume:c,currentTime:f,readyState:v,currentSubtitles:m,subtitles:h});const d=l.computed(()=>e.enabled),p=l.computed(()=>({videoId:e.videoId,height:e.height,width:e.width,preload:e.preload,volume:e.volume,autoplay:e.autoplay,autopause:e.autopause,controls:e.controls,muted:e.muted,loop:e.loop,cast:e.cast,playsinline:e.playsinline,watermarkEnabled:e.watermarkEnabled,lang:e.lang,stats:e.stats,noads:e.noads,thumbnailsSrc:e.thumbnailsSrc,poster:e.poster,stretching:e.stretching,subtitlesDefaultLang:e.subtitlesDefaultLang,subtitlesLang:e.subtitlesLang,subtitlesNative:e.subtitlesNative,floatOnScroll:e.floatOnScroll,multiplay:e.multiplay,chaptersEnabled:e.chaptersEnabled,chaptersStyle:e.chaptersStyle,chaptersList:e.chaptersList,audioOnly:e.audioOnly,trackersGaEnabled:e.trackersGaEnabled,trackersGaTagIds:e.trackersGaTagIds,speedOptions:e.speedOptions,speedLabels:e.speedLabels})),y=l.useAttrs(),{element:L,key:H,attributes:k}=T({enabled:d,options:p,player:o,paused:u,muted:r,fullscreen:i,volume:c,currentTime:f,readyState:v,emit:a,currentSubtitles:m,subtitles:h});return(S,Z)=>(l.openBlock(),l.createElementBlock(l.Fragment,null,[l.createElementVNode("div",l.mergeProps({ref_key:"element",ref:L},{...l.unref(y),...l.unref(k)},{class:[l.unref(y).class,l.unref(k).class].filter(Boolean)}),null,16),l.renderSlot(S.$slots,"default",l.normalizeProps(l.guardReactiveProps({player:o.value,paused:u.value,muted:r.value,fullscreen:i.value,volume:c.value,currentTime:f.value,readyState:v.value,currentSubtitles:m.value,subtitles:h.value})))],64))}}),$="https://player.freecaster.com/freecaster/stable/fcplayer.js",j="FreecasterPlayer",q={async install(t,n={}){let{script:s=!0,component:e=!0}=n;if(s===!0&&(s=$),e===!0&&(e=j),s&&typeof window<"u"&&!window.fcplayer){const a=document.createElement("script");a.async=!0,a.src=s,document.head.appendChild(a)}e&&t.component(e,E)}};exports.FreecasterPlayer=E;exports.FreecasterPlugin=q;exports.usePlayer=T;