Module: Ruwi::Dom::Events

Defined in:
lib/ruwi/runtime/dom/events.rb

Class Method Summary collapse

Class Method Details

.add_event_listener(event_name, handler, element, host_component = nil) ⇒ Proc

Parameters:

  • event_name (String)
  • handler (Proc)
  • element (JS::Object)
  • host_component (Object, nil) (defaults to: nil)

Returns:

  • (Proc)


11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/ruwi/runtime/dom/events.rb', line 11

def add_event_listener(event_name, handler, element, host_component = nil)
  if host_component
    # Same as JavaScript's handler.apply(hostComponent, arguments)
    call_handler = JS.try_convert(->(event) {
      handler.arity == 0 ? host_component.instance_exec(&handler) : host_component.instance_exec(event, &handler)
    })
  else
    call_handler = JS.try_convert(->(event) { handler.arity == 0 ? handler.call : handler.call(event) })
  end
  element.call(:addEventListener, event_name.to_s, call_handler)
  call_handler
end

.add_event_listeners(element, listeners = {}, host_component = nil) ⇒ Object



24
25
26
27
28
29
# File 'lib/ruwi/runtime/dom/events.rb', line 24

def add_event_listeners(element, listeners = {}, host_component = nil)
  listeners.each do |event_name, handler|
    add_event_listener(event_name, handler, element, host_component)
  end
  listeners
end

.remove_event_listeners(listeners = {}, element) ⇒ Object

Parameters:

  • listeners (Hash) (defaults to: {})
  • element (JS::Object)


33
34
35
36
37
# File 'lib/ruwi/runtime/dom/events.rb', line 33

def remove_event_listeners(listeners = {}, element)
  listeners.each do |event_name, handler|
    element.call(:removeEventListener, event_name.to_s, handler)
  end
end