class Hyalite::ChangeEventPlugin

Constants

EVENT_TYPES
SUPPORTED_INPUT_TYPES

Public Instance Methods

event_types() click to toggle source
# File lib/hyalite/event_plugin/change_event_plugin.rb, line 40
def event_types
  EVENT_TYPES
end
extract_event(top_level_type, top_level_target, top_level_target_id, event) click to toggle source
# File lib/hyalite/event_plugin/change_event_plugin.rb, line 58
def extract_event(top_level_type, top_level_target, top_level_target_id, event)
  if should_use_change_event(top_level_target)
    target_id = top_level_target_id if top_level_type == :topChange
  elsif is_text_input_element(top_level_target)
    target_id = top_level_target_id if top_level_type == :topInput
  elsif should_use_click_event(top_level_target)
    target_id = top_level_target_id if top_level_type == :topClick
  end

  if target_id
    SyntheticEvent.new(event).tap do |synthetic_event|
      InstanceHandles.traverse_two_phase(target_id) do |target_id, upwards|
        listener = BrowserEvent.listener_at_phase(target_id, EVENT_TYPES[:change], upwards ? :bubbled : :captured)
        synthetic_event.add_listener(listener, target_id) if listener
      end
    end
  end
end
is_text_input_element(elem) click to toggle source
# File lib/hyalite/event_plugin/change_event_plugin.rb, line 44
def is_text_input_element(elem)
  node_name = elem.node_name.downcase
  (node_name == 'input' && SUPPORTED_INPUT_TYPES.include?(elem.input_type)) || node_name == 'textarea'
end
should_use_change_event(elem) click to toggle source
# File lib/hyalite/event_plugin/change_event_plugin.rb, line 49
def should_use_change_event(elem)
  node_name = elem.node_name.downcase
  node_name == 'select' || (node_name == 'input' && elem.input_type == 'file')
end
should_use_click_event(elem) click to toggle source
# File lib/hyalite/event_plugin/change_event_plugin.rb, line 54
def should_use_click_event(elem)
  elem.node_name.downcase == 'input' && %w(checkbox radio).include?(elem.input_type)
end