$ ->

handleKeyBindings()

$(document).on 'page:change', ->

handleKeyBindings()

handleKeyBindings = ->

# As turbolinks does not refresh the page, some old keybindings could be still present. Therefore a reset is required.
Mousetrap.reset()

# Hotkey binding to links with 'data-keybinding' attribute
# Navigate link when hotkey pressed
$('a[data-keybinding]').each (i, el) ->
  bindedKey = $(el).data('keybinding')
  bindedKey = bindedKey.toString() if typeof(bindedKey) == 'number'
  Mousetrap.bind bindedKey, (e) ->
    if typeof(Turbolinks) == 'undefined'
      # Emulate click if turbolinks defined
      el.click()
    else
      # Use turbolinks to go to URL
      Turbolinks.visit(el.href)

# Hotkey binding to inputs with 'data-keybinding' attribute
# Focus input when hotkey pressed
$('input[data-keybinding]').each (i, el) ->
  Mousetrap.bind $(el).data('keybinding'), (e) ->
    el.focus()
    if e.preventDefault
      e.preventDefault()
    else
      e.returnValue = false

# Toggle show/hide hotkey hints
window.mouseTrapRails =
  showOnLoad: false           # Show/hide hotkey hints by default (on page load). Mostly for debugging purposes.
  toggleKeys: 'alt+shift+h'   # Keys combo to toggle hints visibility.
  keysShown: false            # State of hotkey hints
  toggleHints:  ->
    $('a[data-keybinding]').each (i, el) ->
      $el = $(el)
      if mouseTrapRails.keysShown
        $el.removeClass('mt-hotkey-el').find('.mt-hotkey-hint').remove()
      else
        mtKey = $el.data('keybinding')
        $hint = "<i class='mt-hotkey-hint' title='Press \<#{mtKey}\> to open link'>#{mtKey}</i>"
        $el.addClass('mt-hotkey-el') unless $el.css('position') is 'absolute'
        $el.append $hint
    @keysShown ^= true

Mousetrap.bind mouseTrapRails.toggleKeys, -> mouseTrapRails.toggleHints()

mouseTrapRails.toggleHints() if mouseTrapRails.showOnLoad