main-nav.coffee 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. Spine = require('spine/core')
  2. $ = Spine.$
  3. templates = require('duality/templates')
  4. session = require('session')
  5. class MainNav extends Spine.Controller
  6. className: 'main navbar'
  7. elements:
  8. 'form.login': 'loginForm'
  9. 'input[name=username]': 'formUsername'
  10. 'input[name=password]': 'formPassword'
  11. 'li a': 'links'
  12. '.user-greeting': 'userGreeting'
  13. '.offline': 'offline'
  14. events:
  15. 'submit form.login': 'login'
  16. 'click .logout-button': 'logout'
  17. constructor: ->
  18. super
  19. @granted = false
  20. @render()
  21. @setup()
  22. render: =>
  23. @html templates.render('main-nav.html', {}, {})
  24. setup: =>
  25. @links.on 'click', (e) =>
  26. $link = $(e.currentTarget)
  27. @selectLink($link)
  28. selectFromClassName: (className) =>
  29. if className
  30. fragment = className.split(' ')[0]
  31. $link = @el.find("li.#{fragment} a")
  32. @selectLink($link)
  33. selectLink: ($link) =>
  34. @trigger 'beforeChange'
  35. if $link and not $link.hasClass('active')
  36. @links.removeClass('active')
  37. $link.addClass('active')
  38. @trigger 'change'
  39. showLogin: =>
  40. @resetLoginForm()
  41. @el.addClass('show-login')
  42. hideLogin: =>
  43. @el.removeClass('show-login')
  44. @resetLoginForm(false)
  45. login: (e) =>
  46. e.preventDefault()
  47. username = $.trim @formUsername.val()
  48. password = $.trim @formPassword.val()
  49. session.login username, password, (err, resp) =>
  50. if err
  51. alert "Oops! #{err}"
  52. else
  53. if 'manager' in resp.roles
  54. @granted = true
  55. else
  56. alert "User #{username} does not have permission"
  57. @resetLoginForm()
  58. logout: =>
  59. session.logout (err, resp) =>
  60. if err
  61. alert "Error signing out: #{err}"
  62. else
  63. @granted = false
  64. @resetLoginForm()
  65. resetLoginForm: (focus = true) =>
  66. @formUsername.val('')
  67. @formPassword.val('')
  68. @formUsername.focus() if focus
  69. greetUser: (name) =>
  70. show = ->
  71. @userGreeting
  72. .html("Welcome back <strong>#{name}</strong>")
  73. .addClass('show')
  74. hide = ->
  75. @userGreeting.removeClass('show')
  76. @delay show, 200
  77. @delay hide, 5000
  78. module.exports = MainNav