Class: Hyalite::EventDispatcher
- Inherits:
-
Object
- Object
- Hyalite::EventDispatcher
show all
- Defined in:
- lib/hyalite/event_dispatcher.rb
Defined Under Namespace
Classes: TopLevelCallbackBookKeeping
Instance Method Summary
collapse
Constructor Details
#initialize(&extract_events) ⇒ EventDispatcher
Returns a new instance of EventDispatcher.
3
4
5
6
7
8
|
# File 'lib/hyalite/event_dispatcher.rb', line 3
def initialize(&)
@enabled = true
@listener_bank = {}
@extract_events =
@event_queue = []
end
|
Instance Method Details
#delete_all_listeners(id, &block) ⇒ Object
81
82
83
84
85
86
87
|
# File 'lib/hyalite/event_dispatcher.rb', line 81
def delete_all_listeners(id, &block)
@listener_bank.each do |registration_name, bank|
next unless bank[id]
yield(id, registration_name) if block_given?
bank.delete(id)
end
end
|
#delete_listener(id, registration_name) ⇒ Object
74
75
76
77
78
79
|
# File 'lib/hyalite/event_dispatcher.rb', line 74
def delete_listener(id, registration_name)
if @listener_bank.has_key? registration_name
yield(id, registration_name)
@listener_bank[registration_name].delete(id)
end
end
|
#dispatch_event(top_level_type, event) ⇒ Object
58
59
60
61
62
63
|
# File 'lib/hyalite/event_dispatcher.rb', line 58
def dispatch_event(top_level_type, event)
return unless @enabled
book_keeping = TopLevelCallbackBookKeeping.new(top_level_type, event)
Hyalite.updates.batched_updates { handle_top_level(book_keeping) }
end
|
#enabled=(enabled) ⇒ Object
14
15
16
|
# File 'lib/hyalite/event_dispatcher.rb', line 14
def enabled=(enabled)
@enabled = enabled
end
|
#enabled? ⇒ Boolean
10
11
12
|
# File 'lib/hyalite/event_dispatcher.rb', line 10
def enabled?
@enabled
end
|
#get_listener(id, registration_name) ⇒ Object
70
71
72
|
# File 'lib/hyalite/event_dispatcher.rb', line 70
def get_listener(id, registration_name)
@listener_bank[registration_name].try {|listeners| listeners[id] }
end
|
#handle_top_level(book_keeping) ⇒ Object
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# File 'lib/hyalite/event_dispatcher.rb', line 33
def handle_top_level(book_keeping)
ancestor = Mount.find_first_hyalite_dom(book_keeping.event.target)
while ancestor
book_keeping.ancestors << ancestor
ancestor = find_parent(ancestor)
end
book_keeping.ancestors.each do |top_level_target|
top_level_target_id = Mount.node_id(top_level_target) || ''
synthetic_events = @extract_events.call(
book_keeping.top_level_type,
top_level_target,
top_level_target_id,
book_keeping.event,
).flatten
synthetic_events.each do |synthetic_event|
synthetic_event.each_listener do |listener, dom_id|
target = Mount.node(dom_id);
listener.call(synthetic_event.event, target)
end
end
end
end
|
#put_listener(id, registration_name, listener) ⇒ Object
65
66
67
68
|
# File 'lib/hyalite/event_dispatcher.rb', line 65
def put_listener(id, registration_name, listener)
listeners = @listener_bank[registration_name] ||= {}
listeners[id] = listener
end
|
#trap_bubbled_event(top_level_type, handler_base_name, element) ⇒ Object
18
19
20
21
22
23
24
|
# File 'lib/hyalite/event_dispatcher.rb', line 18
def trap_bubbled_event(top_level_type, handler_base_name, element)
return nil unless element
element.on handler_base_name do |event|
dispatch_event(top_level_type, event)
end
end
|