localHooks.js 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import { arrayEach } from './../helpers/array';
  2. import { defineGetter } from './../helpers/object';
  3. var MIXIN_NAME = 'localHooks';
  4. /**
  5. * Mixin object to extend objects functionality for local hooks.
  6. *
  7. * @type {Object}
  8. */
  9. var localHooks = {
  10. /**
  11. * Internal hooks storage.
  12. */
  13. _localHooks: Object.create(null),
  14. /**
  15. * Add hook to the collection.
  16. *
  17. * @param {String} key Hook name.
  18. * @param {Function} callback Hook callback
  19. */
  20. addLocalHook: function addLocalHook(key, callback) {
  21. if (!this._localHooks[key]) {
  22. this._localHooks[key] = [];
  23. }
  24. this._localHooks[key].push(callback);
  25. },
  26. /**
  27. * Run hooks.
  28. *
  29. * @param {String} key Hook name.
  30. * @param {*} params
  31. */
  32. runLocalHooks: function runLocalHooks(key) {
  33. var _this = this;
  34. for (var _len = arguments.length, params = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
  35. params[_key - 1] = arguments[_key];
  36. }
  37. if (this._localHooks[key]) {
  38. arrayEach(this._localHooks[key], function (callback) {
  39. return callback.apply(_this, params);
  40. });
  41. }
  42. },
  43. /**
  44. * Clear all added hooks.
  45. */
  46. clearLocalHooks: function clearLocalHooks() {
  47. this._localHooks = {};
  48. }
  49. };
  50. defineGetter(localHooks, 'MIXIN_NAME', MIXIN_NAME, {
  51. writable: false,
  52. enumerable: false
  53. });
  54. export default localHooks;