UNPKG

videojs-vast-vpaid

Version:
83 lines (64 loc) 2.5 kB
const VPAIDHTML5Client = require('vpaid-html5-client/js/VPAIDHTML5Client'); const MimeTypes = require('../../utils/mimetypes'); const VASTError = require('../vast/VASTError'); const utilities = require('../../utils/utilityFunctions'); const dom = require('../../utils/dom'); const logger = require('../../utils/consoleLogger'); function VPAIDHTML5Tech (mediaFile) { if (!(this instanceof VPAIDHTML5Tech)) { return new VPAIDHTML5Tech(mediaFile); } sanityCheck(mediaFile); this.name = 'vpaid-html5'; this.containerEl = null; this.videoEl = null; this.vpaidHTMLClient = null; this.mediaFile = mediaFile; function sanityCheck (mediaFile) { if (!mediaFile || !utilities.isString(mediaFile.src)) { throw new VASTError(VPAIDHTML5Tech.INVALID_MEDIA_FILE); } } } VPAIDHTML5Tech.VPAIDHTML5Client = VPAIDHTML5Client; VPAIDHTML5Tech.supports = function (type) { return !utilities.isOldIE() && MimeTypes.html5.indexOf(type) > -1; }; VPAIDHTML5Tech.prototype.loadAdUnit = function loadAdUnit (containerEl, videoEl, callback) { sanityCheck(containerEl, videoEl, callback); this.containerEl = containerEl; this.videoEl = videoEl; this.vpaidHTMLClient = new VPAIDHTML5Tech.VPAIDHTML5Client(containerEl, videoEl, {}); this.vpaidHTMLClient.loadAdUnit(this.mediaFile.src, callback); function sanityCheck (container, video, cb) { if (!dom.isDomElement(container)) { throw new VASTError(VPAIDHTML5Tech.INVALID_DOM_CONTAINER_EL); } if (!dom.isDomElement(video) || video.tagName.toLowerCase() !== 'video') { throw new VASTError(VPAIDHTML5Tech.INVALID_DOM_CONTAINER_EL); } if (!utilities.isFunction(cb)) { throw new VASTError(VPAIDHTML5Tech.MISSING_CALLBACK); } } }; VPAIDHTML5Tech.prototype.unloadAdUnit = function unloadAdUnit () { if (this.vpaidHTMLClient) { try { this.vpaidHTMLClient.destroy(); } catch (e) { logger.error('VAST ERROR: trying to unload the VPAID adunit'); } this.vpaidHTMLClient = null; } if (this.containerEl) { dom.remove(this.containerEl); this.containerEl = null; } }; const PREFIX = 'on VPAIDHTML5Tech'; VPAIDHTML5Tech.INVALID_MEDIA_FILE = PREFIX + ', invalid MediaFile'; VPAIDHTML5Tech.INVALID_DOM_CONTAINER_EL = PREFIX + ', invalid container HtmlElement'; VPAIDHTML5Tech.INVALID_DOM_VIDEO_EL = PREFIX + ', invalid HTMLVideoElement'; VPAIDHTML5Tech.MISSING_CALLBACK = PREFIX + ', missing valid callback'; module.exports = VPAIDHTML5Tech;