From 77008ca2abc8620b8072ff7da92def4b043e1c60 Mon Sep 17 00:00:00 2001 From: Matt Cooper Date: Sat, 5 Sep 2015 15:57:02 +1200 Subject: [PATCH] Make it possible to load ads from multiple DFP accounts --- bower.json | 2 +- dfp.jquery.json | 2 +- jquery.dfp.js | 14 +++++++++++--- jquery.dfp.min.js | 4 ++-- package.json | 2 +- tests/spec/adUnitSpec.js | 24 ++++++++++++++++++++++++ 6 files changed, 40 insertions(+), 8 deletions(-) diff --git a/bower.json b/bower.json index 1f3ef86..9ba3ccb 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "jquery.dfp", - "version": "2.1.0", + "version": "2.2.0", "main": "jquery.dfp.js", "ignore": [ "img/", diff --git a/dfp.jquery.json b/dfp.jquery.json index b4e5803..59f4d6d 100644 --- a/dfp.jquery.json +++ b/dfp.jquery.json @@ -8,7 +8,7 @@ "ads", "advertising" ], - "version": "2.1.0", + "version": "2.2.0", "author": { "name": "Matt Cooper", "email": "matt@matthewcooper.net", diff --git a/jquery.dfp.js b/jquery.dfp.js index 2cb347b..a993085 100644 --- a/jquery.dfp.js +++ b/jquery.dfp.js @@ -1,5 +1,5 @@ /** - * jQuery DFP v2.1.0 + * jQuery DFP v2.2.0 * http://github.com/coop182/jquery.dfp.js * * Copyright 2015 Matt Cooper @@ -159,11 +159,19 @@ } else { + // Build slotName for loading + var slotName; + if (dfpID === '') { + slotName = adUnitName; + } else { + slotName = '/' + dfpID + '/' + adUnitName; + } + // Create the ad - out of page or normal if ($adUnit.data('outofpage')) { - googleAdUnit = googletag.defineOutOfPageSlot('/' + dfpID + '/' + adUnitName, adUnitID); + googleAdUnit = googletag.defineOutOfPageSlot(slotName, adUnitID); } else { - googleAdUnit = googletag.defineSlot('/' + dfpID + '/' + adUnitName, dimensions, adUnitID); + googleAdUnit = googletag.defineSlot(slotName, dimensions, adUnitID); if ($adUnit.data('companion')) { googleAdUnit = googleAdUnit.addService(googletag.companionAds()); } diff --git a/jquery.dfp.min.js b/jquery.dfp.min.js index 00254b6..66eab74 100644 --- a/jquery.dfp.min.js +++ b/jquery.dfp.min.js @@ -1,8 +1,8 @@ /** - * jQuery DFP v2.1.0 + * jQuery DFP v2.2.0 * http://github.com/coop182/jquery.dfp.js * * Copyright 2015 Matt Cooper * Released under the MIT license */ -!function(a,b){"use strict";!function(b){"function"==typeof define&&define.amd?define(["jquery"],b):b("object"==typeof exports?require("jquery"):a.jQuery||a.Zepto)}(function(c){var d,e=this,f="",g=0,h=0,i=0,j=".adunit",k={},l=!1,m="googleAdUnit",n=function(a,b,e){g=0,i=0,f=a,d=c(b),v(),o(e),c(function(){p(),q()})},o=function(d){if(k={setTargeting:{},setCategoryExclusion:"",setLocation:"",enableSingleRequest:!0,collapseEmptyDivs:"original",refreshExisting:!0,disablePublisherConsole:!1,disableInitialLoad:!1,noFetch:!1,namespace:b,sizeMapping:{}},"undefined"==typeof d.setUrlTargeting||d.setUrlTargeting){var e=r(d.url);c.extend(!0,k.setTargeting,{UrlHost:e.Host,UrlPath:e.Path,UrlQuery:e.Query})}c.extend(!0,k,d),k.googletag&&a.googletag.cmd.push(function(){c.extend(!0,a.googletag,k.googletag)})},p=function(){var b=a.googletag;d.each(function(){var a=c(this);g++;var d=t(a),e=s(a,d),h=u(a);a.data("existingContent",a.html()),a.html("").addClass("display-none"),b.cmd.push(function(){var g,i=a.data(m);i?g=i:(a.data("outofpage")?g=b.defineOutOfPageSlot("/"+f+"/"+d,e):(g=b.defineSlot("/"+f+"/"+d,h,e),a.data("companion")&&(g=g.addService(b.companionAds()))),g=g.addService(b.pubads()));var j=a.data("targeting");j&&c.each(j,function(a,b){g.setTargeting(a,b)});var l=a.data("exclusions");if(l){var n,o=l.split(",");c.each(o,function(a,b){n=c.trim(b),n.length>0&&g.setCategoryExclusion(n)})}var p=a.data("size-mapping");if(p&&k.sizeMapping[p]){var q=b.sizeMapping();c.each(k.sizeMapping[p],function(a,b){q.addSize(b.browser,b.ad_sizes)}),g.defineSizeMapping(q.build())}a.data(m,g),"function"==typeof k.beforeEachAdLoaded&&k.beforeEachAdLoaded.call(this,a)})}),b.cmd.push(function(){var a=b.pubads();k.enableSingleRequest&&a.enableSingleRequest(),c.each(k.setTargeting,function(b,c){a.setTargeting(b,c)});var e=k.setLocation;if("object"==typeof e&&("number"==typeof e.latitude&&"number"==typeof e.longitude&&"number"==typeof e.precision?a.setLocation(e.latitude,e.longitude,e.precision):"number"==typeof e.latitude&&"number"==typeof e.longitude&&a.setLocation(e.latitude,e.longitude)),k.setCategoryExclusion.length>0){var f,h=k.setCategoryExclusion.split(",");c.each(h,function(b,d){f=c.trim(d),f.length>0&&a.setCategoryExclusion(f)})}k.collapseEmptyDivs&&a.collapseEmptyDivs(),k.disablePublisherConsole&&a.disablePublisherConsole(),k.companionAds&&(b.companionAds().setRefreshUnfilledSlots(!0),k.disableInitialLoad||a.enableVideoAds()),k.disableInitialLoad&&a.disableInitialLoad(),k.noFetch&&a.noFetch(),a.addEventListener("slotRenderEnded",function(a){i++;var b=c("#"+a.slot.getSlotId().getDomId()),e=a.isEmpty?"none":"block",f=b.data("existingContent");"none"===e&&c.trim(f).length>0&&"original"===k.collapseEmptyDivs&&(b.show().html(f),e="block display-original"),b.removeClass("display-none").addClass("display-"+e),"function"==typeof k.afterEachAdLoaded&&k.afterEachAdLoaded.call(this,b,a),"function"==typeof k.afterAllAdsLoaded&&i===g&&k.afterAllAdsLoaded.call(this,d)}),b.enableServices()})},q=function(){d.each(function(){var b=c(this),d=b.data(m),e=a.googletag;e.cmd.push(k.refreshExisting&&d&&b.hasClass("display-block")?function(){e.pubads().refresh([d])}:function(){e.display(b.attr("id"))})})},r=function(b){var c=(b||a.location.toString()).match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/),d=c[4]||"",e=(c[5]||"").replace(/(.)\/$/,"$1"),f=c[7]||"",g=f.replace(/\=/gi,":").split("&");return{Host:d,Path:e,Query:g}},s=function(a,b){return h++,a.attr("id")||a.attr("id",b.replace(/[^A-z0-9]/g,"_")+"-auto-gen-id-"+h).attr("id")},t=function(a){var b=a.data("adunit")||k.namespace||a.attr("id")||"";return"function"==typeof k.alterAdUnitName&&(b=k.alterAdUnitName.call(this,b,a)),b},u=function(a){var b=[],d=a.data("dimensions");if(d){var e=d.split(",");c.each(e,function(a,c){var d=c.split("x");b.push([parseInt(d[0],10),parseInt(d[1],10)])})}else b.push([a.width(),a.height()]);return b},v=function(){if(l=l||c('script[src*="googletagservices.com/tag/js/gpt.js"]').length,!l){a.googletag=a.googletag||{},a.googletag.cmd=a.googletag.cmd||[];var b=document.createElement("script");b.async=!0,b.type="text/javascript",b.onerror=function(){w()};var d="https:"===document.location.protocol;b.src=(d?"https:":"http:")+"//www.googletagservices.com/tag/js/gpt.js";var e=document.getElementsByTagName("script")[0];e.parentNode.insertBefore(b,e),"none"===b.style.display&&w()}},w=function(){var b=a.googletag,d=b.cmd;setTimeout(function(){var a=function(a,c,d,e){return b.ads.push(d),b.ads[d]={renderEnded:function(){},addService:function(){return this}},b.ads[d]};b={cmd:{push:function(a){a.call(e)}},ads:[],pubads:function(){return this},noFetch:function(){return this},disableInitialLoad:function(){return this},disablePublisherConsole:function(){return this},enableSingleRequest:function(){return this},setTargeting:function(){return this},collapseEmptyDivs:function(){return this},enableServices:function(){return this},defineSlot:function(b,c,d){return a(b,c,d,!1)},defineOutOfPageSlot:function(b,c){return a(b,[],c,!0)},display:function(a){return b.ads[a].renderEnded.call(e),this}},c.each(d,function(a,c){b.cmd.push(c)})},50)};c.dfp=c.fn.dfp=function(a,c){c=c||{},a===b&&(a=f),"object"==typeof a&&(c=a,a=c.dfpID||f);var d=this;return"function"==typeof this&&(d=j),n(a,d,c),this}})}(window); \ No newline at end of file +!function(a,b){"use strict";!function(b){"function"==typeof define&&define.amd?define(["jquery"],b):b("object"==typeof exports?require("jquery"):a.jQuery||a.Zepto)}(function(c){var d,e=this,f="",g=0,h=0,i=0,j=".adunit",k={},l=!1,m="googleAdUnit",n=function(a,b,e){g=0,i=0,f=a,d=c(b),v(),o(e),c(function(){p(),q()})},o=function(d){if(k={setTargeting:{},setCategoryExclusion:"",setLocation:"",enableSingleRequest:!0,collapseEmptyDivs:"original",refreshExisting:!0,disablePublisherConsole:!1,disableInitialLoad:!1,noFetch:!1,namespace:b,sizeMapping:{}},"undefined"==typeof d.setUrlTargeting||d.setUrlTargeting){var e=r(d.url);c.extend(!0,k.setTargeting,{UrlHost:e.Host,UrlPath:e.Path,UrlQuery:e.Query})}c.extend(!0,k,d),k.googletag&&a.googletag.cmd.push(function(){c.extend(!0,a.googletag,k.googletag)})},p=function(){var b=a.googletag;d.each(function(){var a=c(this);g++;var d=t(a),e=s(a,d),h=u(a);a.data("existingContent",a.html()),a.html("").addClass("display-none"),b.cmd.push(function(){var g,i=a.data(m);if(i)g=i;else{var j;j=""===f?d:"/"+f+"/"+d,a.data("outofpage")?g=b.defineOutOfPageSlot(j,e):(g=b.defineSlot(j,h,e),a.data("companion")&&(g=g.addService(b.companionAds()))),g=g.addService(b.pubads())}var l=a.data("targeting");l&&c.each(l,function(a,b){g.setTargeting(a,b)});var n=a.data("exclusions");if(n){var o,p=n.split(",");c.each(p,function(a,b){o=c.trim(b),o.length>0&&g.setCategoryExclusion(o)})}var q=a.data("size-mapping");if(q&&k.sizeMapping[q]){var r=b.sizeMapping();c.each(k.sizeMapping[q],function(a,b){r.addSize(b.browser,b.ad_sizes)}),g.defineSizeMapping(r.build())}a.data(m,g),"function"==typeof k.beforeEachAdLoaded&&k.beforeEachAdLoaded.call(this,a)})}),b.cmd.push(function(){var a=b.pubads();k.enableSingleRequest&&a.enableSingleRequest(),c.each(k.setTargeting,function(b,c){a.setTargeting(b,c)});var e=k.setLocation;if("object"==typeof e&&("number"==typeof e.latitude&&"number"==typeof e.longitude&&"number"==typeof e.precision?a.setLocation(e.latitude,e.longitude,e.precision):"number"==typeof e.latitude&&"number"==typeof e.longitude&&a.setLocation(e.latitude,e.longitude)),k.setCategoryExclusion.length>0){var f,h=k.setCategoryExclusion.split(",");c.each(h,function(b,d){f=c.trim(d),f.length>0&&a.setCategoryExclusion(f)})}k.collapseEmptyDivs&&a.collapseEmptyDivs(),k.disablePublisherConsole&&a.disablePublisherConsole(),k.companionAds&&(b.companionAds().setRefreshUnfilledSlots(!0),k.disableInitialLoad||a.enableVideoAds()),k.disableInitialLoad&&a.disableInitialLoad(),k.noFetch&&a.noFetch(),a.addEventListener("slotRenderEnded",function(a){i++;var b=c("#"+a.slot.getSlotId().getDomId()),e=a.isEmpty?"none":"block",f=b.data("existingContent");"none"===e&&c.trim(f).length>0&&"original"===k.collapseEmptyDivs&&(b.show().html(f),e="block display-original"),b.removeClass("display-none").addClass("display-"+e),"function"==typeof k.afterEachAdLoaded&&k.afterEachAdLoaded.call(this,b,a),"function"==typeof k.afterAllAdsLoaded&&i===g&&k.afterAllAdsLoaded.call(this,d)}),b.enableServices()})},q=function(){d.each(function(){var b=c(this),d=b.data(m),e=a.googletag;e.cmd.push(k.refreshExisting&&d&&b.hasClass("display-block")?function(){e.pubads().refresh([d])}:function(){e.display(b.attr("id"))})})},r=function(b){var c=(b||a.location.toString()).match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/),d=c[4]||"",e=(c[5]||"").replace(/(.)\/$/,"$1"),f=c[7]||"",g=f.replace(/\=/gi,":").split("&");return{Host:d,Path:e,Query:g}},s=function(a,b){return h++,a.attr("id")||a.attr("id",b.replace(/[^A-z0-9]/g,"_")+"-auto-gen-id-"+h).attr("id")},t=function(a){var b=a.data("adunit")||k.namespace||a.attr("id")||"";return"function"==typeof k.alterAdUnitName&&(b=k.alterAdUnitName.call(this,b,a)),b},u=function(a){var b=[],d=a.data("dimensions");if(d){var e=d.split(",");c.each(e,function(a,c){var d=c.split("x");b.push([parseInt(d[0],10),parseInt(d[1],10)])})}else b.push([a.width(),a.height()]);return b},v=function(){if(l=l||c('script[src*="googletagservices.com/tag/js/gpt.js"]').length,!l){a.googletag=a.googletag||{},a.googletag.cmd=a.googletag.cmd||[];var b=document.createElement("script");b.async=!0,b.type="text/javascript",b.onerror=function(){w()};var d="https:"===document.location.protocol;b.src=(d?"https:":"http:")+"//www.googletagservices.com/tag/js/gpt.js";var e=document.getElementsByTagName("script")[0];e.parentNode.insertBefore(b,e),"none"===b.style.display&&w()}},w=function(){var b=a.googletag,d=b.cmd;setTimeout(function(){var a=function(a,c,d,e){return b.ads.push(d),b.ads[d]={renderEnded:function(){},addService:function(){return this}},b.ads[d]};b={cmd:{push:function(a){a.call(e)}},ads:[],pubads:function(){return this},noFetch:function(){return this},disableInitialLoad:function(){return this},disablePublisherConsole:function(){return this},enableSingleRequest:function(){return this},setTargeting:function(){return this},collapseEmptyDivs:function(){return this},enableServices:function(){return this},defineSlot:function(b,c,d){return a(b,c,d,!1)},defineOutOfPageSlot:function(b,c){return a(b,[],c,!0)},display:function(a){return b.ads[a].renderEnded.call(e),this}},c.each(d,function(a,c){b.cmd.push(c)})},50)};c.dfp=c.fn.dfp=function(a,c){c=c||{},a===b&&(a=f),"object"==typeof a&&(c=a,a=c.dfpID||f);var d=this;return"function"==typeof this&&(d=j),n(a,d,c),this}})}(window); \ No newline at end of file diff --git a/package.json b/package.json index 21f7905..e462c1d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "jquery.dfp", - "version": "2.1.0", + "version": "2.2.0", "devDependencies": { "grunt": "~0.4", "grunt-contrib-jasmine": "^0.8.2", diff --git a/tests/spec/adUnitSpec.js b/tests/spec/adUnitSpec.js index e0cd502..e65e45b 100644 --- a/tests/spec/adUnitSpec.js +++ b/tests/spec/adUnitSpec.js @@ -8,6 +8,30 @@ describe('Ad units', function () { beforeEach(cleanup); afterEach(cleanup); + it('Call to DFP with dfpID in adunit name', function (done) { + var id = 'xxxxxxx'; + + var dummyTag = {}; + dummyTag.enableServices = function() {}; + + $('body').append('
'); + $.dfp({ + googletag: dummyTag + }); + + waitsForAndRuns(function () { + if (typeof window.googletag.getVersion === 'function' && $('.adunit').data('googleAdUnit')) { + return true; + } else { + return false; + } + }, function () { + expect($('.adunit').data('googleAdUnit').getName()).toEqual('/' + id + '/Leader'); + done(); + }, 5000); + + }); + it('Auto generate an ID for the ad unit if no ID provided', function (done) { var dummyTag = {};