From 011437dcb5c4719ad6627f3a4dc07a5ce1bd9db8 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 13 Sep 2018 03:44:08 +0200 Subject: Group reports by target account (#8674) * Group reports by target account * Improve CSS --- .../admin/account_moderation_notes_helper.rb | 4 +- app/helpers/home_helper.rb | 8 +- app/javascript/styles/mastodon/admin.scss | 99 ++++++++++++++++++++++ app/views/admin/reports/_account.html.haml | 19 ----- app/views/admin/reports/_report.html.haml | 29 ------- app/views/admin/reports/index.html.haml | 52 +++++++++--- app/views/settings/exports/show.html.haml | 2 +- 7 files changed, 146 insertions(+), 67 deletions(-) delete mode 100644 app/views/admin/reports/_account.html.haml delete mode 100644 app/views/admin/reports/_report.html.haml (limited to 'app') diff --git a/app/helpers/admin/account_moderation_notes_helper.rb b/app/helpers/admin/account_moderation_notes_helper.rb index 25586fbba..4d8f0352e 100644 --- a/app/helpers/admin/account_moderation_notes_helper.rb +++ b/app/helpers/admin/account_moderation_notes_helper.rb @@ -4,7 +4,7 @@ module Admin::AccountModerationNotesHelper def admin_account_link_to(account) return if account.nil? - link_to admin_account_path(account.id), class: name_tag_classes(account) do + link_to admin_account_path(account.id), class: name_tag_classes(account), title: account.acct do safe_join([ image_tag(account.avatar.url, width: 15, height: 15, alt: display_name(account), class: 'avatar'), content_tag(:span, account.acct, class: 'username'), @@ -15,7 +15,7 @@ module Admin::AccountModerationNotesHelper def admin_account_inline_link_to(account) return if account.nil? - link_to admin_account_path(account.id), class: name_tag_classes(account, true) do + link_to admin_account_path(account.id), class: name_tag_classes(account, true), title: account.acct do content_tag(:span, account.acct, class: 'username') end end diff --git a/app/helpers/home_helper.rb b/app/helpers/home_helper.rb index f5b501235..0157785fa 100644 --- a/app/helpers/home_helper.rb +++ b/app/helpers/home_helper.rb @@ -7,13 +7,13 @@ module HomeHelper } end - def account_link_to(account, button = '') + def account_link_to(account, button = '', size: 36, path: nil) content_tag(:div, class: 'account') do content_tag(:div, class: 'account__wrapper') do section = if account.nil? content_tag(:div, class: 'account__display-name') do content_tag(:div, class: 'account__avatar-wrapper') do - content_tag(:div, '', class: 'account__avatar', style: "background-image: url(#{full_asset_url('avatars/original/missing.png', skip_pipeline: true)})") + content_tag(:div, '', class: 'account__avatar', style: "width: #{size}px; height: #{size}px; background-size: #{size}px #{size}px; background-image: url(#{full_asset_url('avatars/original/missing.png', skip_pipeline: true)})") end + content_tag(:span, class: 'display-name') do content_tag(:strong, t('about.contact_missing')) + @@ -21,9 +21,9 @@ module HomeHelper end end else - link_to(TagManager.instance.url_for(account), class: 'account__display-name') do + link_to(path || TagManager.instance.url_for(account), class: 'account__display-name') do content_tag(:div, class: 'account__avatar-wrapper') do - content_tag(:div, '', class: 'account__avatar', style: "background-image: url(#{account.avatar.url})") + content_tag(:div, '', class: 'account__avatar', style: "width: #{size}px; height: #{size}px; background-size: #{size}px #{size}px; background-image: url(#{account.avatar.url})") end + content_tag(:span, class: 'display-name') do content_tag(:bdi) do diff --git a/app/javascript/styles/mastodon/admin.scss b/app/javascript/styles/mastodon/admin.scss index 42f507296..7d359921a 100644 --- a/app/javascript/styles/mastodon/admin.scss +++ b/app/javascript/styles/mastodon/admin.scss @@ -567,3 +567,102 @@ a.name-tag, color: $dark-text-color; } } + +.report-card { + background: $ui-base-color; + border-radius: 4px; + margin-bottom: 20px; + + &__profile { + display: flex; + justify-content: space-between; + align-items: center; + padding: 15px; + + .account { + padding: 0; + border: 0; + + &__avatar-wrapper { + margin-left: 0; + } + } + + &__stats { + flex: 0 0 auto; + font-weight: 500; + color: $darker-text-color; + text-transform: uppercase; + text-align: right; + + a { + color: inherit; + text-decoration: none; + + &:focus, + &:hover, + &:active { + color: lighten($darker-text-color, 8%); + } + } + + .red { + color: $error-value-color; + } + } + } + + &__summary { + &__item { + display: flex; + justify-content: flex-start; + border-top: 1px solid darken($ui-base-color, 4%); + + &:hover { + background: lighten($ui-base-color, 2%); + } + + &__reported-by, + &__assigned { + padding: 15px; + flex: 0 0 auto; + box-sizing: border-box; + width: 150px; + color: $darker-text-color; + + &, + .username { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + } + + &__content { + flex: 1 1 auto; + max-width: calc(100% - 300px); + + &__icon { + color: $dark-text-color; + margin-right: 4px; + font-weight: 500; + } + } + + &__content a { + display: block; + box-sizing: border-box; + width: 100%; + padding: 15px; + text-decoration: none; + color: $darker-text-color; + } + } + } +} + +.one-line { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} diff --git a/app/views/admin/reports/_account.html.haml b/app/views/admin/reports/_account.html.haml deleted file mode 100644 index 9ac161c9c..000000000 --- a/app/views/admin/reports/_account.html.haml +++ /dev/null @@ -1,19 +0,0 @@ -- size ||= 36 - -.account.compact - .account__wrapper - - if account.nil? - .account__display-name - .account__avatar-wrapper - .account__avatar{ style: "background-image: url(#{full_asset_url('avatars/original/missing.png', skip_pipeline: true)}); width: #{size}px; height: #{size}px; background-size: #{size}px #{size}px" } - %span.display-name - %strong= t 'about.contact_missing' - %span.display-name__account= t 'about.contact_unavailable' - - else - = link_to TagManager.instance.url_for(account), class: 'account__display-name' do - .account__avatar-wrapper - .account__avatar{ style: "background-image: url(#{account.avatar.url}); width: #{size}px; height: #{size}px; background-size: #{size}px #{size}px" } - %span.display-name - %bdi - %strong.display-name__html.emojify= display_name(account, custom_emojify: true) - %span.display-name__account @#{account.acct} diff --git a/app/views/admin/reports/_report.html.haml b/app/views/admin/reports/_report.html.haml deleted file mode 100644 index 7b25c924b..000000000 --- a/app/views/admin/reports/_report.html.haml +++ /dev/null @@ -1,29 +0,0 @@ -%tr - %td.id - = "##{report.id}" - %td.target - = admin_account_link_to report.target_account - %td.reporter - - if report.account.local? - = admin_account_link_to report.account - - else - = report.account.domain - %td - %div{ title: report.comment } - = truncate(report.comment, length: 30, separator: ' ') - %div - - unless report.statuses.empty? - %span{ title: t('admin.accounts.statuses') } - = fa_icon('comment') - = report.statuses.count - - unless report.media_attachments.empty? - %span{ title: t('admin.accounts.media_attachments') } - = fa_icon('camera') - = report.media_attachments.count - %td - - if report.assigned_account.nil? - \- - - else - = admin_account_link_to report.assigned_account - %td - = table_link_to 'circle', t('admin.reports.view'), admin_report_path(report) diff --git a/app/views/admin/reports/index.html.haml b/app/views/admin/reports/index.html.haml index 44a531f2c..d73faccb0 100644 --- a/app/views/admin/reports/index.html.haml +++ b/app/views/admin/reports/index.html.haml @@ -8,17 +8,45 @@ %li= filter_link_to t('admin.reports.unresolved'), resolved: nil %li= filter_link_to t('admin.reports.resolved'), resolved: '1' -.table-wrapper - %table.table - %thead - %tr - %th= t('admin.reports.id') - %th= t('admin.reports.target') - %th= t('admin.reports.reported_by') - %th= t('admin.reports.report_contents') - %th= t('admin.reports.assigned') - %th - %tbody - = render @reports +- @reports.group_by(&:target_account_id).each do |target_account_id, reports| + - target_account = reports.first.target_account + .report-card + .report-card__profile + = account_link_to target_account, '', size: 36, path: admin_account_path(target_account.id) + .report-card__profile__stats + = link_to pluralize(target_account.targeted_moderation_notes.count, t('admin.reports.account.note')), admin_account_path(target_account.id) + %br/ + - if target_account.suspended? + %span.red= t('admin.accounts.suspended') + - elsif target_account.silenced? + %span.red= t('admin.accounts.silenced') + - elsif target_account.user&.disabled? + %span.red= t('admin.accounts.disabled') + - else + %span.neutral= t('admin.accounts.no_limits_imposed') + .report-card__summary + - reports.each do |report| + .report-card__summary__item + .report-card__summary__item__reported-by + - if report.account.local? + = admin_account_link_to report.account + - else + = report.account.domain + .report-card__summary__item__content + = link_to admin_report_path(report) do + .one-line= report.comment.presence || t('admin.reports.comment.none') + %span.report-card__summary__item__content__icon{ title: t('admin.accounts.statuses') } + = fa_icon('comment') + = report.statuses.count + + %span.report-card__summary__item__content__icon{ title: t('admin.accounts.media_attachments') } + = fa_icon('camera') + = report.media_attachments.count + + .report-card__summary__item__assigned + - if report.assigned_account.present? + = admin_account_link_to report.assigned_account + - else + \- = paginate @reports diff --git a/app/views/settings/exports/show.html.haml b/app/views/settings/exports/show.html.haml index 792dccd9e..6c030b1ab 100644 --- a/app/views/settings/exports/show.html.haml +++ b/app/views/settings/exports/show.html.haml @@ -9,7 +9,7 @@ %td= number_to_human_size @export.total_storage %td %tr - %th= t('accounts.statuses', count: @export.total_statuses) + %th= t('accounts.posts', count: @export.total_statuses) %td= number_with_delimiter @export.total_statuses %td %tr -- cgit