diff --git a/app/assets/javascripts/app/controllers/_application_controller.js.coffee b/app/assets/javascripts/app/controllers/_application_controller.js.coffee index 2ac480a80..cc213e81a 100644 --- a/app/assets/javascripts/app/controllers/_application_controller.js.coffee +++ b/app/assets/javascripts/app/controllers/_application_controller.js.coffee @@ -45,125 +45,6 @@ class App.Controller extends Spine.Controller formValidate: (data) -> App.ControllerForm.validate(data) - ### - - table = @table( - header: ['Host', 'User', 'Adapter', 'Active'], - overview: ['host', 'user', 'adapter', 'active'], - model: App.Channel, - objects: data, - ) - - table = @table( - overview_extended: [ - { name: 'number', link: true }, - { name: 'title', link: true }, - { name: 'customer', class: 'user-data', data: { id: true } }, - { name: 'ticket_state', translate: true }, - { name: 'ticket_priority', translate: true }, - { name: 'group' }, - { name: 'owner', class: 'user-data', data: { id: true } }, - { name: 'created_at', callback: @frontendTime }, - { name: 'last_contact', callback: @frontendTime }, - { name: 'last_contact_agent', callback: @frontendTime }, - { name: 'last_contact_customer', callback: @frontendTime }, - { name: 'first_response', callback: @frontendTime }, - { name: 'close_time', callback: @frontendTime }, - ], - model: App.Ticket, - objects: tickets, - ) - - ### - - table: (data) -> - overview = data.overview || data.model.configure_overview || [] - attributes = data.attributes || data.model.configure_attributes || {} - header = data.header - - # define normal header - if header - header_new = [] - for key in header - header_new.push { - display: key - } - header = header_new - else if !data.overview_extended - header = [] - for row in overview - if attributes - for attribute in attributes - if row is attribute.name - header.push attribute - else - rowWithoutId = row + '_id' - if rowWithoutId is attribute.name - header.push attribute - - dataTypesForCols = [] - for row in overview - dataTypesForCols.push { - name: row, - link: true, - } - - # extended table format - if data.overview_extended - if !header - header = [] - for row in data.overview_extended - for attribute in attributes - if row.name is attribute.name - header.push attribute - else - rowWithoutId = row.name + '_id' - if rowWithoutId is attribute.name - header.push attribute - - dataTypesForCols = data.overview_extended - - # generate content data - for object in data.objects - - # check if info for each col. is already there - for row in dataTypesForCols - - # lookup relation - if !object[row.name] - rowWithoutId = row.name + '_id' - for attribute in attributes - if rowWithoutId is attribute.name - if attribute.relation && App[attribute.relation] - record = App.Collection.find( attribute.relation, object[rowWithoutId] ) - object[row.name] = record.name - - @log 'table', 'header', header, 'overview', dataTypesForCols, 'objects', data.objects - table = App.view('generic/table')( - header: header, - overview: dataTypesForCols, - objects: data.objects, - checkbox: data.checkbox, - ) -# @log 'ttt', $(table).find('span') -# $(table).find('span').bind('click', -> -# console.log('----------click---------') -# ) - - # convert to jquery object - table = $(table) - - # enable checkbox bulk selection - if data.checkbox - table.delegate('[name="bulk_all"]', 'click', (e) -> - if $(e.target).attr('checked') - $(e.target).parents().find('[name="bulk"]').attr( 'checked', true ); - else - $(e.target).parents().find('[name="bulk"]').attr( 'checked', false ); - ) - - return table - ticketTableAttributes: (attributes) => all_attributes = [ { name: 'number', link: true, title: 'title' }, diff --git a/app/assets/javascripts/app/controllers/_application_controller_generic.js.coffee b/app/assets/javascripts/app/controllers/_application_controller_generic.js.coffee index 9704a8522..bedead930 100644 --- a/app/assets/javascripts/app/controllers/_application_controller_generic.js.coffee +++ b/app/assets/javascripts/app/controllers/_application_controller_generic.js.coffee @@ -183,11 +183,11 @@ class App.ControllerGenericIndex extends App.Controller ) # append content table - table = @table( + new App.ControllerTable( + el: @el.find('.table-overview'), model: @genericObject, objects: objects, ) - @el.find('.table-overview').append(table) edit: (e) => e.preventDefault() diff --git a/app/assets/javascripts/app/controllers/_application_controller_table.js.coffee b/app/assets/javascripts/app/controllers/_application_controller_table.js.coffee new file mode 100644 index 000000000..60f5476fc --- /dev/null +++ b/app/assets/javascripts/app/controllers/_application_controller_table.js.coffee @@ -0,0 +1,132 @@ +class App.ControllerTable extends App.Controller + constructor: (params) -> + for key, value of params + @[key] = value + + @table = @tableGen(params) + if @el + @el.append( @table ) + + ### + + new App.ControllerTable( + header: ['Host', 'User', 'Adapter', 'Active'], + overview: ['host', 'user', 'adapter', 'active'], + model: App.Channel, + objects: data, + ) + + new App.ControllerTable( + overview_extended: [ + { name: 'number', link: true }, + { name: 'title', link: true }, + { name: 'customer', class: 'user-data', data: { id: true } }, + { name: 'ticket_state', translate: true }, + { name: 'ticket_priority', translate: true }, + { name: 'group' }, + { name: 'owner', class: 'user-data', data: { id: true } }, + { name: 'created_at', callback: @frontendTime }, + { name: 'last_contact', callback: @frontendTime }, + { name: 'last_contact_agent', callback: @frontendTime }, + { name: 'last_contact_customer', callback: @frontendTime }, + { name: 'first_response', callback: @frontendTime }, + { name: 'close_time', callback: @frontendTime }, + ], + model: App.Ticket, + objects: tickets, + ) + + ### + + tableGen: (data) -> + overview = data.overview || data.model.configure_overview || [] + attributes = data.attributes || data.model.configure_attributes || {} + header = data.header + + if _.isEmpty(data.objects) + table = '' + table = '-none-' + return $(table) + + # define normal header + if header + header_new = [] + for key in header + header_new.push { + display: key + } + header = header_new + else if !data.overview_extended + header = [] + for row in overview + if attributes + for attribute in attributes + if row is attribute.name + header.push attribute + else + rowWithoutId = row + '_id' + if rowWithoutId is attribute.name + header.push attribute + + dataTypesForCols = [] + for row in overview + dataTypesForCols.push { + name: row, + link: true, + } + + # extended table format + if data.overview_extended + if !header + header = [] + for row in data.overview_extended + for attribute in attributes + if row.name is attribute.name + header.push attribute + else + rowWithoutId = row.name + '_id' + if rowWithoutId is attribute.name + header.push attribute + + dataTypesForCols = data.overview_extended + + # generate content data + for object in data.objects + + # check if info for each col. is already there + for row in dataTypesForCols + + # lookup relation + if !object[row.name] + rowWithoutId = row.name + '_id' + for attribute in attributes + if rowWithoutId is attribute.name + if attribute.relation && App[attribute.relation] + record = App.Collection.find( attribute.relation, object[rowWithoutId] ) + object[row.name] = record.name + + @log 'table', 'header', header, 'overview', dataTypesForCols, 'objects', data.objects + table = App.view('generic/table')( + header: header, + overview: dataTypesForCols, + objects: data.objects, + checkbox: data.checkbox, + ) +# @log 'ttt', $(table).find('span') +# $(table).find('span').bind('click', -> +# console.log('----------click---------') +# ) + + # convert to jquery object + table = $(table) + + # enable checkbox bulk selection + if data.checkbox + table.delegate('[name="bulk_all"]', 'click', (e) -> + if $(e.target).attr('checked') + $(e.target).parents().find('[name="bulk"]').attr( 'checked', true ); + else + $(e.target).parents().find('[name="bulk"]').attr( 'checked', false ); + ) + + return table \ No newline at end of file diff --git a/app/assets/javascripts/app/controllers/_channel/email.js.coffee b/app/assets/javascripts/app/controllers/_channel/email.js.coffee index bc6f99a03..5724ff635 100644 --- a/app/assets/javascripts/app/controllers/_channel/email.js.coffee +++ b/app/assets/javascripts/app/controllers/_channel/email.js.coffee @@ -61,12 +61,12 @@ class App.ChannelEmailFilter extends App.Controller html = $('
') - table = @table( + new App.ControllerTable( + el: html, model: App.PostmasterFilter, objects: data, ) - html.append( table ) html.append( '' + App.i18n.translateContent('New') + '' ) @html html @@ -154,12 +154,12 @@ class App.ChannelEmailAddress extends App.Controller html = $('
') - table = @table( + new App.ControllerTable( + el: html, model: App.EmailAddress, objects: data, ) - html.append( table ) html.append( '' + App.i18n.translateContent('New') + '' ) @html html @@ -245,12 +245,12 @@ class App.ChannelEmailSignature extends App.Controller html = $('
') - table = @table( + new App.ControllerTable( + el: html, model: App.Signature, objects: data, ) - html.append( table ) html.append( '' + App.i18n.translateContent('New') + '' ) @html html @@ -334,8 +334,7 @@ class App.ChannelEmailInbound extends App.Controller render: => channels = App.Channel.all() - - html = $('
') + data = [] for channel in channels if channel.area is 'Email::Inbound' @@ -343,14 +342,15 @@ class App.ChannelEmailInbound extends App.Controller channel.user = channel.options['user'] data.push channel - table = @table( - header: ['Host', 'User', 'Adapter', 'Active'], + html = $('
') + + new App.ControllerTable( + el: html, header: ['Host', 'User', 'Adapter', 'Active'], overview: ['host', 'user', 'adapter', 'active'], model: App.Channel, objects: data, ) - html.append( table ) html.append( '' + App.i18n.translateContent('New') + '' ) @html html diff --git a/app/assets/javascripts/app/controllers/_dashboard/ticket.js.coffee b/app/assets/javascripts/app/controllers/_dashboard/ticket.js.coffee index cadd7690d..02a7867dc 100644 --- a/app/assets/javascripts/app/controllers/_dashboard/ticket.js.coffee +++ b/app/assets/javascripts/app/controllers/_dashboard/ticket.js.coffee @@ -87,19 +87,14 @@ class App.DashboardTicket extends App.Controller @tickets_in_table.push App.Collection.find( 'Ticket', @ticket_list[ i - 1 ] ) shown_all_attributes = @ticketTableAttributes( App.Overview.find(@overview.id).view.d.overview ) - table = @table( + new App.ControllerTable( + el: html.find('.table-overview'), overview_extended: shown_all_attributes, model: App.Ticket, objects: @tickets_in_table, checkbox: false, ) - if _.isEmpty(@ticket_list) - table = '' - table = '-none-' - - # append content table - html.find('.table-overview').append(table) @html html # show frontend times diff --git a/app/assets/javascripts/app/controllers/agent_ticket_view.js.coffee b/app/assets/javascripts/app/controllers/agent_ticket_view.js.coffee index 9c3b87860..3ff7a684a 100644 --- a/app/assets/javascripts/app/controllers/agent_ticket_view.js.coffee +++ b/app/assets/javascripts/app/controllers/agent_ticket_view.js.coffee @@ -144,18 +144,17 @@ class Index extends App.Controller else $(e.target).parents().find('[name="bulk"]').attr('checked', false) ) + @el.find('.table-overview').append(table) else shown_all_attributes = @ticketTableAttributes( App.Overview.find(@overview.id).view.s.overview ) - table = @table( + new App.ControllerTable( + el: @el.find('.table-overview'), overview_extended: shown_all_attributes, model: App.Ticket, objects: @ticket_list_show, checkbox: checkbox, ) - # append content table - @el.find('.table-overview').append(table) - # start user popups @userPopups() diff --git a/app/assets/javascripts/app/views/agent_ticket_merge.jst.eco b/app/assets/javascripts/app/views/agent_ticket_merge.jst.eco index d255d2667..62d5d5ea7 100644 --- a/app/assets/javascripts/app/views/agent_ticket_merge.jst.eco +++ b/app/assets/javascripts/app/views/agent_ticket_merge.jst.eco @@ -5,8 +5,11 @@