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
15 $.off document, 'keypress', @onKeypress15 $.off document, 'keypress', @onKeypress
16 return16 return
17 17
18 swapArrowKeysBehavior: ->
19 app.settings.get('arrowScroll')
20
18 showTip: ->21 showTip: ->
19 app.showTip('KeyNav')22 app.showTip('KeyNav')
20 @showTip = null23 @showTip = null
@@ -40,7 +43,9 @@ class app.Shortcuts · 19 unmodified lines
40 event.preventDefault() if result is false43 event.preventDefault() if result is false
41 return44 return
42 45
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
44 if not event.target.form and (48 <= event.which <= 57 or 65 <= event.which <= 90)49 if not event.target.form and (48 <= event.which <= 57 or 65 <= event.which <= 90)
45 @trigger 'typing'50 @trigger 'typing'
46 return51 return
@@ -100,7 +105,9 @@ class app.Shortcuts · 53 unmodified lines
100 @trigger 'pageBottom'105 @trigger 'pageBottom'
101 false106 false
102 107
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
104 if not event.target.form and 65 <= event.which <= 90111 if not event.target.form and 65 <= event.which <= 90
105 @trigger 'typing'112 @trigger 'typing'
106 return113 return
@@ -118,7 +125,9 @@ class app.Shortcuts · 11 unmodified lines
118 @trigger 'altDown'125 @trigger 'altDown'
119 false126 false
120 127
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
122 switch event.which131 switch event.which
123 when 9132 when 9
124 @trigger 'altRight', event133 @trigger 'altRight', event
assets/javascripts/templates/pages/settings_tmpl.coffee+4−0
@@ -24,6 +24,10 @@ app.templates.settingsPage = (settings) -> """ · 23 unmodified lines
24 <label class="_settings-label">24 <label class="_settings-label">
25 <input type="checkbox" name="smoothScroll" value="1"#{if settings.smoothScroll then ' checked' else ''}>Use smooth scrolling25 <input type="checkbox" name="smoothScroll" value="1"#{if settings.smoothScroll then ' checked' else ''}>Use smooth scrolling
26 </label>26 </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>
27 </div>31 </div>
28 </div>32 </div>
29 33
assets/javascripts/views/content/settings_page.coffee+7−0
@@ -15,6 +15,7 @@ class app.views.SettingsPage extends app.View · 14 unmodified lines
15 settings = {}15 settings = {}
16 settings.dark = app.settings.get('dark')16 settings.dark = app.settings.get('dark')
17 settings.smoothScroll = !app.settings.get('fastScroll')17 settings.smoothScroll = !app.settings.get('fastScroll')
18 settings.arrowScroll = app.settings.get('arrowScroll')
18 settings[layout] = app.settings.hasLayout(layout) for layout in LAYOUTS19 settings[layout] = app.settings.hasLayout(layout) for layout in LAYOUTS
19 settings20 settings
20 21
@@ -40,6 +41,10 @@ class app.views.SettingsPage extends app.View · 19 unmodified lines
40 app.settings.set('fastScroll', !enable)41 app.settings.set('fastScroll', !enable)
41 return42 return
42 43
44 toggle: (name, enable) ->
45 app.settings.set(name, enable)
46 return
47
43 onChange: (event) =>48 onChange: (event) =>
44 input = event.target49 input = event.target
45 switch input.name50 switch input.name
@@ -49,6 +54,8 @@ class app.views.SettingsPage extends app.View · 3 unmodified lines
49 @toggleLayout input.value, input.checked54 @toggleLayout input.value, input.checked
50 when 'smoothScroll'55 when 'smoothScroll'
51 @toggleSmoothScroll input.checked56 @toggleSmoothScroll input.checked
57 else
58 @toggle input.name, input.checked
52 return59 return
53 60
54 onRoute: (route) =>61 onRoute: (route) =>