settings.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. class app.views.Settings extends app.View
  2. SIDEBAR_HIDDEN_LAYOUT = '_sidebar-hidden'
  3. @el: '._settings'
  4. @elements:
  5. sidebar: '._sidebar'
  6. saveBtn: 'button[type="submit"]'
  7. backBtn: 'button[data-back]'
  8. @events:
  9. import: 'onImport'
  10. change: 'onChange'
  11. submit: 'onSubmit'
  12. click: 'onClick'
  13. @shortcuts:
  14. enter: 'onEnter'
  15. init: ->
  16. @addSubview @docPicker = new app.views.DocPicker
  17. return
  18. activate: ->
  19. if super
  20. @render()
  21. document.body.classList.remove(SIDEBAR_HIDDEN_LAYOUT)
  22. return
  23. deactivate: ->
  24. if super
  25. @resetClass()
  26. @docPicker.detach()
  27. document.body.classList.add(SIDEBAR_HIDDEN_LAYOUT) if app.settings.hasLayout(SIDEBAR_HIDDEN_LAYOUT)
  28. return
  29. render: ->
  30. @docPicker.appendTo @sidebar
  31. @refreshElements()
  32. @addClass '_in'
  33. return
  34. save: (options = {}) ->
  35. unless @saving
  36. @saving = true
  37. if options.import
  38. docs = app.settings.getDocs()
  39. else
  40. docs = @docPicker.getSelectedDocs()
  41. app.settings.setDocs(docs)
  42. @saveBtn.textContent = 'Saving\u2026'
  43. disabledDocs = new app.collections.Docs(doc for doc in app.docs.all() when docs.indexOf(doc.slug) is -1)
  44. disabledDocs.uninstall ->
  45. app.db.migrate()
  46. app.reload()
  47. return
  48. onChange: =>
  49. @addClass('_dirty')
  50. return
  51. onEnter: =>
  52. @save()
  53. return
  54. onSubmit: (event) =>
  55. event.preventDefault()
  56. @save()
  57. return
  58. onImport: =>
  59. @addClass('_dirty')
  60. @save(import: true)
  61. return
  62. onClick: (event) =>
  63. return if event.which isnt 1
  64. if event.target is @backBtn
  65. $.stopEvent(event)
  66. app.router.show '/'
  67. return