Merge branch 'master' into glitch-soc/merge-upstream
This commit is contained in:
		
						commit
						98bb6815a7
					
				
							
								
								
									
										4
									
								
								Gemfile
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								Gemfile
									
									
									
									
									
								
							@ -5,7 +5,7 @@ ruby '>= 2.3.0', '< 2.6.0'
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
gem 'pkg-config', '~> 1.3'
 | 
					gem 'pkg-config', '~> 1.3'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
gem 'puma', '~> 3.11'
 | 
					gem 'puma', '~> 3.12'
 | 
				
			||||||
gem 'rails', '~> 5.2.1'
 | 
					gem 'rails', '~> 5.2.1'
 | 
				
			||||||
gem 'thor', '~> 0.20'
 | 
					gem 'thor', '~> 0.20'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -117,7 +117,7 @@ group :test do
 | 
				
			|||||||
  gem 'rspec-sidekiq', '~> 3.0'
 | 
					  gem 'rspec-sidekiq', '~> 3.0'
 | 
				
			||||||
  gem 'simplecov', '~> 0.16', require: false
 | 
					  gem 'simplecov', '~> 0.16', require: false
 | 
				
			||||||
  gem 'webmock', '~> 3.4'
 | 
					  gem 'webmock', '~> 3.4'
 | 
				
			||||||
  gem 'parallel_tests', '~> 2.21'
 | 
					  gem 'parallel_tests', '~> 2.23'
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
group :development do
 | 
					group :development do
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										12
									
								
								Gemfile.lock
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								Gemfile.lock
									
									
									
									
									
								
							@ -373,7 +373,7 @@ GEM
 | 
				
			|||||||
      addressable (~> 2.3)
 | 
					      addressable (~> 2.3)
 | 
				
			||||||
      nokogiri (~> 1.5)
 | 
					      nokogiri (~> 1.5)
 | 
				
			||||||
      omniauth (~> 1.2)
 | 
					      omniauth (~> 1.2)
 | 
				
			||||||
    omniauth-saml (1.10.0)
 | 
					    omniauth-saml (1.10.1)
 | 
				
			||||||
      omniauth (~> 1.3, >= 1.3.2)
 | 
					      omniauth (~> 1.3, >= 1.3.2)
 | 
				
			||||||
      ruby-saml (~> 1.7)
 | 
					      ruby-saml (~> 1.7)
 | 
				
			||||||
    orm_adapter (0.5.0)
 | 
					    orm_adapter (0.5.0)
 | 
				
			||||||
@ -392,7 +392,7 @@ GEM
 | 
				
			|||||||
      av (~> 0.9.0)
 | 
					      av (~> 0.9.0)
 | 
				
			||||||
      paperclip (>= 2.5.2)
 | 
					      paperclip (>= 2.5.2)
 | 
				
			||||||
    parallel (1.12.1)
 | 
					    parallel (1.12.1)
 | 
				
			||||||
    parallel_tests (2.21.3)
 | 
					    parallel_tests (2.23.0)
 | 
				
			||||||
      parallel
 | 
					      parallel
 | 
				
			||||||
    parser (2.5.1.2)
 | 
					    parser (2.5.1.2)
 | 
				
			||||||
      ast (~> 2.4.0)
 | 
					      ast (~> 2.4.0)
 | 
				
			||||||
@ -421,7 +421,7 @@ GEM
 | 
				
			|||||||
    pry-rails (0.3.6)
 | 
					    pry-rails (0.3.6)
 | 
				
			||||||
      pry (>= 0.10.4)
 | 
					      pry (>= 0.10.4)
 | 
				
			||||||
    public_suffix (3.0.3)
 | 
					    public_suffix (3.0.3)
 | 
				
			||||||
    puma (3.11.4)
 | 
					    puma (3.12.0)
 | 
				
			||||||
    pundit (1.1.0)
 | 
					    pundit (1.1.0)
 | 
				
			||||||
      activesupport (>= 3.0.0)
 | 
					      activesupport (>= 3.0.0)
 | 
				
			||||||
    raabro (1.1.6)
 | 
					    raabro (1.1.6)
 | 
				
			||||||
@ -535,7 +535,7 @@ GEM
 | 
				
			|||||||
      ruby-progressbar (~> 1.7)
 | 
					      ruby-progressbar (~> 1.7)
 | 
				
			||||||
      unicode-display_width (~> 1.0, >= 1.0.1)
 | 
					      unicode-display_width (~> 1.0, >= 1.0.1)
 | 
				
			||||||
    ruby-progressbar (1.9.0)
 | 
					    ruby-progressbar (1.9.0)
 | 
				
			||||||
    ruby-saml (1.7.2)
 | 
					    ruby-saml (1.9.0)
 | 
				
			||||||
      nokogiri (>= 1.5.10)
 | 
					      nokogiri (>= 1.5.10)
 | 
				
			||||||
    rufus-scheduler (3.5.2)
 | 
					    rufus-scheduler (3.5.2)
 | 
				
			||||||
      fugit (~> 1.1, >= 1.1.5)
 | 
					      fugit (~> 1.1, >= 1.1.5)
 | 
				
			||||||
@ -724,7 +724,7 @@ DEPENDENCIES
 | 
				
			|||||||
  ox (~> 2.10)
 | 
					  ox (~> 2.10)
 | 
				
			||||||
  paperclip (~> 6.0)
 | 
					  paperclip (~> 6.0)
 | 
				
			||||||
  paperclip-av-transcoder (~> 0.6)
 | 
					  paperclip-av-transcoder (~> 0.6)
 | 
				
			||||||
  parallel_tests (~> 2.21)
 | 
					  parallel_tests (~> 2.23)
 | 
				
			||||||
  pg (~> 1.1)
 | 
					  pg (~> 1.1)
 | 
				
			||||||
  pghero (~> 2.2)
 | 
					  pghero (~> 2.2)
 | 
				
			||||||
  pkg-config (~> 1.3)
 | 
					  pkg-config (~> 1.3)
 | 
				
			||||||
@ -733,7 +733,7 @@ DEPENDENCIES
 | 
				
			|||||||
  private_address_check (~> 0.5)
 | 
					  private_address_check (~> 0.5)
 | 
				
			||||||
  pry-byebug (~> 3.6)
 | 
					  pry-byebug (~> 3.6)
 | 
				
			||||||
  pry-rails (~> 0.3)
 | 
					  pry-rails (~> 0.3)
 | 
				
			||||||
  puma (~> 3.11)
 | 
					  puma (~> 3.12)
 | 
				
			||||||
  pundit (~> 1.1)
 | 
					  pundit (~> 1.1)
 | 
				
			||||||
  rack-attack (~> 5.4)
 | 
					  rack-attack (~> 5.4)
 | 
				
			||||||
  rack-cors (~> 1.0)
 | 
					  rack-cors (~> 1.0)
 | 
				
			||||||
 | 
				
			|||||||
@ -36,6 +36,8 @@ const messages = defineMessages({
 | 
				
			|||||||
  redraftConfirm: { id: 'confirmations.redraft.confirm', defaultMessage: 'Delete & redraft' },
 | 
					  redraftConfirm: { id: 'confirmations.redraft.confirm', defaultMessage: 'Delete & redraft' },
 | 
				
			||||||
  redraftMessage: { id: 'confirmations.redraft.message', defaultMessage: 'Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.' },
 | 
					  redraftMessage: { id: 'confirmations.redraft.message', defaultMessage: 'Are you sure you want to delete this status and re-draft it? Favourites and boosts will be lost, and replies to the original post will be orphaned.' },
 | 
				
			||||||
  blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' },
 | 
					  blockConfirm: { id: 'confirmations.block.confirm', defaultMessage: 'Block' },
 | 
				
			||||||
 | 
					  replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' },
 | 
				
			||||||
 | 
					  replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' },
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const makeMapStateToProps = () => {
 | 
					const makeMapStateToProps = () => {
 | 
				
			||||||
@ -51,7 +53,18 @@ const makeMapStateToProps = () => {
 | 
				
			|||||||
const mapDispatchToProps = (dispatch, { intl }) => ({
 | 
					const mapDispatchToProps = (dispatch, { intl }) => ({
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  onReply (status, router) {
 | 
					  onReply (status, router) {
 | 
				
			||||||
    dispatch(replyCompose(status, router));
 | 
					    dispatch((_, getState) => {
 | 
				
			||||||
 | 
					      let state = getState();
 | 
				
			||||||
 | 
					      if (state.getIn(['compose', 'text']).trim().length !== 0) {
 | 
				
			||||||
 | 
					        dispatch(openModal('CONFIRM', {
 | 
				
			||||||
 | 
					          message: intl.formatMessage(messages.replyMessage),
 | 
				
			||||||
 | 
					          confirm: intl.formatMessage(messages.replyConfirm),
 | 
				
			||||||
 | 
					          onConfirm: () => dispatch(replyCompose(status, router)),
 | 
				
			||||||
 | 
					        }));
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        dispatch(replyCompose(status, router));
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  onModalReblog (status) {
 | 
					  onModalReblog (status) {
 | 
				
			||||||
 | 
				
			|||||||
@ -54,6 +54,8 @@ const messages = defineMessages({
 | 
				
			|||||||
  revealAll: { id: 'status.show_more_all', defaultMessage: 'Show more for all' },
 | 
					  revealAll: { id: 'status.show_more_all', defaultMessage: 'Show more for all' },
 | 
				
			||||||
  hideAll: { id: 'status.show_less_all', defaultMessage: 'Show less for all' },
 | 
					  hideAll: { id: 'status.show_less_all', defaultMessage: 'Show less for all' },
 | 
				
			||||||
  detailedStatus: { id: 'status.detailed_status', defaultMessage: 'Detailed conversation view' },
 | 
					  detailedStatus: { id: 'status.detailed_status', defaultMessage: 'Detailed conversation view' },
 | 
				
			||||||
 | 
					  replyConfirm: { id: 'confirmations.reply.confirm', defaultMessage: 'Reply' },
 | 
				
			||||||
 | 
					  replyMessage: { id: 'confirmations.reply.message', defaultMessage: 'Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?' },
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const makeMapStateToProps = () => {
 | 
					const makeMapStateToProps = () => {
 | 
				
			||||||
@ -98,6 +100,7 @@ const makeMapStateToProps = () => {
 | 
				
			|||||||
      status,
 | 
					      status,
 | 
				
			||||||
      ancestorsIds,
 | 
					      ancestorsIds,
 | 
				
			||||||
      descendantsIds,
 | 
					      descendantsIds,
 | 
				
			||||||
 | 
					      askReplyConfirmation: state.getIn(['compose', 'text']).trim().length !== 0,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -119,6 +122,7 @@ class Status extends ImmutablePureComponent {
 | 
				
			|||||||
    ancestorsIds: ImmutablePropTypes.list,
 | 
					    ancestorsIds: ImmutablePropTypes.list,
 | 
				
			||||||
    descendantsIds: ImmutablePropTypes.list,
 | 
					    descendantsIds: ImmutablePropTypes.list,
 | 
				
			||||||
    intl: PropTypes.object.isRequired,
 | 
					    intl: PropTypes.object.isRequired,
 | 
				
			||||||
 | 
					    askReplyConfirmation: PropTypes.bool,
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  state = {
 | 
					  state = {
 | 
				
			||||||
@ -157,7 +161,16 @@ class Status extends ImmutablePureComponent {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handleReplyClick = (status) => {
 | 
					  handleReplyClick = (status) => {
 | 
				
			||||||
    this.props.dispatch(replyCompose(status, this.context.router.history));
 | 
					    let { askReplyConfirmation, dispatch, intl } = this.props;
 | 
				
			||||||
 | 
					    if (askReplyConfirmation) {
 | 
				
			||||||
 | 
					      dispatch(openModal('CONFIRM', {
 | 
				
			||||||
 | 
					        message: intl.formatMessage(messages.replyMessage),
 | 
				
			||||||
 | 
					        confirm: intl.formatMessage(messages.replyConfirm),
 | 
				
			||||||
 | 
					        onConfirm: () => dispatch(replyCompose(status, this.context.router.history)),
 | 
				
			||||||
 | 
					      }));
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      dispatch(replyCompose(status, this.context.router.history));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handleModalReblog = (status) => {
 | 
					  handleModalReblog = (status) => {
 | 
				
			||||||
 | 
				
			|||||||
@ -12,6 +12,7 @@ class LanguageDetector
 | 
				
			|||||||
  def detect(text, account)
 | 
					  def detect(text, account)
 | 
				
			||||||
    input_text = prepare_text(text)
 | 
					    input_text = prepare_text(text)
 | 
				
			||||||
    return if input_text.blank?
 | 
					    return if input_text.blank?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    detect_language_code(input_text) || default_locale(account)
 | 
					    detect_language_code(input_text) || default_locale(account)
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -33,6 +34,7 @@ class LanguageDetector
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  def detect_language_code(text)
 | 
					  def detect_language_code(text)
 | 
				
			||||||
    return if unreliable_input?(text)
 | 
					    return if unreliable_input?(text)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    result = @identifier.find_language(text)
 | 
					    result = @identifier.find_language(text)
 | 
				
			||||||
    iso6391(result.language.to_s).to_sym if result.reliable?
 | 
					    iso6391(result.language.to_s).to_sym if result.reliable?
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
@ -75,6 +77,6 @@ class LanguageDetector
 | 
				
			|||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def default_locale(account)
 | 
					  def default_locale(account)
 | 
				
			||||||
    account.user_locale&.to_sym || I18n.default_locale
 | 
					    return account.user_locale&.to_sym || I18n.default_locale if account.local?
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
				
			|||||||
@ -42,6 +42,7 @@ describe LanguageDetector do
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  describe 'detect' do
 | 
					  describe 'detect' do
 | 
				
			||||||
    let(:account_without_user_locale) { Fabricate(:user, locale: nil).account }
 | 
					    let(:account_without_user_locale) { Fabricate(:user, locale: nil).account }
 | 
				
			||||||
 | 
					    let(:account_remote) { Fabricate(:account, domain: 'joinmastodon.org') }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it 'detects english language for basic strings' do
 | 
					    it 'detects english language for basic strings' do
 | 
				
			||||||
      strings = [
 | 
					      strings = [
 | 
				
			||||||
@ -104,6 +105,15 @@ describe LanguageDetector do
 | 
				
			|||||||
        end
 | 
					        end
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      describe 'remote user' do
 | 
				
			||||||
 | 
					        it 'nil for foreign user when language is not present' do
 | 
				
			||||||
 | 
					          string = '안녕하세요'
 | 
				
			||||||
 | 
					          result = described_class.instance.detect(string, account_remote)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          expect(result).to eq nil
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      describe 'with a non-`en` default locale' do
 | 
					      describe 'with a non-`en` default locale' do
 | 
				
			||||||
        around(:each) do |example|
 | 
					        around(:each) do |example|
 | 
				
			||||||
          before = I18n.default_locale
 | 
					          before = I18n.default_locale
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user