UNPKG

react-gpt-ads

Version:
222 lines (213 loc) 8.84 kB
Object.defineProperty(exports, '__esModule', { value: true }); function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var React = require('react'); var React__default = _interopDefault(React); var internalNetworkCode = ""; var networkCode = { get: function () { return internalNetworkCode; }, set: function (nc) { return internalNetworkCode = nc; } }; var internalRefreshTimer = null; var refreshTimer = { get: function () { return internalRefreshTimer; }, set: function (rt) { return internalRefreshTimer = rt; } }; var adsToRefresh = []; var adFactory = function (adSlot, googletag, refreshTimer) { var internalRefreshTimer = refreshTimer; var internalGoogletag = googletag; var instance = null; var viewPercentage = 0; var isLoopRun = false; var isRefreshable = false; var isImpressionViewable = false; var setViewPercentage = function (vp) { viewPercentage = vp; }; var impressionViewable = function () { isImpressionViewable = true; }; var loop = function () { if (isImpressionViewable && viewPercentage > 50) { isLoopRun = true; if (isRefreshable) { internalGoogletag.pubads().refresh([adSlot]); isRefreshable = false; isImpressionViewable = false; } setTimeout(function () { if (isImpressionViewable && viewPercentage > 50) { internalGoogletag.pubads().refresh([adSlot]); } else { isRefreshable = true; } isLoopRun = false; }, internalRefreshTimer); } }; return { runLoop: function () { if (instance === null || !isLoopRun) instance = new loop; return instance; }, setViewPercentage: setViewPercentage, impressionViewable: impressionViewable, adSlot: adSlot, }; }; var pushAdSlotToRefresh = function (adSlot, refreshTimer, googletag) { var adSlotToInsert = adFactory(adSlot, refreshTimer, googletag); adsToRefresh.push(adSlotToInsert); }; var refreshViewPercentage = function (event) { var slot = event.slot, inViewPercentage = event.inViewPercentage; var adIndex = adsToRefresh.findIndex(function (el) { return el.adSlot.getSlotElementId() === slot.getSlotElementId(); }); if (adIndex === -1) return; adsToRefresh[adIndex].setViewPercentage(inViewPercentage); adsToRefresh[adIndex].runLoop(); }; var impressionViewable = function (event) { var slot = event.slot; var adIndex = adsToRefresh.findIndex(function (el) { return el.adSlot.getSlotElementId() === slot.getSlotElementId(); }); if (adIndex === -1) return; adsToRefresh[adIndex].impressionViewable(); adsToRefresh[adIndex].runLoop(); }; var GptConfig = function (_a) { var networkCode$1 = _a.networkCode, refreshTimer$1 = _a.refreshTimer, _b = _a.target, target = _b === void 0 ? [] : _b, enableLazyLoad = _a.enableLazyLoad, enableSingleRequest = _a.enableSingleRequest, collapseEmptyDivs = _a.collapseEmptyDivs, eventImpressionViewable = _a.eventImpressionViewable, eventSlotOnload = _a.eventSlotOnload, eventSlotRenderEnded = _a.eventSlotRenderEnded, eventSlotRequested = _a.eventSlotRequested, eventSlotResponseReceived = _a.eventSlotResponseReceived, eventSlotVisibilityChanged = _a.eventSlotVisibilityChanged; var googletag; var setConfigs = function () { if (networkCode$1) networkCode.set(networkCode$1); if (refreshTimer$1) refreshTimer.set(refreshTimer$1); if (enableLazyLoad) googletag.pubads().enableLazyLoad(enableLazyLoad); if (collapseEmptyDivs) googletag.pubads().collapseEmptyDivs(true); if (enableSingleRequest) googletag.pubads().enableSingleRequest(); }; var setTargeting = function () { target.forEach(function (el) { return googletag.pubads().setTargeting(el[0], el[1]); }); }; var setEvents = function () { googletag.pubads().addEventListener("slotOnload", function (event) { if (eventSlotOnload) eventSlotOnload(event); if (refreshTimer$1) pushAdSlotToRefresh(event.slot, googletag, Number(refreshTimer$1)); }); googletag.pubads().addEventListener("slotVisibilityChanged", function (event) { if (eventSlotVisibilityChanged) eventSlotVisibilityChanged(event); if (refreshTimer$1) refreshViewPercentage(event); }); googletag.pubads().addEventListener("impressionViewable", function (event) { if (eventImpressionViewable) eventImpressionViewable(event); if (refreshTimer$1) impressionViewable(event); }); if (eventSlotRenderEnded) googletag.pubads().addEventListener("slotRenderEnded", eventSlotRenderEnded); if (eventSlotRequested) googletag.pubads().addEventListener("slotRequested", eventSlotRequested); if (eventSlotResponseReceived) googletag.pubads().addEventListener("slotResponseReceived", eventSlotResponseReceived); }; React.useEffect(function () { window.googletag = window.googletag || { cmd: [] }; googletag = window.googletag; googletag.cmd.push(function () { setConfigs(); setEvents(); setTargeting(); googletag.enableServices(); }); }, []); return null; }; var GptScript = function () { return React__default.createElement("script", { async: true, src: "https://securepubads.g.doubleclick.net/tag/js/gpt.js" }); }; // eslint-disable-next-line react/prop-types var Gpt = function (_a) { var adUnit = _a.adUnit, name = _a.name, _b = _a.target, target = _b === void 0 ? [] : _b, type = _a.type, size = _a.size; var googletag; var adSlot = null; var displayCommonAd = function () { googletag.cmd.push(function () { adSlot = googletag .defineSlot(networkCode.get() + "/" + adUnit, generateSize(), name) .addService(googletag.pubads()); mappingSize(); setTargeting(); googletag.enableServices(); googletag.display(name); }); }; var displayEspecialAd = function () { googletag.cmd.push(function () { adSlot = googletag.defineOutOfPageSlot(networkCode.get() + "/" + adUnit, googletag.enums.OutOfPageFormat[type]); if (!adSlot) return; setTargeting(); adSlot.addService(googletag.pubads()); }); }; var setTargeting = function () { target.forEach(function (el) { return googletag.pubads().setTargeting(el[0], el[1]); }); }; var generateSize = function () { var internalSize = size; if (!(typeof internalSize === "object" && typeof internalSize[0][1] === "object")) return size; return internalSize.reduce(function (uniqueSizes, elSize) { var haveSize = !!uniqueSizes.find(function (mapSize) { return mapSize[0] === elSize[0] && mapSize[0] === elSize[0]; }); if (haveSize) uniqueSizes.push(haveSize); return uniqueSizes; }, []); }; var mappingSize = function () { var internalSize = size; if (!(typeof internalSize === "object" && typeof internalSize[0][1] === "object")) return; var mapping = googletag.sizeMapping(); internalSize.forEach(function (el) { return mapping = mapping.addSize(el); }); mapping = mapping.build(); adSlot.defineSizeMapping(mapping); }; React.useEffect(function () { window.googletag = window.googletag || { cmd: [] }; googletag = window.googletag; googletag.cmd.push(function () { // eslint-disable-next-line react/prop-types type ? displayEspecialAd() : displayCommonAd(); }); }, []); React.useEffect(function () { return function () { googletag.destroySlots([adSlot]); }; }, []); if (type) return null; return (React__default.createElement("div", { id: name })); }; exports.Gpt = Gpt; exports.GptConfig = GptConfig; exports.GptScript = GptScript; //# sourceMappingURL=index.js.map