diff --git a/README.md b/README.md index 1feae04..15750be 100644 --- a/README.md +++ b/README.md @@ -12,12 +12,15 @@ To get started you must include the script tag for ArcAds in your page header, l ``` +`collapseEmptyDivs` is an optional parameter that directly toggles `googletag.pubads().collapseEmptyDivs()` + Additionally, you can install the package with npm. This is mostly useful for when you're integrating ArcAds into a single page application or a JavaScript heavy project. Most implementations should just include the script in the page header. ``` @@ -217,7 +220,7 @@ If you'd like to include Prebid.js you must include the library before `arcads.j ``` -You can enable Prebid.js on the wrapper by adding a `prebid` object to the wrapper initialization and setting `enabled: true`. You can also optionally pass it a `timeout` value which corresponds in milliseconds how long Prebid.js will wait until it closes out the bidding for the advertisements on the page. By default, the timeout will be set to `700`. +You can enable Prebid.js on the wrapper by adding a `prebid` object to the wrapper initialization and setting `enabled: true`. If `enabled` is `undefined`, `prebid` can still be used by providing a valid `bids` object. You can also optionally pass it a `timeout` value which corresponds in milliseconds how long Prebid.js will wait until it closes out the bidding for the advertisements on the page. By default, the timeout will be set to `700`. ```javascript const arcAds = new ArcAds({ diff --git a/dist/arcads.js b/dist/arcads.js index ac706bc..114c6f9 100644 --- a/dist/arcads.js +++ b/dist/arcads.js @@ -1 +1 @@ -!function(e,n){if("object"==typeof exports&&"object"==typeof module)module.exports=n();else if("function"==typeof define&&define.amd)define([],n);else{var i=n();for(var r in i)("object"==typeof exports?exports:e)[r]=i[r]}}("undefined"!=typeof self?self:this,function(){return function(e){var n={};function i(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,i),t.l=!0,t.exports}return i.m=e,i.c=n,i.d=function(e,n,r){i.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},i.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(n,"a",n),n},i.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},i.p="",i(i.s=3)}([function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.initializeGPT=function(){window.googletag=window.googletag||{},window.googletag.cmd=window.googletag.cmd||[],(0,r.appendResource)("script","//www.googletagservices.com/tag/js/gpt.js",!0,!0)},n.refreshSlot=function(e){var n=e.ad,i=e.correlator,r=void 0!==i&&i,t=e.prerender,o=void 0===t?null:t,a=e.info,d=void 0===a?{}:a;new Promise(function(e){if(o)try{o(d).then(function(){e("Prerender function has completed.")})}catch(n){console.warn("ArcAds: Prerender function did not return a promise or there was an error.\n Documentation: https://github.com/wapopartners/arc-ads/wiki/Utilizing-a-Prerender-Hook"),e("Prerender function did not return a promise or there was an error, ignoring.")}else e("No Prerender function was provided.")}).then(function(){!function e(){if(window.blockArcAdsLoad)return;window.googletag&&googletag.pubadsReady?window.googletag.pubads().refresh([n],{changeCorrelator:r}):setTimeout(function(){e()},200)}()})},n.queueGoogletagCommand=function(e){window.googletag.cmd.push(e)},n.setTargeting=function(e,n){for(var i in n)n.hasOwnProperty(i)&&n[i]&&e.setTargeting(i,n[i])},n.dfpSettings=function(e){window.googletag.pubads().disableInitialLoad(),window.googletag.pubads().enableSingleRequest(),window.googletag.pubads().enableAsyncRendering(),this.collapseEmptyDivs&&window.googletag.pubads().collapseEmptyDivs();window.googletag.enableServices(),e&&window.googletag.pubads().addEventListener("slotRenderEnded",e)},n.determineSlotName=function(e,n){var i=(0,t.expandQueryString)("adslot");if(i&&(""!==i||null!==i))return"/"+e+"/"+i;return"/"+e+"/"+n};var r=i(5),t=i(6)},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.initializeBiddingServices=a,n.fetchBids=function(e){var n=this,i=e.ad,d=e.id,s=e.slotName,u=e.dimensions,c=e.wrapper,l=e.bidding,p=e.correlator,f=void 0!==p&&p,g=e.prerender,b=e.breakpoints,h={adUnit:i,adSlot:s,adDimensions:u,adId:d,bids:l},v=new Promise(function(e){if(c.prebid&&c.prebid.enabled){var t=c.prebid.timeout||700;r.queuePrebidCommand.bind(n,(0,r.fetchPrebidBids)(i,c.prebid.useSlotForAdUnit?s:d,t,h,g,function(){e("Fetched Prebid ads!")}))}else e("Prebid is not enabled on the wrapper...")}),m=new Promise(function(e){c.amazon&&c.amazon.enabled?(0,t.fetchAmazonBids)(d,s,u,b,function(){e("Fetched Amazon ads!")}):e("Amazon is not enabled on the wrapper...")});window.arcBiddingReady?Promise.all([v,m]).then(function(){(0,o.refreshSlot)({ad:i,correlator:f,prerender:g,info:h})}):setTimeout(function(){return a()},200)};var r=i(2),t=i(7),o=i(0);function a(e){var n=e.prebid,i=void 0!==n&&n,r=e.amazon,o=void 0!==r&&r;if(!window.arcBiddingReady){window.arcBiddingReady=!1;var a=new Promise(function(e){if(i&&i.enabled){if("undefined"==typeof pbjs){var n=n||{};n.que=n.que||[]}e("Prebid has been initialized")}else e("Prebid is not enabled on the wrapper...")}),d=new Promise(function(e){o&&o.enabled&&window.apstag?o.id&&""!==o.id?(0,t.queueAmazonCommand)(function(){window.apstag.init({pubID:o.id,adServer:"googletag"}),e("Amazon scripts have been added onto the page!")}):(console.warn("ArcAds: Missing Amazon account id. \n Documentation: https://github.com/wapopartners/arc-ads#amazon-tama9"),e("Amazon is not enabled on the wrapper...")):e("Amazon is not enabled on the wrapper...")});Promise.all([a,d]).then(function(){window.arcBiddingReady=!0})}}},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=Object.assign||function(e){for(var n=1;n5&&void 0!==arguments[5]?arguments[5]:null,d=r;d.bids=Array.isArray(r.bids)?r.bids:[r.bids],o(e,[n],i,d,t,a)},n.addUnit=function(e,n,i){var t=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=r({code:e,bids:i},o);a.mediaTypes={banner:{sizes:n}};var d=t.sizeConfig,s=t.config;if(pbjs.addAdUnits(a),s)return void pbjs.setConfig(s);d&&pbjs.setConfig({sizeConfig:d})};var t=i(0);function o(e,n,i,r,o){var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null;pbjs.addAdUnits(r),window.blockArcAdsPrebid||pbjs.requestBids({timeout:i,adUnitCodes:n,bidsBackHandler:function(n){console.log("Bid Back Handler",n),pbjs.setTargetingForGPTAsync([code]),a?a():(0,t.refreshSlot)({ad:e,info:r,prerender:o})}})}},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.ArcAds=void 0;var r=function(){function e(e,n){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:null;!function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}(this,e),this.dfpId=n.dfp.id||"",this.wrapper=n.bidding||{},this.positions=[],this.collapseEmptyDivs=n.dfp.collapseEmptyDivs,window.isMobile=t.MobileDetection,""===this.dfpId?console.warn("ArcAds: DFP id is missing from the arcads initialization script. \n Documentation: https://github.com/wapopartners/arc-ads#getting-started"):((0,a.initializeGPT)(),(0,a.queueGoogletagCommand)(a.dfpSettings.bind(this,i)),(0,o.initializeBiddingServices)(this.wrapper))}return r(e,[{key:"registerAd",value:function(e){var n=e.id,i=e.slotName,r=e.dimensions,t=e.adType,o=void 0!==t&&t,s=e.targeting,c=void 0===s?{}:s,l=e.display,p=void 0===l?"all":l,f=e.bidding,g=void 0!==f&&f,b=e.iframeBidders,h=void 0===b?["openx"]:b,v=e.others,m=void 0===v?{}:v,w=[],y=!1,A=function e(n){return Array.isArray(n)?1+Math.max.apply(Math,u(n.map(function(n){return e(n)}))):0}(r);r&&void 0!==r&&1===A?w.push.apply(w,u(r)):r&&void 0!==r&&r.length>0&&2===A?w.push.apply(w,u(r)):r&&r.forEach(function(e){w.push.apply(w,u(e))});try{if(!(c&&c.hasOwnProperty("position")||!1===o)){var P=this.positions[o]+1||1;this.positions[o]=P;var k=Object.assign(c,{position:P});Object.assign(e,{targeting:k})}if(isMobile.any()&&"mobile"===p||!isMobile.any()&&"desktop"===p||"all"===p){if(g.prebid&&g.prebid.bids&&this.wrapper.prebid&&this.wrapper.prebid.enabled&&w){pbjs&&h.length>0&&pbjs.setConfig({userSync:{iframeEnabled:!0,filterSettings:{iframe:{bidders:h,filter:"include"}}}});var z=this.wrapper.prebid.useSlotForAdUnit?(0,a.determineSlotName)(this.dfpId,i):n;d.queuePrebidCommand.bind(this,(0,d.addUnit)(z,w,g.prebid.bids,this.wrapper.prebid,m))}(y=this.displayAd.bind(this,e))&&(0,a.queueGoogletagCommand)(y)}}catch(e){console.error("ads error",e)}}},{key:"registerAdCollection",value:function(e){var n=this;e.forEach(function(e){n.registerAd(e)})}},{key:"registerAdCollectionSingleCall",value:function(e){var n=this;window.blockArcAdsLoad=!0,window.blockArcAdsPrebid=!0,e.forEach(function(e){n.registerAd(e)}),window.blockArcAdsLoad=!1,window.blockArcAdsPrebid=!1,pbjs.requestBids({timeout:BIDDER_TIMEOUT||700,bidsBackHandler:function(e){console.log("Bid Back Handler",e),pbjs.setTargetingForGPTAsync(),window.googletag.pubads().refresh()}})}},{key:"displayAd",value:function(e){var n=e.id,i=e.slotName,r=e.dimensions,t=e.targeting,d=e.sizemap,u=void 0!==d&&d,c=e.bidding,l=void 0!==c&&c,p=e.prerender,f=void 0===p?null:p,g=(0,a.determineSlotName)(this.dfpId,i),b=r&&!r.length?null:r,h=r?window.googletag.defineSlot(g,b,n):window.googletag.defineOutOfPageSlot(g,n);if(u&&u.breakpoints&&r){var v=(0,s.prepareSizeMaps)(b,u.breakpoints),m=v.mapping,w=v.breakpoints,y=v.correlators;if(!h)return!1;h.defineSizeMapping(m),u.refresh&&(0,s.setResizeListener)({ad:h,slotName:g,breakpoints:w,id:n,mapping:m,correlators:y,bidding:l,wrapper:this.wrapper,prerender:f})}h&&(h.addService(window.googletag.pubads()),(0,a.setTargeting)(h,t));var A=u&&u.breakpoints?u.breakpoints:[];r&&l&&(l.amazon&&l.amazon.enabled||l.prebid&&l.prebid.enabled)?(0,o.fetchBids)({ad:h,id:n,slotName:g,dimensions:b,wrapper:this.wrapper,prerender:f,bidding:l,breakpoints:A}):window.blockArcAdsPrebid||(0,a.refreshSlot)({ad:h,prerender:f,info:{adUnit:h,adSlot:g,adDimensions:b,adId:n}})}}]),e}()},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function e(e,n){for(var i=0;i1}},{key:"any",value:function(){return this.Android()||this.Kindle()||this.KindleFire()||this.Silk()||this.BlackBerry()||this.iOS()||this.Windows()||this.FirefoxOS()}}]),e}();n.default=t},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.appendResource=function(e,n,i,r,t){var o=document.createElement(e);if("script"!==e)return;o.src=n,o.async=i||!1,o.defer=i||r||!1;(document.head||document.documentElement).appendChild(o),t&&t()}},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.expandQueryString=function(e){var n=window.location.href,i=e.replace(/[[\]]/g,"\\$&"),r=new RegExp("[?&]"+i+"(=([^&#]*)|&|#|$)").exec(n);if(!r)return null;if(!r[2])return"";return decodeURIComponent(r[2].replace(/\+/g," "))}},function(e,n,i){"use strict";function r(e){window.apstag&&e()}Object.defineProperty(n,"__esModule",{value:!0}),n.fetchAmazonBids=function(e,n,i,t){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,a=i;if(t&&void 0!==window.innerWidth&&void 0!==i[0][0][0]){for(var d=window.innerWidth,s=-1,u=t.length,c=0;c=t[c][0]){s=c;break}a=i[s]}r(function(){var i={slotName:n,slotID:e,sizes:a};window.apstag.fetchBids({slots:[i]},function(){window.apstag.setDisplayBids(),o&&o()})})},n.queueAmazonCommand=r},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.resizeListeners=n.sizemapListeners=void 0,n.prepareSizeMaps=function(e,n){var i=[],r=[],t=[];return(n.length?n:null).forEach(function(n,o){i.push([n,e[o]]),-1===r.indexOf(n[0])&&(r.push(n[0]),t.push(!1))}),r.sort(function(e,n){return e-n}),{mapping:i,breakpoints:r,correlators:t}},n.parseSizeMappings=s,n.runResizeEvents=u,n.setResizeListener=function(e){var n=e.id,i=e.correlators;d[n]=(0,r.debounce)(u(e),250),window.addEventListener("resize",d[n]),a[n]={listener:d[n],correlators:i}};var r=i(9),t=i(1),o=i(0),a=n.sizemapListeners={},d=n.resizeListeners={};function s(e){try{var n=[window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight],i=e.filter(function(e){return e[0][0]<=n[0]&&e[0][1]<=n[1]}),r=i.length>0?i[0][1]:[];return r.length>0&&r[0].constructor!==Array&&(r=[r]),r}catch(n){return e[e.length-1][1]}}function u(e){var n=void 0,i=!1;return function(){for(var r=e.ad,d=e.breakpoints,u=e.id,c=e.bidding,l=e.mapping,p=e.slotName,f=e.wrapper,g=e.prerender,b=window.innerWidth,h=void 0,v=void 0,m=0;mh&&(b5&&void 0!==arguments[5]?arguments[5]:null,d=t;d.bids=Array.isArray(t.bids)?t.bids:[t.bids],o(e,[n],i,d,r,a)},n.addUnit=function(e,n,i){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},a=t({code:e,bids:i},o);a.mediaTypes={banner:{sizes:n}};var d=r.sizeConfig,s=r.config;if(pbjs.addAdUnits(a),s)return void pbjs.setConfig(s);d&&pbjs.setConfig({sizeConfig:d})};var r=i(0);function o(e,n,i,t,o){var a=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null;pbjs.addAdUnits(t),window.blockArcAdsPrebid||pbjs.requestBids({timeout:i,adUnitCodes:n,bidsBackHandler:function(n){console.log("Bid Back Handler",n),pbjs.setTargetingForGPTAsync([code]),a?a():(0,r.refreshSlot)({ad:e,info:t,prerender:o})}})}},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.ArcAds=void 0;var t=function(){function e(e,n){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:null;!function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}(this,e),this.dfpId=n.dfp.id||"",this.wrapper=n.bidding||{},this.positions=[],this.collapseEmptyDivs=n.dfp.collapseEmptyDivs,this.adsList=[],window.isMobile=r.MobileDetection,""===this.dfpId?console.warn("ArcAds: DFP id is missing from the arcads initialization script.","\n","Documentation: https://github.com/wapopartners/arc-ads#getting-started"):((0,a.initializeGPT)(),(0,a.queueGoogletagCommand)(a.dfpSettings.bind(this,i)),(0,o.initializeBiddingServices)(this.wrapper))}return t(e,[{key:"registerAd",value:function(e){var n=e.id,i=e.slotName,t=e.dimensions,r=e.adType,o=void 0!==r&&r,s=e.targeting,l=void 0===s?{}:s,c=e.display,p=void 0===c?"all":c,f=e.bidding,g=void 0!==f&&f,b=e.iframeBidders,v=void 0===b?["openx"]:b,h=e.others,w=void 0===h?{}:h,m=[],y=!1,A=function e(n){return Array.isArray(n)?1+Math.max.apply(Math,u(n.map(function(n){return e(n)}))):0}(t);t&&void 0!==t&&1===A?m.push.apply(m,u(t)):t&&void 0!==t&&t.length>0&&2===A?m.push.apply(m,u(t)):t&&t.forEach(function(e){m.push.apply(m,u(e))});try{if(!(l&&l.hasOwnProperty("position")||!1===o)){var k=this.positions[o]+1||1;this.positions[o]=k;var P=Object.assign(l,{position:k});Object.assign(e,{targeting:P})}var z=g.prebid&&(g.prebid.enabled&&g.prebid.bids||void 0===g.prebid.enabled&&g.prebid.bids);if(isMobile.any()&&"mobile"===p||!isMobile.any()&&"desktop"===p||"all"===p){if(z&&this.wrapper.prebid&&this.wrapper.prebid.enabled&&m){pbjs&&v.length>0&&pbjs.setConfig({userSync:{iframeEnabled:!0,filterSettings:{iframe:{bidders:v,filter:"include"}}}});var S=this.wrapper.prebid.useSlotForAdUnit?(0,a.determineSlotName)(this.dfpId,i):n;d.queuePrebidCommand.bind(this,(0,d.addUnit)(S,m,g.prebid.bids,this.wrapper.prebid,w))}(y=this.displayAd.bind(this,e))&&(0,a.queueGoogletagCommand)(y)}}catch(e){console.error("ads error",e)}}},{key:"registerAdCollection",value:function(e){var n=this;e.forEach(function(e){n.registerAd(e)})}},{key:"registerAdCollectionSingleCall",value:function(e){var n=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:700;window.blockArcAdsLoad=!0,window.blockArcAdsPrebid=!0,e.forEach(function(e){n.registerAd(e)}),window.blockArcAdsLoad=!1,window.blockArcAdsPrebid=!1,pbjs.requestBids({timeout:i,bidsBackHandler:function(e){console.log("Bid Back Handler",e),pbjs.setTargetingForGPTAsync(),window.googletag.pubads().refresh(window.adsList),window.adsList=[]}})}},{key:"displayAd",value:function(e){var n=e.id,i=e.slotName,t=e.dimensions,r=e.targeting,d=e.sizemap,u=void 0!==d&&d,l=e.bidding,c=void 0!==l&&l,p=e.prerender,f=void 0===p?null:p,g=(0,a.determineSlotName)(this.dfpId,i),b=t&&!t.length?null:t,v=t?window.googletag.defineSlot(g,b,n):window.googletag.defineOutOfPageSlot(g,n);if(u&&u.breakpoints&&t){var h=(0,s.prepareSizeMaps)(b,u.breakpoints),w=h.mapping,m=h.breakpoints,y=h.correlators;if(!v)return!1;v.defineSizeMapping(w),u.refresh&&(0,s.setResizeListener)({ad:v,slotName:g,breakpoints:m,id:n,mapping:w,correlators:y,bidding:c,wrapper:this.wrapper,prerender:f})}v&&(v.addService(window.googletag.pubads()),(0,a.setTargeting)(v,r));var A=u&&u.breakpoints?u.breakpoints:[];window.adsList&&v&&adsList.push(v),t&&c&&(c.amazon&&c.amazon.enabled||c.prebid&&c.prebid.enabled)?(0,o.fetchBids)({ad:v,id:n,slotName:g,dimensions:b,wrapper:this.wrapper,prerender:f,bidding:c,breakpoints:A}):window.blockArcAdsPrebid||(0,a.refreshSlot)({ad:v,prerender:f,info:{adUnit:v,adSlot:g,adDimensions:b,adId:n}})}},{key:"sendSingleCallAds",value:function(){var e=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:700;if(this.adsList&&this.adsList.length<1)return!1;window&&window.googletag&&googletag.pubadsReady?(window.googletag.pubads().disableInitialLoad(),window.googletag.pubads().enableSingleRequest(),window.googletag.pubads().enableAsyncRendering(),this.registerAdCollectionSingleCall(this.adsList,n)):setTimeout(function(){e.sendSingleCallAds()},2e3)}},{key:"reserveAd",value:function(n){e.setAdsBlockGate(),this.adsList.push(n)}},{key:"setPageLeveTargeting",value:function(e,n){googletag.pubads().setTargeting(e,n)}}],[{key:"setAdsBlockGate",value:function(){var n=e.getWindow();void 0!==n&&(n.blockArcAdsLoad=!0)}},{key:"releaseAdsBlockGate",value:function(){var n=e.getWindow();void 0!==n&&(n.blockArcAdsLoad=!1)}},{key:"getWindow",value:function(){return window}}]),e}()},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var t=function(){function e(e,n){for(var i=0;i1}},{key:"any",value:function(){return this.Android()||this.Kindle()||this.KindleFire()||this.Silk()||this.BlackBerry()||this.iOS()||this.Windows()||this.FirefoxOS()}}]),e}();n.default=r},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.appendResource=function(e,n,i,t,r){var o=document.createElement(e);if("script"!==e)return;o.src=n,o.async=i||!1,o.defer=i||t||!1;(document.head||document.documentElement).appendChild(o),r&&r()}},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.expandQueryString=function(e){var n=window.location.href,i=e.replace(/[[\]]/g,"\\$&"),t=new RegExp("[?&]"+i+"(=([^&#]*)|&|#|$)").exec(n);if(!t)return null;if(!t[2])return"";return decodeURIComponent(t[2].replace(/\+/g," "))}},function(e,n,i){"use strict";function t(e){window.apstag&&e()}Object.defineProperty(n,"__esModule",{value:!0}),n.fetchAmazonBids=function(e,n,i,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,a=i;if(r&&void 0!==window.innerWidth&&void 0!==i[0][0][0]){for(var d=window.innerWidth,s=-1,u=r.length,l=0;l=r[l][0]){s=l;break}a=i[s]}t(function(){var i={slotName:n,slotID:e,sizes:a};window.apstag.fetchBids({slots:[i]},function(){window.apstag.setDisplayBids(),o&&o()})})},n.queueAmazonCommand=t},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.resizeListeners=n.sizemapListeners=void 0,n.prepareSizeMaps=function(e,n){var i=[],t=[],r=[],o=n.length?n:null;o&&e&&o.forEach(function(n,o){i.push([n,e[o]]),-1===t.indexOf(n[0])&&(t.push(n[0]),r.push(!1))});return t.sort(function(e,n){return e-n}),{mapping:i,breakpoints:t,correlators:r}},n.parseSizeMappings=s,n.runResizeEvents=u,n.setResizeListener=function(e){var n=e.id,i=e.correlators;d[n]=(0,t.debounce)(u(e),250),window.addEventListener("resize",d[n]),a[n]={listener:d[n],correlators:i}};var t=i(9),r=i(1),o=i(0),a=n.sizemapListeners={},d=n.resizeListeners={};function s(e){try{var n=[window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight],i=e.filter(function(e){return e[0][0]<=n[0]&&e[0][1]<=n[1]}),t=i.length>0?i[0][1]:[];return t.length>0&&t[0].constructor!==Array&&(t=[t]),t}catch(n){return e[e.length-1][1]}}function u(e){var n=void 0,i=!1;return function(){for(var t=e.ad,d=e.breakpoints,u=e.id,l=e.bidding,c=e.mapping,p=e.slotName,f=e.wrapper,g=e.prerender,b=window.innerWidth,v=void 0,h=void 0,w=0;wv&&(b { expect(displayAdBindMock).toHaveBeenCalledWith(expectedArg1, expectedArg2); }); - + it('should add two level dimensions appropriately', () => { const adParams = { @@ -145,7 +145,7 @@ describe('registerAds dimensions branches', () => { targeting:{}, adType: true, display: 'mobile', - bidding:{prebid:{bids:['bid1']}} + bidding:{prebid:{enabled: true, bids:['bid1']}} } const mobileAny = jest.fn().mockReturnValue(true); @@ -169,7 +169,7 @@ describe('registerAds dimensions branches', () => { expect(displayAdBindMock).toHaveBeenCalledTimes(1); const expectedArg2 = { "adType": true, - "bidding": {"prebid": {"bids": ["bid1"]}}, + "bidding": {"prebid": {"enabled": true, "bids": ["bid1"]}}, "dimensions": [[[100, 50]]], "display": "mobile", "id": "testID", @@ -179,6 +179,21 @@ describe('registerAds dimensions branches', () => { expect(displayAdBindMock.mock.calls[0][1]).toEqual( expectedArg2); }); + it('prebid should not be called', () => { + const adParams = { + id: "testID", + slotname: "testSlotname", + dimensions: [[[100,50]]], + targeting:{}, + adType: true, + display: 'mobile', + bidding:{prebid:{enabled: false, bids:['bid1']}} + } + + arcAds.registerAd(adParams); + expect(addUnitMock).toHaveBeenCalledTimes(0); + }); + it('wrapper has useSlotForAdUnit for caclulating prebid code', () => { arcAds.wrapper = { amazon: { @@ -197,7 +212,7 @@ describe('registerAds dimensions branches', () => { targeting:{}, adType: true, display: 'mobile', - bidding:{prebid:{bids:['bid1']}} + bidding:{prebid:{enabled: true, bids:['bid1']}} } const mobileAny = jest.fn().mockReturnValue(true); diff --git a/src/index.js b/src/index.js index 2a5647c..b9b9b2e 100644 --- a/src/index.js +++ b/src/index.js @@ -65,9 +65,13 @@ export class ArcAds { Object.assign(params, { targeting: positionParam }); } + const prebidEnabled = bidding.prebid && + ((bidding.prebid.enabled && bidding.prebid.bids) || + (typeof bidding.prebid.enabled === 'undefined' && bidding.prebid.bids)); + if ((isMobile.any() && display === 'mobile') || (!isMobile.any() && display === 'desktop') || (display === 'all')) { // Registers the advertisement with Prebid.js if enabled on both the unit and wrapper. - if ((bidding.prebid && bidding.prebid.bids) && (this.wrapper.prebid && this.wrapper.prebid.enabled) && flatDimensions) { + if (prebidEnabled && (this.wrapper.prebid && this.wrapper.prebid.enabled) && flatDimensions) { if (pbjs && iframeBidders.length > 0) { pbjs.setConfig({ userSync: {