Merge tag 'v2.7.0rc1' into instance_only_statuses
This commit is contained in:
@ -1,12 +1,9 @@
|
||||
.public-account-header{:class => ("inactive" if account.moved?)}
|
||||
.public-account-header__image
|
||||
= image_tag account.header.url, class: 'parallax'
|
||||
= image_tag (current_account&.user&.setting_auto_play_gif ? account.header_original_url : account.header_static_url), class: 'parallax'
|
||||
.public-account-header__bar
|
||||
= link_to short_account_url(account), class: 'avatar' do
|
||||
- if current_account&.user&.setting_auto_play_gif
|
||||
= image_tag account.avatar_original_url
|
||||
- else
|
||||
= image_tag account.avatar_static_url
|
||||
= image_tag (current_account&.user&.setting_auto_play_gif ? account.avatar_original_url : account.avatar_static_url)
|
||||
.public-account-header__tabs
|
||||
.public-account-header__tabs__name
|
||||
%h1
|
||||
|
||||
26
app/views/admin/account_actions/new.html.haml
Normal file
26
app/views/admin/account_actions/new.html.haml
Normal file
@ -0,0 +1,26 @@
|
||||
- content_for :page_title do
|
||||
= t('admin.account_actions.title', acct: @account.acct)
|
||||
|
||||
= simple_form_for @account_action, url: admin_account_action_path(@account.id) do |f|
|
||||
= f.input :report_id, as: :hidden
|
||||
|
||||
.fields-group
|
||||
= f.input :type, collection: Admin::AccountAction.types_for_account(@account), include_blank: false, wrapper: :with_block_label, label_method: ->(type) { I18n.t("simple_form.labels.admin_account_action.types.#{type}")}, hint: t('simple_form.hints.admin_account_action.type_html', acct: @account.acct)
|
||||
|
||||
- if @account.local?
|
||||
%hr.spacer/
|
||||
|
||||
.fields-group
|
||||
= f.input :send_email_notification, as: :boolean, wrapper: :with_label
|
||||
|
||||
%hr.spacer/
|
||||
|
||||
- unless @warning_presets.empty?
|
||||
.fields-group
|
||||
= f.input :warning_preset_id, collection: @warning_presets, label_method: :text, wrapper: :with_block_label
|
||||
|
||||
.fields-group
|
||||
= f.input :text, as: :text, wrapper: :with_block_label, hint: t('simple_form.hints.admin_account_action.text_html', path: admin_warning_presets_path)
|
||||
|
||||
.actions
|
||||
= f.button :button, t('admin.account_actions.action'), type: :submit
|
||||
@ -0,0 +1,6 @@
|
||||
.speech-bubble.warning
|
||||
.speech-bubble__bubble
|
||||
= Formatter.instance.linkify(account_warning.text)
|
||||
.speech-bubble__owner
|
||||
= admin_account_link_to account_warning.account
|
||||
%time.formatted{ datetime: account_warning.created_at.iso8601 }= l account_warning.created_at
|
||||
@ -1,18 +1,18 @@
|
||||
%tr
|
||||
%td.username
|
||||
= account.username
|
||||
%td
|
||||
- unless account.local?
|
||||
= link_to account.domain, admin_accounts_path(by_domain: account.domain)
|
||||
= admin_account_link_to(account)
|
||||
%td
|
||||
- if account.local?
|
||||
- if account.user.nil?
|
||||
= t("admin.accounts.moderation.suspended")
|
||||
- else
|
||||
= t("admin.accounts.roles.#{account.user.role}")
|
||||
%div{ style: 'margin: -2px 0' }= account_badge(account, all: true)
|
||||
%td
|
||||
- if account.user_current_sign_in_ip
|
||||
%samp= account.user_current_sign_in_ip
|
||||
- else
|
||||
= account.protocol.humanize
|
||||
\-
|
||||
%td
|
||||
- if account.user_current_sign_in_at
|
||||
%time.time-ago{ datetime: account.user_current_sign_in_at.iso8601, title: l(account.user_current_sign_in_at) }= l account.user_current_sign_in_at
|
||||
- else
|
||||
\-
|
||||
%td
|
||||
= table_link_to 'circle', t('admin.accounts.web'), web_path("accounts/#{account.id}")
|
||||
= table_link_to 'globe', t('admin.accounts.public'), TagManager.instance.url_for(account)
|
||||
= table_link_to 'pencil', t('admin.accounts.edit'), admin_account_path(account.id)
|
||||
|
||||
@ -5,41 +5,19 @@
|
||||
.filter-subset
|
||||
%strong= t('admin.accounts.location.title')
|
||||
%ul
|
||||
%li= filter_link_to t('admin.accounts.location.all'), local: nil, remote: nil
|
||||
%li
|
||||
- if selected? local: '1', remote: nil
|
||||
= filter_link_to t('admin.accounts.location.local'), {local: nil, remote: nil}, {local: '1', remote: nil}
|
||||
- else
|
||||
= filter_link_to t('admin.accounts.location.local'), local: '1', remote: nil
|
||||
%li
|
||||
- if selected? remote: '1', local: nil
|
||||
= filter_link_to t('admin.accounts.location.remote'), {remote: nil, local: nil}, {remote: '1', local: nil}
|
||||
- else
|
||||
= filter_link_to t('admin.accounts.location.remote'), remote: '1', local: nil
|
||||
%li= filter_link_to t('admin.accounts.location.local'), remote: nil
|
||||
%li= filter_link_to t('admin.accounts.location.remote'), remote: '1'
|
||||
.filter-subset
|
||||
%strong= t('admin.accounts.moderation.title')
|
||||
%ul
|
||||
%li= filter_link_to t('admin.accounts.moderation.all'), silenced: nil, suspended: nil
|
||||
%li
|
||||
- if selected? silenced: '1'
|
||||
= filter_link_to t('admin.accounts.moderation.silenced'), {silenced: nil}, {silenced: '1'}
|
||||
- else
|
||||
= filter_link_to t('admin.accounts.moderation.silenced'), silenced: '1'
|
||||
%li
|
||||
- if selected? suspended: '1'
|
||||
= filter_link_to t('admin.accounts.moderation.suspended'), {suspended: nil}, {suspended: '1'}
|
||||
- else
|
||||
= filter_link_to t('admin.accounts.moderation.suspended'), suspended: '1'
|
||||
%li= filter_link_to t('admin.accounts.moderation.active'), silenced: nil, suspended: nil
|
||||
%li= filter_link_to t('admin.accounts.moderation.silenced'), silenced: '1', suspended: nil
|
||||
%li= filter_link_to t('admin.accounts.moderation.suspended'), suspended: '1', silenced: nil
|
||||
.filter-subset
|
||||
%strong= t('admin.accounts.role')
|
||||
%ul
|
||||
%li= filter_link_to t('admin.accounts.moderation.all'), staff: nil
|
||||
%li= filter_link_to t('admin.accounts.roles.staff'), staff: '1'
|
||||
.filter-subset
|
||||
%strong= t('admin.accounts.order.title')
|
||||
%ul
|
||||
%li= filter_link_to t('admin.accounts.order.most_recent'), alphabetic: nil
|
||||
%li= filter_link_to t('admin.accounts.order.alphabetic'), alphabetic: '1'
|
||||
|
||||
= form_tag admin_accounts_url, method: 'GET', class: 'simple_form' do
|
||||
.fields-group
|
||||
@ -60,8 +38,9 @@
|
||||
%thead
|
||||
%tr
|
||||
%th= t('admin.accounts.username')
|
||||
%th= t('admin.accounts.domain')
|
||||
%th
|
||||
%th= t('admin.accounts.role')
|
||||
%th= t('admin.accounts.most_recent_ip')
|
||||
%th= t('admin.accounts.most_recent_activity')
|
||||
%th
|
||||
%tbody
|
||||
= render @accounts
|
||||
|
||||
@ -1,189 +1,185 @@
|
||||
- content_for :page_title do
|
||||
= @account.acct
|
||||
|
||||
.table-wrapper
|
||||
%table.table.inline-table
|
||||
%tbody
|
||||
%tr
|
||||
%th= t('admin.accounts.username')
|
||||
%td= @account.username
|
||||
%tr
|
||||
%th= t('admin.accounts.domain')
|
||||
%td= @account.domain
|
||||
%tr
|
||||
%th= t('admin.accounts.display_name')
|
||||
%td= @account.display_name
|
||||
= render 'application/card', account: @account
|
||||
|
||||
%tr
|
||||
%th= t('admin.accounts.avatar')
|
||||
%th
|
||||
= link_to @account.avatar.url(:original) do
|
||||
= image_tag @account.avatar.url(:original), alt: '', width: 40, height: 40, class: 'avatar'
|
||||
- if @account.local? && @account.avatar?
|
||||
= table_link_to 'trash', t('admin.accounts.remove_avatar'), remove_avatar_admin_account_path(@account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:remove_avatar, @account)
|
||||
|
||||
- if @account.local?
|
||||
%tr
|
||||
%th= t('admin.accounts.role')
|
||||
%td
|
||||
- if @account.user.nil?
|
||||
= t("admin.accounts.moderation.suspended")
|
||||
- else
|
||||
= t("admin.accounts.roles.#{@account.user&.role}")
|
||||
= table_link_to 'angle-double-up', t('admin.accounts.promote'), promote_admin_account_role_path(@account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:promote, @account.user)
|
||||
= table_link_to 'angle-double-down', t('admin.accounts.demote'), demote_admin_account_role_path(@account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:demote, @account.user)
|
||||
%tr
|
||||
%th= t('admin.accounts.email')
|
||||
%td
|
||||
= @account.user_email
|
||||
= table_link_to 'edit', t('admin.accounts.change_email.label'), admin_account_change_email_path(@account.id) if can?(:change_email, @account.user)
|
||||
- if @account.user_unconfirmed_email.present?
|
||||
%th= t('admin.accounts.unconfirmed_email')
|
||||
%td
|
||||
= @account.user_unconfirmed_email
|
||||
%tr
|
||||
%th= t('admin.accounts.email_status')
|
||||
%td
|
||||
- if @account.user&.confirmed?
|
||||
= t('admin.accounts.confirmed')
|
||||
- else
|
||||
= t('admin.accounts.confirming')
|
||||
= table_link_to 'refresh', t('admin.accounts.resend_confirmation.send'), resend_admin_account_confirmation_path(@account.id), method: :post if can?(:confirm, @account.user)
|
||||
%tr
|
||||
%th= t('admin.accounts.login_status')
|
||||
%td
|
||||
- if @account.user&.disabled?
|
||||
= t('admin.accounts.disabled')
|
||||
= table_link_to 'unlock', t('admin.accounts.enable'), enable_admin_account_path(@account.id), method: :post if can?(:enable, @account.user)
|
||||
- else
|
||||
= t('admin.accounts.enabled')
|
||||
= table_link_to 'lock', t('admin.accounts.disable'), disable_admin_account_path(@account.id), method: :post if can?(:disable, @account.user)
|
||||
%tr
|
||||
%th= t('admin.accounts.most_recent_ip')
|
||||
%td= @account.user_current_sign_in_ip
|
||||
%tr
|
||||
%th= t('admin.accounts.most_recent_activity')
|
||||
%td
|
||||
- if @account.user_current_sign_in_at
|
||||
%time.formatted{ datetime: @account.user_current_sign_in_at.iso8601, title: l(@account.user_current_sign_in_at) }
|
||||
= l @account.user_current_sign_in_at
|
||||
- else
|
||||
Never
|
||||
- else
|
||||
%tr
|
||||
%th= t('admin.accounts.profile_url')
|
||||
%td= link_to @account.url, @account.url
|
||||
%tr
|
||||
%th= t('admin.accounts.protocol')
|
||||
%td= @account.protocol.humanize
|
||||
|
||||
%tr
|
||||
%th= t('admin.accounts.follows')
|
||||
%td= number_to_human @account.following_count
|
||||
%tr
|
||||
%th= t('admin.accounts.followers')
|
||||
%td= number_to_human @account.followers_count
|
||||
%tr
|
||||
%th= t('admin.accounts.statuses')
|
||||
%td= link_to number_to_human(@account.statuses_count), admin_account_statuses_path(@account.id)
|
||||
%tr
|
||||
%th= t('admin.accounts.media_attachments')
|
||||
%td
|
||||
= link_to number_to_human(@account.media_attachments.count), admin_account_statuses_path(@account.id, { media: true })
|
||||
= surround '(', ')' do
|
||||
= number_to_human_size @account.media_attachments.sum('file_file_size')
|
||||
%tr
|
||||
%th= t('.created_reports')
|
||||
%td= link_to pluralize(@account.reports.count, t('.report')), admin_reports_path(account_id: @account.id)
|
||||
%tr
|
||||
%th= t('.targeted_reports')
|
||||
%td= link_to pluralize(@account.targeted_reports.count, t('.report')), admin_reports_path(target_account_id: @account.id)
|
||||
|
||||
%div{ style: 'overflow: hidden' }
|
||||
%div{ style: 'float: right' }
|
||||
- if @account.local?
|
||||
= link_to t('admin.accounts.reset_password'), admin_account_reset_path(@account.id), method: :create, class: 'button' if can?(:reset_password, @account.user)
|
||||
- if @account.user&.otp_required_for_login?
|
||||
= link_to t('admin.accounts.disable_two_factor_authentication'), admin_user_two_factor_authentication_path(@account.user.id), method: :delete, class: 'button' if can?(:disable_2fa, @account.user)
|
||||
- unless @account.memorial?
|
||||
= link_to t('admin.accounts.memorialize'), memorialize_admin_account_path(@account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' if can?(:memorialize, @account)
|
||||
- else
|
||||
= link_to t('admin.accounts.redownload'), redownload_admin_account_path(@account.id), method: :post, class: 'button' if can?(:redownload, @account)
|
||||
|
||||
%div{ style: 'float: left' }
|
||||
- if @account.silenced?
|
||||
= link_to t('admin.accounts.undo_silenced'), admin_account_silence_path(@account.id), method: :delete, class: 'button' if can?(:unsilence, @account)
|
||||
- else
|
||||
= link_to t('admin.accounts.silence'), admin_account_silence_path(@account.id), method: :post, class: 'button button--destructive' if can?(:silence, @account)
|
||||
|
||||
- if @account.local?
|
||||
- unless @account.user_confirmed?
|
||||
= link_to t('admin.accounts.confirm'), admin_account_confirmation_path(@account.id), method: :post, class: 'button' if can?(:confirm, @account.user)
|
||||
|
||||
- if @account.suspended?
|
||||
= link_to t('admin.accounts.undo_suspension'), admin_account_suspension_path(@account.id), method: :delete, class: 'button' if can?(:unsuspend, @account)
|
||||
- else
|
||||
= link_to t('admin.accounts.perform_full_suspension'), new_admin_account_suspension_path(@account.id), class: 'button button--destructive' if can?(:suspend, @account)
|
||||
|
||||
- if !@account.local? && @account.hub_url.present?
|
||||
%hr.spacer/
|
||||
|
||||
%h3 OStatus
|
||||
.dashboard__counters{ style: 'margin-top: 10px' }
|
||||
%div
|
||||
= link_to admin_account_statuses_path(@account.id) do
|
||||
.dashboard__counters__num= number_with_delimiter @account.statuses_count
|
||||
.dashboard__counters__label= t 'admin.accounts.statuses'
|
||||
%div
|
||||
= link_to admin_account_statuses_path(@account.id, { media: true }) do
|
||||
.dashboard__counters__num= number_to_human_size @account.media_attachments.sum('file_file_size')
|
||||
.dashboard__counters__label= t 'admin.accounts.media_attachments'
|
||||
%div
|
||||
= link_to admin_account_followers_path(@account.id) do
|
||||
.dashboard__counters__num= number_with_delimiter @account.local_followers_count
|
||||
.dashboard__counters__label= t 'admin.accounts.followers'
|
||||
%div
|
||||
= link_to admin_reports_path(account_id: @account.id) do
|
||||
.dashboard__counters__num= number_with_delimiter @account.reports.count
|
||||
.dashboard__counters__label= t '.created_reports'
|
||||
%div
|
||||
= link_to admin_reports_path(target_account_id: @account.id) do
|
||||
.dashboard__counters__num= number_with_delimiter @account.targeted_reports.count
|
||||
.dashboard__counters__label= t '.targeted_reports'
|
||||
%div
|
||||
%div
|
||||
.dashboard__counters__text
|
||||
- if @account.local? && @account.user.nil?
|
||||
%span.neutral= t('admin.accounts.deleted')
|
||||
- elsif @account.suspended?
|
||||
%span.red= t('admin.accounts.suspended')
|
||||
- elsif @account.silenced?
|
||||
%span.red= t('admin.accounts.silenced')
|
||||
- elsif @account.local? && @account.user&.disabled?
|
||||
%span.red= t('admin.accounts.disabled')
|
||||
- elsif @account.local? && !@account.user&.confirmed?
|
||||
%span.neutral= t('admin.accounts.confirming')
|
||||
- else
|
||||
%span.neutral= t('admin.accounts.no_limits_imposed')
|
||||
.dashboard__counters__label= t 'admin.accounts.login_status'
|
||||
|
||||
- unless @account.local? && @account.user.nil?
|
||||
.table-wrapper
|
||||
%table.table.inline-table
|
||||
%tbody
|
||||
%tr
|
||||
%th= t('admin.accounts.feed_url')
|
||||
%td= link_to @account.remote_url, @account.remote_url
|
||||
%tr
|
||||
%th= t('admin.accounts.push_subscription_expires')
|
||||
%td
|
||||
- if @account.subscribed?
|
||||
%time.formatted{ datetime: @account.subscription_expires_at.iso8601, title: l(@account.subscription_expires_at) }
|
||||
= l @account.subscription_expires_at
|
||||
- else
|
||||
= t('admin.accounts.not_subscribed')
|
||||
%tr
|
||||
%th= t('admin.accounts.salmon_url')
|
||||
%td= link_to @account.salmon_url, @account.salmon_url
|
||||
- if @account.local?
|
||||
- if @account.avatar?
|
||||
%tr
|
||||
%th= t('admin.accounts.avatar')
|
||||
%td= table_link_to 'trash', t('admin.accounts.remove_avatar'), remove_avatar_admin_account_path(@account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:remove_avatar, @account)
|
||||
%td
|
||||
|
||||
- if @account.header?
|
||||
%tr
|
||||
%th= t('admin.accounts.header')
|
||||
%td= table_link_to 'trash', t('admin.accounts.remove_header'), remove_header_admin_account_path(@account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:remove_header, @account)
|
||||
%td
|
||||
|
||||
%tr
|
||||
%th= t('admin.accounts.role')
|
||||
%td= t("admin.accounts.roles.#{@account.user&.role}")
|
||||
%td
|
||||
= table_link_to 'angle-double-up', t('admin.accounts.promote'), promote_admin_account_role_path(@account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:promote, @account.user)
|
||||
= table_link_to 'angle-double-down', t('admin.accounts.demote'), demote_admin_account_role_path(@account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') } if can?(:demote, @account.user)
|
||||
|
||||
%tr
|
||||
%th= t('admin.accounts.email')
|
||||
%td= @account.user_email
|
||||
%td= table_link_to 'edit', t('admin.accounts.change_email.label'), admin_account_change_email_path(@account.id) if can?(:change_email, @account.user)
|
||||
|
||||
- if @account.user_unconfirmed_email.present?
|
||||
%tr
|
||||
%th= t('admin.accounts.unconfirmed_email')
|
||||
%td= @account.user_unconfirmed_email
|
||||
%td
|
||||
|
||||
%tr
|
||||
%th= t('admin.accounts.email_status')
|
||||
%td
|
||||
- if @account.user&.confirmed?
|
||||
= t('admin.accounts.confirmed')
|
||||
- else
|
||||
= t('admin.accounts.confirming')
|
||||
%td= table_link_to 'refresh', t('admin.accounts.resend_confirmation.send'), resend_admin_account_confirmation_path(@account.id), method: :post if can?(:confirm, @account.user)
|
||||
|
||||
%tr
|
||||
%th= t('admin.accounts.login_status')
|
||||
%td
|
||||
- if @account.user&.disabled?
|
||||
= t('admin.accounts.disabled')
|
||||
- else
|
||||
= t('admin.accounts.enabled')
|
||||
%td
|
||||
- if @account.user&.disabled?
|
||||
= table_link_to 'unlock', t('admin.accounts.enable'), enable_admin_account_path(@account.id), method: :post if can?(:enable, @account.user)
|
||||
- else
|
||||
= table_link_to 'lock', t('admin.accounts.disable'), new_admin_account_action_path(@account.id, type: 'disable') if can?(:disable, @account.user)
|
||||
|
||||
%tr
|
||||
%th= t('simple_form.labels.defaults.locale')
|
||||
%td= @account.user_locale
|
||||
%td
|
||||
|
||||
%tr
|
||||
%th= t('admin.accounts.joined')
|
||||
%td
|
||||
%time.formatted{ datetime: @account.created_at.iso8601, title: l(@account.created_at) }= l @account.created_at
|
||||
%td
|
||||
|
||||
%tr
|
||||
%th= t('admin.accounts.most_recent_ip')
|
||||
%td= @account.user_current_sign_in_ip
|
||||
%td
|
||||
|
||||
%tr
|
||||
%th= t('admin.accounts.most_recent_activity')
|
||||
%td
|
||||
- if @account.user_current_sign_in_at
|
||||
%time.formatted{ datetime: @account.user_current_sign_in_at.iso8601, title: l(@account.user_current_sign_in_at) }= l @account.user_current_sign_in_at
|
||||
|
||||
- if @account.user&.invited?
|
||||
%tr
|
||||
%th= t('admin.accounts.invited_by')
|
||||
%td= admin_account_link_to @account.user.invite.user.account
|
||||
%td
|
||||
|
||||
- else
|
||||
%tr
|
||||
%th= t('admin.accounts.inbox_url')
|
||||
%td
|
||||
= @account.inbox_url
|
||||
= fa_icon DeliveryFailureTracker.unavailable?(@account.inbox_url) ? 'times' : 'check'
|
||||
%tr
|
||||
%th= t('admin.accounts.shared_inbox_url')
|
||||
%td
|
||||
= @account.shared_inbox_url
|
||||
= fa_icon DeliveryFailureTracker.unavailable?(@account.shared_inbox_url) ? 'times' : 'check'
|
||||
|
||||
%div{ style: 'overflow: hidden' }
|
||||
%div{ style: 'float: right' }
|
||||
= link_to @account.subscribed? ? t('admin.accounts.resubscribe') : t('admin.accounts.subscribe'), subscribe_admin_account_path(@account.id), method: :post, class: 'button' if can?(:subscribe, @account)
|
||||
- if @account.subscribed?
|
||||
= link_to t('admin.accounts.unsubscribe'), unsubscribe_admin_account_path(@account.id), method: :post, class: 'button negative' if can?(:unsubscribe, @account)
|
||||
- if @account.local?
|
||||
= link_to t('admin.accounts.reset_password'), admin_account_reset_path(@account.id), method: :create, class: 'button' if can?(:reset_password, @account.user)
|
||||
- if @account.user&.otp_required_for_login?
|
||||
= link_to t('admin.accounts.disable_two_factor_authentication'), admin_user_two_factor_authentication_path(@account.user.id), method: :delete, class: 'button' if can?(:disable_2fa, @account.user)
|
||||
- unless @account.memorial?
|
||||
= link_to t('admin.accounts.memorialize'), memorialize_admin_account_path(@account.id), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }, class: 'button button--destructive' if can?(:memorialize, @account)
|
||||
- else
|
||||
= link_to t('admin.accounts.redownload'), redownload_admin_account_path(@account.id), method: :post, class: 'button' if can?(:redownload, @account)
|
||||
|
||||
%div{ style: 'float: left' }
|
||||
- if @account.local?
|
||||
= link_to t('admin.accounts.warn'), new_admin_account_action_path(@account.id, type: 'none'), class: 'button' if can?(:warn, @account)
|
||||
- if @account.silenced?
|
||||
= link_to t('admin.accounts.undo_silenced'), unsilence_admin_account_path(@account.id), method: :post, class: 'button' if can?(:unsilence, @account)
|
||||
- else
|
||||
= link_to t('admin.accounts.silence'), new_admin_account_action_path(@account.id, type: 'silence'), class: 'button button--destructive' if can?(:silence, @account)
|
||||
|
||||
- if @account.local?
|
||||
- unless @account.user_confirmed?
|
||||
= link_to t('admin.accounts.confirm'), admin_account_confirmation_path(@account.id), method: :post, class: 'button' if can?(:confirm, @account.user)
|
||||
|
||||
- if @account.suspended?
|
||||
= link_to t('admin.accounts.undo_suspension'), unsuspend_admin_account_path(@account.id), method: :post, class: 'button' if can?(:unsuspend, @account)
|
||||
- else
|
||||
= link_to t('admin.accounts.perform_full_suspension'), new_admin_account_action_path(@account.id, type: 'suspend'), class: 'button button--destructive' if can?(:suspend, @account)
|
||||
|
||||
- if !@account.local? && @account.inbox_url.present?
|
||||
%hr.spacer/
|
||||
|
||||
%h3 ActivityPub
|
||||
- unless @warnings.empty?
|
||||
= render @warnings
|
||||
|
||||
.table-wrapper
|
||||
%table.table.inline-table
|
||||
%tbody
|
||||
%tr
|
||||
%th= t('admin.accounts.inbox_url')
|
||||
%td= link_to @account.inbox_url, @account.inbox_url
|
||||
%tr
|
||||
%th= t('admin.accounts.outbox_url')
|
||||
%td= link_to @account.outbox_url, @account.outbox_url
|
||||
%tr
|
||||
%th= t('admin.accounts.shared_inbox_url')
|
||||
%td= link_to @account.shared_inbox_url, @account.shared_inbox_url
|
||||
%tr
|
||||
%th= t('admin.accounts.followers_url')
|
||||
%td= link_to @account.followers_url, @account.followers_url
|
||||
%hr.spacer/
|
||||
|
||||
%hr.spacer/
|
||||
= render @moderation_notes
|
||||
|
||||
= render @moderation_notes
|
||||
= simple_form_for @account_moderation_note, url: admin_account_moderation_notes_path do |f|
|
||||
= render 'shared/error_messages', object: @account_moderation_note
|
||||
|
||||
= simple_form_for @account_moderation_note, url: admin_account_moderation_notes_path do |f|
|
||||
= render 'shared/error_messages', object: @account_moderation_note
|
||||
= f.input :content, placeholder: t('admin.reports.notes.placeholder'), rows: 6
|
||||
= f.hidden_field :target_account_id
|
||||
|
||||
= f.input :content, placeholder: t('admin.reports.notes.placeholder'), rows: 6
|
||||
= f.hidden_field :target_account_id
|
||||
|
||||
.actions
|
||||
= f.button :button, t('admin.account_moderation_notes.create'), type: :submit
|
||||
.actions
|
||||
= f.button :button, t('admin.account_moderation_notes.create'), type: :submit
|
||||
|
||||
@ -57,6 +57,12 @@
|
||||
%span.pull-right.positive-hint= fa_icon 'check fw'
|
||||
- else
|
||||
%span.pull-right.negative-hint= fa_icon 'times fw'
|
||||
%li
|
||||
= link_to t('admin.dashboard.feature_profile_directory'), edit_admin_settings_path
|
||||
- if @profile_directory
|
||||
%span.pull-right.positive-hint= fa_icon 'check fw'
|
||||
- else
|
||||
%span.pull-right.negative-hint= fa_icon 'times fw'
|
||||
%li
|
||||
= link_to t('admin.dashboard.feature_relay'), admin_relays_path
|
||||
- if @relay_enabled
|
||||
|
||||
@ -1,13 +0,0 @@
|
||||
%tr
|
||||
%td
|
||||
%samp= domain_block.domain
|
||||
%td.severity
|
||||
= t("admin.domain_blocks.severities.#{domain_block.severity}")
|
||||
%td.reject_media
|
||||
- if domain_block.reject_media? || domain_block.suspend?
|
||||
%i.fa.fa-check
|
||||
%td.reject_reports
|
||||
- if domain_block.reject_reports? || domain_block.suspend?
|
||||
%i.fa.fa-check
|
||||
%td
|
||||
= table_link_to 'undo', t('admin.domain_blocks.undo'), admin_domain_block_path(domain_block)
|
||||
@ -1,17 +0,0 @@
|
||||
- content_for :page_title do
|
||||
= t('admin.domain_blocks.title')
|
||||
|
||||
.table-wrapper
|
||||
%table.table
|
||||
%thead
|
||||
%tr
|
||||
%th= t('admin.domain_blocks.domain')
|
||||
%th= t('admin.domain_blocks.severity')
|
||||
%th= t('admin.domain_blocks.reject_media')
|
||||
%th= t('admin.domain_blocks.reject_reports')
|
||||
%th
|
||||
%tbody
|
||||
= render @domain_blocks
|
||||
|
||||
= paginate @domain_blocks
|
||||
= link_to t('admin.domain_blocks.add_new'), new_admin_domain_block_path, class: 'button'
|
||||
28
app/views/admin/followers/index.html.haml
Normal file
28
app/views/admin/followers/index.html.haml
Normal file
@ -0,0 +1,28 @@
|
||||
- content_for :page_title do
|
||||
= t('admin.followers.title', acct: @account.acct)
|
||||
|
||||
.filters
|
||||
.filter-subset
|
||||
%strong= t('admin.accounts.location.title')
|
||||
%ul
|
||||
%li= link_to t('admin.accounts.location.local'), admin_account_followers_path(@account.id), class: 'selected'
|
||||
.back-link{ style: 'flex: 1 1 auto; text-align: right' }
|
||||
= link_to admin_account_path(@account.id) do
|
||||
= fa_icon 'chevron-left fw'
|
||||
= t('admin.followers.back_to_account')
|
||||
|
||||
%hr.spacer/
|
||||
|
||||
.table-wrapper
|
||||
%table.table
|
||||
%thead
|
||||
%tr
|
||||
%th= t('admin.accounts.username')
|
||||
%th= t('admin.accounts.role')
|
||||
%th= t('admin.accounts.most_recent_ip')
|
||||
%th= t('admin.accounts.most_recent_activity')
|
||||
%th
|
||||
%tbody
|
||||
= render partial: 'admin/accounts/account', collection: @followers
|
||||
|
||||
= paginate @followers
|
||||
@ -1,7 +0,0 @@
|
||||
%tr
|
||||
%td
|
||||
= link_to instance.domain, admin_accounts_path(by_domain: instance.domain)
|
||||
%td.count
|
||||
= instance.accounts_count
|
||||
%td
|
||||
= table_link_to 'paper-plane-o', t('admin.accounts.resubscribe'), resubscribe_admin_instances_url(by_domain: instance.domain), method: :post, data: { confirm: t('admin.accounts.are_you_sure') }
|
||||
@ -1,23 +1,39 @@
|
||||
- content_for :page_title do
|
||||
= t('admin.instances.title')
|
||||
|
||||
= form_tag admin_instances_url, method: 'GET', class: 'simple_form' do
|
||||
.fields-group
|
||||
- %i(domain_name).each do |key|
|
||||
.input.string.optional
|
||||
= text_field_tag key, params[key], class: 'string optional', placeholder: I18n.t("admin.instances.#{key}")
|
||||
.filters
|
||||
.filter-subset
|
||||
%strong= t('admin.instances.moderation.title')
|
||||
%ul
|
||||
%li= filter_link_to t('admin.instances.moderation.all'), limited: nil
|
||||
%li= filter_link_to t('admin.instances.moderation.limited'), limited: '1'
|
||||
|
||||
.actions
|
||||
%button= t('admin.instances.search')
|
||||
= link_to t('admin.instances.reset'), admin_instances_path, class: 'button negative'
|
||||
%div{ style: 'flex: 1 1 auto; text-align: right' }
|
||||
= link_to t('admin.domain_blocks.add_new'), new_admin_domain_block_path, class: 'button'
|
||||
|
||||
.table-wrapper
|
||||
%table.table
|
||||
%thead
|
||||
%tr
|
||||
%th= t('admin.instances.domain_name')
|
||||
%th= t('admin.instances.account_count')
|
||||
%tbody
|
||||
= render @instances
|
||||
%hr.spacer/
|
||||
|
||||
- @instances.each do |instance|
|
||||
.directory__tag
|
||||
= link_to admin_instance_path(instance) do
|
||||
%h4
|
||||
= instance.domain
|
||||
%small
|
||||
= t('admin.instances.known_accounts', count: instance.accounts_count)
|
||||
|
||||
- if instance.domain_block
|
||||
- if !instance.domain_block.noop?
|
||||
•
|
||||
= t("admin.domain_blocks.severity.#{instance.domain_block.severity}")
|
||||
- if instance.domain_block.reject_media?
|
||||
•
|
||||
= t('admin.domain_blocks.rejecting_media')
|
||||
- if instance.domain_block.reject_reports?
|
||||
•
|
||||
= t('admin.domain_blocks.rejecting_reports')
|
||||
|
||||
.avatar-stack
|
||||
- instance.cached_sample_accounts.each do |account|
|
||||
= image_tag current_account&.user&.setting_auto_play_gif ? account.avatar_original_url : account.avatar_static_url, width: 48, height: 48, alt: '', class: 'account__avatar'
|
||||
|
||||
= paginate paginated_instances
|
||||
|
||||
44
app/views/admin/instances/show.html.haml
Normal file
44
app/views/admin/instances/show.html.haml
Normal file
@ -0,0 +1,44 @@
|
||||
- content_for :page_title do
|
||||
= @instance.domain
|
||||
|
||||
.dashboard__counters
|
||||
%div
|
||||
%div
|
||||
.dashboard__counters__num= number_with_delimiter @following_count
|
||||
.dashboard__counters__label= t 'admin.instances.total_followed_by_them'
|
||||
%div
|
||||
%div
|
||||
.dashboard__counters__num= number_with_delimiter @followers_count
|
||||
.dashboard__counters__label= t 'admin.instances.total_followed_by_us'
|
||||
%div
|
||||
%div
|
||||
.dashboard__counters__num= number_to_human_size @media_storage
|
||||
.dashboard__counters__label= t 'admin.instances.total_storage'
|
||||
%div
|
||||
%div
|
||||
.dashboard__counters__num= number_with_delimiter @blocks_count
|
||||
.dashboard__counters__label= t 'admin.instances.total_blocked_by_us'
|
||||
%div
|
||||
%div
|
||||
.dashboard__counters__num= number_with_delimiter @reports_count
|
||||
.dashboard__counters__label= t 'admin.instances.total_reported'
|
||||
%div
|
||||
%div
|
||||
.dashboard__counters__num
|
||||
- if @available
|
||||
= fa_icon 'check'
|
||||
- else
|
||||
= fa_icon 'times'
|
||||
.dashboard__counters__label= t 'admin.instances.delivery_available'
|
||||
|
||||
%hr.spacer/
|
||||
|
||||
%div{ style: 'overflow: hidden' }
|
||||
%div{ style: 'float: left' }
|
||||
= link_to t('admin.accounts.title'), admin_accounts_path(remote: '1', by_domain: @instance.domain), class: 'button'
|
||||
|
||||
%div{ style: 'float: right' }
|
||||
- if @domain_block
|
||||
= link_to t('admin.domain_blocks.undo'), admin_domain_block_path(@domain_block), class: 'button'
|
||||
- else
|
||||
= link_to t('admin.domain_blocks.add_new'), new_admin_domain_block_path(_domain: @instance.domain), class: 'button'
|
||||
@ -8,13 +8,14 @@
|
||||
- if @report.unresolved?
|
||||
%div{ style: 'float: right' }
|
||||
- if @report.target_account.local?
|
||||
= link_to t('admin.accounts.disable'), admin_report_path(@report, outcome: 'disable'), method: :put, class: 'button button--destructive'
|
||||
= link_to t('admin.accounts.silence'), admin_report_path(@report, outcome: 'silence'), method: :put, class: 'button button--destructive'
|
||||
= link_to t('admin.accounts.perform_full_suspension'), new_admin_account_suspension_path(@report.target_account_id, report_id: @report.id), class: 'button button--destructive'
|
||||
= link_to t('admin.accounts.warn'), new_admin_account_action_path(@report.target_account_id, type: 'none', report_id: @report.id), class: 'button'
|
||||
= link_to t('admin.accounts.disable'), new_admin_account_action_path(@report.target_account_id, type: 'disable', report_id: @report.id), class: 'button button--destructive'
|
||||
= link_to t('admin.accounts.silence'), new_admin_account_action_path(@report.target_account_id, type: 'silence', report_id: @report.id), class: 'button button--destructive'
|
||||
= link_to t('admin.accounts.perform_full_suspension'), new_admin_account_action_path(@report.target_account_id, type: 'suspend', report_id: @report.id), class: 'button button--destructive'
|
||||
%div{ style: 'float: left' }
|
||||
= link_to t('admin.reports.mark_as_resolved'), admin_report_path(@report, outcome: 'resolve'), method: :put, class: 'button'
|
||||
= link_to t('admin.reports.mark_as_resolved'), resolve_admin_report_path(@report), method: :post, class: 'button'
|
||||
- else
|
||||
= link_to t('admin.reports.mark_as_unresolved'), admin_report_path(@report, outcome: 'reopen'), method: :put, class: 'button'
|
||||
= link_to t('admin.reports.mark_as_unresolved'), reopen_admin_report_path(@report), method: :post, class: 'button'
|
||||
|
||||
%hr.spacer
|
||||
|
||||
@ -67,10 +68,10 @@
|
||||
= admin_account_link_to @report.assigned_account
|
||||
%td
|
||||
- if @report.assigned_account != current_user.account
|
||||
= table_link_to 'user', t('admin.reports.assign_to_self'), admin_report_path(@report, outcome: 'assign_to_self'), method: :put
|
||||
= table_link_to 'user', t('admin.reports.assign_to_self'), assign_to_self_admin_report_path(@report), method: :post
|
||||
%td
|
||||
- if !@report.assigned_account.nil?
|
||||
= table_link_to 'trash', t('admin.reports.unassign'), admin_report_path(@report, outcome: 'unassign'), method: :put
|
||||
= table_link_to 'trash', t('admin.reports.unassign'), unassign_admin_report_path(@report), method: :post
|
||||
|
||||
%hr.spacer
|
||||
|
||||
@ -104,7 +105,7 @@
|
||||
- @report_notes.each do |item|
|
||||
- if item.is_a?(Admin::ActionLog)
|
||||
= render partial: 'action_log', locals: { action_log: item }
|
||||
- elsif item.is_a?(ReportNote)
|
||||
- else
|
||||
= render item
|
||||
|
||||
= simple_form_for @report_note, url: admin_report_notes_path do |f|
|
||||
|
||||
@ -62,6 +62,9 @@
|
||||
.fields-group
|
||||
= f.input :preview_sensitive_media, as: :boolean, wrapper: :with_label, label: t('admin.settings.preview_sensitive_media.title'), hint: t('admin.settings.preview_sensitive_media.desc_html')
|
||||
|
||||
.fields-group
|
||||
= f.input :profile_directory, as: :boolean, wrapper: :with_label, label: t('admin.settings.profile_directory.title'), hint: t('admin.settings.profile_directory.desc_html')
|
||||
|
||||
%hr.spacer/
|
||||
|
||||
.fields-group
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
%li= link_to t('admin.statuses.with_media'), admin_account_statuses_path(@account.id, current_params.merge(media: true)), class: params[:media] && 'selected'
|
||||
.back-link{ style: 'flex: 1 1 auto; text-align: right' }
|
||||
= link_to admin_account_path(@account.id) do
|
||||
%i.fa.fa-chevron-left.fa-fw
|
||||
= fa_icon 'chevron-left fw'
|
||||
= t('admin.statuses.back_to_account')
|
||||
|
||||
%hr.spacer/
|
||||
|
||||
27
app/views/admin/statuses/show.html.haml
Normal file
27
app/views/admin/statuses/show.html.haml
Normal file
@ -0,0 +1,27 @@
|
||||
- content_for :page_title do
|
||||
= t('admin.statuses.title')
|
||||
\-
|
||||
= "@#{@account.acct}"
|
||||
|
||||
.filters
|
||||
.back-link{ style: 'flex: 1 1 auto; text-align: right' }
|
||||
= link_to admin_account_path(@account.id) do
|
||||
%i.fa.fa-chevron-left.fa-fw
|
||||
= t('admin.statuses.back_to_account')
|
||||
|
||||
%hr.spacer/
|
||||
|
||||
= form_for(@form, url: admin_account_statuses_path(@account.id)) do |f|
|
||||
= hidden_field_tag :page, params[:page]
|
||||
= hidden_field_tag :media, params[:media]
|
||||
|
||||
.batch-table
|
||||
.batch-table__toolbar
|
||||
%label.batch-table__toolbar__select.batch-checkbox-all
|
||||
= check_box_tag :batch_checkbox_all, nil, false
|
||||
.batch-table__toolbar__actions
|
||||
= f.button safe_join([fa_icon('eye-slash'), t('admin.statuses.batch.nsfw_on')]), name: :nsfw_on, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') }
|
||||
= f.button safe_join([fa_icon('eye'), t('admin.statuses.batch.nsfw_off')]), name: :nsfw_off, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') }
|
||||
= f.button safe_join([fa_icon('trash'), t('admin.statuses.batch.delete')]), name: :delete, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') }
|
||||
.batch-table__body
|
||||
= render partial: 'admin/reports/status', collection: @statuses, locals: { f: f }
|
||||
@ -1,25 +0,0 @@
|
||||
- content_for :page_title do
|
||||
= t('admin.suspensions.title', acct: @account.acct)
|
||||
|
||||
= simple_form_for @suspension, url: admin_account_suspension_path(@account.id), method: :post do |f|
|
||||
%p.hint= t('admin.suspensions.warning_html')
|
||||
|
||||
.fields-group
|
||||
%ul
|
||||
%li.negative-hint
|
||||
= number_to_human @account.statuses_count, strip_insignificant_zeros: true
|
||||
= t('accounts.posts', count: @account.statuses_count)
|
||||
%li.negative-hint
|
||||
= number_to_human @account.following_count, strip_insignificant_zeros: true
|
||||
= t('accounts.following', count: @account.following_count)
|
||||
%li.negative-hint
|
||||
= number_to_human @account.followers_count, strip_insignificant_zeros: true
|
||||
= t('accounts.followers', count: @account.followers_count)
|
||||
|
||||
%p.hint= t('admin.suspensions.hint_html', value: content_tag(:code, @account.acct))
|
||||
|
||||
= f.input :acct
|
||||
= f.input_field :report_id, as: :hidden
|
||||
|
||||
.actions
|
||||
= f.button :button, t('admin.suspensions.proceed'), type: :submit, class: 'negative'
|
||||
12
app/views/admin/tags/_tag.html.haml
Normal file
12
app/views/admin/tags/_tag.html.haml
Normal file
@ -0,0 +1,12 @@
|
||||
%tr
|
||||
%td
|
||||
= link_to explore_hashtag_path(tag) do
|
||||
= fa_icon 'hashtag'
|
||||
= tag.name
|
||||
%td
|
||||
= t('directories.people', count: tag.accounts_count)
|
||||
%td
|
||||
- if tag.hidden?
|
||||
= table_link_to 'eye', t('admin.tags.unhide'), unhide_admin_tag_path(tag.id, **@filter_params), method: :post
|
||||
- else
|
||||
= table_link_to 'eye-slash', t('admin.tags.hide'), hide_admin_tag_path(tag.id, **@filter_params), method: :post
|
||||
19
app/views/admin/tags/index.html.haml
Normal file
19
app/views/admin/tags/index.html.haml
Normal file
@ -0,0 +1,19 @@
|
||||
- content_for :page_title do
|
||||
= t('admin.tags.title')
|
||||
|
||||
.filters
|
||||
.filter-subset
|
||||
%strong= t('admin.reports.status')
|
||||
%ul
|
||||
%li= filter_link_to t('admin.tags.visible'), hidden: nil
|
||||
%li= filter_link_to t('admin.tags.hidden'), hidden: '1'
|
||||
|
||||
.table-wrapper
|
||||
%table.table
|
||||
%thead
|
||||
%tr
|
||||
%th= t('admin.tags.name')
|
||||
%th= t('admin.tags.accounts')
|
||||
%th
|
||||
%tbody
|
||||
= render @tags
|
||||
11
app/views/admin/warning_presets/edit.html.haml
Normal file
11
app/views/admin/warning_presets/edit.html.haml
Normal file
@ -0,0 +1,11 @@
|
||||
- content_for :page_title do
|
||||
= t('admin.warning_presets.edit_preset')
|
||||
|
||||
= simple_form_for @warning_preset, url: admin_warning_preset_path(@warning_preset) do |f|
|
||||
= render 'shared/error_messages', object: @warning_preset
|
||||
|
||||
.fields-group
|
||||
= f.input :text, wrapper: :with_block_label
|
||||
|
||||
.actions
|
||||
= f.button :button, t('generic.save_changes'), type: :submit
|
||||
30
app/views/admin/warning_presets/index.html.haml
Normal file
30
app/views/admin/warning_presets/index.html.haml
Normal file
@ -0,0 +1,30 @@
|
||||
- content_for :page_title do
|
||||
= t('admin.warning_presets.title')
|
||||
|
||||
- if can? :create, :account_warning_preset
|
||||
= simple_form_for @warning_preset, url: admin_warning_presets_path do |f|
|
||||
= render 'shared/error_messages', object: @warning_preset
|
||||
|
||||
.fields-group
|
||||
= f.input :text, wrapper: :with_block_label
|
||||
|
||||
.actions
|
||||
= f.button :button, t('admin.warning_presets.add_new'), type: :submit
|
||||
|
||||
%hr.spacer/
|
||||
|
||||
- unless @warning_presets.empty?
|
||||
.table-wrapper
|
||||
%table.table
|
||||
%thead
|
||||
%tr
|
||||
%th= t('simple_form.labels.account_warning_preset.text')
|
||||
%th
|
||||
%tbody
|
||||
- @warning_presets.each do |preset|
|
||||
%tr
|
||||
%td
|
||||
= Formatter.instance.linkify(preset.text)
|
||||
%td
|
||||
= table_link_to 'pencil', t('admin.warning_presets.edit'), edit_admin_warning_preset_path(preset)
|
||||
= table_link_to 'trash', t('admin.warning_presets.delete'), admin_warning_preset_path(preset), method: :delete, data: { confirm: t('admin.accounts.are_you_sure') }
|
||||
@ -9,6 +9,7 @@
|
||||
= image_tag account.avatar.url, alt: '', width: 48, height: 48, class: 'u-photo'
|
||||
|
||||
.display-name
|
||||
%span{id: "default_account_display_name", style: "display:none;"}= account.username
|
||||
%bdi
|
||||
%strong.emojify.p-name= display_name(account, custom_emojify: true)
|
||||
%span
|
||||
|
||||
@ -9,13 +9,14 @@
|
||||
= f.input :email, wrapper: :with_label, input_html: { 'aria-label' => t('simple_form.labels.defaults.email') }, required: true, hint: false
|
||||
|
||||
.fields-group
|
||||
= f.input :password, wrapper: :with_label, input_html: { 'aria-label' => t('simple_form.labels.defaults.new_password'), :autocomplete => 'off' }, hint: false
|
||||
= f.input :current_password, wrapper: :with_label, input_html: { 'aria-label' => t('simple_form.labels.defaults.current_password'), :autocomplete => 'off' }, required: true
|
||||
|
||||
.fields-group
|
||||
= f.input :password, wrapper: :with_label, label: t('simple_form.labels.defaults.new_password'), input_html: { 'aria-label' => t('simple_form.labels.defaults.new_password'), :autocomplete => 'off' }, hint: false
|
||||
|
||||
.fields-group
|
||||
= f.input :password_confirmation, wrapper: :with_label, label: t('simple_form.labels.defaults.confirm_new_password'), input_html: { 'aria-label' => t('simple_form.labels.defaults.confirm_new_password'), :autocomplete => 'off' }
|
||||
|
||||
.fields-group
|
||||
= f.input :current_password, wrapper: :with_label, input_html: { 'aria-label' => t('simple_form.labels.defaults.current_password'), :autocomplete => 'off' }, required: true
|
||||
|
||||
.actions
|
||||
= f.button :button, t('generic.save_changes'), type: :submit
|
||||
|
||||
57
app/views/directories/index.html.haml
Normal file
57
app/views/directories/index.html.haml
Normal file
@ -0,0 +1,57 @@
|
||||
- content_for :page_title do
|
||||
= t('directories.explore_mastodon', title: site_title)
|
||||
|
||||
- content_for :header_tags do
|
||||
%meta{ name: 'description', content: t('directories.explanation') }
|
||||
|
||||
= opengraph 'og:site_name', t('about.hosted_on', domain: site_hostname)
|
||||
= opengraph 'og:type', 'website'
|
||||
= opengraph 'og:title', t('directories.explore_mastodon', title: site_title)
|
||||
= opengraph 'og:description', t('directories.explanation')
|
||||
= opengraph 'og:image', File.join(root_url, 'android-chrome-192x192.png')
|
||||
|
||||
.page-header
|
||||
%h1= t('directories.explore_mastodon', title: site_title)
|
||||
%p= t('directories.explanation')
|
||||
|
||||
.grid
|
||||
.column-0
|
||||
- if @accounts.empty?
|
||||
= nothing_here
|
||||
- else
|
||||
.directory
|
||||
%table.accounts-table
|
||||
%tbody
|
||||
- @accounts.each do |account|
|
||||
%tr
|
||||
%td= account_link_to account
|
||||
%td.accounts-table__count.optional
|
||||
= number_to_human account.statuses_count, strip_insignificant_zeros: true
|
||||
%small= t('accounts.posts', count: account.statuses_count).downcase
|
||||
%td.accounts-table__count.optional
|
||||
= number_to_human account.followers_count, strip_insignificant_zeros: true
|
||||
%small= t('accounts.followers', count: account.followers_count).downcase
|
||||
%td.accounts-table__count
|
||||
- if account.last_status_at.present?
|
||||
%time.time-ago{ datetime: account.last_status_at.iso8601, title: l(account.last_status_at) }= l account.last_status_at
|
||||
- else
|
||||
\-
|
||||
%small= t('accounts.last_active')
|
||||
|
||||
= paginate @accounts
|
||||
|
||||
.column-1
|
||||
- if @tags.empty?
|
||||
.nothing-here.nothing-here--flexible
|
||||
- else
|
||||
- @tags.each do |tag|
|
||||
.directory__tag{ class: tag.id == @tag&.id ? 'active' : nil }
|
||||
= link_to explore_hashtag_path(tag) do
|
||||
%h4
|
||||
= fa_icon 'hashtag'
|
||||
= tag.name
|
||||
%small= t('directories.people', count: tag.accounts_count)
|
||||
|
||||
.avatar-stack
|
||||
- tag.cached_sample_accounts.each do |account|
|
||||
= image_tag current_account&.user&.setting_auto_play_gif ? account.avatar_original_url : account.avatar_static_url, width: 48, height: 48, alt: '', class: 'account__avatar'
|
||||
@ -8,6 +8,11 @@
|
||||
.nav-left
|
||||
= link_to root_url, class: 'brand' do
|
||||
= image_tag asset_pack_path('logo_full.svg'), alt: 'Mastodon'
|
||||
|
||||
- if Setting.profile_directory
|
||||
= link_to t('directories.directory'), explore_path, class: 'nav-link optional'
|
||||
= link_to t('about.about_this'), about_more_path, class: 'nav-link optional'
|
||||
= link_to t('about.apps'), 'https://joinmastodon.org/apps', class: 'nav-link optional'
|
||||
.nav-center
|
||||
.nav-right
|
||||
- if user_signed_in?
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
%tr
|
||||
%td.column-cell.text-center.padded
|
||||
%h1= t 'notification_mailer.digest.title'
|
||||
%p.lead= t('notification_mailer.digest.body', since: l(@since.to_date, format: :short), instance: site_hostname)
|
||||
%p.lead= t('notification_mailer.digest.body', since: l((@me.user_current_sign_in_at || @since).to_date, format: :short), instance: site_hostname)
|
||||
%table.button{ align: 'center', cellspacing: 0, cellpadding: 0 }
|
||||
%tbody
|
||||
%tr
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<%= raw t('application_mailer.salutation', name: display_name(@me)) %>
|
||||
|
||||
<%= raw t('notification_mailer.digest.body', since: l(@since), instance: root_url) %>
|
||||
<%= raw t('notification_mailer.digest.body', since: l(@me.user_current_sign_in_at || @since), instance: root_url) %>
|
||||
<% @notifications.each do |notification| %>
|
||||
|
||||
* <%= raw t('notification_mailer.digest.mention', name: notification.from_account.acct) %>
|
||||
|
||||
@ -16,4 +16,6 @@
|
||||
.actions
|
||||
= f.button :button, t('remote_follow.proceed'), type: :submit
|
||||
|
||||
%p.hint.subtle-hint= t('remote_follow.no_account_html', sign_up_path: open_registrations? ? new_user_registration_path : 'https://joinmastodon.org/#getting-started')
|
||||
%p.hint.subtle-hint
|
||||
= t('remote_follow.reason_html', instance: site_hostname)
|
||||
= t('remote_follow.no_account_html', sign_up_path: open_registrations? ? new_user_registration_path : 'https://joinmastodon.org/#getting-started')
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
.form-container
|
||||
.follow-prompt
|
||||
%h2= t('remote_interaction.prompt')
|
||||
%h2= t("remote_interaction.#{@interaction_type}.prompt")
|
||||
|
||||
.public-layout
|
||||
.activity-stream.activity-stream--highlighted
|
||||
@ -9,9 +9,13 @@
|
||||
= simple_form_for @remote_follow, as: :remote_follow, url: remote_interaction_path(@status) do |f|
|
||||
= render 'shared/error_messages', object: @remote_follow
|
||||
|
||||
= hidden_field_tag :type, @interaction_type
|
||||
|
||||
= f.input :acct, placeholder: t('remote_follow.acct'), input_html: { autocapitalize: 'none', autocorrect: 'off' }
|
||||
|
||||
.actions
|
||||
= f.button :button, t('remote_interaction.proceed'), type: :submit
|
||||
= f.button :button, t("remote_interaction.#{@interaction_type}.proceed"), type: :submit
|
||||
|
||||
%p.hint.subtle-hint= t('remote_follow.no_account_html', sign_up_path: open_registrations? ? new_user_registration_path : 'https://joinmastodon.org/#getting-started')
|
||||
%p.hint.subtle-hint
|
||||
= t('remote_follow.reason_html', instance: site_hostname)
|
||||
= t('remote_follow.no_account_html', sign_up_path: open_registrations? ? new_user_registration_path : 'https://joinmastodon.org/#getting-started')
|
||||
|
||||
@ -16,6 +16,10 @@
|
||||
%th= t('exports.follows')
|
||||
%td= number_with_delimiter @export.total_follows
|
||||
%td= table_link_to 'download', t('exports.csv'), settings_exports_follows_path(format: :csv)
|
||||
%tr
|
||||
%th= t('exports.lists')
|
||||
%td= number_with_delimiter @export.total_lists
|
||||
%td= table_link_to 'download', t('exports.csv'), settings_exports_lists_path(format: :csv)
|
||||
%tr
|
||||
%th= t('accounts.followers', count: @export.total_followers)
|
||||
%td= number_with_delimiter @export.total_followers
|
||||
@ -28,6 +32,10 @@
|
||||
%th= t('exports.mutes')
|
||||
%td= number_with_delimiter @export.total_mutes
|
||||
%td= table_link_to 'download', t('exports.csv'), settings_exports_mutes_path(format: :csv)
|
||||
%tr
|
||||
%th= t('exports.domain_blocks')
|
||||
%td= number_with_delimiter @export.total_domain_blocks
|
||||
%td= table_link_to 'download', t('exports.csv'), settings_exports_domain_blocks_path(format: :csv)
|
||||
|
||||
%p.muted-hint= t('exports.archive_takeout.hint_html')
|
||||
|
||||
|
||||
@ -47,6 +47,9 @@
|
||||
= f.input :setting_boost_modal, as: :boolean, wrapper: :with_label
|
||||
= f.input :setting_delete_modal, as: :boolean, wrapper: :with_label
|
||||
|
||||
.fields-group
|
||||
= f.input :setting_aggregate_reblogs, as: :boolean, wrapper: :with_label
|
||||
|
||||
.fields-group
|
||||
= f.input :setting_auto_play_gif, as: :boolean, wrapper: :with_label
|
||||
= f.input :setting_expand_spoilers, as: :boolean, wrapper: :with_label
|
||||
|
||||
@ -14,10 +14,10 @@
|
||||
= render 'application/card', account: @account
|
||||
|
||||
.fields-row__column.fields-group.fields-row__column-6
|
||||
= f.input :avatar, wrapper: :with_label, input_html: { accept: AccountAvatar::IMAGE_MIME_TYPES.join(',') }, hint: t('simple_form.hints.defaults.avatar', dimensions: '400x400', size: number_to_human_size(AccountAvatar::LIMIT))
|
||||
|
||||
= f.input :header, wrapper: :with_label, input_html: { accept: AccountHeader::IMAGE_MIME_TYPES.join(',') }, hint: t('simple_form.hints.defaults.header', dimensions: '1500x500', size: number_to_human_size(AccountHeader::LIMIT))
|
||||
|
||||
= f.input :avatar, wrapper: :with_label, input_html: { accept: AccountAvatar::IMAGE_MIME_TYPES.join(',') }, hint: t('simple_form.hints.defaults.avatar', dimensions: '400x400', size: number_to_human_size(AccountAvatar::LIMIT))
|
||||
|
||||
%hr.spacer/
|
||||
|
||||
.fields-group
|
||||
@ -26,6 +26,10 @@
|
||||
.fields-group
|
||||
= f.input :bot, as: :boolean, wrapper: :with_label, hint: t('simple_form.hints.defaults.bot')
|
||||
|
||||
- if Setting.profile_directory
|
||||
.fields-group
|
||||
= f.input :discoverable, as: :boolean, wrapper: :with_label, hint: t('simple_form.hints.defaults.discoverable_html', min_followers: Account::MIN_FOLLOWERS_DISCOVERY, path: explore_path)
|
||||
|
||||
%hr.spacer/
|
||||
|
||||
.fields-row
|
||||
|
||||
@ -28,8 +28,8 @@
|
||||
= react_component :video, src: video.file.url(:original), preview: video.file.url(:small), sensitive: !current_account&.user&.show_all_media? && status.sensitive? || current_account&.user&.hide_all_media?, width: 670, height: 380, detailed: true, inline: true, alt: video.description
|
||||
- else
|
||||
= react_component :media_gallery, height: 380, sensitive: !current_account&.user&.show_all_media? && status.sensitive? || current_account&.user&.hide_all_media?, standalone: true, 'autoPlayGif': current_account&.user&.setting_auto_play_gif || autoplay, 'reduceMotion': current_account&.user&.setting_reduce_motion, media: status.media_attachments.map { |a| ActiveModelSerializers::SerializableResource.new(a, serializer: REST::MediaAttachmentSerializer).as_json }
|
||||
- elsif status.preview_cards.first
|
||||
= react_component :card, 'maxDescription': 160, card: ActiveModelSerializers::SerializableResource.new(status.preview_cards.first, serializer: REST::PreviewCardSerializer).as_json
|
||||
- elsif status.preview_card
|
||||
= react_component :card, 'maxDescription': 160, card: ActiveModelSerializers::SerializableResource.new(status.preview_card, serializer: REST::PreviewCardSerializer).as_json
|
||||
|
||||
.detailed-status__meta
|
||||
%data.dt-published{ value: status.created_at.to_time.iso8601 }
|
||||
@ -43,7 +43,7 @@
|
||||
- else
|
||||
= link_to status.application.name, status.application.website, class: 'detailed-status__application', target: '_blank', rel: 'noopener'
|
||||
·
|
||||
= link_to remote_interaction_path(status), class: 'modal-button detailed-status__link' do
|
||||
= link_to remote_interaction_path(status, type: :reply), class: 'modal-button detailed-status__link' do
|
||||
= fa_icon('reply')
|
||||
%span.detailed-status__reblogs>= number_to_human status.replies_count, strip_insignificant_zeros: true
|
||||
= " "
|
||||
@ -55,12 +55,12 @@
|
||||
%span.detailed-status__link<
|
||||
= fa_icon('lock')
|
||||
- else
|
||||
= link_to remote_interaction_path(status), class: 'modal-button detailed-status__link' do
|
||||
= link_to remote_interaction_path(status, type: :reblog), class: 'modal-button detailed-status__link' do
|
||||
= fa_icon('retweet')
|
||||
%span.detailed-status__reblogs>= number_to_human status.reblogs_count, strip_insignificant_zeros: true
|
||||
= " "
|
||||
·
|
||||
= link_to remote_interaction_path(status), class: 'modal-button detailed-status__link' do
|
||||
= link_to remote_interaction_path(status, type: :favourite), class: 'modal-button detailed-status__link' do
|
||||
= fa_icon('star')
|
||||
%span.detailed-status__favorites>= number_to_human status.favourites_count, strip_insignificant_zeros: true
|
||||
= " "
|
||||
|
||||
@ -26,26 +26,28 @@
|
||||
%a.status__content__spoiler-link{ href: '#' }= t('statuses.show_more')
|
||||
.e-content{ lang: status.language, style: "display: #{!current_account&.user&.setting_expand_spoilers && status.spoiler_text? ? 'none' : 'block'}; direction: #{rtl_status?(status) ? 'rtl' : 'ltr'}" }= Formatter.instance.format(status, custom_emojify: true, autoplay: autoplay)
|
||||
|
||||
- unless status.media_attachments.empty?
|
||||
- if !status.media_attachments.empty?
|
||||
- if status.media_attachments.first.video?
|
||||
- video = status.media_attachments.first
|
||||
= react_component :video, src: video.file.url(:original), preview: video.file.url(:small), sensitive: !current_account&.user&.show_all_media? && status.sensitive? || current_account&.user&.hide_all_media?, width: 610, height: 343, inline: true, alt: video.description
|
||||
- else
|
||||
= react_component :media_gallery, height: 343, sensitive: !current_account&.user&.show_all_media? && status.sensitive? || current_account&.user&.hide_all_media?, 'autoPlayGif': current_account&.user&.setting_auto_play_gif || autoplay, media: status.media_attachments.map { |a| ActiveModelSerializers::SerializableResource.new(a, serializer: REST::MediaAttachmentSerializer).as_json }
|
||||
- elsif status.preview_card
|
||||
= react_component :card, 'maxDescription': 160, card: ActiveModelSerializers::SerializableResource.new(status.preview_card, serializer: REST::PreviewCardSerializer).as_json
|
||||
|
||||
.status__action-bar
|
||||
.status__action-bar__counter
|
||||
= link_to remote_interaction_path(status), class: 'status__action-bar-button icon-button modal-button', style: 'font-size: 18px; width: 23.1429px; height: 23.1429px; line-height: 23.15px;' do
|
||||
= link_to remote_interaction_path(status, type: :reply), class: 'status__action-bar-button icon-button modal-button', style: 'font-size: 18px; width: 23.1429px; height: 23.1429px; line-height: 23.15px;' do
|
||||
= fa_icon 'reply fw'
|
||||
.status__action-bar__counter__label= obscured_counter status.replies_count
|
||||
= link_to remote_interaction_path(status), class: 'status__action-bar-button icon-button modal-button', style: 'font-size: 18px; width: 23.1429px; height: 23.1429px; line-height: 23.15px;' do
|
||||
= link_to remote_interaction_path(status, type: :reblog), class: 'status__action-bar-button icon-button modal-button', style: 'font-size: 18px; width: 23.1429px; height: 23.1429px; line-height: 23.15px;' do
|
||||
- if status.public_visibility? || status.unlisted_visibility?
|
||||
= fa_icon 'retweet fw'
|
||||
- elsif status.private_visibility?
|
||||
= fa_icon 'lock fw'
|
||||
- else
|
||||
= fa_icon 'envelope fw'
|
||||
= link_to remote_interaction_path(status), class: 'status__action-bar-button icon-button modal-button', style: 'font-size: 18px; width: 23.1429px; height: 23.1429px; line-height: 23.15px;' do
|
||||
= link_to remote_interaction_path(status, type: :favourite), class: 'status__action-bar-button icon-button modal-button', style: 'font-size: 18px; width: 23.1429px; height: 23.1429px; line-height: 23.15px;' do
|
||||
= fa_icon 'star fw'
|
||||
- if status.local_only
|
||||
%span.status__action-bar-button.icon-button.disabled{style: 'font-size: 18px; width: 23.1429px; height: 23.1429px; line-height: 23.15px;'}<
|
||||
|
||||
@ -55,8 +55,12 @@
|
||||
%tbody
|
||||
%tr
|
||||
%td.button-primary
|
||||
= link_to confirmation_url(@resource, confirmation_token: @token) do
|
||||
%span= t 'devise.mailer.confirmation_instructions.action'
|
||||
- if @resource.created_by_application
|
||||
= link_to confirmation_url(@resource, confirmation_token: @token, redirect_to_app: 'true') do
|
||||
%span= t 'devise.mailer.confirmation_instructions.action_with_app', app: @resource.created_by_application.name
|
||||
- else
|
||||
= link_to confirmation_url(@resource, confirmation_token: @token) do
|
||||
%span= t 'devise.mailer.confirmation_instructions.action'
|
||||
|
||||
%table.email-table{ cellspacing: 0, cellpadding: 0 }
|
||||
%tbody
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
|
||||
<%= t 'devise.mailer.confirmation_instructions.explanation', host: site_hostname %>
|
||||
|
||||
=> <%= confirmation_url(@resource, confirmation_token: @token) %>
|
||||
=> <%= confirmation_url(@resource, confirmation_token: @token, redirect_to_app: @resource.created_by_application ? 'true' : nil) %>
|
||||
|
||||
<%= strip_tags(t('devise.mailer.confirmation_instructions.extra_html', terms_path: about_more_url, policy_path: terms_url)) %>
|
||||
|
||||
|
||||
63
app/views/user_mailer/warning.html.haml
Normal file
63
app/views/user_mailer/warning.html.haml
Normal file
@ -0,0 +1,63 @@
|
||||
%table.email-table{ cellspacing: 0, cellpadding: 0 }
|
||||
%tbody
|
||||
%tr
|
||||
%td.email-body
|
||||
.email-container
|
||||
%table.content-section{ cellspacing: 0, cellpadding: 0 }
|
||||
%tbody
|
||||
%tr
|
||||
%td.content-cell.hero
|
||||
.email-row
|
||||
.col-6
|
||||
%table.column{ cellspacing: 0, cellpadding: 0 }
|
||||
%tbody
|
||||
%tr
|
||||
%td.column-cell.text-center.padded
|
||||
%table.hero-icon.alert-icon{ align: 'center', cellspacing: 0, cellpadding: 0 }
|
||||
%tbody
|
||||
%tr
|
||||
%td
|
||||
= image_tag full_pack_url('icon_warning.png'), alt: ''
|
||||
|
||||
%h1= t "user_mailer.warning.title.#{@warning.action}"
|
||||
|
||||
%table.email-table{ cellspacing: 0, cellpadding: 0 }
|
||||
%tbody
|
||||
%tr
|
||||
%td.email-body
|
||||
.email-container
|
||||
%table.content-section{ cellspacing: 0, cellpadding: 0 }
|
||||
%tbody
|
||||
%tr
|
||||
%td.content-cell.content-start
|
||||
.email-row
|
||||
.col-6
|
||||
%table.column{ cellspacing: 0, cellpadding: 0 }
|
||||
%tbody
|
||||
%tr
|
||||
%td.column-cell.text-center
|
||||
- unless @warning.none_action?
|
||||
%p= t "user_mailer.warning.explanation.#{@warning.action}"
|
||||
|
||||
- unless @warning.text.blank?
|
||||
= Formatter.instance.linkify(@warning.text)
|
||||
|
||||
%table.email-table{ cellspacing: 0, cellpadding: 0 }
|
||||
%tbody
|
||||
%tr
|
||||
%td.email-body
|
||||
.email-container
|
||||
%table.content-section{ cellspacing: 0, cellpadding: 0 }
|
||||
%tbody
|
||||
%tr
|
||||
%td.content-cell
|
||||
%table.column{ cellspacing: 0, cellpadding: 0 }
|
||||
%tbody
|
||||
%tr
|
||||
%td.column-cell.button-cell
|
||||
%table.button{ align: 'center', cellspacing: 0, cellpadding: 0 }
|
||||
%tbody
|
||||
%tr
|
||||
%td.button-primary
|
||||
= link_to about_more_url do
|
||||
%span= t 'user_mailer.warning.review_server_policies'
|
||||
9
app/views/user_mailer/warning.text.erb
Normal file
9
app/views/user_mailer/warning.text.erb
Normal file
@ -0,0 +1,9 @@
|
||||
<%= t "user_mailer.warning.title.#{@warning.action}" %>
|
||||
|
||||
===
|
||||
|
||||
<% unless @warning.none_action? %>
|
||||
<%= t "user_mailer.warning.explanation.#{@warning.action}" %>
|
||||
|
||||
<% end %>
|
||||
<%= @warning.text %>
|
||||
@ -136,8 +136,6 @@
|
||||
%ul
|
||||
%li
|
||||
%span= t 'user_mailer.welcome.tip_mobile_webapp'
|
||||
%li
|
||||
%span= t 'user_mailer.welcome.tip_bridge_html', bridge_url: 'https://bridge.joinmastodon.org'
|
||||
%li
|
||||
%span= t 'user_mailer.welcome.tip_following'
|
||||
%li
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
|
||||
===
|
||||
|
||||
<%= t 'user_mailer.welcome.full_handle' %> (<%= "@#{@resource.account.username}@#{@instance}" %>)
|
||||
<%= t 'user_mailer.welcome.full_handle' %> (<%= "@#{@resource.account.local_username_and_domain}" %>)
|
||||
<%= t 'user_mailer.welcome.full_handle_hint', instance: @instance %>
|
||||
|
||||
---
|
||||
@ -24,7 +24,6 @@
|
||||
<%= t 'user_mailer.welcome.tips' %>
|
||||
|
||||
* <%= t 'user_mailer.welcome.tip_mobile_webapp' %>
|
||||
* <%= strip_tags(t('user_mailer.welcome.tip_bridge_html')) %> (https://bridge.joinmastodon.org)
|
||||
* <%= t 'user_mailer.welcome.tip_following' %>
|
||||
* <%= t 'user_mailer.welcome.tip_local_timeline', instance: @instance %>
|
||||
* <%= t 'user_mailer.welcome.tip_federated_timeline' %>
|
||||
|
||||
Reference in New Issue
Block a user