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