Modal.coffee 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. define [
  2. "libs/backbone"
  3. "libs/mustache"
  4. ], () ->
  5. Modal = Backbone.View.extend {
  6. templates:
  7. modal: $("#genericModalTemplate").html()
  8. button: $("#genericModalButtonTemplate").html()
  9. initialize: () ->
  10. @render()
  11. @options.buttons ||= []
  12. self = @
  13. for buttonOptions in @options.buttons
  14. do (buttonOptions) ->
  15. button = $(Mustache.to_html self.templates.button, buttonOptions)
  16. self.$(".modal-footer").prepend button
  17. button.on "click", (e) ->
  18. e.preventDefault()
  19. if buttonOptions.callback?
  20. buttonOptions.callback(button)
  21. if !buttonOptions.close? or buttonOptions.close
  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