|
|
|
class app.views.Document extends app.View
|
|
|
|
MAX_WIDTH_CLASS = '_max-width'
|
|
|
|
HIDE_SIDEBAR_CLASS = '_sidebar-hidden'
|
|
|
|
|
|
|
|
@el: document
|
|
|
|
|
|
|
|
@events:
|
|
|
|
visibilitychange: 'onVisibilityChange'
|
|
|
|
|
|
|
|
@shortcuts:
|
|
|
|
help: 'onHelp'
|
|
|
|
escape: 'onEscape'
|
|
|
|
superLeft: 'onBack'
|
|
|
|
superRight: 'onForward'
|
|
|
|
|
|
|
|
init: ->
|
|
|
|
@addSubview @nav = new app.views.Nav,
|
|
|
|
@addSubview @sidebar = new app.views.Sidebar
|
|
|
|
@addSubview @resizer = new app.views.Resizer if app.views.Resizer.isSupported()
|
|
|
|
@addSubview @content = new app.views.Content
|
|
|
|
@addSubview @path = new app.views.Path unless app.isSingleDoc() or app.isMobile()
|
|
|
|
|
|
|
|
@sidebar.search
|
|
|
|
.on 'searching', @onSearching
|
|
|
|
.on 'clear', @onSearchClear
|
|
|
|
|
|
|
|
$.on document.body, 'click', @onClick
|
|
|
|
|
|
|
|
@activate()
|
|
|
|
return
|
|
|
|
|
|
|
|
toggleLight: ->
|
|
|
|
css = $('link[rel="stylesheet"][data-alt]')
|
|
|
|
alt = css.getAttribute('data-alt')
|
|
|
|
css.setAttribute('data-alt', css.getAttribute('href'))
|
|
|
|
css.setAttribute('href', alt)
|
|
|
|
app.settings.setDark(alt.indexOf('dark') > 0)
|
|
|
|
app.appCache?.updateInBackground()
|
|
|
|
return
|
|
|
|
|
|
|
|
toggleLayout: ->
|
|
|
|
wantsMaxWidth = !app.el.classList.contains(MAX_WIDTH_CLASS)
|
|
|
|
app.el.classList[if wantsMaxWidth then 'add' else 'remove'](MAX_WIDTH_CLASS)
|
|
|
|
app.settings.setLayout(MAX_WIDTH_CLASS, wantsMaxWidth)
|
|
|
|
app.appCache?.updateInBackground()
|
|
|
|
return
|
|
|
|
|
|
|
|
showSidebar: (options = {}) ->
|
|
|
|
@toggleSidebar(options, true)
|
|
|
|
return
|
|
|
|
|
|
|
|
hideSidebar: (options = {}) ->
|
|
|
|
@toggleSidebar(options, false)
|
|
|
|
return
|
|
|
|
|
|
|
|
toggleSidebar: (options = {}, shouldShow) ->
|
|
|
|
shouldShow ?= if options.save then !@hasSidebar() else app.el.classList.contains(HIDE_SIDEBAR_CLASS)
|
|
|
|
app.el.classList[if shouldShow then 'remove' else 'add'](HIDE_SIDEBAR_CLASS)
|
|
|
|
if options.save
|
|
|
|
app.settings.setLayout(HIDE_SIDEBAR_CLASS, !shouldShow)
|
|
|
|
app.appCache?.updateInBackground()
|
|
|
|
return
|
|
|
|
|
|
|
|
hasSidebar: ->
|
|
|
|
!app.settings.hasLayout(HIDE_SIDEBAR_CLASS)
|
|
|
|
|
|
|
|
onSearching: =>
|
|
|
|
unless @hasSidebar()
|
|
|
|
@showSidebar()
|
|
|
|
return
|
|
|
|
|
|
|
|
onSearchClear: =>
|
|
|
|
unless @hasSidebar()
|
|
|
|
@hideSidebar()
|
|
|
|
return
|
|
|
|
|
|
|
|
setTitle: (title) ->
|
|
|
|
@el.title = if title then "DevDocs - #{title}" else 'DevDocs API Documentation'
|
|
|
|
|
|
|
|
onVisibilityChange: =>
|
|
|
|
return unless @el.visibilityState is 'visible'
|
|
|
|
@delay ->
|
|
|
|
location.reload() if app.isMobile() isnt app.views.Mobile.detect()
|
|
|
|
return
|
|
|
|
, 300
|
|
|
|
return
|
|
|
|
|
|
|
|
onHelp: ->
|
|
|
|
app.router.show '/help#shortcuts'
|
|
|
|
|
|
|
|
onEscape: ->
|
|
|
|
path = if !app.isSingleDoc() or location.pathname is app.doc.fullPath()
|
|
|
|
'/'
|
|
|
|
else
|
|
|
|
app.doc.fullPath()
|
|
|
|
|
|
|
|
app.router.show(path)
|
|
|
|
|
|
|
|
onBack: ->
|
|
|
|
history.back()
|
|
|
|
|
|
|
|
onForward: ->
|
|
|
|
history.forward()
|
|
|
|
|
|
|
|
onClick: (event) ->
|
|
|
|
return unless event.target.hasAttribute('data-behavior')
|
|
|
|
$.stopEvent(event)
|
|
|
|
switch event.target.getAttribute('data-behavior')
|
|
|
|
when 'back' then history.back()
|
|
|
|
when 'reload' then window.location.reload()
|
|
|
|
when 'reboot' then window.location = '/'
|
|
|
|
when 'hard-reload' then app.reload()
|
|
|
|
when 'reset' then app.reset() if confirm('Are you sure you want to reset DevDocs?')
|
|
|
|
return
|