class Ferrum::Keyboard
Constants
- KEYS
- KEYS_MAPPING
- MODIFIERS
Public Class Methods
new(page)
click to toggle source
# File lib/ferrum/keyboard.rb, line 29 def initialize(page) @page = page end
Public Instance Methods
down(key)
click to toggle source
# File lib/ferrum/keyboard.rb, line 33 def down(key) key = normalize_keys(Array(key)) type = key[:text] ? "keyDown" : "rawKeyDown" @page.command("Input.dispatchKeyEvent", slowmoable: true, type: type, **key) self end
modifiers(keys)
click to toggle source
# File lib/ferrum/keyboard.rb, line 58 def modifiers(keys) keys.map { |k| MODIFIERS[k.to_s] }.compact.reduce(0, :|) end
type(*keys)
click to toggle source
# File lib/ferrum/keyboard.rb, line 46 def type(*keys) keys = normalize_keys(Array(keys)) keys.each do |key| type = key[:text] ? "keyDown" : "rawKeyDown" @page.command("Input.dispatchKeyEvent", type: type, **key) @page.command("Input.dispatchKeyEvent", slowmoable: true, type: "keyUp", **key) end self end
up(key)
click to toggle source
# File lib/ferrum/keyboard.rb, line 40 def up(key) key = normalize_keys(Array(key)) @page.command("Input.dispatchKeyEvent", slowmoable: true, type: "keyUp", **key) self end
Private Instance Methods
combine_strings(keys)
click to toggle source
# File lib/ferrum/keyboard.rb, line 108 def combine_strings(keys) keys .chunk { |k| k.is_a?(String) } .map { |s, k| s ? [k.reduce(&:+)] : k } .reduce(&:+) end
normalize_keys(keys, pressed_keys = [], memo = [])
click to toggle source
# File lib/ferrum/keyboard.rb, line 64 def normalize_keys(keys, pressed_keys = [], memo = []) case keys when Array pressed_keys.push([]) memo += combine_strings(keys).map do |key| normalize_keys(key, pressed_keys, memo) end pressed_keys.pop memo.flatten.compact when Symbol key = keys.to_s.downcase if MODIFIERS.keys.include?(key) pressed_keys.last.push(key) nil else _key = KEYS.fetch(KEYS_MAPPING[key.to_sym] || key.to_sym) _key[:modifiers] = pressed_keys.flatten.map { |k| MODIFIERS[k] }.reduce(0, :|) to_options(_key) end when String pressed = pressed_keys.flatten keys.each_char.map do |char| if pressed.empty? key = KEYS[char] || {} key = key.merge(text: char, unmodifiedText: char) [to_options(key)] else key = KEYS[char] || {} text = pressed == ["shift"] ? char.upcase : char key = key.merge( text: text, unmodifiedText: text, isKeypad: key["location"] == 3, modifiers: pressed.map { |k| MODIFIERS[k] }.reduce(0, :|), ) modifiers = pressed.map { |k| to_options(KEYS.fetch(KEYS_MAPPING[k.to_sym])) } modifiers + [to_options(key)] end.flatten end end end
to_options(hash)
click to toggle source
# File lib/ferrum/keyboard.rb, line 115 def to_options(hash) hash.inject({}) { |memo, (k, v)| memo.merge(k.to_sym => v) } end