mobile.coffee 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. class app.views.Mobile extends app.View
  2. @className: '_mobile'
  3. @elements:
  4. body: 'body'
  5. content: '._container'
  6. sidebar: '._sidebar'
  7. @routes:
  8. after: 'afterRoute'
  9. constructor: ->
  10. @el = document.documentElement
  11. super
  12. init: ->
  13. FastClick.attach @body
  14. app.shortcuts.stop()
  15. $.on @body, 'click', @onClick
  16. $.on $('._home-link'), 'click', @onClickHome
  17. $.on $('._menu-link'), 'click', @onClickMenu
  18. $.on $('._search'), 'touchend', @onTapSearch
  19. app.document.sidebar.search
  20. .on 'searching', @showSidebar
  21. .on 'clear', @hideSidebar
  22. @activate()
  23. return
  24. showSidebar: =>
  25. return if @isSidebarShown()
  26. @contentTop = @body.scrollTop
  27. @content.style.display = 'none'
  28. @sidebar.style.display = 'block'
  29. if selection = @findByClass app.views.ListSelect.activeClass
  30. $.scrollTo selection, @body, 'center'
  31. else
  32. @body.scrollTop = @findByClass(app.views.ListFold.activeClass) and @sidebarTop or 0
  33. return
  34. hideSidebar: =>
  35. return unless @isSidebarShown()
  36. @sidebarTop = @body.scrollTop
  37. @sidebar.style.display = 'none'
  38. @content.style.display = 'block'
  39. @body.scrollTop = @contentTop or 0
  40. return
  41. isSidebarShown: ->
  42. @sidebar.style.display isnt 'none'
  43. onClick: (event) =>
  44. if event.target.hasAttribute 'data-pick-docs'
  45. @showSidebar()
  46. return
  47. onClickHome: =>
  48. app.shortcuts.trigger 'escape'
  49. @hideSidebar()
  50. return
  51. onClickMenu: =>
  52. if @isSidebarShown() then @hideSidebar() else @showSidebar()
  53. return
  54. onTapSearch: =>
  55. @body.scrollTop = 0
  56. afterRoute: =>
  57. @hideSidebar()
  58. return