vue-youtube
Version:
YouTube IFrame Player API wrapper
7 lines (6 loc) • 3.42 kB
JavaScript
/*!
* vue-youtube v1.4.0
* (c) 2019 Antério Vieira
* Released under the MIT License.
*/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e.VueYoutube=e.VueYoutube||{})}(this,function(e){"use strict";"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;var t,i=(function(e,t){e.exports=function(e,t){if(null==t&&(t={fuzzy:!0}),/youtu\.?be/.test(e)){var i,o=[/youtu\.be\/([^#\&\?]{11})/,/\?v=([^#\&\?]{11})/,/\&v=([^#\&\?]{11})/,/embed\/([^#\&\?]{11})/,/\/v\/([^#\&\?]{11})/];for(i=0;i<o.length;++i)if(o[i].test(e))return o[i].exec(e)[1];if(t.fuzzy){var r=e.split(/[\/\&\?=#\.\s]/g);for(i=0;i<r.length;++i)if(/^[^#\&\?]{11}$/.test(r[i]))return r[i]}}return null}}(t={exports:{}},t.exports),t.exports),o=require("youtube-player"),r={name:"Youtube",props:{videoId:String,playerVars:{type:Object,default:function(){return{}}},height:{type:[Number,String],default:360},width:{type:[Number,String],default:640},resize:{type:Boolean,default:!1},resizeDelay:{type:Number,default:100},nocookie:{type:Boolean,default:!1},fitParent:{type:Boolean,default:!1}},data:function(){return{player:{},events:(e={},e[-1]="unstarted",e[1]="playing",e[2]="paused",e[0]="ended",e[3]="buffering",e[5]="cued",e),resizeTimeout:null};var e},computed:{aspectRatio:function(){return this.width/this.height}},methods:{playerReady:function(e){this.$emit("ready",e.target)},playerStateChange:function(e){null!==e.data&&-1!==e.data&&this.$emit(this.events[e.data],e.target)},playerError:function(e){this.$emit("error",e.target)},updatePlayer:function(e){e?1!==this.playerVars.autoplay?this.player.cueVideoById({videoId:e}):this.player.loadVideoById({videoId:e}):this.player.stopVideo()},resizeProportionally:function(){var o=this;this.player.getIframe().then(function(e){var t=o.fitParent?e.parentElement.offsetWidth:e.offsetWidth,i=t/o.aspectRatio;o.player.setSize(t,i)})},onResize:function(){clearTimeout(this.resizeTimeout),this.resizeTimeout=setTimeout(this.resizeProportionally,this.resizeDelay)}},watch:{videoId:"updatePlayer",resize:function(e){e?(window.addEventListener("resize",this.onResize),this.resizeProportionally()):(window.removeEventListener("resize",this.onResize),this.player.setSize(this.width,this.height))},width:function(e){this.player.setSize(e,this.height)},height:function(e){this.player.setSize(this.width,e)}},beforeDestroy:function(){null!==this.player&&this.player.destroy&&(this.player.destroy(),delete this.player),this.resize&&window.removeEventListener("resize",this.onResize)},mounted:function(){window.YTConfig={host:"https://www.youtube.com/iframe_api"};var e=this.nocookie?"https://www.youtube-nocookie.com":"https://www.youtube.com";this.player=o(this.$el,{host:e,width:this.width,height:this.height,videoId:this.videoId,playerVars:this.playerVars}),this.player.on("ready",this.playerReady),this.player.on("stateChange",this.playerStateChange),this.player.on("error",this.playerError),this.resize&&window.addEventListener("resize",this.onResize),this.fitParent&&this.resizeProportionally()},render:function(e){return e("div")}};function n(e){e.prototype.$youtube={getIdFromUrl:i},e.component("youtube",r)}"undefined"!=typeof window&&window.Vue&&window.Vue.use(n);e.default=n,e.Youtube=r,e.getIdFromUrl=i,e.version="1.4.0",Object.defineProperty(e,"__esModule",{value:!0})});