{"mappings":"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","sources":["src/video/video.ads.js"],"sourcesContent":["/**\n * Basic Ad support plugin for video.js.\n *\n * Common code to support ad integrations.\n */\n(function(window, document, vjs, undefined) {\n \"use strict\";\n\n var\n\n /**\n * Copies properties from one or more objects onto an original.\n */\n extend = function(obj /*, arg1, arg2, ... */) {\n var arg, i, k;\n for (i=1; i 0) {\n // if some period of the video is seekable, resume playback\n resume();\n return;\n }\n\n // delay a bit and then check again unless we're out of attempts\n if (attempts--) {\n setTimeout(tryToResume, 50);\n }\n };\n\n if (snapshot.nativePoster) {\n tech.poster = snapshot.nativePoster;\n }\n\n // with a custom ad display or burned-in ads, the content player state\n // hasn't been modified and so no restoration is required\n if (player.currentSrc() === snapshot.src) {\n player.play();\n return;\n }\n\n player.src(snapshot.src);\n // safari requires a call to `load` to pick up a changed source\n player.load();\n\n player.one('loadedmetadata', tryToResume);\n },\n\n /**\n * Remove the poster attribute from the video element tech, if present. When\n * reusing a video element for multiple videos, the poster image will briefly\n * reappear while the new source loads. Removing the attribute ahead of time\n * prevents the poster from showing up between videos.\n * @param {object} player The videojs player object\n */\n removeNativePoster = function(player) {\n var tech = player.el().querySelector('.vjs-tech');\n if (tech) {\n tech.removeAttribute('poster');\n }\n },\n\n // ---------------------------------------------------------------------------\n // Ad Framework\n // ---------------------------------------------------------------------------\n\n // default framework settings\n defaults = {\n // maximum amount of time in ms to wait to receive `adsready` from the ad\n // implementation after play has been requested. Ad implementations are\n // expected to load any dynamic libraries and make any requests to determine\n // ad policies for a video during this time.\n timeout: 5000,\n\n // maximum amount of time in ms to wait for the ad implementation to start\n // linear ad mode after `readyforpreroll` has fired. This is in addition to\n // the standard timeout.\n prerollTimeout: 100,\n\n // when truthy, instructs the plugin to output additional information about\n // plugin state to the video.js log. On most devices, the video.js log is\n // the same as the developer console.\n debug: false\n },\n\n adFramework = function(options) {\n var\n player = this,\n\n // merge options and defaults\n settings = extend({}, defaults, options || {}),\n\n fsmHandler;\n\n // replace the ad initializer with the ad namespace\n player.ads = {\n state: 'content-set',\n\n startLinearAdMode: function() {\n player.trigger('adstart');\n },\n\n endLinearAdMode: function() {\n player.trigger('adend');\n }\n };\n\n fsmHandler = function(event) {\n\n // Ad Playback State Machine\n var\n fsm = {\n 'content-set': {\n events: {\n 'adsready': function() {\n this.state = 'ads-ready';\n },\n 'play': function() {\n this.state = 'ads-ready?';\n this.snapshot = getPlayerSnapshot(player);\n cancelContentPlay(player);\n\n // remove the poster so it doesn't flash between videos\n removeNativePoster(player);\n }\n }\n },\n 'ads-ready': {\n events: {\n 'play': function() {\n this.state = 'preroll?';\n cancelContentPlay(player);\n }\n }\n },\n 'preroll?': {\n enter: function() {\n\n // capture current player state snapshot (playing, currentTime, src)\n this.snapshot = getPlayerSnapshot(player);\n\n // remove the poster so it doesn't flash between videos\n removeNativePoster(player);\n\n // change class to show that we're waiting on ads\n player.el().className += ' vjs-ad-loading';\n\n // schedule an adtimeout event to fire if we waited too long\n player.ads.timeout = window.setTimeout(function() {\n player.trigger('adtimeout');\n }, settings.prerollTimeout);\n\n // signal to ad plugin that it's their opportunity to play a preroll\n player.trigger('readyforpreroll');\n\n },\n leave: function() {\n window.clearTimeout(player.ads.timeout);\n\n clearImmediate(player.ads.cancelPlayTimeout);\n player.ads.cancelPlayTimeout = null;\n\n removeClass(player.el(), 'vjs-ad-loading');\n },\n events: {\n 'play': function() {\n cancelContentPlay(player);\n },\n 'adstart': function() {\n this.state = 'ad-playback';\n player.el().className += ' vjs-ad-playing';\n },\n 'adtimeout': function() {\n this.state = 'content-playback';\n player.play();\n }\n }\n },\n 'ads-ready?': {\n enter: function() {\n player.el().className += ' vjs-ad-loading';\n player.ads.timeout = window.setTimeout(function() {\n player.trigger('adtimeout');\n }, settings.timeout);\n },\n leave: function() {\n window.clearTimeout(player.ads.timeout);\n removeClass(player.el(), 'vjs-ad-loading');\n },\n events: {\n 'play': function() {\n cancelContentPlay(player);\n },\n 'adsready': function() {\n this.state = 'preroll?';\n },\n 'adtimeout': function() {\n this.state = 'ad-timeout-playback';\n }\n }\n },\n 'ad-timeout-playback': {\n enter: function() {\n restorePlayerSnapshot(player, this.snapshot);\n },\n events: {\n 'adsready': function() {\n if (player.paused()) {\n this.state = 'ads-ready';\n } else {\n this.state = 'preroll?';\n }\n },\n 'contentupdate': function() {\n if (player.paused()) {\n this.state = 'content-set';\n } else {\n this.state = 'ads-ready?';\n }\n }\n }\n },\n 'ad-playback': {\n events: {\n 'adend': function() {\n this.state = 'content-playback';\n removeClass(player.el(), 'vjs-ad-playing');\n restorePlayerSnapshot(player, this.snapshot);\n }\n }\n },\n 'content-playback': {\n events: {\n 'adstart': function() {\n this.state = 'ad-playback';\n this.snapshot = getPlayerSnapshot(player);\n player.el().className += ' vjs-ad-playing';\n\n // remove the poster so it doesn't flash between videos\n removeNativePoster(player);\n },\n 'contentupdate': function() {\n if (player.paused()) {\n this.state = 'content-set';\n } else {\n this.state = 'ads-ready?';\n }\n }\n }\n }\n };\n\n (function(state) {\n\n var noop = function() {};\n\n // process the current event with a noop default handler\n (fsm[state].events[event.type] || noop).apply(player.ads);\n\n // execute leave/enter callbacks if present\n if (state !== player.ads.state) {\n (fsm[state].leave || noop).apply(player.ads);\n (fsm[player.ads.state].enter || noop).apply(player.ads);\n\n if (settings.debug) {\n videojs.log('ads', state + ' -> ' + player.ads.state);\n }\n }\n\n })(player.ads.state);\n\n };\n\n // register for the events we're interested in\n on(player, vjs.Html5.Events.concat([\n // events emitted by ad plugin\n 'adtimeout',\n 'contentupdate',\n // events emitted by third party ad implementors\n 'adsready',\n 'adstart', // startLinearAdMode()\n 'adend', // endLinearAdMode()\n ]), fsmHandler);\n\n // implement 'contentupdate' event.\n (function(){\n var\n // keep track of last src\n lastSrc,\n // check if a new src has been set, if so, trigger contentupdate\n checkSrc = function() {\n var src;\n if (player.ads.state !== 'ad-playback') {\n src = player.currentSrc();\n if (src !== lastSrc) {\n player.trigger({\n type: 'contentupdate',\n oldValue: lastSrc,\n newValue: src\n });\n lastSrc = src;\n }\n }\n };\n // loadstart reliably indicates a new src has been set\n player.on('loadstart', checkSrc);\n // check immediately in case we missed the loadstart\n setImmediate(checkSrc);\n })();\n\n // kick off the fsm\n if (!player.paused()) {\n // simulate a play event if we're autoplaying\n fsmHandler({type:'play'});\n }\n\n };\n\n // register the ad plugin framework\n vjs.plugin('ads', adFramework);\n\n})(window, document, videojs);"],"names":["window1","document1","vjs","undefined","setImmediate","callback","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","setTimeout","cancelContentPlay","player","ads","cancelPlayTimeout","paused","pause","getPlayerSnapshot","tech","el","querySelector","snapshot","src","currentSrc","currentTime","play","nativePoster","poster","removeClass","element","className","classes","split","i","length","newClasses","push","join","restorePlayerSnapshot","attempts","resume","tryToResume","seekable","load","one","removeNativePoster","removeAttribute","defaults","timeout","prerollTimeout","debug","plugin","options","fsmHandler","lastSrc","checkSrc","this","settings","obj","arg","k","arguments","hasOwnProperty","extend","state","startLinearAdMode","trigger","endLinearAdMode","event","noop","fsm","events","adsready","enter","leave","id","clearTimeout","clearImmediate","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","adstart","adtimeout","contentupdate","adend","type","apply","videojs","log","handler","ii","Object","prototype","toString","call","register","addEventListener","on","attachEvent","Error","Html5","Events","concat","oldValue","newValue","window","document"],"version":3,"file":"index.3480b7dc.js.map"}