Module: LazyHotkeys::HotkeysHelper

Defined in:
lib/lazy_hotkeys/hotkeys_helper.rb

Instance Method Summary collapse

Instance Method Details

#hotkey(keys, **opts, &block) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/lazy_hotkeys/hotkeys_helper.rb', line 5

def hotkey(keys, **opts, &block)
  type, payload =
    if opts[:visit]
      [:visit, { to: opts[:visit] }]
    elsif opts[:to]
      [:request, { to: opts[:to], method: (opts[:method] || :get).to_s.upcase, params: opts[:params] }]
    elsif opts[:action]
      [:action, { action: opts[:action].to_s }]
    elsif opts[:dom]
      [:dom, opts[:dom]]
    elsif opts[:chain]
      [:chain, opts[:chain]]
    else
      raise ArgumentError, "Specify one of: visit:, to:, action:, dom:, chain:"
    end

  data = {
    "data-hotkey" => "true",
    "data-hotkey-keys" => keys,
    "data-hotkey-type" => type,
    "data-hotkey-opts" => payload.to_json,
    "data-hotkey-scope" => opts[:scope],
    "data-hotkey-prevent" => (opts.key?(:prevent_default) ? opts[:prevent_default] : true).to_s,
    "data-hotkey-same-origin" => (opts.key?(:same_origin) ? opts[:same_origin] : true).to_s,
    "data-hotkey-hint" => opts[:hint]
  }.compact

  content = capture(&block) if block_given?
  tag.template(content, **data)
end