From 026dd75208223a8ceb8f3e82699a123d68b9a1c7 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 28 Mar 2019 17:56:25 +0100 Subject: [PATCH 001/366] Add `tootctl self-destruct` (#10367) Fix #10305 --- .rubocop.yml | 2 +- lib/cli.rb | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 1 deletion(-) diff --git a/.rubocop.yml b/.rubocop.yml index 59e8a757a..f1095e022 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -80,7 +80,7 @@ Rails/HttpStatus: Rails/Exit: Exclude: - 'lib/mastodon/*' - - 'lib/cli' + - 'lib/cli.rb' Style/ClassAndModuleChildren: Enabled: false diff --git a/lib/cli.rb b/lib/cli.rb index 65a5ae696..b56c6e76f 100644 --- a/lib/cli.rb +++ b/lib/cli.rb @@ -41,6 +41,79 @@ module Mastodon desc 'domains SUBCOMMAND ...ARGS', 'Manage account domains' subcommand 'domains', Mastodon::DomainsCLI + option :dry_run, type: :boolean + desc 'self-destruct', 'Erase the server from the federation' + long_desc <<~LONG_DESC + Erase the server from the federation by broadcasting account delete + activities to all known other servers. This allows a "clean exit" from + running a Mastodon server, as it leaves next to no cache behind on + other servers. + + This command is always interactive and requires confirmation twice. + + No local data is actually deleted, because emptying the + database or removing files is much faster through other, external + means, such as e.g. deleting the entire VPS. However, because other + servers will delete data about local users, but no local data will be + updated (such as e.g. followers), there will be a state mismatch + that will lead to glitches and issues if you then continue to run and use + the server. + + So either you know exactly what you are doing, or you are starting + from a blank slate afterwards by manually clearing out all the local + data! + LONG_DESC + def self_destruct + require 'tty-prompt' + + prompt = TTY::Prompt.new + + exit(1) unless prompt.ask('Type in the domain of the server to confirm:', required: true) == Rails.configuration.x.local_domain + + prompt.warn('This operation WILL NOT be reversible. It can also take a long time.') + prompt.warn('While the data won\'t be erased locally, the server will be in a BROKEN STATE afterwards.') + prompt.warn('A running Sidekiq process is required. Do not shut it down until queues clear.') + + exit(1) if prompt.no?('Are you sure you want to proceed?') + + inboxes = Account.inboxes + processed = 0 + dry_run = options[:dry_run] ? ' (DRY RUN)' : '' + + if inboxes.empty? + prompt.ok('It seems like your server has not federated with anything') + prompt.ok('You can shut it down and delete it any time') + return + end + + prompt.warn('Do NOT interrupt this process...') + + Account.local.without_suspended.find_each do |account| + payload = ActiveModelSerializers::SerializableResource.new( + account, + serializer: ActivityPub::DeleteActorSerializer, + adapter: ActivityPub::Adapter + ).as_json + + json = Oj.dump(ActivityPub::LinkedDataSignature.new(payload).sign!(account)) + + unless options[:dry_run] + ActivityPub::DeliveryWorker.push_bulk(inboxes) do |inbox_url| + [json, account.id, inbox_url] + end + + account.update_column(:suspended, true) + end + + processed += 1 + end + + prompt.ok("Queued #{inboxes.size * processed} items into Sidekiq for #{processed} accounts#{dry_run}") + prompt.ok('Wait until Sidekiq processes all items, then you can shut everything down and delete the data') + rescue TTY::Reader::InputInterrupt + exit(1) + end + map %w(--version -v) => :version desc 'version', 'Show version' From 69141dca26f8a28d3aff63387b1c8d2bba7fdfa3 Mon Sep 17 00:00:00 2001 From: Alex Gessner Date: Thu, 28 Mar 2019 13:01:09 -0400 Subject: [PATCH 002/366] squashed identity proof updates (#10375) --- .../v1/accounts/identity_proofs_controller.rb | 19 +++++++ .../settings/identity_proofs_controller.rb | 22 ++++++- .../mastodon/actions/identity_proofs.js | 30 ++++++++++ .../features/account/components/header.js | 17 +++++- .../account_timeline/components/header.js | 4 +- .../containers/header_container.js | 2 + .../features/account_timeline/index.js | 3 + .../mastodon/reducers/identity_proofs.js | 25 ++++++++ app/javascript/mastodon/reducers/index.js | 2 + .../styles/mastodon/containers.scss | 8 +-- app/javascript/styles/mastodon/forms.scss | 9 ++- app/lib/proof_provider/keybase.rb | 3 +- .../keybase/config_serializer.rb | 4 +- app/lib/proof_provider/keybase/verifier.rb | 6 +- app/models/account_identity_proof.rb | 2 +- .../rest/identity_proof_serializer.rb | 17 ++++++ .../settings/identity_proofs/new.html.haml | 5 ++ config/locales/en.yml | 3 + config/routes.rb | 1 + .../identity_proofs_controller_spec.rb | 57 +++++++++++++++++-- 20 files changed, 214 insertions(+), 25 deletions(-) create mode 100644 app/controllers/api/v1/accounts/identity_proofs_controller.rb create mode 100644 app/javascript/mastodon/actions/identity_proofs.js create mode 100644 app/javascript/mastodon/reducers/identity_proofs.js create mode 100644 app/serializers/rest/identity_proof_serializer.rb diff --git a/app/controllers/api/v1/accounts/identity_proofs_controller.rb b/app/controllers/api/v1/accounts/identity_proofs_controller.rb new file mode 100644 index 000000000..bea51ae11 --- /dev/null +++ b/app/controllers/api/v1/accounts/identity_proofs_controller.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +class Api::V1::Accounts::IdentityProofsController < Api::BaseController + before_action :require_user! + before_action :set_account + + respond_to :json + + def index + @proofs = @account.identity_proofs.active + render json: @proofs, each_serializer: REST::IdentityProofSerializer + end + + private + + def set_account + @account = Account.find(params[:account_id]) + end +end diff --git a/app/controllers/settings/identity_proofs_controller.rb b/app/controllers/settings/identity_proofs_controller.rb index 4a3b89a5e..8f857fdcc 100644 --- a/app/controllers/settings/identity_proofs_controller.rb +++ b/app/controllers/settings/identity_proofs_controller.rb @@ -18,7 +18,12 @@ class Settings::IdentityProofsController < Settings::BaseController provider_username: params[:provider_username] ) - render layout: 'auth' + if current_account.username == params[:username] + render layout: 'auth' + else + flash[:alert] = I18n.t('identity_proofs.errors.wrong_user', proving: params[:username], current: current_account.username) + redirect_to settings_identity_proofs_path + end end def create @@ -26,6 +31,7 @@ class Settings::IdentityProofsController < Settings::BaseController @proof.token = resource_params[:token] if @proof.save + PostStatusService.new.call(current_user.account, text: post_params[:status_text]) if publish_proof? redirect_to @proof.on_success_path(params[:user_agent]) else flash[:alert] = I18n.t('identity_proofs.errors.failed', provider: @proof.provider.capitalize) @@ -36,10 +42,22 @@ class Settings::IdentityProofsController < Settings::BaseController private def check_required_params - redirect_to settings_identity_proofs_path unless [:provider, :provider_username, :token].all? { |k| params[k].present? } + redirect_to settings_identity_proofs_path unless [:provider, :provider_username, :username, :token].all? { |k| params[k].present? } end def resource_params params.require(:account_identity_proof).permit(:provider, :provider_username, :token) end + + def publish_proof? + ActiveModel::Type::Boolean.new.cast(post_params[:post_status]) + end + + def post_params + params.require(:account_identity_proof).permit(:post_status, :status_text) + end + + def set_body_classes + @body_classes = '' + end end diff --git a/app/javascript/mastodon/actions/identity_proofs.js b/app/javascript/mastodon/actions/identity_proofs.js new file mode 100644 index 000000000..449debf61 --- /dev/null +++ b/app/javascript/mastodon/actions/identity_proofs.js @@ -0,0 +1,30 @@ +import api from '../api'; + +export const IDENTITY_PROOFS_ACCOUNT_FETCH_REQUEST = 'IDENTITY_PROOFS_ACCOUNT_FETCH_REQUEST'; +export const IDENTITY_PROOFS_ACCOUNT_FETCH_SUCCESS = 'IDENTITY_PROOFS_ACCOUNT_FETCH_SUCCESS'; +export const IDENTITY_PROOFS_ACCOUNT_FETCH_FAIL = 'IDENTITY_PROOFS_ACCOUNT_FETCH_FAIL'; + +export const fetchAccountIdentityProofs = accountId => (dispatch, getState) => { + dispatch(fetchAccountIdentityProofsRequest(accountId)); + + api(getState).get(`/api/v1/accounts/${accountId}/identity_proofs`) + .then(({ data }) => dispatch(fetchAccountIdentityProofsSuccess(accountId, data))) + .catch(err => dispatch(fetchAccountIdentityProofsFail(accountId, err))); +}; + +export const fetchAccountIdentityProofsRequest = id => ({ + type: IDENTITY_PROOFS_ACCOUNT_FETCH_REQUEST, + id, +}); + +export const fetchAccountIdentityProofsSuccess = (accountId, identity_proofs) => ({ + type: IDENTITY_PROOFS_ACCOUNT_FETCH_SUCCESS, + accountId, + identity_proofs, +}); + +export const fetchAccountIdentityProofsFail = (accountId, err) => ({ + type: IDENTITY_PROOFS_ACCOUNT_FETCH_FAIL, + accountId, + err, +}); diff --git a/app/javascript/mastodon/features/account/components/header.js b/app/javascript/mastodon/features/account/components/header.js index d957de73d..76f50a5a4 100644 --- a/app/javascript/mastodon/features/account/components/header.js +++ b/app/javascript/mastodon/features/account/components/header.js @@ -62,6 +62,7 @@ class Header extends ImmutablePureComponent { static propTypes = { account: ImmutablePropTypes.map, + identity_props: ImmutablePropTypes.list, onFollow: PropTypes.func.isRequired, onBlock: PropTypes.func.isRequired, intl: PropTypes.object.isRequired, @@ -81,7 +82,7 @@ class Header extends ImmutablePureComponent { } render () { - const { account, intl, domain } = this.props; + const { account, intl, domain, identity_proofs } = this.props; if (!account) { return null; @@ -234,8 +235,20 @@ class Header extends ImmutablePureComponent {
- {fields.size > 0 && ( + { (fields.size > 0 || identity_proofs.size > 0) && (
+ {identity_proofs.map((proof, i) => ( +
+
+ +
+ + + + +
+
+ ))} {fields.map((pair, i) => (
diff --git a/app/javascript/mastodon/features/account_timeline/components/header.js b/app/javascript/mastodon/features/account_timeline/components/header.js index 16ada18c0..27dfcc516 100644 --- a/app/javascript/mastodon/features/account_timeline/components/header.js +++ b/app/javascript/mastodon/features/account_timeline/components/header.js @@ -12,6 +12,7 @@ export default class Header extends ImmutablePureComponent { static propTypes = { account: ImmutablePropTypes.map, + identity_proofs: ImmutablePropTypes.list, onFollow: PropTypes.func.isRequired, onBlock: PropTypes.func.isRequired, onMention: PropTypes.func.isRequired, @@ -84,7 +85,7 @@ export default class Header extends ImmutablePureComponent { } render () { - const { account, hideTabs } = this.props; + const { account, hideTabs, identity_proofs } = this.props; if (account === null) { return ; @@ -96,6 +97,7 @@ export default class Header extends ImmutablePureComponent { { const mapStateToProps = (state, { accountId }) => ({ account: getAccount(state, accountId), domain: state.getIn(['meta', 'domain']), + identity_proofs: state.getIn(['identity_proofs', accountId], ImmutableList()), }); return mapStateToProps; diff --git a/app/javascript/mastodon/features/account_timeline/index.js b/app/javascript/mastodon/features/account_timeline/index.js index afc484c60..883f40d77 100644 --- a/app/javascript/mastodon/features/account_timeline/index.js +++ b/app/javascript/mastodon/features/account_timeline/index.js @@ -12,6 +12,7 @@ import ColumnBackButton from '../../components/column_back_button'; import { List as ImmutableList } from 'immutable'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { FormattedMessage } from 'react-intl'; +import { fetchAccountIdentityProofs } from '../../actions/identity_proofs'; const mapStateToProps = (state, { params: { accountId }, withReplies = false }) => { const path = withReplies ? `${accountId}:with_replies` : accountId; @@ -42,6 +43,7 @@ class AccountTimeline extends ImmutablePureComponent { const { params: { accountId }, withReplies } = this.props; this.props.dispatch(fetchAccount(accountId)); + this.props.dispatch(fetchAccountIdentityProofs(accountId)); if (!withReplies) { this.props.dispatch(expandAccountFeaturedTimeline(accountId)); } @@ -51,6 +53,7 @@ class AccountTimeline extends ImmutablePureComponent { componentWillReceiveProps (nextProps) { if ((nextProps.params.accountId !== this.props.params.accountId && nextProps.params.accountId) || nextProps.withReplies !== this.props.withReplies) { this.props.dispatch(fetchAccount(nextProps.params.accountId)); + this.props.dispatch(fetchAccountIdentityProofs(nextProps.params.accountId)); if (!nextProps.withReplies) { this.props.dispatch(expandAccountFeaturedTimeline(nextProps.params.accountId)); } diff --git a/app/javascript/mastodon/reducers/identity_proofs.js b/app/javascript/mastodon/reducers/identity_proofs.js new file mode 100644 index 000000000..58af0a5fa --- /dev/null +++ b/app/javascript/mastodon/reducers/identity_proofs.js @@ -0,0 +1,25 @@ +import { Map as ImmutableMap, fromJS } from 'immutable'; +import { + IDENTITY_PROOFS_ACCOUNT_FETCH_REQUEST, + IDENTITY_PROOFS_ACCOUNT_FETCH_SUCCESS, + IDENTITY_PROOFS_ACCOUNT_FETCH_FAIL, +} from '../actions/identity_proofs'; + +const initialState = ImmutableMap(); + +export default function identityProofsReducer(state = initialState, action) { + switch(action.type) { + case IDENTITY_PROOFS_ACCOUNT_FETCH_REQUEST: + return state.set('isLoading', true); + case IDENTITY_PROOFS_ACCOUNT_FETCH_FAIL: + return state.set('isLoading', false); + case IDENTITY_PROOFS_ACCOUNT_FETCH_SUCCESS: + return state.update(identity_proofs => identity_proofs.withMutations(map => { + map.set('isLoading', false); + map.set('loaded', true); + map.set(action.accountId, fromJS(action.identity_proofs)); + })); + default: + return state; + } +}; diff --git a/app/javascript/mastodon/reducers/index.js b/app/javascript/mastodon/reducers/index.js index a7e9c4d0f..981ad8e64 100644 --- a/app/javascript/mastodon/reducers/index.js +++ b/app/javascript/mastodon/reducers/index.js @@ -30,6 +30,7 @@ import filters from './filters'; import conversations from './conversations'; import suggestions from './suggestions'; import polls from './polls'; +import identity_proofs from './identity_proofs'; const reducers = { dropdown_menu, @@ -56,6 +57,7 @@ const reducers = { notifications, height_cache, custom_emojis, + identity_proofs, lists, listEditor, listAdder, diff --git a/app/javascript/styles/mastodon/containers.scss b/app/javascript/styles/mastodon/containers.scss index 2b1d988f2..368c2304b 100644 --- a/app/javascript/styles/mastodon/containers.scss +++ b/app/javascript/styles/mastodon/containers.scss @@ -10,12 +10,10 @@ } .logo-container { - margin: 100px auto; - margin-bottom: 50px; + margin: 100px auto 50px; - @media screen and (max-width: 400px) { - margin: 30px auto; - margin-bottom: 20px; + @media screen and (max-width: 500px) { + margin: 40px auto 0; } h1 { diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss index 3ea104786..91888d305 100644 --- a/app/javascript/styles/mastodon/forms.scss +++ b/app/javascript/styles/mastodon/forms.scss @@ -854,13 +854,19 @@ code { flex: 1; flex-direction: column; flex-shrink: 1; + max-width: 50%; &-sep { + align-self: center; flex-grow: 0; overflow: visible; position: relative; z-index: 1; } + + p { + word-break: break-word; + } } .account__avatar { @@ -882,12 +888,13 @@ code { height: 100%; left: 50%; position: absolute; + top: 0; width: 1px; } } &__row { - align-items: center; + align-items: flex-start; display: flex; flex-direction: row; } diff --git a/app/lib/proof_provider/keybase.rb b/app/lib/proof_provider/keybase.rb index 96322a265..672e1cb4b 100644 --- a/app/lib/proof_provider/keybase.rb +++ b/app/lib/proof_provider/keybase.rb @@ -1,7 +1,8 @@ # frozen_string_literal: true class ProofProvider::Keybase - BASE_URL = 'https://keybase.io' + BASE_URL = ENV.fetch('KEYBASE_BASE_URL', 'https://keybase.io') + DOMAIN = ENV.fetch('KEYBASE_DOMAIN', Rails.configuration.x.local_domain) class Error < StandardError; end diff --git a/app/lib/proof_provider/keybase/config_serializer.rb b/app/lib/proof_provider/keybase/config_serializer.rb index 557bafe84..5241d201f 100644 --- a/app/lib/proof_provider/keybase/config_serializer.rb +++ b/app/lib/proof_provider/keybase/config_serializer.rb @@ -14,7 +14,7 @@ class ProofProvider::Keybase::ConfigSerializer < ActiveModel::Serializer end def domain - Rails.configuration.x.local_domain + ProofProvider::Keybase::DOMAIN end def display_name @@ -66,6 +66,6 @@ class ProofProvider::Keybase::ConfigSerializer < ActiveModel::Serializer end def contact - [Setting.site_contact_email.presence].compact + [Setting.site_contact_email.presence || 'unknown'].compact end end diff --git a/app/lib/proof_provider/keybase/verifier.rb b/app/lib/proof_provider/keybase/verifier.rb index 86f249dd7..ab1422323 100644 --- a/app/lib/proof_provider/keybase/verifier.rb +++ b/app/lib/proof_provider/keybase/verifier.rb @@ -49,14 +49,10 @@ class ProofProvider::Keybase::Verifier def query_params { - domain: domain, + domain: ProofProvider::Keybase::DOMAIN, kb_username: @provider_username, username: @local_username, sig_hash: @token, } end - - def domain - Rails.configuration.x.local_domain - end end diff --git a/app/models/account_identity_proof.rb b/app/models/account_identity_proof.rb index e7a3f97e5..1ac234735 100644 --- a/app/models/account_identity_proof.rb +++ b/app/models/account_identity_proof.rb @@ -26,7 +26,7 @@ class AccountIdentityProof < ApplicationRecord scope :active, -> { where(verified: true, live: true) } - after_create_commit :queue_worker + after_commit :queue_worker, if: :saved_change_to_token? delegate :refresh!, :on_success_path, :badge, to: :provider_instance diff --git a/app/serializers/rest/identity_proof_serializer.rb b/app/serializers/rest/identity_proof_serializer.rb new file mode 100644 index 000000000..0e7415935 --- /dev/null +++ b/app/serializers/rest/identity_proof_serializer.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class REST::IdentityProofSerializer < ActiveModel::Serializer + attributes :provider, :provider_username, :updated_at, :proof_url, :profile_url + + def proof_url + object.badge.proof_url + end + + def profile_url + object.badge.profile_url + end + + def provider + object.provider.capitalize + end +end diff --git a/app/views/settings/identity_proofs/new.html.haml b/app/views/settings/identity_proofs/new.html.haml index 8ce6e61c9..5e4e9895d 100644 --- a/app/views/settings/identity_proofs/new.html.haml +++ b/app/views/settings/identity_proofs/new.html.haml @@ -27,5 +27,10 @@ %p= t('identity_proofs.i_am_html', username: content_tag(:strong, @proof.provider_username), service: @proof.provider.capitalize) + .connection-prompt__post + = f.input :post_status, label: t('identity_proofs.publicize_checkbox'), as: :boolean, wrapper: :with_label, :input_html => { checked: true } + + = f.input :status_text, as: :text, input_html: { value: t('identity_proofs.publicize_toot', username: @proof.provider_username, service: @proof.provider.capitalize, url: @proof.badge.proof_url), rows: 4 } + = f.button :button, t('identity_proofs.authorize'), type: :submit = link_to t('simple_form.no'), settings_identity_proofs_url, class: 'button negative' diff --git a/config/locales/en.yml b/config/locales/en.yml index d91e89d95..64467be39 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -648,10 +648,13 @@ en: keybase: invalid_token: Keybase tokens are hashes of signatures and must be 66 hex characters verification_failed: Keybase does not recognize this token as a signature of Keybase user %{kb_username}. Please retry from Keybase. + wrong_user: Cannot create a proof for %{proving} while logged in as %{current}. Log in as %{proving} and try again. explanation_html: Here you can cryptographically connect your other identities, such as a Keybase profile. This lets other people send you encrypted messages and trust content you send them. i_am_html: I am %{username} on %{service}. identity: Identity inactive: Inactive + publicize_checkbox: 'And toot this:' + publicize_toot: 'It is proven! I am %{username} on %{service}: %{url}' status: Verification status view_proof: View proof imports: diff --git a/config/routes.rb b/config/routes.rb index 194b4c09b..a98dbb700 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -354,6 +354,7 @@ Rails.application.routes.draw do resources :followers, only: :index, controller: 'accounts/follower_accounts' resources :following, only: :index, controller: 'accounts/following_accounts' resources :lists, only: :index, controller: 'accounts/lists' + resources :identity_proofs, only: :index, controller: 'accounts/identity_proofs' member do post :follow diff --git a/spec/controllers/settings/identity_proofs_controller_spec.rb b/spec/controllers/settings/identity_proofs_controller_spec.rb index 46af3ccf4..5c05eb83c 100644 --- a/spec/controllers/settings/identity_proofs_controller_spec.rb +++ b/spec/controllers/settings/identity_proofs_controller_spec.rb @@ -1,6 +1,7 @@ require 'rails_helper' describe Settings::IdentityProofsController do + include RoutingHelper render_views let(:user) { Fabricate(:user) } @@ -9,8 +10,15 @@ describe Settings::IdentityProofsController do let(:provider) { 'keybase' } let(:findable_id) { Faker::Number.number(5) } let(:unfindable_id) { Faker::Number.number(5) } + let(:new_proof_params) do + { provider: provider, provider_username: kbname, token: valid_token, username: user.account.username } + end + let(:status_text) { "i just proved that i am also #{kbname} on #{provider}." } + let(:status_posting_params) do + { post_status: '0', status_text: status_text } + end let(:postable_params) do - { account_identity_proof: { provider: provider, provider_username: kbname, token: valid_token } } + { account_identity_proof: new_proof_params.merge(status_posting_params) } end before do @@ -19,10 +27,32 @@ describe Settings::IdentityProofsController do end describe 'new proof creation' do - context 'GET #new with no existing proofs' do - it 'redirects to :index' do - get :new - expect(response).to redirect_to settings_identity_proofs_path + context 'GET #new' do + context 'with all of the correct params' do + before do + allow_any_instance_of(ProofProvider::Keybase::Badge).to receive(:avatar_url) { full_pack_url('media/images/void.png') } + end + + it 'renders the template' do + get :new, params: new_proof_params + expect(response).to render_template(:new) + end + end + + context 'without any params' do + it 'redirects to :index' do + get :new, params: {} + expect(response).to redirect_to settings_identity_proofs_path + end + end + + context 'with params to prove a different, not logged-in user' do + let(:wrong_user_params) { new_proof_params.merge(username: 'someone_else') } + + it 'shows a helpful alert' do + get :new, params: wrong_user_params + expect(flash[:alert]).to eq I18n.t('identity_proofs.errors.wrong_user', proving: 'someone_else', current: user.account.username) + end end end @@ -44,6 +74,23 @@ describe Settings::IdentityProofsController do post :create, params: postable_params expect(response).to redirect_to root_url end + + it 'does not post a status' do + expect(PostStatusService).not_to receive(:new) + post :create, params: postable_params + end + + context 'and the user has requested to post a status' do + let(:postable_params_with_status) do + postable_params.tap { |p| p[:account_identity_proof][:post_status] = '1' } + end + + it 'posts a status' do + expect_any_instance_of(PostStatusService).to receive(:call).with(user.account, text: status_text) + + post :create, params: postable_params_with_status + end + end end context 'when saving fails' do From 1a7d1f4a42e4988713bad82db39f23e5e13a3bb2 Mon Sep 17 00:00:00 2001 From: Aditoo17 <42938951+Aditoo17@users.noreply.github.com> Date: Thu, 28 Mar 2019 18:01:28 +0100 Subject: [PATCH 003/366] I18n: Update Czech translation (#10410) --- app/javascript/mastodon/locales/cs.json | 2 +- config/locales/activerecord.cs.yml | 5 +++-- config/locales/cs.yml | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 1a776cf95..9115f5081 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -83,7 +83,7 @@ "compose_form.spoiler.unmarked": "Text není skrytý", "compose_form.spoiler_placeholder": "Sem napište vaše varování", "confirmation_modal.cancel": "Zrušit", - "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.block_and_report": "Blokovat a nahlásit", "confirmations.block.confirm": "Blokovat", "confirmations.block.message": "Jste si jistý/á, že chcete zablokovat uživatele {name}?", "confirmations.delete.confirm": "Smazat", diff --git a/config/locales/activerecord.cs.yml b/config/locales/activerecord.cs.yml index e9465228d..57240a19e 100644 --- a/config/locales/activerecord.cs.yml +++ b/config/locales/activerecord.cs.yml @@ -2,8 +2,9 @@ cs: activerecord: attributes: - status: - owned_poll: Anketa + poll: + expires_at: Uzávěrka + options: Volby errors: models: account: diff --git a/config/locales/cs.yml b/config/locales/cs.yml index fa4a00cb5..2ec3f6790 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -249,6 +249,7 @@ cs: feature_profile_directory: Adresář profilů feature_registrations: Registrace feature_relay: Federovací most + feature_timeline_preview: Náhled časové osy features: Vlastnosti hidden_service: Federace se skrytými službami open_reports: otevřená hlášení From 58667072d9923b17c90543550294aa9f801103d7 Mon Sep 17 00:00:00 2001 From: ThibG Date: Thu, 28 Mar 2019 18:33:26 +0100 Subject: [PATCH 004/366] Fix opacity of relationship tags (#10411) --- app/javascript/styles/mastodon/components.scss | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index f63c66d46..81d823374 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -3064,15 +3064,19 @@ a.status-card.compact:hover { .relationship-tag { color: $primary-text-color; margin-bottom: 4px; - opacity: 0.7; display: block; vertical-align: top; - background-color: rgba($base-overlay-background, 0.4); + background-color: $base-overlay-background; text-transform: uppercase; font-size: 11px; font-weight: 500; padding: 4px; border-radius: 4px; + opacity: 0.7; + + &:hover { + opacity: 1; + } } .setting-toggle { From 2a326940e8e694b9904040b74853fea01817d76a Mon Sep 17 00:00:00 2001 From: Masoud Abkenar Date: Fri, 29 Mar 2019 14:04:55 +0100 Subject: [PATCH 005/366] l10n update: fa (#10417) --- app/javascript/mastodon/locales/fa.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 0bfafd222..91a27e366 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -83,7 +83,7 @@ "compose_form.spoiler.unmarked": "نوشته پنهان نیست", "compose_form.spoiler_placeholder": "هشدار محتوا", "confirmation_modal.cancel": "بی‌خیال", - "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.block_and_report": "مسدودسازی و گزارش", "confirmations.block.confirm": "مسدود کن", "confirmations.block.message": "آیا واقعاً می‌خواهید {name} را مسدود کنید؟", "confirmations.delete.confirm": "پاک کن", From 34090a85e4a8db1b28416cb8a5c0703cab271cfd Mon Sep 17 00:00:00 2001 From: Alix Rossi Date: Fri, 29 Mar 2019 14:06:16 +0100 Subject: [PATCH 006/366] Update Corsican translations (#10418) * Update Corsican translation * Update Corsican YML * Corsican JSON fix * Update co.yml --- app/javascript/mastodon/locales/co.json | 6 +++--- config/locales/activerecord.co.yml | 5 +++-- config/locales/co.yml | 28 +++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index acc680c53..154feab98 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -83,7 +83,7 @@ "compose_form.spoiler.unmarked": "Testu micca piattatu", "compose_form.spoiler_placeholder": "Scrive u vostr'avertimentu quì", "confirmation_modal.cancel": "Annullà", - "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.block_and_report": "Bluccà è signalà", "confirmations.block.confirm": "Bluccà", "confirmations.block.message": "Site sicuru·a che vulete bluccà @{name}?", "confirmations.delete.confirm": "Toglie", @@ -136,7 +136,7 @@ "follow_request.reject": "Righjittà", "getting_started.developers": "Sviluppatori", "getting_started.directory": "Annuariu di i prufili", - "getting_started.documentation": "Documentation", + "getting_started.documentation": "Ducumentazione", "getting_started.heading": "Per principià", "getting_started.invite": "Invità ghjente", "getting_started.open_source_notice": "Mastodon ghjè un lugiziale liberu. Pudete cuntribuisce à u codice o a traduzione, o palisà un bug, nant'à GitHub: {github}.", @@ -238,7 +238,7 @@ "navigation_bar.lists": "Liste", "navigation_bar.logout": "Scunnettassi", "navigation_bar.mutes": "Utilizatori piattati", - "navigation_bar.personal": "Personal", + "navigation_bar.personal": "Persunale", "navigation_bar.pins": "Statuti puntarulati", "navigation_bar.preferences": "Preferenze", "navigation_bar.public_timeline": "Linea pubblica glubale", diff --git a/config/locales/activerecord.co.yml b/config/locales/activerecord.co.yml index 20c35b67f..0a9a936dd 100644 --- a/config/locales/activerecord.co.yml +++ b/config/locales/activerecord.co.yml @@ -2,8 +2,9 @@ co: activerecord: attributes: - status: - owned_poll: Scandagliu + poll: + expires_at: Fine + options: Scelte errors: models: account: diff --git a/config/locales/co.yml b/config/locales/co.yml index 71882b7cb..90c60e292 100644 --- a/config/locales/co.yml +++ b/config/locales/co.yml @@ -245,6 +245,7 @@ co: feature_profile_directory: Annuariu di i prufili feature_registrations: Arregistramenti feature_relay: Ripetitore di federazione + feature_timeline_preview: Vista di a linea pubblica features: Funziunalità hidden_service: Federazione cù servizii piattati open_reports: signalamenti aperti @@ -586,6 +587,9 @@ co: content: Scusate, mà c’hè statu un prublemu cù u nostru servore. title: Sta pagina ùn hè curretta noscript_html: Mastodon nant’à u web hà bisognu di JavaScript per funziunà. Pudete ancu pruvà l’applicazione native per a vostra piattaforma. + existing_username_validator: + not_found: ùn si pudeva micca truvà un'utilizatore lucale cù stu cugnome + not_found_multiple: ùn si pudeva micca truvà %{usernames} exports: archive_takeout: date: Data @@ -629,10 +633,31 @@ co: all: Tuttu changes_saved_msg: Cambiamenti salvati! copy: Cupià + order_by: Urdinà per save_changes: Salvà e mudificazione validation_errors: one: Qualcosa ùn và bè! Verificate u prublemu quì sottu other: Qualcosa ùn và bè! Verificate %{count} prublemi quì sottu + html_validator: + invalid_markup: 'cuntene codice HTML invalidu: %{error}' + identity_proofs: + active: Attiva + authorize: Ié, auturizà + authorize_connection_prompt: Auturizà sta cunnessione crittograffica? + errors: + failed: A cunnessione crittograffica s'hè fiascata. Ripruvate da %{provider}. + keybase: + invalid_token: E fiscie Keybase sò hash di firme è duvenu fà 66 caratteri esadecimali (0-9 A-F) + verification_failed: Keybase ùn ricunosce micca sta fiscia cum'una firma di l'utilizatore Keybase %{kb_username}. Ripruvate da Keybase. + wrong_user: Ùn si pò micca creà una prova per %{proving} mentre chì site cunnettatu·a cum'è %{current}. Cunnettatevi cum'è %{proving} è ripruvate. + explanation_html: Quì pudete cunnettà crittografficamente e vostre altre identità, cum'è per esempiu un prufile Keybase. Quessu permette à d'altre persone di mandà vi missaghji crittati, è d'affiducià i cuntinuti chì mandate. + i_am_html: Sò %{username} nant'à %{service}. + identity: Identità + inactive: Inattiva + publicize_checkbox: 'È mandà stu statutu:' + publicize_toot: 'Hè pruvata! Sò %{username} nant’à %{service}: %{url}' + status: Statutu di a verificazione + view_proof: Vede a prova imports: modes: merge: Unisce @@ -753,6 +778,8 @@ co: relationships: activity: Attività di u contu dormant: Inattivu + last_active: Ultima attività + most_recent: Più ricente moved: Spiazzatu mutual: Mutuale primary: Primariu @@ -835,6 +862,7 @@ co: edit_profile: Mudificà u prufile export: Spurtazione d’infurmazione featured_tags: Hashtag in vista + identity_proofs: Prove d'identità import: Impurtazione migrate: Migrazione di u contu notifications: Nutificazione From 3b1c64cadcbca1ac47ba246841a7a32cb4df2b6c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Fri, 29 Mar 2019 22:06:56 +0900 Subject: [PATCH 007/366] Bump capybara from 3.15.0 to 3.16.0 (#10415) Bumps [capybara](https://github.com/teamcapybara/capybara) from 3.15.0 to 3.16.0. - [Release notes](https://github.com/teamcapybara/capybara/releases) - [Changelog](https://github.com/teamcapybara/capybara/blob/master/History.md) - [Commits](https://github.com/teamcapybara/capybara/compare/3.15.0...3.16.0) Signed-off-by: dependabot[bot] --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 325ea2c62..e3c97b1d6 100644 --- a/Gemfile +++ b/Gemfile @@ -107,7 +107,7 @@ group :production, :test do end group :test do - gem 'capybara', '~> 3.15' + gem 'capybara', '~> 3.16' gem 'climate_control', '~> 0.2' gem 'faker', '~> 1.9' gem 'microformats', '~> 4.1' diff --git a/Gemfile.lock b/Gemfile.lock index 5ef611931..dbe83569c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -127,7 +127,7 @@ GEM sshkit (~> 1.3) capistrano-yarn (2.0.2) capistrano (~> 3.0) - capybara (3.15.0) + capybara (3.16.0) addressable mini_mime (>= 0.1.3) nokogiri (~> 1.8) @@ -670,7 +670,7 @@ DEPENDENCIES capistrano-rails (~> 1.4) capistrano-rbenv (~> 2.1) capistrano-yarn (~> 2.0) - capybara (~> 3.15) + capybara (~> 3.16) charlock_holmes (~> 0.7.6) chewy (~> 5.0) cld3 (~> 3.2.3) From e5d79d1635a142367d8e7065f6a84e0c214c67a5 Mon Sep 17 00:00:00 2001 From: Jeong Arm Date: Fri, 29 Mar 2019 22:14:24 +0900 Subject: [PATCH 008/366] Add missing Korean translations (#10416) * Fix Korean translation * Add missing translation --- app/javascript/mastodon/locales/ko.json | 2 +- config/locales/ko.yml | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 568359651..433592ffd 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -83,7 +83,7 @@ "compose_form.spoiler.unmarked": "열람주의가 설정 되어 있지 않습니다", "compose_form.spoiler_placeholder": "경고", "confirmation_modal.cancel": "취소", - "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.block_and_report": "차단하고 신고하기", "confirmations.block.confirm": "차단", "confirmations.block.message": "정말로 {name}를 차단하시겠습니까?", "confirmations.delete.confirm": "삭제", diff --git a/config/locales/ko.yml b/config/locales/ko.yml index ee5d662bb..fd1470d2d 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -245,6 +245,7 @@ ko: feature_profile_directory: 프로필 디렉토리 feature_registrations: 가입 feature_relay: 연합 릴레이 + feature_timeline_preview: 타임라인 미리보기 features: 기능 hidden_service: 히든 서비스와의 연합 open_reports: 미해결 신고 @@ -634,6 +635,7 @@ ko: all: 모두 changes_saved_msg: 정상적으로 변경되었습니다! copy: 복사 + order_by: 순서 save_changes: 변경 사항을 저장 validation_errors: one: 오류가 발생했습니다. 아래 오류를 확인해 주십시오 @@ -649,10 +651,13 @@ ko: keybase: invalid_token: 키베이스 토큰은 서명의 해시이며 66자의 16진수 문자여야 합니다 verification_failed: 키베이스가 이 토큰을 키베이스 유저 %{kb_username}의 서명으로 인식하지 못했습니다. 키베이스에서 다시 시도하세요. + wrong_user: "%{current}로 로그인 한 상태에서는 %{proving}에 대한 증명을 할 수 없습니다. %{proving}으로 로그인 한 후 다시 시도하세요." explanation_html: 키베이스와 같은 다른 명의에 대한 암호화 연결을 할 수 있습니다. 이것으로 다른 사람들이 당신에게 암호화 된 메시지를 보낼 수 있고 당신의 메시지를 믿을 수 있습니다. i_am_html: 나는 %{service}의 %{username} 입니다. identity: 신원 inactive: 비활성 + publicize_checkbox: '그리고 이것을 툿 하세요:' + publicize_toot: '증명되었습니다! 저는 %{service}에 있는 %{username}입니다: %{url}' status: 인증 상태 view_proof: 증명 보기 imports: @@ -775,6 +780,8 @@ ko: relationships: activity: 계정 활동 dormant: 휴면 + last_active: 마지막 활동 + most_recent: 가장 최근 moved: 이동함 mutual: 상호 팔로우 primary: 주 계정 From 1d62b88f8d55aa063e6c6dc4c047f1cf74f6b5bc Mon Sep 17 00:00:00 2001 From: Aditoo17 <42938951+Aditoo17@users.noreply.github.com> Date: Fri, 29 Mar 2019 16:59:48 +0100 Subject: [PATCH 009/366] I18n: Update Czech translation (#10419) --- app/javascript/mastodon/locales/cs.json | 2 +- config/locales/cs.yml | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 9115f5081..e711961e7 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -26,7 +26,7 @@ "account.posts": "Tooty", "account.posts_with_replies": "Tooty a odpovědi", "account.report": "Nahlásit uživatele @{name}", - "account.requested": "Požadavek čeká na schválení. Kliknutím zrušíte požadavek o sledování", + "account.requested": "Čekám na schválení. Kliknutím zrušíte požadavek o sledování", "account.share": "Sdílet profil uživatele @{name}", "account.show_reblogs": "Zobrazit boosty od uživatele @{name}", "account.unblock": "Odblokovat uživatele @{name}", diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 2ec3f6790..43d8764ff 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -650,16 +650,19 @@ cs: identity_proofs: active: Aktivní authorize: Ano, autorizovat - authorize_connection_prompt: Autorizovat tohle kryptografické spojení? + authorize_connection_prompt: Autorizovat toto kryptografické spojení? errors: failed: Kryptografické spojení selhalo. Prosím zkuste to znovu z %{provider}. keybase: invalid_token: Tokeny Keybase jsou hashe podpisů a musí být 66 znaků dlouhé verification_failed: Keybase nerozpoznává tento token jako podpis uživatele %{kb_username} na Keybase. Prosím zkuste to znovu z Keybase. + wrong_user: Nelze vytvořit důkaz pro uživatele %{proving}, zatímco jste přihlášen/a jako %{current}. Přihlaste se jako %{proving} a zkuste to znovu. explanation_html: Zde můžete kryptograficky připojit vaše ostatní identity, například profil Keybase. To dovolí jiným lidem vám posílat šifrované zprávy a důvěřovat obsahu, který jim pošlete. i_am_html: Na %{service} jsem %{username}. identity: Identita inactive: Neaktivní + publicize_checkbox: 'A tootnout tohle:' + publicize_toot: 'Je to dokázáno! Na %{service} jsem %{username}: %{url}' status: Stav ověření view_proof: Zobrazit důkaz imports: @@ -784,6 +787,8 @@ cs: relationships: activity: Aktivita účtu dormant: Nečinné + last_active: Naposledy aktivní + most_recent: Nedávno přidaní moved: Přesunuté mutual: Vzájemné primary: Primární @@ -1026,7 +1031,7 @@ cs: recovery_codes_regenerated: Záložní kódy byly úspěšně znovu vygenerované recovery_instructions_html: Ztratíte-li někdy přístup k vašemu telefonu, můžete k získání přístupu k účtu použít jeden ze záložních kódů. Uchovávejte tyto kódy v bezpečí. Můžete si je například vytisknout a uložit je mezi jiné důležité dokumenty. setup: Nastavit - wrong_code: Zadaný kód byl neplatný! Je serverový čas a čas na zařízení správný? + wrong_code: Zadaný kód byl neplatný! Je čas na serveru a na zařízení správný? user_mailer: backup_ready: explanation: Vyžádal/a jste si úplnou zálohu svého účtu Mastodon. Nyní je připravena ke stažení! From bd02ec6daa974dcd3231e73826a56e08dbeedadc Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 30 Mar 2019 00:43:29 +0100 Subject: [PATCH 010/366] Add indication that you have been blocked in web UI (#10420) --- .../features/account/components/header.js | 10 ++++----- .../features/account_timeline/index.js | 22 ++++++++++++++----- .../mastodon/features/followers/index.js | 8 ++++--- .../mastodon/features/following/index.js | 8 ++++--- .../styles/mastodon/stream_entries.scss | 6 ++--- 5 files changed, 34 insertions(+), 20 deletions(-) diff --git a/app/javascript/mastodon/features/account/components/header.js b/app/javascript/mastodon/features/account/components/header.js index 76f50a5a4..f21ba8a9c 100644 --- a/app/javascript/mastodon/features/account/components/header.js +++ b/app/javascript/mastodon/features/account/components/header.js @@ -94,15 +94,15 @@ class Header extends ImmutablePureComponent { let menu = []; if (me !== account.get('id') && account.getIn(['relationship', 'followed_by'])) { - info.push(); + info.push(); } else if (me !== account.get('id') && account.getIn(['relationship', 'blocking'])) { - info.push(); + info.push(); } if (me !== account.get('id') && account.getIn(['relationship', 'muting'])) { - info.push(); + info.push(); } else if (me !== account.get('id') && account.getIn(['relationship', 'domain_blocking'])) { - info.push(); + info.push(); } if (me !== account.get('id')) { @@ -111,7 +111,7 @@ class Header extends ImmutablePureComponent { } else if (account.getIn(['relationship', 'requested'])) { actionBtn = + + + + + +
); } @@ -148,22 +131,10 @@ class ModifierPicker extends React.PureComponent { render () { const { active, modifier } = this.props; - function setRef(ref) { - if (!ref) { - return; - } - // TODO: It would be nice if we could pass props directly to emoji-mart's buttons. - const button = ref.querySelector('button'); - button.setAttribute('aria-haspopup', 'true'); - button.setAttribute('aria-expanded', active); - } - return (
-
- -
- + +
); } diff --git a/app/javascript/mastodon/features/emoji/emoji_picker.js b/app/javascript/mastodon/features/emoji/emoji_picker.js index 73fcaa8c8..044d38cb2 100644 --- a/app/javascript/mastodon/features/emoji/emoji_picker.js +++ b/app/javascript/mastodon/features/emoji/emoji_picker.js @@ -1,5 +1,5 @@ -import Picker from 'emoji-mart/dist-modern/components/picker/picker'; -import Emoji from 'emoji-mart/dist-modern/components/emoji/emoji'; +import Picker from 'emoji-mart/dist-es/components/picker/picker'; +import Emoji from 'emoji-mart/dist-es/components/emoji/emoji'; export { Picker, diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 3c17c2ee4..fdf5144ce 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -3226,11 +3226,11 @@ a.status-card.compact:hover { box-shadow: 1px 2px 6px rgba($base-shadow-color, 0.2); overflow: hidden; - li { + button { display: block; cursor: pointer; border: 0; - padding: 3px 8px; + padding: 4px 8px; background: transparent; &:hover, diff --git a/app/javascript/styles/mastodon/emoji_picker.scss b/app/javascript/styles/mastodon/emoji_picker.scss index d53f41a0b..e49084b5f 100644 --- a/app/javascript/styles/mastodon/emoji_picker.scss +++ b/app/javascript/styles/mastodon/emoji_picker.scss @@ -1,5 +1,3 @@ -@import '../../../node_modules/emoji-mart/css/emoji-mart.css'; - .emoji-mart { &, * { @@ -53,14 +51,6 @@ &:hover { color: darken($lighter-text-color, 4%); - - svg { - fill: darken($lighter-text-color, 4%); - } - } - - svg { - fill: $lighter-text-color; } } @@ -69,19 +59,11 @@ &:hover { color: darken($highlight-text-color, 4%); - - svg { - fill: darken($highlight-text-color, 4%); - } } .emoji-mart-anchor-bar { bottom: -1px; } - - svg { - fill: $highlight-text-color; - } } .emoji-mart-anchor-bar { @@ -101,6 +83,7 @@ } svg { + fill: currentColor; max-height: 18px; } } @@ -120,14 +103,15 @@ } .emoji-mart-search { - margin: 10px 40px 10px 5px; + padding: 10px; + padding-right: 45px; background: $simple-background-color; input { font-size: 14px; font-weight: 400; padding: 7px 9px; - font-family: $font-sans-serif; + font-family: inherit; display: block; width: 100%; background: rgba($ui-secondary-color, 0.3); @@ -182,7 +166,6 @@ font-weight: 500; padding: 5px 6px; background: $simple-background-color; - font-family: $font-sans-serif; } } diff --git a/config/webpack/rules/node_modules.js b/config/webpack/rules/node_modules.js index 5debc1b5d..7ed05504b 100644 --- a/config/webpack/rules/node_modules.js +++ b/config/webpack/rules/node_modules.js @@ -11,16 +11,7 @@ module.exports = { options: { babelrc: false, plugins: [ - [ - 'transform-react-remove-prop-types', - { - mode: 'remove', - removeImport: true, - additionalLibraries: [ - '../../utils/shared-props', // emoji-mart - ], - }, - ], + 'transform-react-remove-prop-types', ], cacheDirectory: join(settings.cache_path, 'babel-loader-node-modules'), cacheCompression: env.NODE_ENV === 'production', diff --git a/package.json b/package.json index b9d8f8af1..63cfa25b8 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "cssnano": "^4.1.10", "detect-passive-events": "^1.0.2", "dotenv": "^6.2.0", - "emoji-mart": "^2.10.0", + "emoji-mart": "Gargron/emoji-mart#build", "es6-symbol": "^3.1.1", "escape-html": "^1.0.3", "exif-js": "^2.3.0", diff --git a/yarn.lock b/yarn.lock index 9b0ec51db..9d7f0eccb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3173,12 +3173,9 @@ elliptic@^6.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.0" -emoji-mart@^2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/emoji-mart/-/emoji-mart-2.10.0.tgz#e1adec430f4963f79055b12b80e6d60c5abb742d" - integrity sha512-VhcX463f8TDaQc1Tpc8rI31E15+8KXOYff1vwjokjMT52bZlCQCyq3zrnNScSYjv95f1+R4DMMreeuPvYFvOhg== - dependencies: - prop-types "^15.6.0" +emoji-mart@Gargron/emoji-mart#build: + version "2.6.2" + resolved "https://codeload.github.com/Gargron/emoji-mart/tar.gz/ff00dc470b5b2d9f145a6d6e977a54de5df2b4c9" emoji-regex@^6.5.1: version "6.5.1" From 1714ea597866556ef9dd21d5d382f1d9181e0924 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 30 Mar 2019 02:12:06 +0100 Subject: [PATCH 014/366] Add ActivityPub representation for identity proofs (#10414) * Add ActivityPub representation for identity proofs * Add tests --- app/lib/activitypub/adapter.rb | 1 + app/lib/proof_provider/keybase.rb | 3 +- .../activitypub/actor_serializer.rb | 24 ++++++++++- .../activitypub/process_account_service.rb | 28 ++++++++++++- .../process_account_service_spec.rb | 41 +++++++++++++++++++ 5 files changed, 93 insertions(+), 4 deletions(-) diff --git a/app/lib/activitypub/adapter.rb b/app/lib/activitypub/adapter.rb index 7e0b16c25..94eb2899c 100644 --- a/app/lib/activitypub/adapter.rb +++ b/app/lib/activitypub/adapter.rb @@ -18,6 +18,7 @@ class ActivityPub::Adapter < ActiveModelSerializers::Adapter::Base atom_uri: { 'ostatus' => 'http://ostatus.org#', 'atomUri' => 'ostatus:atomUri' }, conversation: { 'ostatus' => 'http://ostatus.org#', 'inReplyToAtomUri' => 'ostatus:inReplyToAtomUri', 'conversation' => 'ostatus:conversation' }, focal_point: { 'toot' => 'http://joinmastodon.org/ns#', 'focalPoint' => { '@container' => '@list', '@id' => 'toot:focalPoint' } }, + identity_proof: { 'toot' => 'http://joinmastodon.org/ns#', 'IdentityProof' => 'toot:IdentityProof' }, }.freeze def self.default_key_transform diff --git a/app/lib/proof_provider/keybase.rb b/app/lib/proof_provider/keybase.rb index 672e1cb4b..628972e9d 100644 --- a/app/lib/proof_provider/keybase.rb +++ b/app/lib/proof_provider/keybase.rb @@ -28,7 +28,8 @@ class ProofProvider::Keybase return end - return if @proof.provider_username.blank? + # Do not perform synchronous validation for remote accounts + return if @proof.provider_username.blank? || !@proof.account.local? if verifier.valid? @proof.verified = true diff --git a/app/serializers/activitypub/actor_serializer.rb b/app/serializers/activitypub/actor_serializer.rb index 4b982b955..0644219fb 100644 --- a/app/serializers/activitypub/actor_serializer.rb +++ b/app/serializers/activitypub/actor_serializer.rb @@ -6,7 +6,7 @@ class ActivityPub::ActorSerializer < ActivityPub::Serializer context :security context_extensions :manually_approves_followers, :featured, :also_known_as, - :moved_to, :property_value, :hashtag, :emoji + :moved_to, :property_value, :hashtag, :emoji, :identity_proof attributes :id, :type, :following, :followers, :inbox, :outbox, :featured, @@ -115,7 +115,7 @@ class ActivityPub::ActorSerializer < ActivityPub::Serializer end def virtual_attachments - object.fields + object.fields + object.identity_proofs.active end def moved_to @@ -158,4 +158,24 @@ class ActivityPub::ActorSerializer < ActivityPub::Serializer Formatter.instance.format_field(object.account, object.value) end end + + class AccountIdentityProofSerializer < ActivityPub::Serializer + attributes :type, :name, :signature_algorithm, :signature_value + + def type + 'IdentityProof' + end + + def name + object.provider_username + end + + def signature_algorithm + object.provider + end + + def signature_value + object.token + end + end end diff --git a/app/services/activitypub/process_account_service.rb b/app/services/activitypub/process_account_service.rb index 5e3308428..6d0609ca0 100644 --- a/app/services/activitypub/process_account_service.rb +++ b/app/services/activitypub/process_account_service.rb @@ -24,6 +24,7 @@ class ActivityPub::ProcessAccountService < BaseService create_account if @account.nil? update_account process_tags + process_attachments else raise Mastodon::RaceConditionError end @@ -151,7 +152,7 @@ class ActivityPub::ProcessAccountService < BaseService def property_values return unless @json['attachment'].is_a?(Array) - @json['attachment'].select { |attachment| attachment['type'] == 'PropertyValue' }.map { |attachment| attachment.slice('name', 'value') } + as_array(@json['attachment']).select { |attachment| attachment['type'] == 'PropertyValue' }.map { |attachment| attachment.slice('name', 'value') } end def mismatching_origin?(url) @@ -231,6 +232,23 @@ class ActivityPub::ProcessAccountService < BaseService end end + def process_attachments + return if @json['attachment'].blank? + + previous_proofs = @account.identity_proofs.to_a + current_proofs = [] + + as_array(@json['attachment']).each do |attachment| + next unless equals_or_includes?(attachment['type'], 'IdentityProof') + current_proofs << process_identity_proof(attachment) + end + + previous_proofs.each do |previous_proof| + next if current_proofs.any? { |current_proof| current_proof.id == previous_proof.id } + previous_proof.delete + end + end + def process_emoji(tag) return if skip_download? return if tag['name'].blank? || tag['icon'].blank? || tag['icon']['url'].blank? @@ -247,4 +265,12 @@ class ActivityPub::ProcessAccountService < BaseService emoji.image_remote_url = image_url emoji.save end + + def process_identity_proof(attachment) + provider = attachment['signatureAlgorithm'] + provider_username = attachment['name'] + token = attachment['signatureValue'] + + @account.identity_proofs.where(provider: provider, provider_username: provider_username).find_or_create_by(provider: provider, provider_username: provider_username, token: token) + end end diff --git a/spec/services/activitypub/process_account_service_spec.rb b/spec/services/activitypub/process_account_service_spec.rb index d3318b2ed..ab8fb5cc3 100644 --- a/spec/services/activitypub/process_account_service_spec.rb +++ b/spec/services/activitypub/process_account_service_spec.rb @@ -28,4 +28,45 @@ RSpec.describe ActivityPub::ProcessAccountService, type: :service do expect(account.fields[1].value).to eq 'Unit test' end end + + context 'identity proofs' do + let(:payload) do + { + id: 'https://foo.test', + type: 'Actor', + inbox: 'https://foo.test/inbox', + attachment: [ + { type: 'IdentityProof', name: 'Alice', signatureAlgorithm: 'keybase', signatureValue: 'a' * 66 }, + ], + }.with_indifferent_access + end + + it 'parses out of attachment' do + account = subject.call('alice', 'example.com', payload) + + expect(account.identity_proofs.count).to eq 1 + + proof = account.identity_proofs.first + + expect(proof.provider).to eq 'keybase' + expect(proof.provider_username).to eq 'Alice' + expect(proof.token).to eq 'a' * 66 + end + + it 'removes no longer present proofs' do + account = Fabricate(:account, username: 'alice', domain: 'example.com') + old_proof = Fabricate(:account_identity_proof, account: account, provider: 'keybase', provider_username: 'Bob', token: 'b' * 66) + + subject.call('alice', 'example.com', payload) + + expect(account.identity_proofs.count).to eq 1 + expect(account.identity_proofs.find_by(id: old_proof.id)).to be_nil + end + + it 'queues a validity check on the proof' do + allow(ProofProvider::Keybase::Worker).to receive(:perform_async) + account = subject.call('alice', 'example.com', payload) + expect(ProofProvider::Keybase::Worker).to have_received(:perform_async) + end + end end From ac650d7a13b89666b916e011c782d34a89769689 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 30 Mar 2019 02:13:42 +0100 Subject: [PATCH 015/366] Bump version to 2.8.0rc1 (#10340) Update AUTHORS.md Update CHANGELOG.md --- AUTHORS.md | 283 +++++++++++++++++++++++++++------------- CHANGELOG.md | 73 +++++++++++ lib/mastodon/version.rb | 6 +- 3 files changed, 269 insertions(+), 93 deletions(-) diff --git a/AUTHORS.md b/AUTHORS.md index 3171214e0..8d3aaf480 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -6,8 +6,8 @@ and provided thanks to the work of the following contributors: * [Gargron](https://github.com/Gargron) * [ykzts](https://github.com/ykzts) -* [akihikodaki](https://github.com/akihikodaki) * [ThibG](https://github.com/ThibG) +* [akihikodaki](https://github.com/akihikodaki) * [mjankowski](https://github.com/mjankowski) * [dependabot[bot]](https://github.com/apps/dependabot) * [unarist](https://github.com/unarist) @@ -27,14 +27,14 @@ and provided thanks to the work of the following contributors: * [blackle](https://github.com/blackle) * [Quent-in](https://github.com/Quent-in) * [JantsoP](https://github.com/JantsoP) -* [mabkenar](https://github.com/mabkenar) * [Kjwon15](https://github.com/Kjwon15) +* [mabkenar](https://github.com/mabkenar) * [nullkal](https://github.com/nullkal) * [yookoala](https://github.com/yookoala) * [shuheiktgw](https://github.com/shuheiktgw) * [ashfurrow](https://github.com/ashfurrow) -* [Quenty31](https://github.com/Quenty31) * [zunda](https://github.com/zunda) +* [Quenty31](https://github.com/Quenty31) * [eramdam](https://github.com/eramdam) * [takayamaki](https://github.com/takayamaki) * [masarakki](https://github.com/masarakki) @@ -45,8 +45,8 @@ and provided thanks to the work of the following contributors: * [stephenburgess8](https://github.com/stephenburgess8) * [Wonderfall](https://github.com/Wonderfall) * [matteoaquila](https://github.com/matteoaquila) -* [rkarabut](https://github.com/rkarabut) * [yukimochi](https://github.com/yukimochi) +* [rkarabut](https://github.com/rkarabut) * [Artoria2e5](https://github.com/Artoria2e5) * [nightpool](https://github.com/nightpool) * [marrus-sh](https://github.com/marrus-sh) @@ -64,11 +64,14 @@ and provided thanks to the work of the following contributors: * [MaciekBaron](https://github.com/MaciekBaron) * [MitarashiDango](mailto:mitarashidango@users.noreply.github.com) * [beatrix-bitrot](https://github.com/beatrix-bitrot) +* [Aditoo17](https://github.com/Aditoo17) * [adbelle](https://github.com/adbelle) * [evanminto](https://github.com/evanminto) * [MightyPork](https://github.com/MightyPork) * [yhirano55](https://github.com/yhirano55) +* [rinsuki](https://github.com/rinsuki) * [camponez](https://github.com/camponez) +* [hinaloe](https://github.com/hinaloe) * [SerCom-KC](https://github.com/SerCom-KC) * [aschmitz](https://github.com/aschmitz) * [devkral](https://github.com/devkral) @@ -81,10 +84,8 @@ and provided thanks to the work of the following contributors: * [lindwurm](https://github.com/lindwurm) * [victorhck](mailto:victorhck@geeko.site) * [voidsatisfaction](https://github.com/voidsatisfaction) -* [rinsuki](https://github.com/rinsuki) * [hikari-no-yume](https://github.com/hikari-no-yume) * [angristan](https://github.com/angristan) -* [hinaloe](https://github.com/hinaloe) * [seefood](https://github.com/seefood) * [jackjennings](https://github.com/jackjennings) * [spla](mailto:spla@mastodont.cat) @@ -102,9 +103,10 @@ and provided thanks to the work of the following contributors: * [victorhck](https://github.com/victorhck) * [kedamaDQ](https://github.com/kedamaDQ) * [puckipedia](https://github.com/puckipedia) +* [trwnh](https://github.com/trwnh) * [fvh-P](https://github.com/fvh-P) -* [contraexemplo](https://github.com/contraexemplo) -* [Aditoo17](https://github.com/Aditoo17) +* [Anna e só](mailto:contraexemplos@gmail.com) +* [BenLubar](https://github.com/BenLubar) * [kazu9su](https://github.com/kazu9su) * [Komic](https://github.com/Komic) * [lmorchard](https://github.com/lmorchard) @@ -117,7 +119,6 @@ and provided thanks to the work of the following contributors: * [goofy-bz](mailto:goofy@babelzilla.org) * [kadiix](https://github.com/kadiix) * [kodacs](https://github.com/kodacs) -* [trwnh](https://github.com/trwnh) * [JMendyk](https://github.com/JMendyk) * [KScl](https://github.com/KScl) * [sterdev](https://github.com/sterdev) @@ -133,6 +134,7 @@ and provided thanks to the work of the following contributors: * [Reverite](https://github.com/Reverite) * [JohnD28](https://github.com/JohnD28) * [znz](https://github.com/znz) +* [marek-lach](https://github.com/marek-lach) * [Naouak](https://github.com/Naouak) * [pawelngei](https://github.com/pawelngei) * [rtucker](https://github.com/rtucker) @@ -150,7 +152,6 @@ and provided thanks to the work of the following contributors: * [178inaba](https://github.com/178inaba) * [alyssais](https://github.com/alyssais) * [hiphref](https://github.com/hiphref) -* [BenLubar](https://github.com/BenLubar) * [stalker314314](https://github.com/stalker314314) * [huertanix](https://github.com/huertanix) * [genesixx](https://github.com/genesixx) @@ -161,16 +162,16 @@ and provided thanks to the work of the following contributors: * [kmichl](https://github.com/kmichl) * [Kurtis Rainbolt-Greene](mailto:me@kurtisrainboltgreene.name) * [saper](https://github.com/saper) -* [marek-lach](https://github.com/marek-lach) * [nevillepark](https://github.com/nevillepark) * [ornithocoder](https://github.com/ornithocoder) * [pierreozoux](https://github.com/pierreozoux) * [qguv](https://github.com/qguv) * [Ram Lmn](mailto:ramlmn@users.noreply.github.com) +* [sascha-sl](https://github.com/sascha-sl) * [harukasan](https://github.com/harukasan) * [stamak](https://github.com/stamak) * [Technowix](mailto:technowix@users.noreply.github.com) -* [Eychics](https://github.com/Eychics) +* [Zoeille](https://github.com/Zoeille) * [Thor Harald Johansen](mailto:thj@thj.no) * [0x70b1a5](https://github.com/0x70b1a5) * [gled-rs](https://github.com/gled-rs) @@ -244,9 +245,9 @@ and provided thanks to the work of the following contributors: * [raymestalez](https://github.com/raymestalez) * [remram44](https://github.com/remram44) * [sts10](https://github.com/sts10) -* [sascha-sl](https://github.com/sascha-sl) * [u1-liquid](https://github.com/u1-liquid) * [sim6](https://github.com/sim6) +* [Sir-Boops](https://github.com/Sir-Boops) * [stemid](https://github.com/stemid) * [sumdog](https://github.com/sumdog) * [ThomasLeister](https://github.com/ThomasLeister) @@ -316,8 +317,11 @@ and provided thanks to the work of the following contributors: * [Andreas Drop](mailto:andy@remline.de) * [andi1984](https://github.com/andi1984) * [schas002](https://github.com/schas002) +* [contraexemplo](https://github.com/contraexemplo) * [abackstrom](https://github.com/abackstrom) +* [armandfardeau](https://github.com/armandfardeau) * [jumbosushi](https://github.com/jumbosushi) +* [aurelien-reeves](https://github.com/aurelien-reeves) * [ayumin](https://github.com/ayumin) * [BaptisteGelez](https://github.com/BaptisteGelez) * [bzg](https://github.com/bzg) @@ -335,7 +339,7 @@ and provided thanks to the work of the following contributors: * [Motoma](https://github.com/Motoma) * [chriswk](https://github.com/chriswk) * [csu](https://github.com/csu) -* [clarcharr](https://github.com/clarcharr) +* [clarfon](https://github.com/clarfon) * [kklleemm](https://github.com/kklleemm) * [colindean](https://github.com/colindean) * [dachinat](https://github.com/dachinat) @@ -358,6 +362,7 @@ and provided thanks to the work of the following contributors: * [eai04191](https://github.com/eai04191) * [d3vgru](https://github.com/d3vgru) * [Elizafox](https://github.com/Elizafox) +* [enewhuis](https://github.com/enewhuis) * [ericblade](https://github.com/ericblade) * [mikoim](https://github.com/mikoim) * [espenronnevik](https://github.com/espenronnevik) @@ -446,6 +451,7 @@ and provided thanks to the work of the following contributors: * [mouse-reeve](https://github.com/mouse-reeve) * [Mozinet-fr](https://github.com/Mozinet-fr) * [lae](https://github.com/lae) +* [nosada](https://github.com/nosada) * [Nanamachi](https://github.com/Nanamachi) * [orinthe](https://github.com/orinthe) * [NecroTechno](https://github.com/NecroTechno) @@ -462,10 +468,11 @@ and provided thanks to the work of the following contributors: * [noppa](https://github.com/noppa) * [Otakan951](https://github.com/Otakan951) * [fahy](https://github.com/fahy) -* [PatrickRWells](https://github.com/PatrickRWells) -* [Pangoraw](https://github.com/Pangoraw) -* [peterkeen](https://github.com/peterkeen) -* [pgate](https://github.com/pgate) +* [PatrickRWells](mailto:32802366+patrickrwells@users.noreply.github.com) +* [Paul](mailto:naydex.mc+github@gmail.com) +* [Pete Keen](mailto:pete@petekeen.net) +* [Pierre-Morgan Gate](mailto:pgate@users.noreply.github.com) +* [Ratmir Karabut](mailto:rkarabut@sfmodern.ru) * [Reto Kromer](mailto:retokromer@users.noreply.github.com) * [Rey Tucker](mailto:git@reytucker.us) * [Rob Watson](mailto:rfwatson@users.noreply.github.com) @@ -488,7 +495,6 @@ and provided thanks to the work of the following contributors: * [Sho Kusano](mailto:rosylilly@aduca.org) * [Shouko Yu](mailto:imshouko@gmail.com) * [Sina Mashek](mailto:sina@mashek.xyz) -* [Sir-Boops](mailto:admin@boops.me) * [Soshi Kato](mailto:mail@sossii.com) * [Spanky](mailto:2788886+spankyworks@users.noreply.github.com) * [Stanislas](mailto:angristan@pm.me) @@ -555,12 +561,14 @@ and provided thanks to the work of the following contributors: * [karlyeurl](mailto:karl.yeurl@gmail.com) * [kedama](mailto:32974885+kedamadq@users.noreply.github.com) * [kodai](mailto:shirafuta.kodai@gmail.com) +* [koyu](mailto:me@koyu.space) * [kuro5hin](mailto:rusty@kuro5hin.org) * [luzpaz](mailto:luzpaz@users.noreply.github.com) * [maxypy](mailto:maxime@mpigou.fr) * [mhe](mailto:mail@marcus-herrmann.com) * [mike castleman](mailto:m@mlcastle.net) * [mimikun](mailto:dzdzble_effort_311@outlook.jp) +* [mohemohe](mailto:mohemohe@users.noreply.github.com) * [mshrtkch](mailto:mshrtkch@users.noreply.github.com) * [muan](mailto:muan@github.com) * [namelessGonbai](mailto:43787036+namelessgonbai@users.noreply.github.com) @@ -599,243 +607,338 @@ This document is provided for informational purposes only. Since it is only upda Following people have contributed to translation of Mastodon: +- **Albanian** + - Besnik Bleta + - Aditoo - **Arabic** - ButterflyOfFire + - Aditoo + - Amrz0 - **Asturian** - ButterflyOfFire - Enol P. + - Aditoo - **Basque** + - Osoitz + - Aditoo - Aitzol - ButterflyOfFire - - Gorka Azkarate - - Osoitz - Peru Iparragirre + - Gorka Azkarate +- **Bengali** + - dxwc - **Bulgarian** - ButterflyOfFire + - Aditoo - **Catalan** + - spla + - Aditoo - ButterflyOfFire - Joan Montané - Jose Luis - - spla - **Chinese (Hong Kong)** - ButterflyOfFire - Luzi Leung + - Aditoo - **Chinese (Simplified)** - Allen Zhong - ButterflyOfFire - SerCom_KC + - martialarts + - Kaitian Xie + - Aditoo + - pan93412 - **Chinese (Traditional)** + - Aditoo - ButterflyOfFire - James58899 - - Jeff Huang + - pan93412 - S1ttidoe477 - SHA265 + - Jeff Huang - **Corsican** - Alix D. R. + - Aditoo - ButterflyOfFire - **Croatian** - ButterflyOfFire + - Aditoo - **Czech** - - ButterflyOfFire - - Lorem Ipsum + - Aditoo - Marek Ľach + - ButterflyOfFire - **Danish** - - ButterflyOfFire + - Einhjeriar - Rasmus Sæderup -- **Dutch** + - Aditoo + - ButterflyOfFire +- **Dutch** + - Albakham - ButterflyOfFire - - Jelv - jeroenpraat - rscmbbng + - Aditoo + - Jelv - **English** - ButterflyOfFire - Renato "Lond" Cerqueira +- **English (United Kingdom)** + - Albakham - **Esperanto** + - Aditoo - ButterflyOfFire + - Becci Cat - Jeong Arm - - Martin Bodin - Mélanie Chauvel - Vanege + - Martin Bodin - tuxayo/Victor Grousset - **Finnish** - ButterflyOfFire - - Jonne Arjoranta - - S Heija + - Mikko Poussu - Taru Luojola + - S Heija + - Aditoo + - Jonne Arjoranta - **French** - - Alda Marteau-Hardi + - Albakham - Alix D. R. - - Baptiste Jonglez - ButterflyOfFire - - Franck Paul - - Jean-Baptiste Holcroft + - codl + - Leia + - Alda Marteau-Hardi + - Mélanie Chauvel + - Paul Marques Mota + - azenet + - Olivier Humbert + - Aditoo - Jonathan Chan - Letiteuf55 - - Martin Bodin - - Mélanie Chauvel - - Olivier Humbert - - Paul Marques Mota - - Sylvhem + - Baptiste Jonglez + - goofy-mdn + - Jean-Baptiste Holcroft - Technowix - - Thibaut Girka + - Martin Bodin - Théodore - - azenet - - codl + - Thibaut Girka + - Franck Paul + - Sylvhem - **Galician** - ButterflyOfFire - Xose M. + - Aditoo - manequim - **Georgian** - ButterflyOfFire + - Aditoo - **German** - - Benedikt Geißler + - Aditoo - ButterflyOfFire - Daniel - - Eugen Rochko - - Koyu Berteon - - Patrick Figel - - Weblate Admin - averageunicorn - - ePirat - - koyu + - Koyu Berteon - larsreineke + - koyu + - Austin Jones - lilo + - Benedikt Geißler + - ePirat + - Eugen Rochko + - Weblate Admin + - Patrick Figel - **Greek** - - Antonis - - ButterflyOfFire - Dimitris Maroulidis + - Antonis + - Aditoo + - ButterflyOfFire - Konstantinos Grevenitis - **Hebrew** - ButterflyOfFire + - Aditoo - Ira - Yaron Shahrabani - **Hungarian** - - Adam Paszternak - ButterflyOfFire + - Adam Paszternak + - Aditoo - Tibike Miklós - **Ido** - ButterflyOfFire + - Aditoo - **Indonesian** - - Alfiana Sibuea + - afachri - ButterflyOfFire - Dito Kurnia Pratama - Eirworks - - afachri + - Aditoo + - Alfiana Sibuea - se7entime +- **Irish** + - Albakham + - Kevin Houlihan - **Italian** - Alessandro Levati + - Albakham - ButterflyOfFire + - Marcin Mikołajczak + - Aditoo - Giuseppe Pignataro - Stefano - **Japanese** - - ButterflyOfFire - - Kumasun Morino - - Yamagishi Kazutoshi + - Hinaloe + - 小鳥遊まりあ - mayaeh - osapon - - unarist - - 小鳥遊まりあ - 森の子リスのミーコの大冒険 -- **Korean** + - Kumasun Morino + - Yamagishi Kazutoshi + - Aditoo - ButterflyOfFire - Jeong Arm + - unarist +- **Kazakh** + - arshat + - Aditoo +- **Korean** + - Aditoo + - Jeong Arm + - ButterflyOfFire - Minori Hiraoka - Yamagishi Kazutoshi +- **Lithuanian** + - Sarunas Medeikis - **Malay** - - ButterflyOfFire - Muhammad Nur Hidayat (MNH48) + - Aditoo + - ButterflyOfFire - **Norwegian (old code)** - ButterflyOfFire - Espen Rønnevik + - Aditoo - Tale - **Occitan** + - Aditoo - ButterflyOfFire - - Maxenç - Quenti2 - Quentí + - Maxenç - **Persian** - - ButterflyOfFire - Masoud Abkenar -- **Polish** + - Aditoo + - ButterflyOfFire +- **Polish** + - Aditoo + - Albakham - ButterflyOfFire - - Jakub Mendyk - - Marcin Mikołajczak - - Marek Ľach - Stasiek Michalski + - Marcin Mikołajczak + - Jakub Mendyk + - Marek Ľach - krkk - **Portuguese** + - Albakham + - João Pinheiro + - manequim + - Aditoo - ButterflyOfFire - Hugo Gameiro - - manequim - **Portuguese (Brazil)** - - André Andrade + - Aditoo + - Albakham - Anna e só - - ButterflyOfFire - Renato "Lond" Cerqueira -- **Romanian** + - André Andrade - ButterflyOfFire +- **Romanian** - adrianbblk + - ButterflyOfFire + - Aditoo - **Russian** - - Andrew Zyabin + - Albakham - ButterflyOfFire - Evgeny Petrov + - Aditoo + - Павел Гастелло + - Andrew Zyabin - Yaron Shahrabani - **Serbian** - Branko Kokanovic - Burekz Finezt + - Aditoo - ButterflyOfFire - **Serbian (latin)** - ButterflyOfFire + - Aditoo - **Slovak** + - Aditoo - ButterflyOfFire - Ivan Pleva - - Lorem Ipsum - Marek Ľach - Peter - **Slovenian** - - ButterflyOfFire - Kristijan Tkalec + - Aditoo + - ButterflyOfFire - **Spanish** - - Angeles Broullón - - Antón López + - Albakham - ButterflyOfFire - Carlos Mondragon + - Antón López + - Max Winkler + - Pablo de la Concepción Sanz + - Sergio Soriano + - Angeles Broullón + - Lothar Wolf + - Aditoo - David Charte - Emmanuel - - Lothar Wolf - - Pablo de la Concepción Sanz - **Swedish** - ButterflyOfFire - - Elias Mårtenson - Isak Holmström - Shellkr + - Aditoo + - Elias Mårtenson - Stefan Midjich - Tim Stahel + - Jonas Hultén - **Telugu** + - avndp + - Ranjith Tellakula + - Aditoo - ButterflyOfFire - Joseph Nuthalapati - - Ranjith Tellakula - - avndp - **Thai** - ButterflyOfFire + - parnikkapore + - Thai Localization + - Aditoo - **Turkish** + - Ali Demirtas - ButterflyOfFire + - Aditoo - **Ukrainian** - - ButterflyOfFire - - Ivan Verchenko - alexcleac -- **Welsh** - ButterflyOfFire - - Jaz-Michael King - - Kevin Beynon - - Owain Rhys Lewis - - Renato "Lond" Cerqueira - - Rhoslyn Prys + - Aditoo + - Ivan Verchenko +- **Welsh** - carl morris + - Jaz-Michael King + - Owain Rhys Lewis + - Rhoslyn Prys + - Aditoo + - ButterflyOfFire + - Renato "Lond" Cerqueira + - Albakham + - Kevin Beynon - **Armenian** + - Aditoo - ButterflyOfFire - **Latvian** + - Aditoo - ButterflyOfFire + - Maigonis - **Tamil** + - Aditoo - ButterflyOfFire - Prasanna Venkadesh diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b10adbbf..91e66c400 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,79 @@ Changelog All notable changes to this project will be documented in this file. +## [Unreleased] +### Added + +- Add polls ([Gargron](https://github.com/tootsuite/mastodon/pull/10111), [ThibG](https://github.com/tootsuite/mastodon/pull/10155), [Gargron](https://github.com/tootsuite/mastodon/pull/10184), [ThibG](https://github.com/tootsuite/mastodon/pull/10196), [Gargron](https://github.com/tootsuite/mastodon/pull/10248), [ThibG](https://github.com/tootsuite/mastodon/pull/10255), [ThibG](https://github.com/tootsuite/mastodon/pull/10322), [Gargron](https://github.com/tootsuite/mastodon/pull/10138), [Gargron](https://github.com/tootsuite/mastodon/pull/10139), [Gargron](https://github.com/tootsuite/mastodon/pull/10144), [Gargron](https://github.com/tootsuite/mastodon/pull/10145),[Gargron](https://github.com/tootsuite/mastodon/pull/10146), [Gargron](https://github.com/tootsuite/mastodon/pull/10148), [Gargron](https://github.com/tootsuite/mastodon/pull/10151), [ThibG](https://github.com/tootsuite/mastodon/pull/10150), [Gargron](https://github.com/tootsuite/mastodon/pull/10168), [Gargron](https://github.com/tootsuite/mastodon/pull/10165), [Gargron](https://github.com/tootsuite/mastodon/pull/10172), [Gargron](https://github.com/tootsuite/mastodon/pull/10170), [Gargron](https://github.com/tootsuite/mastodon/pull/10171), [Gargron](https://github.com/tootsuite/mastodon/pull/10186), [Gargron](https://github.com/tootsuite/mastodon/pull/10189), [ThibG](https://github.com/tootsuite/mastodon/pull/10200), [rinsuki](https://github.com/tootsuite/mastodon/pull/10203), [Gargron](https://github.com/tootsuite/mastodon/pull/10213), [Gargron](https://github.com/tootsuite/mastodon/pull/10246), [Gargron](https://github.com/tootsuite/mastodon/pull/10265), [Gargron](https://github.com/tootsuite/mastodon/pull/10261), [ThibG](https://github.com/tootsuite/mastodon/pull/10333), [Gargron](https://github.com/tootsuite/mastodon/pull/10352), [ThibG](https://github.com/tootsuite/mastodon/pull/10140), [ThibG](https://github.com/tootsuite/mastodon/pull/10142), [ThibG](https://github.com/tootsuite/mastodon/pull/10141), [ThibG](https://github.com/tootsuite/mastodon/pull/10162), [ThibG](https://github.com/tootsuite/mastodon/pull/10161), [ThibG](https://github.com/tootsuite/mastodon/pull/10158), [ThibG](https://github.com/tootsuite/mastodon/pull/10156), [ThibG](https://github.com/tootsuite/mastodon/pull/10160), [Gargron](https://github.com/tootsuite/mastodon/pull/10185), [Gargron](https://github.com/tootsuite/mastodon/pull/10188), [ThibG](https://github.com/tootsuite/mastodon/pull/10195), [ThibG](https://github.com/tootsuite/mastodon/pull/10208), [Gargron](https://github.com/tootsuite/mastodon/pull/10187), [ThibG](https://github.com/tootsuite/mastodon/pull/10214), [ThibG](https://github.com/tootsuite/mastodon/pull/10209)) +- Add follows & followers managing UI ([Gargron](https://github.com/tootsuite/mastodon/pull/10268), [Gargron](https://github.com/tootsuite/mastodon/pull/10308), [Gargron](https://github.com/tootsuite/mastodon/pull/10404), [Gargron](https://github.com/tootsuite/mastodon/pull/10293)) +- Add identity proof integration with Keybase ([Gargron](https://github.com/tootsuite/mastodon/pull/10297), [xgess](https://github.com/tootsuite/mastodon/pull/10375), [Gargron](https://github.com/tootsuite/mastodon/pull/10338), [Gargron](https://github.com/tootsuite/mastodon/pull/10350), [Gargron](https://github.com/tootsuite/mastodon/pull/10414)) +- Add option to overwrite imported data instead of merging ([Gargron](https://github.com/tootsuite/mastodon/pull/9962)) +- Add featured hashtags to profiles ([Gargron](https://github.com/tootsuite/mastodon/pull/9755), [Gargron](https://github.com/tootsuite/mastodon/pull/10167), [Gargron](https://github.com/tootsuite/mastodon/pull/10249), [ThibG](https://github.com/tootsuite/mastodon/pull/10034)) +- Add admission-based registrations mode ([Gargron](https://github.com/tootsuite/mastodon/pull/10250), [ThibG](https://github.com/tootsuite/mastodon/pull/10269), [Gargron](https://github.com/tootsuite/mastodon/pull/10264), [ThibG](https://github.com/tootsuite/mastodon/pull/10321), [Gargron](https://github.com/tootsuite/mastodon/pull/10349)) +- Add support for WebP uploads ([acid-chicken](https://github.com/tootsuite/mastodon/pull/9879)) +- Add "copy link" item to status action bars in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/9983)) +- Add list title editing in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/9748)) +- Add a "Block & Report" button to the block confirmation dialog in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/10360)) +- Add disappointed elephant when the page crashes in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/10275)) +- Add ability to upload multiple files at once in web UI ([tmm576](https://github.com/tootsuite/mastodon/pull/9856)) +- Add indication that you have been blocked when viewing profiles in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/10420)) +- Add validations to admin settings to catch common mistakes ([Gargron](https://github.com/tootsuite/mastodon/pull/10348), [ThibG](https://github.com/tootsuite/mastodon/pull/10354)) +- Add `type`, `limit`, `offset`, `min_id`, `max_id`, `account_id` to search API ([Gargron](https://github.com/tootsuite/mastodon/pull/10091)) +- Add a preferences API so apps can share basic behaviours ([Gargron](https://github.com/tootsuite/mastodon/pull/10109)) +- Add `visibility` param to reblog REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/9851), [ThibG](https://github.com/tootsuite/mastodon/pull/10302)) +- Add `allowfullscreen` attribute to OEmbed iframe ([rinsuki](https://github.com/tootsuite/mastodon/pull/10370)) +- Add `blocked_by` relationship to the REST API ([Gargron](https://github.com/tootsuite/mastodon/pull/10373)) +- Add `tootctl statuses remove` to sweep unreferenced statuses ([Gargron](https://github.com/tootsuite/mastodon/pull/10063)) +- Add `tootctl search deploy` to avoid ugly rake task syntax ([Gargron](https://github.com/tootsuite/mastodon/pull/10403)) +- Add `tootctl self-destruct` to shut down server gracefully ([Gargron](https://github.com/tootsuite/mastodon/pull/10367)) +- Add option to hide application used to toot ([ThibG](https://github.com/tootsuite/mastodon/pull/9897), [rinsuki](https://github.com/tootsuite/mastodon/pull/9994), [hinaloe](https://github.com/tootsuite/mastodon/pull/10086)) +- Add `DB_SSLMODE` configuration variable ([sascha-sl](https://github.com/tootsuite/mastodon/pull/10210)) +- Add click-to-copy UI to invites page ([Gargron](https://github.com/tootsuite/mastodon/pull/10259)) +- Add self-replies fetching ([ThibG](https://github.com/tootsuite/mastodon/pull/10106), [ThibG](https://github.com/tootsuite/mastodon/pull/10128), [ThibG](https://github.com/tootsuite/mastodon/pull/10175), [ThibG](https://github.com/tootsuite/mastodon/pull/10201)) + +### Changed + +- Change design of landing page ([Gargron](https://github.com/tootsuite/mastodon/pull/10232), [Gargron](https://github.com/tootsuite/mastodon/pull/10260), [ThibG](https://github.com/tootsuite/mastodon/pull/10284), [ThibG](https://github.com/tootsuite/mastodon/pull/10291), [koyuawsmbrtn](https://github.com/tootsuite/mastodon/pull/10356), [Gargron](https://github.com/tootsuite/mastodon/pull/10245)) +- Change design of profile column in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/10337), [Aditoo17](https://github.com/tootsuite/mastodon/pull/10387), [ThibG](https://github.com/tootsuite/mastodon/pull/10390), [mayaeh](https://github.com/tootsuite/mastodon/pull/10379), [ThibG](https://github.com/tootsuite/mastodon/pull/10411)) +- Change language detector threshold from 140 characters to 4 words ([Gargron](https://github.com/tootsuite/mastodon/pull/10376)) +- Change language detector to always kick in for non-latin alphabets ([Gargron](https://github.com/tootsuite/mastodon/pull/10276)) +- Change icons of features on admin dashboard ([Gargron](https://github.com/tootsuite/mastodon/pull/10366)) +- Change DNS timeouts from 1s to 5s ([ThibG](https://github.com/tootsuite/mastodon/pull/10238)) +- Change Docker image to use Ubuntu with jemalloc ([Sir-Boops](https://github.com/tootsuite/mastodon/pull/10100), [BenLubar](https://github.com/tootsuite/mastodon/pull/10212)) +- Change public pages to be cacheable by proxies ([BenLubar](https://github.com/tootsuite/mastodon/pull/9059)) +- Change the 410 gone response for suspended accounts to be cacheable by proxies ([ThibG](https://github.com/tootsuite/mastodon/pull/10339)) +- Change web UI to not not empty timeline of blocked users on block ([ThibG](https://github.com/tootsuite/mastodon/pull/10359)) +- Change JSON serializer to remove unused `@context` values ([Gargron](https://github.com/tootsuite/mastodon/pull/10378)) +- Change GIFV file size limit to be the same as for other videos ([rinsuki](https://github.com/tootsuite/mastodon/pull/9924)) +- Change Webpack to not use @babel/preset-env to compile node_modules ([ykzts](https://github.com/tootsuite/mastodon/pull/10289)) +- Change web UI to use new Web Share Target API ([gol-cha](https://github.com/tootsuite/mastodon/pull/9963)) +- Change ActivityPub reports to have persistent URIs ([ThibG](https://github.com/tootsuite/mastodon/pull/10303)) + +### Removed + +- Remove zopfli compression to speed up Webpack from 6min to 1min ([nolanlawson](https://github.com/tootsuite/mastodon/pull/10288)) +- Remove stats.json generation to speed up Webpack ([nolanlawson](https://github.com/tootsuite/mastodon/pull/10290)) + +### Fixed + +- Fix public timelines being broken by new toots when they are not mounted in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/10131)) +- Fix quick filter settings not being saved when selecting a different filter in web UI ([ThibG](https://github.com/tootsuite/mastodon/pull/10296)) +- Fix remote interaction dialogs being indexed by search engines ([Gargron](https://github.com/tootsuite/mastodon/pull/10240)) +- Fix maxed-out invites not showing up as expired in UI ([Gargron](https://github.com/tootsuite/mastodon/pull/10274)) +- Fix scrollbar styles on compose textarea ([Gargron](https://github.com/tootsuite/mastodon/pull/10292)) +- Fix timeline merge workers being queued for remote users ([Gargron](https://github.com/tootsuite/mastodon/pull/10355)) +- Fix alternative relay support regression ([Gargron](https://github.com/tootsuite/mastodon/pull/10398)) +- Fix trying to fetch keys of unknown accounts on a self-delete from them ([ThibG](https://github.com/tootsuite/mastodon/pull/10326)) +- Fix CAS `:service_validate_url` option ([enewhuis](https://github.com/tootsuite/mastodon/pull/10328)) +- Fix race conditions when creating backups ([ThibG](https://github.com/tootsuite/mastodon/pull/10234)) +- Fix whitespace not being stripped out of username before validation ([aurelien-reeves](https://github.com/tootsuite/mastodon/pull/10239)) +- Fix n+1 query when deleting status ([Gargron](https://github.com/tootsuite/mastodon/pull/10247)) +- Fix exiting follows not being rejected when suspending a remote account ([ThibG](https://github.com/tootsuite/mastodon/pull/10230)) +- Fix the underlying button element in a disabled icon button not being disabled ([ThibG](https://github.com/tootsuite/mastodon/pull/10194)) +- Fix race condition when streaming out deleted statuses ([ThibG](https://github.com/tootsuite/mastodon/pull/10280)) +- Fix performance of admin federation UI by caching account counts ([Gargron](https://github.com/tootsuite/mastodon/pull/10374)) +- Fix JS error on pages that don't define a CSRF token ([hinaloe](https://github.com/tootsuite/mastodon/pull/10383)) + ## [2.7.4] - 2019-03-05 ### Fixed diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index bdfcd27b5..d6114320e 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -9,11 +9,11 @@ module Mastodon end def minor - 7 + 8 end def patch - 4 + 0 end def pre @@ -21,7 +21,7 @@ module Mastodon end def flags - '' + 'rc1' end def to_a From b7379da6ccb7ff5aa8c8b5ac7763fd30d9681948 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sat, 30 Mar 2019 03:14:31 +0100 Subject: [PATCH 016/366] Cache error 410 responses in recommended nginx configuration (#10425) --- dist/nginx.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/dist/nginx.conf b/dist/nginx.conf index 3d5741765..7c429bad4 100644 --- a/dist/nginx.conf +++ b/dist/nginx.conf @@ -78,6 +78,7 @@ server { proxy_cache CACHE; proxy_cache_valid 200 7d; + proxy_cache_valid 410 24h; proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; add_header X-Cached $upstream_cache_status; add_header Strict-Transport-Security "max-age=31536000"; From 51625d3423051edb65081a7203bdbe52224d35f3 Mon Sep 17 00:00:00 2001 From: Jeong Arm Date: Sat, 30 Mar 2019 15:47:25 +0900 Subject: [PATCH 017/366] Remove unused code (#10426) --- .../components/column_settings.js | 35 ------------------- .../containers/column_settings_container.js | 17 --------- 2 files changed, 52 deletions(-) delete mode 100644 app/javascript/mastodon/features/direct_timeline/components/column_settings.js delete mode 100644 app/javascript/mastodon/features/direct_timeline/containers/column_settings_container.js diff --git a/app/javascript/mastodon/features/direct_timeline/components/column_settings.js b/app/javascript/mastodon/features/direct_timeline/components/column_settings.js deleted file mode 100644 index b629c128d..000000000 --- a/app/javascript/mastodon/features/direct_timeline/components/column_settings.js +++ /dev/null @@ -1,35 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import ImmutablePropTypes from 'react-immutable-proptypes'; -import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; -import SettingText from '../../../components/setting_text'; - -const messages = defineMessages({ - filter_regex: { id: 'home.column_settings.filter_regex', defaultMessage: 'Filter out by regular expressions' }, - settings: { id: 'home.settings', defaultMessage: 'Column settings' }, -}); - -export default @injectIntl -class ColumnSettings extends React.PureComponent { - - static propTypes = { - settings: ImmutablePropTypes.map.isRequired, - onChange: PropTypes.func.isRequired, - intl: PropTypes.object.isRequired, - }; - - render () { - const { settings, onChange, intl } = this.props; - - return ( -
- - -
- -
-
- ); - } - -} diff --git a/app/javascript/mastodon/features/direct_timeline/containers/column_settings_container.js b/app/javascript/mastodon/features/direct_timeline/containers/column_settings_container.js deleted file mode 100644 index 38054ce9e..000000000 --- a/app/javascript/mastodon/features/direct_timeline/containers/column_settings_container.js +++ /dev/null @@ -1,17 +0,0 @@ -import { connect } from 'react-redux'; -import ColumnSettings from '../components/column_settings'; -import { changeSetting } from '../../../actions/settings'; - -const mapStateToProps = state => ({ - settings: state.getIn(['settings', 'direct']), -}); - -const mapDispatchToProps = dispatch => ({ - - onChange (key, checked) { - dispatch(changeSetting(['direct', ...key], checked)); - }, - -}); - -export default connect(mapStateToProps, mapDispatchToProps)(ColumnSettings); From abecaba317b3c28040efba2d3b84397ffbe85603 Mon Sep 17 00:00:00 2001 From: ThibG Date: Sat, 30 Mar 2019 18:15:23 +0100 Subject: [PATCH 018/366] Fix failing keybase-related test (#10428) --- spec/services/activitypub/process_account_service_spec.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spec/services/activitypub/process_account_service_spec.rb b/spec/services/activitypub/process_account_service_spec.rb index ab8fb5cc3..fee502949 100644 --- a/spec/services/activitypub/process_account_service_spec.rb +++ b/spec/services/activitypub/process_account_service_spec.rb @@ -42,6 +42,8 @@ RSpec.describe ActivityPub::ProcessAccountService, type: :service do end it 'parses out of attachment' do + allow(ProofProvider::Keybase::Worker).to receive(:perform_async) + account = subject.call('alice', 'example.com', payload) expect(account.identity_proofs.count).to eq 1 From 59cce07601cbac40c8e6f5af593ea957a57d209f Mon Sep 17 00:00:00 2001 From: slice Date: Sat, 30 Mar 2019 20:03:56 -0700 Subject: [PATCH 019/366] Add thumbnail, hero, and mascot back to Form::AdminSettings::KEYS (#10430) These will allow these images to be uploaded again on the admin settings page. --- app/models/form/admin_settings.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/models/form/admin_settings.rb b/app/models/form/admin_settings.rb index 2d3aa726d..85a6e6dff 100644 --- a/app/models/form/admin_settings.rb +++ b/app/models/form/admin_settings.rb @@ -25,6 +25,9 @@ class Form::AdminSettings preview_sensitive_media custom_css profile_directory + thumbnail + hero + mascot ).freeze BOOLEAN_KEYS = %i( From 68c797bece0ed0801cfc8718d77841b455bf4d0d Mon Sep 17 00:00:00 2001 From: ThibG Date: Sun, 31 Mar 2019 17:27:24 +0200 Subject: [PATCH 020/366] Ensure request.body isn't emptied out before signature verification (#10432) Fixes #10429 --- app/controllers/activitypub/inboxes_controller.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/controllers/activitypub/inboxes_controller.rb b/app/controllers/activitypub/inboxes_controller.rb index 1501b914e..a0b7532c2 100644 --- a/app/controllers/activitypub/inboxes_controller.rb +++ b/app/controllers/activitypub/inboxes_controller.rb @@ -32,7 +32,10 @@ class ActivityPub::InboxesController < Api::BaseController end def body - @body ||= request.body.read.force_encoding('UTF-8') + return @body if defined?(@body) + @body = request.body.read.force_encoding('UTF-8') + request.body.rewind if request.body.respond_to?(:rewind) + @body end def upgrade_account From abdf225353dfb9791933b5d2dbcd038dcdb656df Mon Sep 17 00:00:00 2001 From: mayaeh Date: Mon, 1 Apr 2019 12:50:05 +0900 Subject: [PATCH 021/366] i18n: Update Japanese translations (#10427) * Update Japanese translations. run yarn manage:translations && i18n-tasks add-missing * Update Japanese translations. * Fix mistake * Change to be concise. --- .../mastodon/locales/defaultMessages.json | 12 +++ app/javascript/mastodon/locales/en.json | 1 + app/javascript/mastodon/locales/ja.json | 41 +++++---- config/locales/activerecord.ja.yml | 7 +- config/locales/en.yml | 1 + config/locales/ja.yml | 91 ++++++++++++++----- 6 files changed, 106 insertions(+), 47 deletions(-) diff --git a/app/javascript/mastodon/locales/defaultMessages.json b/app/javascript/mastodon/locales/defaultMessages.json index cf0da6e47..5d1367020 100644 --- a/app/javascript/mastodon/locales/defaultMessages.json +++ b/app/javascript/mastodon/locales/defaultMessages.json @@ -551,6 +551,10 @@ }, { "descriptors": [ + { + "defaultMessage": "You are blocked", + "id": "empty_column.account_timeline_blocked" + }, { "defaultMessage": "No toots here!", "id": "empty_column.account_timeline" @@ -1251,6 +1255,10 @@ }, { "descriptors": [ + { + "defaultMessage": "You are blocked", + "id": "empty_column.account_timeline_blocked" + }, { "defaultMessage": "No one follows this user yet.", "id": "account.followers.empty" @@ -1260,6 +1268,10 @@ }, { "descriptors": [ + { + "defaultMessage": "You are blocked", + "id": "empty_column.account_timeline_blocked" + }, { "defaultMessage": "This user doesn't follow anyone yet.", "id": "account.follows.empty" diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index bf0c1bfab..45548eb55 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -117,6 +117,7 @@ "emoji_button.symbols": "Symbols", "emoji_button.travel": "Travel & Places", "empty_column.account_timeline": "No toots here!", + "empty_column.account_timeline_blocked": "You are blocked", "empty_column.blocks": "You haven't blocked any users yet.", "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 766ae0ec5..9f00332fc 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -1,12 +1,12 @@ { - "account.add_or_remove_from_list": "リストに追加または外す", + "account.add_or_remove_from_list": "リストから追加または外す", "account.badges.bot": "Bot", "account.block": "@{name}さんをブロック", "account.block_domain": "{domain}全体を非表示", "account.blocked": "ブロック済み", "account.direct": "@{name}さんにダイレクトメッセージ", "account.domain_blocked": "ドメイン非表示中", - "account.edit_profile": "プロフィールを編集", + "account.edit_profile": "プロフィール編集", "account.endorse": "プロフィールで紹介する", "account.follow": "フォロー", "account.followers": "フォロワー", @@ -16,7 +16,7 @@ "account.follows_you": "フォローされています", "account.hide_reblogs": "@{name}さんからのブーストを非表示", "account.link_verified_on": "このリンクの所有権は{date}に確認されました", - "account.locked_info": "このアカウントは承認制アカウントです。相手が確認するまでフォローは完了しません。", + "account.locked_info": "このアカウントは承認制アカウントです。相手が承認するまでフォローは完了しません。", "account.media": "メディア", "account.mention": "@{name}さんにトゥート", "account.moved_to": "{name}さんは引っ越しました:", @@ -30,7 +30,7 @@ "account.share": "@{name}さんのプロフィールを共有する", "account.show_reblogs": "@{name}さんからのブーストを表示", "account.unblock": "@{name}さんのブロックを解除", - "account.unblock_domain": "{domain}を表示", + "account.unblock_domain": "{domain}の非表示を解除", "account.unendorse": "プロフィールから外す", "account.unfollow": "フォロー解除", "account.unmute": "@{name}さんのミュートを解除", @@ -67,14 +67,14 @@ "community.column_settings.media_only": "メディアのみ表示", "compose_form.direct_message_warning": "このトゥートはメンションされた人にのみ送信されます。", "compose_form.direct_message_warning_learn_more": "もっと詳しく", - "compose_form.hashtag_warning": "このトゥートは未収載なのでハッシュタグの一覧に表示されません。公開トゥートだけがハッシュタグで検索できます。", + "compose_form.hashtag_warning": "このトゥートは公開設定ではないのでハッシュタグの一覧に表示されません。公開トゥートだけがハッシュタグで検索できます。", "compose_form.lock_disclaimer": "あなたのアカウントは{locked}になっていません。誰でもあなたをフォローすることができ、フォロワー限定の投稿を見ることができます。", "compose_form.lock_disclaimer.lock": "承認制", "compose_form.placeholder": "今なにしてる?", - "compose_form.poll.add_option": "Add a choice", - "compose_form.poll.duration": "投票期間", - "compose_form.poll.option_placeholder": "Choice {number}", - "compose_form.poll.remove_option": "Remove this choice", + "compose_form.poll.add_option": "追加", + "compose_form.poll.duration": "アンケート期間", + "compose_form.poll.option_placeholder": "選択肢 {number}", + "compose_form.poll.remove_option": "この選択肢を削除", "compose_form.publish": "トゥート", "compose_form.publish_loud": "{publish}!", "compose_form.sensitive.marked": "メディアに閲覧注意が設定されています", @@ -83,7 +83,7 @@ "compose_form.spoiler.unmarked": "閲覧注意が設定されていません", "compose_form.spoiler_placeholder": "ここに警告を書いてください", "confirmation_modal.cancel": "キャンセル", - "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.block_and_report": "ブロックし通報", "confirmations.block.confirm": "ブロック", "confirmations.block.message": "本当に{name}さんをブロックしますか?", "confirmations.delete.confirm": "削除", @@ -117,6 +117,7 @@ "emoji_button.symbols": "記号", "emoji_button.travel": "旅行と場所", "empty_column.account_timeline": "トゥートがありません!", + "empty_column.account_timeline_blocked": "ブロックされています", "empty_column.blocks": "まだ誰もブロックしていません。", "empty_column.community": "ローカルタイムラインはまだ使われていません。何か書いてみましょう!", "empty_column.direct": "ダイレクトメッセージはまだありません。ダイレクトメッセージをやりとりすると、ここに表示されます。", @@ -154,8 +155,8 @@ "home.column_settings.basic": "基本設定", "home.column_settings.show_reblogs": "ブースト表示", "home.column_settings.show_replies": "返信表示", - "intervals.full.days": "{number, plural, one {# day} other {# days}}", - "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", + "intervals.full.days": "{number}日", + "intervals.full.hours": "{number}時間", "intervals.full.minutes": "{number}分", "introduction.federation.action": "次へ", "introduction.federation.federated.headline": "連合タイムライン", @@ -173,7 +174,7 @@ "introduction.interactions.reply.text": "自身や人々のトゥートに返信することで、一連の会話に繋げることができます。", "introduction.welcome.action": "はじめる!", "introduction.welcome.headline": "はじめに", - "introduction.welcome.text": "Fediverseの世界へようこそ!あと少しでメッセージを配信したり、さまざまなサーバーを越えた友達と話せるようになります。ところでここ{domain}は特別なサーバーです…あなたのプロフィールを持つ主体のサーバーですので、名前を覚えておきましょう。", + "introduction.welcome.text": "Fediverseの世界へようこそ!あと少しでメッセージを配信したり、さまざまなサーバーを越えた友達と話せるようになります。ところで、ここ{domain}は特別なサーバーです…あなたのプロフィールを持つ主体のサーバーですので、名前を覚えておきましょう。", "keyboard_shortcuts.back": "戻る", "keyboard_shortcuts.blocked": "ブロックしたユーザーのリストを開く", "keyboard_shortcuts.boost": "ブースト", @@ -246,7 +247,7 @@ "notification.favourite": "{name}さんがあなたのトゥートをお気に入りに登録しました", "notification.follow": "{name}さんにフォローされました", "notification.mention": "{name}さんがあなたに返信しました", - "notification.poll": "A poll you have voted in has ended", + "notification.poll": "アンケートが終了しました", "notification.reblog": "{name}さんがあなたのトゥートをブーストしました", "notifications.clear": "通知を消去", "notifications.clear_confirmation": "本当に通知を消去しますか?", @@ -257,7 +258,7 @@ "notifications.column_settings.filter_bar.show": "表示", "notifications.column_settings.follow": "新しいフォロワー:", "notifications.column_settings.mention": "返信:", - "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.poll": "アンケート結果:", "notifications.column_settings.push": "プッシュ通知", "notifications.column_settings.reblog": "ブースト:", "notifications.column_settings.show": "カラムに表示", @@ -267,14 +268,14 @@ "notifications.filter.favourites": "お気に入り", "notifications.filter.follows": "フォロー", "notifications.filter.mentions": "返信", - "notifications.filter.polls": "Poll results", + "notifications.filter.polls": "アンケート結果", "notifications.group": "{count} 件の通知", "poll.closed": "終了", "poll.refresh": "更新", "poll.total_votes": "{count}票", - "poll.vote": "Vote", - "poll_button.add_poll": "Add a poll", - "poll_button.remove_poll": "投票を削除", + "poll.vote": "投票", + "poll_button.add_poll": "アンケートを追加", + "poll_button.remove_poll": "アンケートを削除", "privacy.change": "公開範囲を変更", "privacy.direct.long": "メンションしたユーザーだけに公開", "privacy.direct.short": "ダイレクト", @@ -366,7 +367,7 @@ "upload_area.title": "ドラッグ&ドロップでアップロード", "upload_button.label": "メディアを追加 (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_error.limit": "アップロードできる上限を超えています。", - "upload_error.poll": "File upload not allowed with polls.", + "upload_error.poll": "アンケートではファイルをアップロードできません。", "upload_form.description": "視覚障害者のための説明", "upload_form.focus": "プレビューを変更", "upload_form.undo": "削除", diff --git a/config/locales/activerecord.ja.yml b/config/locales/activerecord.ja.yml index 7bc4fc308..c3b4b7484 100644 --- a/config/locales/activerecord.ja.yml +++ b/config/locales/activerecord.ja.yml @@ -2,6 +2,9 @@ ja: activerecord: attributes: + poll: + expires_at: 期限 + options: 選択肢 user: email: メールアドレス errors: @@ -9,8 +12,8 @@ ja: account: attributes: username: - invalid: アルファベット・数値・アンダーバー(_)で入力してください + invalid: アルファベット・数字・アンダーバーの組み合わせで入力してください status: attributes: reblog: - taken: のブーストはすでに存在します + taken: は既にブーストされています diff --git a/config/locales/en.yml b/config/locales/en.yml index 64467be39..705024ff5 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -633,6 +633,7 @@ en: all: All changes_saved_msg: Changes successfully saved! copy: Copy + order_by: Order by save_changes: Save changes validation_errors: one: Something isn't quite right yet! Please review the error below diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 6eab21a49..09214a937 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -163,8 +163,8 @@ ja: search: 検索 shared_inbox_url: Shared inbox URL show: - created_reports: このアカウントで作られたレポート - targeted_reports: このアカウントについてのレポート + created_reports: このアカウントで作られた通報 + targeted_reports: このアカウントについての通報 silence: サイレンス silenced: サイレンス済み statuses: トゥート数 @@ -180,7 +180,7 @@ ja: web: Web action_logs: actions: - assigned_to_self_report: "%{name} さんがレポート %{target} を自身の担当に割り当てました" + assigned_to_self_report: "%{name} さんが通報 %{target} を自身の担当に割り当てました" change_email_user: "%{name} さんが %{target} さんのメールアドレスを変更しました" confirm_user: "%{name} さんが %{target} さんのメールアドレスを確認済みにしました" create_account_warning: "%{name} さんが %{target} さんに警告メールを送信しました" @@ -200,12 +200,12 @@ ja: memorialize_account: "%{name} さんが %{target} さんを追悼アカウントページに登録しました" promote_user: "%{name} さんが %{target} さんを昇格しました" remove_avatar_user: "%{name} さんが %{target} さんのアイコンを削除しました" - reopen_report: "%{name} さんがレポート %{target} を再び開きました" + reopen_report: "%{name} さんが通報 %{target} を再び開きました" reset_password_user: "%{name} さんが %{target} さんのパスワードをリセットしました" - resolve_report: "%{name} さんがレポート %{target} を解決済みにしました" + resolve_report: "%{name} さんが通報 %{target} を解決済みにしました" silence_account: "%{name} さんが %{target} さんをサイレンスにしました" suspend_account: "%{name} さんが %{target} さんを停止しました" - unassigned_report: "%{name} さんがレポート %{target} の担当を外しました" + unassigned_report: "%{name} さんが通報 %{target} の担当を外しました" unsilence_account: "%{name} さんが %{target} さんのサイレンスを解除しました" unsuspend_account: "%{name} さんが %{target} さんの停止を解除しました" update_custom_emoji: "%{name} さんがカスタム絵文字 %{target} を更新しました" @@ -245,9 +245,10 @@ ja: feature_profile_directory: ディレクトリ feature_registrations: 新規登録 feature_relay: 連合リレー + feature_timeline_preview: タイムラインプレビュー features: 機能 hidden_service: 秘匿サービスとの連合 - open_reports: 未解決のレポート + open_reports: 未解決の通報 recent_users: 最近登録したユーザー search: 全文検索 single_user_mode: シングルユーザーモード @@ -275,10 +276,10 @@ ja: title: 新規ドメインブロック reject_media: メディアファイルを拒否 reject_media_hint: ローカルに保存されたメディアファイルを削除し、今後のダウンロードを拒否します。停止とは無関係です - reject_reports: レポートを拒否 - reject_reports_hint: このドメインからのレポートをすべて無視します。停止とは無関係です + reject_reports: 通報を拒否 + reject_reports_hint: このドメインからの通報をすべて無視します。停止とは無関係です rejecting_media: メディアファイルを拒否中 - rejecting_reports: レポートを拒否中 + rejecting_reports: 通報を拒否中 severity: silence: サイレンス中 suspend: 停止中 @@ -319,7 +320,7 @@ ja: total_blocked_by_us: ブロック合計 total_followed_by_them: 被フォロー合計 total_followed_by_us: フォロー合計 - total_reported: レポート合計 + total_reported: 通報合計 total_storage: 添付されたメディア invites: deactivate_all: すべて無効化 @@ -345,19 +346,19 @@ ja: status: ステータス title: リレー report_notes: - created_msg: レポートメモを書き込みました! - destroyed_msg: レポートメモを削除しました! + created_msg: 通報メモを書き込みました! + destroyed_msg: 通報メモを削除しました! reports: account: note: メモ - report: レポート - action_taken_by: レポート処理者 + report: 通報 + action_taken_by: 通報処理者 are_you_sure: 本当に実行しますか? assign_to_self: 担当になる assigned: 担当者 comment: none: なし - created_at: レポート日時 + created_at: 通報日時 mark_as_resolved: 解決済みとしてマーク mark_as_unresolved: 未解決として再び開く notes: @@ -367,13 +368,13 @@ ja: delete: 削除 placeholder: どのような措置が取られたか、または関連する更新を記述してください… reopen: 再び開く - report: レポート#%{id} + report: 通報#%{id} reported_account: 報告対象アカウント reported_by: 報告者 resolved: 解決済み - resolved_msg: レポートを解決済みにしました! + resolved_msg: 通報を解決済みにしました! status: ステータス - title: レポート + title: 通報 unassign: 担当を外す unresolved: 未解決 updated_at: 更新日時 @@ -386,7 +387,7 @@ ja: title: 新規ユーザーが自動フォローするアカウント contact_information: email: ビジネスメールアドレス - username: 連絡先のユーザー名 + username: 連絡先ユーザー名 custom_css: desc_html: 全ページに適用されるCSSの編集 title: カスタムCSS @@ -586,6 +587,9 @@ ja: content: もうしわけありませんが、なにかが間違っています。 title: このページは正しくありません noscript_html: Mastodonのウェブアプリケーションを利用する場合はJavaScriptを有効にしてください。またはあなたのプラットフォーム向けのMastodonネイティブアプリを探すことができます。 + existing_username_validator: + not_found: そのようなユーザー名はローカルに見つかりませんでした + not_found_multiple: "%{usernames} は見つかりませんでした" exports: archive_takeout: date: 日時 @@ -629,10 +633,31 @@ ja: all: すべて changes_saved_msg: 正常に変更されました! copy: コピー + order_by: 並び順 save_changes: 変更を保存 validation_errors: one: エラーが発生しました! 以下のエラーを確認してください other: エラーが発生しました! 以下の%{count}個のエラーを確認してください + html_validator: + invalid_markup: '無効なHTMLマークアップが含まれています: %{error}' + identity_proofs: + active: アクティブ + authorize: 許可する + authorize_connection_prompt: この暗号化接続を許可しますか? + errors: + failed: 暗号化接続に失敗しました。%{provider}からもう一度やり直してください。 + keybase: + invalid_token: Keybaseトークンは16進数で66文字のハッシュである必要があります + verification_failed: KeybaseはこのトークンをKeybaseユーザー%{kb_username}の署名として認識しませんでした。Keybaseから再試行してください。 + wrong_user: "%{current}としてログインしている間%{proving}の証明を作成することはできません。%{proving}としてログインし、もう一度やり直してください。" + explanation_html: ここではKeybaseのような他のサービスのアカウントと暗号化し関連づけることができます。これにより他の人が暗号化されたメッセージを送信したり、その内容を信用できるようになります。 + i_am_html: I am %{username} on %{service}. + identity: Identity + inactive: 非アクティブ + publicize_checkbox: 'そしてこれをトゥートしてください:' + publicize_toot: 'It is proven! I am %{username} on %{service}: %{url}' + status: 認証状態 + view_proof: 証明を表示 imports: modes: merge: 統合 @@ -736,10 +761,11 @@ ja: truncate: "…" polls: errors: + already_voted: このアンケートには投票済みです duplicate_options: に同じものがあります duration_too_long: が長過ぎます duration_too_short: が短過ぎます - expired: 既に終了している投票です + expired: アンケートは既に終了しました over_character_limit: は%{max}文字より長くすることはできません too_few_options: は複数必要です too_many_options: は%{max}個までです @@ -748,6 +774,19 @@ ja: other: その他 publishing: 投稿 web: ウェブ + relationships: + activity: 活動 + dormant: 非アクティブ + last_active: 最後の活動 + most_recent: 新着 + moved: 引っ越し済み + mutual: 相互 + primary: 標準 + relationship: 関係性 + remove_selected_domains: 選択したドメインのフォロワーを全て解除 + remove_selected_followers: 選択したフォロワーを解除 + remove_selected_follows: 選択したユーザーをフォロー解除 + status: 状態 remote_follow: acct: あなたの ユーザー名@ドメイン を入力してください missing_resource: リダイレクト先が見つかりませんでした @@ -822,10 +861,12 @@ ja: edit_profile: プロフィールを編集 export: データのエクスポート featured_tags: 注目のハッシュタグ + identity_proofs: Identity proofs import: データのインポート migrate: アカウントの引っ越し notifications: 通知 preferences: ユーザー設定 + relationships: フォロー・フォロワー settings: 設定 two_factor_authentication: 二段階認証 your_apps: アプリ @@ -850,12 +891,12 @@ ja: limit: 固定できるトゥート数の上限に達しました ownership: 他人のトゥートを固定することはできません private: 非公開のトゥートを固定することはできません - reblog: ブーストされたトゥートを固定することはできません + reblog: ブーストを固定することはできません poll: total_votes: - one: "%{count} vote" - other: "%{count} votes" - vote: Vote + one: "%{count}票" + other: "%{count}票" + vote: 投票 show_more: もっと見る sign_in_to_participate: ログインして会話に参加 title: '%{name}: "%{quote}"' From 85973f4f37c8b94422f267654018d0d7f88ba32b Mon Sep 17 00:00:00 2001 From: slice Date: Sun, 31 Mar 2019 22:30:46 -0700 Subject: [PATCH 022/366] Improvements to image upload validation and creation (#10431) * Check if image value is nil? before creating an image Check if uploaded images aren't nil before creating SiteUpload models for them. * Validate presence of file in SiteUpload * Fix file presence validation * Fabricate SiteUpload#file * Add link to Creative Commons license --- app/models/form/admin_settings.rb | 2 +- app/models/site_upload.rb | 1 + spec/fabricators/assets/TEAPOT | 6 ++++++ spec/fabricators/assets/utah_teapot.png | Bin 0 -> 248232 bytes spec/fabricators/site_upload_fabricator.rb | 1 + 5 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 spec/fabricators/assets/TEAPOT create mode 100644 spec/fabricators/assets/utah_teapot.png diff --git a/app/models/form/admin_settings.rb b/app/models/form/admin_settings.rb index 85a6e6dff..d3af8c30f 100644 --- a/app/models/form/admin_settings.rb +++ b/app/models/form/admin_settings.rb @@ -67,7 +67,7 @@ class Form::AdminSettings KEYS.each do |key| value = instance_variable_get("@#{key}") - if UPLOAD_KEYS.include?(key) + if UPLOAD_KEYS.include?(key) && !value.nil? upload = SiteUpload.where(var: key).first_or_initialize(var: key) upload.update(file: value) else diff --git a/app/models/site_upload.rb b/app/models/site_upload.rb index 14d683767..cf10b30fc 100644 --- a/app/models/site_upload.rb +++ b/app/models/site_upload.rb @@ -18,6 +18,7 @@ class SiteUpload < ApplicationRecord has_attached_file :file validates_attachment_content_type :file, content_type: /\Aimage\/.*\z/ + validates :file, presence: true validates :var, presence: true, uniqueness: true before_save :set_meta diff --git a/spec/fabricators/assets/TEAPOT b/spec/fabricators/assets/TEAPOT new file mode 100644 index 000000000..e624ecb4c --- /dev/null +++ b/spec/fabricators/assets/TEAPOT @@ -0,0 +1,6 @@ +This "Utah teapot" photograph is licensed under the Creative Commons +Attribution-Share Alike 3.0 Unported license: + https://creativecommons.org/licenses/by-sa/3.0/deed.en + +Original source of work: + https://commons.wikimedia.org/wiki/File:Utah_teapot_simple_2.png diff --git a/spec/fabricators/assets/utah_teapot.png b/spec/fabricators/assets/utah_teapot.png new file mode 100644 index 0000000000000000000000000000000000000000..6708361e5aceffc71c344a5266486b707bc6a1d2 GIT binary patch literal 248232 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 z

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

&d#k;lJq-r1 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�BI@k4Z5?{s0emb1DxAM z|J*8qjfsHD>)yXhz*Yo=ZJd0mzq>}FK_v^MAfIR~0q}hTxCJ2nuMCQFfp*E}9XgDs z;5fclQL;XlCWM^@I7LAG_gFpP-;=#ITK){*$sr{{tO@~j;pPZ|42e(=_O&@khId9P z-;jXs#ss2a%`y1rh~Kk%0hAev<_UqExu^#2w33zF`&s<%gWX6lKL;6*8b3U9pt^N7 zx!h4+JPx{>J*R$ zL;ziP0sw%+)B=#tsHDJ`m(?$yDlr7sjs$V72Q|-tTxmd(^~`t( zWXmZy@`L!E>lX6IVmi1L@V9n3kXs+-x*n`Cn&kp~{=Jj3vf8ot*_(1}k*@sNt|g#t z{^~}T@;feOl`|%Qc5o4Q3_#|-N*8VvfUlO}UlR=06AZSJ2DBY*MccdhXsJ0}`d^(q zzzSf_pI;{}ux!+`3INQmCBx7|-}k||$^-yMcu+(JRL;ehj1Z_T0l4$hfhvMv%{52s z3l)#_*~g#&x}NzV;i~hVyUZ*fUk44E?F7I!(*FAZ%<8UBZq;O4{mwNO^+2`eTJMSk z*anoJ?|k9dHcd0t`!(SAr_;^F^5D&Fbf?p4QUDy1IElM{Nlg=a7Q{fyGPha0IkKL)NR8j97_SQejoaL%%5+M zR)ASyHe4PP^XXmRqP_*P3-@7zU33 zaHRk?0wBGBx$gXb6b1`@wE)HFqZlNFo5v37F0a%*r#* z>pxrAG2m>O>J7jxoHHv=D{J~|!Nt1!M08UBHVx8EYXcbw0D#l!G^q<(rUL*fK#R=2 z1F5t<{l481-*SHyizo|{mh1^QKLLe_7fj!$Q2`Kk0vHMVMy$4wh%vsqAVqll-zA0n= zBZ06rv2&mQxOdF88!cX+Xw4{;?pX!v67bz~A_Cwg0ra~9W-5~Z??WsY`#P>50bULT zz`2Qzb=?5Q8voJRUwx@pETE44A3XqiXqyI_wq@EBSzDHoU=XGNNC7mY0Y7DHfx~{` zmLR||PTckR1ONdHo_Zh!+Cn)2Yi1aM_vACVR*}rJ5DX6`Vu2r9499qy5*i^9jve1U zAy4uYw0X*y8FJ*6eN(3LmYkcFiETv;*wh5F-$KdtXAA(X9SX9F1^&AZ{POQOny$Yb zFzl1*mxw8e2;lnNqsD&-vU-=5!i;P_{uytAhmm1l`ro?_)NA68H3?y~{bPO)odUpr zFUJyqvTNs5D-Nj4M1b=e*z?isOcdD3#d{1sJphQPE|X^9c5jHAP3O%yuSr)qacjxF zEhnkGf4*!AI09fLsNcyz?L6R{b_Az%56O--=d1_W=K=KRDsvbkw6<;Ga5#WeOGGQO z{{AuI;G%6uNg-lWKmb_B$DZAm@005m-~(z)rrb&l*ky&Gksz_{4s)iAJm4iWm}SWZ zPkKF*0Wl#E+$!ItAm4INmrt)Xi`=^9VcsA!-@QOo7m)ouw|&R>ZYiH}=3o5#gpgAV zlo1cIQK&8846g+tCU(M%dYQozX6N2QAj+K_tmbw4nvD9lkOONmsOHB6MB^wqlh4cT zZLalxHXMqfMGrnHf1FM`Rf{=)uIaM zd1cK?L)CrAf>MRwx=sW6D(~-kw*Q`c1eERwamlMpoYZ--RH;$#80h=^$w;cBLUNEs z0Gtzi6&mkVfZ|;UfHRpOo?F6x)(n5;#_PbffB^ zX#pDqyDN05;hKGc<_+#Nk|1Za2WdTWQg6=#8S6ss%bvOJ335jTgTuYn{?7j$^Es`2 zBOnW6(m*6`!ZG6f3H0Y>DBWPXh|RzdjmJ}n3bFm9N@mzh>G)@8>snCu9h-un{`VOI zjeD09GOqmn&zE526(s(-;@;}zL0fpS|~Edw!;-RF$%N&sox z+V5q^;IGZVZCCr9?~EXQZx{%MzMs@)<8yT2-=B+H5&;0A@&M7aM4Sf{Za@m06O>ui zOFt3?cRe;3#U8ln^;LORZGCT<{m0*Lg7rT0&K+zQK$-SO%y-a=yecxn6)hBP*N=c$ za6LuWF^yx zOpp0@;otqMYJ#f^$sLV+$om#B$MFClPmV}{oF{%Xb;$gz33;IJcSRF7#IR2`s~DIJ z3**nB^gg(EDeID6*nxqlfIPFDD^w#`0+k#wHG4S-^MofB)9Xk(X>73HSFJ%Z0p-u5 z@|t=6-;z9jZ?MfD9}^M!6 z=00hPO-7YL-}lfDedG-xVkaYD$NHE7g>(ejkBNj2a~xHg!KHSV2v~6Bh_i1 zH?Avjv@dPZsFkQle+K}hrH(rIO!)2u8*Zd1NCAO6Zf?sYc_WXEGN^E&UF#o!$zn!I zSB`Dt0)f>OV~DkYI|tx7x%@eu#(BBEL~3jY-t+r7*`H?#84zdnyq8luh9r4S=qvP& zD`yfKAwK>aA={W2D+|?VHnC4HC#*~zQabTfq}5&&lO!a zmO@R;tUp_j3EL8vCD-@zsuj?9|E1%#&9#YZ`zn&eydo#vRh+45=@3g0(og~*1#4RZ zu{~w|rQa!+_TOj2#IqRg?NSO+e(ihuPmJ!pqro5I22!+&Yh7B}jsHHKIshPO+ZLLp zWnGz91#h&{A$Nlg4rQbfmj%|k8%T4_TK_DQ0s&BENYjY>LeL(l9Y|AGp~)?>j%wa~0b9w2eBM&h_o&4v!tGGV~Q$?s6H3QQ}`XJMWuuGQ16=7NdFKneD34_~r;J;_%i;!Lr9n46=b};l7l?qz>x#Wnk@xV!S7?{KPFE6-%EyWn9es$E$7nO z^ku$l67YP_d&MMidg!u0L3t3I2YmM6o|{{?mWOxUH zcC_L;YD^D9(Cz>}SMTo=198S(CINV2KnHQr&m!*v4csLF5Gcj?iQ!;g)-RP2psK2n z05*!_Z+Wh<@nP&FoFI560-*_;Epa}X$panG=>5@o<4^><>89{G1uzx+9Y8_Ggz7p1 zEdC%Fu$|*WR3lc4BpwBK{pkCCz*V&_Z%>Zq*Sc-aV=58ws%%Q;!zP)zsyRqmDDSfW zM8o`^G))V4`Nt_;h-f4NTS8tc-*ykGX@i;e)%Jc)D1%+1 z*(qA<$IiEH!zd%`FYx@o1CqcyaC*M7@`9kOU~ygahyr)~>1POmK_c6}Dws>S?HY+B z<9()O+H%dyuQAFF5d+%OJ5k<_Z2Lwxrv7sZiHdPQ3{?)k;U@o%^Vbx*l~ZvR%0vEpu$xUFj8w`IRoDzV- zUokG;+E~T&eBHfc*_QwkGg01iW!bB>d8v_9TS&HjUmZk*!{MNJ3owJuO635TRVPb^ zm#W5*3Z83lT&gkP-Z)m=t=_!C_hZ$(I1f3nM|F*+{>6wni95j*-FuZ7zS0)}N=pEC zbKhS_G?aeFc0DBo1{Is;odZzSlt>heq8-#z$pUQ!yx@hv$){rzK|&zp zXO~*W0un%>EZEY_7H#{92BIT?G_^8{*CxbS*e|g*#x>5O_OYmmNL}Mo)6#{Y;fNda zoIcM88(6&>z zfPM(gMvJ=xSizt2JTSa%f%Yi|RI9*qiCkV(9N`&j?sp&vw;0dhdEP}EQd%)z!{kmF zXD?)63C6L^x&5%4_bpoqKn<8H3AQ#mPeIT3ZEMkK=kkd9?`%INrN^f8JbNgVdq?MJ z+fnY%x_EEC;MjQ;L?m2vya{wO_fB~w&W-JTnrm}$bW|3vzq@CvVIYH#c2>Z_d z-1n{l_V|($^btirLN7U@w2Ae-WNbwFhGR|py-WDzm)CR-@Opn-{;i**Re*9AQe?O9 z?0f9}?sGj^&@|0d=ih9wk(IoNs0KD}!5M}g{8o5zHp}+`82`ul0N7Y_H3&T?2(MaH zsp2~&_qc)pCk|mRMM~Pubr) zEI1GUb6GKFeYYqNWNSOMRD#YjQpbLu_I1ii9#GwJR%}fKW%suo@T>97*~3#J^ZHa? z-&mGM6PTt+snXFH z8~=KbpL3G{_T%E0UtUv9zi*cg#_*2>0nA}wTA;7 z+7@!Pxn;q!|MJyH;g*fq1rmrj5fte?I|9Ic#?LgA5&$_8V1E_BcI^mDNQ0^pgG~s4 z!VGc|k)XF7R6(@_$g@8$sB7PZ2*|gr+X5_@07!-NxD^0cK4&xQ^Y#RGo!y44s#zy$ z*O&V1EjN%XAqcB7;|90;@-=8Lu(ns*INI-ickB+}zkmMT?Z9=@G{I-e)Bu$H2iHG^ zH0toKX*3D!6ZH@6QR-R=Xt($NDy$#hT!F9?n5ORsTrZu^zFBVy__6R^+>->@lL*j{ zjbDCwLuboi?<(!yUe;f_;N7c?{_fAy3f5_-Y(7=LXwKa~WaTSft4&r@zkMG84HN_q zZh;#Amo5a($OizRZ5n7=t_%QI1k@`_0k&X6OM_AC=L=>0Rp1}imRC^m=W?G9W$`>w zAc5pkRe^p@>j;A^5nurM*6iZepDO|-Mp9I6+vk}xsvR3j-w*9`_4`}d`dSXsw|XD- z^VJ50dk_id2t2nW1XebYrR|PY0{-299Rc9pv9@i+J%8Wpg3&+3c{d;hEon9I;}i;A zH3_*Pu+?Yk2#8hd+gc#L6_DS7 z5ZKGKZ;fH4^?GI!U?3o%nUn{J2!M(3JC7d#B;;YN96$wayU?NQdg%M!yXM+*yB$&I zu6_X95d(DB*YHyP(S0k@zZ<L7>jWIfKHeDs<1&E37>H|B?VWek{Y>ll zp?`kvbC^7XK5ED<`M{t}Azv6rM+WfI{wIh4QCWa}uW}wy0ny*e-|=j1`#xYry=~^| zED^_DYYGrAAp)VVx0i?mYD+I9M2L1T;uAhgqQ#5-hm+aMUX#f2t&m$Rpm1aNSUvY0P1%r2mnt2>ksPh zQ)lj@TW}wdLBGxj9$5=ShsfXKu_c*zV`s;&y?j`zlV{rxzm zQZ}%R1Td`e4OS`gdY~+RR|jxl3I6A zK+Kh&`&D4J5ruu&}QM31VC`E?Pu1FiyZ-%%mO8l4c2w~Kaq%7q>0dZo&)$l8JiV%0ggz4*56MR z|GfkJYv4b02!PA!`1|*7=5Ra$(P>CY(2h$0s5B{{=I3|-`Z-d;4vbi36X?Gg+i@RU zx283aI?j!2kHG%m@5@R9jEMkgl)vYI@Ea4r)UKcJSqgPo3t#GN!MYZu7_UpEt=gM8G)#>hEjybq8k34DfX#V00}R$Y+3fz+Br!op#s&!|Ziw zmilj5ORQKo(Lz_N9LBllp_FIN(43 z{PXEPG!Jy3{-)kwTXLy8k_Da&z$khzD!08G*<$cKt@1k^7QyuEqD=tIKbS{9_&bU9 zNsi~$hu%eC&?~C{ow9}J^G|p_A4A7O-a>}k+Ap04hp^v1aCoR;Fze%kk9zq^>+K$4bU%Oc={eO}gpa|=QP5}-;p z41vB=R+yvDz*-01T|dMQ;e>5aXYnX?P(=1YLkM_AeeKDD91rz1Qjm}UG59~g@m38& zoDK+8-}U~9-f@QjU}yOg`oPPY)a|ukySilW^^H#_Ir;^erRo2Bh=BS&KHDx^IX^4! zk`Ms*0nz^Adp}OMz$KzDCjdN4EoK}^+P3h&KYxmpwHeVQO`qBGoV*usk5H%?)0|ze zwFNwX4g%nBa{ifmcxeGxivn`KnHQjxA1jUKOMx=OwU#}zS@hkD)G#0b1TECYL;;Gm zG9n7Pwf+Mg0A341i}r)EzUJWP{5zBfDEGDCk(twb$CX_PH00OlJx1%)C@ou?9blaX zKIMq_Lf%>tK}6Y0SL?rg?VTiiwf&ZH2EfYJhnFy0c()0B1zupp3izPMpWWbR{ZmxM zExWE>+aFw)o#L(3e;+b{)4^x%emc>>XAG3aRZ%);TC>pa$cVvfb}TRkKWVI`@A`N= z!k<5Xg0y{4OB;Y_U{tB5?0>N0hbsTxbv}U-#K(r>{NJhie;yl08~UkM;nTbK%oaE! z634wqjuA0u#@lYtKmMGC$ttP<>Hx5MWR;=f(B>mGlkD9LsgaE1ms3?P= z@_zB(&Pv7_*pD5jDwwAb2-GA2C{jx5!Rybv)D!2s{gCt>uXEyObb zpQw%P=UmcRQ4-|d#cBWDfg|z$QQPZ!>nv}>d)W$_vUh!7hKg^Un!4ErX!t~fpU-D_ zy^byc6zv%ptl{PwVC}<|vI7dk*|iQ}t}pMXP4i?=%nqt$=dZ^Bo$`_RdoFvn0e+wm zNck+sw;1hj4Li!ZC$j}&cHO7R+jU-ONh>(TLgq(z`PcXCLpt4J=QpDNK;h4yL+H=k zh$357)L+>9{tBv@#_0PA(29+LoPnt$$y>^nZ^ACGyU|BL7t z6$DZ`5STIryh-R12^1^<(@p|h&@?fibb~c4`Mw&nBdr&%0F@-0F)s!#$_vhaN4Zy2 zG6RmkQv*Oz=J?k(+=W za$otf6Zsf##WSDZDv7*S!Kj^4r(#}dS`bpx3_Tu4$z@Ce(9kB2!E%*gE3Tyh+mI6m zUY@-ua!*ZwU)|Rv8*BW{Zb$~u65@t2H;cI~33QG2Hxk-iwL|tf>?s48a!*8*M(tXH zpdlJ$;zT~!8%98M&qGS*0C+%$zgq-y zYtNSo%!Um7q7o%X`&n2~ehz4ti0!8LCeqk!8rs1WD4$BD;oZ@vzK$+pkSE(twO@K_ z1W=;a-p$IQ0bqVUpMi)z9RiBX3)NcbfiQiB;rC(x^>fKNQ4`3QVtY`&H**{+8AD$O z-qp3z3Sg~#_H=#o{3T*$ywx+1_!$A?qn?_f;nM&T!a$yZAfqGrHS|le7R)sTyb=0> zrO&*@=IB3xF~b zAto92Kw(QM5egY#nN7#bfhft=2P>K=kN(57_P~pbn-Al+%T~Nn1n5>aVSKz!kh1=& zWlDAnjMx6X_N{8!KQe+KH--&*mrVv_@5sm^$Uz)0+TYuoTPgfw$1w)8L)-QFht$4w zqUul(3Kc?t7nG?0^KKSQEIeCFX-|E!l%VLO&DVf~%H}I-_Bm1iMr1l35md&tT*FuW zf2(-*EWK-H2dRjW#@Jvw$7(Q!JYVX_1fcNx`%eX&)yOO<0oNn*X6(HZno@{-wJ>iP)C}PVw8XS3T2&jk$wMbdrRSU62ix#}A|w0mKg!nd2NUNVWG8@S734 zxrGp-h8*D?OGM%M{1YCJO=#S~G$Lp_X3_6ouNO<;FOAS=Y5o;8@;EYh3i!qEUaKRz zYW(-`&p&^gZ@Fz-q$vh==!Ib0l23E(&K%V$VGo=^jmkGC zvM*}uCCQ$czOJEA8K?g?;~7$Hk17ce|94l+kkNV&0=7)VmkB*;TY*Ba_O&x>*vfX; z+5~y)RfyL9OcxN{KI6$ChGH*H*I!%o?;`jr>i^jomFe1k?GG)+V+b`eQQ|8Tz!HeT z@LHO890Pcws%!J5AJ6PzOMB(G)|Wj4ChrM{w%X(Cya@nLP%pps_gc-t6tIdN8jUjX ztyKASW5aoe$K&yi`qQA7uf*(fYYyoHvR|)WTR$X#Ka$QmoCP3jFBByfep&`1Y}=zM z5*Q2mmBhfQ$h$Y5iz*~Q4*a8pK$-wem9)jV_J7vx1Si0`!U_LA0U%wQ&V9(II~+_z z^Jg4nMmp|Dja#DD&1*T>?|#rG7Z^4Y!XhzYw*Wpb!B^msl>gKyyaj1(^LO1fTOg7j2(s^$Pl)(A>%Y;YADR_`>S0J zU?93{1LpgFpr0E4N+RRmL;`%104NtTT)vmpJ052|^JO3^&2dZD7hF|XHsDn&yM6)U zPK^f?&m@WZKf_~tR0H!mwRB#~nv-nUcQD)fQ6lma*Z7}#YI$VgOwmtCh1A8lQik_H zv^6^dJRXmZV}f_Po=4cWOYrGZ)TWOpU@VfJWfdz8{?*RhezpA7<-{6TF>h2H&d-=P!Cta%aOqo+YZV{OLE(82siO?E35SJGW0enN*zCt2URwva< z8y{;7TxtI#cE~&D21&YpP}VU^H4ox(0W;;kUgMv17N~Z45Y!WYE=qEsu1)n1t@5bR zDwl!(bG}|$^6Z3^BjgX#bk&7Lb0Yr*5PauO>J}Dr&{MG?;CJz^?xr zAA2W+j;}DSGe6t5h3E56nNG*v_DHZ4@)W%@-G2|S*X#2w%ei?8_Qg)^K^BBeUHby< z2l(Hw-=pTJpwdPt7X-xTcV~xzmN3!rTn7nIWB^3&{HNAfgJrslv9@MLElA@m2@9x7 zg+u9R%5DHsC*A`-4>*h-nwd?z7Z?Hjmj1<^JeFES>uNI?`a*22R)i?am-2CI3&ssJ z3TjSygJdX)ff~UeAq7Iv=?-LLFeItNJRuR70*EXjw))4aeZy36u>Jk}>X3%rd|edwdbWk%}k)UGf(&3m3Dyz*1t-gQs%!s!{5JuBR>YrF`jjw0Sb%4bv>mVv=s*wual=098S2@71iyu?M)@93ZpE1ay?5xvc<40KDA^02tq+yqB(P0H<+aoro9_camN zlK|8A2u&tvP+Zd23j5Y-6@bGMZLxfM)9({2O)Cif6XHe#-sq zILT`H8RNnLz|s;sg1o`ds=Zu$dRIuR(r&T*ZqZ)W5K?V{&Z-W=us?m7S$5dpu51X#-fd{eNoQ!*D; zw=zV3zW_gou4)}PfWA-t0Ntw$;J+U;Y@qnMnv8*RRuWP8^XJb;>~5%%J754xp%)bY z9y_G_{(6i2q3P6J$G_|RcZ40tfPX3;bYunWT_ZXAUOBlCM|zI>{{3Lv=}f!(X9xfh z5W?%o7P!O&%l^f2lD?#VoJr5T|Iyk2a}q)T>;qpTf`Wg1*?U#9grrPFxrj-G%#X44 zw_ru8g%8P%ev3hUrTw7k@xwiLEz8B>;Al`Z-6JYFqKY-5;94^rVxa==y65AHPB+_` z(MKq@W*em~4~ePU!UF5Pb6X@t@l6_y?s`5Tr{!Q}ttD-B(IehNm9Qsjr?DUVFAZD6 zamaKEAq=zK6QHiiC?KYtk}vywgr3hw`1^PNWG$+V1=0K27VW&hiUjzA$MUso$qG35 zio<4oQ>8{gBb)I#3lx0@VpJDg2WQKi?jJ}@+&yJ^+qUrM&!41qo_1EY6<%|rkVXBm zSCKcW8#luKLR>ljR{Fm-Cyrnc=k1OZ|MMR4?4UBLP72mY zLIOyq*c6Db9=*JJ(q*;C_7Ac@9?~2+yhZXlWea`m!@gP7Wi_QaR~?2P#>68{qVQ_;11XM99Qv)Bqk zs{cVm;qiFBMFD3?fDj0@mITOr!JkS3tkpPJmcPcF_o1yj@$4~ zM$fSyJ8ayW_$ZyAux*dyyh3=_?d5MePLvUGQ!jtcuAEO~Rw6%+Kphetn zE0W-z(|)I^%|==}BH$AaA106i@ss|yv^bTk|$ zPwl!~@yXFz$`WqCX{?ly2j|bWZQ=2FgxBjO3h}kyndGfXXNds!`@Ppa9Bb$4;<(%i zjc^fa975?{`0^+GP$o2<{w>!U%MU3_0EDds*0z|K*g%+$^-n50fYY%{2!ppl{quZ= z$KyFRA{`dI+|v5>cjxc^{(WWb_ey6e2D*h9P%^bp5%`-2{?{Yz;fP3FB*6J^l#u}2 zwuNom!oK%A0<=KV>$QI}394&8w6Y=?#unl!l8u>E8z6{|l$UBEd}@n@!++k{|0x_;^s;Ncn>!@O5X=FJ1WzM$n8m-Nf(p$ z`r#!(SB0P`rQ<3dr65l(>)pSHf`dwaj#kBZ>ljhuTg?*z3wFckey&u&sri)oqn0E? z@rm3r1E}J!uZ+Oo*wz`|G!-4McpH`b%*(91jTmDx!tyb#!9N_&xCiu~ovcTTzsF@4 zhEZKbyP#^+e-HcqifZ-CIgqFOV@En8^Pbr|juHYj=#Of&-y(la65t)J&IJt5`+S6s zs5WL`In-xaM6M5TeTr7cfWAWk&74L5+BP;+79SiRlVvM_-(gkcxP5JTTiT$}_n!a4 zoT&aCHBvVBkQ2F%qZo=1Tb=TU{b7J7k zM ztm7MP0&j#*T(=RZ{>1-usMuRb+5l?7FTVKsEbk4sp4UGTq`QV7k6x}vz5iAPkFsFJ zD4i|+`>F6>Dng^WL7xsnyjkV#sP+qWR~-%8@khXW<2lADZwnYAK|taa(x6X@ox(kb z%JJ4PHnsXrtr9x7E!?&9Q`3$~fcU5sK-$}ud%V8G0Pe7^8Kn@Sj0sjL2Cvt(XkYsp zmK>+|&eZk)n4dep)@S{G=^;Paw4{%8s+&o{#YN@88RR2@Y#(xmG}Uw=r38KQnQ{`xxBymUYz~8~2$o ztD`LA)ZDk*IzOkt|Fl~2qInCe%fWAHIgX`Nv0beGFF5}3IO_eWQxL~%!9|S0%%lE$ zCdyaN;dn1Uh=TpI$>+eo?nGFaWONt)snQ?U{v0Ggs$RTpTX@kcasV*(RQrxVbPzbH z9szx_65{Uz&#dOgQFUPyOX0p$MtTfXb@yhMHkfT;5*a-Xus6ubpuF^>r@vr>^j+Hz zP7IAWQg{n6Z2|c1<^{0Pi-B7;L!alceNnt^yLE*k21x_ClixC_4PlW1Xy;zWgQBBCHnsXI}R80SJr4l zyfx1ZcuHHhtsx6A6ylPAP8dELTcpbqbi?Ub4Ot*K{`vfK)%#C@|2oL8{~qD>+AC52 zEHy9_)96M0+im?;8G`VMx}RA9AzUqr4zgkoM33-zJi_0 z&_lAucp7I!PE9+2+eLtz=0A@3aIfjxT6KQBSEe6JbpVW@yI6MLV*Itm2SGTS?w>ip z>Ce90yE7nAts|VN5{u9VeiSbT?V>+Em!E;D7u zKjm~@;MsFr`J00m@lcBV5K;K^=MwwV83YMv zJbupheie!T2>eqLDL&cguSWfeL0sYLzk9yQNmkII+7|-wZVUK`HrYwOrSh3#Mc=aw zq4izp?F4DQtxhbd=jvb4`;q7*FB2eyvC_Sa)ZjQnP^;VfZ(=I44-;mhH+QNVWn*TT zIH4ZBe>I!DPCwuqod9A|)@w>?35Lu5%)@6Z5Tbt)tJw!fNdalPf1?WzY{s`{Lu73k zrNFvI7N_Jj*PeaH2Ax+&_n5df;N^Qcf%IfN7g*pGnFl7(|A?T%ce|a?ukHpg$O2$} zOUv#FFz5pC74}08yxqWm5JvlT-ipA1GA0V3*ADA}e|{hLzEfXw2S@d86N>YumN zJ6~q+w)S(wO@nX!mI6$o?ubM`uHzn$E$sVN$%L@lgRZQILnx3Ua)quU#}8u>e?vib zfH^9u*G1_!MozmsZYjcSBpfq^XJps^u_a0W^X_ZC}}f z5I?`M&3X``jWSZ9U;eSCK1;L6O??r(y&cjqUgW3ST#e8EC0GRv}z z0_i$UIfgGStIKbRTLYeg!%NoSr|pzu3&A3r1NXO2_^ue=SH%F`Z%!f4SP})04Z(j1 zoi>0!VUM+}?bn{;l0mDI=?#V}o(98cIWf!GiquB4H53Aiw@QM54F5kI8BNnp8lQNb>1R8(xC_P$>^! z!uq`X623tKgbxYu_bjy^9qm0BW&B51uzjI78yH4Ed(z@;Or1^5*O+7_sJib z^JG~cyDC-^2@9IEk>X?}aLl%UXuQMTIaud+0dj@BkSbA(U~d9^pXq+i`P5If9KhIeZYExTp1;l;y16&CaWvPNM{)g&4w(aqb{Oj0pYJ&dy;so~a_wTD@*CL>Q zmY$zKSBiT0M9;5Tsy&amn~DBYO;jL@Hjc}`G9qBuxuw+GskO)TTZVjnlWlvvGcOlt0o(*z2XFDy z-!VX6|Iv4!n+ptbaDeuDPdS@vPZF@N$7m7g1JdvEqo^CvL^fd!{-x>DW5a){{O8~w z8TgNHyJvNRJ@BthYtfJfwfTQM4>7M%7j!yR`7dW`e|rKAqsqy^g<@qj=F>UeuU9C9 z1L+j1O1cZspj3cU$K7$LqO`ZU8vl8?CQ|CL=a>?R7nHF zHh)3gg_2DIl;5szGgVZGvbGUU=?1EmR23(j*wN!uSCGn*TXhJ?=fiATziUoKqwcuw zPgZCD$+kK5p*Jbz~Wm&-Zozu*-bbS-k_B#`DfdXw? zz#f+Z{L(T2C-Fg-)`K^Y=Kq>T1@pe1z<=JJ)z4;Y0O-=LpaTpyo1_04ZcZsm@pwGL z^ZDchvkBmTsrEtkv?Tz4NR^RPkL)=MNA#idBFe0yh$+DFu)S7q&@& zbaeaADa}ggkOrFf4Z@6-&>{{Xn1>pm&LK;DI}K20e$N4r3LuhvkAy^+e;)1W>XwQ` z?{5N;qubg)+O_-$*mLlY>T}=2|H?lG!YE5_Sc5j20zCIDm(jZba;{ed`czoe{f-Up^AkHJ5H zq~0IQdjB1{f_o+EuOL6XYW=T=5j+vf5{kH`&P8}YruJO119ncq*nxe$@abw$k^t|2 zC;GIts`3HD2ua1+w@S4FPX=x*KFF{A?APg2_AN)51Mg!7;#2kFQOUEn#q~m9rpa^l z3%c{60sNZhtjHX&Gvw|0V3au^1<|b*XWXoqf}oO#o{g_5%wD7H31*`BQ%bTkRia=z zx}4vo2NNgf002hINkl*8hHPBLw~P-Y~! zX9c{o01gu1wbnHE*3Ffqbs*|t;gj|=E&V!G^a@ZYZYFE^{V&|d~BQ}A!?e9sQn89r`Waf!qNq?$fBhFUQwE$>L^G9Vy5-2Lks8z#<&jNBeBC{P+q1z zD*JHo?>bc^ZKJCftir>%Sjg zJ3w0JUq7E{1Z+ljxsgG&fDG8S?cIX;7lLHRRAsaA!pf2Va-?4fxFt66uE78Nd5Ua` zWxpk}jZvXV@Plo^UF0yXntvOR--{0J`vLxw^g;B&|GwkgrPD==16=~Zz^(n4 z5MhIBc2m>i|12RVtIQzqYUMc{7{<0|ev^`>+^d^6&Afwv)Tl?tnTqMvC_S3MTa}96 zBsoZ})bcH4uZHwHxRM*4NhK4qtP&#(#GF)~5T{{_+%AksrMP znZ_8TxUX3+3p39E=4jny3c7gDN zjtP*~+ek7G>d||SSYTTuOIs7meQ)`gNb2X?&%jS>Z+B$~iu;a1#pgdT*10Gm>IE>b z1B~L#`uJ><8{%hcWPkvw4`_GXdE9nN-zS!8i&v(IWEV6s=%jAP47FhM59fd7eO!2?Gp)8_4J9FzChTo&{iPUxa5MT z_krNu73lK>YG5A(YX0xN_kDc7j^Be|;{kIC>9yL^D%Z)`E_x<%}m9 zHla1{oXk0C77saODvtIt7+eR&YuoOcz&9-54S>G_Z}ot`4x4(Y`%A%pYO`-o0Q}Y; z>sE@k>{JK*KgZy|xAo>x|If2#&;IxC>xkAPG{Aq^%I1vj^TGeB=s(|J0F&#VuJ(aP z6uYGhK!FHh-({P$xyX^58-@g!U325o3^<9RtKDFa1c);Rr~-Tp*W1F*DY|bAc6o=$ zK^?ZAnycYwXEqE;1CCH(JB7YZ81MnMq+Q_WTv$}_2~_$qBg-?sPdetrAH$heUqT&( znepHV`L)1?Dhr@O1muzaLfp?Z3hfEc{cI*ploHg*fVYSrQAF00*--G?`!$492j`2k zz6RIXwykW@YznN6_EZm5{~ue^e@&8G1lAO8zJ1i+vr7nu^QZO9ZUlghq5n@MQ#;|U zOC5-|L-21S^;c_x{|wll_5K!Z{zl+mlexj|aKQyrt?$*%SU_*vMz~UD=}nf@Q?`j9 zY9l7rJZIDwOCv)9H=;47h{opnRyhICYB^Yv0--n`kUqDv3?R&;>}!se%VybHaS5=W zAOX6^bHIK7xcVI7*VID_(2GAg+{27;nwhJTj04i$GszO+lK_ED0MEAIGT2&sisFhGV^y&C@Qga93-#@MsA*kpaLcL%a)_;C}624gM!u33f>mqo}_z z_^*|%K$t!Hy!mwc??)pvV+{VE&p%dINdOLa;%Gcmv?HCFGQD zn807n30%c}V`qjz0!Z2q_OB~;%fr9%XD&NKXRTNOpi;j(PVaC3{c2;Ig8b9gw1jd$ zkBJ+Fds_l`!qO+x2UdfBEwI*tk`X9~$^AhqL{spO`5gf5vEMcduh$LGusisN@!G_{ zU}w+*^}d$T9Tffx-4*dQ`&kIjrHe=Gw0;Yi;VbVl|0vLjzBW>4WAM-4NQnPJc!U4f zs{yF&!T&9}sUdMis`Yhd0h~WO5Vq(;wz~`%lYP<@@KMP?Q|0^y-~4pYk(W2n@V{&S ztoLMwU~H|U!iwJ19KykO2D-rs-wRW71D^xPcR}xr`K{V}p*&Y6x>xQ?<=?r$2ZPlA zVqZg)|7P8eL!xn`@(J*z#igs^qc1ETO~m`sbD$&x&_YB|qVCU{YUq`U*2hCSCa#hC z+xm-6WWp~4|95Wf*984xF4|vvo~Os;TnE5r9fhT=g2MThFJUMaPwnUVd^Es+E0QJO zWMc4NPieUc_;)WE=&vQ+{*3};o^A5-&2&|(9XCK!^!T3q0LBWf1#s9~9Wtos4Si(~ zK(N*{wP#8L*(3oZLWT8c`%g|dlj;oUYv%ocl#LLew5tdv)+iL`K>+qk=dc!SA3@{t z+UNp*3mnY0?<~Qv**(rUb-qzrAR4rW9TVy88SM2oKnO`jTKX=ey0p6;#i-15uzrVSj(%>f<|tbQe+~xuhW>hD+}G_hK=5 z^uKE3z5x73-3DZHSs(CuhN*}BVZJ!?4d8O@f<-0GE~p&8ZQC3CQ=@Gk(*|{fb(-M+ z>RRal{(lDf(p!6)=@7RCEVBT@l_Hqz$Qqz+gz}q)OG+>(ol7`>WvTv0tv`1>NYTH> z83flFthd}u{#MlFGFyWNc~*hAWuZb3KpMH00Ci~_%zA6Ua-(P8X(0n3UWZI@E&=hZ z6n}wmR!z4s`Fnu6&z-!N0qA;5Q zFz7dgOIL{~e_EQzGUQGpO-t4a0kBaBuiCo=HK{0j)gMs%{~7L;bnzFW{}$lisGLaO ziq$UCuQ~Uryx08vG)Oykp(Sop&o8|;3>1-%x__cg4gOtPW zD6c>75(vt(06q}{Xd}H6V9@^_xXEbWVZ)Mc6txV3(cGX92S6dmsgya`xf6@w##46? z+s-B_2onRLD#`PkOeSu*gG3*JG>~0@2le1p^F1VK^b#O1t<_f(29h-7JNO)5*&d}? zJeJ1WSWpnb#Q)NPL5KkLHK(Z{0xU@fk1_9Q0eFIcx2%GtZI6E-t}(jl*T8=hml*+n z%;DhY_!QiHB50f$qgU`$^M`XL0&3v@8MbW#{72}&)`IW#dWF|(uR3EF_(v7|*94bj zHUC&)XB;kyj#wXW?$=JOX$u?<#CKbXNh7RmkoBX%fBF7=SE@!HMP)X7A8f@=CBN@< zzr|(k_p<42uz6|-Em&M%a^1D$M*SWfr(*>CWy<$swS0)~(I*b1<017oB<%#Hj*4l+ z-ykY?Vb|U3?k%%#T8uf;B7k`9Opmb!BSWG66zC%w7jb#(W7iq+o|Jb<`Y}lN zH;MEu&o+?F`MJQBW)6eBPy0vw`@Y1}_M5Dn03N^(j^+S28p-ndkH;fC9#0kcr}Y1- z%1B4#fA2bRHBedy|Ii8kVS!b00L*eBKxD>v4l?J<*4`>FG@bD!Z$KO+M-{JRhC_5<{uT7eU@n20`g|5ETzB?C|) z7Y^{h?|XCese#-Br0!80n^+tW3xKN9K;T<*ZCp#6*Zv)>f9`lRfDo28Ut)V$_+Ga{ z6$$WJDO0^+C2ylGAJL6qmuyD|(7hiuQCg3{MXTp|?<2<7I_E!f5QW5*%xZx90J&UO z4YEZ-Xk`)MaSc3m96n-z{=N#nF2bJg2Y z{TPD(*-yYC=G8N4HtNswm7iboh}X@R8{mK6)_-&9|3urn?w?rTzfKBM(_!8B1N_H8 zzjUH&;6JWAM)doICj1T>a)}d76K_tHa)9!hN2{HR)2?NBZ!(78ziAfPHjA7w0iv~& zJ#FV0*FXq+E`q7)1AX>PXYy!iro-5|xH1{q`UPM)CVj85o>75Ly*?M@j4~N8_{NaU z0mw8A+UM{WvAW%$qcORod!>s$U*B$)EM8=(6gGSAs!+T#dMipmVUZhUk zPM9IF$aWG|F75Hh}adID3JbUYY+GxvzF!13?v z0E``HqKgE`>;Je;ARJe!{Yc8Z3XI&pj@q!it99fsn~#yKj`zOx6ELflfKVM?YeT9L zVCdB-H1`9P--(l@AbK9nq9uDP11qUf&OICi0+&N*gZlQVbYKlIq#%pL^)IZ_+xc?e zUp8^W^j$9^fD+Ju`VUQ?&;>NtItZMRIc7OZl2t*{4YX z?%ugiD}at**=yFwGP*?R;VTrlsP*3|`uEtjA^2~Xg0-Q~0sdbJ_|MxYA*nSx&wB%W zDh)eUnq=otH;c`SyS)J)5O3B0qAUxz6m|=T0@f?lXrdc{*j`-Q8wkw77f=u1Jk zb=2xD`eYKZo4o*PxOwV>Lh#&o6@JuA?SAx45?Pq6pC9~P9JDmEGKK&FKG*%?CT8#* z&VPkTO)zhsSoTl%SgiU@>Ue+N`79DZxbTvUfMnx)1G2bW3a;{q$agKZw+yrVxFe{*HhioIi`r_uS!EV6Q<}HD&1Vog`>{(RZDj++P%#%kkp!8 znwCS_bL6&!lm`*{R@}onVh_`+nK(!@sd;b%|B_zW7|eakF)c@oxNC?jSOkZj8r;qu zQ}>@JnnHVg%SWB1dF}-1$qto-xhWMbwA=e;D229Oif$Bx#d#}DK-5o@7Yq& zvE80?_MKK+VB07>pO31_>nE{_bk0f){%dvrC&;%TQVHdG+;eyWRBgg4k6sXOsyEhzq(#=%dI@Ip>nFN6lmX^3IGG?2QZ@AZ@hK2N;%{u|>?qzAmuKlPb6pC*x=P*;B zk?I3bMf-$|CvdO0?(7EOFrFTf`roW4@FQ9p(h$GZeG2LRuMw)2w(zwwiO4bloY1Yf zWgBBc4KoB_sVY1NxIK>7w!kBz@OV7KwrzDFRAsTp>@`pa|A7Vm3cT#T?&&)O9N)Bx|epKiv;5Sg?h@`<4h4Ezk+KCuqU zW5Fo7^lxBvOGjI@CbVOw?Y%p*#{o6$Ug{Q+#ZkafVGkN!Iv8;ushtV%YQ02uXR&o5DAWP}jt(>NW5 zD~^AB|JHua`8@b9pR-R&K>eOp#?nY^-*K(goodcCFd^oFB|el^h|uF1r78XC{1nYr z$-$Bqe$ZP6Q6T}XAcm@6eA(Vdq+Q$wR!nJ^`1h)dTzW)luPgw3TI%(DUCa_apB94S zELxb50Ep7@>*AR5gxz{@q7+3mC*}Cn{V`M8gz3dsz0kZ5GbwwDi7Q~nkdXU5q1_I+yq{7tp_ ztBDLt@IM(4=mB~$_zz5~cyYwO`(zs8n;LBZrvbef{QHm!Hco30NAuk#y|NDcV4$}* z0dRquIq;89-G33O&%ytv1R?#7`;M#)T|+NIiT>g89Ts*Kkj`5nr*%yQRGku05`ZD_ zpT*mx0szBV!9?%K+8!{o7G@AUfA1mTJuBbJtwx)Q`?h8Zy+vp!Tv{kL z_eb~J)6kZ4KE&y_QMhXJ$!30bftiyKpc^<}aHG2eeyqqDK%waZMp>*#LudB8EFlp3 zcX%?tmkiL0!9UE7>((tp`fSq3za#ipEWJzNox| zt(*EU2minx_C0U+SKhxQ1mbow`4U3$->y0m8WIL8Eth}*5Ca6NzT1_a_v!c3a1Oj{ zGCbLV$!DRFGu0vi4u`Nw5QJ8Q1B&^BdyV|9gEZH-QM2;G&INEwub+z&*nxSENIh;f zy|7>nz*&1Z_Z8+J*&vO7iHYF_olg8}zwc9;{n)V|XAtKE*b*(F!=!Pu+Il2_qI@)}Tkrv7hP>VHs!|B#6O#clfXGJw>v2w7PG3h+N)_YYU?g*BLWY<@p= zf~qigYfX}C9*x=8>MkK(nj1Cn$otK=#Y@HG7xfgN(E3yi#fw~t!M-0Xn+48Cm znFIJ&lp1NH{;+l!qB;7s0p4HC5Ds835-s z--`ZIn1dMx#*BT5`*uo^m+T!AnX2>i5|pLPf9v@`R~H&?W5sqE?bwIT=1r7c0%k?P zXib)Gh)f3n*6lP`i0?TN3$ASsS4I61@53DMukkUl$lO?v;1Joerw#Bno@|bhf2+Qs zxOs^H5ru8r!nSRx@ZZ!M<6ZZUN-cj1{%fsZ(v~sxx__y#m|gGBZ=VCfS~|iLG+jrO zGW5q~Q8*S5`2#daGY~NGJy!=&BH*`DR>bU8|viYYKXufxk6CcLn@Q_T2V;_~2i< zCrkHM>0V-)$tnZ?B>{l%3ixRzDJ(k9;|~JhQ5eH>xXw0kb@Lvop#JsR z6V?Ct-sJ);oy?dGkBI_ccO4_WQNmPv8L#_%((=t72HlM_jbcnU4RYZF{9|^b)_PRE zA60$Xb{RnZ_um>@Yvq26p3_dpOUo>{(e*EY7!fen2nm@)+M##>hruk+%#5_t7fj!* zQ{QQ4vLef2&ZgUppI%fKoezt~zMudb=;hLyL1_B_4B4QK3a zAMK}pZZPjaW1i;kK_;wf3wWcfKvpK(V(_m>P!3SrBH1;c|32_PqBc3k(Y_;srSRYh z{J2K*n#?B%;cwmP6~2dGmU;?mjkwvg--FP_kigZGlv$Q%;w7NB&D_NjC z2WIK~3PDV#L0*vouq0=&kQx=++0865 z0F6x-;jCT6m8mu)8(=eOy|Tb=3(~#8|8ikJ4hh4E?n0-RrO6o3=me|;{}%xOX-dy8 z1pgf47=kQK+v8n^3-2xbw{09~(f~p!>$>j z`7!{`v#r?Zb?r|**5Q)g#j2Z8P?Z}<>;7Sp_J1$TYM0<;Oipl3Ci#ga+L9cz*-ciC zeQd9Dg8Kr~$1hMVTR~3}1NrwEWsboJ1T@B&-j*B~`k5?06n&>+Xdm_vK&PZjE$=ce8xX9QoLIM9v$XWvPp0UqjFQBjYuXYwW+q9&Gj}ZN`^>we zZ=ty)o^livnxGi~`;>#W%K=!nY1l~z0gckUuK{d#fbK&oICuop#Dlmb(8Y(cC%t*3 zu0HCY5CFd#{4*B>`e zi^y`$*V@byM7%S@-abQ1BY;-|YcwN}mtv4;0X4aF*v?>+t^uCy0e@@Mzj<$nQ}W#f zd)4+xLm=?8dq?L#e+>8+OmeSh7#{nr`$k5zjQ%s61xkNg)cyC`Y&0Zui9&e2_LG)K zQ~yWNe~oi4IcHIQzb9D$;Img#rEFaf21gRWG^eDAwr+Cs8c^tkgJ(x+To2P60y3=k z)XxbxL}=lF|K;In*X$bUntwO75{?D?jt0YPgB*<-9Xm%5fJDD1g&2|O`q$! zKfTK(m_$fRzZwRGYldLmztx`O^~0CIf0uNCN>p!t|6~wS2CDrqFU#v+<7qaDok|HL z*Zz9u0dxQLDG?}Z|68nTJ#JY`{jb&iBiYmtZ(JV%9SZx7512yWgMT=S0ARQSb*MBtS76LZ1*&lI}7X$RssH{83pAs8Iu5|6Upfk;M1bdQl;NzyLaz| zvS7eyRF|6B(TN9=KuS%TBEB`hrtT*t`ovO&_Va9FezIqg83?fN_+dYfXXm9pGY63F zO(Ep9?M>1KS6=>vawmrtiTD$PCt$>SdLJ zfzqK919_}%;Rk4*%|0vAAN*s{*iH&JWbN|g_msV-v}CRRSY&IniHeQ^wbD+}*iU90 z#+d-eGjVr*nCy)vk@^+D-*nx7`5uCMfr;b+?wmA8`L`lr+`)hQ$mcm|MYPx<>i*S8 zzGsGlfGl8}B+>mT5K*9Q6M+%RQ~y7UXpbWJp{o9$r~aS+xxG{Wul~Bo#xr+#y=(AS z5e6$t1ablfg6}sLU3E0;4ZsJaCd?R z4G9)BA;>}qL4s?rB_X&5mz8gy_naT^`KnIUJu@|RU)??3H9w|$uI?s%?kETdb8sZb zkCpjMyxq@^6I_T}M>?!gq^q&JJ(iW>?UPyz$1tQx-fn2ohhJH>v0I0- zUI%~vm2g`hdlHS2d6u|ma@Stk)LT=<8@Y&Zb}nU%f-cVT@{LiN55hsj8HbAMG>IUA zUOn0NR7EWZRJ49sRPcf9wUco8l?4p*Fl37k2CeyAPK0zfc=PeHh1mSxx+il&d=h4Irh4~^#@W|@A}Mj;`r>*IrG+n!b1mXa}t;!mGst@EdmH< zf^iWxnHlh545t8;7`c-=0zp{S10|C zZX2}H>{VetUb7Q*=lN^fI}hSST%4PD@1*k18iEh>7MkZ`{P0t zTa@o3CWf!nkRaHd0bodyEA+(>huzKP&l_nt)VI(17w2zeX$TnlPWkATsDhb=5FTW#3Vh3lvC9 z#^K7k^Hu@T;gk{qU-h}!7k3@uFJ7|y<>kCu5GhfZi%p|Dl^tEBR=6>?sUb$c6OH{$ zdh=to^~z?2! zn@!^LUm1A8J5P?c+sJ_Tas3<2$X4nb>x70uT+PV(EY4QrU!0(czVxs(Ud|hjBu)QdbYW&{~?o_NJl))Db9=qU}xooSN^SvC;mDgzH;rL9Je9e;XAt?JK) zr_&s-^k~3|iz*gNdG^$+SkYSOml11ZZATkZ($(EoS)iFx3o{p*kh(NPPji_z*3tJ$%FzxFQ6k9^q*{{sA-OcgX zs0@$3;i!}HY25qV%i*p_!p|CCh+L+rz*0-PjUF)Be&$Sk_04v(m6+WKUsWJT=c5wq zYnO=9kHtA=G6yulgU1E5$7I-c>)O&qiaAj&48Uf0>U$47wntxeM8Mk;a55N#nG{c0v=c&C-q(sNW z>t`lbCg$s;y@}LH@n0Ad%kMm2p5yiV#PF<$VAnckhLl(M!EVB*PpPsW`15QyKeNF5 zlEgBWlldzg43Abt1^a7iKhYrLH8#pD;+t?z%;8NfTGmI$>rQbM?>&joef(F>D#dt_ z1jJXZ#=nFKzm1Gq6y42qPoyPT%UIu{Lrhg#a!J?Td^~X#3S7av$}{^+6`bYBa@R@N z){{((Wvesv-zUr8KRiSE$WYrFbOP2MrzF;YuH~^e7A4MrK_}agU#pQT2+p*}#zVI5 z#;xgj(6GCoyG)w}v4E?pD`nIW_%(zodG5z8Wq6bOHR*aUXSiHBoRa0?Rd)*M&JJRd z&}^Kb*z-h|7=0U3w)Pj#39si>GOJSkt_ldDS8z z?x{k9NXEt*^_sR>25~H}@%2tr-`@~q1xgUSiF_&!kw$h-!d~f&?lX-^T9oBN`-yawApMYC^~@u&`A;IYcfo zn&Pg|9EkpF@#DJB^vZ)d<{xxhTpiSUJedzHRRp7MEiK6PJx`ty9a|MGrgWVUPMwEB z{WCR-30q!F?09Vmg3x~fCBJ?iXqJ%7SYOC=TyN7b)9sEsx-#uc7m=ek;@p_NRNs+!dkWNGlWeRrY=I?_bmqDtq@+3Ek!j zWv2OzKa+^IueD|)19z5p(er)Iuky=O3|A)#CG$5o&(nkPAQhu%CmGfBIF;QtLYi^@ z+fG9%D!vKGdw;xUzyVp}r2bx1ENy-_S8>lf5(V%1X7T!(rS3y~JFrp?nRRjLlSE!-Ob7fwDgfJJI-okvI>12e3Nzq5BH;P0nzD4v=Gru><7ZM1(!94s8)7rRZ;>>mLGdOZ8W>O(pB zwX=V@m%?orQJB+ewo{C~1}3WO6p4=Q^ZGKk~nkF zOdD@kEAuk5tn9VEpTqA$drVnFJ-@D^y1yX=s{y(&Lx=h;M#e$B)mK%J&dF zV<)ZaUakMxVDGvOmi7qe7;?La5{i=`pBU_2<34>!1q?A^%k6;SQL;z6e85k5NIT#P z--o2HKHj5=bQwh4-Z@3b9&drgfO8b%^6h0rm4IB18}fIRI23AxI_hP^foEMBNS3ni z4aL7rR8{F`Fv3RBFuj`-RHomj-bf}mCosGUI!^*+D4ff;Sz;9Sde{Geh0r{bSzBMy&9UwU6|9d0X`!`N9;hyGtPEuS z^VH(oB({x&eqGk;lmCW?F;mWO=Ysh%AD2j}Ef!ED@?^JNDgVpm>GM*I?$zo@BEo*k zA{$(kRSblg(wb~8b?Qy2mt&sO0hyyjLG)hloh#{yr^2dQvONb;&mr4I{4hK#fKZgO zTbSItUxB8=ufNhD&)SC4l)S?&JVn>OF)79T&6#NvgtC<@bA_0oMXKE{ub$6DG_q3gD=#eV91vnS%)YzGzh!dWwkbw{U?6bnUCPK_{PCzf-B!dCCMD=l-G2fw>vBK_-yn|anom1)9m*{~5H~DVP1Xa^C4|~tZSs7J?NYNUtE4-q+S-O- z%{G#e$EY94JS6%f`qk3{?;JCA(^Kxt7_07#K6JR$dp>>XrD z-7ybHI;~_{&P#NcFhm;5WtI-J_$ki^@8;8uD;n3>B6zW9{T^XMKDNxIf{KyC#96=U z!twC1wrPpXZ1-rSzh$ zcKUD+CPmJ}2Ed<)#eJdpfYHCxZng$a+>exg)qIq>;Za#9zWFFgcJrgQh>m(qW5D4b z#-7RgIl3tTfE}xNXJL8H(%Q)C$&50;9B=M^>wJ!n*@^iiI3?&I6n7wtQu=s2xb-XA48Lc#)fSnLs$Q>jnTiR!^`;eI; z=%#w=K*T6Z=$P};tidNFs-%R1-l=tU<)~hvEOo)p3b5z zyeN?`Q?)Eco!17QNok3yAO6+>9?{nPvg7!f`!s1xh`&HleS0F+x9n^ZG+@Hew$M7` z&(s{&R;^Rlb?OjJ1?*(O=bR3^(d)5{k^-2 zd34_LsNlDg5^|#)^1*w}-t>!Ax@H}T0#{$3L7G0GH|a=BSTx##Q33Zf)jrKnFTO?> zL?aCN2GD&}Tg;iVf=lgc9DOtlJlJf@4(HM1kZFmJs-D@91z73>2LC`WyHKGD^9(3u zLeK}f#iKxJGC1Okze)*1286v?nkbVgQJ!+JQX0W&=EB7agx-ehb@s@eL7PmC$O78u ze7d-JHN<-KOY}9Iv&MN)>9(eI>GzRw3_D==E~*9=+STC(;|n!wX|ow^0iIZ(_ybg@ zNCS5IHJB&zEP`Ci-F@Mew86I(CM-EvWU%}@!ODgGN3%aWe1T* zI{}&9juIWnkH~lBb&1_h=BFJp^h=m8Z%MSI=qGu(58<~bM)94#4%9f zo9D1c?t@y-77VMriqBo1LZ6F5o}D%zm}ixrN&J zkb{rOOA*`Cn)61sA}4?SUWYs5!{>FyxF{z+TGl@ST}VZ_bpYrhmc!=o$ht-v(m7lUr*^u>`ka&~b1WowR9y*A=?tfws#r$dL z9*H=({GcDHDGPfp9#}c)uTi|W_!8RwU^_l?Z~Y&Sk^Q5DpcEg);{ZqM@_dLjal*P|tooSh1jA-zeL z+yh1;WQ@KysB6bOgRVe1QIH?ZCKU*^)x-7}p0cA0f)&42N=o@R^Z9g($gYSDQ6 zCc1;GR5T>H3XJCE&vCs1iI?@Y$deSGnEJaf?_p?9%L+f}?$~YJEkqKCi}~(RiCxbI z>89vf6$Eq%_V?*^rV~a7kB7g>9_QPUdGg_fWWm-v0KD_HqnDFJ(eCGjUfpD3(8;CX z8~IUSf+XOvC+;Nl=|~LY7lWvQG^L;UoL57DL(GR%9sajB8c4}o;S;&lubAKu&)ZxcVT1c_nAg_EZ>HJFb%W=xg*IWhuy)|bz z{%1YIk`Zd2Ft8qHol!#lEetxsxG=YK-oG;E=MvQ|-CW>iMO=H^k>to%c_RHVG`#F> zxNH|95Aorcr`$&0$Z9Qu491q`3%l-pfE&)$r+WW1wr2U3-zw?mZ=JTKYtQ9{%-kw8e<+RG3QW~KIpDZr(9u6XqTZC zM&F73X?7Z}zS|JyyOQ~u5N*YU`$j&_X8Cx~{JU(QP|GsPh+Fq8q*U<<8*d#u{>|jV zzJVtm`quC1ElXFSzu%TDRbhgBh05;G{KM8Hg>XK@vvI178W*+BQc87C@a@j7XEIOp zNv+DUg|3VNDDmtwhwoNYNOXlJyUHWP<^nV$!lo8AZl7jNIeJQoN{)h_-Sg>{^Apjh zi5ORdrORmeA`xy>LwAQ1%ZXz|FX<*lHq(okFE zXyv=Nf=hP6j7F|{6QWgFk!a zB<_0wqW1_P1p{Ysp6hMc)*-9=yWYdTH0On)1S4^zh~9(MYJ>&R-}Vleo{?)*K80Cf z?fu8asP1ycnn^dsAd7gqzy7UO?%bD9u^<4M&(#}k3>Uwm0HK`3)C?^w%J8V{`9Ili zT>X$Dl@F1esSO|YUy}A^n}`l82txx;eDIOV^hmvJY97`ZQe>soC*_AgDGOABP{?RX zZa`P9(kYt)G>s8A4~{9O;Y}DW^a>%CQQ!760m6cq=yEc@k4hfA$>`RO#)GN;259$3 zY1G2Z8lVfXcH?P1hx){nfBGTR_XEt4SHFWf@1T?}kbN#?Jz!$iS>~HrZ!1tHv_Rs| z`X!9<{tK;RVVmj|%SemTxz7JwdN4fK0I?i; zM_{zD-ht#eRw~@be7LmrVfmW&U_J-R{L7==820g}s}Oi8e9ptNK{u=082P(nf)4g? zqxQOEH0XwsC1Wtm{$nyA%p~dG5gr_ysD8BfFsFI`szL<%H#pFC%-~8z4oSDaOg7u z9NvjAg{9HON~Rl3^srF~9ipS`<6`T`msYN{hkukSOFhWZU+l}Nrj1-pvl>d_ol%%M z6H5)tcbdJC%oQpRe7|l{Z@o&32pi$VlXG~@L$M3QGD$IoVzxkJC4vAn^_8ofz2^Yd zU^<<$*RAyJ7B$w7$y(^n4pYnrW!ybEs7(?1xIu!pbWhWZb8@e3%_-eJG@G~Kxw`x^ zS*bW77b+@m?c?$B_)e-SU$q*PW7DwWru2iU-T$)`s6*I!!hOJ}JE5sm`&H(?XwPI) zJ<#IRFY#WbE%F&hg&WgtfK(xqzJWV(F$fI9^Mo>`Ec@9;4& zB{evMR~$ss4mWA9EXq5e;Wj|9q3ZA#2^h@=+Z_deB8{S@f&(-E20`Pw;o-r4aq9%j zdo*+1hRug8%SR7_H#3)UC2%ndOf~UY?Ik4zc&Mav=YC9;b&S^zfSd2F_V_gjQ?dJ= zqqzv-E(DZW56ew2fC#HR!Q&^UBxIiz&DmGs+m6?8C3HGYCHEF>#rZ?^VpJWsPNBU+ zICgQ2T2qj|;Tdv(`bN~HwKJ#tCY1jhgn**g0K5dleArix@HJrSi0dRPJ-20Jye>Q{ z-lM_v9Nbl3H;0v0T`5!%oh05tc^>7VTN`msb*{-n%t;^Yq{|wWEhGpo7KQYL4c=a532rCY9ZCgQ(m)eXutWM zaFNsSK3$1j_YIrpXQQ(u8?FFfacPd3$*+Q$sY=63XEX-c4PESK52I0T;Y1z z$%|KeP9nvz9@*q8t$B%h#-eg|$l+zj{>(7Fm~R+fZb@vbej53dm!}ySfY7e5i+L|1 zUf>Xe>{q^c=ErYWE5b2{r4Wm0FO(m~`*%*|5qX0}H1D9o@M$21Bp;H+ZeDeI0vfib z+E_hti&ZHDz2DOb@tTTOYtda?$yx~lqLcgk9HG72A1mW@=UV_I)+HRJq8^ij#Ci=^NR zBbcN0&R@pC5OgPgT4Fi7 z{{a91UifR6`8#-ddO}|N12kPdAnbl#0lp3p1$GyIe{VkpQPKZ4y?E$fo5b=KPtmvS5hc&?cp8-cZe~5yE zF9dr5NQjBc3X92Lmx-8!f)sYi3W|v-h>59tbKm@b1U$VQU7bSy{{^IlOVqIf2LD;` z^K$YJvh#%ibUf{xAqIBNt`6?(G9q#!^1|}$&&09A+2v$xWTe>tAM4V>5|aPpAlAR2 zpdb;~|AepyR_H(PLVWw58Lc$p+DgzA4mp1X!Z0J5^udQYA#^GAKd P?gDf)4AmQ-*hc>!b1$&f literal 0 HcmV?d00001 diff --git a/spec/fabricators/site_upload_fabricator.rb b/spec/fabricators/site_upload_fabricator.rb index 4a171486f..2efc57e28 100644 --- a/spec/fabricators/site_upload_fabricator.rb +++ b/spec/fabricators/site_upload_fabricator.rb @@ -1,2 +1,3 @@ Fabricator(:site_upload) do + file { File.open(File.join(Rails.root, 'spec', 'fabricators', 'assets', 'utah_teapot.png')) } end From 2acd8940de596ab119e35bd204fe55e06b914403 Mon Sep 17 00:00:00 2001 From: ThibG Date: Mon, 1 Apr 2019 19:10:44 +0200 Subject: [PATCH 023/366] Fix more keybase-related test failures (#10443) --- spec/services/activitypub/process_account_service_spec.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spec/services/activitypub/process_account_service_spec.rb b/spec/services/activitypub/process_account_service_spec.rb index fee502949..5141e3f16 100644 --- a/spec/services/activitypub/process_account_service_spec.rb +++ b/spec/services/activitypub/process_account_service_spec.rb @@ -56,6 +56,8 @@ RSpec.describe ActivityPub::ProcessAccountService, type: :service do end it 'removes no longer present proofs' do + allow(ProofProvider::Keybase::Worker).to receive(:perform_async) + account = Fabricate(:account, username: 'alice', domain: 'example.com') old_proof = Fabricate(:account_identity_proof, account: account, provider: 'keybase', provider_username: 'Bob', token: 'b' * 66) From 67eb47e25f1e7704dd9ecd32695ff3b53c807375 Mon Sep 17 00:00:00 2001 From: Jeong Arm Date: Tue, 2 Apr 2019 02:17:21 +0900 Subject: [PATCH 024/366] Simplify culling and fix race condition (#10440) --- lib/mastodon/accounts_cli.rb | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/lib/mastodon/accounts_cli.rb b/lib/mastodon/accounts_cli.rb index dca31cdca..f02b2149b 100644 --- a/lib/mastodon/accounts_cli.rb +++ b/lib/mastodon/accounts_cli.rb @@ -236,11 +236,7 @@ module Mastodon end if [404, 410].include?(code) - unless options[:dry_run] - SuspendAccountService.new.call(account) - account.destroy - end - + SuspendAccountService.new.call(account, destroy: true) unless options[:dry_run] culled += 1 say('+', :green, false) else From 62bafa20a112ccdddaedb25723fc819dbbcd8e9a Mon Sep 17 00:00:00 2001 From: ThibG Date: Mon, 1 Apr 2019 20:06:13 +0200 Subject: [PATCH 025/366] Hide blocking accounts from blocked users (#10442) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Revert "Add indication that you have been blocked in web UI (#10420)" This reverts commit bd02ec6daa974dcd3231e73826a56e08dbeedadc. * Revert "Add `blocked_by` relationship to the REST API (#10373)" This reverts commit 9745de883b198375ba23f7fde879f6d75ce2df0f. * Hide blocking accounts from search results * Filter blocking accouts from account followers * Filter blocking accouts from account's following accounts * Filter blocking accounts from “reblogged by” and “favourited by” lists * Remove blocking account from URL search * Return 410 on trying to fetch user data from a user who blocked us * Return 410 in /api/v1/account/statuses for suspended or blocking accounts * Fix status filtering when performing URL search * Restore some React improvements Restore some cleanup from bd02ec6daa974dcd3231e73826a56e08dbeedadc * Refactor by adding `without_blocking` scope --- .../accounts/follower_accounts_controller.rb | 2 +- .../accounts/following_accounts_controller.rb | 2 +- .../api/v1/accounts/statuses_controller.rb | 10 +++++++ app/controllers/api/v1/accounts_controller.rb | 5 ++++ .../favourited_by_accounts_controller.rb | 1 + .../reblogged_by_accounts_controller.rb | 2 +- .../features/account/components/header.js | 2 +- .../features/account_timeline/index.js | 22 ++++---------- .../mastodon/features/followers/index.js | 8 ++--- .../mastodon/features/following/index.js | 8 ++--- .../styles/mastodon/stream_entries.scss | 6 ++-- app/models/account.rb | 1 + .../account_relationships_presenter.rb | 6 +--- .../rest/relationship_serializer.rb | 6 +--- app/services/account_search_service.rb | 10 ++++++- app/services/search_service.rb | 2 ++ .../follower_accounts_controller_spec.rb | 29 ++++++++++++++++-- .../following_accounts_controller_spec.rb | 29 ++++++++++++++++-- spec/services/account_search_service_spec.rb | 17 +++++++++++ spec/services/search_service_spec.rb | 30 ++++++++++--------- 20 files changed, 136 insertions(+), 62 deletions(-) diff --git a/app/controllers/api/v1/accounts/follower_accounts_controller.rb b/app/controllers/api/v1/accounts/follower_accounts_controller.rb index ec15debb0..7a45e6dd2 100644 --- a/app/controllers/api/v1/accounts/follower_accounts_controller.rb +++ b/app/controllers/api/v1/accounts/follower_accounts_controller.rb @@ -25,7 +25,7 @@ class Api::V1::Accounts::FollowerAccountsController < Api::BaseController end def default_accounts - Account.includes(:active_relationships, :account_stat).references(:active_relationships) + Account.without_blocking(current_account).includes(:active_relationships, :account_stat).references(:active_relationships) end def paginated_follows diff --git a/app/controllers/api/v1/accounts/following_accounts_controller.rb b/app/controllers/api/v1/accounts/following_accounts_controller.rb index f3e112f2c..0369cb25e 100644 --- a/app/controllers/api/v1/accounts/following_accounts_controller.rb +++ b/app/controllers/api/v1/accounts/following_accounts_controller.rb @@ -25,7 +25,7 @@ class Api::V1::Accounts::FollowingAccountsController < Api::BaseController end def default_accounts - Account.includes(:passive_relationships, :account_stat).references(:passive_relationships) + Account.without_blocking(current_account).includes(:passive_relationships, :account_stat).references(:passive_relationships) end def paginated_follows diff --git a/app/controllers/api/v1/accounts/statuses_controller.rb b/app/controllers/api/v1/accounts/statuses_controller.rb index 8cd8f8e79..7aba2d0bd 100644 --- a/app/controllers/api/v1/accounts/statuses_controller.rb +++ b/app/controllers/api/v1/accounts/statuses_controller.rb @@ -3,6 +3,8 @@ class Api::V1::Accounts::StatusesController < Api::BaseController before_action -> { authorize_if_got_token! :read, :'read:statuses' } before_action :set_account + before_action :check_account_suspension + before_action :check_account_block after_action :insert_pagination_headers respond_to :json @@ -18,6 +20,14 @@ class Api::V1::Accounts::StatusesController < Api::BaseController @account = Account.find(params[:account_id]) end + def check_account_suspension + gone if @account.suspended? + end + + def check_account_block + gone if current_account.present? && @account.blocking?(current_account) + end + def load_statuses cached_account_statuses end diff --git a/app/controllers/api/v1/accounts_controller.rb b/app/controllers/api/v1/accounts_controller.rb index b0c62778e..685e044c3 100644 --- a/app/controllers/api/v1/accounts_controller.rb +++ b/app/controllers/api/v1/accounts_controller.rb @@ -10,6 +10,7 @@ class Api::V1::AccountsController < Api::BaseController before_action :require_user!, except: [:show, :create] before_action :set_account, except: [:create] before_action :check_account_suspension, only: [:show] + before_action :check_account_block, only: [:show] before_action :check_enabled_registrations, only: [:create] respond_to :json @@ -75,6 +76,10 @@ class Api::V1::AccountsController < Api::BaseController gone if @account.suspended? end + def check_account_block + gone if current_account.present? && @account.blocking?(current_account) + end + def account_params params.permit(:username, :email, :password, :agreement, :locale) end diff --git a/app/controllers/api/v1/statuses/favourited_by_accounts_controller.rb b/app/controllers/api/v1/statuses/favourited_by_accounts_controller.rb index 657e57831..e00c4d708 100644 --- a/app/controllers/api/v1/statuses/favourited_by_accounts_controller.rb +++ b/app/controllers/api/v1/statuses/favourited_by_accounts_controller.rb @@ -22,6 +22,7 @@ class Api::V1::Statuses::FavouritedByAccountsController < Api::BaseController def default_accounts Account + .without_blocking(current_account) .includes(:favourites, :account_stat) .references(:favourites) .where(favourites: { status_id: @status.id }) diff --git a/app/controllers/api/v1/statuses/reblogged_by_accounts_controller.rb b/app/controllers/api/v1/statuses/reblogged_by_accounts_controller.rb index 6851099f6..9b2d0e59e 100644 --- a/app/controllers/api/v1/statuses/reblogged_by_accounts_controller.rb +++ b/app/controllers/api/v1/statuses/reblogged_by_accounts_controller.rb @@ -21,7 +21,7 @@ class Api::V1::Statuses::RebloggedByAccountsController < Api::BaseController end def default_accounts - Account.includes(:statuses, :account_stat).references(:statuses) + Account.without_blocking(current_account).includes(:statuses, :account_stat).references(:statuses) end def paginated_statuses diff --git a/app/javascript/mastodon/features/account/components/header.js b/app/javascript/mastodon/features/account/components/header.js index f21ba8a9c..9d15bc28f 100644 --- a/app/javascript/mastodon/features/account/components/header.js +++ b/app/javascript/mastodon/features/account/components/header.js @@ -111,7 +111,7 @@ class Header extends ImmutablePureComponent { } else if (account.getIn(['relationship', 'requested'])) { actionBtn =

diff --git a/app/javascript/mastodon/initial_state.js b/app/javascript/mastodon/initial_state.js index 8c2e9d2de..74bcfee58 100644 --- a/app/javascript/mastodon/initial_state.js +++ b/app/javascript/mastodon/initial_state.js @@ -13,6 +13,8 @@ export const deleteModal = getMeta('delete_modal'); export const me = getMeta('me'); export const searchEnabled = getMeta('search_enabled'); export const invitesEnabled = getMeta('invites_enabled'); +export const repository = getMeta('repository'); +export const source_url = getMeta('source_url'); export const version = getMeta('version'); export const mascot = getMeta('mascot'); export const profile_directory = getMeta('profile_directory'); diff --git a/app/serializers/initial_state_serializer.rb b/app/serializers/initial_state_serializer.rb index a7a3d770c..0c9fc625f 100644 --- a/app/serializers/initial_state_serializer.rb +++ b/app/serializers/initial_state_serializer.rb @@ -14,6 +14,8 @@ class InitialStateSerializer < ActiveModel::Serializer domain: Rails.configuration.x.local_domain, admin: object.admin&.id&.to_s, search_enabled: Chewy.enabled?, + repository: Mastodon::Version.repository, + source_url: Mastodon::Version.source_url, version: Mastodon::Version.to_s, invites_enabled: Setting.min_invite_role == 'user', mascot: instance_presenter.mascot&.file&.url, diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb index b53205ee4..a656031b1 100644 --- a/lib/mastodon/version.rb +++ b/lib/mastodon/version.rb @@ -33,11 +33,11 @@ module Mastodon end def repository - 'tootsuite/mastodon' + ENV.fetch('GITHUB_REPOSITORY') { 'tootsuite/mastodon' } end def source_base_url - "https://github.com/#{repository}" + ENV.fetch('SOURCE_BASE_URL') { "https://github.com/#{repository}" } end # specify git tag or commit hash here From 6e620dcab1d350e13d25ba34abcc31b32e64da95 Mon Sep 17 00:00:00 2001 From: ThibG Date: Sun, 21 Apr 2019 04:42:02 +0200 Subject: [PATCH 111/366] Use correct local names for fonts (#10594) --- app/javascript/styles/fonts/montserrat.scss | 2 +- app/javascript/styles/fonts/roboto.scss | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/javascript/styles/fonts/montserrat.scss b/app/javascript/styles/fonts/montserrat.scss index 206f1865e..8079dc6fc 100644 --- a/app/javascript/styles/fonts/montserrat.scss +++ b/app/javascript/styles/fonts/montserrat.scss @@ -10,7 +10,7 @@ @font-face { font-family: 'mastodon-font-display'; - src: local('Montserrat'), + src: local('Montserrat Medium'), url('../fonts/montserrat/Montserrat-Medium.ttf') format('truetype'); font-weight: 500; font-style: normal; diff --git a/app/javascript/styles/fonts/roboto.scss b/app/javascript/styles/fonts/roboto.scss index 345d9ad50..f9c7c50fe 100644 --- a/app/javascript/styles/fonts/roboto.scss +++ b/app/javascript/styles/fonts/roboto.scss @@ -1,6 +1,6 @@ @font-face { font-family: 'mastodon-font-sans-serif'; - src: local('Roboto'), + src: local('Roboto Italic'), url('../fonts/roboto/roboto-italic-webfont.woff2') format('woff2'), url('../fonts/roboto/roboto-italic-webfont.woff') format('woff'), url('../fonts/roboto/roboto-italic-webfont.ttf') format('truetype'), @@ -11,7 +11,7 @@ @font-face { font-family: 'mastodon-font-sans-serif'; - src: local('Roboto'), + src: local('Roboto Bold'), url('../fonts/roboto/roboto-bold-webfont.woff2') format('woff2'), url('../fonts/roboto/roboto-bold-webfont.woff') format('woff'), url('../fonts/roboto/roboto-bold-webfont.ttf') format('truetype'), @@ -22,7 +22,7 @@ @font-face { font-family: 'mastodon-font-sans-serif'; - src: local('Roboto'), + src: local('Roboto Medium'), url('../fonts/roboto/roboto-medium-webfont.woff2') format('woff2'), url('../fonts/roboto/roboto-medium-webfont.woff') format('woff'), url('../fonts/roboto/roboto-medium-webfont.ttf') format('truetype'), From 951f8d5b44f5e38c163aae5b9bd330d92ea4d954 Mon Sep 17 00:00:00 2001 From: jeroenpraat <41594439+jeroenpraat@users.noreply.github.com> Date: Sun, 21 Apr 2019 04:46:08 +0200 Subject: [PATCH 112/366] Update NL (Dutch) translation (#10601) * Update NL language strings Have to do it this way, cause this file is locked on Weblate * fix * Update simple_form.nl.yml * Update nl.yml --- app/javascript/mastodon/locales/nl.json | 2 +- config/locales/nl.yml | 22 ++++++++++++++++++++++ config/locales/simple_form.nl.yml | 5 +++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index 5fb445209..96e39356b 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -11,7 +11,7 @@ "account.follow": "Volgen", "account.followers": "Volgers", "account.followers.empty": "Niemand volgt nog deze gebruiker.", - "account.follows": "Volgt", + "account.follows": "Volgend", "account.follows.empty": "Deze gebruiker volgt nog niemand.", "account.follows_you": "Volgt jou", "account.hide_reblogs": "Verberg boosts van @{name}", diff --git a/config/locales/nl.yml b/config/locales/nl.yml index ae274ad70..f11a174b1 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -68,6 +68,7 @@ nl: admin: Beheerder bot: Bot moderator: Moderator + unavailable: Profiel niet beschikbaar unfollow: Ontvolgen admin: account_actions: @@ -80,6 +81,7 @@ nl: destroyed_msg: Verwijderen van opmerking voor moderatoren geslaagd! accounts: approve: Goedkeuren + approve_all: Alles goedkeuren are_you_sure: Weet je het zeker? avatar: Avatar by_domain: Domein @@ -132,6 +134,7 @@ nl: moderation_notes: Opmerkingen voor moderatoren most_recent_activity: Laatst actief most_recent_ip: Laatst gebruikt IP-adres + no_account_selected: Er zijn geen accounts veranderd, omdat er geen een was geselecteerd no_limits_imposed: Geen limieten ingesteld not_subscribed: Niet geabonneerd outbox_url: Outbox-URL @@ -144,6 +147,7 @@ nl: push_subscription_expires: PuSH-abonnement verloopt op redownload: Profiel vernieuwen reject: Afkeuren + reject_all: Alles afkeuren remove_avatar: Avatar verwijderen remove_header: Omslagfoto verwijderen resend_confirmation: @@ -245,6 +249,7 @@ nl: feature_profile_directory: Gebruikersgids feature_registrations: Registraties feature_relay: Federatierelay + feature_timeline_preview: Voorvertoning van tijdlijn features: Functies hidden_service: Federatie met verborgen diensten open_reports: onopgeloste rapportages @@ -329,6 +334,8 @@ nl: expired: Verlopen title: Filter title: Uitnodigingen + pending_accounts: + title: Accounts in afwachting (%{count}) relays: add_new: Nieuwe relayserver toevoegen delete: Verwijderen @@ -585,6 +592,9 @@ nl: content: Het spijt ons, er is aan onze kant iets fout gegaan. title: Er is iets mis noscript_html: Schakel JavaScript in om de webapp van Mastodon te kunnen gebruiken. Als alternatief kan je een Mastodon-app zoeken voor jouw platform. + existing_username_validator: + not_found: Kon geen lokale gebruiker met die gebruikersnaam vinden + not_found_multiple: Kon %{usernames} niet vinden exports: archive_takeout: date: Datum @@ -628,10 +638,13 @@ nl: all: Alles changes_saved_msg: Wijzigingen succesvol opgeslagen! copy: Kopiëren + order_by: Sorteer op save_changes: Wijzigingen opslaan validation_errors: one: Er is iets niet helemaal goed! Bekijk onderstaande fout other: Er is iets niet helemaal goed! Bekijk onderstaande %{count} fouten + html_validator: + invalid_markup: 'bevat ongeldige HTML-opmaak: %{error}' identity_proofs: active: Actief authorize: Ja, autoriseren @@ -646,6 +659,8 @@ nl: i_am_html: Ik ben %{username} op %{service}. identity: Identiteit inactive: Inactief + publicize_checkbox: 'En toot dit:' + publicize_toot: 'Het is bewezen! Ik ben %{username} op %{service}: %{url}' status: Verificatiestatus view_proof: Bekijk bewijs imports: @@ -768,6 +783,8 @@ nl: relationships: activity: Accountactiviteit dormant: Sluimerend + last_active: Laatst actief + most_recent: Recentelijk gevolgd moved: Verhuisd mutual: Wederzijds primary: Primair @@ -843,6 +860,9 @@ nl: revoke_success: Sessie succesvol ingetrokken title: Sessies settings: + account: Account + account_settings: Accountinstellingen + appearance: Uiterlijk authorized_apps: Geautoriseerde apps back: Terug naar Mastodon delete: Account verwijderen @@ -852,9 +872,11 @@ nl: featured_tags: Uitgelichte hashtags identity_proofs: Identiteitsbewijzen import: Importeren + import_and_export: Importeren en exporteren migrate: Accountmigratie notifications: Meldingen preferences: Voorkeuren + profile: Profiel relationships: Volgers en gevolgden two_factor_authentication: Tweestapsverificatie statuses: diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml index 0d7d1a847..09bd4e856 100644 --- a/config/locales/simple_form.nl.yml +++ b/config/locales/simple_form.nl.yml @@ -41,6 +41,8 @@ nl: name: 'Je wilt misschien een van deze gebruiken:' imports: data: CSV-bestand dat op een andere Mastodonserver werd geëxporteerd + invite_request: + text: Dit helpt ons om jouw aanvraag te beoordelen sessions: otp: 'Voer de tweestaps-aanmeldcode vanaf jouw mobiele telefoon in of gebruik een van jouw herstelcodes:' user: @@ -118,12 +120,15 @@ nl: must_be_follower: Meldingen van mensen die jou niet volgen blokkeren must_be_following: Meldingen van mensen die jij niet volgt blokkeren must_be_following_dm: Directe berichten van mensen die jij niet volgt blokkeren + invite_request: + text: Waarom wil jij je aanmelden? notification_emails: digest: Periodiek e-mails met een samenvatting versturen favourite: Een e-mail versturen wanneer iemand jouw toot aan hun favorieten heeft toegevoegd follow: Een e-mail versturen wanneer iemand jou volgt follow_request: Een e-mail versturen wanneer iemand jou wil volgen mention: Een e-mail versturen wanneer iemand jou vermeld + pending_account: Een e-mail verzenden wanneer een nieuw account moet worden beoordeeld reblog: Een e-mail versturen wanneer iemand jouw toot heeft geboost report: Verstuur een e-mail wanneer een nieuw rapportage is ingediend 'no': Nee From 01b1c377b1fea841b9823a3134e8f41ccc4b0f29 Mon Sep 17 00:00:00 2001 From: Jessica <46502909+hyenagirl64@users.noreply.github.com> Date: Sat, 20 Apr 2019 19:47:39 -0700 Subject: [PATCH 113/366] Animate avatar GIFs on-hover on public profiles (#10549) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Third time is the charm? * Use full asset URL for data-static and data-original ̀image_tag` expands to the full asset URL, we have to do the same in `data` attributes so that it can work when assets and user data are stored on a different host --- app/javascript/packs/public.js | 15 +++++++++++++++ app/views/accounts/_header.html.haml | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/javascript/packs/public.js b/app/javascript/packs/public.js index 6a8cf9c2f..93379cdb3 100644 --- a/app/javascript/packs/public.js +++ b/app/javascript/packs/public.js @@ -173,6 +173,21 @@ function main() { avatar.src = url; }); + const getProfileAvatarAnimationHandler = (swapTo) => { + //animate avatar gifs on the profile page when moused over + return ({ target }) => { + const swapSrc = target.getAttribute(swapTo); + //only change the img source if autoplay is off and the image src is actually different + if(target.getAttribute('data-autoplay') === 'false' && target.src !== swapSrc) { + target.src = swapSrc; + } + }; + }; + + delegate(document, 'img#profile_page_avatar', 'mouseover', getProfileAvatarAnimationHandler('data-original')); + + delegate(document, 'img#profile_page_avatar', 'mouseout', getProfileAvatarAnimationHandler('data-static')); + delegate(document, '#account_header', 'change', ({ target }) => { const header = document.querySelector('.card .card__img img'); const [file] = target.files || []; diff --git a/app/views/accounts/_header.html.haml b/app/views/accounts/_header.html.haml index 370e7e470..4ef9f9478 100644 --- a/app/views/accounts/_header.html.haml +++ b/app/views/accounts/_header.html.haml @@ -3,7 +3,7 @@ = image_tag (current_account&.user&.setting_auto_play_gif ? account.header_original_url : account.header_static_url), class: 'parallax' .public-account-header__bar = link_to short_account_url(account), class: 'avatar' do - = image_tag (current_account&.user&.setting_auto_play_gif ? account.avatar_original_url : account.avatar_static_url) + = image_tag (current_account&.user&.setting_auto_play_gif ? account.avatar_original_url : account.avatar_static_url), id: 'profile_page_avatar', data: {original: full_asset_url(account.avatar_original_url), static: full_asset_url(account.avatar_static_url), autoplay: current_account&.user&.setting_auto_play_gif} .public-account-header__tabs .public-account-header__tabs__name %h1 From 10bdd912d64a45d8b445f33cd10e498d8c071e56 Mon Sep 17 00:00:00 2001 From: Daniel Aleksandersen Date: Sun, 21 Apr 2019 04:48:19 +0200 Subject: [PATCH 114/366] Treat meta[property] as a space-separated list (#10604) The @property attribute in HTML is a space-separated list of values. This change normalizes whitespace and finds the desired value in the list instead of requiring an exact single-value match. More details: https://www.ctrl.blog/entry/rdfa-socialmedia-metadata.html --- app/services/fetch_link_card_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/fetch_link_card_service.rb b/app/services/fetch_link_card_service.rb index 7979c312e..494aaed75 100644 --- a/app/services/fetch_link_card_service.rb +++ b/app/services/fetch_link_card_service.rb @@ -165,7 +165,7 @@ class FetchLinkCardService < BaseService end def meta_property(page, property) - page.at_xpath("//meta[@property=\"#{property}\"]")&.attribute('content')&.value || page.at_xpath("//meta[@name=\"#{property}\"]")&.attribute('content')&.value + page.at_xpath("//meta[contains(concat(' ', normalize-space(@property), ' '), ' #{property} ')]")&.attribute('content')&.value || page.at_xpath("//meta[@name=\"#{property}\"]")&.attribute('content')&.value end def lock_options From d210d0a655bbf900bba627bfed9d1d80c682bc29 Mon Sep 17 00:00:00 2001 From: partev Date: Sat, 20 Apr 2019 22:48:47 -0400 Subject: [PATCH 115/366] Update hy.json (#10591) --- app/javascript/mastodon/locales/hy.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index c3971b09e..d155619c9 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -239,7 +239,7 @@ "navigation_bar.lists": "Ցանկեր", "navigation_bar.logout": "Դուրս գալ", "navigation_bar.mutes": "Լռեցրած օգտատերեր", - "navigation_bar.personal": "Personal", + "navigation_bar.personal": "Անձնական", "navigation_bar.pins": "Ամրացված թթեր", "navigation_bar.preferences": "Նախապատվություններ", "navigation_bar.public_timeline": "Դաշնային հոսք", From a5c0aae984a38f6f6670e821cc4c0d755cf55ad1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Sun, 21 Apr 2019 04:49:05 +0200 Subject: [PATCH 116/366] Bump lograge from 0.10.0 to 0.11.0 (#10588) Bumps [lograge](https://github.com/roidrage/lograge) from 0.10.0 to 0.11.0. - [Release notes](https://github.com/roidrage/lograge/releases) - [Changelog](https://github.com/roidrage/lograge/blob/master/CHANGELOG.md) - [Commits](https://github.com/roidrage/lograge/compare/v0.10.0...v0.11.0) Signed-off-by: dependabot[bot] --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 735920a66..b2d6bc3fc 100644 --- a/Gemfile +++ b/Gemfile @@ -142,7 +142,7 @@ group :development do end group :production do - gem 'lograge', '~> 0.10' + gem 'lograge', '~> 0.11' gem 'redis-rails', '~> 5.0' end diff --git a/Gemfile.lock b/Gemfile.lock index b7371b92c..9c87b0e02 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -318,7 +318,7 @@ GEM letter_opener (~> 1.0) railties (>= 3.2) link_header (0.0.8) - lograge (0.10.0) + lograge (0.11.0) actionpack (>= 4) activesupport (>= 4) railties (>= 4) @@ -706,7 +706,7 @@ DEPENDENCIES letter_opener (~> 1.7) letter_opener_web (~> 1.3) link_header (~> 0.0) - lograge (~> 0.10) + lograge (~> 0.11) makara (~> 0.4) mario-redis-lock (~> 1.2) memory_profiler From aa484e2cb3c63ce701cc1b800dceb9df49e19f3c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Sun, 21 Apr 2019 04:49:44 +0200 Subject: [PATCH 117/366] Bump webpush from 0.3.7 to 0.3.8 (#10592) Bumps [webpush](https://github.com/zaru/webpush) from 0.3.7 to 0.3.8. - [Release notes](https://github.com/zaru/webpush/releases) - [Changelog](https://github.com/zaru/webpush/blob/master/CHANGELOG.md) - [Commits](https://github.com/zaru/webpush/compare/v0.3.7...v0.3.8) Signed-off-by: dependabot[bot] --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 9c87b0e02..73a3e1e93 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -640,7 +640,7 @@ GEM activesupport (>= 4.2) rack-proxy (>= 0.6.1) railties (>= 4.2) - webpush (0.3.7) + webpush (0.3.8) hkdf (~> 0.2) jwt (~> 2.0) websocket-driver (0.7.0) From 80c9cb0eb344d13770066e8fa76214b9830afb5a Mon Sep 17 00:00:00 2001 From: Yamagishi Kazutoshi Date: Sun, 21 Apr 2019 11:52:20 +0900 Subject: [PATCH 118/366] Add hi.json (#10573) --- app/javascript/mastodon/locales/hi.json | 384 ++++++++++++++++++ app/javascript/mastodon/locales/ru.json | 1 - .../mastodon/locales/whitelist_hi.json | 2 + 3 files changed, 386 insertions(+), 1 deletion(-) create mode 100644 app/javascript/mastodon/locales/hi.json create mode 100644 app/javascript/mastodon/locales/whitelist_hi.json diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json new file mode 100644 index 000000000..9d507346a --- /dev/null +++ b/app/javascript/mastodon/locales/hi.json @@ -0,0 +1,384 @@ +{ + "account.add_or_remove_from_list": "Add or Remove from lists", + "account.badges.bot": "Bot", + "account.block": "Block @{name}", + "account.block_domain": "Hide everything from {domain}", + "account.blocked": "Blocked", + "account.direct": "Direct message @{name}", + "account.domain_blocked": "Domain hidden", + "account.edit_profile": "Edit profile", + "account.endorse": "Feature on profile", + "account.follow": "Follow", + "account.followers": "Followers", + "account.followers.empty": "No one follows this user yet.", + "account.follows": "Follows", + "account.follows.empty": "This user doesn't follow anyone yet.", + "account.follows_you": "Follows you", + "account.hide_reblogs": "Hide boosts from @{name}", + "account.link_verified_on": "Ownership of this link was checked on {date}", + "account.locked_info": "This account privacy status is set to locked. The owner manually reviews who can follow them.", + "account.media": "Media", + "account.mention": "Mention @{name}", + "account.moved_to": "{name} has moved to:", + "account.mute": "Mute @{name}", + "account.mute_notifications": "Mute notifications from @{name}", + "account.muted": "Muted", + "account.posts": "Toots", + "account.posts_with_replies": "Toots and replies", + "account.report": "Report @{name}", + "account.requested": "Awaiting approval. Click to cancel follow request", + "account.share": "Share @{name}'s profile", + "account.show_reblogs": "Show boosts from @{name}", + "account.unblock": "Unblock @{name}", + "account.unblock_domain": "Unhide {domain}", + "account.unendorse": "Don't feature on profile", + "account.unfollow": "Unfollow", + "account.unmute": "Unmute @{name}", + "account.unmute_notifications": "Unmute notifications from @{name}", + "alert.unexpected.message": "An unexpected error occurred.", + "alert.unexpected.title": "Oops!", + "boost_modal.combo": "You can press {combo} to skip this next time", + "bundle_column_error.body": "Something went wrong while loading this component.", + "bundle_column_error.retry": "Try again", + "bundle_column_error.title": "Network error", + "bundle_modal_error.close": "Close", + "bundle_modal_error.message": "Something went wrong while loading this component.", + "bundle_modal_error.retry": "Try again", + "column.blocks": "Blocked users", + "column.community": "Local timeline", + "column.direct": "Direct messages", + "column.domain_blocks": "Hidden domains", + "column.favourites": "Favourites", + "column.follow_requests": "Follow requests", + "column.home": "Home", + "column.lists": "Lists", + "column.mutes": "Muted users", + "column.notifications": "Notifications", + "column.pins": "Pinned toot", + "column.public": "Federated timeline", + "column_back_button.label": "Back", + "column_header.hide_settings": "Hide settings", + "column_header.moveLeft_settings": "Move column to the left", + "column_header.moveRight_settings": "Move column to the right", + "column_header.pin": "Pin", + "column_header.show_settings": "Show settings", + "column_header.unpin": "Unpin", + "column_subheading.settings": "Settings", + "community.column_settings.media_only": "Media Only", + "compose_form.direct_message_warning": "This toot will only be sent to all the mentioned users.", + "compose_form.direct_message_warning_learn_more": "Learn more", + "compose_form.hashtag_warning": "This toot won't be listed under any hashtag as it is unlisted. Only public toots can be searched by hashtag.", + "compose_form.lock_disclaimer": "Your account is not {locked}. Anyone can follow you to view your follower-only posts.", + "compose_form.lock_disclaimer.lock": "locked", + "compose_form.placeholder": "What is on your mind?", + "compose_form.poll.add_option": "Add a choice", + "compose_form.poll.duration": "Poll duration", + "compose_form.poll.option_placeholder": "Choice {number}", + "compose_form.poll.remove_option": "Remove this choice", + "compose_form.publish": "Toot", + "compose_form.publish_loud": "{publish}!", + "compose_form.sensitive.marked": "Media is marked as sensitive", + "compose_form.sensitive.unmarked": "Media is not marked as sensitive", + "compose_form.spoiler.marked": "Text is hidden behind warning", + "compose_form.spoiler.unmarked": "Text is not hidden", + "compose_form.spoiler_placeholder": "Write your warning here", + "confirmation_modal.cancel": "Cancel", + "confirmations.block.block_and_report": "Block & Report", + "confirmations.block.confirm": "Block", + "confirmations.block.message": "Are you sure you want to block {name}?", + "confirmations.delete.confirm": "Delete", + "confirmations.delete.message": "Are you sure you want to delete this status?", + "confirmations.delete_list.confirm": "Delete", + "confirmations.delete_list.message": "Are you sure you want to permanently delete this list?", + "confirmations.domain_block.confirm": "Hide entire domain", + "confirmations.domain_block.message": "Are you really, really sure you want to block the entire {domain}? In most cases a few targeted blocks or mutes are sufficient and preferable. You will not see content from that domain in any public timelines or your notifications. Your followers from that domain will be removed.", + "confirmations.mute.confirm": "Mute", + "confirmations.mute.message": "Are you sure you want to mute {name}?", + "confirmations.redraft.confirm": "Delete & redraft", + "confirmations.redraft.message": "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.", + "confirmations.reply.confirm": "Reply", + "confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?", + "confirmations.unfollow.confirm": "Unfollow", + "confirmations.unfollow.message": "Are you sure you want to unfollow {name}?", + "embed.instructions": "Embed this status on your website by copying the code below.", + "embed.preview": "Here is what it will look like:", + "emoji_button.activity": "Activity", + "emoji_button.custom": "Custom", + "emoji_button.flags": "Flags", + "emoji_button.food": "Food & Drink", + "emoji_button.label": "Insert emoji", + "emoji_button.nature": "Nature", + "emoji_button.not_found": "No emojos!! (╯°□°)╯︵ ┻━┻", + "emoji_button.objects": "Objects", + "emoji_button.people": "People", + "emoji_button.recent": "Frequently used", + "emoji_button.search": "Search...", + "emoji_button.search_results": "Search results", + "emoji_button.symbols": "Symbols", + "emoji_button.travel": "Travel & Places", + "empty_column.account_timeline": "No toots here!", + "empty_column.account_unavailable": "Profile unavailable", + "empty_column.blocks": "You haven't blocked any users yet.", + "empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", + "empty_column.direct": "You don't have any direct messages yet. When you send or receive one, it will show up here.", + "empty_column.domain_blocks": "There are no hidden domains yet.", + "empty_column.favourited_statuses": "You don't have any favourite toots yet. When you favourite one, it will show up here.", + "empty_column.favourites": "No one has favourited this toot yet. When someone does, they will show up here.", + "empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", + "empty_column.hashtag": "There is nothing in this hashtag yet.", + "empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", + "empty_column.home.public_timeline": "the public timeline", + "empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", + "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", + "empty_column.mutes": "You haven't muted any users yet.", + "empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", + "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", + "follow_request.authorize": "Authorize", + "follow_request.reject": "Reject", + "getting_started.developers": "Developers", + "getting_started.directory": "Profile directory", + "getting_started.documentation": "Documentation", + "getting_started.heading": "Getting started", + "getting_started.invite": "Invite people", + "getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", + "getting_started.security": "Security", + "getting_started.terms": "Terms of service", + "hashtag.column_header.tag_mode.all": "and {additional}", + "hashtag.column_header.tag_mode.any": "or {additional}", + "hashtag.column_header.tag_mode.none": "without {additional}", + "hashtag.column_settings.select.no_options_message": "No suggestions found", + "hashtag.column_settings.select.placeholder": "Enter hashtags…", + "hashtag.column_settings.tag_mode.all": "All of these", + "hashtag.column_settings.tag_mode.any": "Any of these", + "hashtag.column_settings.tag_mode.none": "None of these", + "hashtag.column_settings.tag_toggle": "Include additional tags in this column", + "home.column_settings.basic": "Basic", + "home.column_settings.show_reblogs": "Show boosts", + "home.column_settings.show_replies": "Show replies", + "intervals.full.days": "{number, plural, one {# day} other {# days}}", + "intervals.full.hours": "{number, plural, one {# hour} other {# hours}}", + "intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}", + "introduction.federation.action": "Next", + "introduction.federation.federated.headline": "Federated", + "introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.", + "introduction.federation.home.headline": "Home", + "introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!", + "introduction.federation.local.headline": "Local", + "introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.", + "introduction.interactions.action": "Finish toot-orial!", + "introduction.interactions.favourite.headline": "Favourite", + "introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.", + "introduction.interactions.reblog.headline": "Boost", + "introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.", + "introduction.interactions.reply.headline": "Reply", + "introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.", + "introduction.welcome.action": "Let's go!", + "introduction.welcome.headline": "First steps", + "introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.", + "keyboard_shortcuts.back": "to navigate back", + "keyboard_shortcuts.blocked": "to open blocked users list", + "keyboard_shortcuts.boost": "to boost", + "keyboard_shortcuts.column": "to focus a status in one of the columns", + "keyboard_shortcuts.compose": "to focus the compose textarea", + "keyboard_shortcuts.description": "Description", + "keyboard_shortcuts.direct": "to open direct messages column", + "keyboard_shortcuts.down": "to move down in the list", + "keyboard_shortcuts.enter": "to open status", + "keyboard_shortcuts.favourite": "to favourite", + "keyboard_shortcuts.favourites": "to open favourites list", + "keyboard_shortcuts.federated": "to open federated timeline", + "keyboard_shortcuts.heading": "Keyboard Shortcuts", + "keyboard_shortcuts.home": "to open home timeline", + "keyboard_shortcuts.hotkey": "Hotkey", + "keyboard_shortcuts.legend": "to display this legend", + "keyboard_shortcuts.local": "to open local timeline", + "keyboard_shortcuts.mention": "to mention author", + "keyboard_shortcuts.muted": "to open muted users list", + "keyboard_shortcuts.my_profile": "to open your profile", + "keyboard_shortcuts.notifications": "to open notifications column", + "keyboard_shortcuts.pinned": "to open pinned toots list", + "keyboard_shortcuts.profile": "to open author's profile", + "keyboard_shortcuts.reply": "to reply", + "keyboard_shortcuts.requests": "to open follow requests list", + "keyboard_shortcuts.search": "to focus search", + "keyboard_shortcuts.start": "to open \"get started\" column", + "keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", + "keyboard_shortcuts.toot": "to start a brand new toot", + "keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", + "keyboard_shortcuts.up": "to move up in the list", + "lightbox.close": "Close", + "lightbox.next": "Next", + "lightbox.previous": "Previous", + "lists.account.add": "Add to list", + "lists.account.remove": "Remove from list", + "lists.delete": "Delete list", + "lists.edit": "Edit list", + "lists.edit.submit": "Change title", + "lists.new.create": "Add list", + "lists.new.title_placeholder": "New list title", + "lists.search": "Search among people you follow", + "lists.subheading": "Your lists", + "loading_indicator.label": "Loading...", + "media_gallery.toggle_visible": "Toggle visibility", + "missing_indicator.label": "Not found", + "missing_indicator.sublabel": "This resource could not be found", + "mute_modal.hide_notifications": "Hide notifications from this user?", + "navigation_bar.apps": "Mobile apps", + "navigation_bar.blocks": "Blocked users", + "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.compose": "Compose new toot", + "navigation_bar.direct": "Direct messages", + "navigation_bar.discover": "Discover", + "navigation_bar.domain_blocks": "Hidden domains", + "navigation_bar.edit_profile": "Edit profile", + "navigation_bar.favourites": "Favourites", + "navigation_bar.filters": "Muted words", + "navigation_bar.follow_requests": "Follow requests", + "navigation_bar.info": "About this server", + "navigation_bar.keyboard_shortcuts": "Hotkeys", + "navigation_bar.lists": "Lists", + "navigation_bar.logout": "Logout", + "navigation_bar.mutes": "Muted users", + "navigation_bar.personal": "Personal", + "navigation_bar.pins": "Pinned toots", + "navigation_bar.preferences": "Preferences", + "navigation_bar.public_timeline": "Federated timeline", + "navigation_bar.security": "Security", + "notification.favourite": "{name} favourited your status", + "notification.follow": "{name} followed you", + "notification.mention": "{name} mentioned you", + "notification.poll": "A poll you have voted in has ended", + "notification.reblog": "{name} boosted your status", + "notifications.clear": "Clear notifications", + "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", + "notifications.column_settings.alert": "Desktop notifications", + "notifications.column_settings.favourite": "Favourites:", + "notifications.column_settings.filter_bar.advanced": "Display all categories", + "notifications.column_settings.filter_bar.category": "Quick filter bar", + "notifications.column_settings.filter_bar.show": "Show", + "notifications.column_settings.follow": "New followers:", + "notifications.column_settings.mention": "Mentions:", + "notifications.column_settings.poll": "Poll results:", + "notifications.column_settings.push": "Push notifications", + "notifications.column_settings.reblog": "Boosts:", + "notifications.column_settings.show": "Show in column", + "notifications.column_settings.sound": "Play sound", + "notifications.filter.all": "All", + "notifications.filter.boosts": "Boosts", + "notifications.filter.favourites": "Favourites", + "notifications.filter.follows": "Follows", + "notifications.filter.mentions": "Mentions", + "notifications.filter.polls": "Poll results", + "notifications.group": "{count} notifications", + "poll.closed": "Closed", + "poll.refresh": "Refresh", + "poll.total_votes": "{count, plural, one {# vote} other {# votes}}", + "poll.vote": "Vote", + "poll_button.add_poll": "Add a poll", + "poll_button.remove_poll": "Remove poll", + "privacy.change": "Adjust status privacy", + "privacy.direct.long": "Post to mentioned users only", + "privacy.direct.short": "Direct", + "privacy.private.long": "Post to followers only", + "privacy.private.short": "Followers-only", + "privacy.public.long": "Post to public timelines", + "privacy.public.short": "Public", + "privacy.unlisted.long": "Do not show in public timelines", + "privacy.unlisted.short": "Unlisted", + "regeneration_indicator.label": "Loading…", + "regeneration_indicator.sublabel": "Your home feed is being prepared!", + "relative_time.days": "{number}d", + "relative_time.hours": "{number}h", + "relative_time.just_now": "now", + "relative_time.minutes": "{number}m", + "relative_time.seconds": "{number}s", + "reply_indicator.cancel": "Cancel", + "report.forward": "Forward to {target}", + "report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", + "report.hint": "The report will be sent to your server moderators. You can provide an explanation of why you are reporting this account below:", + "report.placeholder": "Additional comments", + "report.submit": "Submit", + "report.target": "Report {target}", + "search.placeholder": "Search", + "search_popout.search_format": "Advanced search format", + "search_popout.tips.full_text": "Simple text returns statuses you have written, favourited, boosted, or have been mentioned in, as well as matching usernames, display names, and hashtags.", + "search_popout.tips.hashtag": "hashtag", + "search_popout.tips.status": "status", + "search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", + "search_popout.tips.user": "user", + "search_results.accounts": "People", + "search_results.hashtags": "Hashtags", + "search_results.statuses": "Toots", + "search_results.total": "{count, number} {count, plural, one {result} other {results}}", + "status.admin_account": "Open moderation interface for @{name}", + "status.admin_status": "Open this status in the moderation interface", + "status.block": "Block @{name}", + "status.cancel_reblog_private": "Unboost", + "status.cannot_reblog": "This post cannot be boosted", + "status.copy": "Copy link to status", + "status.delete": "Delete", + "status.detailed_status": "Detailed conversation view", + "status.direct": "Direct message @{name}", + "status.embed": "Embed", + "status.favourite": "Favourite", + "status.filtered": "Filtered", + "status.load_more": "Load more", + "status.media_hidden": "Media hidden", + "status.mention": "Mention @{name}", + "status.more": "More", + "status.mute": "Mute @{name}", + "status.mute_conversation": "Mute conversation", + "status.open": "Expand this status", + "status.pin": "Pin on profile", + "status.pinned": "Pinned toot", + "status.read_more": "Read more", + "status.reblog": "Boost", + "status.reblog_private": "Boost to original audience", + "status.reblogged_by": "{name} boosted", + "status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", + "status.redraft": "Delete & re-draft", + "status.reply": "Reply", + "status.replyAll": "Reply to thread", + "status.report": "Report @{name}", + "status.sensitive_toggle": "Click to view", + "status.sensitive_warning": "Sensitive content", + "status.share": "Share", + "status.show_less": "Show less", + "status.show_less_all": "Show less for all", + "status.show_more": "Show more", + "status.show_more_all": "Show more for all", + "status.show_thread": "Show thread", + "status.unmute_conversation": "Unmute conversation", + "status.unpin": "Unpin from profile", + "suggestions.dismiss": "Dismiss suggestion", + "suggestions.header": "You might be interested in…", + "tabs_bar.federated_timeline": "Federated", + "tabs_bar.home": "Home", + "tabs_bar.local_timeline": "Local", + "tabs_bar.notifications": "Notifications", + "tabs_bar.search": "Search", + "time_remaining.days": "{number, plural, one {# day} other {# days}} left", + "time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left", + "time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left", + "time_remaining.moments": "Moments remaining", + "time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left", + "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", + "ui.beforeunload": "Your draft will be lost if you leave Mastodon.", + "upload_area.title": "Drag & drop to upload", + "upload_button.label": "Add media (JPEG, PNG, GIF, WebM, MP4, MOV)", + "upload_error.limit": "File upload limit exceeded.", + "upload_error.poll": "File upload not allowed with polls.", + "upload_form.description": "Describe for the visually impaired", + "upload_form.focus": "Crop", + "upload_form.undo": "Delete", + "upload_progress.label": "Uploading...", + "video.close": "Close video", + "video.exit_fullscreen": "Exit full screen", + "video.expand": "Expand video", + "video.fullscreen": "Full screen", + "video.hide": "Hide video", + "video.mute": "Mute sound", + "video.pause": "Pause", + "video.play": "Play", + "video.unmute": "Unmute sound" +} diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index 13f511cbf..475899797 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -118,7 +118,6 @@ "emoji_button.travel": "Путешествия", "empty_column.account_timeline": "Статусов нет!", "empty_column.account_unavailable": "Профиль недоступен", - "empty_column.account_timeline_blocked": "Вы заблокированы", "empty_column.blocks": "Вы ещё никого не заблокировали.", "empty_column.community": "Локальная лента пуста. Напишите что-нибудь, чтобы разогреть народ!", "empty_column.direct": "У Вас пока нет личных сообщений. Когда Вы начнёте их отправлять или получать, они появятся здесь.", diff --git a/app/javascript/mastodon/locales/whitelist_hi.json b/app/javascript/mastodon/locales/whitelist_hi.json new file mode 100644 index 000000000..0d4f101c7 --- /dev/null +++ b/app/javascript/mastodon/locales/whitelist_hi.json @@ -0,0 +1,2 @@ +[ +] From be8692b938cb354923288af513ceef932ca27760 Mon Sep 17 00:00:00 2001 From: Ben Lubar Date: Sat, 20 Apr 2019 21:53:24 -0500 Subject: [PATCH 119/366] Default to the web domain (eg. mastodon.lubar.me) instead of the local domain (eg. lubar.me) for keybase proofs (#10565) --- app/lib/proof_provider/keybase.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/lib/proof_provider/keybase.rb b/app/lib/proof_provider/keybase.rb index 9680b90ee..8e51d7146 100644 --- a/app/lib/proof_provider/keybase.rb +++ b/app/lib/proof_provider/keybase.rb @@ -2,7 +2,7 @@ class ProofProvider::Keybase BASE_URL = ENV.fetch('KEYBASE_BASE_URL', 'https://keybase.io') - DOMAIN = ENV.fetch('KEYBASE_DOMAIN', Rails.configuration.x.local_domain) + DOMAIN = ENV.fetch('KEYBASE_DOMAIN', Rails.configuration.x.web_domain) class Error < StandardError; end From a430f2a03e28bdd1b7185ae5c47e102c4219a618 Mon Sep 17 00:00:00 2001 From: Yamagishi Kazutoshi Date: Sun, 21 Apr 2019 11:53:45 +0900 Subject: [PATCH 120/366] i18n: Update Catalan translation (#10559) * Updated Catalan strings * Update ca.yml * Update ca.yml * Update ca.yml * Update ca.yml * Update ca.yml * Update ca.yml * Update ca.yml * Update simple_form.ca.yml * Update simple_form.ca.yml * Update simple_form.ca.yml * bundle exec i18n-tasks * Update ca.json * Update simple_form.ca.yml * i18n: Update Catalan translations * i18n: Update Catalan translations * i18n: Update Catalan translations * i18n: Update Catalan translations * i18n: Update Catalan translations * i18n: Update Catalan translations * i18n: Update Catalan translations * i18n: Update Catalan translations * i18n: Update Catalan translations --- config/locales/ca.yml | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 17a5d9d0c..6169767da 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -68,6 +68,7 @@ ca: admin: Administrador bot: Bot moderator: Moderador + unavailable: Perfil inaccessible unfollow: Deixa de seguir admin: account_actions: @@ -80,6 +81,7 @@ ca: destroyed_msg: Nota de moderació destruïda amb èxit! accounts: approve: Aprova + approve_all: Aprova'ls tots are_you_sure: N'estàs segur? avatar: Avatar by_domain: Domini @@ -132,6 +134,7 @@ ca: moderation_notes: Notes de moderació most_recent_activity: Activitat més recent most_recent_ip: IP més recent + no_account_selected: No s'han canviat els comptes perque no s'han seleccionat no_limits_imposed: Sense límits imposats not_subscribed: No subscrit outbox_url: URL de la bústia de sortida @@ -144,6 +147,7 @@ ca: push_subscription_expires: La subscripció PuSH expira redownload: Actualitza el perfil reject: Rebutja + reject_all: Rebutja'ls tots remove_avatar: Eliminar avatar remove_header: Treu la capçalera resend_confirmation: @@ -330,6 +334,8 @@ ca: expired: Caducat title: Filtre title: Convida + pending_accounts: + title: Comptes pendents (%{count}) relays: add_new: Afegiu un nou relay delete: Esborra @@ -854,18 +860,23 @@ ca: revoke_success: S'ha revocat la sessió amb èxit title: Sessions settings: + account: Compte + account_settings: Ajustos del compte + appearance: Aparènça authorized_apps: Aplicacions autoritzades - back: Torna a l'inici + back: Torna a Mastodon delete: Eliminació del compte development: Desenvolupament edit_profile: Editar perfil - export: Exportar informació + export: Exportar dades featured_tags: Etiquetes destacades identity_proofs: Proves d'identitat import: Importar + import_and_export: Importar i exportar migrate: Migració del compte notifications: Notificacions preferences: Preferències + profile: Perfil relationships: Seguits i seguidors two_factor_authentication: Autenticació de dos factors statuses: @@ -1040,7 +1051,7 @@ ca: welcome: edit_profile_action: Configurar perfil edit_profile_step: Pots personalitzar el teu perfil penjant un avatar, un encapçalament, canviant el teu nom de visualització i molt més. Si prefereixes revisar els seguidors nous abans de que et puguin seguir, pots blocar el teu compte. - explanation: Aquests són alguns consells per començar + explanation: Aquests són alguns consells per a començar final_action: Comença a publicar final_step: 'Comença a publicar! Fins i tot sense seguidors, els altres poden veure els teus missatges públics, per exemple, a la línia de temps local i a les etiquetes ("hashtags"). És possible que vulguis presentar-te amb l''etiqueta #introductions.' full_handle: El teu nom d'usuari sencer From cf5414e5d374329f94edddae4a5a9aaa0e5a35df Mon Sep 17 00:00:00 2001 From: jeroenpraat <41594439+jeroenpraat@users.noreply.github.com> Date: Sun, 21 Apr 2019 18:44:51 +0200 Subject: [PATCH 121/366] Small fix Dutch translation (#10612) * Small fix Dutch translation * Better descriptive titles See #10611 --- config/locales/nl.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/config/locales/nl.yml b/config/locales/nl.yml index f11a174b1..e07e7b133 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -435,14 +435,14 @@ nl: desc_html: Medewerkersbadge op profielpagina tonen title: Medewerkersbadge tonen site_description: - desc_html: Dit wordt als een alinea op de voorpagina getoond. Beschrijf wat er speciaal is aan deze server en andere zaken die van belang zijn. Je kan HTML gebruiken, zoals <a> en <em>. - title: Omschrijving Mastodonserver + desc_html: Introductie-alinea voor de API. Beschrijf wat er speciaal is aan deze server en andere zaken die van belang zijn. Je kan HTML gebruiken, zoals <a> en <em>. + title: Omschrijving Mastodonserver (API) site_description_extended: desc_html: Een goede plek voor je gedragscode, regels, richtlijnen en andere zaken die jouw server uniek maken. Je kan ook hier HTML gebruiken title: Uitgebreide omschrijving Mastodonserver site_short_description: - desc_html: Dit wordt in de zijbalk getoond als en als metatag in de paginabron. Beschrijf in één alinea wat Mastodon is en wat deze server speciaal maakt. De (langere) omschrijving van de Mastodonserver wordt gebruikt wanneer dit veld wordt leeg gelaten. - title: Korte omschrijving Mastodonserver + desc_html: Dit wordt gebruikt op de voorpagina, in de zijbalk op profielpagina's en als metatag in de paginabron. Beschrijf in één alinea wat Mastodon is en wat deze server speciaal maakt. + title: Omschrijving Mastodonserver (website) site_terms: desc_html: Je kan hier jouw eigen privacybeleid, gebruiksvoorwaarden en ander juridisch jargon kwijt. Je kan HTML gebruiken title: Aangepaste gebruiksvoorwaarden From 46321dc993c78be18b73bf2d240cb78e05d6490b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marcin=20miko=C5=82ajczak?= Date: Sun, 21 Apr 2019 22:30:04 +0200 Subject: [PATCH 122/366] i18n: Fix misleading strings in Polish translation (#10615) --- config/locales/simple_form.pl.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml index abc2c17a9..e1cbee91c 100644 --- a/config/locales/simple_form.pl.yml +++ b/config/locales/simple_form.pl.yml @@ -29,8 +29,8 @@ pl: setting_aggregate_reblogs: Nie pokazuj nowych podbić dla wpisów, które zostały niedawno podbite (dotyczy tylko nowo otrzymanych podbić) setting_default_language: Język Twoich wpisów może być wykrywany automatycznie, ale nie zawsze jest to dokładne setting_display_media_default: Ukrywaj zawartość oznaczoną jako wrażliwa - setting_display_media_hide_all: Zawsze ukrywaj zawartość multimedialną - setting_display_media_show_all: Zawsze pokazuj zawartość multimedialną jako wrażliwą + setting_display_media_hide_all: Zawsze oznaczaj zawartość multimedialną jako wrażliwą + setting_display_media_show_all: Nie ukrywaj zawartości multimedialnej oznaczonej jako wrażliwa setting_hide_network: Informacje o tym, kto Cię śledzi i kogo śledzisz nie będą widoczne setting_noindex: Wpływa na widoczność strony profilu i Twoich wpisów setting_show_application: W informacjach o wpisie będzie widoczna informacja o aplikacji, z której został wysłany From c9441bf82ecf00d144fe7d26d95bae104ac7968c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" Date: Mon, 22 Apr 2019 14:54:19 +0200 Subject: [PATCH 123/366] Bump cld3 from 3.2.3 to 3.2.4 (#10617) Bumps [cld3](https://github.com/akihikodaki/cld3-ruby) from 3.2.3 to 3.2.4. - [Release notes](https://github.com/akihikodaki/cld3-ruby/releases) - [Commits](https://github.com/akihikodaki/cld3-ruby/compare/v3.2.3...v3.2.4) Signed-off-by: dependabot[bot] --- Gemfile | 2 +- Gemfile.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Gemfile b/Gemfile index b2d6bc3fc..78d2a1d34 100644 --- a/Gemfile +++ b/Gemfile @@ -29,7 +29,7 @@ gem 'browser' gem 'charlock_holmes', '~> 0.7.6' gem 'iso-639' gem 'chewy', '~> 5.0' -gem 'cld3', '~> 3.2.3' +gem 'cld3', '~> 3.2.4' gem 'devise', '~> 4.6' gem 'devise-two-factor', '~> 3.0' diff --git a/Gemfile.lock b/Gemfile.lock index 73a3e1e93..c9e46f27a 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -143,8 +143,8 @@ GEM elasticsearch (>= 2.0.0) elasticsearch-dsl chunky_png (1.3.10) - cld3 (3.2.3) - ffi (>= 1.1.0, < 1.10.0) + cld3 (3.2.4) + ffi (>= 1.1.0, < 1.11.0) climate_control (0.2.0) cocaine (0.5.8) climate_control (>= 0.0.3, < 1.0) @@ -212,7 +212,7 @@ GEM multipart-post (>= 1.2, < 3) fast_blank (1.0.0) fastimage (2.1.5) - ffi (1.9.25) + ffi (1.10.0) fog-core (2.1.0) builder excon (~> 0.58) @@ -673,7 +673,7 @@ DEPENDENCIES capybara (~> 3.16) charlock_holmes (~> 0.7.6) chewy (~> 5.0) - cld3 (~> 3.2.3) + cld3 (~> 3.2.4) climate_control (~> 0.2) concurrent-ruby derailed_benchmarks From bdec58b514a18779c931d20f947e7ca80b29e8b4 Mon Sep 17 00:00:00 2001 From: ThibG Date: Mon, 22 Apr 2019 14:55:24 +0200 Subject: [PATCH 124/366] Minor code cleanup (#10613) --- .../compose/components/compose_form.js | 25 +++++++++---------- .../features/compose/components/search.js | 8 ++---- .../containers/compose_form_container.js | 13 +++++----- 3 files changed, 20 insertions(+), 26 deletions(-) diff --git a/app/javascript/mastodon/features/compose/components/compose_form.js b/app/javascript/mastodon/features/compose/components/compose_form.js index 4b0bde659..ddb610a89 100644 --- a/app/javascript/mastodon/features/compose/components/compose_form.js +++ b/app/javascript/mastodon/features/compose/components/compose_form.js @@ -40,17 +40,16 @@ class ComposeForm extends ImmutablePureComponent { static propTypes = { intl: PropTypes.object.isRequired, text: PropTypes.string.isRequired, - suggestion_token: PropTypes.string, suggestions: ImmutablePropTypes.list, spoiler: PropTypes.bool, privacy: PropTypes.string, - spoiler_text: PropTypes.string, + spoilerText: PropTypes.string, focusDate: PropTypes.instanceOf(Date), caretPosition: PropTypes.number, preselectDate: PropTypes.instanceOf(Date), - is_submitting: PropTypes.bool, - is_changing_upload: PropTypes.bool, - is_uploading: PropTypes.bool, + isSubmitting: PropTypes.bool, + isChangingUpload: PropTypes.bool, + isUploading: PropTypes.bool, onChange: PropTypes.func.isRequired, onSubmit: PropTypes.func.isRequired, onClearSuggestions: PropTypes.func.isRequired, @@ -85,10 +84,10 @@ class ComposeForm extends ImmutablePureComponent { } // Submit disabled: - const { is_submitting, is_changing_upload, is_uploading, anyMedia } = this.props; - const fulltext = [this.props.spoiler_text, countableText(this.props.text)].join(''); + const { isSubmitting, isChangingUpload, isUploading, anyMedia } = this.props; + const fulltext = [this.props.spoilerText, countableText(this.props.text)].join(''); - if (is_submitting || is_uploading || is_changing_upload || length(fulltext) > 500 || (fulltext.length !== 0 && fulltext.trim().length === 0 && !anyMedia)) { + if (isSubmitting || isUploading || isChangingUpload || length(fulltext) > 500 || (fulltext.length !== 0 && fulltext.trim().length === 0 && !anyMedia)) { return; } @@ -133,7 +132,7 @@ class ComposeForm extends ImmutablePureComponent { this.autosuggestTextarea.textarea.setSelectionRange(selectionStart, selectionEnd); this.autosuggestTextarea.textarea.focus(); - } else if(prevProps.is_submitting && !this.props.is_submitting) { + } else if(prevProps.isSubmitting && !this.props.isSubmitting) { this.autosuggestTextarea.textarea.focus(); } else if (this.props.spoiler !== prevProps.spoiler) { if (this.props.spoiler) { @@ -162,9 +161,9 @@ class ComposeForm extends ImmutablePureComponent { render () { const { intl, onPaste, showSearch, anyMedia } = this.props; - const disabled = this.props.is_submitting; - const text = [this.props.spoiler_text, countableText(this.props.text)].join(''); - const disabledButton = disabled || this.props.is_uploading || this.props.is_changing_upload || length(text) > 500 || (text.length !== 0 && text.trim().length === 0 && !anyMedia); + const disabled = this.props.isSubmitting; + const text = [this.props.spoilerText, countableText(this.props.text)].join(''); + const disabledButton = disabled || this.props.isUploading || this.props.isChangingUpload || length(text) > 500 || (text.length !== 0 && text.trim().length === 0 && !anyMedia); let publishText = ''; if (this.props.privacy === 'private' || this.props.privacy === 'direct') { @@ -182,7 +181,7 @@ class ComposeForm extends ImmutablePureComponent {
diff --git a/app/javascript/mastodon/features/compose/components/search.js b/app/javascript/mastodon/features/compose/components/search.js index 1ab197ac5..774658b1b 100644 --- a/app/javascript/mastodon/features/compose/components/search.js +++ b/app/javascript/mastodon/features/compose/components/search.js @@ -73,7 +73,7 @@ class Search extends React.PureComponent { } } - handleKeyDown = (e) => { + handleKeyUp = (e) => { if (e.key === 'Enter') { e.preventDefault(); this.props.onSubmit(); @@ -82,10 +82,6 @@ class Search extends React.PureComponent { } } - noop () { - - } - handleFocus = () => { this.setState({ expanded: true }); this.props.onShow(); @@ -110,7 +106,7 @@ class Search extends React.PureComponent { placeholder={intl.formatMessage(messages.placeholder)} value={value} onChange={this.handleChange} - onKeyUp={this.handleKeyDown} + onKeyUp={this.handleKeyUp} onFocus={this.handleFocus} onBlur={this.handleBlur} /> diff --git a/app/javascript/mastodon/features/compose/containers/compose_form_container.js b/app/javascript/mastodon/features/compose/containers/compose_form_container.js index b4a1c4b44..f9f1fba36 100644 --- a/app/javascript/mastodon/features/compose/containers/compose_form_container.js +++ b/app/javascript/mastodon/features/compose/containers/compose_form_container.js @@ -1,6 +1,5 @@ import { connect } from 'react-redux'; import ComposeForm from '../components/compose_form'; -import { uploadCompose } from '../../../actions/compose'; import { changeCompose, submitCompose, @@ -9,21 +8,21 @@ import { selectComposeSuggestion, changeComposeSpoilerText, insertEmojiCompose, + uploadCompose, } from '../../../actions/compose'; const mapStateToProps = state => ({ text: state.getIn(['compose', 'text']), - suggestion_token: state.getIn(['compose', 'suggestion_token']), suggestions: state.getIn(['compose', 'suggestions']), spoiler: state.getIn(['compose', 'spoiler']), - spoiler_text: state.getIn(['compose', 'spoiler_text']), + spoilerText: state.getIn(['compose', 'spoiler_text']), privacy: state.getIn(['compose', 'privacy']), focusDate: state.getIn(['compose', 'focusDate']), caretPosition: state.getIn(['compose', 'caretPosition']), preselectDate: state.getIn(['compose', 'preselectDate']), is_submitting: state.getIn(['compose', 'is_submitting']), - is_changing_upload: state.getIn(['compose', 'is_changing_upload']), - is_uploading: state.getIn(['compose', 'is_uploading']), + isChangingUpload: state.getIn(['compose', 'is_changing_upload']), + isUploading: state.getIn(['compose', 'is_uploading']), showSearch: state.getIn(['search', 'submitted']) && !state.getIn(['search', 'hidden']), anyMedia: state.getIn(['compose', 'media_attachments']).size > 0, }); @@ -46,8 +45,8 @@ const mapDispatchToProps = (dispatch) => ({ dispatch(fetchComposeSuggestions(token)); }, - onSuggestionSelected (position, token, accountId) { - dispatch(selectComposeSuggestion(position, token, accountId)); + onSuggestionSelected (position, token, suggestion) { + dispatch(selectComposeSuggestion(position, token, suggestion)); }, onChangeSpoilerText (checked) { From d763d39d2628bef123cdc801b2a3a3922b7e37f2 Mon Sep 17 00:00:00 2001 From: kedama Date: Mon, 22 Apr 2019 21:55:50 +0900 Subject: [PATCH 125/366] Fix modal items cannot scroll on touch devices (#10605) --- .../mastodon/features/ui/components/actions_modal.js | 2 +- app/javascript/styles/mastodon/components.scss | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/javascript/mastodon/features/ui/components/actions_modal.js b/app/javascript/mastodon/features/ui/components/actions_modal.js index 9792eba5f..00280f7a6 100644 --- a/app/javascript/mastodon/features/ui/components/actions_modal.js +++ b/app/javascript/mastodon/features/ui/components/actions_modal.js @@ -64,7 +64,7 @@ export default class ActionsModal extends ImmutablePureComponent {
{status} -
    +
      {this.props.actions.map(this.renderAction)}
diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index e697ba554..0b1fd3652 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -4085,6 +4085,11 @@ a.status-card.compact:hover { ul { overflow-y: auto; flex-shrink: 0; + max-height: 80vh; + + &.with-status { + max-height: calc(80vh - 75px); + } li:empty { margin: 0; From 0e78862b617bf5501b38d8ea7704fa53dd5912cf Mon Sep 17 00:00:00 2001 From: ThibG Date: Mon, 22 Apr 2019 14:56:14 +0200 Subject: [PATCH 126/366] Allow switching between singe-option and multiple-option polls (#10603) --- .../features/compose/components/poll_form.js | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/features/compose/components/poll_form.js b/app/javascript/mastodon/features/compose/components/poll_form.js index 4fb95f3c9..383e37eb6 100644 --- a/app/javascript/mastodon/features/compose/components/poll_form.js +++ b/app/javascript/mastodon/features/compose/components/poll_form.js @@ -26,6 +26,7 @@ class Option extends React.PureComponent { isPollMultiple: PropTypes.bool, onChange: PropTypes.func.isRequired, onRemove: PropTypes.func.isRequired, + onToggleMultiple: PropTypes.func.isRequired, intl: PropTypes.object.isRequired, }; @@ -37,13 +38,24 @@ class Option extends React.PureComponent { this.props.onRemove(this.props.index); }; + handleToggleMultiple = e => { + this.props.onToggleMultiple(); + e.preventDefault(); + e.stopPropagation(); + }; + render () { const { isPollMultiple, title, index, intl } = this.props; return (