videojs-contrib-ads
Version:
A framework that provides common functionality needed by video advertisement libraries working with video.js.
3 lines • 9.44 kB
JavaScript
/*! videojs-contrib-ads - v3.3.11 - 2016-08-03
* Copyright (c) 2016 Brightcove; Licensed */
!function(a,b){"function"==typeof define&&define.amd?define("videojs-contrib-ads",["videojs"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("video.js")):a["videojs-contrib-ads"]=b(videojs)}(this,function(a){!function(a,b,c){"use strict";var d=b.getComponent("Html5").Events,e=function(c){if(!c.ads.cancelPlayTimeout){if(b.browser.IS_IOS){var d=c.currentWidth?c.currentWidth():c.width(),e=c.currentHeight?c.currentHeight():c.height(),f=document.createElement("div");f.style.width=d+"px",f.style.height=e+"px",f.style.background="black",c.el_.parentNode.insertBefore(f,c.el_),c.el_.style.display="none",c.one(["adplaying","adtimeout","adserror","adscanceled","adskip","contentplayback"],function(){c.el_.style.display="block",f.remove()})}c.ads.cancelPlayTimeout=a.setTimeout(function(){c.ads.cancelPlayTimeout=null,c.paused()||c.pause(),c.one("contentplayback",function(){c.paused()&&c.play()})},1)}},f=function(a){var c;c=b.browser.IS_IOS&&a.ads.isLive(a)&&a.seekable().length>0?a.currentTime()-a.seekable().end(0):a.currentTime();var d,e,f=a.$(".vjs-tech"),g=a.remoteTextTracks?a.remoteTextTracks():[],h=[],i={ended:a.ended(),currentSrc:a.currentSrc(),src:a.src(),currentTime:c,type:a.currentType()};for(f&&(i.nativePoster=f.poster,i.style=f.getAttribute("style")),e=g.length;e--;)d=g[e],h.push({track:d,mode:d.mode}),d.mode="disabled";return i.suppressedTracks=h,i},g=function(d,e){if(d.ads.disableNextSnapshotRestore===!0)return void(d.ads.disableNextSnapshotRestore=!1);var f,g=d.$(".vjs-tech"),h=20,i=e.suppressedTracks,j=function(){for(var a=i.length;a--;)f=i[a],f.track.mode=f.mode},k=function(){var a;b.browser.IS_IOS&&d.ads.isLive(d)?e.currentTime<0&&(a=d.seekable().length>0?d.seekable().end(0)+e.currentTime:d.currentTime(),d.currentTime(a)):d.currentTime(e.ended?d.duration():e.currentTime),e.ended||d.play()},l=function(){return d.off("contentcanplay",l),d.ads.tryToResumeTimeout_&&(d.clearTimeout(d.ads.tryToResumeTimeout_),d.ads.tryToResumeTimeout_=null),g=d.el().querySelector(".vjs-tech"),g.readyState>1?k():g.seekable===c?k():g.seekable.length>0?k():void(h--?a.setTimeout(l,50):!function(){try{k()}catch(a){b.log.warn("Failed to resume the content after an advertisement",a)}}())};e.nativePoster&&(g.poster=e.nativePoster),"style"in e&&g.setAttribute("style",e.style||""),d.ads.videoElementRecycled()?(d.one("contentloadedmetadata",j),d.src({src:e.currentSrc,type:e.type}),d.load(),d.one("contentcanplay",l),d.ads.tryToResumeTimeout_=d.setTimeout(l,2e3)):d.ended()&&e.ended||(j(),d.play())},h=function(a){var b=a.$(".vjs-tech");b&&b.removeAttribute("poster")},i={timeout:5e3,prerollTimeout:100,postrollTimeout:100,debug:!1,stitchedAds:!1},j=function(j){var k,l=this,m=b.mergeOptions(i,j);!function(){var a=d.concat(["firstplay","loadedalldata"]),b=function(){return!0},c=function(a,c){c.isImmediatePropagationStopped=b,c.cancelBubble=!0,c.isPropagationStopped=b,l.trigger({type:a+c.type,state:l.ads.state,originalEvent:c})};l.on(a,function(a){if("ad-playback"===l.ads.state)(l.ads.videoElementRecycled()||l.ads.stitchedAds())&&c("ad",a);else if("content-playback"===l.ads.state&&"ended"===a.type)c("content",a);else if("content-resuming"===l.ads.state){if(l.ads.snapshot){if(l.currentSrc()!==l.ads.snapshot.currentSrc){if("loadstart"===a.type)return;return c("content",a)}if(l.ads.snapshot.ended)return"pause"===a.type||"ended"===a.type?void l.addClass("vjs-has-started"):c("content",a)}"playing"!==a.type&&c("content",a)}})}(),l.on(["addurationchange","adcanplay"],function(){l.currentSrc()!==l.ads.snapshot.currentSrc&&l.play()}),l.on("nopreroll",function(){l.ads.nopreroll_=!0}),l.on("nopostroll",function(){l.ads.nopostroll_=!0}),l.ads={state:"content-set",disableNextSnapshotRestore:!1,startLinearAdMode:function(){("preroll?"===l.ads.state||"content-playback"===l.ads.state||"postroll?"===l.ads.state)&&l.trigger("adstart")},endLinearAdMode:function(){"ad-playback"===l.ads.state&&l.trigger("adend")},skipLinearAdMode:function(){"ad-playback"!==l.ads.state&&l.trigger("adskip")},stitchedAds:function(a){return a!==c&&(this._stitchedAds=!!a),this._stitchedAds},videoElementRecycled:function(){var a,b;return this.snapshot?(a=l.src()!==this.snapshot.src,b=l.currentSrc()!==this.snapshot.currentSrc,a||b):!1},isLive:function(a){return a.duration()===1/0?!0:"8"===b.browser.IOS_VERSION&&0===a.duration()?!0:!1},shouldPlayContentBehindAd:function(a){return!b.browser.IS_IOS&&!b.browser.IS_ANDROID&&a.duration()===1/0}},l.ads.stitchedAds(m.stitchedAds),k=function(c){var d={"content-set":{events:{adscanceled:function(){this.state="content-playback"},adsready:function(){this.state="ads-ready"},play:function(){this.state="ads-ready?",e(l),h(l)},adserror:function(){this.state="content-playback"},adskip:function(){this.state="content-playback"}}},"ads-ready":{events:{play:function(){this.state="preroll?",e(l)},adskip:function(){this.state="content-playback"},adserror:function(){this.state="content-playback"}}},"preroll?":{enter:function(){l.ads.nopreroll_?(l.trigger("readyforpreroll"),a.setTimeout(function(){l.trigger("nopreroll")},1)):(l.addClass("vjs-ad-loading"),l.ads.adTimeoutTimeout=a.setTimeout(function(){l.trigger("adtimeout")},m.prerollTimeout),l.trigger("readyforpreroll"))},leave:function(){a.clearTimeout(l.ads.adTimeoutTimeout),l.removeClass("vjs-ad-loading")},events:{play:function(){e(l)},adstart:function(){this.state="ad-playback"},adskip:function(){this.state="content-playback"},adtimeout:function(){this.state="content-playback"},adserror:function(){this.state="content-playback"},nopreroll:function(){this.state="content-playback"}}},"ads-ready?":{enter:function(){l.addClass("vjs-ad-loading"),l.ads.adTimeoutTimeout=a.setTimeout(function(){l.trigger("adtimeout")},m.timeout)},leave:function(){a.clearTimeout(l.ads.adTimeoutTimeout),l.removeClass("vjs-ad-loading")},events:{play:function(){e(l)},adscanceled:function(){this.state="content-playback"},adsready:function(){this.state="preroll?"},adskip:function(){this.state="content-playback"},adtimeout:function(){this.state="content-playback"},adserror:function(){this.state="content-playback"}}},"ad-playback":{enter:function(){l.ads.shouldPlayContentBehindAd(l)||(this.snapshot=f(l)),l.ads.shouldPlayContentBehindAd(l)&&(this.preAdVolume_=l.volume(),l.volume(0)),l.addClass("vjs-ad-playing"),h(l),l.ads.cancelPlayTimeout&&a.setTimeout(function(){a.clearTimeout(l.ads.cancelPlayTimeout),l.ads.cancelPlayTimeout=null},1)},leave:function(){l.removeClass("vjs-ad-playing"),l.ads.shouldPlayContentBehindAd(l)||g(l,this.snapshot),l.ads.shouldPlayContentBehindAd(l)&&l.volume(this.preAdVolume_)},events:{adend:function(){this.state="content-resuming"},adserror:function(){this.state="content-resuming",l.trigger("adend")}}},"content-resuming":{enter:function(){this.snapshot&&this.snapshot.ended&&(a.clearTimeout(l.ads._fireEndedTimeout),l.ads._fireEndedTimeout=a.setTimeout(function(){l.trigger("ended")},1e3))},leave:function(){a.clearTimeout(l.ads._fireEndedTimeout)},events:{contentupdate:function(){this.state="content-set"},contentresumed:function(){this.state="content-playback"},playing:function(){this.state="content-playback"},ended:function(){this.state="content-playback"}}},"postroll?":{enter:function(){this.snapshot=f(l),l.ads.nopostroll_?a.setTimeout(function(){l.ads.state="content-resuming",l.trigger("ended")},1):(l.addClass("vjs-ad-loading"),l.ads.adTimeoutTimeout=a.setTimeout(function(){l.trigger("adtimeout")},m.postrollTimeout))},leave:function(){a.clearTimeout(l.ads.adTimeoutTimeout),l.removeClass("vjs-ad-loading")},events:{adstart:function(){this.state="ad-playback"},adskip:function(){this.state="content-resuming",a.setTimeout(function(){l.trigger("ended")},1)},adtimeout:function(){this.state="content-resuming",a.setTimeout(function(){l.trigger("ended")},1)},adserror:function(){this.state="content-resuming",a.setTimeout(function(){l.trigger("ended")},1)},contentupdate:function(){this.state="ads-ready?"}}},"content-playback":{enter:function(){l.ads.cancelPlayTimeout&&(a.clearTimeout(l.ads.cancelPlayTimeout),l.ads.cancelPlayTimeout=null),l.trigger({type:"contentplayback",triggerevent:l.ads.triggerevent})},events:{adsready:function(){l.trigger("readyforpreroll")},adstart:function(){this.state="ad-playback"},contentupdate:function(){l.paused()?this.state="content-set":this.state="ads-ready?",this.snapshot&&this.snapshot.ended&&(this.snapshot=null)},contentended:function(){l.ads.snapshot&&l.ads.snapshot.ended||(this.state="postroll?")},play:function(){l.currentSrc()!==l.ads.contentSrc&&e(l)}}}};!function(a){var e=function(){};((d[a].events||{})[c.type]||e).apply(l.ads),a!==l.ads.state&&(l.ads.triggerevent=c.type,(d[a].leave||e).apply(l.ads),(d[l.ads.state].enter||e).apply(l.ads),m.debug&&b.log("ads",l.ads.triggerevent+" triggered: "+a+" -> "+l.ads.state))}(l.ads.state)},l.on(d.concat(["adtimeout","contentupdate","contentplaying","contentended","contentresumed","adsready","adserror","adscanceled","adstart","adend","adskip","nopreroll"]),k),l.ads.contentSrc=l.currentSrc(),function(){var b=function(){var a;"ad-playback"!==l.ads.state&&(a=l.currentSrc(),a!==l.ads.contentSrc&&(l.trigger({type:"contentupdate",oldValue:l.ads.contentSrc,newValue:a}),l.ads.contentSrc=a))};l.on("loadstart",b),a.setTimeout(b,1)}(),l.paused()||k({type:"play"})};b.plugin("ads",j)}(window,a)});