Browse Source

Refactoring of modal api.

Martin Edenhofer 10 years ago
parent
commit
c043b8bcf8

+ 47 - 81
app/assets/javascripts/app/controllers/_application_controller.js.coffee

@@ -441,125 +441,91 @@ class App.ControllerModal extends App.Controller
   className: 'modal fade'
 
   events:
-    'submit form':   'submit'
-    'click .js-submit': 'submit'
-    'click .js-cancel': 'modalHide'
-    'click .js-close':  'modalHide'
+    'submit form':      'onSubmit'
+    'click .js-submit': 'onSubmit'
+    'click .js-cancel': 'hide'
+    'click .js-close':  'hide'
 
-  constructor: (options) ->
+  constructor: (options = {}) ->
+    defaults =
+      backdrop: true
+      keyboard: true
+      close:    true
+      title:    '?'
 
-    # do not use @el, because it's inserted by js
-    if options
-      delete options.el
+    options = _.extend( options, defaults )
 
-      # callbacks
-#      @callback = {}
-#      if options.success
-#        @callback.success = options.success
-#      if options.error
-#        @callback.error = options.error
+    # do not use @el, because it's inserted by js
+    delete options.el
 
     super(options)
-    if options.show
-      @render()
 
-  render: ->
+    @show()
+
+  show: (content) ->
+    console.log('M', @message)
+    if @button is true
+      @button = 'Submit'
     @html App.view('modal')(
-      title:   @title
+      head:    @head
       message: @message
       detail:  @detail
       close:   @close
+      cancel:  @cancel
+      button:  @button
     )
-    @modalShow(
-      backdrop: @backdrop
-      keyboard: @keyboard
-    )
-
-  modalShow: (params) ->
-    defaults = {
-      backdrop: true
-      keyboard: true
-      show: true
-    }
-    data = $.extend({}, defaults, params)
-    @el.modal(data)
-
-    @el.bind('hidden.bs.modal', =>
-
-      # navigate back to home page
-#      if @pageData && @pageData.home
-#        @navigate @pageData.home
-
-      # navigate back
-      if params && params.navigateBack
-        window.history.back()
-
-      # remove modal from dom
-      $('.modal').remove();
-    )
+    if content
+      @el.find('.modal-body').html content
+    @el.modal('show')
 
   modalHide: (e) ->
     if e
       e.preventDefault()
     @el.modal('hide')
 
-  submit: (e) ->
+  hide: (e) ->
+    if e
+      e.preventDefault()
+    @el.modal('hide')
+
+  onShow: ->
+    console.log('no nothing')
+    # do nothing
+
+  onHide: ->
+    console.log('no nothing')
+    # do nothing
+
+  onSubmit: (e) ->
     e.preventDefault()
-    @log 'error', 'You need to implement your own "submit" method!'
+    @log 'error', 'You need to implement your own "onSubmit" method!'
 
 class App.ErrorModal extends App.ControllerModal
   constructor: ->
     super
-    @render()
-
-  render: ->
-    @html App.view('modal')(
-      title:   'Error',
-      message: @message
-      detail:  @detail
-      close:   @close
-    )
-    @modalShow(
-      backdrop: false,
-      keyboard: false,
-    )
+    @show()
 
 class App.SessionMessage extends App.ControllerModal
   constructor: ->
     super
-    @render()
 
-  render: ->
-    @html App.view('modal')(
-      title:   @title || '?'
-      message: @message || '?'
-      detail:  @detail
-      close:   @close
-      button:  @button
-    )
-    @modalShow(
-      backdrop: @backdrop,
-      keyboard: @keyboard,
-    )
+    console.log('SM', @)
 
-    # reload page on modal hidden
-    if @forceReload
-      @el.on('hidden', =>
-        @reload()
-      )
+    @show()
 
-  modalHide: (e) =>
+  # reload page on modal hidden
+  onHide: (e) =>
     if @forceReload
       @reload(e)
-    @el.modal('hide')
 
-  submit: (e) =>
+  onSubmit: (e) =>
     if @forceReload
       @reload(e)
 
   reload: (e) ->
     if e
       e.preventDefault()
+    $('#app').hide().attr('style', 'display: none!important')
     if window.location.reload
       window.location.reload()
       return true

+ 6 - 0
app/assets/javascripts/app/controllers/_application_controller_form.js.coffee

@@ -19,6 +19,9 @@ class App.ControllerForm extends App.Controller
       @form.find('textarea').trigger('change')
       @form.find('select').trigger('change')
 
+    @finishForm = true
+    @form
+
   html: =>
     @form.html()
 
@@ -1594,6 +1597,9 @@ class App.ControllerForm extends App.Controller
     else if form.parents('form')[0]
       form = $( form.parents('form')[0] )
 
+    # use current content as form if form isn't already finished
+    else if !@finishForm
+      from = form
     else
       App.Log.error 'ControllerForm', 'no form found!', form
 

+ 28 - 33
app/assets/javascripts/app/controllers/_application_controller_generic.js.coffee

@@ -1,21 +1,22 @@
 class App.ControllerGenericNew extends App.ControllerModal
   constructor: (params) ->
     super
-    @render()
 
-  render: ->
+    @head  = App.i18n.translateContent( 'New' ) + ': ' + App.i18n.translateContent( @pageData.object )
+    @cancel = true
+    @button = true
 
-    @html App.view('generic/admin/new')( head: @pageData.object )
-    new App.ControllerForm(
+    controller = new App.ControllerForm(
       el:         @el.find('#object_new')
       model:      App[ @genericObject ]
       params:     @item
       screen:     @screen || 'edit'
       autofocus:  true
     )
-    @modalShow()
 
-  submit: (e) ->
+    @show(controller.form)
+
+  onSubmit: (e) ->
     e.preventDefault()
     params = @formParam( e.target )
 
@@ -39,32 +40,33 @@ class App.ControllerGenericNew extends App.ControllerModal
         if ui.callback
           item = App[ ui.genericObject ].fullLocal(@id)
           ui.callback( item )
-        ui.modalHide()
+        ui.hide()
 
       fail: ->
         ui.log 'errors'
-        ui.modalHide()
+        ui.hide()
     )
 
 class App.ControllerGenericEdit extends App.ControllerModal
   constructor: (params) ->
     super
     @item = App[ @genericObject ].find( params.id )
-    @render()
 
-  render: ->
+    @head  = App.i18n.translateContent( 'Edit' ) + ': ' + App.i18n.translateContent( @pageData.object )
+    @cancel = true
+    @button = true
 
-    @html App.view('generic/admin/edit')( head: @pageData.object )
-    new App.ControllerForm(
-      el:         @el.find('#object_edit')
+    controller = new App.ControllerForm(
+      el:         @el.find('#object_new')
       model:      App[ @genericObject ]
       params:     @item
       screen:     @screen || 'edit'
       autofocus:  true
     )
-    @modalShow()
 
-  submit: (e) ->
+    @show(controller.form)
+
+  onSubmit: (e) ->
     e.preventDefault()
     params = @formParam(e.target)
     @item.load(params)
@@ -86,11 +88,11 @@ class App.ControllerGenericEdit extends App.ControllerModal
         if ui.callback
           item = App[ ui.genericObject ].fullLocal(@id)
           ui.callback( item )
-        ui.modalHide()
+        ui.hide()
 
       fail: =>
         ui.log 'errors'
-        ui.modalHide()
+        ui.hide()
     )
 
 class App.ControllerGenericIndex extends App.Controller
@@ -186,22 +188,15 @@ class App.ControllerGenericIndex extends App.Controller
 class App.ControllerGenericDestroyConfirm extends App.ControllerModal
   constructor: ->
     super
-    @render()
-
-  render: ->
-    @html App.view('modal')(
-      title:   'Confirm'
-      message: 'Sure to delete this object?'
-      cancel:  true
-      button:  'Yes'
-    )
-    @modalShow(
-      backdrop: true
-      keyboard: true
-    )
+    @head    = 'Confirm'
+    @cancel  = true
+    @button  = 'Yes'
+    @message = 'Sure to delete this object?'
+    @show(@message)
 
-  submit: (e) =>
-    @modalHide()
+  onSubmit: (e) ->
+    e.preventDefault()
+    @hide()
     @item.destroy()
 
 class App.ControllerDrox extends App.Controller
@@ -398,7 +393,7 @@ class App.GenericHistory extends App.ControllerModal
       @historyListCache
     )
 
-    @modalShow()
+    @hide()
 
     # enable user popups
     @userPopups()

+ 35 - 62
app/assets/javascripts/app/controllers/_channel/email.js.coffee

@@ -73,31 +73,24 @@ class App.ChannelEmailFilter extends App.Controller
 class App.ChannelEmailFilterEdit extends App.ControllerModal
   constructor: ->
     super
-    @render(@object)
-
-  render: (data = {}) ->
     if @object
-      @html App.view('generic/admin/edit')(
-        head: 'Postmaster Filter'
-      )
       @form = new App.ControllerForm(
-        el:        @el.find('#object_edit'),
         model:     App.PostmasterFilter,
         params:    @object,
         autofocus: true,
       )
     else
-      @html App.view('generic/admin/new')(
-        head: 'Postmaster Filter'
-      )
       @form = new App.ControllerForm(
-        el:        @el.find('#object_new'),
         model:     App.PostmasterFilter,
         autofocus: true,
       )
-    @modalShow()
+    @head   = 'Postmaster Filter'
+    @button = true
+    @close  = true
+    @cancel = true
+    @show( @form.form )
 
-  submit: (e) =>
+  onSubmit: (e) =>
     e.preventDefault()
 
     # get params
@@ -122,9 +115,9 @@ class App.ChannelEmailFilterEdit extends App.ControllerModal
     # save object
     object.save(
       done: =>
-        @modalHide()
+        @hide()
       fail: =>
-        @modalHide()
+        @hide()
     )
 
 
@@ -165,31 +158,24 @@ class App.ChannelEmailAddress extends App.Controller
 class App.ChannelEmailAddressEdit extends App.ControllerModal
   constructor: ->
     super
-    @render(@object)
-
-  render: (data = {}) ->
     if @object
-      @html App.view('generic/admin/edit')(
-        head: 'Email-Address'
-      )
       @form = new App.ControllerForm(
-        el:        @el.find('#object_edit')
         model:     App.EmailAddress
         params:    @object
         autofocus: true
       )
     else
-      @html App.view('generic/admin/new')(
-        head: 'Email-Address'
-      )
       @form = new App.ControllerForm(
-        el:        @el.find('#object_new'),
         model:     App.EmailAddress,
         autofocus: true,
       )
-    @modalShow()
+    @head   = 'Email-Address'
+    @button = true
+    @close  = true
+    @cancel = true
+    @show( @form.form )
 
-  submit: (e) =>
+  onSubmit: (e) =>
     e.preventDefault()
 
     # get params
@@ -213,9 +199,9 @@ class App.ChannelEmailAddressEdit extends App.ControllerModal
     # save object
     object.save(
       done: =>
-        @modalHide()
+        @hide()
       fail: =>
-        @modalHide()
+        @hide()
     )
 
 class App.ChannelEmailSignature extends App.Controller
@@ -253,31 +239,24 @@ class App.ChannelEmailSignature extends App.Controller
 class App.ChannelEmailSignatureEdit extends App.ControllerModal
   constructor: ->
     super
-    @render(@object)
-
-  render: (data = {}) ->
     if @object
-      @html App.view('generic/admin/edit')(
-        head: 'Signature'
-      )
       @form = new App.ControllerForm(
-        el:        @el.find('#object_edit')
         model:     App.Signature
         params:    @object
         autofocus: true
       )
     else
-      @html App.view('generic/admin/new')(
-        head: 'Signature'
-      )
       @form = new App.ControllerForm(
-        el:        @el.find('#object_new')
         model:     App.Signature
         autofocus: true
       )
-    @modalShow()
+    @head   = 'Signature'
+    @button = true
+    @close  = true
+    @cancel = true
+    @show( @form.form )
 
-  submit: (e) =>
+  onSubmit: (e) =>
     e.preventDefault()
 
     # get params
@@ -301,9 +280,9 @@ class App.ChannelEmailSignatureEdit extends App.ControllerModal
     # save object
     object.save(
       done: =>
-        @modalHide()
+        @hide()
       fail: =>
-        @modalHide()
+        @hide()
     )
 
 class App.ChannelEmailInbound extends App.Controller
@@ -342,30 +321,24 @@ class App.ChannelEmailInbound extends App.Controller
 class App.ChannelEmailInboundEdit extends App.ControllerModal
   constructor: ->
     super
-    @render(@object)
-
-  render: (data = {}) ->
     if @object
-      @html App.view('generic/admin/edit')(
-        head: 'Email Channel'
-      )
       @form = new App.ControllerForm(
-        el: @el.find('#object_edit')
-        model: App.Channel
+        model:     App.Channel
+        params:    @object
         autofocus: true
       )
     else
-      @html App.view('generic/admin/new')(
-        head: 'Email Channel'
-      )
       @form = new App.ControllerForm(
-        el: @el.find('#object_new')
-        model: App.Channel
+        model:     App.Channel
         autofocus: true
       )
-    @modalShow()
+    @head   = 'Email Channel'
+    @button = true
+    @close  = true
+    @cancel = true
+    @show( @form.form )
 
-  submit: (e) =>
+  onSubmit: (e) =>
     e.preventDefault()
 
     # get params
@@ -390,9 +363,9 @@ class App.ChannelEmailInboundEdit extends App.ControllerModal
     # save object
     object.save(
       done: =>
-        @modalHide()
+        @hide()
       fail: =>
-        @modalHide()
+        @hide()
     )
 
 class App.ChannelEmailOutbound extends App.Controller

+ 13 - 14
app/assets/javascripts/app/controllers/agent_ticket_create.js.coffee

@@ -479,22 +479,20 @@ class Sidebar extends App.Controller
 class UserNew extends App.ControllerModal
   constructor: ->
     super
-    @render()
-
-  render: ->
+    @head   = 'New User'
+    @cancel = true
+    @button = true
 
-    @html App.view('agent_user_create')( head: 'New User' )
-
-    new App.ControllerForm(
+    controller = new App.ControllerForm(
       el:         @el.find('#form-user')
       model:      App.User
       screen:     'edit'
       autofocus:  true
     )
 
-    @modalShow()
+    @show( controller.form )
 
-  submit: (e) ->
+  onSubmit: (e) ->
 
     e.preventDefault()
     params = @formParam(e.target)
@@ -503,12 +501,13 @@ class UserNew extends App.ControllerModal
     if !params.login && params.email
       params.login = params.email
 
-    user = new App.User
-
     # find role_id
-    role = App.Role.findByAttribute( 'name', 'Customer' )
-    params.role_ids = role.id
+    if !params.role_ids || _.isEmpty( params.role_ids )
+      role = App.Role.findByAttribute( 'name', 'Customer' )
+      params.role_ids = role.id
     @log 'notice', 'updateAttributes', params
+
+    user = new App.User
     user.load(params)
 
     errors = user.validate()
@@ -532,11 +531,11 @@ class UserNew extends App.ControllerModal
 
           # start customer info controller
           ui.userInfo( user_id: user.id )
-          ui.modalHide()
+          ui.hide()
         App.User.full( @id, callbackReload , true )
 
       fail: ->
-        ui.modalHide()
+        ui.hide()
     )
 
 class Router extends App.ControllerPermanent

+ 2 - 2
app/assets/javascripts/app/controllers/agent_ticket_merge.js.coffee

@@ -63,7 +63,7 @@ class App.TicketMerge extends App.ControllerModal
         $(e.target).parents().find('[name="master_ticket_number"]').val( ticket.number )
     )
 
-    @modalShow()
+    @hide()
 
   submit: (e) =>
     e.preventDefault()
@@ -91,7 +91,7 @@ class App.TicketMerge extends App.ControllerModal
           App.Collection.load( type: 'Ticket', data: [data.slave_ticket] )
 
           # hide dialog
-          @modalHide()
+          @hide()
 
           # view ticket
           @log 'notice', 'nav...', App.Ticket.find( data.master_ticket['id'] )

+ 0 - 1
app/assets/javascripts/app/controllers/getting_started.js.coffee

@@ -130,7 +130,6 @@ class Index extends App.ControllerContent
             msg:     App.i18n.translateContent( 'Can\'t create user!' )
             timeout: 2500
           }
-#        @modalHide()
     )
 
   relogin: (data, status, xhr) =>

+ 42 - 0
app/assets/javascripts/app/controllers/layout_ref.js.coffee

@@ -41,6 +41,48 @@ class ContentSidebarRightSidebarOptional extends App.ControllerContent
 
 App.Config.set( 'layout_ref/content_sidebar_right_sidebar_optional', ContentSidebarRightSidebarOptional, 'Routes' )
 
+class ModalForm extends App.ControllerModal
+  constructor: ->
+    super
+    @head  = '123 some title'
+    @cancel = true
+    @button = true
+
+    controller = new App.ControllerForm(
+      model: App.User
+      autofocus: true
+    )
+
+    @show(controller.form)
+
+  onHide: =>
+    window.history.back()
+
+  onSubmit: (e) =>
+    e.preventDefault()
+    params = App.ControllerForm.params( $(e.target).closest('form') )
+    console.log('params', params)
+
+
+App.Config.set( 'layout_ref/modal_form', ModalForm, 'Routes' )
+
+class ModalText extends App.ControllerModal
+  constructor: ->
+    super
+    @head = '123 some title'
+
+    form = App.view('layout_ref/content')()
+
+    @show(form)
+
+  onHide: =>
+    window.history.back()
+
+
+
+App.Config.set( 'layout_ref/modal_text', ModalText, 'Routes' )
+
+
 
 class ContentSidebarTabsRight extends App.ControllerContent
   elements:

+ 0 - 2
app/assets/javascripts/app/controllers/signup.js.coffee

@@ -70,8 +70,6 @@ class Index extends App.ControllerContent
           success: @success
           error: @error
         )
-#      fail: =>
-#        @modalHide()
     )
 
   success: (data, status, xhr) =>

+ 11 - 17
app/assets/javascripts/app/controllers/taskbar_widget.js.coffee

@@ -75,7 +75,7 @@ class App.TaskbarWidget extends App.Controller
   remove: (e, key = false, force = false) =>
     e.preventDefault()
     if !key
-      key = $(e.target).parent().parent().data('key')
+      key = $(e.target).parents('a').data('key')
     if !key
       throw "No such key attributes found for task item"
 
@@ -117,20 +117,14 @@ class App.TaskbarWidget extends App.Controller
 class Remove extends App.ControllerModal
   constructor: ->
     super
-    @render()
-
-  render: ->
-    @html App.view('modal')(
-      title:   'Confirm'
-      message: 'Tab has changed, you really want to close it?'
-      close:   true
-      button:  'Close'
-    )
-    @modalShow(
-      backdrop: true,
-      keyboard: true,
-    )
-
-  submit: (e) =>
-    @modalHide()
+    @head     = 'Confirm'
+    @message  = 'Tab has changed, you really want to close it?'
+    @cancel   = true
+    @close    = true
+    @button   = 'Close'
+    @show()
+
+  onSubmit: (e) =>
+    e.preventDefault()
+    @hide()
     @ui.remove(e, @key, true)

Some files were not shown because too many files changed in this diff