Guest User

Untitled

a guest
Aug 21st, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.09 KB | None | 0 0
  1. //// Object Ekho
  2. var Ekho = Base.clone({
  3. __init__:
  4. function _init(parent, thing) {
  5. this.listeners = { }
  6. this.base = thing
  7. this.parent = parent
  8. return this },
  9.  
  10. listeners:
  11. function listeners(event) {
  12. return this.listeners[event]
  13. || (this.listeners[event] = []) },
  14.  
  15. listen:
  16. function listen(event, handler, filter) {
  17. handler = make_handler(handler, filter, [])
  18. this.listeners(event).push(handler)
  19. return handler },
  20.  
  21. tap:
  22. function tap(origin, method, handler, filter) {
  23. handler = make_handler(handler, filter, [])
  24.  
  25. origin[method].listen? origin[method].listen('*call*', handler)
  26. : /* plain function? */ origin[method] = make_ekho(wrapper, this)
  27.  
  28. return handler
  29.  
  30. function wrapper() {
  31. result = origin[method].apply(origin, arguments)
  32. wrapper.shout.apply(wrapper, ['*call*'].concat(result))
  33. return result }},
  34.  
  35. once:
  36. function once(handler) { var real_fn
  37. real_fn = handler.fn
  38. handler.fn = function(event) {
  39. real_fn.apply(this, arguments)
  40. return DROP }
  41.  
  42. return handler },
  43.  
  44. deafen:
  45. function deafen(event, handler) { var self
  46. self = this
  47.  
  48. event? this.listeners[event] = filter()
  49. : each(this.listeners, clean)
  50.  
  51. return this
  52.  
  53. function keepp(hd) { return handler && handler !== hd }
  54. function filter() { return self.listeners(event).filter(keepp) }
  55. function clean(ev) { return self.deafen(ev, handler) }},
  56.  
  57. shout:
  58. function shout(event) {
  59. args = slice.call(arguments, 1)
  60. event = make_event(this, event, args)
  61.  
  62. args.unshift(event)
  63. this.listeners[event.type] = filter(this.listeners(event.type))
  64.  
  65. if (!event.handled) event.bubble()
  66. return this
  67.  
  68. function keepp(value) { return value !== DROP }
  69. function filter(hooks){ var result
  70. result = []
  71. hooks.every(function(hd) {
  72. if (keepp(hd.exec.apply(hd, args))) result.push(hd)
  73. return !event.halted })
  74. return result }}
  75. })
Add Comment
Please, Sign In to add comment