Closes #296.
Unified · Split
| @@ -15,6 +15,9 @@ class app.Shortcuts · 14 unmodified lines | |||
| 15 | $.off document, 'keypress', @onKeypress | 15 | $.off document, 'keypress', @onKeypress |
| 16 | return | 16 | 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 = null | 23 | @showTip = null |
| @@ -40,7 +43,9 @@ class app.Shortcuts · 19 unmodified lines | |||
| 40 | event.preventDefault() if result is false | 43 | event.preventDefault() if result is false |
| 41 | return | 44 | 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 | return | 51 | return |
| @@ -100,7 +105,9 @@ class app.Shortcuts · 53 unmodified lines | |||
| 100 | @trigger 'pageBottom' | 105 | @trigger 'pageBottom' |
| 101 | false | 106 | 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 <= 90 | 111 | if not event.target.form and 65 <= event.which <= 90 |
| 105 | @trigger 'typing' | 112 | @trigger 'typing' |
| 106 | return | 113 | return |
| @@ -118,7 +125,9 @@ class app.Shortcuts · 11 unmodified lines | |||
| 118 | @trigger 'altDown' | 125 | @trigger 'altDown' |
| 119 | false | 126 | 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.which | 131 | switch event.which |
| 123 | when 9 | 132 | when 9 |
| 124 | @trigger 'altRight', event | 133 | @trigger 'altRight', event |
| @@ -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 scrolling | 25 | <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">↑</code><code class="_label">↓</code><code class="_label">←</code><code class="_label">→</code> to navigate the sidebar.</small> | ||
| 30 | </label> | ||
| 27 | </div> | 31 | </div> |
| 28 | </div> | 32 | </div> |
| 29 | 33 | ||
| @@ -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 LAYOUTS | 19 | settings[layout] = app.settings.hasLayout(layout) for layout in LAYOUTS |
| 19 | settings | 20 | 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 | return | 42 | 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.target | 49 | input = event.target |
| 45 | switch input.name | 50 | switch input.name |
| @@ -49,6 +54,8 @@ class app.views.SettingsPage extends app.View · 3 unmodified lines | |||
| 49 | @toggleLayout input.value, input.checked | 54 | @toggleLayout input.value, input.checked |
| 50 | when 'smoothScroll' | 55 | when 'smoothScroll' |
| 51 | @toggleSmoothScroll input.checked | 56 | @toggleSmoothScroll input.checked |
| 57 | else | ||
| 58 | @toggle input.name, input.checked | ||
| 52 | return | 59 | return |
| 53 | 60 | ||
| 54 | onRoute: (route) => | 61 | onRoute: (route) => |