123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- 'use strict';
- /**
- * Licensed Materials - Property of IBM
- * IBM Cognos Products: BI Cloud (C) Copyright IBM Corp. 2013, 2017
- * US Government Users Restricted Rights - Use, duplication or disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
- */
- /**
- * Helper class to provide various event functionality.
- *
- * This class provide an 'on' method to attach a handler. The return is object with an off() method that will disconnect the event handler.
- *
- * This class provide some gesture support like tap and hold
- *
- * The class will create an event wrapper that will be provide the same interface to get pointer location whether it is a touch or mouse event
- *
- */
- define(['jquery', 'hammerjs', 'jquery.hammer', '../../../lib/@waca/core-client/js/core-client/utils/EventHelper'], function ($, hammer) {
- var isTouch = 'ontouchstart' in window;
- var hammerGestures = {};
- for (var name in hammer.gestures) {
- if (hammer.gestures.hasOwnProperty(name)) {
- hammerGestures[hammer.gestures[name].name] = 1;
- }
- }
- var getTouches = function getTouches(e) {
- var touches;
- if (e.targetTouches) {
- touches = e.targetTouches;
- } else if (e.originalEvent && e.originalEvent.targetTouches) {
- touches = e.originalEvent.targetTouches;
- } else if (e.gesture) {
- touches = e.gesture.touches;
- } else {
- touches = null;
- }
- return touches;
- };
- return {
- // Used to track event handlers that don't get cleaned up.
- currentHandlerCount: 0,
- /**
- * Attach an event handler to a given node.
- * This is is a helper method that can be used if we want to attach hammer gestures as well as native dom events
- *
- *
- * @param node
- * @param eventName - name of the event e.g. 'mousedown', 'click', etc..
- * @param handler - function called when the event is triggered.
- * @param options - hammer options.
- * @returns - an object with 'off' method that can be used to remove the event handler.
- */
- on: function on(node, eventName, handler) {
- if (!isTouch && this.isTouch(eventName)) {
- // When we have a touch event and no touch support, we simply don't register the event
- return {
- off: function off() {}
- };
- }
- // Make sure to fix the event so that location info for touch and mouse are in the same location in the event
- var f = function (evt) {
- return handler(this.fixEvent(evt));
- }.bind(this);
- this._addListener(node, eventName, f);
- return {
- off: function () {
- this._removeListener(node, eventName, f);
- }.bind(this)
- };
- },
- fixEvent: function fixEvent(e) {
- var event = e;
- // get the information form the right place if we have a touch event (native, jquery or hammer)
- var touches = getTouches(e);
- event.isTouch = touches !== null ? true : false;
- var coords = touches && touches.length ? touches[0] : null;
- // touchend does not have coordinates
- if (coords && coords.clientX !== undefined) {
- event.clientX = coords.clientX;
- event.clientY = coords.clientY;
- event.pageX = coords.pageX;
- event.pageY = coords.pageY;
- }
- return event;
- },
- _addListener: function _addListener(node, eventName, handler) {
- if (handler) {
- this.currentHandlerCount++;
- $(node).on(eventName, handler);
- }
- },
- _removeListener: function _removeListener(node, eventName, handler) {
- if (handler) {
- this.currentHandlerCount--;
- $(node).off(eventName, handler);
- }
- },
- isTouch: function isTouch(name) {
- return name.match(/touch/) || hammerGestures[name];
- },
- setInlineEdit: function setInlineEdit(sId, fCallback, options) {
- var $node = $(sId);
- $node.inlineEditor(fCallback, options);
- return {
- 'off': function off() {
- $node.inlineEditor('remove');
- },
- 'blur': function blur() {
- $node.inlineEditor('blur');
- },
- 'isEditing': function isEditing() {
- return $node.inlineEditor('isEditing');
- }
- };
- }
- };
- });
- //# sourceMappingURL=EventHelper.js.map
|