settings_page.coffee 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. class app.views.SettingsPage extends app.View
  2. LAYOUTS = ['_max-width', '_sidebar-hidden']
  3. SIDEBAR_HIDDEN_LAYOUT = '_sidebar-hidden'
  4. @className: '_static'
  5. @events:
  6. change: 'onChange'
  7. render: ->
  8. @html @tmpl('settingsPage', @currentSettings())
  9. return
  10. currentSettings: ->
  11. settings = {}
  12. settings.dark = app.settings.get('dark')
  13. settings.smoothScroll = !app.settings.get('fastScroll')
  14. settings.arrowScroll = app.settings.get('arrowScroll')
  15. settings[layout] = app.settings.hasLayout(layout) for layout in LAYOUTS
  16. settings
  17. getTitle: ->
  18. 'Preferences'
  19. toggleDark: (enable) ->
  20. css = $('link[rel="stylesheet"][data-alt]')
  21. alt = css.getAttribute('data-alt')
  22. css.setAttribute('data-alt', css.getAttribute('href'))
  23. css.setAttribute('href', alt)
  24. app.settings.set('dark', !!enable)
  25. app.appCache?.updateInBackground()
  26. return
  27. toggleLayout: (layout, enable) ->
  28. app.el.classList[if enable then 'add' else 'remove'](layout) unless layout is SIDEBAR_HIDDEN_LAYOUT
  29. app.settings.setLayout(layout, enable)
  30. app.appCache?.updateInBackground()
  31. return
  32. toggleSmoothScroll: (enable) ->
  33. app.settings.set('fastScroll', !enable)
  34. return
  35. toggle: (name, enable) ->
  36. app.settings.set(name, enable)
  37. return
  38. onChange: (event) =>
  39. input = event.target
  40. switch input.name
  41. when 'dark'
  42. @toggleDark input.checked
  43. when 'layout'
  44. @toggleLayout input.value, input.checked
  45. when 'smoothScroll'
  46. @toggleSmoothScroll input.checked
  47. else
  48. @toggle input.name, input.checked
  49. return
  50. onRoute: (route) =>
  51. if app.isSingleDoc()
  52. window.location = "/#/#{route.path}"
  53. else
  54. @render()
  55. return