From e26db17d75866d4a04dea925d9ab840be5cbb5ed Mon Sep 17 00:00:00 2001 From: Martin Edenhofer Date: Thu, 11 Apr 2019 07:23:35 +0200 Subject: [PATCH] Table: add no-side-padding class used in priority column to make the column slimmer --- .../_application_controller_table.coffee | 4 +- .../app/controllers/ticket_overview.coffee | 75 ++++++++++++++---- .../app/controllers/widget/ticket_list.coffee | 57 +++++++++---- .../javascripts/app/models/ticket.coffee | 18 ++++- .../app/views/generic/table.jst.eco | 4 +- .../app/views/generic/table_row.jst.eco | 2 +- app/assets/stylesheets/bootstrap.css | 5 +- app/assets/stylesheets/zammad.scss | 56 ++++++++++--- contrib/icon-sprite.sketch | Bin 230846 -> 234597 bytes db/migrate/20120101000010_create_ticket.rb | 2 + ...ticket_overview_priority_icon_and_color.rb | 44 ++++++++++ db/seeds/settings.rb | 28 +++++++ db/seeds/ticket_priorities.rb | 4 +- public/assets/images/icons.svg | 2 +- public/assets/images/icons/important.svg | 8 +- 15 files changed, 251 insertions(+), 58 deletions(-) create mode 100644 db/migrate/20190409000001_setting_ticket_overview_priority_icon_and_color.rb diff --git a/app/assets/javascripts/app/controllers/_application_controller_table.coffee b/app/assets/javascripts/app/controllers/_application_controller_table.coffee index 960523742..1466eb4fa 100644 --- a/app/assets/javascripts/app/controllers/_application_controller_table.coffee +++ b/app/assets/javascripts/app/controllers/_application_controller_table.coffee @@ -90,11 +90,11 @@ ### class App.ControllerTable extends App.Controller - minColWidth: 40 + minColWidth: 30 baseColWidth: 130 minTableWidth: 612 - checkBoxColWidth: 40 + checkBoxColWidth: 30 radioColWidth: 22 sortableColWidth: 36 destroyColWidth: 70 diff --git a/app/assets/javascripts/app/controllers/ticket_overview.coffee b/app/assets/javascripts/app/controllers/ticket_overview.coffee index aafffcd23..1aa8177f8 100644 --- a/app/assets/javascripts/app/controllers/ticket_overview.coffee +++ b/app/assets/javascripts/app/controllers/ticket_overview.coffee @@ -1086,12 +1086,15 @@ class Table extends App.Controller show: true ) @navigate ticket.uiUrl() + callbackTicketTitleAdd = (value, object, attribute, attributes) -> attribute.title = object.title value + callbackLinkToTicket = (value, object, attribute, attributes) -> attribute.link = object.uiUrl() value + callbackUserPopover = (value, object, attribute, attributes) -> return value if !object refObjectId = undefined @@ -1104,6 +1107,7 @@ class Table extends App.Controller attribute.data = id: refObjectId value + callbackOrganizationPopover = (value, object, attribute, attributes) -> return value if !object return value if !object.organization_id @@ -1111,6 +1115,7 @@ class Table extends App.Controller attribute.data = id: object.organization_id value + callbackCheckbox = (id, checked, e) => if @shouldShowBulkForm() @bulkForm.render() @@ -1136,6 +1141,7 @@ class Table extends App.Controller items.slice(startId+1, endId).find('[name="bulk"]').prop('checked', (-> !@checked)) @lastChecked = e.currentTarget + callbackIconHeader = (headers) -> attribute = name: 'icon' @@ -1147,13 +1153,60 @@ class Table extends App.Controller headers.unshift(0) headers[0] = attribute headers + callbackIcon = (value, object, attribute, header) -> value = ' ' - attribute.class = object.iconClass() - attribute.link = '' - attribute.title = object.iconTitle() + attribute.class = object.iconClass() + attribute.link = '' + attribute.title = object.iconTitle() value + callbackPriority = (value, object, attribute, header) -> + value = ' ' + + if object.priority + attribute.title = object.priority() + else + attribute.title = App.i18n.translateInline(App.TicketPriority.findNative(@priority_id)?.displayName()) + value = object.priorityIcon() + + callbackIconPriorityHeader = (headers) -> + attribute = + name: 'icon_priority' + display: '' + translation: false + width: '24px' + displayWidth: 24 + unresizable: true + headers.unshift(0) + headers[0] = attribute + headers + + callbackIconPriority = (value, object, attribute, header) -> + value = ' ' + priority = App.TicketPriority.findNative(object.priority_id) + attribute.title = App.i18n.translateInline(priority?.name) + value = object.priorityIcon() + + callbackHeader = [ callbackIconHeader ] + callbackAttributes = + icon: + [ callbackIcon ] + customer_id: + [ callbackUserPopover ] + organization_id: + [ callbackOrganizationPopover ] + owner_id: + [ callbackUserPopover ] + title: + [ callbackLinkToTicket, callbackTicketTitleAdd ] + number: + [ callbackLinkToTicket, callbackTicketTitleAdd ] + + if App.Config.get('ui_ticket_overview_priority_icon') == true + callbackHeader = [ callbackIconHeader, callbackIconPriorityHeader ] + callbackAttributes.icon_priority = [ callbackIconPriority ] + tableArguments = tableId: "ticket_overview_#{@overview.id}" overview: @overview.view.s @@ -1173,20 +1226,8 @@ class Table extends App.Controller # customer_id: # events: # 'mouseover': popOver - callbackHeader: [ callbackIconHeader ] - callbackAttributes: - icon: - [ callbackIcon ] - customer_id: - [ callbackUserPopover ] - organization_id: - [ callbackOrganizationPopover ] - owner_id: - [ callbackUserPopover ] - title: - [ callbackLinkToTicket, callbackTicketTitleAdd ] - number: - [ callbackLinkToTicket, callbackTicketTitleAdd ] + callbackHeader: callbackHeader + callbackAttributes: callbackAttributes bindCheckbox: events: 'click': callbackCheckbox diff --git a/app/assets/javascripts/app/controllers/widget/ticket_list.coffee b/app/assets/javascripts/app/controllers/widget/ticket_list.coffee index 738127ecf..8188ba464 100644 --- a/app/assets/javascripts/app/controllers/widget/ticket_list.coffee +++ b/app/assets/javascripts/app/controllers/widget/ticket_list.coffee @@ -19,12 +19,15 @@ class App.TicketList extends App.Controller openTicket = (id,e) => ticket = App.Ticket.findNative(id) @navigate ticket.uiUrl() + callbackTicketTitleAdd = (value, object, attribute, attributes) -> attribute.title = object.title value + callbackLinkToTicket = (value, object, attribute, attributes) -> attribute.link = object.uiUrl() value + callbackUserPopover = (value, object, attribute, attributes) -> return value if !object refObjectId = undefined @@ -37,6 +40,7 @@ class App.TicketList extends App.Controller attribute.data = id: refObjectId value + callbackOrganizationPopover = (value, object, attribute, attributes) -> return value if !object return value if !object.organization_id @@ -64,6 +68,43 @@ class App.TicketList extends App.Controller attribute.title = object.iconTitle() value + callbackIconPriorityHeader = (headers) -> + attribute = + name: 'icon_priority' + display: '' + translation: false + width: '22px' + displayWidth: 22 + unresizable: true + headers.unshift(0) + headers[0] = attribute + headers + + callbackIconPriority = (value, object, attribute, header) -> + value = ' ' + priority = App.TicketPriority.findNative(object.priority_id) + attribute.title = App.i18n.translateInline(priority?.name) + value = object.priorityIcon() + + callbackHeader = [ callbackIconHeader ] + callbackAttributes = + icon: + [ callbackIcon ] + customer_id: + [ callbackUserPopover ] + organization_id: + [ callbackOrganizationPopover ] + owner_id: + [ callbackUserPopover ] + title: + [ callbackLinkToTicket, callbackTicketTitleAdd ] + number: + [ callbackLinkToTicket, callbackTicketTitleAdd ] + + if App.Config.get('ui_ticket_overview_priority_icon') == true + callbackHeader = [ callbackIconHeader, callbackIconPriorityHeader ] + callbackAttributes.icon_priority = [ callbackIconPriority ] + list = [] for ticket_id in @ticket_ids ticketItem = App.Ticket.fullLocal(ticket_id) @@ -78,20 +119,8 @@ class App.TicketList extends App.Controller #bindRow: # events: # 'click': openTicket - callbackHeader: [ callbackIconHeader ] - callbackAttributes: - icon: - [ callbackIcon ] - customer_id: - [ callbackUserPopover ] - organization_id: - [ callbackOrganizationPopover ] - owner_id: - [ callbackUserPopover ] - title: - [ callbackLinkToTicket, callbackTicketTitleAdd ] - number: - [ callbackLinkToTicket, callbackTicketTitleAdd ] + callbackHeader: callbackHeader + callbackAttributes: callbackAttributes radio: @radio ) diff --git a/app/assets/javascripts/app/models/ticket.coffee b/app/assets/javascripts/app/models/ticket.coffee index 37328b5da..dcd57d3b4 100644 --- a/app/assets/javascripts/app/models/ticket.coffee +++ b/app/assets/javascripts/app/models/ticket.coffee @@ -11,7 +11,7 @@ class App.Ticket extends App.Model { name: 'owner_id', display: 'Owner', tag: 'select', multiple: false, limit: 100, null: true, relation: 'User', width: '12%', edit: true }, { name: 'state_id', display: 'State', tag: 'select', multiple: false, null: false, relation: 'TicketState', default: 'new', width: '12%', edit: true, customer: true }, { name: 'pending_time', display: 'Pending till', tag: 'datetime', null: true, width: '130px' }, - { name: 'priority_id', display: 'Priority', tag: 'select', multiple: false, null: false, relation: 'TicketPriority', default: '2 normal', width: '12%', edit: true, customer: true }, + { name: 'priority_id', display: 'Priority', tag: 'select', multiple: false, null: false, relation: 'TicketPriority', default: '2 normal', width: '54px', edit: true, customer: true }, { name: 'article_count', display: 'Article#', readonly: 1, width: '12%' }, { name: 'time_unit', display: 'Accounted Time', readonly: 1, width: '12%' }, { name: 'escalation_at', display: 'Escalation', tag: 'datetime', null: true, readonly: 1, width: '110px', class: 'escalation' }, @@ -29,6 +29,22 @@ class App.Ticket extends App.Model uiUrl: -> "#ticket/zoom/#{@id}" + priorityIcon: -> + priority = App.TicketPriority.findNative(@priority_id) + return '' if !priority + return '' if !priority.ui_icon + return '' if !priority.ui_color + App.Utils.icon(priority.ui_icon, "u-#{priority.ui_color}-color") + + priorityClass: -> + priority = App.TicketPriority.findNative(@priority_id) + return '' if !priority + return '' if !priority.ui_color + "item--#{priority.ui_color}" + + rowClass: -> + @priorityClass() + getState: -> type = App.TicketState.findNative(@state_id) stateType = App.TicketStateType.findNative(type.state_type_id) diff --git a/app/assets/javascripts/app/views/generic/table.jst.eco b/app/assets/javascripts/app/views/generic/table.jst.eco index 58efea9f7..07cc76b49 100644 --- a/app/assets/javascripts/app/views/generic/table.jst.eco +++ b/app/assets/javascripts/app/views/generic/table.jst.eco @@ -6,7 +6,7 @@ <% end %> <% if @checkbox: %> - +