src/scripts/ads/vpaid/VPAIDHTML5Tech.js
'use strict';
var MimeTypes = require('../../utils/mimetypes');
var VASTError = require('../vast/VASTError');
var VPAIDHTML5Client = require('VPAIDHTML5Client/js/VPAIDHTML5Client');
var utilities = require('../../utils/utilityFunctions');
var dom = require('../../utils/dom');
var 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;
}
};
var 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;