| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- 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
|