This is a bit of a hack, but in fact it improves the situation for the end user because it asserts the correct event type instead of failing silently.
230 lines
6.9 KiB
JavaScript
230 lines
6.9 KiB
JavaScript
goog.provide('ol.events.condition');
|
|
|
|
goog.require('goog.asserts');
|
|
goog.require('ol.functions');
|
|
goog.require('ol.MapBrowserEvent.EventType');
|
|
goog.require('ol.MapBrowserPointerEvent');
|
|
|
|
|
|
/**
|
|
* Return `true` if only the alt-key is pressed, `false` otherwise (e.g. when
|
|
* additionally the shift-key is pressed).
|
|
*
|
|
* @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
|
|
* @return {boolean} True if only the alt key is pressed.
|
|
* @api stable
|
|
*/
|
|
ol.events.condition.altKeyOnly = function(mapBrowserEvent) {
|
|
var originalEvent = mapBrowserEvent.originalEvent;
|
|
return (
|
|
originalEvent.altKey &&
|
|
!(originalEvent.metaKey || originalEvent.ctrlKey) &&
|
|
!originalEvent.shiftKey);
|
|
};
|
|
|
|
|
|
/**
|
|
* Return `true` if only the alt-key and shift-key is pressed, `false` otherwise
|
|
* (e.g. when additionally the platform-modifier-key is pressed).
|
|
*
|
|
* @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
|
|
* @return {boolean} True if only the alt and shift keys are pressed.
|
|
* @api stable
|
|
*/
|
|
ol.events.condition.altShiftKeysOnly = function(mapBrowserEvent) {
|
|
var originalEvent = mapBrowserEvent.originalEvent;
|
|
return (
|
|
originalEvent.altKey &&
|
|
!(originalEvent.metaKey || originalEvent.ctrlKey) &&
|
|
originalEvent.shiftKey);
|
|
};
|
|
|
|
|
|
/**
|
|
* Return always true.
|
|
*
|
|
* @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
|
|
* @return {boolean} True.
|
|
* @function
|
|
* @api stable
|
|
*/
|
|
ol.events.condition.always = ol.functions.TRUE;
|
|
|
|
|
|
/**
|
|
* Return `true` if the event is a `click` event, `false` otherwise.
|
|
*
|
|
* @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
|
|
* @return {boolean} True if the event is a map `click` event.
|
|
* @api stable
|
|
*/
|
|
ol.events.condition.click = function(mapBrowserEvent) {
|
|
return mapBrowserEvent.type == ol.MapBrowserEvent.EventType.CLICK;
|
|
};
|
|
|
|
|
|
/**
|
|
* Return `true` if the event has an "action"-producing mouse button.
|
|
*
|
|
* By definition, this includes left-click on windows/linux, and left-click
|
|
* without the ctrl key on Macs.
|
|
*
|
|
* @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
|
|
* @return {boolean} The result.
|
|
*/
|
|
ol.events.condition.mouseActionButton = function(mapBrowserEvent) {
|
|
var originalEvent = mapBrowserEvent.originalEvent;
|
|
return originalEvent.button == 0 &&
|
|
!(goog.userAgent.WEBKIT && ol.has.MAC && originalEvent.ctrlKey);
|
|
};
|
|
|
|
|
|
/**
|
|
* Return always false.
|
|
*
|
|
* @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
|
|
* @return {boolean} False.
|
|
* @function
|
|
* @api stable
|
|
*/
|
|
ol.events.condition.never = ol.functions.FALSE;
|
|
|
|
|
|
/**
|
|
* Return `true` if the browser event is a `pointermove` event, `false`
|
|
* otherwise.
|
|
*
|
|
* @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
|
|
* @return {boolean} True if the browser event is a `pointermove` event.
|
|
* @api
|
|
*/
|
|
ol.events.condition.pointerMove = function(mapBrowserEvent) {
|
|
return mapBrowserEvent.type == 'pointermove';
|
|
};
|
|
|
|
|
|
/**
|
|
* Return `true` if the event is a map `singleclick` event, `false` otherwise.
|
|
*
|
|
* @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
|
|
* @return {boolean} True if the event is a map `singleclick` event.
|
|
* @api stable
|
|
*/
|
|
ol.events.condition.singleClick = function(mapBrowserEvent) {
|
|
return mapBrowserEvent.type == ol.MapBrowserEvent.EventType.SINGLECLICK;
|
|
};
|
|
|
|
|
|
/**
|
|
* Return `true` if the event is a map `dblclick` event, `false` otherwise.
|
|
*
|
|
* @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
|
|
* @return {boolean} True if the event is a map `dblclick` event.
|
|
* @api stable
|
|
*/
|
|
ol.events.condition.doubleClick = function(mapBrowserEvent) {
|
|
return mapBrowserEvent.type == ol.MapBrowserEvent.EventType.DBLCLICK;
|
|
};
|
|
|
|
|
|
/**
|
|
* Return `true` if no modifier key (alt-, shift- or platform-modifier-key) is
|
|
* pressed.
|
|
*
|
|
* @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
|
|
* @return {boolean} True only if there no modifier keys are pressed.
|
|
* @api stable
|
|
*/
|
|
ol.events.condition.noModifierKeys = function(mapBrowserEvent) {
|
|
var originalEvent = mapBrowserEvent.originalEvent;
|
|
return (
|
|
!originalEvent.altKey &&
|
|
!(originalEvent.metaKey || originalEvent.ctrlKey) &&
|
|
!originalEvent.shiftKey);
|
|
};
|
|
|
|
|
|
/**
|
|
* Return `true` if only the platform-modifier-key (the meta-key on Mac,
|
|
* ctrl-key otherwise) is pressed, `false` otherwise (e.g. when additionally
|
|
* the shift-key is pressed).
|
|
*
|
|
* @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
|
|
* @return {boolean} True if only the platform modifier key is pressed.
|
|
* @api stable
|
|
*/
|
|
ol.events.condition.platformModifierKeyOnly = function(mapBrowserEvent) {
|
|
var originalEvent = mapBrowserEvent.originalEvent;
|
|
return (
|
|
!originalEvent.altKey &&
|
|
(ol.has.MAC ? originalEvent.metaKey : originalEvent.ctrlKey) &&
|
|
!originalEvent.shiftKey);
|
|
};
|
|
|
|
|
|
/**
|
|
* Return `true` if only the shift-key is pressed, `false` otherwise (e.g. when
|
|
* additionally the alt-key is pressed).
|
|
*
|
|
* @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
|
|
* @return {boolean} True if only the shift key is pressed.
|
|
* @api stable
|
|
*/
|
|
ol.events.condition.shiftKeyOnly = function(mapBrowserEvent) {
|
|
var originalEvent = mapBrowserEvent.originalEvent;
|
|
return (
|
|
!originalEvent.altKey &&
|
|
!(originalEvent.metaKey || originalEvent.ctrlKey) &&
|
|
originalEvent.shiftKey);
|
|
};
|
|
|
|
|
|
/**
|
|
* Return `true` if the target element is not editable, i.e. not a `<input>`-,
|
|
* `<select>`- or `<textarea>`-element, `false` otherwise.
|
|
*
|
|
* @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
|
|
* @return {boolean} True only if the target element is not editable.
|
|
* @api
|
|
*/
|
|
ol.events.condition.targetNotEditable = function(mapBrowserEvent) {
|
|
var target = mapBrowserEvent.originalEvent.target;
|
|
goog.asserts.assertInstanceof(target, Element,
|
|
'target should be an Element');
|
|
var tagName = target.tagName;
|
|
return (
|
|
tagName !== 'INPUT' &&
|
|
tagName !== 'SELECT' &&
|
|
tagName !== 'TEXTAREA');
|
|
};
|
|
|
|
|
|
/**
|
|
* Return `true` if the event originates from a mouse device.
|
|
*
|
|
* @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
|
|
* @return {boolean} True if the event originates from a mouse device.
|
|
* @api stable
|
|
*/
|
|
ol.events.condition.mouseOnly = function(mapBrowserEvent) {
|
|
// see http://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType
|
|
goog.asserts.assertInstanceof(mapBrowserEvent, ol.MapBrowserPointerEvent,
|
|
'Requires an ol.MapBrowserPointerEvent to work.');
|
|
return mapBrowserEvent.pointerEvent.pointerType == 'mouse';
|
|
};
|
|
|
|
|
|
/**
|
|
* Return `true` if the event originates from a primary pointer in
|
|
* contact with the surface or if the left mouse button is pressed.
|
|
* @see http://www.w3.org/TR/pointerevents/#button-states
|
|
*
|
|
* @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
|
|
* @return {boolean} True if the event originates from a primary pointer.
|
|
* @api
|
|
*/
|
|
ol.events.condition.primaryAction = function(mapBrowserEvent) {
|
|
var pointerEvent = mapBrowserEvent.pointerEvent;
|
|
return pointerEvent.isPrimary && pointerEvent.button === 0;
|
|
};
|