{"version":3,"file":"Ima.js","sources":["Ima.js"],"sourcesContent":["(function (exports) {\n'use strict';\n\nvar IMANotifications = function () {\n function IMANotifications() {\n babelHelpers.classCallCheck(this, IMANotifications);\n }\n\n babelHelpers.createClass(IMANotifications, null, [{\n key: \"INITIALIZED\",\n get: function get() {\n return \"ima/initialize\";\n }\n }, {\n key: \"ADD_OVERLAY\",\n get: function get() {\n return \"ima/addOverlay\";\n }\n }, {\n key: \"REMOVE_OVERLAY\",\n get: function get() {\n return \"ima/removeOverlay\";\n }\n }]);\n return IMANotifications;\n}();\n\nvar IMAWrapper = function (_akamai$amp$ads$AdWra) {\n babelHelpers.inherits(IMAWrapper, _akamai$amp$ads$AdWra);\n\n function IMAWrapper() {\n babelHelpers.classCallCheck(this, IMAWrapper);\n return babelHelpers.possibleConstructorReturn(this, (IMAWrapper.__proto__ || Object.getPrototypeOf(IMAWrapper)).apply(this, arguments));\n }\n\n babelHelpers.createClass(IMAWrapper, [{\n key: \"createXML\",\n\n\n /** */\n value: function createXML(xml) {\n var admedia, application, companion, companions, i, ids, j, k, len, len1, len2, overlay, prop, props, ref, vendor;\n application = xml.firstChild;\n admedia = xml.getElementsByTagName(\"admedia\")[0];\n if (admedia == null) {\n admedia = xml.createElement(\"admedia\");\n application.appendChild(admedia);\n }\n vendor = xml.createElement(\"vendor\");\n vendor.setAttribute(\"id\", \"dfp\");\n admedia.appendChild(vendor);\n props = [{\n value: this.config.adTagUrl,\n key: \"DFP_AD_TAG_URL\"\n }, {\n value: this.config.maxBitrate,\n key: \"DFP_MAX_BITRATE\"\n }, {\n value: this.config.sceneMarkers,\n key: \"displaySceneMarkers\"\n }, {\n value: this.config.ppid,\n key: \"DFP_PPID\"\n }];\n for (i = 0, len = props.length; i < len; i++) {\n prop = props[i];\n if (prop.value != null) {\n this.createProperty(xml, prop.key, prop.value, vendor);\n }\n }\n if (this.config.position != null) {\n vendor.setAttribute(\"position\", this.config.position);\n }\n if (this.config.params != null) {\n if (this.config.params.adTag != null) {\n this.createProperty(xml, \"DFP_AD_TAG_PARAMS\", this.config.params.adTag, vendor);\n }\n if (this.config.params.manual != null) {\n this.createProperty(xml, \"DFP_MANUAL_PARAMS\", this.config.params.manual, vendor);\n }\n }\n if (this.config.companions != null) {\n companions = [];\n ids = [];\n ref = this.config.companions;\n for (j = 0, len1 = ref.length; j < len1; j++) {\n companion = ref[j];\n companions.push(companion.width + \"x\" + companion.height);\n ids.push(companion.id);\n }\n this.createProperty(xml, \"DFP_SIZE\", companions.join(\",\"), vendor);\n this.createProperty(xml, \"COMPANION_ID\", ids.join(\",\"), vendor);\n }\n if (this.config.disableCompanionAds != null) {\n this.createProperty(xml, \"disableCompanionAds\", this.config.disableCompanionAds, vendor);\n }\n if (this.config.overlay != null) {\n if (this.config.overlay.enabled === true) {\n overlay = xml.createElement(\"overlay\");\n admedia.appendChild(overlay);\n }\n props = [{\n value: \"dfp\",\n key: \"OVERLAY_AD_PARTNER\"\n }, {\n value: this.config.overlay.adTagUrl,\n key: \"OVERLAY_AD_BASE_URL\"\n }, {\n value: this.config.overlay.delay,\n key: \"OVERLAY_AD_DELAY\"\n }, {\n value: this.config.overlay.interval,\n key: \"OVERLAY_AD_INTERVAL\"\n }, {\n value: this.config.overlay.duration,\n key: \"OVERLAY_AD_DURATION\"\n }, {\n value: this.config.overlay.width + \"x\" + this.config.overlay.height,\n key: \"OVERLAY_AD_SIZE\"\n }];\n for (k = 0, len2 = props.length; k < len2; k++) {\n prop = props[k];\n if (prop.value != null) {\n this.createProperty(xml, prop.key, prop.value, overlay);\n }\n }\n }\n return xml;\n }\n }, {\n key: \"partner\",\n get: function get() {\n return \"ima\";\n }\n }, {\n key: \"flashPlugins\",\n get: function get() {\n return [{\n id: \"GoogleIMAPlugin\",\n src: '#{paths.resources}plugins/GoogleIMAPlugin.swf',\n blocking: false,\n host: \"akamai\",\n main: \"GoogleIMAPlugin\",\n type: \"application/x-shockwave-flash\"\n }, {\n id: \"IMAOverlayAdPlugin\",\n src: '#{paths.resources}plugins/IMAOverlayAdPlugin.swf',\n blocking: false,\n host: \"akamai\",\n main: \"IMAOverlayAdPlugin\",\n type: \"application/x-shockwave-flash\"\n }, {\n id: \"AdOptionsPlugin\",\n src: '#{paths.resources}plugins/AdOptionsPlugin.swf',\n blocking: false,\n host: \"akamai\",\n main: \"AdOptionsPlugin\",\n type: \"application/x-shockwave-flash\"\n }];\n }\n }], [{\n key: \"NAME\",\n get: function get() {\n return \"IMAWrapper\";\n }\n }]);\n return IMAWrapper;\n}(akamai.amp.ads.AdWrapper);\n\nvar IMAOverlayProxy = function (_akamai$amp$DataBound) {\n babelHelpers.inherits(IMAOverlayProxy, _akamai$amp$DataBound);\n\n /**\n * Used to trigger overlay ads for Google IMA\n *\n * @constructor\n * @private\n */\n function IMAOverlayProxy(config) {\n babelHelpers.classCallCheck(this, IMAOverlayProxy);\n\n var _this = babelHelpers.possibleConstructorReturn(this, (IMAOverlayProxy.__proto__ || Object.getPrototypeOf(IMAOverlayProxy)).call(this, config));\n\n _this.configurationName = \"imaoverlay\";\n _this.durationTimer = null;\n _this.intervalTimer = null;\n _this.delayTimer = null;\n return _this;\n }\n\n babelHelpers.createClass(IMAOverlayProxy, [{\n key: \"stop\",\n\n\n /** Stops polling and clears the ad */\n value: function stop() {\n clearTimeout(this.durationTimer);\n clearTimeout(this.delayTimer);\n clearTimeout(this.intervalTimer);\n }\n\n /** Starts polling and load the first ad */\n\n }, {\n key: \"play\",\n value: function play() {\n var _this2 = this;\n\n this.stop();\n //Set up a delay timer\n this.delayTimer = setTimeout(function () {\n return _this2.requestAd();\n }, this.value.delay * 1000);\n }\n\n /** Retrieves an ad image from VAST XML */\n\n }, {\n key: \"requestAd\",\n value: function requestAd() {\n var adTagUrl;\n // get the VAST XML\n adTagUrl = this.getValue(\"adTagUrl\");\n if (adTagUrl != null) {\n adTagUrl = adTagUrl.replace(\"[timestamp]\", new Date().getTime());\n adTagUrl = adTagUrl.replace(\"__random-number__\", new Date().getTime());\n }\n Utils.request({\n url: adTagUrl,\n withCredentials: true\n }).then(this.vastLoadHandler.bind(this)).catch(this.error.bind(this));\n }\n }, {\n key: \"vastLoadHandler\",\n value: function vastLoadHandler(xhr) {\n var ad, clickThroughHref, creativeView, error, img, impression, xml;\n xml = xhr.target.responseXML;\n if (xml != null) {\n try {\n // parse the VAST XML\n ad = xml.querySelector(\"NonLinear\");\n if (ad != null) {\n impression = xml.querySelector(\"Impression\") != null ? xml.querySelector(\"Impression\").textContent : \"\";\n creativeView = xml.querySelector(\"Tracking[event=creativeView]\") != null ? xml.querySelector(\"Tracking[event=creativeView]\").textContent : \"\";\n clickThroughHref = ad.querySelector(\"NonLinearClickThrough\") != null ? ad.querySelector(\"NonLinearClickThrough\").textContent : \"\";\n img = {\n src: ad.querySelector(\"StaticResource\").textContent,\n width: ad.getAttribute(\"width\"),\n height: ad.getAttribute(\"height\"),\n tracking: [impression, creativeView],\n href: clickThroughHref\n };\n this.displayAd(img);\n } else {\n this.error(\"No overlay was returned\");\n }\n } catch (error1) {\n error = error1;\n this.error(error);\n }\n }\n }\n }, {\n key: \"error\",\n value: function error(_error) {\n this.facade.logger.error(\"[AMP IMA OVERLAY ERROR]\", _error);\n this.stop();\n }\n\n /** Notifies the application that a new overlay is ready to display */\n\n }, {\n key: \"displayAd\",\n value: function displayAd(ad) {\n var _this3 = this;\n\n // Notify the view\n this.sendNotification(IMANotifications.ADD_OVERLAY, ad);\n // set up the duration timer\n this.durationTimer = setTimeout(function () {\n _this3.sendNotification(IMANotifications.REMOVE_OVERLAY);\n //Set up a interval timer\n return _this3.intervalTimer = setTimeout(function () {\n return _this3.requestAd();\n }, _this3.value.interval * 1000);\n }, this.value.duration * 1000);\n }\n }, {\n key: \"defaults\",\n get: function get() {\n return {\n adTagUrl: null,\n duration: 15,\n interval: 30,\n delay: 30\n };\n }\n }], [{\n key: \"NAME\",\n get: function get() {\n return \"IMAOveralyProxy\";\n }\n }]);\n return IMAOverlayProxy;\n}(akamai.amp.DataBoundConfigurationProxy);\n\nvar IMAProxy = function (_akamai$amp$ads$AdPro) {\n babelHelpers.inherits(IMAProxy, _akamai$amp$ads$AdPro);\n\n /**\n * The IMAProxy class.\n *\n * @constructor\n * @private\n * @extends {AdProxy}\n * @param {Object} config\n */\n function IMAProxy(config) {\n babelHelpers.classCallCheck(this, IMAProxy);\n\n var _this = babelHelpers.possibleConstructorReturn(this, (IMAProxy.__proto__ || Object.getPrototypeOf(IMAProxy)).call(this, config));\n\n _this.intervals = [];\n _this.partner = \"ima\";\n _this.key = \"ima\";\n _this.adDisplayContainer = null;\n _this.adDisplayContainerInitialized = false;\n _this.adsLoader = null;\n _this.adsRenderingSettings = null;\n _this.adsManagerLoaded = false;\n _this.adsManager = null;\n _this.cuepoints = null;\n _this.adLoaded = false;\n _this.playWhenLoaded = false;\n _this.contentHasEnded = false;\n _this.adTagUrl = null;\n _this.viewMode = null;\n _this.playbackCore = null;\n _this.loadedmetadata = _this.onLoadedMetadata.bind(_this);\n _this.adVO = _this.createDefaultAdVO();\n return _this;\n }\n\n /** @static */\n\n\n babelHelpers.createClass(IMAProxy, [{\n key: \"setEnabled\",\n\n\n /** */\n value: function setEnabled(value) {\n var ref;\n babelHelpers.get(IMAProxy.prototype.__proto__ || Object.getPrototypeOf(IMAProxy.prototype), \"setEnabled\", this).call(this, value);\n if (value === false) {\n if ((ref = this.adsManager) != null) {\n if (typeof ref.destroy === \"function\") {\n ref.destroy();\n }\n }\n if (this.getInProgress()) {\n this.contentPlay();\n }\n }\n return value;\n }\n\n /** @override */\n\n }, {\n key: \"onLoadedMetadata\",\n value: function onLoadedMetadata(event) {\n if (this.canPlay() && this.playWhenLoaded === true) {\n this.startAd();\n }\n }\n\n /** @override */\n\n }, {\n key: \"initialize\",\n value: function initialize() {}\n\n /** @override */\n //@facade.player.getViewComponent().addEventListener(\"resize\", @resize.bind(@))\n\n }, {\n key: \"ready\",\n value: function ready() {\n var isAndroidChrome, mode, ref, userAgentMatch;\n this.viewMode = google.ima.ViewMode.NORMAL;\n window.addEventListener(\"resize\", this.resize.bind(this));\n //TODO: setVpaidAllowed is a depricated function. Remove this once its deemed safe.\n if (this.config.vpaidAllowed != null) {\n google.ima.settings.setVpaidAllowed(this.config.vpaidAllowed);\n }\n if (this.config.vpaidMode != null && (mode = google.ima.ImaSdkSettings.VpaidMode[this.config.vpaidMode.toUpperCase()]) != null) {\n google.ima.settings.setVpaidMode(mode);\n }\n if (this.config.disableFlashAds != null) {\n google.ima.settings.setDisableFlashAds(this.config.disableFlashAds);\n }\n this.adDisplayContainer = this.createPlugin();\n // Create ads loader.\n this.adsLoader = new google.ima.AdsLoader(this.adDisplayContainer);\n userAgentMatch = navigator.userAgent.match(/Chrom(e|ium)\\/([0-9]+)\\./);\n isAndroidChrome = userAgentMatch ? parseInt(userAgentMatch[2], 10) > 52 : false;\n if ((((ref = akamai.amp.Utils.getIOSversion()) != null ? ref[0] : void 0) >= 10 || isAndroidChrome) && this.facade.player.getConfig().playsinline !== false) {\n google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true);\n }\n this.adsRenderingSettings = new google.ima.AdsRenderingSettings();\n //Removing custom playback flag\n //@adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true\n\n // Listen and respond to ads loaded and error events.\n this.adsLoader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, this.onAdsManagerLoaded.bind(this), false);\n this.adsLoader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, this.onAdError.bind(this), false);\n }\n\n /** @override */\n\n }, {\n key: \"createPlugin\",\n value: function createPlugin() {\n return new google.ima.AdDisplayContainer(this.getContainer());\n }\n\n /** @override */\n\n }, {\n key: \"engage\",\n value: function engage() {\n var override = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n var ref, ref1;\n if (this.getEnabled() === false) {\n return;\n }\n babelHelpers.get(IMAProxy.prototype.__proto__ || Object.getPrototypeOf(IMAProxy.prototype), \"engage\", this).call(this);\n if (this.adsManagerLoaded === true && this.contentHasEnded === false || this.contentHasEnded === true && ((ref = this.adVO) != null ? ref.type : void 0) === \"postroll\") {\n if ((ref1 = this.adsManager) != null) {\n if (typeof ref1.destroy === \"function\") {\n ref1.destroy();\n }\n }\n }\n //@contentEnded()\n this.adsManagerLoaded = false;\n this.contentHasEnded = false;\n this.adsManagerLoaded = false;\n this.playWhenLoaded = false;\n }\n\n /** */\n\n }, {\n key: \"setVolume\",\n value: function setVolume(value) {\n var ref;\n if ((ref = this.adsManager) != null) {\n ref.setVolume(value);\n }\n return value;\n }\n\n /** */\n\n }, {\n key: \"getVolume\",\n value: function getVolume() {\n var ref;\n return (ref = this.adsManager) != null ? ref.getVolume() : void 0;\n }\n\n /** @override */\n\n }, {\n key: \"requestAd\",\n value: function requestAd() {\n var _this2 = this;\n\n var adsRequest, dimensions, height, ref, ref1, settings, width;\n babelHelpers.get(IMAProxy.prototype.__proto__ || Object.getPrototypeOf(IMAProxy.prototype), \"requestAd\", this).call(this);\n dimensions = this.getDimensions();\n width = dimensions.clientWidth;\n height = dimensions.clientHeight;\n // Request video ads.\n adsRequest = new google.ima.AdsRequest();\n this.adTagUrl = this.getValue(\"adTagUrl\");\n if (babelHelpers.typeof(this.adTagUrl) === \"object\") {\n this.adTagUrl = this.buildAdTagUrl(this.adTagUrl);\n }\n adsRequest.adTagUrl = this.adTagUrl;\n if (adsRequest.adsResponse == null && adsRequest.adTagUrl == null) {\n this.onAdError(\"No valid adTagUrl or adsResponse provided.\");\n return;\n }\n // Specify the linear and nonlinear slot sizes. This helps the SDK to\n // select the correct creative if multiple are returned.\n adsRequest.linearAdSlotWidth = width;\n adsRequest.linearAdSlotHeight = height;\n adsRequest.nonLinearAdSlotWidth = ((ref = this.value.overlay) != null ? ref.width : void 0) || width;\n adsRequest.nonLinearAdSlotHeight = ((ref1 = this.value.overlay) != null ? ref1.height : void 0) || height;\n settings = this.adsLoader.getSettings();\n // set the PPID if it was supplied in the config\n if (this.config.ppid != null) {\n settings.setPpid(this.getValue(\"ppid\"));\n }\n\n var params = { adsRequest: adsRequest, adsLoader: this.adsLoader, adsRenderingSettings: this.adsRenderingSettings, adDisplayContainer: this.adDisplayContainer };\n var request = akamai.amp.ads.AdRequest.create(adsRequest, \"ima\", this.getData(), params);\n Promise.resolve(request).then(function (ad) {\n var adsResponse = _this2.getValue(\"adsResponse\");\n if (adsResponse != null && adsResponse !== \"\") {\n return akamai.amp.Utils.requestText(adsResponse).then(function (text) {\n ad.request.adsResponse = text;\n return ad;\n });\n } else {\n return ad;\n }\n }).then(this.processAdRequest.bind(this)).then(function (result) {\n return _this2.adsLoader.requestAds(result.request);\n });\n }\n\n /** @override */\n\n }, {\n key: \"requestOverlay\",\n value: function requestOverlay() {\n var adsRequest, overlay;\n overlay = this.value.overlay;\n if (overlay == null) {\n return;\n }\n // Request overlay ads.\n adsRequest = new google.ima.AdsRequest();\n adsRequest.adTagUrl = overlay.adTagUrl;\n adsRequest.nonLinearAdSlotWidth = overlay.width || 300;\n adsRequest.nonLinearAdSlotHeight = overlay.height || 50;\n this.adsLoader.requestAds(adsRequest);\n }\n\n /** @override */\n\n }, {\n key: \"start\",\n value: function start() {\n var load = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n var video;\n if (load === true) {\n this.playbackCore = this.facade.player.retrieveProxy(akamai.amp.PlayerProxy.NAME).getActivePlaybackCore();\n video = this.getMediaElement();\n video.once(\"loadedmetadata\", this.loadedmetadata);\n this.playbackCore.setEnabled(false);\n if (this.facade.isFullscreenDevice()) {\n this.playbackCore.load();\n } else {\n video.load();\n }\n } else {\n this.engage();\n }\n if (babelHelpers.get(IMAProxy.prototype.__proto__ || Object.getPrototypeOf(IMAProxy.prototype), \"start\", this).call(this) === false) {\n return false;\n }\n this.isLiveMidroll = load === false && this.facade.player.retrieveProxy(MediaProxy.NAME).getTemporalType() === \"live\";\n // Initialize the container, if requestAds is invoked in a user action.\n // This is only needed on iOS/Android devices.\n if (this.adDisplayContainerInitialized !== true) {\n this.adDisplayContainer.initialize();\n this.adDisplayContainerInitialized = true;\n }\n if (this.canPlay() === true && load === true) {\n this.startAd();\n } else {\n this.playWhenLoaded = true;\n this.requestAd();\n }\n }\n\n /** */\n\n }, {\n key: \"canPlay\",\n value: function canPlay() {\n return this.adsManagerLoaded === true;\n }\n\n /** */\n\n }, {\n key: \"startAd\",\n value: function startAd() {\n var adError;\n this.playWhenLoaded = false;\n try {\n // Initialize the ads manager. Ad rules playlist will start at this time.\n if (this.viewMode == null) {\n this.viewMode = google.ima.ViewMode.NORMAL;\n }\n this.adsManager.init(this.facade.player.getViewComponent().clientWidth, this.facade.player.getViewComponent().clientHeight, this.viewMode);\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules.\n this.adsManager.start();\n } catch (error1) {\n adError = error1;\n // An error may be thrown if there was a problem with the VAST response.\n this.error(adError);\n }\n }\n }, {\n key: \"resize\",\n value: function resize(state) {\n var dimensions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getDimensions();\n\n var ref;\n if (this.dimensions != null && this.dimensions.width === dimensions.width && this.dimensions.height === dimensions.height) {\n return;\n }\n this.dimensions = dimensions;\n if (state != null) {\n this.viewMode = state === akamai.amp.DisplayState.FULL_SCREEN ? google.ima.ViewMode.FULLSCREEN : google.ima.ViewMode.NORMAL;\n }\n if ((ref = this.adsManager) != null) {\n ref.resize(this.dimensions.width, this.dimensions.height, this.viewMode);\n }\n }\n\n /** */\n\n }, {\n key: \"onAdsManagerLoaded\",\n value: function onAdsManagerLoaded(adsManagerLoadedEvent) {\n var _this3 = this;\n\n var adEventHandler, ref;\n // Get the ads manager.\n this.adsRenderingSettings.bitrate = this.getValue(\"maxBitrate\");\n //Auto Aligning the Overlay Ads\n this.adsRenderingSettings.autoAlign = true;\n //Close button for Overlay Ads\n this.adsRenderingSettings.useStyledNonLinearAds = true;\n\n var settings = this.getValue(\"adsRenderingSettings\");\n if (settings != null) {\n Object.entries(settings).forEach(function (entry) {\n _this3.adsRenderingSettings[entry[0]] = entry[1];\n });\n }\n\n // Check adsManager isntance to avoid multiple instances.\n if ((ref = this.adsManager) != null) {\n if (typeof ref.destroy === \"function\") {\n ref.destroy();\n }\n }\n this.adsManager = adsManagerLoadedEvent.getAdsManager(this.facade.player.mediaElement, this.adsRenderingSettings); // should be set to the content video element\n this.sendNotification(akamai.amp.ads.AdNotifications.AD_MANAGER_LOADED, {\n \"adManager\": this.adsManager,\n \"viewMode\": google.ima.ViewMode.NORMAL,\n \"adContainer\": this.getContainer()\n });\n this.adsManagerLoaded = true;\n this.cuePoints = this.adsManager.getCuePoints();\n this.setCues(this.cuePoints);\n if (this.cuePoints.indexOf(-1) !== -1) {\n this.sendNotification(akamai.amp.Notifications.HAS_POST_CONTENT, true);\n }\n adEventHandler = this.onAdEvent.bind(this);\n // Add listeners to the required events.\n this.adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, this.onAdError.bind(this));\n this.adsManager.addEventListener(google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, this.contentPause.bind(this));\n this.adsManager.addEventListener(google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, this.contentPlay.bind(this));\n this.adsManager.addEventListener(google.ima.AdEvent.Type.ALL_ADS_COMPLETED, adEventHandler);\n // Listen to any additional events, if necessary.\n this.adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, adEventHandler);\n this.adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, adEventHandler);\n this.adsManager.addEventListener(google.ima.AdEvent.Type.RESUMED, this.onAdResumed.bind(this));\n this.adsManager.addEventListener(google.ima.AdEvent.Type.PAUSED, this.onAdPaused.bind(this));\n this.adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, adEventHandler);\n this.adsManager.addEventListener(google.ima.AdEvent.Type.CLICK, this.onAdClick.bind(this));\n this.adsManager.addEventListener(google.ima.AdEvent.Type.IMPRESSION, adEventHandler);\n this.adsManager.addEventListener(google.ima.AdEvent.Type.FIRST_QUARTILE, adEventHandler);\n this.adsManager.addEventListener(google.ima.AdEvent.Type.MIDPOINT, adEventHandler);\n this.adsManager.addEventListener(google.ima.AdEvent.Type.THIRD_QUARTILE, adEventHandler);\n this.adsManager.addEventListener(google.ima.AdEvent.Type.SKIPPED, adEventHandler);\n this.adsManager.addEventListener(google.ima.AdEvent.Type.LOG, adEventHandler);\n this.sendNotification(akamai.amp.ads.AdNotifications.REQUEST_COMPLETE, {\n pods: this.cuePoints\n });\n this.sendNotification(akamai.amp.ads.AdNotifications.RESPONSE, {\n pods: this.cuePoints,\n response: adsManagerLoadedEvent,\n adsManager: this.adsManager\n });\n if (this.canPlay() && this.playWhenLoaded === true) {\n this.startAd();\n }\n }\n\n /** */\n\n }, {\n key: \"onAdClick\",\n value: function onAdClick(adEvent) {\n if ((adEvent != null ? adEvent.getAd().isLinear() : void 0) === false) {\n this.facade.player.sendNotification(akamai.amp.Notifications.PAUSE);\n return;\n }\n if (!this.getPaused()) {\n this.pause();\n }\n this.sendNotification(akamai.amp.ads.AdNotifications.AD_CLICKED, this.adVO);\n }\n\n /** */\n\n }, {\n key: \"onAdPaused\",\n value: function onAdPaused(adEvent) {\n this.setPaused(true);\n this.facade.player.sendNotification(akamai.amp.Notifications.CHANGE_PLAY_STATE, akamai.amp.PlayState.PAUSED);\n this.facade.player.sendNotification(akamai.amp.Notifications.CHANGE_ACTIVE_STATE, akamai.amp.ActiveState.ACTIVE);\n this.facade.player.sendNotification(akamai.amp.ads.AdNotifications.AD_PAUSED, this.adVO);\n }\n\n /** */\n\n }, {\n key: \"onAdResumed\",\n value: function onAdResumed(adEvent) {\n this.setPaused(false);\n this.facade.player.sendNotification(akamai.amp.Notifications.CHANGE_PLAY_STATE, akamai.amp.PlayState.PLAYING);\n }\n\n /** */\n\n }, {\n key: \"onAdEvent\",\n value: function onAdEvent(adEvent) {\n var ad, companion, companions, config, error, i, len, pos, ref, ref1, type;\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated.\n ad = adEvent.getAd();\n if (this.adVO != null) {\n if (ad != null) {\n ad.wrapperAdIds = typeof ad.getWrapperAdIds === \"function\" ? ad.getWrapperAdIds() : void 0;\n ad.wrapperAdSystems = typeof ad.getWrapperAdSystems === \"function\" ? ad.getWrapperAdSystems() : void 0;\n }\n this.adVO.metadata = ad;\n }\n switch (adEvent.type) {\n case google.ima.AdEvent.Type.IMPRESSION:\n this.sendNotification(akamai.amp.ads.AdNotifications.IMPRESSION, this.adVO);\n break;\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to\n // determine whether the ad is a video ad or an overlay.\n if (ad.isLinear()) {\n this.facade.player.sendNotification(akamai.amp.Notifications.REMOVE_APPLICATION_STATE, \"ad-overlaymode\");\n pos = ad.getAdPodInfo().getPodIndex();\n type = pos === 0 ? \"preroll\" : pos === -1 ? \"postroll\" : \"midroll\";\n this.adVO = new akamai.amp.ads.AdVO(ad.getAdId(), ad.getAdId(), ad.getDuration(), pos, type, \"ima\", null, null, this.adTagUrl, ad, ad.getAdPodInfo().getTotalAds(), ad.getDuration() - this.adsManager.getRemainingTime());\n if (!this.getInProgress() && type === \"midroll\" || type === \"postroll\") {\n this.startBreak();\n this.engageAds();\n }\n this.resize();\n this.sendNotification(akamai.amp.ads.AdNotifications.AD_LOADED, this.adVO);\n this.sendNotification(akamai.amp.ads.AdNotifications.AD_DURATION_CHANGE, this.adVO);\n //Register (engage) events when switching back to ad playback\n this.setVolume(this.facade.player.retrieveProxy(akamai.amp.ApplicationStateProxy.NAME).getVolume());\n } else {\n // Skip to Content Play if its Overlay ads\n this.facade.player.sendNotification(akamai.amp.Notifications.ADD_APPLICATION_STATE, \"ad-overlaymode\");\n this.contentPlay();\n }\n break;\n case google.ima.AdEvent.Type.STARTED:\n // This event indicates the ad has started - the video player\n // can adjust the UI, for example display a pause buIton and\n // remaining time.\n if (ad.isLinear()) {\n this.adVO.position = ad.getAdPodInfo().getAdPosition();\n this.sendNotification(akamai.amp.ads.AdNotifications.AD_STARTED, this.adVO);\n // For a linear ad, a timer can be started to poll for\n // the remaining time.\n this.intervals.push(setInterval(this.onAdTimeUpdate.bind(this), 67));\n this.facade.player.sendNotification(akamai.amp.Notifications.CHANGE_PLAY_STATE, akamai.amp.PlayState.PLAYING);\n this.sendNotification(akamai.amp.ads.AdNotifications.AD_PLAY, this.adVO);\n }\n try {\n companions = [];\n config = (typeof this.getConfigurationData === \"function\" ? (ref = this.getConfigurationData()) != null ? ref.companions : void 0 : void 0) || [];\n for (i = 0, len = config.length; i < len; i++) {\n companion = config[i];\n companions = companions.concat(ad.getCompanionAds(companion.width, companion.height));\n }\n if ((companions != null ? companions.length : void 0) > 0) {\n this.setCompanions(companions);\n }\n } catch (error1) {\n error = error1;\n this.facade.logger.error(\"[AMP IMA ERROR]\", \"Could not retrieve companion ads:\", error);\n }\n break;\n case google.ima.AdEvent.Type.COMPLETE:\n // This event indicates the ad has finished - the video player\n // can perform appropriate UI actions, such as removing the timer for\n // remaining time detection.\n if (ad.isLinear()) {\n this.sendNotification(akamai.amp.ads.AdNotifications.AD_ENDED, this.adVO);\n }\n break;\n case google.ima.AdEvent.Type.FIRST_QUARTILE:\n this.sendNotification(akamai.amp.ads.AdNotifications.FIRST_QUARTILE, this.adVO);\n break;\n case google.ima.AdEvent.Type.MIDPOINT:\n this.sendNotification(akamai.amp.ads.AdNotifications.MIDPOINT, this.adVO);\n break;\n case google.ima.AdEvent.Type.THIRD_QUARTILE:\n this.sendNotification(akamai.amp.ads.AdNotifications.THIRD_QUARTILE, this.adVO);\n break;\n case google.ima.AdEvent.Type.LOG:\n if (this.facade.player.retrieveProxy(akamai.amp.ApplicationStateProxy.NAME).getEnded() === true && ((ref1 = adEvent.getAdData()) != null ? ref1.adError : void 0) != null) {\n this.forceBreakEnd = true;\n }\n if (this.getValue(\"logEventsEnabled\") === true) {\n this.sendNotification(akamai.amp.ads.AdNotifications.LOG, this.adVO);\n }\n break;\n case google.ima.AdEvent.Type.SKIPPED:\n this.sendNotification(akamai.amp.ads.AdNotifications.SKIPPED, this.adVO);\n break;\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // This event indicates the ad has finished - the video player\n // can perform appropriate UI actions, such as removing the timer for\n // remaining time detection.\n if (this.getInProgress() === true || this.forceBreakEnd === true) {\n this.forceBreakEnd = false;\n this.endBreak();\n }\n }\n }\n\n /** */\n\n }, {\n key: \"getDimensions\",\n value: function getDimensions() {\n var container;\n container = this.getContainer();\n return {\n width: container.clientWidth,\n height: container.clientHeight\n };\n }\n\n /** */\n\n }, {\n key: \"onAdTimeUpdate\",\n value: function onAdTimeUpdate(adEvent) {\n if (this.adsManager.getRemainingTime() < 0) { return; } \n var remaining, time;\n this.resize();\n remaining = akamai.amp.Utils.clamp(this.adsManager.getRemainingTime(), 0, this.adVO.duration);\n time = Math.max(this.adVO.duration - remaining, 0);\n this.adVO.time = time;\n this.sendNotification(akamai.amp.ads.AdNotifications.AD_TIME_UPDATE, time);\n this.sendNotification(akamai.amp.ads.AdNotifications.AD_TIME_REMAINING, remaining);\n }\n\n /** */\n\n }, {\n key: \"onAdError\",\n value: function onAdError(adErrorEvent) {\n var error;\n // Handle the error logging.\n //@adManager.destroy()\n error = (adErrorEvent != null ? typeof adErrorEvent.getError === \"function\" ? adErrorEvent.getError() : void 0 : void 0) || adErrorEvent;\n // if /AdError 1205/.test(error.getInnerError()?.message)\n // return\n this.error(error);\n this.contentPlay();\n }\n\n /** */\n\n }, {\n key: \"play\",\n value: function play() {\n var error, ref;\n babelHelpers.get(IMAProxy.prototype.__proto__ || Object.getPrototypeOf(IMAProxy.prototype), \"play\", this).call(this);\n try {\n if ((ref = this.adsManager) != null) {\n ref.resume();\n }\n // TODO: Remove this (fix one single Notifications which should fired for akamai.amp.ads.AdNotifications.AD_PLAY)\n // HACK: Comscore to detect Ads Resume notifications\n this.sendNotification(akamai.amp.ads.AdNotifications.AD_RESUME);\n } catch (error1) {\n error = error1;\n this.facade.logger.error(\"[AMP IMA ERROR]\", \"resume\", error);\n }\n }\n\n /** */\n\n }, {\n key: \"pause\",\n value: function pause() {\n var error;\n babelHelpers.get(IMAProxy.prototype.__proto__ || Object.getPrototypeOf(IMAProxy.prototype), \"pause\", this).call(this);\n if (this.adsManager != null) {\n try {\n this.adsManager.pause();\n } catch (error1) {\n error = error1;\n this.facade.logger.error(\"[AMP IMA ERROR]\", \"pause\", error);\n }\n } else {\n this.playWhenLoaded = false;\n }\n }\n\n /** */\n\n }, {\n key: \"clearIntervals\",\n value: function clearIntervals() {\n var i, interval, len, ref;\n ref = this.intervals;\n for (i = 0, len = ref.length; i < len; i++) {\n interval = ref[i];\n clearInterval(this.intervals.pop());\n }\n }\n\n /** */\n\n }, {\n key: \"breakEnd\",\n value: function breakEnd() {\n var overlayProxy;\n this.clearIntervals();\n babelHelpers.get(IMAProxy.prototype.__proto__ || Object.getPrototypeOf(IMAProxy.prototype), \"breakEnd\", this).call(this);\n overlayProxy = this.facade.retrieveProxy(IMAOverlayProxy.NAME);\n if (overlayProxy != null) {\n overlayProxy.play();\n }\n }\n\n /** */\n\n }, {\n key: \"setCompanions\",\n value: function setCompanions(value) {\n var companion, companions, i, len, ref;\n //TODO: transform the IMA array to our companion interface\n companions = [];\n for (i = 0, len = value.length; i < len; i++) {\n companion = value[i];\n companions.push({\n data: companion.getContent(),\n type: (ref = companion.getContentType()) != null ? ref.toLowerCase() : void 0,\n width: companion.getWidth(),\n height: companion.getHeight(),\n metadata: companion\n });\n }\n babelHelpers.get(IMAProxy.prototype.__proto__ || Object.getPrototypeOf(IMAProxy.prototype), \"setCompanions\", this).call(this, companions);\n return value;\n }\n\n /** */\n\n }, {\n key: \"contentPause\",\n value: function contentPause() {\n var _this4 = this;\n\n var events;\n events = [\"pause\", \"waiting\", \"playing\", \"ended\", \"durationchange\", \"error\"];\n if (this.facade.player.retrieveProxy(akamai.amp.ApplicationStateProxy.NAME).getSeeking() === false) {\n events.push(\"seeked\");\n } else {\n this.getMediaElement().once(\"seeked\", function () {\n _this4.sendNotification(akamai.amp.Notifications.DISABLE_VIDEO_EVENTS, [\"seeked\"]);\n });\n }\n this.sendNotification(akamai.amp.Notifications.DISABLE_VIDEO_EVENTS, events);\n if (this.isLiveMidroll === true) {\n this.getMediaElement().volume = 0;\n return;\n }\n babelHelpers.get(IMAProxy.prototype.__proto__ || Object.getPrototypeOf(IMAProxy.prototype), \"contentPause\", this).call(this);\n }\n\n /** */\n\n }, {\n key: \"contentPlay\",\n value: function contentPlay() {\n var ref, ref1;\n if (this.getInProgress() === true) {\n this.endBreak();\n }\n this.sendNotification(akamai.amp.Notifications.ENABLE_VIDEO_EVENTS, [\"pause\", \"seeked\", \"waiting\", \"playing\", \"ended\", \"durationchange\", \"error\"]);\n if (((ref = this.adVO) != null ? ref.type : void 0) === \"postroll\") {\n return;\n }\n if (this.isLiveMidroll === true) {\n this.getMediaElement().volume = this.facade.player.retrieveProxy(akamai.amp.ApplicationStateProxy.NAME).getVolume();\n if (akamai.amp.Utils.getDevice() === \"ipad\") {\n this.getMediaElement().load();\n } else {\n return;\n }\n }\n babelHelpers.get(IMAProxy.prototype.__proto__ || Object.getPrototypeOf(IMAProxy.prototype), \"contentPlay\", this).call(this);\n // HACK: Post midroll video starts from the begining (html-319, html-305)\n if (((ref1 = this.adVO) != null ? ref1.type : void 0) === \"midroll\" && akamai.amp.Utils.getDevice() === \"desktop\") {\n this.facade.player.setCurrentTime(Math.floor(this.facade.player.getCurrentTime()));\n }\n }\n\n /** */\n\n }, {\n key: \"contentEnded\",\n value: function contentEnded() {\n var error, ref;\n this.contentHasEnded = true;\n try {\n //@adsManager?.destroy?()\n if ((ref = this.adsLoader) != null) {\n if (typeof ref.contentComplete === \"function\") {\n ref.contentComplete();\n }\n }\n } catch (error1) {\n error = error1;\n this.facade.logger.error(\"[AMP IMA ERROR]\", \"contentComplete\", error);\n }\n }\n\n /** */\n\n }, {\n key: \"terminateAd\",\n value: function terminateAd() {\n var error, ref;\n try {\n if ((ref = this.adsManager) != null) {\n ref.stop();\n }\n } catch (error1) {\n error = error1;\n this.facade.logger.error(\"[AMP IMA ERROR]\", \"terminateAd\", error);\n }\n if (this.adVO.type === \"postrol\") {\n this.sendNotification(akamai.amp.Notifications.HAS_POST_CONTENT, false);\n }\n this.endBreak();\n this.contentPlay();\n }\n\n /** */\n\n }, {\n key: \"terminateAllAds\",\n value: function terminateAllAds() {\n var error, ref;\n try {\n if ((ref = this.adsManager) != null) {\n ref.destroy();\n }\n } catch (error1) {\n error = error1;\n this.facade.logger.error(\"[AMP IMA ERROR]\", \"terminateAllAds\", error);\n }\n this.sendNotification(akamai.amp.Notifications.HAS_POST_CONTENT, false);\n this.endBreak();\n this.contentPlay();\n }\n\n /** */\n\n }, {\n key: \"destroy\",\n value: function destroy() {\n var ref;\n this.clearIntervals();\n if ((ref = this.adsManager) != null) {\n if (typeof ref.destroy === \"function\") {\n ref.destroy();\n }\n }\n }\n\n /** */\n\n }, {\n key: \"buildAdTagUrl\",\n value: function buildAdTagUrl(adTagObj) {\n var adTagUrl;\n adTagUrl = adTagObj.base || \"//pubads.g.doubleclick.net/gampad/ads\";\n adTagUrl += \"?\" + this.encodeAdTagParams(adTagObj.params);\n return adTagUrl;\n }\n\n /** */\n\n }, {\n key: \"encodeAdTagParams\",\n value: function encodeAdTagParams(params) {\n var adTagParams, key, value;\n adTagParams = [];\n for (key in params) {\n value = params[key];\n if ((typeof value === \"undefined\" ? \"undefined\" : babelHelpers.typeof(value)) === \"object\") {\n value = encodeURIComponent(this.encodeAdTagParams(value));\n }\n adTagParams.push(key + \"=\" + value);\n }\n return adTagParams.join(\"&\");\n }\n }, {\n key: \"defaults\",\n get: function get() {\n return {\n adTagUrl: null,\n overlay: null,\n width: null,\n height: null,\n maxBitrate: -1,\n ppid: null,\n companions: null,\n logEventsEnabled: false,\n adsRenderingSettings: null\n };\n }\n }], [{\n key: \"NAME\",\n get: function get() {\n return akamai.amp.ads.AdProxy.NAME;\n }\n }]);\n return IMAProxy;\n}(akamai.amp.ads.AdProxy);\n\nvar IMAFullscreenProxy = function (_IMAProxy) {\n babelHelpers.inherits(IMAFullscreenProxy, _IMAProxy);\n\n /**\n * The IMAFullscreenProxy class.\n *\n * @constructor\n * @private\n * @extends {IMAProxy}\n * @param {Object} config The configuration object.\n */\n function IMAFullscreenProxy(config) {\n babelHelpers.classCallCheck(this, IMAFullscreenProxy);\n return babelHelpers.possibleConstructorReturn(this, (IMAFullscreenProxy.__proto__ || Object.getPrototypeOf(IMAFullscreenProxy)).call(this, config));\n }\n\n babelHelpers.createClass(IMAFullscreenProxy, [{\n key: \"createPlugin\",\n\n\n /** */\n value: function createPlugin() {\n var container, ref, ref1;\n container = this.getContainer();\n if (akamai.amp.Utils.isIPhone() && ((ref = akamai.amp.Utils.getIOSversion()) != null ? ref[0] : void 0) < 10) {\n return new google.ima.AdDisplayContainer(container, this.facade.player.getMediaElement(), container);\n }\n if (((ref1 = akamai.amp.Utils.getIOSversion()) != null ? ref1[0] : void 0) >= 10) {\n this.facade.player.getMediaElement().playsInline = this.facade.player.getConfig().playsinline != null ? this.facade.player.getConfig().playsinline : true;\n }\n return new google.ima.AdDisplayContainer(container, this.facade.player.getMediaElement());\n }\n\n /** @override */\n\n }, {\n key: \"engage\",\n value: function engage(media) {\n babelHelpers.get(IMAFullscreenProxy.prototype.__proto__ || Object.getPrototypeOf(IMAFullscreenProxy.prototype), \"engage\", this).call(this, media);\n this.sendNotification(akamai.amp.Notifications.DISABLE_VIDEO_EVENTS, [\"paused\", \"ended\", \"durationchange\", \"error\"]);\n }\n\n /** @override */\n\n }, {\n key: \"reset\",\n value: function reset(media) {\n babelHelpers.get(IMAFullscreenProxy.prototype.__proto__ || Object.getPrototypeOf(IMAFullscreenProxy.prototype), \"reset\", this).call(this, media);\n this.sendNotification(akamai.amp.Notifications.ENABLE_VIDEO_EVENTS, [\"paused\", \"ended\", \"durationchange\", \"error\"]);\n }\n\n /** @override */\n\n }, {\n key: \"breakStart\",\n value: function breakStart() {\n this.playbackCore = this.facade.player.retrieveProxy(akamai.amp.PlayerProxy.NAME).getActivePlaybackCore();\n this.playbackCore.setEnabled(false);\n this.setInProgress(true);\n }\n\n /** @override */\n\n }, {\n key: \"breakEnd\",\n value: function breakEnd() {\n babelHelpers.get(IMAFullscreenProxy.prototype.__proto__ || Object.getPrototypeOf(IMAFullscreenProxy.prototype), \"breakEnd\", this).call(this);\n this.playbackCore.setEnabled(true);\n }\n }], [{\n key: \"NAME\",\n get: function get() {\n return IMAProxy.NAME;\n }\n }]);\n return IMAFullscreenProxy;\n}(IMAProxy);\n\nvar IMAAddOverlayCommand = function (_puremvc$SimpleComman) {\n babelHelpers.inherits(IMAAddOverlayCommand, _puremvc$SimpleComman);\n\n /**\n * The IMAAddOverlayCommand class.\n *\n * @constructor\n * @private\n * @extends {puremvc.SimpleCommand}\n */\n function IMAAddOverlayCommand() {\n babelHelpers.classCallCheck(this, IMAAddOverlayCommand);\n return babelHelpers.possibleConstructorReturn(this, (IMAAddOverlayCommand.__proto__ || Object.getPrototypeOf(IMAAddOverlayCommand)).call(this));\n }\n\n /**\n * Executes the command.\n *\n * @param {puremvc.Notification} notification\n * The notification.\n *\n * @override\n */\n\n\n babelHelpers.createClass(IMAAddOverlayCommand, [{\n key: \"execute\",\n value: function execute(notification) {\n this.facade.sendNotification(akamai.amp.Notifications.ADD_APPLICATION_STATE, \"ad-overlay-mode\");\n }\n }]);\n return IMAAddOverlayCommand;\n}(puremvc.SimpleCommand);\n\nvar IMARemoveOverlayCommand = function (_puremvc$SimpleComman) {\n babelHelpers.inherits(IMARemoveOverlayCommand, _puremvc$SimpleComman);\n\n /**\n * The IMARemoveOverlayCommand class.\n *\n * @constructor\n * @private\n * @extends {puremvc.SimpleCommand}\n */\n function IMARemoveOverlayCommand() {\n babelHelpers.classCallCheck(this, IMARemoveOverlayCommand);\n return babelHelpers.possibleConstructorReturn(this, (IMARemoveOverlayCommand.__proto__ || Object.getPrototypeOf(IMARemoveOverlayCommand)).call(this));\n }\n\n /**\n * Executes the command.\n *\n * @param {puremvc.Notification} notification\n * The notification.\n *\n * @override\n */\n\n\n babelHelpers.createClass(IMARemoveOverlayCommand, [{\n key: \"execute\",\n value: function execute(notification) {\n var proxy = this.facade.retrieveProxy(IMAOverlayProxy.NAME);\n proxy.stop();\n this.facade.player.sendNotification(akamai.amp.Notifications.REMOVE_APPLICATION_STATE, \"ad-overlay-mode\");\n }\n }]);\n return IMARemoveOverlayCommand;\n}(puremvc.SimpleCommand);\n\nvar IMAOverlayMediator = function (_akamai$amp$OverlayMe) {\n babelHelpers.inherits(IMAOverlayMediator, _akamai$amp$OverlayMe);\n\n /**\n * The IMAOverlayMediator class.\n *\n * @constructor\n * @private\n * @extends {OverlayMediator}\n * @param {Object} viewComponent\n */\n function IMAOverlayMediator() {\n babelHelpers.classCallCheck(this, IMAOverlayMediator);\n\n var _this = babelHelpers.possibleConstructorReturn(this, (IMAOverlayMediator.__proto__ || Object.getPrototypeOf(IMAOverlayMediator)).call(this));\n\n _this.componentName = \"ad-overlay\";\n _this.anchor = null;\n _this.image = null;\n _this.tracker = null;\n _this.tracker2 = null;\n _this.closeButton = null;\n _this.closeText = null;\n return _this;\n }\n\n /**\n * @override\n */\n\n\n babelHelpers.createClass(IMAOverlayMediator, [{\n key: \"onRegister\",\n value: function onRegister() {\n var _this2 = this;\n\n babelHelpers.get(IMAOverlayMediator.prototype.__proto__ || Object.getPrototypeOf(IMAOverlayMediator.prototype), \"onRegister\", this).call(this);\n this.anchor = this.create(\"ad-overlay-anchor\");\n this.anchor.target = \"_blank\";\n this.image = this.create(\"ad-overlay-img\", this.anchor, \"img\");\n this.tracker = this.create();\n this.tracker.width = 0;\n this.tracker.height = 0;\n this.tracker2 = this.create(null, this, \"img\");\n this.tracker2.width = 0;\n this.tracker2.height = 0;\n this.closeButton = this.create(\"ad-close-button\", this.anchor);\n this.closeButton.onclick = function (event) {\n event.stopImmediatePropagation();\n _this2.sendNotification(IMANotifications.REMOVE_OVERLAY);\n return false;\n };\n this.closeText = this.createText(\"ad-close-text\", \"x\", this.closeButton);\n }\n\n /**\n * @override\n */\n\n }, {\n key: \"listNotificationInterests\",\n value: function listNotificationInterests() {\n return [IMANotifications.ADD_OVERLAY, IMANotifications.REMOVE_OVERLAY];\n }\n\n /**\n * @override\n */\n\n }, {\n key: \"handleNotification\",\n value: function handleNotification(notification) {\n var ad;\n switch (notification.getName()) {\n case IMANotifications.ADD_OVERLAY:\n ad = notification.getBody();\n this.image.src = ad.src;\n this.anchor.href = ad.href;\n this.tracker.src = ad.tracking[0];\n this.tracker2.src = ad.tracking[1];\n }\n }\n }]);\n return IMAOverlayMediator;\n}(akamai.amp.OverlayMediator);\n\nvar IMAReadyCommand = function (_puremvc$SimpleComman) {\n babelHelpers.inherits(IMAReadyCommand, _puremvc$SimpleComman);\n\n /**\n * The IMAReadyCommand class.\n *\n * @constructor\n * @private\n * @extends {puremvc.SimpleCommand}\n */\n function IMAReadyCommand() {\n babelHelpers.classCallCheck(this, IMAReadyCommand);\n return babelHelpers.possibleConstructorReturn(this, (IMAReadyCommand.__proto__ || Object.getPrototypeOf(IMAReadyCommand)).call(this));\n }\n\n /**\n * Executes the command.\n *\n * @param {puremvc.Notification} notification\n * The notification.\n *\n * @override\n */\n\n\n babelHelpers.createClass(IMAReadyCommand, [{\n key: \"execute\",\n value: function execute(notification) {\n var _this2 = this;\n\n // this timeout is needed to allow other plugins to provide an ad container during the ready event\n setTimeout(function () {\n return _this2.facade.retrieveProxy(IMAProxy.NAME).ready();\n }, 10);\n }\n }]);\n return IMAReadyCommand;\n}(puremvc.SimpleCommand);\n\nvar IMADisplayStateChangeCommand = function (_puremvc$SimpleComman) {\n babelHelpers.inherits(IMADisplayStateChangeCommand, _puremvc$SimpleComman);\n\n /**\n * The IMADisplayStateChangeCommand class.\n *\n * @constructor\n * @private\n * @extends {puremvc.SimpleCommand}\n */\n function IMADisplayStateChangeCommand() {\n babelHelpers.classCallCheck(this, IMADisplayStateChangeCommand);\n return babelHelpers.possibleConstructorReturn(this, (IMADisplayStateChangeCommand.__proto__ || Object.getPrototypeOf(IMADisplayStateChangeCommand)).call(this));\n }\n\n /**\n * Executes the command.\n *\n * @param {puremvc.Notification} notification\n * The notification.\n *\n * @override\n */\n\n\n babelHelpers.createClass(IMADisplayStateChangeCommand, [{\n key: \"execute\",\n value: function execute(notification) {\n this.facade.retrieveProxy(IMAProxy.NAME).resize(notification.getBody());\n }\n }]);\n return IMADisplayStateChangeCommand;\n}(puremvc.SimpleCommand);\n\nvar IMAActiveStateChangeCommand = function (_puremvc$SimpleComman) {\n babelHelpers.inherits(IMAActiveStateChangeCommand, _puremvc$SimpleComman);\n\n /**\n * The IMAActiveStateChangeCommand class.\n *\n * @constructor\n * @private\n * @extends {puremvc.SimpleCommand}\n */\n function IMAActiveStateChangeCommand() {\n babelHelpers.classCallCheck(this, IMAActiveStateChangeCommand);\n return babelHelpers.possibleConstructorReturn(this, (IMAActiveStateChangeCommand.__proto__ || Object.getPrototypeOf(IMAActiveStateChangeCommand)).call(this));\n }\n\n /**\n * Executes the command.\n *\n * @param {puremvc.Notification} notification\n * The notification.\n *\n * @override\n */\n\n\n babelHelpers.createClass(IMAActiveStateChangeCommand, [{\n key: \"execute\",\n value: function execute(notification) {\n this.facade.retrieveProxy(IMAProxy.NAME).resize(notification.getBody());\n }\n }]);\n return IMAActiveStateChangeCommand;\n}(puremvc.SimpleCommand);\n\nvar IMAPlugin = function (_akamai$amp$ads$AdPlu) {\n babelHelpers.inherits(IMAPlugin, _akamai$amp$ads$AdPlu);\n\n /**\n * The IMAPlugin class.\n *\n * @param {Module} app The parent module of this plugin.\n * @constructor\n * @private\n * @extends {AdPlugin}\n */\n function IMAPlugin() {\n babelHelpers.classCallCheck(this, IMAPlugin);\n return babelHelpers.possibleConstructorReturn(this, (IMAPlugin.__proto__ || Object.getPrototypeOf(IMAPlugin)).call(this));\n }\n\n babelHelpers.createClass(IMAPlugin, [{\n key: \"createFullscreenProxy\",\n value: function createFullscreenProxy() {\n return new IMAFullscreenProxy(this.config);\n }\n }, {\n key: \"createProxy\",\n value: function createProxy() {\n return new IMAProxy(this.config);\n }\n }, {\n key: \"isFullscreenDevice\",\n value: function isFullscreenDevice() {\n var ua = navigator.userAgent;\n return this.config.fullscreen === true || akamai.amp.Utils.isFullscreenDevice() || /Android 4\\.[0-1]/.test(ua) || /CrKey/.test(ua);\n }\n\n /** @override */\n\n }, {\n key: \"createModel\",\n value: function createModel() {\n babelHelpers.get(IMAPlugin.prototype.__proto__ || Object.getPrototypeOf(IMAPlugin.prototype), \"createModel\", this).call(this);\n if (this.config.overlay != null) {\n this.registerProxy(new IMAOverlayProxy(this.config.overlay));\n }\n }\n\n /** @override */\n\n }, {\n key: \"createController\",\n value: function createController() {\n babelHelpers.get(IMAPlugin.prototype.__proto__ || Object.getPrototypeOf(IMAPlugin.prototype), \"createController\", this).call(this);\n if (this.config.overlay != null) {\n this.registerCommand(IMANotifications.ADD_OVERLAY, IMAAddOverlayCommand);\n this.registerCommand(IMANotifications.REMOVE_OVERLAY, IMARemoveOverlayCommand);\n }\n this.registerCommand(akamai.amp.Notifications.READY, IMAReadyCommand);\n this.registerCommand(akamai.amp.Notifications.FULL_SCREEN_CHANGE, IMADisplayStateChangeCommand);\n this.registerCommand(akamai.amp.Notifications.CHANGE_ACTIVE_STATE, IMAActiveStateChangeCommand);\n }\n\n /** @override */\n\n }, {\n key: \"createView\",\n value: function createView() {\n babelHelpers.get(IMAPlugin.prototype.__proto__ || Object.getPrototypeOf(IMAPlugin.prototype), \"createView\", this).call(this);\n if (this.config.overlay != null) {\n this.registerMediator(new IMAOverlayMediator());\n }\n }\n }, {\n key: \"moduleName\",\n get: function get() {\n return \"ima\";\n }\n }]);\n return IMAPlugin;\n}(akamai.amp.ads.AdPlugin);\n\nakamai.amp.AMP.registerPlugin(\"ima\", \"html\", akamai.amp.Plugin.createPureMVCFactory(IMAPlugin));\nakamai.amp.AMP.registerPlugin(\"ima\", \"flash\", akamai.amp.Plugin.createPureMVCFlashFactory(IMAWrapper));\n\nexports.IMA = IMAPlugin;\n\n}((this.akamai.amp.ima = this.akamai.amp.ima || {})));\n//# sourceMappingURL=Ima.js.map\n"],"names":["exports","IMANotifications","babelHelpers","classCallCheck","this","createClass","key","get","IMAWrapper","_akamai$amp$ads$AdWra","inherits","possibleConstructorReturn","__proto__","Object","getPrototypeOf","apply","arguments","value","createXML","xml","admedia","application","companion","companions","i","ids","j","k","len","len1","len2","overlay","prop","props","ref","vendor","firstChild","getElementsByTagName","createElement","appendChild","setAttribute","config","adTagUrl","maxBitrate","sceneMarkers","ppid","length","createProperty","position","params","adTag","manual","push","width","height","id","join","disableCompanionAds","enabled","delay","interval","duration","src","blocking","host","main","type","akamai","amp","ads","AdWrapper","IMAOverlayProxy","_akamai$amp$DataBound","_this","call","configurationName","durationTimer","intervalTimer","delayTimer","stop","clearTimeout","play","_this2","setTimeout","requestAd","getValue","replace","Date","getTime","Utils","request","url","withCredentials","then","vastLoadHandler","bind","catch","error","xhr","ad","clickThroughHref","creativeView","img","impression","target","responseXML","querySelector","textContent","getAttribute","tracking","href","displayAd","error1","_error","facade","logger","_this3","sendNotification","ADD_OVERLAY","REMOVE_OVERLAY","DataBoundConfigurationProxy","IMAProxy","_akamai$amp$ads$AdPro","intervals","partner","adDisplayContainer","adDisplayContainerInitialized","adsLoader","adsRenderingSettings","adsManagerLoaded","adsManager","cuepoints","adLoaded","playWhenLoaded","contentHasEnded","viewMode","playbackCore","loadedmetadata","onLoadedMetadata","adVO","createDefaultAdVO","setEnabled","prototype","destroy","getInProgress","contentPlay","event","canPlay","startAd","initialize","ready","isAndroidChrome","mode","userAgentMatch","google","ima","ViewMode","NORMAL","window","addEventListener","resize","vpaidAllowed","settings","setVpaidAllowed","vpaidMode","ImaSdkSettings","VpaidMode","toUpperCase","setVpaidMode","disableFlashAds","setDisableFlashAds","createPlugin","AdsLoader","navigator","userAgent","match","parseInt","getIOSversion","player","getConfig","playsinline","setDisableCustomPlaybackForIOS10Plus","AdsRenderingSettings","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdDisplayContainer","getContainer","engage","override","undefined","ref1","getEnabled","setVolume","getVolume","adsRequest","dimensions","getDimensions","clientWidth","clientHeight","AdsRequest","typeof","buildAdTagUrl","adsResponse","linearAdSlotWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","getSettings","setPpid","AdRequest","create","getData","Promise","resolve","requestText","text","processAdRequest","result","requestAds","requestOverlay","start","load","video","retrieveProxy","PlayerProxy","NAME","getActivePlaybackCore","getMediaElement","once","isFullscreenDevice","isLiveMidroll","MediaProxy","getTemporalType","adError","init","getViewComponent","state","DisplayState","FULL_SCREEN","FULLSCREEN","adsManagerLoadedEvent","adEventHandler","bitrate","autoAlign","useStyledNonLinearAds","entries","forEach","entry","getAdsManager","mediaElement","AdNotifications","AD_MANAGER_LOADED","adManager","adContainer","cuePoints","getCuePoints","setCues","indexOf","Notifications","HAS_POST_CONTENT","onAdEvent","AdEvent","CONTENT_PAUSE_REQUESTED","contentPause","CONTENT_RESUME_REQUESTED","ALL_ADS_COMPLETED","LOADED","STARTED","RESUMED","onAdResumed","PAUSED","onAdPaused","COMPLETE","CLICK","onAdClick","IMPRESSION","FIRST_QUARTILE","MIDPOINT","THIRD_QUARTILE","SKIPPED","LOG","REQUEST_COMPLETE","pods","RESPONSE","response","adEvent","getAd","isLinear","PAUSE","getPaused","pause","AD_CLICKED","setPaused","CHANGE_PLAY_STATE","PlayState","CHANGE_ACTIVE_STATE","ActiveState","ACTIVE","AD_PAUSED","PLAYING","pos","wrapperAdIds","getWrapperAdIds","wrapperAdSystems","getWrapperAdSystems","metadata","REMOVE_APPLICATION_STATE","getAdPodInfo","getPodIndex","AdVO","getAdId","getDuration","getTotalAds","getRemainingTime","startBreak","engageAds","AD_LOADED","AD_DURATION_CHANGE","ApplicationStateProxy","ADD_APPLICATION_STATE","getAdPosition","AD_STARTED","setInterval","onAdTimeUpdate","AD_PLAY","getConfigurationData","concat","getCompanionAds","setCompanions","AD_ENDED","getEnded","getAdData","forceBreakEnd","endBreak","container","remaining","time","clamp","Math","max","AD_TIME_UPDATE","AD_TIME_REMAINING","adErrorEvent","getError","resume","AD_RESUME","clearIntervals","clearInterval","pop","breakEnd","overlayProxy","data","getContent","getContentType","toLowerCase","getWidth","getHeight","_this4","events","getSeeking","DISABLE_VIDEO_EVENTS","volume","ENABLE_VIDEO_EVENTS","getDevice","setCurrentTime","floor","getCurrentTime","contentEnded","contentComplete","terminateAd","terminateAllAds","adTagObj","base","encodeAdTagParams","adTagParams","encodeURIComponent","logEventsEnabled","AdProxy","IMAFullscreenProxy","_IMAProxy","isIPhone","playsInline","media","reset","breakStart","setInProgress","IMAAddOverlayCommand","_puremvc$SimpleComman","execute","notification","puremvc","SimpleCommand","IMARemoveOverlayCommand","proxy","IMAOverlayMediator","_akamai$amp$OverlayMe","componentName","anchor","image","tracker","tracker2","closeButton","closeText","onRegister","onclick","stopImmediatePropagation","createText","listNotificationInterests","handleNotification","getName","getBody","OverlayMediator","IMAReadyCommand","IMADisplayStateChangeCommand","IMAActiveStateChangeCommand","IMAPlugin","_akamai$amp$ads$AdPlu","createFullscreenProxy","createProxy","ua","fullscreen","test","createModel","registerProxy","createController","registerCommand","READY","FULL_SCREEN_CHANGE","createView","registerMediator","AdPlugin","AMP","registerPlugin","Plugin","createPureMVCFactory","createPureMVCFlashFactory","IMA"],"mappings":"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"}