code: function MdTooltipRegistry() {
    var listeners = {};
    var ngWindow = angular.element(window);
  
    return {
      register: register,
      deregister: deregister
    };
  
    /**
     * Global event handler that dispatches the registered handlers in the
     * service.
     * @param {!Event} event Event object passed in by the browser
     */
    function globalEventHandler(event) {
      if (listeners[event.type]) {
        listeners[event.type].forEach(function(currentHandler) {
          currentHandler.call(this, event);
        }, this);
      }
    }
  
    /**
     * Registers a new handler with the service.
     * @param {string} type Type of event to be registered.
     * @param {!Function} handler Event handler.
     * @param {boolean} useCapture Whether to use event capturing.
     */
    function register(type, handler, useCapture) {
      var handlers = listeners[type] = listeners[type] || [];
  
      if (!handlers.length) {
        useCapture ? window.addEventListener(type, globalEventHandler, true) :
            ngWindow.on(type, globalEventHandler);
      }
  
      if (handlers.indexOf(handler) === -1) {
        handlers.push(handler);
      }
    }
  
    /**
     * Removes an event handler from the service.
     * @param {string} type Type of event handler.
     * @param {!Function} handler The event handler itself.
     * @param {boolean} useCapture Whether the event handler used event capturing.
     */
    function deregister(type, handler, useCapture) {
      var handlers = listeners[type];
      var index = handlers ? handlers.indexOf(handler) : -1;
  
      if (index > -1) {
        handlers.splice(index, 1);
  
        if (handlers.length === 0) {
          useCapture ? window.removeEventListener(type, globalEventHandler, true) :
              ngWindow.off(type, globalEventHandler);
        }
      }
    }
  }
docs: Service that is used to reduce the amount of listeners that are being
  registered on the `window` by the tooltip component. Works by collecting
  the individual event handlers and dispatching them from a global handler.
  
  @ngInject