shortcuts.coffee 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. class app.Shortcuts
  2. $.extend @prototype, Events
  3. constructor: ->
  4. @isWindows = $.isWindows()
  5. @start()
  6. start: ->
  7. $.on document, 'keydown', @onKeydown
  8. $.on document, 'keypress', @onKeypress
  9. return
  10. stop: ->
  11. $.off document, 'keydown', @onKeydown
  12. $.off document, 'keypress', @onKeypress
  13. return
  14. showTip: ->
  15. app.showTip('KeyNav')
  16. @showTip = null
  17. onKeydown: (event) =>
  18. result = if event.ctrlKey or event.metaKey
  19. @handleKeydownSuperEvent event unless event.altKey or event.shiftKey
  20. else if event.shiftKey
  21. @handleKeydownShiftEvent event unless event.altKey
  22. else if event.altKey
  23. @handleKeydownAltEvent event
  24. else
  25. @handleKeydownEvent event
  26. event.preventDefault() if result is false
  27. return
  28. onKeypress: (event) =>
  29. unless event.ctrlKey or event.metaKey
  30. result = @handleKeypressEvent event
  31. event.preventDefault() if result is false
  32. return
  33. handleKeydownEvent: (event) ->
  34. if not event.target.form and (48 <= event.which <= 57 or 65 <= event.which <= 90)
  35. @trigger 'typing'
  36. return
  37. switch event.which
  38. when 8
  39. @trigger 'typing' unless event.target.form
  40. when 13
  41. @trigger 'enter'
  42. when 27
  43. @trigger 'escape'
  44. when 32
  45. if not @lastKeypress or @lastKeypress < Date.now() - 500
  46. @trigger 'pageDown'
  47. false
  48. when 33
  49. @trigger 'pageUp'
  50. when 34
  51. @trigger 'pageDown'
  52. when 35
  53. @trigger 'end'
  54. when 36
  55. @trigger 'home'
  56. when 37
  57. @trigger 'left' unless event.target.value
  58. when 38
  59. @trigger 'up'
  60. @showTip?()
  61. false
  62. when 39
  63. @trigger 'right' unless event.target.value
  64. when 40
  65. @trigger 'down'
  66. @showTip?()
  67. false
  68. handleKeydownSuperEvent: (event) ->
  69. switch event.which
  70. when 13
  71. @trigger 'superEnter'
  72. when 37
  73. unless @isWindows
  74. @trigger 'superLeft'
  75. false
  76. when 38
  77. @trigger 'home'
  78. false
  79. when 39
  80. unless @isWindows
  81. @trigger 'superRight'
  82. false
  83. when 40
  84. @trigger 'end'
  85. false
  86. handleKeydownShiftEvent: (event) ->
  87. if not event.target.form and 65 <= event.which <= 90
  88. @trigger 'typing'
  89. return
  90. switch event.which
  91. when 32
  92. @trigger 'pageUp'
  93. false
  94. when 38
  95. unless getSelection()?.toString()
  96. @trigger 'altUp'
  97. false
  98. when 40
  99. unless getSelection()?.toString()
  100. @trigger 'altDown'
  101. false
  102. handleKeydownAltEvent: (event) ->
  103. switch event.which
  104. when 9
  105. @trigger 'altRight', event
  106. when 37
  107. if @isWindows
  108. @trigger 'superLeft'
  109. false
  110. when 38
  111. @trigger 'altUp'
  112. false
  113. when 39
  114. if @isWindows
  115. @trigger 'superRight'
  116. false
  117. when 40
  118. @trigger 'altDown'
  119. false
  120. when 70
  121. @trigger 'altF', event
  122. when 71
  123. @trigger 'altG'
  124. false
  125. when 82
  126. @trigger 'altR'
  127. false
  128. when 83
  129. @trigger 'altS'
  130. false
  131. handleKeypressEvent: (event) ->
  132. if event.which is 63 and not event.target.value
  133. @trigger 'help'
  134. false
  135. else
  136. @lastKeypress = Date.now()