forked from treehouse/mastodon
Remove previous landing page (#19300)
parent
5fd46dddd7
commit
58d5b28cb0
|
@ -5,16 +5,13 @@ class AboutController < ApplicationController
|
||||||
|
|
||||||
layout 'public'
|
layout 'public'
|
||||||
|
|
||||||
before_action :require_open_federation!, only: [:show, :more]
|
before_action :require_open_federation!, only: [:more]
|
||||||
before_action :set_body_classes, only: :show
|
before_action :set_body_classes, only: :show
|
||||||
before_action :set_instance_presenter
|
before_action :set_instance_presenter
|
||||||
before_action :set_expires_in, only: [:more]
|
before_action :set_expires_in, only: [:more]
|
||||||
before_action :set_registration_form_time, only: :show
|
|
||||||
|
|
||||||
skip_before_action :require_functional!, only: [:more]
|
skip_before_action :require_functional!, only: [:more]
|
||||||
|
|
||||||
def show; end
|
|
||||||
|
|
||||||
def more
|
def more
|
||||||
flash.now[:notice] = I18n.t('about.instance_actor_flash') if params[:instance_actor]
|
flash.now[:notice] = I18n.t('about.instance_actor_flash') if params[:instance_actor]
|
||||||
|
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
.simple_form
|
|
||||||
%p.lead= t('about.logged_in_as_html', username: content_tag(:strong, current_account.username))
|
|
||||||
|
|
||||||
.actions
|
|
||||||
= link_to t('about.continue_to_web'), root_url, class: 'button button-primary'
|
|
||||||
|
|
||||||
.form-footer
|
|
||||||
%ul.no-list
|
|
||||||
%li= link_to t('about.get_apps'), 'https://joinmastodon.org/apps', target: '_blank', rel: 'noopener noreferrer'
|
|
||||||
%li= link_to t('auth.logout'), destroy_user_session_path, data: { method: :delete }
|
|
|
@ -1,22 +0,0 @@
|
||||||
- unless omniauth_only?
|
|
||||||
= simple_form_for(new_user, url: user_session_path, namespace: 'login') do |f|
|
|
||||||
.fields-group
|
|
||||||
- if use_seamless_external_login?
|
|
||||||
= f.input :email, placeholder: t('simple_form.labels.defaults.username_or_email'), input_html: { 'aria-label' => t('simple_form.labels.defaults.username_or_email') }, hint: false
|
|
||||||
- else
|
|
||||||
= f.input :email, placeholder: t('simple_form.labels.defaults.email'), input_html: { 'aria-label' => t('simple_form.labels.defaults.email') }, hint: false
|
|
||||||
|
|
||||||
= f.input :password, placeholder: t('simple_form.labels.defaults.password'), input_html: { 'aria-label' => t('simple_form.labels.defaults.password') }, hint: false
|
|
||||||
|
|
||||||
.actions
|
|
||||||
= f.button :button, t('auth.login'), type: :submit, class: 'button button-primary'
|
|
||||||
|
|
||||||
%p.hint.subtle-hint= link_to t('auth.trouble_logging_in'), new_user_password_path
|
|
||||||
|
|
||||||
- if Devise.mappings[:user].omniauthable? and User.omniauth_providers.any?
|
|
||||||
.simple_form.alternative-login
|
|
||||||
%h4= omniauth_only? ? t('auth.log_in_with') : t('auth.or_log_in_with')
|
|
||||||
|
|
||||||
.actions
|
|
||||||
- User.omniauth_providers.each do |provider|
|
|
||||||
= provider_sign_in_link(provider)
|
|
|
@ -1,37 +0,0 @@
|
||||||
- disabled = closed_registrations? || omniauth_only? || current_account.present?
|
|
||||||
- show_message = disabled && (current_user.present? || @instance_presenter.closed_registrations_message.present?)
|
|
||||||
|
|
||||||
.simple_form__overlay-area{ class: show_message ? 'simple_form__overlay-area__blurred' : '' }
|
|
||||||
= simple_form_for(new_user, url: user_registration_path, namespace: 'registration', html: { novalidate: false }) do |f|
|
|
||||||
%p.lead= t('about.federation_hint_html', instance: content_tag(:strong, site_hostname))
|
|
||||||
|
|
||||||
.fields-group
|
|
||||||
= f.simple_fields_for :account do |account_fields|
|
|
||||||
= account_fields.input :username, wrapper: :with_label, label: false, required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.username'), :autocomplete => 'off', placeholder: t('simple_form.labels.defaults.username'), pattern: '[a-zA-Z0-9_]+', maxlength: 30 }, append: "@#{site_hostname}", hint: false, disabled: disabled
|
|
||||||
|
|
||||||
= f.input :email, placeholder: t('simple_form.labels.defaults.email'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.email'), :autocomplete => 'off' }, hint: false, disabled: disabled
|
|
||||||
= f.input :password, placeholder: t('simple_form.labels.defaults.password'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.password'), :autocomplete => 'new-password', :minlength => User.password_length.first, :maxlength => User.password_length.last }, hint: false, disabled: disabled
|
|
||||||
= f.input :password_confirmation, placeholder: t('simple_form.labels.defaults.confirm_password'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.confirm_password'), :autocomplete => 'new-password' }, hint: false, disabled: disabled
|
|
||||||
|
|
||||||
= f.input :confirm_password, as: :string, placeholder: t('simple_form.labels.defaults.honeypot', label: t('simple_form.labels.defaults.password')), required: false, input_html: { 'aria-label' => t('simple_form.labels.defaults.honeypot', label: t('simple_form.labels.defaults.password')), :autocomplete => 'off' }, hint: false, disabled: disabled
|
|
||||||
= f.input :website, as: :url, placeholder: t('simple_form.labels.defaults.honeypot', label: 'Website'), required: false, input_html: { 'aria-label' => t('simple_form.labels.defaults.honeypot', label: 'Website'), :autocomplete => 'off' }, hint: false, disabled: disabled
|
|
||||||
|
|
||||||
- if approved_registrations?
|
|
||||||
.fields-group
|
|
||||||
= f.simple_fields_for :invite_request do |invite_request_fields|
|
|
||||||
= invite_request_fields.input :text, as: :text, wrapper: :with_block_label, required: Setting.require_invite_text
|
|
||||||
|
|
||||||
.fields-group
|
|
||||||
= f.input :agreement, as: :boolean, wrapper: :with_label, label: t('auth.checkbox_agreement_html', rules_path: about_more_path, terms_path: terms_path), required: true, disabled: disabled
|
|
||||||
|
|
||||||
.actions
|
|
||||||
= f.button :button, sign_up_message, type: :submit, class: 'button button-primary', disabled: disabled
|
|
||||||
|
|
||||||
- if show_message
|
|
||||||
.simple_form__overlay-area__overlay
|
|
||||||
.simple_form__overlay-area__overlay__content.rich-formatting
|
|
||||||
.block-icon= fa_icon 'warning'
|
|
||||||
- if current_account.present?
|
|
||||||
= t('about.logout_before_registering')
|
|
||||||
- else
|
|
||||||
= @instance_presenter.closed_registrations_message.html_safe
|
|
|
@ -1,69 +0,0 @@
|
||||||
- content_for :page_title do
|
|
||||||
= site_hostname
|
|
||||||
|
|
||||||
- content_for :header_tags do
|
|
||||||
%link{ rel: 'canonical', href: about_url }/
|
|
||||||
= render partial: 'shared/og'
|
|
||||||
|
|
||||||
.landing
|
|
||||||
.landing__brand
|
|
||||||
= link_to root_url, class: 'brand' do
|
|
||||||
= logo_as_symbol(:wordmark)
|
|
||||||
%span.brand__tagline=t 'about.tagline'
|
|
||||||
|
|
||||||
.landing__grid
|
|
||||||
.landing__grid__column.landing__grid__column-registration
|
|
||||||
.box-widget
|
|
||||||
= render 'registration'
|
|
||||||
|
|
||||||
.directory
|
|
||||||
.directory__tag
|
|
||||||
= link_to web_path do
|
|
||||||
%h4
|
|
||||||
= fa_icon 'globe fw'
|
|
||||||
= t('about.see_whats_happening')
|
|
||||||
%small= t('about.browse_public_posts')
|
|
||||||
|
|
||||||
.directory__tag
|
|
||||||
= link_to 'https://joinmastodon.org/apps', target: '_blank', rel: 'noopener noreferrer' do
|
|
||||||
%h4
|
|
||||||
= fa_icon 'tablet fw'
|
|
||||||
= t('about.get_apps')
|
|
||||||
%small= t('about.apps_platforms')
|
|
||||||
|
|
||||||
.landing__grid__column.landing__grid__column-login
|
|
||||||
.box-widget
|
|
||||||
- if current_user.present?
|
|
||||||
= render 'logged_in'
|
|
||||||
- else
|
|
||||||
= render 'login'
|
|
||||||
|
|
||||||
.hero-widget
|
|
||||||
.hero-widget__img
|
|
||||||
= image_tag @instance_presenter.hero&.file&.url || @instance_presenter.thumbnail&.file&.url || asset_pack_path('media/images/preview.png'), alt: @instance_presenter.title
|
|
||||||
|
|
||||||
.hero-widget__text
|
|
||||||
%p
|
|
||||||
= @instance_presenter.description.html_safe.presence || t('about.about_mastodon_html')
|
|
||||||
= link_to about_more_path do
|
|
||||||
= t('about.learn_more')
|
|
||||||
= fa_icon 'angle-double-right'
|
|
||||||
|
|
||||||
.hero-widget__footer
|
|
||||||
.hero-widget__footer__column
|
|
||||||
%h4= t 'about.administered_by'
|
|
||||||
|
|
||||||
= account_link_to @instance_presenter.contact.account
|
|
||||||
|
|
||||||
.hero-widget__footer__column
|
|
||||||
%h4= t 'about.server_stats'
|
|
||||||
|
|
||||||
.hero-widget__counters__wrapper
|
|
||||||
.hero-widget__counter
|
|
||||||
%strong= friendly_number_to_human @instance_presenter.user_count
|
|
||||||
%span= t 'about.user_count_after', count: @instance_presenter.user_count
|
|
||||||
.hero-widget__counter
|
|
||||||
%strong= friendly_number_to_human @instance_presenter.active_user_count
|
|
||||||
%span
|
|
||||||
= t 'about.active_count_after'
|
|
||||||
%abbr{ title: t('about.active_footnote') } *
|
|
|
@ -3,38 +3,25 @@ en:
|
||||||
about:
|
about:
|
||||||
about_mastodon_html: 'The social network of the future: No ads, no corporate surveillance, ethical design, and decentralization! Own your data with Mastodon!'
|
about_mastodon_html: 'The social network of the future: No ads, no corporate surveillance, ethical design, and decentralization! Own your data with Mastodon!'
|
||||||
about_this: About
|
about_this: About
|
||||||
active_count_after: active
|
|
||||||
active_footnote: Monthly Active Users (MAU)
|
|
||||||
administered_by: 'Administered by:'
|
administered_by: 'Administered by:'
|
||||||
api: API
|
api: API
|
||||||
apps: Mobile apps
|
apps: Mobile apps
|
||||||
apps_platforms: Use Mastodon from iOS, Android and other platforms
|
|
||||||
browse_public_posts: Browse a live stream of public posts on Mastodon
|
|
||||||
contact: Contact
|
contact: Contact
|
||||||
contact_missing: Not set
|
contact_missing: Not set
|
||||||
contact_unavailable: N/A
|
contact_unavailable: N/A
|
||||||
continue_to_web: Continue to web app
|
|
||||||
documentation: Documentation
|
documentation: Documentation
|
||||||
federation_hint_html: With an account on %{instance} you'll be able to follow people on any Mastodon server and beyond.
|
|
||||||
get_apps: Try a mobile app
|
|
||||||
hosted_on: Mastodon hosted on %{domain}
|
hosted_on: Mastodon hosted on %{domain}
|
||||||
instance_actor_flash: |
|
instance_actor_flash: |
|
||||||
This account is a virtual actor used to represent the server itself and not any individual user.
|
This account is a virtual actor used to represent the server itself and not any individual user.
|
||||||
It is used for federation purposes and should not be blocked unless you want to block the whole instance, in which case you should use a domain block.
|
It is used for federation purposes and should not be blocked unless you want to block the whole instance, in which case you should use a domain block.
|
||||||
learn_more: Learn more
|
|
||||||
logged_in_as_html: You are currently logged in as %{username}.
|
|
||||||
logout_before_registering: You are already logged in.
|
|
||||||
privacy_policy: Privacy Policy
|
privacy_policy: Privacy Policy
|
||||||
rules: Server rules
|
rules: Server rules
|
||||||
rules_html: 'Below is a summary of rules you need to follow if you want to have an account on this server of Mastodon:'
|
rules_html: 'Below is a summary of rules you need to follow if you want to have an account on this server of Mastodon:'
|
||||||
see_whats_happening: See what's happening
|
|
||||||
server_stats: 'Server stats:'
|
|
||||||
source_code: Source code
|
source_code: Source code
|
||||||
status_count_after:
|
status_count_after:
|
||||||
one: post
|
one: post
|
||||||
other: posts
|
other: posts
|
||||||
status_count_before: Who published
|
status_count_before: Who published
|
||||||
tagline: Decentralized social network
|
|
||||||
unavailable_content: Moderated servers
|
unavailable_content: Moderated servers
|
||||||
unavailable_content_description:
|
unavailable_content_description:
|
||||||
domain: Server
|
domain: Server
|
||||||
|
@ -1049,7 +1036,6 @@ en:
|
||||||
redirecting_to: Your account is inactive because it is currently redirecting to %{acct}.
|
redirecting_to: Your account is inactive because it is currently redirecting to %{acct}.
|
||||||
view_strikes: View past strikes against your account
|
view_strikes: View past strikes against your account
|
||||||
too_fast: Form submitted too fast, try again.
|
too_fast: Form submitted too fast, try again.
|
||||||
trouble_logging_in: Trouble logging in?
|
|
||||||
use_security_key: Use security key
|
use_security_key: Use security key
|
||||||
authorize_follow:
|
authorize_follow:
|
||||||
already_following: You are already following this account
|
already_following: You are already following this account
|
||||||
|
|
|
@ -641,7 +641,7 @@ Rails.application.routes.draw do
|
||||||
|
|
||||||
get '/web/(*any)', to: 'home#index', as: :web
|
get '/web/(*any)', to: 'home#index', as: :web
|
||||||
|
|
||||||
get '/about', to: 'about#show'
|
get '/about', to: redirect('/')
|
||||||
get '/about/more', to: 'about#more'
|
get '/about/more', to: 'about#more'
|
||||||
|
|
||||||
get '/privacy-policy', to: 'privacy#show', as: :privacy_policy
|
get '/privacy-policy', to: 'privacy#show', as: :privacy_policy
|
||||||
|
|
|
@ -3,20 +3,6 @@ require 'rails_helper'
|
||||||
RSpec.describe AboutController, type: :controller do
|
RSpec.describe AboutController, type: :controller do
|
||||||
render_views
|
render_views
|
||||||
|
|
||||||
describe 'GET #show' do
|
|
||||||
before do
|
|
||||||
get :show
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'assigns @instance_presenter' do
|
|
||||||
expect(assigns(:instance_presenter)).to be_kind_of InstancePresenter
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'returns http success' do
|
|
||||||
expect(response).to have_http_status(200)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe 'GET #more' do
|
describe 'GET #more' do
|
||||||
before do
|
before do
|
||||||
get :more
|
get :more
|
||||||
|
@ -30,12 +16,4 @@ RSpec.describe AboutController, type: :controller do
|
||||||
expect(response).to have_http_status(200)
|
expect(response).to have_http_status(200)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'helper_method :new_user' do
|
|
||||||
it 'returns a new User' do
|
|
||||||
user = @controller.view_context.new_user
|
|
||||||
expect(user).to be_kind_of User
|
|
||||||
expect(user.account).to be_kind_of Account
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -10,30 +10,30 @@ describe 'Localization' do
|
||||||
it 'uses a specific region when provided' do
|
it 'uses a specific region when provided' do
|
||||||
headers = { 'Accept-Language' => 'zh-HK' }
|
headers = { 'Accept-Language' => 'zh-HK' }
|
||||||
|
|
||||||
get "/about", headers: headers
|
get "/auth/sign_in", headers: headers
|
||||||
|
|
||||||
expect(response.body).to include(
|
expect(response.body).to include(
|
||||||
I18n.t('about.tagline', locale: 'zh-HK')
|
I18n.t('auth.login', locale: 'zh-HK')
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'falls back to a locale when region missing' do
|
it 'falls back to a locale when region missing' do
|
||||||
headers = { 'Accept-Language' => 'es-FAKE' }
|
headers = { 'Accept-Language' => 'es-FAKE' }
|
||||||
|
|
||||||
get "/about", headers: headers
|
get "/auth/sign_in", headers: headers
|
||||||
|
|
||||||
expect(response.body).to include(
|
expect(response.body).to include(
|
||||||
I18n.t('about.tagline', locale: 'es')
|
I18n.t('auth.login', locale: 'es')
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'falls back to english when locale is missing' do
|
it 'falls back to english when locale is missing' do
|
||||||
headers = { 'Accept-Language' => '12-FAKE' }
|
headers = { 'Accept-Language' => '12-FAKE' }
|
||||||
|
|
||||||
get "/about", headers: headers
|
get "/auth/sign_in", headers: headers
|
||||||
|
|
||||||
expect(response.body).to include(
|
expect(response.body).to include(
|
||||||
I18n.t('about.tagline', locale: 'en')
|
I18n.t('auth.login', locale: 'en')
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
require 'rails_helper'
|
|
||||||
|
|
||||||
describe 'about/show.html.haml', without_verify_partial_doubles: true do
|
|
||||||
before do
|
|
||||||
allow(view).to receive(:site_hostname).and_return('example.com')
|
|
||||||
allow(view).to receive(:site_title).and_return('example site')
|
|
||||||
allow(view).to receive(:new_user).and_return(User.new)
|
|
||||||
allow(view).to receive(:use_seamless_external_login?).and_return(false)
|
|
||||||
allow(view).to receive(:current_account).and_return(nil)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'has valid open graph tags' do
|
|
||||||
assign(:instance_presenter, InstancePresenter.new)
|
|
||||||
render
|
|
||||||
|
|
||||||
header_tags = view.content_for(:header_tags)
|
|
||||||
|
|
||||||
expect(header_tags).to match(%r{<meta content=".+" property="og:title" />})
|
|
||||||
expect(header_tags).to match(%r{<meta content="website" property="og:type" />})
|
|
||||||
expect(header_tags).to match(%r{<meta content=".+" property="og:image" />})
|
|
||||||
expect(header_tags).to match(%r{<meta content="http://.+" property="og:url" />})
|
|
||||||
end
|
|
||||||
end
|
|
Loading…
Reference in New Issue