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