Modal.coffee 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. define [
  2. "libs/backbone"
  3. "libs/mustache"
  4. "libs/bootstrap/bootstrap2full"
  5. ], () ->
  6. Modal = Backbone.View.extend {
  7. templates:
  8. modal: $("#genericModalTemplate").html()
  9. button: $("#genericModalButtonTemplate").html()
  10. initialize: () ->
  11. @render()
  12. @options.buttons ||= []
  13. self = @
  14. for buttonOptions in @options.buttons
  15. do (buttonOptions) ->
  16. button = $(Mustache.to_html self.templates.button, buttonOptions)
  17. self.$(".modal-footer").prepend button
  18. button.on "click", (e) ->
  19. e.preventDefault()
  20. if buttonOptions.callback?
  21. buttonOptions.callback()
  22. self.remove()
  23. @$el.modal
  24. # make sure we control when the modal is hidden
  25. keyboard: false
  26. backdrop: "static"
  27. @$el.on "hidden", () => @remove()
  28. if @options.clearBackdrop
  29. $(".modal-backdrop").addClass("clear-modal-backdrop")
  30. @$el.find('input').on "keydown", (event)->
  31. code = event.keyCode || event.which
  32. if code == 13
  33. self.$el.find('.btn-primary').click()
  34. @$el.find('input').focus()
  35. remove: () ->
  36. @$el.modal("hide")
  37. Backbone.View.prototype.remove.call(this)
  38. render: () ->
  39. @setElement $(
  40. Mustache.to_html @templates.modal, @options
  41. )
  42. if @options.el?
  43. @$(".message").append @options.el
  44. $(document.body).append(@$el)
  45. }, {
  46. createModal: (options) ->
  47. new Modal(options)
  48. }
  49. return Modal