API Docs for: 0.0.1
Show:

File: src/event-mobile/event-mobile.js

  1. "use strict";
  2.  
  3. /**
  4. * Integrates mobile-events to event-dom. more about DOM-events:
  5. * http://www.smashingmagazine.com/2013/11/12/an-introduction-to-dom-events/
  6. *
  7. *
  8. * <i>Copyright (c) 2014 ITSA - https://github.com/itsa</i>
  9. * New BSD License - http://choosealicense.com/licenses/bsd-3-clause/
  10. *
  11. * @example
  12. * Event = require('event-mobile')(window);
  13. *
  14. * @module event
  15. * @submodule event-mobile
  16. * @class Event
  17. * @since 0.0.1
  18. */
  19.  
  20. var NAME = '[event-mobile]: ';
  21.  
  22. module.exports = function (window) {
  23. /**
  24. * The (only) Hammer-instance that `Event` uses. It is bound to the `body`-element.
  25. *
  26. * @property hammertime
  27. * @type Hammer-instance
  28. * @since 0.0.1
  29. */
  30. var Event = require('event-dom')(window),
  31. document = window.document,
  32. Hammer = require('./lib/hammer-2.0.4.js')(window),
  33. hammertime = Event.hammertime = new Hammer(document.body),
  34. singletap, doubletap, tripletap;
  35.  
  36. if (window._ITSAmodules.EventMobile) {
  37. return Event; // Event was already extended
  38. }
  39.  
  40. // create reference to the HammerClass:
  41. /**
  42. * Adds the `Hammer`-class to Event, so it can be used from within Event.
  43. *
  44. * @property Hammer
  45. * @type Hammer
  46. * @since 0.0.1
  47. */
  48. Event.Hammer = Hammer;
  49.  
  50. // now we extend HammerJS with 2 events: doubletap and tripletap:
  51. doubletap = new Hammer.Tap({ event: 'doubletap', taps: 2 });
  52. tripletap = new Hammer.Tap({ event: 'tripletap', taps: 3 });
  53. hammertime.add([
  54. doubletap,
  55. tripletap
  56. ]);
  57.  
  58. // we want to recognize this simulatenous, so a doubletap and trippletap will be detected even while a tap has been recognized.
  59. // the tap event will be emitted on every tap
  60. singletap = hammertime.get('tap');
  61. doubletap.recognizeWith(singletap);
  62. tripletap.recognizeWith([doubletap, singletap]);
  63.  
  64. // patch Hammer.Manager.prototype.emit --> it shouldn't emit to its own listeners,
  65. // but to our eventsystem. Inspired from Jorik Tangelder's own jquery plugin: https://github.com/hammerjs/jquery.hammer.js
  66. Hammer.Manager.prototype.emit = function(type, data) {
  67. if (type==='hammer.input') {
  68. return;
  69. }
  70. console.log(NAME, 'emit '+type);
  71. // label the eventobject by being a Hammer-event
  72. // is not being used internally, but we would like
  73. // to inform the subscribers
  74. data._isHammer = true;
  75. data.type = type;
  76.  
  77. // Emitting 'ParcelaEvent:eventmobile' --> its defaultFn is defined inside `event-dom`
  78. // which will transport the event through the special dom-cycle
  79. /**
  80. * Is emitted whenever hammerjs detects a gestureevent.
  81. * By emitting its original event through ParcelaEvent:eventmobile, `event-dom`
  82. * will catch it and process it through the dom-event cycle.
  83. *
  84. * @event ParcelaEvent:eventmobile
  85. * @param e {Object} eventobject
  86. * @since 0.1
  87. **/
  88. Event._domCallback(data);
  89. };
  90.  
  91. Hammer.Manager.prototype.set = (function(originalSet) {
  92. return function(options) {
  93. delete options.domEvents; // we don't want the user make Hammer fire domevents
  94. originalSet.call(this, options);
  95. };
  96. })(Hammer.Manager.prototype.set);
  97.  
  98. // store module:
  99. window._ITSAmodules.EventMobile = Event;
  100.  
  101. return Event;
  102. };
  103.