Menu.coffee 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. class Menu
  2. constructor: (@button) ->
  3. @elem = $(".menu.template").clone().removeClass("template")
  4. @elem.appendTo("body")
  5. @items = []
  6. show: ->
  7. if window.visible_menu and window.visible_menu.button[0] == @button[0] # Same menu visible then hide it
  8. window.visible_menu.hide()
  9. @hide()
  10. else
  11. button_pos = @button.offset()
  12. @elem.css({"top": button_pos.top+@button.outerHeight(), "left": button_pos.left + @button.outerWidth() - @elem.outerWidth()})
  13. @button.addClass("menu-active")
  14. @elem.addClass("visible")
  15. if window.visible_menu then window.visible_menu.hide()
  16. window.visible_menu = @
  17. hide: ->
  18. @elem.removeClass("visible")
  19. @button.removeClass("menu-active")
  20. window.visible_menu = null
  21. addItem: (title, cb) ->
  22. item = $(".menu-item.template", @elem).clone().removeClass("template")
  23. item.html(title)
  24. item.on "click", =>
  25. if not cb(item)
  26. @hide()
  27. return false
  28. item.appendTo(@elem)
  29. @items.push item
  30. return item
  31. log: (args...) ->
  32. console.log "[Menu]", args...
  33. window.Menu = Menu
  34. # Hide menu on outside click
  35. $("body").on "click", (e) ->
  36. if window.visible_menu and e.target != window.visible_menu.button[0] and $(e.target).parent()[0] != window.visible_menu.elem[0]
  37. window.visible_menu.hide()