class Event { ... // --- Event custom Linked list --- var lastHandler : Bubble; function newBubble( listener, handler, next : Bubble ) { var b : Bubble = { l : listener, h : handler, n : next, p : null, enable : null, disable : null } b.enable = callback(enableBubble, b); b.disable = callback(disableBubble, b); if(next != null) next.p = b; return b; } function enableBubble( b : Bubble ) { if( b.p != null ) b.p.n = b; // Bubble.parentNode.nextNode = this Node } function disableBubble( b : Bubble ) { if( b.p == null ) b.p = untyped { n : this.n }; else b.p.n = b.n; // Bubble.parentNode.nextNode = Bubble.nextNode } } typedef Bubble { /** Listener object **/ public var l : Dynamic; /** Handler function **/ public var h : HandlerSig; /** Next EventBubble object **/ public var n : EventBubble; /** Previous EventBubble in the chain **/ public var p : EventBubble; public var disable : Void -> Void; public var enable : Void -> Void; }