# Source: src/ol/events/condition.js

    goog.provide('ol.events.ConditionType');
    goog.provide('ol.events.condition');

    goog.require('goog.asserts');
    goog.require('goog.dom.TagName');
    goog.require('goog.functions');
    goog.require('ol.MapBrowserEvent.EventType');
    goog.require('ol.MapBrowserPointerEvent');

    /**
     * A function that takes an {@link ol.MapBrowserEvent} and returns a
     * `{boolean}`. If the condition is met, true should be returned.
     *
     * @typedef {function(ol.MapBrowserEvent): boolean}
     * @todo api
     */
    ol.events.ConditionType;

    /**
     * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
     * @return {boolean} True if only the alt key is pressed.
     * @todo api
     */
    ol.events.condition.altKeyOnly = function(mapBrowserEvent) {
      var browserEvent = mapBrowserEvent.browserEvent;
      return (
          browserEvent.altKey &&
          !browserEvent.platformModifierKey &&
          !browserEvent.shiftKey);
    };

    /**
     * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
     * @return {boolean} True if only the alt and shift keys are pressed.
     * @todo api
     */
    ol.events.condition.altShiftKeysOnly = function(mapBrowserEvent) {
      var browserEvent = mapBrowserEvent.browserEvent;
      return (
          browserEvent.altKey &&
          !browserEvent.platformModifierKey &&
          browserEvent.shiftKey);
    };

    /**
     * Always true.
     * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
     * @return {boolean} True.
     * @todo api
     */
    ol.events.condition.always = goog.functions.TRUE;

    /**
     * Always false.
     * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
     * @return {boolean} False.
     * @todo api
     */
    ol.events.condition.never = goog.functions.FALSE;

    /**
     * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
     * @return {boolean} True if the event is a `singleclick` event.
     * @todo api
     */
    ol.events.condition.singleClick = function(mapBrowserEvent) {
      return mapBrowserEvent.type == ol.MapBrowserEvent.EventType.SINGLECLICK;
    };

    /**
     * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
     * @return {boolean} True only if there no modifier keys are pressed.
     * @todo api
     */
    ol.events.condition.noModifierKeys = function(mapBrowserEvent) {
      var browserEvent = mapBrowserEvent.browserEvent;
      return (
          !browserEvent.altKey &&
          !browserEvent.platformModifierKey &&
          !browserEvent.shiftKey);
    };

    /**
     * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
     * @return {boolean} True if only the platform modifier key is pressed.
     * @todo api
     */
    ol.events.condition.platformModifierKeyOnly = function(mapBrowserEvent) {
      var browserEvent = mapBrowserEvent.browserEvent;
      return (
          !browserEvent.altKey &&
          browserEvent.platformModifierKey &&
          !browserEvent.shiftKey);
    };

    /**
     * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
     * @return {boolean} True if only the shift key is pressed.
     * @todo api
     */
    ol.events.condition.shiftKeyOnly = function(mapBrowserEvent) {
      var browserEvent = mapBrowserEvent.browserEvent;
      return (
          !browserEvent.altKey &&
          !browserEvent.platformModifierKey &&
          browserEvent.shiftKey);
    };

    /**
     * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
     * @return {boolean} True only if the target element is not editable.
     * @todo api
     */
    ol.events.condition.targetNotEditable = function(mapBrowserEvent) {
      var target = mapBrowserEvent.browserEvent.target;
      goog.asserts.assertInstanceof(target, Element);
      var tagName = target.tagName;
      return (
          tagName !== goog.dom.TagName.INPUT &&
          tagName !== goog.dom.TagName.SELECT &&
          tagName !== goog.dom.TagName.TEXTAREA);
    };

    /**
     * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
     * @return {boolean} True if the event originates from a mouse device.
     * @todo api
     */
    ol.events.condition.mouseOnly = function(mapBrowserEvent) {
      goog.asserts.assertInstanceof(mapBrowserEvent, ol.MapBrowserPointerEvent);
      /* pointerId must be 1 for mouse devices,
       * see: http://www.w3.org/Submission/pointer-events/#pointerevent-interface
       */
      return mapBrowserEvent.pointerEvent.pointerId == 1;
    };