js/IVPAIDAdUnit.js
'use strict';
var METHODS = [
'handshakeVersion',
'initAd',
'startAd',
'stopAd',
'skipAd', // VPAID 2.0 new method
'resizeAd',
'pauseAd',
'resumeAd',
'expandAd',
'collapseAd',
'subscribe',
'unsubscribe'
];
var EVENTS = [
'AdLoaded',
'AdStarted',
'AdStopped',
'AdSkipped',
'AdSkippableStateChange', // VPAID 2.0 new event
'AdSizeChange', // VPAID 2.0 new event
'AdLinearChange',
'AdDurationChange', // VPAID 2.0 new event
'AdExpandedChange',
'AdRemainingTimeChange', // [Deprecated in 2.0] but will be still fired for backwards compatibility
'AdVolumeChange',
'AdImpression',
'AdVideoStart',
'AdVideoFirstQuartile',
'AdVideoMidpoint',
'AdVideoThirdQuartile',
'AdVideoComplete',
'AdClickThru',
'AdInteraction', // VPAID 2.0 new event
'AdUserAcceptInvitation',
'AdUserMinimize',
'AdUserClose',
'AdPaused',
'AdPlaying',
'AdLog',
'AdError'
];
var GETTERS = [
'getAdLinear',
'getAdWidth', // VPAID 2.0 new getter
'getAdHeight', // VPAID 2.0 new getter
'getAdExpanded',
'getAdSkippableState', // VPAID 2.0 new getter
'getAdRemainingTime',
'getAdDuration', // VPAID 2.0 new getter
'getAdVolume',
'getAdCompanions', // VPAID 2.0 new getter
'getAdIcons' // VPAID 2.0 new getter
];
var SETTERS = [
'setAdVolume'
];
/**
* This callback is displayed as global member. The callback use nodejs error-first callback style
* @callback NodeStyleCallback
* @param {string|null}
* @param {undefined|object}
*/
/**
* IVPAIDAdUnit
*
* @class
*
* @param {object} creative
* @param {HTMLElement} el
* @param {HTMLVideoElement} video
*/
function IVPAIDAdUnit(creative, el, video) {}
/**
* handshakeVersion
*
* @param {string} VPAIDVersion
* @param {nodeStyleCallback} callback
*/
IVPAIDAdUnit.prototype.handshakeVersion = function (VPAIDVersion, callback) {};
/**
* initAd
*
* @param {number} width
* @param {number} height
* @param {string} viewMode can be 'normal', 'thumbnail' or 'fullscreen'
* @param {number} desiredBitrate indicates the desired bitrate in kbps
* @param {object} [creativeData] used for additional initialization data
* @param {object} [environmentVars] used for passing implementation-specific of js version
* @param {NodeStyleCallback} callback
*/
IVPAIDAdUnit.prototype.initAd = function(width, height, viewMode, desiredBitrate, creativeData, environmentVars, callback) {};
/**
* startAd
*
* @param {nodeStyleCallback} callback
*/
IVPAIDAdUnit.prototype.startAd = function(callback) {};
/**
* stopAd
*
* @param {nodeStyleCallback} callback
*/
IVPAIDAdUnit.prototype.stopAd = function(callback) {};
/**
* skipAd
*
* @param {nodeStyleCallback} callback
*/
IVPAIDAdUnit.prototype.skipAd = function(callback) {};
/**
* resizeAd
*
* @param {nodeStyleCallback} callback
*/
IVPAIDAdUnit.prototype.resizeAd = function(width, height, viewMode, callback) {};
/**
* pauseAd
*
* @param {nodeStyleCallback} callback
*/
IVPAIDAdUnit.prototype.pauseAd = function(callback) {};
/**
* resumeAd
*
* @param {nodeStyleCallback} callback
*/
IVPAIDAdUnit.prototype.resumeAd = function(callback) {};
/**
* expandAd
*
* @param {nodeStyleCallback} callback
*/
IVPAIDAdUnit.prototype.expandAd = function(callback) {};
/**
* collapseAd
*
* @param {nodeStyleCallback} callback
*/
IVPAIDAdUnit.prototype.collapseAd = function(callback) {};
/**
* subscribe
*
* @param {string} event
* @param {nodeStyleCallback} handler
* @param {object} context
*/
IVPAIDAdUnit.prototype.subscribe = function(event, handler, context) {};
/**
* startAd
*
* @param {string} event
* @param {function} handler
*/
IVPAIDAdUnit.prototype.unsubscribe = function(event, handler) {};
/**
* getAdLinear
*
* @param {nodeStyleCallback} callback
*/
IVPAIDAdUnit.prototype.getAdLinear = function(callback) {};
/**
* getAdWidth
*
* @param {nodeStyleCallback} callback
*/
IVPAIDAdUnit.prototype.getAdWidth = function(callback) {};
/**
* getAdHeight
*
* @param {nodeStyleCallback} callback
*/
IVPAIDAdUnit.prototype.getAdHeight = function(callback) {};
/**
* getAdExpanded
*
* @param {nodeStyleCallback} callback
*/
IVPAIDAdUnit.prototype.getAdExpanded = function(callback) {};
/**
* getAdSkippableState
*
* @param {nodeStyleCallback} callback
*/
IVPAIDAdUnit.prototype.getAdSkippableState = function(callback) {};
/**
* getAdRemainingTime
*
* @param {nodeStyleCallback} callback
*/
IVPAIDAdUnit.prototype.getAdRemainingTime = function(callback) {};
/**
* getAdDuration
*
* @param {nodeStyleCallback} callback
*/
IVPAIDAdUnit.prototype.getAdDuration = function(callback) {};
/**
* getAdVolume
*
* @param {nodeStyleCallback} callback
*/
IVPAIDAdUnit.prototype.getAdVolume = function(callback) {};
/**
* getAdCompanions
*
* @param {nodeStyleCallback} callback
*/
IVPAIDAdUnit.prototype.getAdCompanions = function(callback) {};
/**
* getAdIcons
*
* @param {nodeStyleCallback} callback
*/
IVPAIDAdUnit.prototype.getAdIcons = function(callback) {};
/**
* setAdVolume
*
* @param {number} volume
* @param {nodeStyleCallback} callback
*/
IVPAIDAdUnit.prototype.setAdVolume = function(volume, callback) {};
addStaticToInterface(IVPAIDAdUnit, 'METHODS', METHODS);
addStaticToInterface(IVPAIDAdUnit, 'GETTERS', GETTERS);
addStaticToInterface(IVPAIDAdUnit, 'SETTERS', SETTERS);
addStaticToInterface(IVPAIDAdUnit, 'EVENTS', EVENTS);
var VPAID1_METHODS = METHODS.filter(function(method) {
return ['skipAd'].indexOf(method) === -1;
});
addStaticToInterface(IVPAIDAdUnit, 'checkVPAIDInterface', function checkVPAIDInterface (creative) {
var result = VPAID1_METHODS.every(function(key) {
return typeof creative[key] === 'function';
});
return result;
});
module.exports = IVPAIDAdUnit;
function addStaticToInterface(Interface, name, value) {
Object.defineProperty(Interface, name, {
writable: false,
configurable: false,
value: value
});
}