Merge pull request #1347 from ThibG/glitch-soc/merge-upstream
Merge upstream changes
This commit is contained in:
		
						commit
						f328f2faa3
					
				@ -279,12 +279,13 @@ class EmojiPickerMenu extends React.PureComponent {
 | 
				
			|||||||
    };
 | 
					    };
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handleClick = emoji => {
 | 
					  handleClick = (emoji, event) => {
 | 
				
			||||||
    if (!emoji.native) {
 | 
					    if (!emoji.native) {
 | 
				
			||||||
      emoji.native = emoji.colons;
 | 
					      emoji.native = emoji.colons;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    if (!event.ctrlKey) {
 | 
				
			||||||
      this.props.onClose();
 | 
					      this.props.onClose();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    this.props.onPick(emoji);
 | 
					    this.props.onPick(emoji);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -578,7 +578,7 @@ code {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  &.alert {
 | 
					  &.alert {
 | 
				
			||||||
    border: 1px solid rgba($error-value-color, 0.5);
 | 
					    border: 1px solid rgba($error-value-color, 0.5);
 | 
				
			||||||
    background: rgba($error-value-color, 0.25);
 | 
					    background: rgba($error-value-color, 0.1);
 | 
				
			||||||
    color: $error-value-color;
 | 
					    color: $error-value-color;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -199,12 +199,13 @@ class EmojiPickerMenu extends React.PureComponent {
 | 
				
			|||||||
    };
 | 
					    };
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handleClick = emoji => {
 | 
					  handleClick = (emoji, event) => {
 | 
				
			||||||
    if (!emoji.native) {
 | 
					    if (!emoji.native) {
 | 
				
			||||||
      emoji.native = emoji.colons;
 | 
					      emoji.native = emoji.colons;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    if (!event.ctrlKey) {
 | 
				
			||||||
      this.props.onClose();
 | 
					      this.props.onClose();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    this.props.onPick(emoji);
 | 
					    this.props.onPick(emoji);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,16 +1,36 @@
 | 
				
			|||||||
import React from 'react';
 | 
					import React from 'react';
 | 
				
			||||||
 | 
					import { connect } from 'react-redux';
 | 
				
			||||||
 | 
					import PropTypes from 'prop-types';
 | 
				
			||||||
import SearchContainer from 'mastodon/features/compose/containers/search_container';
 | 
					import SearchContainer from 'mastodon/features/compose/containers/search_container';
 | 
				
			||||||
import ComposeFormContainer from 'mastodon/features/compose/containers/compose_form_container';
 | 
					import ComposeFormContainer from 'mastodon/features/compose/containers/compose_form_container';
 | 
				
			||||||
import NavigationContainer from 'mastodon/features/compose/containers/navigation_container';
 | 
					import NavigationContainer from 'mastodon/features/compose/containers/navigation_container';
 | 
				
			||||||
import LinkFooter from './link_footer';
 | 
					import LinkFooter from './link_footer';
 | 
				
			||||||
 | 
					import { changeComposing } from 'mastodon/actions/compose';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const ComposePanel = () => (
 | 
					export default @connect()
 | 
				
			||||||
  <div className='compose-panel'>
 | 
					class ComposePanel extends React.PureComponent {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  static propTypes = {
 | 
				
			||||||
 | 
					    dispatch: PropTypes.func.isRequired,
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  onFocus = () => {
 | 
				
			||||||
 | 
					    this.props.dispatch(changeComposing(true));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  onBlur = () => {
 | 
				
			||||||
 | 
					    this.props.dispatch(changeComposing(false));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  render() {
 | 
				
			||||||
 | 
					    return (
 | 
				
			||||||
 | 
					      <div className='compose-panel' onFocus={this.onFocus}>
 | 
				
			||||||
        <SearchContainer openInRoute />
 | 
					        <SearchContainer openInRoute />
 | 
				
			||||||
    <NavigationContainer />
 | 
					        <NavigationContainer onClose={this.onBlur} />
 | 
				
			||||||
        <ComposeFormContainer singleColumn />
 | 
					        <ComposeFormContainer singleColumn />
 | 
				
			||||||
        <LinkFooter withHotkeys />
 | 
					        <LinkFooter withHotkeys />
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
);
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default ComposePanel;
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -254,6 +254,7 @@ class UI extends React.PureComponent {
 | 
				
			|||||||
    dispatch(synchronouslySubmitMarkers());
 | 
					    dispatch(synchronouslySubmitMarkers());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (isComposing && (hasComposingText || hasMediaAttachments)) {
 | 
					    if (isComposing && (hasComposingText || hasMediaAttachments)) {
 | 
				
			||||||
 | 
					      e.preventDefault();
 | 
				
			||||||
      // Setting returnValue to any string causes confirmation dialog.
 | 
					      // Setting returnValue to any string causes confirmation dialog.
 | 
				
			||||||
      // Many browsers no longer display this text to users,
 | 
					      // Many browsers no longer display this text to users,
 | 
				
			||||||
      // but we set user-friendly message for other browsers, e.g. Edge.
 | 
					      // but we set user-friendly message for other browsers, e.g. Edge.
 | 
				
			||||||
 | 
				
			|||||||
@ -587,7 +587,7 @@ code {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  &.alert {
 | 
					  &.alert {
 | 
				
			||||||
    border: 1px solid rgba($error-value-color, 0.5);
 | 
					    border: 1px solid rgba($error-value-color, 0.5);
 | 
				
			||||||
    background: rgba($error-value-color, 0.25);
 | 
					    background: rgba($error-value-color, 0.1);
 | 
				
			||||||
    color: $error-value-color;
 | 
					    color: $error-value-color;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -4,7 +4,7 @@ module DomainNormalizable
 | 
				
			|||||||
  extend ActiveSupport::Concern
 | 
					  extend ActiveSupport::Concern
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  included do
 | 
					  included do
 | 
				
			||||||
    before_save :normalize_domain
 | 
					    before_validation :normalize_domain
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private
 | 
					  private
 | 
				
			||||||
 | 
				
			|||||||
@ -50,11 +50,13 @@ class DomainBlock < ApplicationRecord
 | 
				
			|||||||
    def rule_for(domain)
 | 
					    def rule_for(domain)
 | 
				
			||||||
      return if domain.blank?
 | 
					      return if domain.blank?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      uri      = Addressable::URI.new.tap { |u| u.host = domain.gsub(/[\/]/, '') }
 | 
					      uri      = Addressable::URI.new.tap { |u| u.host = domain.strip.gsub(/[\/]/, '') }
 | 
				
			||||||
      segments = uri.normalized_host.split('.')
 | 
					      segments = uri.normalized_host.split('.')
 | 
				
			||||||
      variants = segments.map.with_index { |_, i| segments[i..-1].join('.') }
 | 
					      variants = segments.map.with_index { |_, i| segments[i..-1].join('.') }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      where(domain: variants).order(Arel.sql('char_length(domain) desc')).first
 | 
					      where(domain: variants).order(Arel.sql('char_length(domain) desc')).first
 | 
				
			||||||
 | 
					    rescue Addressable::URI::InvalidURIError, IDN::Idna::IdnaError
 | 
				
			||||||
 | 
					      nil
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user