| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- class app.Shortcuts
- $.extend @prototype, Events
- constructor: ->
- @isMac = $.isMac()
- @start()
- start: ->
- $.on document, 'keydown', @onKeydown
- $.on document, 'keypress', @onKeypress
- return
- stop: ->
- $.off document, 'keydown', @onKeydown
- $.off document, 'keypress', @onKeypress
- return
- swapArrowKeysBehavior: ->
- app.settings.get('arrowScroll')
- showTip: ->
- app.showTip('KeyNav')
- @showTip = null
- onKeydown: (event) =>
- return if @buggyEvent(event)
- result = if event.ctrlKey or event.metaKey
- @handleKeydownSuperEvent event unless event.altKey or event.shiftKey
- else if event.shiftKey
- @handleKeydownShiftEvent event unless event.altKey
- else if event.altKey
- @handleKeydownAltEvent event
- else
- @handleKeydownEvent event
- event.preventDefault() if result is false
- return
- onKeypress: (event) =>
- return if @buggyEvent(event)
- unless event.ctrlKey or event.metaKey
- result = @handleKeypressEvent event
- event.preventDefault() if result is false
- return
- handleKeydownEvent: (event, _force) ->
- return @handleKeydownAltEvent(event, true) if not _force and event.which in [37, 38, 39, 40] and @swapArrowKeysBehavior()
- if not event.target.form and (48 <= event.which <= 57 or 65 <= event.which <= 90)
- @trigger 'typing'
- return
- switch event.which
- when 8
- @trigger 'typing' unless event.target.form
- when 13
- @trigger 'enter'
- when 27
- @trigger 'escape'
- false
- when 32
- if event.target.type is 'search' and (not @lastKeypress or @lastKeypress < Date.now() - 500)
- @trigger 'pageDown'
- false
- when 33
- @trigger 'pageUp'
- when 34
- @trigger 'pageDown'
- when 35
- @trigger 'pageBottom' unless event.target.form
- when 36
- @trigger 'pageTop' unless event.target.form
- when 37
- @trigger 'left' unless event.target.value
- when 38
- @trigger 'up'
- @showTip?()
- false
- when 39
- @trigger 'right' unless event.target.value
- when 40
- @trigger 'down'
- @showTip?()
- false
- when 191
- unless event.target.form
- @trigger 'typing'
- false
- handleKeydownSuperEvent: (event) ->
- switch event.which
- when 13
- @trigger 'superEnter'
- when 37
- if @isMac
- @trigger 'superLeft'
- false
- when 38
- @trigger 'pageTop'
- false
- when 39
- if @isMac
- @trigger 'superRight'
- false
- when 40
- @trigger 'pageBottom'
- false
- when 188
- @trigger 'preferences'
- false
- handleKeydownShiftEvent: (event, _force) ->
- return @handleKeydownEvent(event, true) if not _force and event.which in [37, 38, 39, 40] and @swapArrowKeysBehavior()
- if not event.target.form and 65 <= event.which <= 90
- @trigger 'typing'
- return
- switch event.which
- when 32
- @trigger 'pageUp'
- false
- when 38
- unless getSelection()?.toString()
- @trigger 'altUp'
- false
- when 40
- unless getSelection()?.toString()
- @trigger 'altDown'
- false
- handleKeydownAltEvent: (event, _force) ->
- return @handleKeydownEvent(event, true) if not _force and event.which in [37, 38, 39, 40] and @swapArrowKeysBehavior()
- switch event.which
- when 9
- @trigger 'altRight', event
- when 37
- unless @isMac
- @trigger 'superLeft'
- false
- when 38
- @trigger 'altUp'
- false
- when 39
- unless @isMac
- @trigger 'superRight'
- false
- when 40
- @trigger 'altDown'
- false
- when 68
- @trigger 'altD'
- false
- when 70
- @trigger 'altF', event
- when 71
- @trigger 'altG'
- false
- when 79
- @trigger 'altO'
- false
- when 82
- @trigger 'altR'
- false
- when 83
- @trigger 'altS'
- false
- handleKeypressEvent: (event) ->
- if event.which is 63 and not event.target.value
- @trigger 'help'
- false
- else
- @lastKeypress = Date.now()
- buggyEvent: (event) ->
- try
- event.target
- event.ctrlKey
- event.which
- return false
- catch
- return true
|