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
|