Source

mixins/listeners.js

  1. /**
  2. * Methods related to attaches custom events handlers to the
  3. * specified widget.
  4. * @category Widgets
  5. * @subcategory Mixins
  6. * @module listeners
  7. **/
  8. export default (self) => {
  9. Object.assign(self, {
  10. listeners: {},
  11. });
  12. return {
  13. /**
  14. * Let to attach events handler. Several functions can be attached
  15. * to the same event name.
  16. * @param {string} evt - Event name.
  17. * @param {Function} func - Callback function.
  18. * @instance
  19. */
  20. addListener(evt, func) {
  21. if (!self.listeners[evt]) self.listeners[evt] = [];
  22. self.listeners[evt].push(func);
  23. // self.el.listeners[evt].push(func);
  24. // this.addEventListener(evt, func);
  25. window.addEventListener(evt, func);
  26. },
  27. /**
  28. * Remove a particular event listener by index.
  29. * @param {string} evt - Event name.
  30. * @param {number} index - Index number.
  31. * @instance
  32. */
  33. removeListenerByIndex(evt, index) {
  34. // self.el.removeEventListener(evt, self.listeners[evt][index]);
  35. window.removeEventListener(evt, self.listeners[evt][index]);
  36. self.listeners[evt].splice(index, 1);
  37. },
  38. /**
  39. * Remove all listener for a particular event.
  40. * @param {string} evt - Event name.
  41. * @instance
  42. */
  43. removeAllListeners(evt) {
  44. if (!self.listeners[evt]) return;
  45. for (var i = 0; i < self.listeners[evt].length; i++) {
  46. this.removeListenerByIndex(evt, i);
  47. }
  48. },
  49. };
  50. };