Source: ui/mouseoveroutemitter.js

var _ = require("lodash");
var GestureEmitter = require("./gestureemitter");
var DecksEvent = require("../events/decksevent");

/**
 * Class that emits or provides support for mouseover and mouseout events on an element
 *
 * @class
 * @extends GestureEmitter
 * @param {!Object} options - Additional options
 * @param {?(Emitter|Object)} [options.emitter={}] - Emitter instance or options on which to emit events
 * @param {!Element} options.element - Element for which to bind events
 * @param {!Hammer} options.hammer - Hammer instance for the element (required by base class)
 * @param {?boolean} [options.enabled=false] - Whether to enable this emitter
 * @param {?boolean} [options.horizontal=false] - Whether to monitor horizontal pan gestures.
 * @param {?boolean} [options.vertical=true] - Whether to monitor vertical pan gestures.
 * @param {?number} [options.threshold=0] - Threshold distance before pan gestures are detected.
 */
function MouseOverOutEmitter(options) {
  if (!(this instanceof MouseOverOutEmitter)) {
    return new MouseOverOutEmitter(options);
  }

  options = _.merge({}, this.defaultOptions, options);
  GestureEmitter.call(this, options);

  this.over = !!options.over;
  this.out = !!options.out;

  this.bind();
}

MouseOverOutEmitter.prototype = _.create(GestureEmitter.prototype, /** @lends MouseOverOutEmitter.prototype */ {
  constructor: MouseOverOutEmitter,

  defaultOptions: _.merge({}, GestureEmitter.prototype.defaultOptions, {
    over: true,
    out: true
  }),

  getElementEvents: function getElementEvents() {
    var map = {};
    if (this.over) {
      map.mouseover = "onMouseOver";
    }
    if (this.out) {
      map.mouseout = "onMouseOut";
    }
    return map;
  },

  onMouseOver: function onMouseOver(e) {
    this.emit(DecksEvent("gesture:mouse:over", this, e));
  },

  onMouseOut: function onMouseOut(e) {
    this.emit(DecksEvent("gesture:mouse:out", this, e));
  }
});

module.exports = MouseOverOutEmitter;