UNPKG

@plutotcool/vue-freecaster

Version:

Freecaster video player integration for vue

2 lines (1 loc) 10.7 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(t={}){const{element:n,options:s,enabled:e,player:a,listeners:o={}}=t,i={...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(i),R(i),I(i),N(i),V(i),D(i),x(i),O(i),z(i),G(i),A(i),i}const S={class:"freecaster-player","data-playsinline":"true"},B={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"},w=["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 C(t,n){b(t),t.player.value=n,M(t)}function b(t){var i;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]);F(t),(i=t.player.value)==null||i.destroy(),t.player.value=void 0,!(!n||!s||n.parentNode)&&(o?s.insertBefore(n,o):s.appendChild(n))}function M({listeners:t,player:n}){if(n.value)for(const s of w){const e=t==null?void 0:t[y(s)];e&&n.value.addEventListener(s,e)}}function F({listeners:t,player:n}){if(n.value)for(const s of w){const e=t==null?void 0:t[y(s)];e&&n.value.removeEventListener(s,e)}}function A({enabled:t,options:n,...s}){const e=a=>{var o;t.value&&((o=s.element.value)==null?void 0:o.id)===a.id&&C(s,a)};l.watch([t,()=>{var a;return(a=n.value)==null?void 0:a.videoId}],([a,o])=>{var i;o?a&&((i=s.player.value)==null||i.loadVideo(o)):b(s)}),l.watch([t,s.element],([a,o])=>{(!a||!o)&&b(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),b(s)})}function O({listeners:t,emit:n}){if(n)for(const s of w){const e=y(s),a=i=>n(s,i),o=t[e];t[e]=o?i=>{o(i),a(i)}:a}}function I({listeners:t,player:n,options:s,paused:e}){if(!e)return;const{onPlay:a,onPause:o}=t;let i=!1;const r=()=>{const u=n.value?n.value.paused:!0;i=e.value!==u,e.value=u};t.onPlay=a?u=>{r(),a(u)}:r,t.onPause=o?u=>{r(),o(u)}:r,l.watch([n,()=>{var u;return(u=s.value)==null?void 0:u.videoId}],(u,[c])=>{c||r()}),l.watch([e,n],([u,c])=>{if(i){i=!1;return}u?c==null||c.pause():c==null||c.play()})}function R({listeners:t,player:n,volume:s,muted:e}){let a=!1,o=!1,i=e==null?void 0:e.value,r=s==null?void 0:s.value;const{onVolumechange:u,onFcplayerSrcChanged:c}=t,p=e&&(()=>{a=i!==e.value,e.value=!!i}),m=s&&(()=>{o=r!==s.value,s.value=typeof r=="number"?r:1}),g=()=>{n.value&&(n.value.muted=!!i,n.value.volume=typeof r=="number"?r:1)},v=()=>{var d;((d=n.value)!=null&&d.readyState||0>=HTMLMediaElement.HAVE_CURRENT_DATA)&&(i=n.value.muted,r=n.value.volume,p==null||p(),m==null||m())};t.onFcplayerSrcChanged=c?d=>{g(),c(d)}:g,t.onVolumechange=u?d=>{v(),u(d)}:v,e&&l.watch([e,n],([d,h])=>{if(a){a=!1;return}h&&(h.muted=d)}),s&&l.watch([s,n],([d,h])=>{if(o){o=!1;return}h&&(h.volume=d)})}function N({listeners:t,player:n,options:s,currentTime:e}){if(!e)return;const{onTimeupdate:a}=t;let o=!1;const i=()=>{const r=n.value?n.value.currentTime:0;o=r!==e.value,e.value=r};t.onTimeupdate=a?r=>{i(),a(r)}:i,l.watch([n,()=>{var r;return(r=s.value)==null?void 0:r.videoId}],i),l.watch([e,n],([r,u])=>{if(o){o=!1;return}u&&(u.currentTime=r)})}function V({listeners:t,player:n,fullscreen:s}){if(!s)return;const{onFullscreenenter:e,onFullscreenexit:a}=t;let o=!1;const i=()=>{o=!s.value,s.value=!0},r=()=>{o=!!s.value,s.value=!1};t.onFullscreenenter=e?()=>{i(),e()}:i,t.onFullscreenexit=a?()=>{r(),a()}:r,l.watch([s,n],([u,c])=>{if(o){o=!1;return}u?c==null||c.requestFullscreen():document==null||document.exitFullscreen()})}function D({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,i)=>o!==a[i]))&&(n.value=a),s&&(s.value=a.find(o=>o.mode!=="disabled"))};s&&l.watch(s,a=>{var o;for(const i of n.value)a===i?(a.is_active=!0,a.mode=(o=t.value)!=null&&o.config.subtitles.native?"showing":"hidden"):(i.is_active=!1,i.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 x({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?i=>{o(),a(i)}:o,l.watch([n,()=>{var i;return(i=s.value)==null?void 0:i.videoId}],o)}function z({enabled:t,options:n,attributes:s}){l.watch([t,n],([e,a])=>{s.value=e?_(a):{}},{deep:!0,immediate:!0})}function G({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 U({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 _(t={}){return Object.entries(t).reduce((s,[e,a])=>{const o=B[e]||e;return s[`data-${o}`]=a,s},{...S})}function y(t){return`on${t[0].toUpperCase()}${t.slice(1)}`}const T=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"),i=l.useModel(t,"paused"),r=l.useModel(t,"muted"),u=l.useModel(t,"fullscreen"),c=l.useModel(t,"volume"),p=l.useModel(t,"currentTime"),m=l.useModel(t,"readyState"),g=l.useModel(t,"currentSubtitles"),v=l.useModel(t,"subtitles");n({player:o,paused:i,muted:r,fullscreen:u,volume:c,currentTime:p,readyState:m,currentSubtitles:g,subtitles:v});const d=l.computed(()=>e.enabled),h=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})),E=l.useAttrs(),{element:q,key:Z,attributes:L}=k({enabled:d,options:h,player:o,paused:i,muted:r,fullscreen:u,volume:c,currentTime:p,readyState:m,emit:a,currentSubtitles:g,subtitles:v});return(H,K)=>(l.openBlock(),l.createElementBlock(l.Fragment,null,[l.createElementVNode("div",l.mergeProps({ref_key:"element",ref:q},{...l.unref(E),...l.unref(L)},{class:[l.unref(E).class,l.unref(L).class].filter(Boolean)}),null,16),l.renderSlot(H.$slots,"default",l.normalizeProps(l.guardReactiveProps({player:o.value,paused:i.value,muted:r.value,fullscreen:u.value,volume:c.value,currentTime:p.value,readyState:m.value,currentSubtitles:g.value,subtitles:v.value})))],64))}}),P="https://player.freecaster.com/freecaster/stable/fcplayer.js",j="FreecasterPlayer",$={async install(t,n={}){let{script:s=!0,component:e=!0}=n;if(s===!0&&(s=P),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,T)}};f.FreecasterPlayer=T,f.FreecasterPlugin=$,f.usePlayer=k,Object.defineProperty(f,Symbol.toStringTag,{value:"Module"})});