def batch
authorize :account, :index?
- @form = Form::AccountBatch.new(form_account_batch_params.merge(current_account: current_account, action: action_from_button))
+ @form = Form::AccountBatch.new(form_account_batch_params)
+ @form.current_account = current_account
+ @form.action = action_from_button
+ @form.select_all_matching = params[:select_all_matching]
+ @form.query = filtered_accounts
@form.save
rescue ActionController::ParameterMissing
flash[:alert] = I18n.t('admin.accounts.no_account_selected')
import ready from '../mastodon/ready';
ready(() => {
- const domainBlockSeverityInput = document.getElementById('domain_block_severity');
- if (domainBlockSeverityInput) onDomainBlockSeverityChange(domainBlockSeverityInput);
-
- const enableBootstrapTimelineAccounts = document.getElementById('form_admin_settings_enable_bootstrap_timeline_accounts');
- if (enableBootstrapTimelineAccounts) onEnableBootstrapTimelineAccountsChange(enableBootstrapTimelineAccounts);
-
- const registrationMode = document.getElementById('form_admin_settings_registrations_mode');
- if (registrationMode) onChangeRegistrationMode(registrationMode);
-
- document.querySelector('a#add-instance-button')?.addEventListener('click', (e) => {
- const domain = document.getElementById('by_domain')?.value;
-
- if (domain) {
- const url = new URL(event.target.href);
- url.searchParams.set('_domain', domain);
- e.target.href = url;
- }
- });
-
const React = require('react');
const ReactDOM = require('react-dom');
}
}
+ &__select-all {
+ background: $ui-base-color;
+ height: 47px;
+ align-items: center;
+ justify-content: center;
+ border: 1px solid darken($ui-base-color, 8%);
+ border-top: 0;
+ color: $secondary-text-color;
+ display: none;
+
+ &.active {
+ display: flex;
+ }
+
+ .selected,
+ .not-selected {
+ display: none;
+
+ &.active {
+ display: block;
+ }
+ }
+
+ strong {
+ font-weight: 700;
+ }
+
+ span {
+ padding: 8px;
+ display: inline-block;
+ }
+
+ button {
+ background: transparent;
+ border: 0;
+ font: inherit;
+ color: $highlight-text-color;
+ border-radius: 4px;
+ font-weight: 700;
+ padding: 8px;
+
+ &:hover,
+ &:focus,
+ &:active {
+ background: lighten($ui-base-color, 8%);
+ }
+ }
+ }
+
&__form {
padding: 16px;
border: 1px solid darken($ui-base-color, 8%);
#
# id :bigint(8) not null, primary key
# custom_filter_id :bigint(8) not null
-# status_id :bigint(8) default(""), not null
+# status_id :bigint(8) not null
# created_at :datetime not null
# updated_at :datetime not null
#
include AccountableConcern
include Payloadable
- attr_accessor :account_ids, :action, :current_account
+ attr_accessor :account_ids, :action, :current_account,
+ :select_all_matching, :query
def save
case action
end
def accounts
- Account.where(id: account_ids)
+ if select_all_matching?
+ query
+ else
+ Account.where(id: account_ids)
+ end
end
def approve!
log_action(:approve, account.user)
account.user.approve!
end
+
+ def select_all_matching?
+ select_all_matching == '1'
+ end
end
= form_for(@form, url: batch_admin_accounts_path) do |f|
= hidden_field_tag :page, params[:page] || 1
+ = hidden_field_tag :select_all_matching, '0'
- AccountFilter::KEYS.each do |key|
= hidden_field_tag key, params[key] if params[key].present?
= f.button safe_join([fa_icon('times'), t('admin.accounts.reject')]), name: :reject, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') }
= f.button safe_join([fa_icon('lock'), t('admin.accounts.perform_full_suspension')]), name: :suspend, class: 'table-action-link', type: :submit, data: { confirm: t('admin.reports.are_you_sure') }
+ - if true || @accounts.total_count > @accounts.size
+ .batch-table__select-all
+ .not-selected.active
+ %span= t('generic.all_items_on_page_selected_html', count: @accounts.size)
+ %button{ type: 'button' }= t('generic.select_all_matching_items', count: @accounts.total_count)
+ .selected
+ %span= t('generic.all_matching_items_selected_html', count: @accounts.total_count)
+ %button{ type: 'button' }= t('generic.deselect')
.batch-table__body
- if @accounts.empty?
= nothing_here 'nothing-here--under-tabs'
trending_now: Trending now
generic:
all: All
+ all_items_on_page_selected_html:
+ one: "<strong>%{count}</strong> item on this page is selected."
+ other: All <strong>%{count}</strong> items on this page are selected.
+ all_matching_items_selected_html:
+ one: "<strong>%{count}</strong> item matching your search is selected."
+ other: All <strong>%{count}</strong> items matching your search are selected.
changes_saved_msg: Changes successfully saved!
copy: Copy
delete: Delete
+ deselect: Deselect all
none: None
order_by: Order by
save_changes: Save changes
+ select_all_matching_items:
+ one: Select %{count} item matching your search.
+ other: Select all %{count} items matching your search.
today: today
validation_errors:
one: Something isn't quite right yet! Please review the error below