Created
December 15, 2016 22:14
-
-
Save micha/5ac56567ade528d4b357f79f0600a7dd to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/****************************************************************************** | |
* | |
* 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