UNPKG

@plutotcool/vue-freecaster

Version:

Freecaster video player integration for vue

3 lines (2 loc) 11.3 kB
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("vue");function L(a={}){let{element:t,options:n,player:e,listeners:o={}}=a;const s={...a,destroy:()=>y(s),load:l.shallowRef(),listeners:o,key:l.shallowRef(0),attributes:l.shallowRef({}),element:l.toRef(t),options:l.toRef(n),player:l.isRef(e)?e:l.shallowRef(e)};return x(s),D(s),N(s),R(s),_(s),V(s),U(s),O(s),z(s),G(s),I(s),s}const M={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"},g=["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 B(a,t){a.player.value&&y(a),a.player.value=t,A(a)}function y(a){var r;const t=a.element.value,n=t==null?void 0:t.parentNode,e=n&&Array.from(n.childNodes),o=t&&(e==null?void 0:e.indexOf(t)),s=o!==void 0&&(e==null?void 0:e[o+1]);F(a),(r=a.player.value)==null||r.destroy(),a.player.value=void 0,!(!t||!n||t.parentNode)&&(t.innerHTML="",s?n.insertBefore(t,s):n.appendChild(t))}function A({listeners:a,player:t}){if(t.value)for(const n of g){const e=a==null?void 0:a[b(n)];e&&t.value.addEventListener(n,e)}}function F({listeners:a,player:t}){if(t.value)for(const n of g){const e=a==null?void 0:a[b(n)];e&&t.value.removeEventListener(n,e)}}function I({options:a,...t}){t.player.value&&(t.player.value=void 0);let n;const e=o=>{var s;((s=t.element.value)==null?void 0:s.id)===o.id&&B(t,o)};l.watch([t.player,()=>{var o;return(o=a.value)==null?void 0:o.videoId}],([o,s])=>{o&&s&&o.loadVideo(s)}),l.watch([t.element,t.player,t.load],([o,s,r])=>{o?!s&&r&&r(o):y(t)}),l.onMounted(()=>{(window._fcpr||(window._fcpr=[])).push(e),t.load.value=window.fcload,t.load.value||(n=setInterval(()=>{t.load.value=window.fcload,t.load.value&&clearInterval(n)},50))}),l.onUnmounted(()=>{clearInterval(n);const o=(window._fcpr||(window._fcpr=[])).indexOf(e);o===-1||_fcpr.splice(o,1),l.unref(t.keepAlive)||t.destroy()})}function O({listeners:a,emit:t}){if(t)for(const n of g){const e=b(n),o=r=>t(n,r),s=a[e];a[e]=s?r=>{s(r),o(r)}:o}}function N({listeners:a,player:t,options:n,paused:e}){if(!e)return;const{onPlay:o,onPause:s}=a;let r=!1;const u=()=>{const i=t.value?t.value.paused:!0;r=e.value!==i,e.value=i};a.onPlay=o?i=>{u(),o(i)}:u,a.onPause=s?i=>{u(),s(i)}:u,l.watch([t,()=>{var i;return(i=n.value)==null?void 0:i.videoId}],(i,[c])=>{c||u()}),l.watch([e,t],([i,c])=>{if(r){r=!1;return}i?c==null||c.pause():c==null||c.play()})}function D({listeners:a,player:t,volume:n,muted:e}){let o=!1,s=!1,r=e==null?void 0:e.value,u=n==null?void 0:n.value;const{onVolumechange:i,onFcplayerSrcChanged:c}=a,p=e&&(()=>{o=r!==e.value,e.value=!!r}),v=n&&(()=>{s=u!==n.value,n.value=typeof u=="number"?u:1}),m=()=>{t.value&&(t.value.muted=!!r,t.value.volume=typeof u=="number"?u:1)},h=()=>{var d;((d=t.value)!=null&&d.readyState||0>=HTMLMediaElement.HAVE_CURRENT_DATA)&&(r=t.value.muted,u=t.value.volume,p==null||p(),v==null||v())};a.onFcplayerSrcChanged=c?d=>{m(),c(d)}:m,a.onVolumechange=i?d=>{h(),i(d)}:h,e&&l.watch([e,t],([d,f])=>{if(o){o=!1;return}f&&(f.muted=d)}),n&&l.watch([n,t],([d,f])=>{if(s){s=!1;return}f&&(f.volume=d)})}function R({listeners:a,player:t,options:n,currentTime:e}){if(!e)return;const{onTimeupdate:o}=a;let s=!1;const r=()=>{const u=t.value?t.value.currentTime:0;s=u!==e.value,e.value=u};a.onTimeupdate=o?u=>{r(),o(u)}:r,l.watch([t,()=>{var u;return(u=n.value)==null?void 0:u.videoId}],r),l.watch([e,t],([u,i])=>{if(s){s=!1;return}i&&(i.currentTime=u)})}function _({listeners:a,player:t,fullscreen:n}){if(!n)return;const{onFullscreenenter:e,onFullscreenexit:o}=a;let s=!1;const r=()=>{s=!n.value,n.value=!0},u=()=>{s=!!n.value,n.value=!1};a.onFullscreenenter=e?()=>{r(),e()}:r,a.onFullscreenexit=o?()=>{u(),o()}:u,l.watch([n,t],([i,c])=>{if(s){s=!1;return}i?c==null||c.requestFullscreen():document.fullscreenElement===(c==null?void 0:c.getRootNode())&&document.exitFullscreen()})}function V({player:a,subtitles:t,currentSubtitles:n}){if(!t&&!n)return;t||(t=l.shallowRef([]));const e=()=>{var s,r;const o=(s=a.value)!=null&&s.textTracks.length?Array.from(((r=a.value)==null?void 0:r.textTracks)||[]).filter(u=>u.kind==="subtitles"):[];(t.value.length!==o.length||t.value.some((u,i)=>u!==o[i]))&&(t.value=o),n&&(n.value=o.find(u=>u.mode!=="disabled"))};n&&l.watch(n,o=>{var s;for(const r of t.value)o===r?(o.is_active=!0,o.mode=(s=a.value)!=null&&s.config.subtitles.native?"showing":"hidden"):(r.is_active=!1,r.mode="disabled")}),l.watch(a,(o,s)=>{s==null||s.textTracks.removeEventListener("addtrack",e),s==null||s.textTracks.removeEventListener("removetrack",e),s==null||s.textTracks.removeEventListener("change",e),o==null||o.textTracks.addEventListener("addtrack",e),o==null||o.textTracks.addEventListener("removetrack",e),o==null||o.textTracks.addEventListener("change",e),e()})}function U({listeners:a,player:t,options:n,readyState:e}){if(!e)return;const{onLoadeddata:o}=a,s=()=>{e.value=t.value?t.value.readyState:0};a.onLoadeddata=o?r=>{s(),o(r)}:s,l.watch([t,()=>{var r;return(r=n.value)==null?void 0:r.videoId}],s)}function z({options:a,attributes:t}){l.watch([a],([n])=>{t.value=$(n)},{deep:!0,immediate:!0})}function G({options:a,key:t}){l.watch([()=>{var n;return(n=a.value)==null?void 0:n.videoId}],([n],[e])=>{!n!=!e&&t.value++})}function x({listeners:a,player:t}){const n=()=>{t.value&&!Array.isArray(t.value.config.chapters.list)&&(t.value.config.chapters.list=[])},{onFcplayerSrcChanged:e}=a;a.onFcplayerSrcChanged=e?o=>{n(),e(o)}:n}function $(a={}){return Object.entries(a).reduce((n,[e,o])=>{if(o!==void 0){const s=C[e]||e;n[`data-${s}`]=o}return n},{...M})}function b(a){return`on${a[0].toUpperCase()}${a.slice(1)}`}const E=l.defineComponent({__name:"FreecasterPlayer",props:l.mergeModels({keepAlive:{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:{},destroy:{},destroyModifiers:{}}),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","update:destroy"]),setup(a,{expose:t,emit:n}){const e=a,o=n,s=l.useModel(a,"modelValue"),r=l.useModel(a,"paused"),u=l.useModel(a,"muted"),i=l.useModel(a,"fullscreen"),c=l.useModel(a,"volume"),p=l.useModel(a,"currentTime"),v=l.useModel(a,"readyState"),m=l.useModel(a,"currentSubtitles"),h=l.useModel(a,"subtitles"),d=l.useModel(a,"destroy"),f=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})),w=l.useAttrs(),{element:S,key:Z,attributes:k,destroy:T}=L({keepAlive:l.computed(()=>e.keepAlive),options:f,player:s,paused:r,muted:u,fullscreen:i,volume:c,currentTime:p,readyState:v,emit:o,currentSubtitles:m,subtitles:h});return d.value=T,t({player:s,paused:r,muted:u,fullscreen:i,volume:c,currentTime:p,readyState:v,currentSubtitles:m,subtitles:h,destroy:T}),(J,K)=>(l.openBlock(),l.createElementBlock("div",l.mergeProps({ref_key:"element",ref:S},{...l.unref(w),...l.unref(k)},{class:[l.unref(w).class,l.unref(k).class].filter(Boolean)}),null,16))}}),j="https://player.freecaster.com/freecaster/stable/fcplayer.js",q="FreecasterPlayer",H={async install(a,t={}){let{script:n=!0,component:e=!0}=t;if(n===!0&&(n=j),e===!0&&(e=q),n&&typeof window<"u"&&!window.fcplayer){const o=document.createElement("script");o.async=!0,o.src=n,document.head.appendChild(o)}e&&a.component(e,E)}},P=l.defineComponent({__name:"FreecasterStyle",setup(a){const t=l.ref();let n;l.onMounted(()=>{o()||(n=new MutationObserver(()=>{o()&&e()}),n.observe(document.head,{childList:!0}))}),l.onUnmounted(()=>{e()});function e(){n==null||n.disconnect(),n=void 0}function o(){return!!(t.value||(t.value=Array.from(document.querySelectorAll('link[rel="stylesheet"][href^="https://player.freecaster.com/"]')).map(s=>`@import ${JSON.stringify(s.href)};`).join(` `)))}return(s,r)=>t.value?(l.openBlock(),l.createBlock(l.resolveDynamicComponent("style"),{key:0},{default:l.withCtx(()=>[l.createTextVNode(l.toDisplayString(t.value),1)]),_:1})):l.createCommentVNode("",!0)}});exports.FreecasterPlayer=E;exports.FreecasterPlugin=H;exports.FreecasterStyle=P;exports.usePlayer=L;