History

Add setting for swapping arrow keys behavior

Closes #296.

Thibaut Courouble committed 9 years ago

Commit 4984f001 parent 71a3c313 files · +23 −3Browse files

Unified · Split

3 files
  1. assets/javascripts/app/shortcuts.coffee +12 −3
  2. assets/javascripts/templates/pages/settings_tmpl.coffee +4 −0
  3. assets/javascripts/views/content/settings_page.coffee +7 −0
assets/javascripts/app/shortcuts.coffee+12−3
@@ -15,6 +15,9 @@ class app.Shortcuts · 14 unmodified lines
1515 $.off document, 'keypress', @onKeypress
1616 return
1717
18+ swapArrowKeysBehavior: ->
19+ app.settings.get('arrowScroll')
20+
1821 showTip: ->
1922 app.showTip('KeyNav')
2023 @showTip = null
@@ -40,7 +43,9 @@ class app.Shortcuts · 19 unmodified lines
4043 event.preventDefault() if result is false
4144 return
4245
43− handleKeydownEvent: (event) ->
46+ handleKeydownEvent: (event, _force) ->
47+ return @handleKeydownAltEvent(event, true) if not _force and event.which in [37, 38, 39, 40] and @swapArrowKeysBehavior()
48+
4449 if not event.target.form and (48 <= event.which <= 57 or 65 <= event.which <= 90)
4550 @trigger 'typing'
4651 return
@@ -100,7 +105,9 @@ class app.Shortcuts · 53 unmodified lines
100105 @trigger 'pageBottom'
101106 false
102107
103− handleKeydownShiftEvent: (event) ->
108+ handleKeydownShiftEvent: (event, _force) ->
109+ return @handleKeydownEvent(event, true) if not _force and event.which in [37, 38, 39, 40] and @swapArrowKeysBehavior()
110+
104111 if not event.target.form and 65 <= event.which <= 90
105112 @trigger 'typing'
106113 return
@@ -118,7 +125,9 @@ class app.Shortcuts · 11 unmodified lines
118125 @trigger 'altDown'
119126 false
120127
121− handleKeydownAltEvent: (event) ->
128+ handleKeydownAltEvent: (event, _force) ->
129+ return @handleKeydownEvent(event, true) if not _force and event.which in [37, 38, 39, 40] and @swapArrowKeysBehavior()
130+
122131 switch event.which
123132 when 9
124133 @trigger 'altRight', event
assets/javascripts/templates/pages/settings_tmpl.coffee+4−0
@@ -24,6 +24,10 @@ app.templates.settingsPage = (settings) -> """ · 23 unmodified lines
2424 <label class="_settings-label">
2525 <input type="checkbox" name="smoothScroll" value="1"#{if settings.smoothScroll then ' checked' else ''}>Use smooth scrolling
2626 </label>
27+ <label class="_settings-label">
28+ <input type="checkbox" name="arrowScroll" value="1"#{if settings.arrowScroll then ' checked' else ''}>Use arrow keys to scroll the main content area
29+ <small>With this checked, use <code class="_label">alt</code> + <code class="_label">&uarr;</code><code class="_label">&darr;</code><code class="_label">&larr;</code><code class="_label">&rarr;</code> to navigate the sidebar.</small>
30+ </label>
2731 </div>
2832 </div>
2933
assets/javascripts/views/content/settings_page.coffee+7−0
@@ -15,6 +15,7 @@ class app.views.SettingsPage extends app.View · 14 unmodified lines
1515 settings = {}
1616 settings.dark = app.settings.get('dark')
1717 settings.smoothScroll = !app.settings.get('fastScroll')
18+ settings.arrowScroll = app.settings.get('arrowScroll')
1819 settings[layout] = app.settings.hasLayout(layout) for layout in LAYOUTS
1920 settings
2021
@@ -40,6 +41,10 @@ class app.views.SettingsPage extends app.View · 19 unmodified lines
4041 app.settings.set('fastScroll', !enable)
4142 return
4243
44+ toggle: (name, enable) ->
45+ app.settings.set(name, enable)
46+ return
47+
4348 onChange: (event) =>
4449 input = event.target
4550 switch input.name
@@ -49,6 +54,8 @@ class app.views.SettingsPage extends app.View · 3 unmodified lines
4954 @toggleLayout input.value, input.checked
5055 when 'smoothScroll'
5156 @toggleSmoothScroll input.checked
57+ else
58+ @toggle input.name, input.checked
5259 return
5360
5461 onRoute: (route) =>