Skip to content

Instantly share code, notes, and snippets.

@micha
Created December 15, 2016 22:14
Show Gist options
  • Save micha/5ac56567ade528d4b357f79f0600a7dd to your computer and use it in GitHub Desktop.
Save micha/5ac56567ade528d4b357f79f0600a7dd to your computer and use it in GitHub Desktop.
/******************************************************************************
*
* Adzerk header bidding boilerplate.
*
*****************************************************************************/
window.adospb = (function() {
window.pbjs = window.pbjs || {};
window.pbjs.que = window.pbjs.que || [];
window.ados = window.ados || {};
window.ados.run = window.ados.run || [];
function assert() {
if (pbjs.logging)
console.assert.apply(null, Array.prototype.slice.call(arguments));
}
function bestBid(bids) {
var bid = null;
for (var i = 0; i < bids.length; i++)
if (bids[i].cpm > ((bid || {}).cpm || 0)) bid = bids[i];
return bid;
}
function getAdTypes(placementOpt) {
var adTypes = Object.keys(placementOpt.adTypes);
for (var i = 0; i < adTypes.length; i++)
adTypes[i] = parseInt(adTypes[i]);
return adTypes;
}
function getOverrides(bid, flightId) {
var overrides = {flights: {}};
overrides.flights[flightId] = {ecpm: bid.cpm};
return overrides;
}
function addPlacement(divId, placementOpt, bids) {
var networkId = placementOpt.networkId;
var siteId = placementOpt.siteId;
var adTypes = getAdTypes(placementOpt);
var bid = bestBid(bids);
var flightId = bid ? placementOpt.bids[bid.adserverTargeting.hb_bidder].flightId : null;
var properties = bid ? bid.adserverTargeting : {};
var overrides = bid ? getOverrides(bid, flightId) : {};
return function() {
ados_add_placement(networkId, siteId, divId, adTypes)
.setProperties(properties)
.setOverrides(overrides);
};
}
function getAdUnit(divId, placementOpt) {
var adUnit = {code: divId, sizes: [], bids: []};
for (var adType in placementOpt.adTypes)
adUnit.sizes.push(placementOpt.adTypes[adType]);
for (var bidder in placementOpt.bids)
adUnit.bids.push({bidder: bidder, params: placementOpt.bids[bidder].params});
return adUnit;
}
return function(opts) {
opts = opts || {};
pbjs.que.push(function() {
var PREBID_TIMEOUT = opts.timeout || 300;
var adUnits = [];
var placementOpts = opts.placements;
for (var divId in placementOpts)
adUnits.push(getAdUnit(divId, placementOpts[divId]));
pbjs.addAdUnits(adUnits);
function initAdserver() {
if (pbjs.initAdserverSet) return;
pbjs.initAdserverSet = true;
var bidResponses = pbjs.getBidResponses();
if (opts.domain)
ados.run.push(function() { ados_setDomain(opts.domain) });
for (var divId in bidResponses)
ados.run.push(function() {
pbjs.que.push(addPlacement(divId, placementOpts[divId], bidResponses[divId].bids));
});
ados.run.push(function() { pbjs.que.push(ados_load) });
}
if (opts.beforeRequestBids) opts.beforeRequestBids();
pbjs.requestBids({bidsBackHandler: initAdserver});
setTimeout(initAdserver, PREBID_TIMEOUT);
});
};
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment