ContextMenu.coffee 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. define [
  2. "libs/backbone"
  3. "libs/mustache"
  4. ], () ->
  5. ContextMenuEntry = Backbone.View.extend
  6. template: $("#contextMenuEntryTemplate").html()
  7. events:
  8. "click a" : "onClick"
  9. render: () ->
  10. @setElement($(Mustache.to_html(@template, @options)))
  11. return @
  12. onClick: (e) ->
  13. if @options.onClick
  14. @options.onClick()
  15. ContextMenu = Backbone.View.extend
  16. template: $("#contextMenuTemplate").html()
  17. initialize: () ->
  18. @entries = []
  19. @render()
  20. @hide()
  21. render: () ->
  22. @setElement($(@template))
  23. $(document.body).append(@$el)
  24. return @
  25. hide: () -> @$el.hide()
  26. show: (left, top) ->
  27. page = $(document.body)
  28. page.on "click.hideContextMenu", (e) =>
  29. page.off "click.hideContextMenu"
  30. @hide()
  31. @$el.css
  32. position: "absolute"
  33. "z-index": 10000
  34. top: (top || 0) + "px"
  35. left: (left || 0) + "px"
  36. @$el.show()
  37. addEntry: (options) ->
  38. entry = new ContextMenuEntry(options)
  39. @$el.append entry.render().el
  40. @entries.push entry
  41. clearEntries: () ->
  42. while @entries.length > 0
  43. @entries.pop().remove()