Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
'use strict';

Object.defineProperty(exports, "__esModule", {
  value: true
});

var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

var _injectScriptAsync = require('./injectScriptAsync');

var _injectScriptAsync2 = _interopRequireDefault(_injectScriptAsync);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }

var exec = function exec(fn) {
  var _window = window,
      googletag = _window.googletag;

  if (googletag && googletag.apiReady) {
    return fn(googletag);
  } else if (googletag && googletag.cmd) {
    googletag.cmd.push(function () {
      fn(googletag);
    });
  }
};

var slotRenderEndedListeners = {};

var registerListeners = function registerListeners() {
  exec(function (googletag) {
    googletag.pubads().addEventListener('slotRenderEnded', function (event) {
      var slotElementId = event.slot.getSlotElementId();
      var listeners = slotRenderEndedListeners[slotElementId];
      if (listeners) {
        listeners.forEach(function (listener) {
          listener(event);
        });
      }
    });
  });
};

var addSlotRenderEndedListener = function addSlotRenderEndedListener(slotElementId, listener) {
  slotRenderEndedListeners = _extends({}, slotRenderEndedListeners, _defineProperty({}, slotElementId, [].concat(_toConsumableArray(slotRenderEndedListeners[slotElementId]), [listener])));
  // return removal callback
  return function () {
    slotRenderEndedListeners = _extends({}, slotRenderEndedListeners, _defineProperty({}, slotElementId, slotRenderEndedListeners[slotElementId].filter(function (l) {
      return l !== listener;
    })));
  };
};

var configureLibrary = function configureLibrary() {
  exec(function (googletag) {
    googletag.pubads().enableSingleRequest();
    googletag.pubads().collapseEmptyDivs(true);
    googletag.pubads().disableInitialLoad();
    googletag.enableServices();
  });
};

var loadLibrary = function loadLibrary() {
  return new Promise(function (resolve, reject) {
    if (window.googletag && window.googletag.cmd) {
      resolve(window.googletag);
    } else {
      window.googletag = window.googletag || {};
      window.googletag.cmd = window.googletag.cmd || [];
      (0, _injectScriptAsync2.default)('https://www.googletagservices.com/tag/js/gpt.js').then(function () {
        exec(function () {
          resolve(window.googletag);
        });
      }).catch(function () {
        return reject();
      });
    }
  });
};

var initialize = function initialize() {
  return loadLibrary().then(function () {
    registerListeners();
    configureLibrary();
  });
};

var getSlots = function getSlots() {
  return exec(function (googletag) {
    return googletag.pubads().getSlots();
  }) || [];
};

var isSlotDefined = function isSlotDefined(id) {
  return getSlots().filter(function (slot) {
    return id === slot.getSlotElementId().length === 0;
  }).length > 0 || false;
};

var defineSlot = function defineSlot(_ref) {
  var id = _ref.id,
      adUnitPath = _ref.adUnitPath,
      sizeMapping = _ref.sizeMapping;

  if (id && adUnitPath && sizeMapping) {
    exec(function (googletag) {
      var size = sizeMapping.reduce(function (builder, mapping) {
        return builder.addSize(mapping.viewport, mapping.sizes);
      }, googletag.sizeMapping()).build();

      if (!isSlotDefined(id)) {
        googletag.defineSlot(adUnitPath, [0, 0], id).defineSizeMapping(size).addService(googletag.pubads());
      }
    });
  }
};

var destroySlot = function destroySlot(id) {
  exec(function (googletag) {
    var slot = googletag.pubads().getSlots().find(function (slots) {
      return slots.getSlotElementId() === id;
    });
    googletag.destroySlots([slot]);
  });
};

var destroySlots = function destroySlots() {
  exec(function (googletag) {
    googletag.destroySlots();
  });
};

var setAdsense = function setAdsense(config) {
  exec(function (googletag) {
    Object.keys(config).forEach(function (key) {
      googletag.pubads().set(key, config[key]);
    });
  });
};

var setTargeting = function setTargeting(targeting) {
  exec(function (googletag) {
    Object.keys(targeting).forEach(function (key) {
      googletag.pubads().setTargeting(key, targeting[key]);
    });
  });
};

var waitForPubadsReady = function waitForPubadsReady(googletag, callback) {
  if (!googletag.pubadsReady) {
    setTimeout(waitForPubadsReady.bind(null, googletag, callback), 50);
  } else {
    callback();
  }
};

var refreshSlots = function refreshSlots(slotElementIds) {
  exec(function (googletag) {
    var slots = googletag.pubads().getSlots();

    var slotsToBeRefreshed = slots.filter(function (slot) {
      return slotElementIds.indexOf(slot.getSlotElementId()) >= 0;
    });

    if (slotsToBeRefreshed.length > 0) {
      slotsToBeRefreshed.forEach(function (slot) {
        return googletag.display(slot.getSlotElementId());
      });
      new Promise(function (resolve) {
        return waitForPubadsReady(googletag, resolve);
      }).then(function () {
        googletag.pubads().refresh(slotsToBeRefreshed);
      });
    }
  });
};

exports.default = {
  initialize: initialize,
  defineSlot: defineSlot,
  destroySlot: destroySlot,
  destroySlots: destroySlots,
  setAdsense: setAdsense,
  setTargeting: setTargeting,
  refreshSlots: refreshSlots,
  addSlotRenderEndedListener: addSlotRenderEndedListener,
  isSlotDefined: isSlotDefined,
  getSlots: getSlots
};