UNPKG

@plutotcool/vue-freecaster

Version:

Freecaster video player integration for vue

3 lines (2 loc) 11.5 kB
(function(f,l){typeof exports=="object"&&typeof module<"u"?l(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],l):(f=typeof globalThis<"u"?globalThis:f||self,l(f.VueFreecaster={},f.Vue))})(this,function(f,l){"use strict";function k(a={}){let{element:t,options:n,player:e,listeners:o={}}=a;const s={...a,destroy:()=>b(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 j(s),D(s),N(s),R(s),V(s),_(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"},y=["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&&b(a),a.player.value=t,A(a)}function b(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 y){const e=a==null?void 0:a[w(n)];e&&t.value.addEventListener(n,e)}}function F({listeners:a,player:t}){if(t.value)for(const n of y){const e=a==null?void 0:a[w(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):b(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 y){const e=w(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 i=()=>{const c=t.value?t.value.paused:!0;r=e.value!==c,e.value=c};a.onPlay=o?c=>{i(),o(c)}:i,a.onPause=s?c=>{i(),s(c)}:i,l.watch([t,()=>{var c;return(c=n.value)==null?void 0:c.videoId}],(c,[d])=>{d||i()}),l.watch([e,t],([c,d])=>{if(r){r=!1;return}c?d==null||d.pause():d==null||d.play()})}function D({listeners:a,player:t,volume:n,muted:e}){let o=!1,s=!1,r=e==null?void 0:e.value,i=n==null?void 0:n.value;const{onVolumechange:c,onFcplayerSrcChanged:d}=a,m=e&&(()=>{o=r!==e.value,e.value=!!r}),h=n&&(()=>{s=i!==n.value,n.value=typeof i=="number"?i:1}),g=()=>{t.value&&(t.value.muted=!!r,t.value.volume=typeof i=="number"?i:1)},v=()=>{var u;((u=t.value)!=null&&u.readyState||0>=HTMLMediaElement.HAVE_CURRENT_DATA)&&(r=t.value.muted,i=t.value.volume,m==null||m(),h==null||h())};a.onFcplayerSrcChanged=d?u=>{g(),d(u)}:g,a.onVolumechange=c?u=>{v(),c(u)}:v,e&&l.watch([e,t],([u,p])=>{if(o){o=!1;return}p&&(p.muted=u)}),n&&l.watch([n,t],([u,p])=>{if(s){s=!1;return}p&&(p.volume=u)})}function R({listeners:a,player:t,options:n,currentTime:e}){if(!e)return;const{onTimeupdate:o}=a;let s=!1;const r=()=>{const i=t.value?t.value.currentTime:0;s=i!==e.value,e.value=i};a.onTimeupdate=o?i=>{r(),o(i)}:r,l.watch([t,()=>{var i;return(i=n.value)==null?void 0:i.videoId}],r),l.watch([e,t],([i,c])=>{if(s){s=!1;return}c&&(c.currentTime=i)})}function V({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},i=()=>{s=!!n.value,n.value=!1};a.onFullscreenenter=e?()=>{r(),e()}:r,a.onFullscreenexit=o?()=>{i(),o()}:i,l.watch([n,t],([c,d])=>{if(s){s=!1;return}c?d==null||d.requestFullscreen():document.fullscreenElement===(d==null?void 0:d.getRootNode())&&document.exitFullscreen()})}function _({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(i=>i.kind==="subtitles"):[];(t.value.length!==o.length||t.value.some((i,c)=>i!==o[c]))&&(t.value=o),n&&(n.value=o.find(i=>i.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 j({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 w(a){return`on${a[0].toUpperCase()}${a.slice(1)}`}const T=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"),i=l.useModel(a,"muted"),c=l.useModel(a,"fullscreen"),d=l.useModel(a,"volume"),m=l.useModel(a,"currentTime"),h=l.useModel(a,"readyState"),g=l.useModel(a,"currentSubtitles"),v=l.useModel(a,"subtitles"),u=l.useModel(a,"destroy"),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})),L=l.useAttrs(),{element:Z,key:J,attributes:E,destroy:S}=k({keepAlive:l.computed(()=>e.keepAlive),options:p,player:s,paused:r,muted:i,fullscreen:c,volume:d,currentTime:m,readyState:h,emit:o,currentSubtitles:g,subtitles:v});return u.value=S,t({player:s,paused:r,muted:i,fullscreen:c,volume:d,currentTime:m,readyState:h,currentSubtitles:g,subtitles:v,destroy:S}),(K,Q)=>(l.openBlock(),l.createElementBlock("div",l.mergeProps({ref_key:"element",ref:Z},{...l.unref(L),...l.unref(E)},{class:[l.unref(L).class,l.unref(E).class].filter(Boolean)}),null,16))}}),x="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=x),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,T)}},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)}});f.FreecasterPlayer=T,f.FreecasterPlugin=H,f.FreecasterStyle=P,f.usePlayer=k,Object.defineProperty(f,Symbol.toStringTag,{value:"Module"})});