Skip to content
Extraits de code Groupes Projets
Valider 8f47f6a7 rédigé par Eugen Rochko's avatar Eugen Rochko
Parcourir les fichiers

Adding remote follow button

parent 91c54264
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -39,7 +39,8 @@ GEM
i18n (~> 0.7)
minitest (~> 5.1)
tzinfo (~> 1.1)
addressable (2.4.0)
addressable (2.5.0)
public_suffix (~> 2.0, >= 2.0.2)
arel (7.1.4)
ast (2.3.0)
autoprefixer-rails (6.5.0.2)
......@@ -98,7 +99,7 @@ GEM
warden (~> 1.2.3)
diff-lcs (1.2.5)
docile (1.1.5)
domain_name (0.5.20160826)
domain_name (0.5.20161129)
unf (>= 0.0.5, < 1.0.0)
doorkeeper (4.2.0)
railties (>= 4.2)
......@@ -121,7 +122,7 @@ GEM
ruby-progressbar (~> 1.4)
globalid (0.3.7)
activesupport (>= 4.1.0)
goldfinger (1.1.0)
goldfinger (1.1.2)
addressable (~> 2.4)
http (~> 2.0)
nokogiri (~> 1.6)
......@@ -138,7 +139,7 @@ GEM
highline (1.7.8)
hiredis (0.6.1)
htmlentities (4.3.4)
http (2.0.3)
http (2.1.0)
addressable (~> 2.3)
http-cookie (~> 1.0)
http-form_data (~> 1.0.1)
......@@ -226,6 +227,7 @@ GEM
slop (~> 3.4)
pry-rails (0.3.4)
pry (>= 0.9.10)
public_suffix (2.0.4)
puma (3.6.0)
rabl (0.13.1)
activesupport (>= 2.3.14)
......
......@@ -61,10 +61,10 @@ const Header = React.createClass({
const displayNameHTML = { __html: emojify(escapeTextContentForBrowser(displayName)) };
return (
<div style={{ flex: '0 0 auto', background: '#2f3441', textAlign: 'center', backgroundImage: `url(${account.get('header')})`, backgroundSize: 'cover', backgroundPosition: 'center', position: 'relative' }}>
<div className='account__header' style={{ flex: '0 0 auto', background: '#2f3441', textAlign: 'center', backgroundImage: `url(${account.get('header')})`, backgroundSize: 'cover', backgroundPosition: 'center', position: 'relative' }}>
<div style={{ background: 'rgba(47, 52, 65, 0.9)', padding: '20px 10px' }}>
<a href={account.get('url')} target='_blank' rel='noopener' style={{ display: 'block', color: 'inherit', textDecoration: 'none' }}>
<div style={{ width: '90px', margin: '0 auto', marginBottom: '10px' }}>
<div className='account__header__avatar' style={{ width: '90px', margin: '0 auto', marginBottom: '10px' }}>
<img src={account.get('avatar')} alt='' style={{ display: 'block', width: '90px', height: '90px', borderRadius: '90px' }} />
</div>
......
......@@ -147,6 +147,12 @@
}
}
@media screen and (max-height: 800px) {
.account__header__avatar, .account__header__content {
display: none;
}
}
.account__header__content {
word-wrap: break-word;
font-weight: 300;
......@@ -585,4 +591,4 @@
pointer-events: none;
bottom: 0;
left: 0;
}
\ No newline at end of file
}
# frozen_string_literal: true
class RemoteFollowController < ApplicationController
layout 'public'
before_action :set_account
before_action :check_account_suspension
def new
@remote_follow = RemoteFollow.new
end
def create
@remote_follow = RemoteFollow.new(resource_params)
if @remote_follow.valid?
resource = Goldfinger.finger("acct:#{@remote_follow.acct}")
redirect_url_link = resource&.link('http://ostatus.org/schema/1.0/subscribe')
if redirect_url_link.nil? || redirect_url_link.template.nil?
@remote_follow.errors.add(:acct, I18n.t('remote_follow.missing_resource'))
render(:new) && return
end
redirect_to Addressable::Template.new(redirect_url_link.template).expand(uri: "acct:#{@account.username}@#{Rails.configuration.x.local_domain}").to_s
else
render :new
end
rescue Goldfinger::Error
@remote_follow.errors.add(:acct, I18n.t('remote_follow.missing_resource'))
render :new
end
private
def resource_params
params.require(:remote_follow).permit(:acct)
end
def set_account
@account = Account.find_local!(params[:account_username])
end
def check_account_suspension
head 410 if @account.suspended?
end
end
# frozen_string_literal: true
class RemoteFollow
include ActiveModel::Validations
attr_accessor :acct
validates :acct, presence: true
def initialize(attrs = {})
@acct = attrs[:acct]
end
end
......@@ -5,8 +5,11 @@
= link_to t('accounts.unfollow'), unfollow_account_path(@account), data: { method: :post }, class: 'button'
- else
= link_to t('accounts.follow'), follow_account_path(@account), data: { method: :post }, class: 'button'
.avatar= image_tag @account.avatar.url( :original)
- else
.controls
.remote-follow
= link_to t('accounts.remote_follow'), account_remote_follow_path(@account), class: 'button'
.avatar= image_tag @account.avatar.url(:original)
%h1.name
= display_name(@account)
%small
......
.account-card
.detailed-status__display-name
%div
= image_tag account.avatar.url(:original), alt: '', width: 48, height: 48, class: 'avatar'
%span.display-name
%strong= display_name(account)
%span= "@#{account.acct}"
- unless account.note.blank?
.account__header__content= Formatter.instance.simplified_format(account)
......@@ -5,17 +5,7 @@
.follow-prompt
%h2= t('authorize_follow.prompt_html', self: current_account.username)
.account-card
.detailed-status__display-name
%div
= image_tag @account.avatar.url(:original), alt: '', width: 48, height: 48, class: 'avatar'
%span.display-name
%strong= display_name(@account)
%span= "@#{@account.acct}"
- unless @account.note.blank?
.account__header__content= Formatter.instance.simplified_format(@account)
= render partial: 'card', locals: { account: @account }
= form_tag authorize_follow_path, method: :post, class: 'simple_form' do
= hidden_field_tag :acct, @account.acct
......
.form-container
.follow-prompt
%h2= t('remote_follow.prompt')
= render partial: 'authorize_follow/card', locals: { account: @account }
= simple_form_for @remote_follow, as: :remote_follow, url: account_remote_follow_path(@account) do |f|
= render 'shared/error_messages', object: @remote_follow
= f.input :acct, placeholder: t('remote_follow.acct')
.actions
= f.button :button, t('remote_follow.proceed'), type: :submit
......@@ -14,6 +14,7 @@ en:
people_followed_by: People whom %{name} follows
people_who_follow: People who follow %{name}
posts: Posts
remote_follow: Remote follow
unfollow: Unfollow
application_mailer:
signature: Mastodon notifications from %{instance}
......@@ -71,6 +72,11 @@ en:
pagination:
next: Next
prev: Prev
remote_follow:
acct: Enter your username@domain you want to follow from
missing_resource: Could not find the required redirect URL for your account
proceed: Proceed to follow
prompt: 'You are going to follow:'
settings:
edit_profile: Edit profile
preferences: Preferences
......
......@@ -31,6 +31,9 @@ Rails.application.routes.draw do
end
end
get :remote_follow, to: 'remote_follow#new'
post :remote_follow, to: 'remote_follow#create'
member do
get :followers
get :following
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter