Skip to content

Commit

Permalink
Postbid bugfix (prebid#1844)
Browse files Browse the repository at this point in the history
* postbid bugfix for passbackTag

* Added comment
  • Loading branch information
jaiminpanchal27 authored and Matt Kendall committed Nov 28, 2017
1 parent 214ba19 commit 2e7783a
Show file tree
Hide file tree
Showing 4 changed files with 88 additions and 4 deletions.
18 changes: 15 additions & 3 deletions gulpfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ var gulpif = require('gulp-if');
var sourcemaps = require('gulp-sourcemaps');
var through = require('through2');
var fs = require('fs');
var jsEscape = require('gulp-js-escape');

var prebid = require('./package.json');
var dateString = 'Updated : ' + (new Date()).toISOString().substring(0, 10);
Expand Down Expand Up @@ -296,10 +297,21 @@ gulp.task('e2etest-report', function() {
}, 5000);
});

gulp.task('build-postbid', function() {
// This task creates postbid.js. Postbid setup is different from prebid.js
// More info can be found here http://prebid.org/overview/what-is-post-bid.html
gulp.task('build-postbid', ['escape-postbid-config'], function() {
var fileContent = fs.readFileSync('./build/postbid/postbid-config.js', 'utf8');

return gulp.src('./integrationExamples/postbid/oas/postbid.js')
.pipe(uglify())
.pipe(gulp.dest('build/dist'));
.pipe(replace('\[%%postbid%%\]', fileContent))
.pipe(gulp.dest('build/postbid/'));
});

// Dependant task for building postbid. It escapes postbid-config file.
gulp.task('escape-postbid-config', function() {
gulp.src('./integrationExamples/postbid/oas/postbid-config.js')
.pipe(jsEscape())
.pipe(gulp.dest('build/postbid/'));
});

module.exports = nodeBundle;
54 changes: 54 additions & 0 deletions integrationExamples/postbid/oas/postbid-config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<script type="text/javascript">
var pbjs = pbjs || {};
pbjs.que = pbjs.que || [];

(function() {
var pbjsEl = document.createElement("script"); pbjsEl.type = "text/javascript";
pbjsEl.async = true; var isHttps = 'https:' === document.location.protocol;
pbjsEl.src = (isHttps ? "https" : "http") + "://acdn.adnxs.com/prebid/not-for-prod/prebid.js";
var pbjsTargetEl = document.getElementsByTagName("head")[0];
pbjsTargetEl.insertBefore(pbjsEl, pbjsTargetEl.firstChild);
})();

pbjs.que.push(function() {
var adUnits = [{
code: '[%%adUnitCode%%]',
sizes: [%%sizes%%],
bids: [%%adUnitBids%%]
}];
pbjs.addAdUnits(adUnits);

pbjs.requestBids({
timeout: [%%timeout%%],
bidsBackHandler: function() {
var iframe = document.getElementById('postbid_if_3');
var iframeDoc = iframe.contentWindow.document;
var params = pbjs.getAdserverTargetingForAdUnitCode('[%%adUnitCode%%]');

// If any bidders return any creatives
var bid;
if(params && params['hb_adid']){
var bid;
for(i=0; i< pbjs._bidsReceived.length; i++ ) {
if (params['hb_adid'] === pbjs._bidsReceived[i].adId) {
bid = pbjs._bidsReceived[i];
break;
}
}
pbjs.renderAd(iframeDoc, params['hb_adid']);
} else {
// If no bidder return any creatives,
// Passback 3rd party tag in Javascript
iframe.width = [%%size0%%];
iframe.height = [%%size1%%];
iframeDoc.write('[%%passbackTagHtml%%]');
}

var iframeResize = window.parent.document.getElementById('[%%targetId%%]');
iframeResize.height = (bid.height) ? bid.height+'px' : '[%%size1%%]px';
iframeResize.width = (bid.width) ? bid.width+'px' : '[%%size0%%]px';
}
});
});
</script>
<iframe id='postbid_if_3' FRAMEBORDER="0" SCROLLING="no" MARGINHEIGHT="0" MARGINWIDTH="0" TOPMARGIN="0" LEFTMARGIN="0" ALLOWTRANSPARENCY="true" WIDTH="0" HEIGHT="0"></iframe>
19 changes: 18 additions & 1 deletion integrationExamples/postbid/oas/postbid.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/* eslint-disable */
(function(window){
var postbid = {};
postbid.que = [];
Expand Down Expand Up @@ -100,7 +101,22 @@
}

postbid.que.push(function(conf) {
var content = "\n <script type=\"text/javascript\">\n if (!Array.prototype.find) {\n Object.defineProperty(Array.prototype, 'find', {\n value: function(predicate) {\n if (this == null) {\n throw new TypeError('\"this\" is null or not defined');\n }\n var o = Object(this);\n var len = o.length >>> 0;\n if (typeof predicate !== 'function') {\n throw new TypeError('predicate must be a function');\n }\n var thisArg = arguments[1];\n var k = 0;\n while (k < len) {\n var kValue = o[k];\n if (predicate.call(thisArg, kValue, k, o)) {\n return kValue;\n }\n k++;\n }\n return undefined;\n }\n });\n }\n\n var pbjs = pbjs || {};\n pbjs.que = pbjs.que || [];\n\n (function() {\n var pbjsEl = document.createElement(\"script\"); pbjsEl.type = \"text/javascript\";\n pbjsEl.async = true; var isHttps = 'https:' === document.location.protocol;\n pbjsEl.src = (isHttps ? \"https\" : \"http\") + \"://acdn.adnxs.com/prebid/not-for-prod/prebid.js\";\n var pbjsTargetEl = document.getElementsByTagName(\"head\")[0];\n pbjsTargetEl.insertBefore(pbjsEl, pbjsTargetEl.firstChild);\n })();\n\n pbjs.que.push(function() {\n var adUnits = [{\n code: '" + conf.adUnitCode + "',\n sizes: " + conf.adUnitSizes + ",\n bids: " + conf.adUnitBids + "\n }];\n\n pbjs.addAdUnits(adUnits);\n\n pbjs.requestBids({\n timeout: " + conf.timout + ",\n bidsBackHandler: function() {\n var iframe = document.getElementById('postbid_if_3');\n\n var iframeDoc = iframe.contentWindow.document;\n\n var params = pbjs.getAdserverTargetingForAdUnitCode('" + conf.adUnitCode + "');\n\n // If any bidders return any creatives\n var bid;\n if(params && params['hb_adid']){\n bid = pbjs._bidsReceived.find(function(bid) {\n return bid.adId === params['hb_adid'];\n });\n pbjs.renderAd(iframeDoc, params['hb_adid']);\n } else {\n // If no bidder return any creatives,\n // Passback 3rd party tag in Javascript\n\n iframe.width = '" + conf.adUnitSizes[0] + "';\n iframe.height = '" + conf.adUnitSizes[1] + "';\n\n iframeDoc.write('" + conf.passbackTagHtml + "');\n }\n\n var iframeResize = window.parent.document.getElementById('" + conf.targetId + "');\n iframeResize.height = (bid.height) ? bid.height+'px' : '" + conf.adUnitSizes[1] + "px';\n iframeResize.width = (bid.width) ? bid.width+'px' : '" + conf.adUnitSizes[0] + "px';\n }\n });\n });\n <"+ '' +"/script>\n <iframe id='postbid_if_3' FRAMEBORDER=\"0\" SCROLLING=\"no\" MARGINHEIGHT=\"0\" MARGINWIDTH=\"0\" TOPMARGIN=\"0\" LEFTMARGIN=\"0\" ALLOWTRANSPARENCY=\"true\" WIDTH=\"0\" HEIGHT=\"0\"></iframe>";
var sizes = JSON.parse(conf.adUnitSizes);
var timeout = conf.timeout;
var adUnitCode = conf.adUnitCode;
var adUnitBids = conf.adUnitBids;
var targetId = conf.targetId;
var passbackTagHtml = conf.passbackTagHtml;

var content = [%%postbid%%];
content = content.replace(/\[%%targetId%%\]/g, targetId);
content = content.replace(/\[%%adUnitCode%%\]/g, adUnitCode);
content = content.replace(/\[%%timeout%%\]/g, timeout);
content = content.replace(/\[%%adUnitBids%%\]/g, adUnitBids);
content = content.replace(/\[%%passbackTagHtml%%\]/g, passbackTagHtml);
content = content.replace(/\[%%sizes%%\]/g, conf.adUnitSizes);
content = content.replace(/\[%%size0%%\]/g, sizes[0]);
content = content.replace(/\[%%size1%%\]/g, sizes[1]);

var iframe = createIframe(conf.targetId);
var div = document.getElementById(conf.divId);
Expand All @@ -116,3 +132,4 @@
window.processQue = processQue;

})(window);
/* eslint-enable */
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
"gulp-footer": "^1.0.5",
"gulp-header": "^1.7.1",
"gulp-if": "^2.0.2",
"gulp-js-escape": "^1.0.1",
"gulp-optimize-js": "^1.1.0",
"gulp-rename": "^1.2.0",
"gulp-replace": "^0.4.0",
Expand Down

0 comments on commit 2e7783a

Please sign in to comment.