~cytrogen/masto-fe

7b15f4006adb5f8f04d83174532c30eeb78757b0 — Claire 3 years ago d874a7a + 46483ae
Merge branch 'main' into glitch-soc/merge-upstream
M app/controllers/auth/registrations_controller.rb => app/controllers/auth/registrations_controller.rb +1 -1
@@ 47,7 47,7 @@ class Auth::RegistrationsController < Devise::RegistrationsController
    super(hash)

    resource.locale                 = I18n.locale
    resource.invite_code            = params[:invite_code] if resource.invite_code.blank?
    resource.invite_code            = @invite&.code if resource.invite_code.blank?
    resource.registration_form_time = session[:registration_form_time]
    resource.sign_up_ip             = request.remote_ip


M app/helpers/home_helper.rb => app/helpers/home_helper.rb +1 -1
@@ 8,7 8,7 @@ module HomeHelper
  end

  def account_link_to(account, button = '', path: nil)
    content_tag(:div, class: 'account') do
    content_tag(:div, class: 'account account--minimal') do
      content_tag(:div, class: 'account__wrapper') do
        section = if account.nil?
                    content_tag(:div, class: 'account__display-name') do

M app/javascript/mastodon/components/account.jsx => app/javascript/mastodon/components/account.jsx +17 -13
@@ 1,4 1,4 @@
import React, { Fragment } from 'react';
import React from 'react';
import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
import Avatar from './avatar';


@@ 13,6 13,7 @@ import { Link } from 'react-router-dom';
import { counterRenderer } from 'mastodon/components/common_counter';
import ShortNumber from 'mastodon/components/short_number';
import Icon from 'mastodon/components/icon';
import classNames from 'classnames';

const messages = defineMessages({
  follow: { id: 'account.follow', defaultMessage: 'Follow' },


@@ 57,6 58,7 @@ class Account extends ImmutablePureComponent {
    onMuteNotifications: PropTypes.func.isRequired,
    intl: PropTypes.object.isRequired,
    hidden: PropTypes.bool,
    minimal: PropTypes.bool,
    actionIcon: PropTypes.string,
    actionTitle: PropTypes.string,
    defaultAction: PropTypes.string,


@@ 92,14 94,14 @@ class Account extends ImmutablePureComponent {
  };

  render () {
    const { account, intl, hidden, onActionClick, actionIcon, actionTitle, defaultAction, size } = this.props;
    const { account, intl, hidden, onActionClick, actionIcon, actionTitle, defaultAction, size, minimal } = this.props;

    if (!account) {
      return (
        <div className='account'>
        <div className={classNames('account', { 'account--minimal': minimal })}>
          <div className='account__wrapper'>
            <div className='account__display-name'>
              <div className='account__avatar-wrapper'><Skeleton width={36} height={36} /></div>
              <div className='account__avatar-wrapper'><Skeleton width={size} height={size} /></div>

              <div>
                <DisplayName />


@@ 113,10 115,10 @@ class Account extends ImmutablePureComponent {

    if (hidden) {
      return (
        <Fragment>
        <>
          {account.get('display_name')}
          {account.get('username')}
        </Fragment>
        </>
      );
    }



@@ 144,10 146,10 @@ class Account extends ImmutablePureComponent {
          hidingNotificationsButton = <IconButton active icon='bell-slash' title={intl.formatMessage(messages.mute_notifications, { name: account.get('username')  })} onClick={this.handleMuteNotifications} />;
        }
        buttons = (
          <Fragment>
          <>
            <IconButton active icon='volume-up' title={intl.formatMessage(messages.unmute, { name: account.get('username') })} onClick={this.handleMute} />
            {hidingNotificationsButton}
          </Fragment>
          </>
        );
      } else if (defaultAction === 'mute') {
        buttons = <IconButton icon='volume-off' title={intl.formatMessage(messages.mute, { name: account.get('username') })} onClick={this.handleMute} />;


@@ 173,7 175,7 @@ class Account extends ImmutablePureComponent {
    }

    return (
      <div className='account'>
      <div className={classNames('account', { 'account--minimal': minimal })}>
        <div className='account__wrapper'>
          <Link key={account.get('id')} className='account__display-name' title={account.get('acct')} to={`/@${account.get('acct')}`}>
            <div className='account__avatar-wrapper'>


@@ 182,13 184,15 @@ class Account extends ImmutablePureComponent {

            <div>
              <DisplayName account={account} />
              <ShortNumber value={account.get('followers_count')} renderer={counterRenderer('followers')} /> {verification} {muteTimeRemaining}
              {!minimal && <><ShortNumber value={account.get('followers_count')} renderer={counterRenderer('followers')} /> {verification} {muteTimeRemaining}</>}
            </div>
          </Link>

          <div className='account__relationship'>
            {buttons}
          </div>
          {!minimal && (
            <div className='account__relationship'>
              {buttons}
            </div>
          )}
        </div>
      </div>
    );

M app/javascript/mastodon/components/server_banner.jsx => app/javascript/mastodon/components/server_banner.jsx +1 -1
@@ 59,7 59,7 @@ class ServerBanner extends React.PureComponent {
          <div className='server-banner__meta__column'>
            <h4><FormattedMessage id='server_banner.administered_by' defaultMessage='Administered by:' /></h4>

            <Account id={server.getIn(['contact', 'account', 'id'])} size={36} />
            <Account id={server.getIn(['contact', 'account', 'id'])} size={36} minimal />
          </div>

          <div className='server-banner__meta__column'>

M app/javascript/mastodon/features/about/index.jsx => app/javascript/mastodon/features/about/index.jsx +1 -1
@@ 123,7 123,7 @@ class About extends React.PureComponent {
            <div className='about__meta__column'>
              <h4><FormattedMessage id='server_banner.administered_by' defaultMessage='Administered by:' /></h4>

              <Account id={server.getIn(['contact', 'account', 'id'])} size={36} />
              <Account id={server.getIn(['contact', 'account', 'id'])} size={36} minimal />
            </div>

            <hr className='about__meta__divider' />

M app/javascript/styles/mastodon/components.scss => app/javascript/styles/mastodon/components.scss +12 -9
@@ 1427,15 1427,6 @@ body > [data-popper-placement] {
  padding: 16px;
  border-bottom: 1px solid lighten($ui-base-color, 8%);

  &.compact {
    padding: 0;
    border-bottom: 0;

    .account__avatar-wrapper {
      margin-inline-start: 0;
    }
  }

  .account__display-name {
    flex: 1 1 auto;
    display: flex;


@@ 1455,6 1446,18 @@ body > [data-popper-placement] {
    }
  }

  &--minimal {
    .account__display-name {
      .display-name {
        margin-bottom: 0;
      }

      .display-name strong {
        display: block;
      }
    }
  }

  &__note {
    white-space: nowrap;
    overflow: hidden;

M app/workers/scheduler/indexing_scheduler.rb => app/workers/scheduler/indexing_scheduler.rb +4 -6
@@ 14,12 14,10 @@ class Scheduler::IndexingScheduler

    indexes.each do |type|
      with_redis do |redis|
        redis.sscan_each("chewy:queue:#{type.name}", count: SCAN_BATCH_SIZE) do |ids|
          redis.pipelined do
            ids.each_slice(IMPORT_BATCH_SIZE) do |slice_ids|
              type.import!(slice_ids)
              redis.srem("chewy:queue:#{type.name}", slice_ids)
            end
        redis.sscan_each("chewy:queue:#{type.name}", count: SCAN_BATCH_SIZE).each_slice(IMPORT_BATCH_SIZE) do |ids|
          type.import!(ids)
          redis.pipelined do |pipeline|
            pipeline.srem("chewy:queue:#{type.name}", ids)
          end
        end
      end