Params
opts
Object
opts.name
string
Slot name, ex) RP01
opts.id
string
Slot's container id, ex) ad-div-RP01
opts.sizes
Array.<number, number>
Array.<Array.<number, number>>
ex)
[300, 250] or [[88, 31], [300, 600]] .
opts.adunit
string
Full ad unit code.
[opts.group]
string
Slot group name.
[opts.targeting]
Object.<string, string>
Slot-specific targeting.
[opts.companion]
boolean
True if companion ad.
[opts.mapping]
SizeMapping
Size mapping.
[opts.outofpage]
boolean
True if out-of-page ad.
[opts.preserveId]
boolean
True to never mangle the container id.
[opts.enabled]
boolean
False if ineligible to make ad calls.
[opts.on]
Object.<string, function>
Dictionary of callbacks.
[opts.one]
Object.<string, function>
Dictionary of single-run callbacks.
Returns
AdSlot
See
|
var log = require('../modules/log.js'),
SlotCache = require('../modules/slot-cache.js'),
EventHandler = require('./event-handler.js'),
googletag = require('../modules/googletag.js'),
concatLeft = require('../util/list-concat-left.js'),
mergeLeft = require('../util/map-merge-left.js');
module.exports = function (opts) {
var slot, name,
cache = SlotCache(opts.name),
events = EventHandler({
events: concatLeft(opts.on, cache.get.events()),
singles: concatLeft(opts.one, cache.get.singles())
}),
targeting = mergeLeft(opts.targeting, cache.get.targeting());
|
Create the GPT slot instance. |
if (opts.outofpage) {
slot = googletag.defineOutOfPageSlot(opts.adunit, opts.id);
} else {
slot = googletag.defineSlot(opts.adunit, opts.sizes, opts.id);
}
|
Apply any slot-level targeting. |
for (name in targeting) {
slot.setTargeting(name, targeting[name]);
}
|
Apply the size mapping if set. |
if (opts.mapping) {
slot.defineSizeMapping(opts.mapping);
}
|
slot._name = opts.name;
|
|
Deprecated Do not use |
slot.name = opts.name;
|
slot._id = opts.id;
|
|
return {
|
|
name: opts.name,
|
|
id: opts.id,
|
|
sizes: opts.sizes,
|
|
adunit: opts.adunit,
|
|
group: opts.group || null,
|
|
companion: opts.companion || false,
|
|
outofpage: opts.outofpage || false,
|
|
enabled: opts.enabled === false ? false : true,
|
|
on: events.on,
|
|
one: events.one,
|
|
off: events.off,
|
|
trigger: events.trigger,
|
|
active: false,
|
|
|
gpt: slot,
|
activate: function () {
if (!this.active) {
var pubads = googletag.pubads();
|
|
Params
callback
function(googletag.events.SlotRenderEndedEvent)
See
|
pubads.addEventListener('slotRenderEnded', function (event) {
if (event.slot === slot) {
events.trigger('slotRenderEnded', event);
}
});
|
Params
callback
function(googletag.events.ImpressionViewableEvent)
See
|
pubads.addEventListener('impressionViewable', function (event) {
if (event.slot === slot) {
events.trigger('impressionViewable', event);
}
});
slot.addService(pubads);
if (this.companion) {
slot.addService(googletag.companionAds());
}
this.active = true;
}
}
};
};
|