summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/shortcuts.js.coffee
blob: 3319a67a79d9037d2a5cc6c0f33642f4f0413094 (plain)
1
2
3
4
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
class @Shortcuts
  constructor: (skipResetBindings) ->
    @enabledHelp = []
    Mousetrap.reset() if not skipResetBindings
    Mousetrap.bind('?', @onToggleHelp)
    Mousetrap.bind('s', Shortcuts.focusSearch)
    Mousetrap.bind(['ctrl+shift+p', 'command+shift+p'], @toggleMarkdownPreview)
    Mousetrap.bind('t', -> Turbolinks.visit(findFileURL)) if findFileURL?

  onToggleHelp: (e) =>
    e.preventDefault()
    Shortcuts.toggleHelp(@enabledHelp)

  toggleMarkdownPreview: (e) ->
    $(document).triggerHandler('markdown-preview:toggle', [e])

  @toggleHelp: (location) ->
    $modal = $('#modal-shortcuts')

    if $modal.length
      $modal.modal('toggle')
      return

    $.ajax(
      url: gon.shortcuts_path,
      dataType: 'script',
      success: (e) ->
        if location and location.length > 0
          $(l).show() for l in location
        else
          $('.hidden-shortcut').show()
          $('.js-more-help-button').remove()
    )

  @focusSearch: (e) ->
    $('#search').focus()
    e.preventDefault()

$(document).on 'click.more_help', '.js-more-help-button', (e) ->
  $(@).remove()
  $('.hidden-shortcut').show()
  e.preventDefault()

Mousetrap.stopCallback = (->
  defaultStopCallback = Mousetrap.stopCallback

  return (e, element, combo) ->
    # allowed shortcuts if textarea, input, contenteditable are focused
    if ['ctrl+shift+p', 'command+shift+p'].indexOf(combo) != -1
      return false
    else
      return defaultStopCallback.apply(@, arguments)
)()