UNPKG

@baleada/listenable-gestures

Version:

A collection of gesture recognizers that are compatible with Baleada Logic's Listenable class.

88 lines (76 loc) 2.25 kB
import { emit, toEmitted, storeStartMetadata, storeMoveMetadata, isDefined } from '../util'; /* * drag is defined as a single click that: * - starts at given point * - travels a distance greater than 0px (or a minimum distance of your choice) * - does not mouseleave or end */ var defaultOptions = { minDistance: 0 }; export default function drag() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var onDown = options.onDown, onMove = options.onMove, onLeave = options.onLeave, onUp = options.onUp, minDistance = isDefined(options.minDistance) ? options.minDistance : defaultOptions.minDistance; function mousedown(handlerApi) { var event = handlerApi.event, setMetadata = handlerApi.setMetadata; setMetadata({ path: 'mouseStatus', value: 'down' }); storeStartMetadata(event, handlerApi, 'mouse'); emit(onDown, toEmitted(handlerApi)); } function mousemove(handlerApi) { var event = handlerApi.event, getMetadata = handlerApi.getMetadata, denied = handlerApi.denied; if (getMetadata().mouseStatus === 'down') { storeMoveMetadata(event, handlerApi, 'mouse'); recognize(handlerApi); } else { denied(); } emit(onMove, toEmitted(handlerApi)); } function recognize(_ref) { var getMetadata = _ref.getMetadata, recognized = _ref.recognized; if (getMetadata().distance.fromStart >= minDistance) { recognized(); } } function mouseleave(handlerApi) { var getMetadata = handlerApi.getMetadata, denied = handlerApi.denied, setMetadata = handlerApi.setMetadata; if (getMetadata().mouseStatus === 'down') { denied(); setMetadata({ path: 'mouseStatus', value: 'leave' }); } emit(onLeave, toEmitted(handlerApi)); } function mouseup(handlerApi) { var setMetadata = handlerApi.setMetadata, denied = handlerApi.denied; setMetadata({ path: 'mouseStatus', value: 'up' }); denied(); emit(onUp, toEmitted(handlerApi)); } return { mousedown: mousedown, mousemove: mousemove, mouseleave: mouseleave, mouseup: mouseup }; }