videojs-vast-vpaid
Version:
VAST plugin to use with video.js
83 lines (64 loc) • 2.5 kB
JavaScript
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;