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(button)
  22. if !buttonOptions.close? or buttonOptions.close
  23. self.remove()
  24. @$el.modal
  25. # make sure we control when the modal is hidden
  26. keyboard: false
  27. backdrop: "static"
  28. @$el.on "hidden", () => @remove()
  29. if @options.clearBackdrop
  30. $(".modal-backdrop").addClass("clear-modal-backdrop")
  31. @$el.find('input').on "keydown", (event)->
  32. code = event.keyCode || event.which
  33. if code == 13
  34. self.$el.find('.btn-primary').click()
  35. @$el.find('input').focus()
  36. remove: () ->
  37. @$el.modal("hide")
  38. Backbone.View.prototype.remove.call(this)
  39. render: () ->
  40. @setElement $(
  41. Mustache.to_html @templates.modal, @options
  42. )
  43. if @options.el?
  44. @$(".message").append @options.el
  45. $(document.body).append(@$el)
  46. }, {
  47. createModal: (options) ->
  48. new Modal(options)
  49. }
  50. return Modal