| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- class app.views.SettingsPage extends app.View
- @className: '_static'
- @events:
- click: 'onClick'
- change: 'onChange'
- render: ->
- @html @tmpl('settingsPage', @currentSettings())
- return
- currentSettings: ->
- settings = {}
- settings.dark = app.settings.get('dark')
- settings.smoothScroll = !app.settings.get('fastScroll')
- settings.arrowScroll = app.settings.get('arrowScroll')
- settings.autoInstall = app.settings.get('autoInstall')
- settings.analyticsConsent = app.settings.get('analyticsConsent')
- settings[layout] = app.settings.hasLayout(layout) for layout in app.settings.LAYOUTS
- settings
- getTitle: ->
- 'Preferences'
- toggleDark: (enable) ->
- app.settings.set('dark', !!enable)
- return
- toggleLayout: (layout, enable) ->
- app.settings.setLayout(layout, enable)
- return
- toggleSmoothScroll: (enable) ->
- app.settings.set('fastScroll', !enable)
- return
- toggleAnalyticsConsent: (enable) ->
- app.settings.set('analyticsConsent', if enable then '1' else '0')
- resetAnalytics() unless enable
- return
- toggle: (name, enable) ->
- app.settings.set(name, enable)
- return
- export: ->
- data = new Blob([JSON.stringify(app.settings.export())], type: 'application/json')
- link = document.createElement('a')
- link.href = URL.createObjectURL(data)
- link.download = 'devdocs.json'
- link.style.display = 'none'
- document.body.appendChild(link)
- link.click()
- document.body.removeChild(link)
- return
- import: (file, input) ->
- unless file and file.type is 'application/json'
- new app.views.Notif 'ImportInvalid', autoHide: false
- return
- reader = new FileReader()
- reader.onloadend = ->
- data = try JSON.parse(reader.result)
- unless data and data.constructor is Object
- new app.views.Notif 'ImportInvalid', autoHide: false
- return
- app.settings.import(data)
- $.trigger input.form, 'import'
- return
- reader.readAsText(file)
- return
- onChange: (event) =>
- input = event.target
- switch input.name
- when 'dark'
- @toggleDark input.checked
- when 'layout'
- @toggleLayout input.value, input.checked
- when 'smoothScroll'
- @toggleSmoothScroll input.checked
- when 'import'
- @import input.files[0], input
- when 'analyticsConsent'
- @toggleAnalyticsConsent input.checked
- else
- @toggle input.name, input.checked
- return
- onClick: (event) =>
- target = $.eventTarget(event)
- switch target.getAttribute('data-action')
- when 'export'
- $.stopEvent(event)
- @export()
- return
- onRoute: (context) ->
- @render()
- return
|