Merge pull request #758 from ThibG/glitch-soc/merge-upstream

Merge upstream changes
main
ThibG 6 years ago committed by GitHub
commit 35e9d099b3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -12,7 +12,7 @@ gem 'thor', '~> 0.20'
gem 'hamlit-rails', '~> 0.2' gem 'hamlit-rails', '~> 0.2'
gem 'pg', '~> 1.0' gem 'pg', '~> 1.0'
gem 'makara', '~> 0.4' gem 'makara', '~> 0.4'
gem 'pghero', '~> 2.1' gem 'pghero', '~> 2.2'
gem 'dotenv-rails', '~> 2.2', '< 2.3' gem 'dotenv-rails', '~> 2.2', '< 2.3'
gem 'aws-sdk-s3', '~> 1.9', require: false gem 'aws-sdk-s3', '~> 1.9', require: false
@ -24,13 +24,13 @@ gem 'streamio-ffmpeg', '~> 3.0'
gem 'active_model_serializers', '~> 0.10' gem 'active_model_serializers', '~> 0.10'
gem 'addressable', '~> 2.5' gem 'addressable', '~> 2.5'
gem 'bootsnap', '~> 1.3' gem 'bootsnap', '~> 1.3', require: false
gem 'browser' gem 'browser'
gem 'charlock_holmes', '~> 0.7.6' gem 'charlock_holmes', '~> 0.7.6'
gem 'iso-639' gem 'iso-639'
gem 'chewy', '~> 5.0' gem 'chewy', '~> 5.0'
gem 'cld3', '~> 3.2.0' gem 'cld3', '~> 3.2.0'
gem 'devise', '~> 4.4' gem 'devise', '~> 4.5'
gem 'devise-two-factor', '~> 3.0' gem 'devise-two-factor', '~> 3.0'
group :pam_authentication, optional: true do group :pam_authentication, optional: true do
@ -57,12 +57,12 @@ gem 'httplog', '~> 1.0'
gem 'idn-ruby', require: 'idn' gem 'idn-ruby', require: 'idn'
gem 'kaminari', '~> 1.1' gem 'kaminari', '~> 1.1'
gem 'link_header', '~> 0.0' gem 'link_header', '~> 0.0'
gem 'mime-types', '~> 3.1', require: 'mime/types/columnar' gem 'mime-types', '~> 3.2', require: 'mime/types/columnar'
gem 'nokogiri', '~> 1.8' gem 'nokogiri', '~> 1.8'
gem 'nsa', '~> 0.2' gem 'nsa', '~> 0.2'
gem 'oj', '~> 3.5' gem 'oj', '~> 3.6'
gem 'ostatus2', '~> 2.0' gem 'ostatus2', '~> 2.0'
gem 'ox', '~> 2.9' gem 'ox', '~> 2.10'
gem 'posix-spawn', git: 'https://github.com/rtomayko/posix-spawn', ref: '58465d2e213991f8afb13b984854a49fcdcc980c' gem 'posix-spawn', git: 'https://github.com/rtomayko/posix-spawn', ref: '58465d2e213991f8afb13b984854a49fcdcc980c'
gem 'pundit', '~> 1.1' gem 'pundit', '~> 1.1'
gem 'premailer-rails' gem 'premailer-rails'
@ -75,8 +75,8 @@ gem 'mario-redis-lock', '~> 1.2', require: 'redis_lock'
gem 'rqrcode', '~> 0.10' gem 'rqrcode', '~> 0.10'
gem 'ruby-progressbar', '~> 1.4' gem 'ruby-progressbar', '~> 1.4'
gem 'sanitize', '~> 4.6' gem 'sanitize', '~> 4.6'
gem 'sidekiq', '~> 5.1' gem 'sidekiq', '~> 5.2'
gem 'sidekiq-scheduler', '~> 2.2' gem 'sidekiq-scheduler', '~> 3.0'
gem 'sidekiq-unique-jobs', '~> 5.0' gem 'sidekiq-unique-jobs', '~> 5.0'
gem 'sidekiq-bulk', '~>0.1.1' gem 'sidekiq-bulk', '~>0.1.1'
gem 'simple-navigation', '~> 4.0' gem 'simple-navigation', '~> 4.0'
@ -85,7 +85,7 @@ gem 'sprockets-rails', '~> 3.2', require: 'sprockets/railtie'
gem 'stoplight', '~> 2.1.3' gem 'stoplight', '~> 2.1.3'
gem 'strong_migrations', '~> 0.2' gem 'strong_migrations', '~> 0.2'
gem 'tty-command', '~> 0.8', require: false gem 'tty-command', '~> 0.8', require: false
gem 'tty-prompt', '~> 0.16', require: false gem 'tty-prompt', '~> 0.17', require: false
gem 'twitter-text', '~> 1.14' gem 'twitter-text', '~> 1.14'
gem 'tzinfo-data', '~> 1.2018' gem 'tzinfo-data', '~> 1.2018'
gem 'webpacker', '~> 3.5' gem 'webpacker', '~> 3.5'
@ -104,7 +104,7 @@ group :development, :test do
end end
group :production, :test do group :production, :test do
gem 'private_address_check', '~> 0.4.1' gem 'private_address_check', '~> 0.5'
end end
group :test do group :test do
@ -133,7 +133,7 @@ group :development do
gem 'bundler-audit', '~> 0.6', require: false gem 'bundler-audit', '~> 0.6', require: false
gem 'scss_lint', '~> 0.57', require: false gem 'scss_lint', '~> 0.57', require: false
gem 'capistrano', '~> 3.10' gem 'capistrano', '~> 3.11'
gem 'capistrano-rails', '~> 1.3' gem 'capistrano-rails', '~> 1.3'
gem 'capistrano-rbenv', '~> 2.1' gem 'capistrano-rbenv', '~> 2.1'
gem 'capistrano-yarn', '~> 2.0' gem 'capistrano-yarn', '~> 2.0'

@ -66,7 +66,7 @@ GEM
public_suffix (>= 2.0.2, < 4.0) public_suffix (>= 2.0.2, < 4.0)
airbrussh (1.3.0) airbrussh (1.3.0)
sshkit (>= 1.6.1, != 1.7.0) sshkit (>= 1.6.1, != 1.7.0)
annotate (2.7.3) annotate (2.7.4)
activerecord (>= 3.2, < 6.0) activerecord (>= 3.2, < 6.0)
rake (>= 10.4, < 13.0) rake (>= 10.4, < 13.0)
arel (9.0.0) arel (9.0.0)
@ -96,7 +96,7 @@ GEM
rack (>= 0.9.0) rack (>= 0.9.0)
binding_of_caller (0.8.0) binding_of_caller (0.8.0)
debug_inspector (>= 0.0.1) debug_inspector (>= 0.0.1)
bootsnap (1.3.0) bootsnap (1.3.2)
msgpack (~> 1.0) msgpack (~> 1.0)
brakeman (4.2.1) brakeman (4.2.1)
browser (2.5.3) browser (2.5.3)
@ -108,7 +108,7 @@ GEM
bundler (~> 1.2) bundler (~> 1.2)
thor (~> 0.18) thor (~> 0.18)
byebug (10.0.2) byebug (10.0.2)
capistrano (3.10.2) capistrano (3.11.0)
airbrussh (>= 1.0.0) airbrussh (>= 1.0.0)
i18n i18n
rake (>= 10.0.0) rake (>= 10.0.0)
@ -147,7 +147,7 @@ GEM
coderay (1.1.2) coderay (1.1.2)
colorize (0.8.1) colorize (0.8.1)
concurrent-ruby (1.0.5) concurrent-ruby (1.0.5)
connection_pool (2.2.1) connection_pool (2.2.2)
crack (0.4.3) crack (0.4.3)
safe_yaml (~> 1.0.0) safe_yaml (~> 1.0.0)
crass (1.0.4) crass (1.0.4)
@ -162,7 +162,7 @@ GEM
rack (>= 1) rack (>= 1)
rake (> 10, < 13) rake (> 10, < 13)
thor (~> 0.19) thor (~> 0.19)
devise (4.4.3) devise (4.5.0)
bcrypt (~> 3.0) bcrypt (~> 3.0)
orm_adapter (~> 0.1) orm_adapter (~> 0.1)
railties (>= 4.1.0, < 6.0) railties (>= 4.1.0, < 6.0)
@ -202,7 +202,7 @@ GEM
encryptor (3.0.0) encryptor (3.0.0)
equatable (0.5.0) equatable (0.5.0)
erubi (1.7.1) erubi (1.7.1)
et-orbi (1.1.0) et-orbi (1.1.6)
tzinfo tzinfo
excon (0.62.0) excon (0.62.0)
fabrication (2.20.1) fabrication (2.20.1)
@ -212,7 +212,7 @@ GEM
multipart-post (>= 1.2, < 3) multipart-post (>= 1.2, < 3)
fast_blank (1.0.0) fast_blank (1.0.0)
fastimage (2.1.1) fastimage (2.1.1)
ffi (1.9.23) ffi (1.9.25)
fog-core (1.45.0) fog-core (1.45.0)
builder builder
excon (~> 0.58) excon (~> 0.58)
@ -225,6 +225,9 @@ GEM
fog-json (>= 1.0) fog-json (>= 1.0)
ipaddress (>= 0.8) ipaddress (>= 0.8)
formatador (0.2.5) formatador (0.2.5)
fugit (1.1.6)
et-orbi (~> 1.1, >= 1.1.6)
raabro (~> 1.1)
fuubar (2.3.1) fuubar (2.3.1)
rspec-core (~> 3.0) rspec-core (~> 3.0)
ruby-progressbar (~> 1.4) ruby-progressbar (~> 1.4)
@ -252,7 +255,7 @@ GEM
heapy (0.1.3) heapy (0.1.3)
highline (1.7.10) highline (1.7.10)
hiredis (0.6.1) hiredis (0.6.1)
hitimes (1.2.6) hitimes (1.3.0)
hkdf (0.3.0) hkdf (0.3.0)
html2text (0.2.1) html2text (0.2.1)
nokogiri (~> 1.6) nokogiri (~> 1.6)
@ -328,14 +331,14 @@ GEM
mimemagic (~> 0.3.2) mimemagic (~> 0.3.2)
mario-redis-lock (1.2.1) mario-redis-lock (1.2.1)
redis (>= 3.0.5) redis (>= 3.0.5)
memory_profiler (0.9.10) memory_profiler (0.9.11)
method_source (0.9.0) method_source (0.9.0)
microformats (4.0.7) microformats (4.0.7)
json json
nokogiri nokogiri
mime-types (3.1) mime-types (3.2.2)
mime-types-data (~> 3.2015) mime-types-data (~> 3.2015)
mime-types-data (3.2016.0521) mime-types-data (3.2018.0812)
mimemagic (0.3.2) mimemagic (0.3.2)
mini_mime (1.0.0) mini_mime (1.0.0)
mini_portile2 (2.3.0) mini_portile2 (2.3.0)
@ -347,7 +350,7 @@ GEM
net-ldap (0.16.1) net-ldap (0.16.1)
net-scp (1.2.1) net-scp (1.2.1)
net-ssh (>= 2.6.5) net-ssh (>= 2.6.5)
net-ssh (4.2.0) net-ssh (5.0.2)
nio4r (2.3.1) nio4r (2.3.1)
nokogiri (1.8.4) nokogiri (1.8.4)
mini_portile2 (~> 2.3.0) mini_portile2 (~> 2.3.0)
@ -358,7 +361,7 @@ GEM
concurrent-ruby (~> 1.0.0) concurrent-ruby (~> 1.0.0)
sidekiq (>= 3.5.0) sidekiq (>= 3.5.0)
statsd-ruby (~> 1.2.0) statsd-ruby (~> 1.2.0)
oj (3.5.1) oj (3.6.11)
omniauth (1.8.1) omniauth (1.8.1)
hashie (>= 3.4.6, < 3.6.0) hashie (>= 3.4.6, < 3.6.0)
rack (>= 1.6.2, < 3) rack (>= 1.6.2, < 3)
@ -374,7 +377,7 @@ GEM
addressable (~> 2.5) addressable (~> 2.5)
http (~> 3.0) http (~> 3.0)
nokogiri (~> 1.8) nokogiri (~> 1.8)
ox (2.9.2) ox (2.10.0)
paperclip (6.0.0) paperclip (6.0.0)
activemodel (>= 4.2.0) activemodel (>= 4.2.0)
activesupport (>= 4.2.0) activesupport (>= 4.2.0)
@ -393,9 +396,9 @@ GEM
equatable (~> 0.5.0) equatable (~> 0.5.0)
tty-color (~> 0.4.0) tty-color (~> 0.4.0)
pg (1.0.0) pg (1.0.0)
pghero (2.1.0) pghero (2.2.0)
activerecord activerecord
pkg-config (1.3.0) pkg-config (1.3.1)
powerpack (0.1.1) powerpack (0.1.1)
premailer (1.11.1) premailer (1.11.1)
addressable addressable
@ -404,7 +407,7 @@ GEM
premailer-rails (1.10.2) premailer-rails (1.10.2)
actionmailer (>= 3, < 6) actionmailer (>= 3, < 6)
premailer (~> 1.7, >= 1.7.9) premailer (~> 1.7, >= 1.7.9)
private_address_check (0.4.1) private_address_check (0.5.0)
pry (0.11.3) pry (0.11.3)
coderay (~> 1.1.0) coderay (~> 1.1.0)
method_source (~> 0.9.0) method_source (~> 0.9.0)
@ -417,11 +420,12 @@ GEM
puma (3.11.4) puma (3.11.4)
pundit (1.1.0) pundit (1.1.0)
activesupport (>= 3.0.0) activesupport (>= 3.0.0)
raabro (1.1.6)
rack (2.0.5) rack (2.0.5)
rack-attack (5.2.0) rack-attack (5.2.0)
rack rack
rack-cors (1.0.2) rack-cors (1.0.2)
rack-protection (2.0.1) rack-protection (2.0.4)
rack rack
rack-proxy (0.6.4) rack-proxy (0.6.4)
rack rack
@ -528,10 +532,10 @@ GEM
ruby-progressbar (1.9.0) ruby-progressbar (1.9.0)
ruby-saml (1.7.2) ruby-saml (1.7.2)
nokogiri (>= 1.5.10) nokogiri (>= 1.5.10)
rufus-scheduler (3.4.2) rufus-scheduler (3.5.2)
et-orbi (~> 1.0) fugit (~> 1.1, >= 1.1.5)
safe_yaml (1.0.4) safe_yaml (1.0.4)
sanitize (4.6.4) sanitize (4.6.6)
crass (~> 1.0.2) crass (~> 1.0.2)
nokogiri (>= 1.4.4) nokogiri (>= 1.4.4)
nokogumbo (~> 1.4) nokogumbo (~> 1.4)
@ -543,15 +547,14 @@ GEM
scss_lint (0.57.0) scss_lint (0.57.0)
rake (>= 0.9, < 13) rake (>= 0.9, < 13)
sass (~> 3.5.5) sass (~> 3.5.5)
sidekiq (5.1.3) sidekiq (5.2.2)
concurrent-ruby (~> 1.0) connection_pool (~> 2.2, >= 2.2.2)
connection_pool (~> 2.2, >= 2.2.0)
rack-protection (>= 1.5.0) rack-protection (>= 1.5.0)
redis (>= 3.3.5, < 5) redis (>= 3.3.5, < 5)
sidekiq-bulk (0.1.1) sidekiq-bulk (0.1.1)
activesupport activesupport
sidekiq sidekiq
sidekiq-scheduler (2.2.1) sidekiq-scheduler (3.0.0)
redis (>= 3, < 5) redis (>= 3, < 5)
rufus-scheduler (~> 3.2) rufus-scheduler (~> 3.2)
sidekiq (>= 3) sidekiq (>= 3)
@ -561,9 +564,9 @@ GEM
thor (~> 0) thor (~> 0)
simple-navigation (4.0.5) simple-navigation (4.0.5)
activesupport (>= 2.3.2) activesupport (>= 2.3.2)
simple_form (4.0.0) simple_form (4.0.1)
actionpack (> 4) actionpack (>= 5.0)
activemodel (> 4) activemodel (>= 5.0)
simplecov (0.16.1) simplecov (0.16.1)
docile (~> 1.1) docile (~> 1.1)
json (>= 1.8, < 3) json (>= 1.8, < 3)
@ -576,15 +579,15 @@ GEM
actionpack (>= 4.0) actionpack (>= 4.0)
activesupport (>= 4.0) activesupport (>= 4.0)
sprockets (>= 3.0.0) sprockets (>= 3.0.0)
sshkit (1.16.0) sshkit (1.17.0)
net-scp (>= 1.1.2) net-scp (>= 1.1.2)
net-ssh (>= 2.8.0) net-ssh (>= 2.8.0)
stackprof (0.2.11) stackprof (0.2.12)
statsd-ruby (1.2.1) statsd-ruby (1.2.1)
stoplight (2.1.3) stoplight (2.1.3)
streamio-ffmpeg (3.0.2) streamio-ffmpeg (3.0.2)
multi_json (~> 1.8) multi_json (~> 1.8)
strong_migrations (0.2.2) strong_migrations (0.2.3)
activerecord (>= 3.2.0) activerecord (>= 3.2.0)
temple (0.8.0) temple (0.8.0)
terminal-table (1.8.0) terminal-table (1.8.0)
@ -597,26 +600,26 @@ GEM
tilt (2.0.8) tilt (2.0.8)
timers (4.1.2) timers (4.1.2)
hitimes hitimes
tty-color (0.4.2) tty-color (0.4.3)
tty-command (0.8.0) tty-command (0.8.2)
pastel (~> 0.7.0) pastel (~> 0.7.0)
tty-cursor (0.5.0) tty-cursor (0.6.0)
tty-prompt (0.16.0) tty-prompt (0.17.0)
necromancer (~> 0.4.0) necromancer (~> 0.4.0)
pastel (~> 0.7.0) pastel (~> 0.7.0)
timers (~> 4.0) timers (~> 4.0)
tty-cursor (~> 0.5.0) tty-cursor (~> 0.6.0)
tty-reader (~> 0.2.0) tty-reader (~> 0.4.0)
tty-reader (0.2.0) tty-reader (0.4.0)
tty-cursor (~> 0.5.0) tty-cursor (~> 0.6.0)
tty-screen (~> 0.6.4) tty-screen (~> 0.6.4)
wisper (~> 2.0.0) wisper (~> 2.0.0)
tty-screen (0.6.4) tty-screen (0.6.5)
twitter-text (1.14.7) twitter-text (1.14.7)
unf (~> 0.1.0) unf (~> 0.1.0)
tzinfo (1.2.5) tzinfo (1.2.5)
thread_safe (~> 0.1) thread_safe (~> 0.1)
tzinfo-data (1.2018.4) tzinfo-data (1.2018.5)
tzinfo (>= 1.0.0) tzinfo (>= 1.0.0)
unf (0.1.4) unf (0.1.4)
unf_ext unf_ext
@ -659,7 +662,7 @@ DEPENDENCIES
browser browser
bullet (~> 5.7) bullet (~> 5.7)
bundler-audit (~> 0.6) bundler-audit (~> 0.6)
capistrano (~> 3.10) capistrano (~> 3.11)
capistrano-rails (~> 1.3) capistrano-rails (~> 1.3)
capistrano-rbenv (~> 2.1) capistrano-rbenv (~> 2.1)
capistrano-yarn (~> 2.0) capistrano-yarn (~> 2.0)
@ -669,7 +672,7 @@ DEPENDENCIES
cld3 (~> 3.2.0) cld3 (~> 3.2.0)
climate_control (~> 0.2) climate_control (~> 0.2)
derailed_benchmarks derailed_benchmarks
devise (~> 4.4) devise (~> 4.5)
devise-two-factor (~> 3.0) devise-two-factor (~> 3.0)
devise_pam_authenticatable2 (~> 9.2) devise_pam_authenticatable2 (~> 9.2)
doorkeeper (~> 5.0) doorkeeper (~> 5.0)
@ -703,25 +706,25 @@ DEPENDENCIES
mario-redis-lock (~> 1.2) mario-redis-lock (~> 1.2)
memory_profiler memory_profiler
microformats (~> 4.0) microformats (~> 4.0)
mime-types (~> 3.1) mime-types (~> 3.2)
net-ldap (~> 0.10) net-ldap (~> 0.10)
nokogiri (~> 1.8) nokogiri (~> 1.8)
nsa (~> 0.2) nsa (~> 0.2)
oj (~> 3.5) oj (~> 3.6)
omniauth (~> 1.2) omniauth (~> 1.2)
omniauth-cas (~> 1.1) omniauth-cas (~> 1.1)
omniauth-saml (~> 1.10) omniauth-saml (~> 1.10)
ostatus2 (~> 2.0) ostatus2 (~> 2.0)
ox (~> 2.9) ox (~> 2.10)
paperclip (~> 6.0) paperclip (~> 6.0)
paperclip-av-transcoder (~> 0.6) paperclip-av-transcoder (~> 0.6)
parallel_tests (~> 2.21) parallel_tests (~> 2.21)
pg (~> 1.0) pg (~> 1.0)
pghero (~> 2.1) pghero (~> 2.2)
pkg-config (~> 1.3) pkg-config (~> 1.3)
posix-spawn! posix-spawn!
premailer-rails premailer-rails
private_address_check (~> 0.4.1) private_address_check (~> 0.5)
pry-byebug (~> 3.6) pry-byebug (~> 3.6)
pry-rails (~> 0.3) pry-rails (~> 0.3)
puma (~> 3.11) puma (~> 3.11)
@ -743,9 +746,9 @@ DEPENDENCIES
ruby-progressbar (~> 1.4) ruby-progressbar (~> 1.4)
sanitize (~> 4.6) sanitize (~> 4.6)
scss_lint (~> 0.57) scss_lint (~> 0.57)
sidekiq (~> 5.1) sidekiq (~> 5.2)
sidekiq-bulk (~> 0.1.1) sidekiq-bulk (~> 0.1.1)
sidekiq-scheduler (~> 2.2) sidekiq-scheduler (~> 3.0)
sidekiq-unique-jobs (~> 5.0) sidekiq-unique-jobs (~> 5.0)
simple-navigation (~> 4.0) simple-navigation (~> 4.0)
simple_form (~> 4.0) simple_form (~> 4.0)
@ -757,7 +760,7 @@ DEPENDENCIES
strong_migrations (~> 0.2) strong_migrations (~> 0.2)
thor (~> 0.20) thor (~> 0.20)
tty-command (~> 0.8) tty-command (~> 0.8)
tty-prompt (~> 0.16) tty-prompt (~> 0.17)
twitter-text (~> 1.14) twitter-text (~> 1.14)
tzinfo-data (~> 1.2018) tzinfo-data (~> 1.2018)
webmock (~> 3.3) webmock (~> 3.3)

@ -53,6 +53,10 @@ class Api::BaseController < ApplicationController
[params[:limit].to_i.abs, default_limit * 2].min [params[:limit].to_i.abs, default_limit * 2].min
end end
def params_slice(*keys)
params.slice(*keys).permit(*keys)
end
def current_resource_owner def current_resource_owner
@current_user ||= User.find(doorkeeper_token.resource_owner_id) if doorkeeper_token @current_user ||= User.find(doorkeeper_token.resource_owner_id) if doorkeeper_token
end end

@ -28,10 +28,9 @@ class Api::V1::Accounts::StatusesController < Api::BaseController
def account_statuses def account_statuses
statuses = truthy_param?(:pinned) ? pinned_scope : permitted_account_statuses statuses = truthy_param?(:pinned) ? pinned_scope : permitted_account_statuses
statuses = statuses.paginate_by_max_id( statuses = statuses.paginate_by_id(
limit_param(DEFAULT_STATUSES_LIMIT), limit_param(DEFAULT_STATUSES_LIMIT),
params[:max_id], params_slice(:max_id, :since_id, :min_id)
params[:since_id]
) )
statuses.merge!(only_media_scope) if truthy_param?(:only_media) statuses.merge!(only_media_scope) if truthy_param?(:only_media)
@ -82,7 +81,7 @@ class Api::V1::Accounts::StatusesController < Api::BaseController
def prev_path def prev_path
unless @statuses.empty? unless @statuses.empty?
api_v1_account_statuses_url pagination_params(since_id: pagination_since_id) api_v1_account_statuses_url pagination_params(min_id: pagination_since_id)
end end
end end

@ -26,10 +26,9 @@ class Api::V1::FavouritesController < Api::BaseController
end end
def results def results
@_results ||= account_favourites.paginate_by_max_id( @_results ||= account_favourites.paginate_by_id(
limit_param(DEFAULT_STATUSES_LIMIT), limit_param(DEFAULT_STATUSES_LIMIT),
params[:max_id], params_slice(:max_id, :since_id, :min_id)
params[:since_id]
) )
end end
@ -49,7 +48,7 @@ class Api::V1::FavouritesController < Api::BaseController
def prev_path def prev_path
unless results.empty? unless results.empty?
api_v1_favourites_url pagination_params(since_id: pagination_since_id) api_v1_favourites_url pagination_params(min_id: pagination_since_id)
end end
end end

@ -4,6 +4,8 @@ class Api::V1::InstancesController < Api::BaseController
respond_to :json respond_to :json
def show def show
render json: {}, serializer: REST::InstanceSerializer render_cached_json('api:v1:instances', expires_in: 5.minutes) do
ActiveModelSerializers::SerializableResource.new({}, serializer: REST::InstanceSerializer)
end
end end
end end

@ -46,10 +46,9 @@ class Api::V1::NotificationsController < Api::BaseController
end end
def paginated_notifications def paginated_notifications
browserable_account_notifications.paginate_by_max_id( browserable_account_notifications.paginate_by_id(
limit_param(DEFAULT_NOTIFICATIONS_LIMIT), limit_param(DEFAULT_NOTIFICATIONS_LIMIT),
params[:max_id], params_slice(:max_id, :since_id, :min_id)
params[:since_id]
) )
end end
@ -73,7 +72,7 @@ class Api::V1::NotificationsController < Api::BaseController
def prev_path def prev_path
unless @notifications.empty? unless @notifications.empty?
api_v1_notifications_url pagination_params(since_id: pagination_since_id) api_v1_notifications_url pagination_params(min_id: pagination_since_id)
end end
end end

@ -7,11 +7,6 @@ class Api::V1::ReportsController < Api::BaseController
respond_to :json respond_to :json
def index
@reports = current_account.reports
render json: @reports, each_serializer: REST::ReportSerializer
end
def create def create
@report = ReportService.new.call( @report = ReportService.new.call(
current_account, current_account,

@ -30,7 +30,8 @@ class Api::V1::Timelines::HomeController < Api::BaseController
account_home_feed.get( account_home_feed.get(
limit_param(DEFAULT_STATUSES_LIMIT), limit_param(DEFAULT_STATUSES_LIMIT),
params[:max_id], params[:max_id],
params[:since_id] params[:since_id],
params[:min_id]
) )
end end
@ -51,7 +52,7 @@ class Api::V1::Timelines::HomeController < Api::BaseController
end end
def prev_path def prev_path
api_v1_timelines_home_url pagination_params(since_id: pagination_since_id) api_v1_timelines_home_url pagination_params(min_id: pagination_since_id)
end end
def pagination_max_id def pagination_max_id

@ -32,7 +32,8 @@ class Api::V1::Timelines::ListController < Api::BaseController
list_feed.get( list_feed.get(
limit_param(DEFAULT_STATUSES_LIMIT), limit_param(DEFAULT_STATUSES_LIMIT),
params[:max_id], params[:max_id],
params[:since_id] params[:since_id],
params[:min_id]
) )
end end
@ -53,7 +54,7 @@ class Api::V1::Timelines::ListController < Api::BaseController
end end
def prev_path def prev_path
api_v1_timelines_list_url params[:id], pagination_params(since_id: pagination_since_id) api_v1_timelines_list_url params[:id], pagination_params(min_id: pagination_since_id)
end end
def pagination_max_id def pagination_max_id

@ -21,10 +21,9 @@ class Api::V1::Timelines::PublicController < Api::BaseController
end end
def public_statuses def public_statuses
statuses = public_timeline_statuses.paginate_by_max_id( statuses = public_timeline_statuses.paginate_by_id(
limit_param(DEFAULT_STATUSES_LIMIT), limit_param(DEFAULT_STATUSES_LIMIT),
params[:max_id], params_slice(:max_id, :since_id, :min_id)
params[:since_id]
) )
if truthy_param?(:only_media) if truthy_param?(:only_media)
@ -53,7 +52,7 @@ class Api::V1::Timelines::PublicController < Api::BaseController
end end
def prev_path def prev_path
api_v1_timelines_public_url pagination_params(since_id: pagination_since_id) api_v1_timelines_public_url pagination_params(min_id: pagination_since_id)
end end
def pagination_max_id def pagination_max_id

@ -29,10 +29,9 @@ class Api::V1::Timelines::TagController < Api::BaseController
if @tag.nil? if @tag.nil?
[] []
else else
statuses = tag_timeline_statuses.paginate_by_max_id( statuses = tag_timeline_statuses.paginate_by_id(
limit_param(DEFAULT_STATUSES_LIMIT), limit_param(DEFAULT_STATUSES_LIMIT),
params[:max_id], params_slice(:max_id, :since_id, :min_id)
params[:since_id]
) )
if truthy_param?(:only_media) if truthy_param?(:only_media)
@ -62,7 +61,7 @@ class Api::V1::Timelines::TagController < Api::BaseController
end end
def prev_path def prev_path
api_v1_timelines_tag_url params[:id], pagination_params(since_id: pagination_since_id) api_v1_timelines_tag_url params[:id], pagination_params(min_id: pagination_since_id)
end end
def pagination_max_id def pagination_max_id

@ -37,7 +37,8 @@ class Settings::PreferencesController < Settings::BaseController
:setting_favourite_modal, :setting_favourite_modal,
:setting_delete_modal, :setting_delete_modal,
:setting_auto_play_gif, :setting_auto_play_gif,
:setting_display_sensitive_media, :setting_display_media,
:setting_expand_spoilers,
:setting_reduce_motion, :setting_reduce_motion,
:setting_system_font_ui, :setting_system_font_ui,
:setting_noindex, :setting_noindex,

@ -7,8 +7,8 @@ module ApplicationHelper
follow follow
).freeze ).freeze
def active_nav_class(path) def active_nav_class(*paths)
current_page?(path) ? 'active' : '' paths.any? { |path| current_page?(path) } ? 'active' : ''
end end
def active_link_to(label, path, **options) def active_link_to(label, path, **options)

@ -6,7 +6,7 @@ import IconButton from './icon_button';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import { isIOS } from 'flavours/glitch/util/is_mobile'; import { isIOS } from 'flavours/glitch/util/is_mobile';
import classNames from 'classnames'; import classNames from 'classnames';
import { autoPlayGif, displaySensitiveMedia } from 'flavours/glitch/util/initial_state'; import { autoPlayGif, displayMedia } from 'flavours/glitch/util/initial_state';
const messages = defineMessages({ const messages = defineMessages({
hidden: { hidden: {
@ -226,7 +226,7 @@ export default class MediaGallery extends React.PureComponent {
}; };
state = { state = {
visible: this.props.revealed === undefined ? (!this.props.sensitive || displaySensitiveMedia) : this.props.revealed, visible: this.props.revealed === undefined ? (displayMedia !== 'hide_all' && !this.props.sensitive || displayMedia === 'show_all') : this.props.revealed,
}; };
componentWillReceiveProps (nextProps) { componentWillReceiveProps (nextProps) {

@ -5,7 +5,7 @@ import { fromJS } from 'immutable';
import { throttle } from 'lodash'; import { throttle } from 'lodash';
import classNames from 'classnames'; import classNames from 'classnames';
import { isFullscreen, requestFullscreen, exitFullscreen } from 'flavours/glitch/util/fullscreen'; import { isFullscreen, requestFullscreen, exitFullscreen } from 'flavours/glitch/util/fullscreen';
import { displaySensitiveMedia } from 'flavours/glitch/util/initial_state'; import { displayMedia } from 'flavours/glitch/util/initial_state';
const messages = defineMessages({ const messages = defineMessages({
play: { id: 'video.play', defaultMessage: 'Play' }, play: { id: 'video.play', defaultMessage: 'Play' },
@ -114,7 +114,7 @@ export default class Video extends React.PureComponent {
fullscreen: false, fullscreen: false,
hovered: false, hovered: false,
muted: false, muted: false,
revealed: this.props.revealed === undefined ? (!this.props.sensitive || displaySensitiveMedia) : this.props.revealed, revealed: this.props.revealed === undefined ? (displayMedia !== 'hide_all' && !this.props.sensitive || displayMedia === 'show_all') : this.props.revealed,
}; };
setPlayerRef = c => { setPlayerRef = c => {

@ -16,7 +16,7 @@ $small-breakpoint: 960px;
} }
.rich-formatting { .rich-formatting {
font-family: 'mastodon-font-sans-serif', sans-serif; font-family: $font-sans-serif, sans-serif;
font-size: 16px; font-size: 16px;
font-weight: 400; font-weight: 400;
font-size: 16px; font-size: 16px;
@ -31,7 +31,7 @@ $small-breakpoint: 960px;
p, p,
li { li {
font-family: 'mastodon-font-sans-serif', sans-serif; font-family: $font-sans-serif, sans-serif;
font-size: 16px; font-size: 16px;
font-weight: 400; font-weight: 400;
font-size: 16px; font-size: 16px;
@ -62,7 +62,7 @@ $small-breakpoint: 960px;
} }
h1 { h1 {
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
font-size: 26px; font-size: 26px;
line-height: 30px; line-height: 30px;
font-weight: 500; font-weight: 500;
@ -70,7 +70,7 @@ $small-breakpoint: 960px;
color: $secondary-text-color; color: $secondary-text-color;
small { small {
font-family: 'mastodon-font-sans-serif', sans-serif; font-family: $font-sans-serif, sans-serif;
display: block; display: block;
font-size: 18px; font-size: 18px;
font-weight: 400; font-weight: 400;
@ -79,7 +79,7 @@ $small-breakpoint: 960px;
} }
h2 { h2 {
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
font-size: 22px; font-size: 22px;
line-height: 26px; line-height: 26px;
font-weight: 500; font-weight: 500;
@ -88,7 +88,7 @@ $small-breakpoint: 960px;
} }
h3 { h3 {
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
font-size: 18px; font-size: 18px;
line-height: 24px; line-height: 24px;
font-weight: 500; font-weight: 500;
@ -97,7 +97,7 @@ $small-breakpoint: 960px;
} }
h4 { h4 {
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
font-size: 16px; font-size: 16px;
line-height: 24px; line-height: 24px;
font-weight: 500; font-weight: 500;
@ -106,7 +106,7 @@ $small-breakpoint: 960px;
} }
h5 { h5 {
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
font-size: 14px; font-size: 14px;
line-height: 24px; line-height: 24px;
font-weight: 500; font-weight: 500;
@ -115,7 +115,7 @@ $small-breakpoint: 960px;
} }
h6 { h6 {
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
font-size: 12px; font-size: 12px;
line-height: 24px; line-height: 24px;
font-weight: 500; font-weight: 500;
@ -180,7 +180,7 @@ $small-breakpoint: 960px;
&__section { &__section {
flex: 1 0 0; flex: 1 0 0;
font-family: 'mastodon-font-sans-serif', sans-serif; font-family: $font-sans-serif, sans-serif;
font-size: 16px; font-size: 16px;
line-height: 28px; line-height: 28px;
color: $primary-text-color; color: $primary-text-color;
@ -221,7 +221,7 @@ $small-breakpoint: 960px;
bottom: -40px; bottom: -40px;
.panel-header { .panel-header {
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
font-size: 14px; font-size: 14px;
line-height: 24px; line-height: 24px;
font-weight: 500; font-weight: 500;
@ -452,7 +452,7 @@ $small-breakpoint: 960px;
p, p,
li { li {
font-family: 'mastodon-font-sans-serif', sans-serif; font-family: $font-sans-serif, sans-serif;
font-size: 16px; font-size: 16px;
font-weight: 400; font-weight: 400;
font-size: 16px; font-size: 16px;
@ -501,7 +501,7 @@ $small-breakpoint: 960px;
} }
h1 { h1 {
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
font-size: 26px; font-size: 26px;
line-height: 30px; line-height: 30px;
font-weight: 500; font-weight: 500;
@ -509,7 +509,7 @@ $small-breakpoint: 960px;
color: $secondary-text-color; color: $secondary-text-color;
small { small {
font-family: 'mastodon-font-sans-serif', sans-serif; font-family: $font-sans-serif, sans-serif;
display: block; display: block;
font-size: 18px; font-size: 18px;
font-weight: 400; font-weight: 400;
@ -518,7 +518,7 @@ $small-breakpoint: 960px;
} }
h2 { h2 {
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
font-size: 22px; font-size: 22px;
line-height: 26px; line-height: 26px;
font-weight: 500; font-weight: 500;
@ -527,7 +527,7 @@ $small-breakpoint: 960px;
} }
h3 { h3 {
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
font-size: 18px; font-size: 18px;
line-height: 24px; line-height: 24px;
font-weight: 500; font-weight: 500;
@ -536,7 +536,7 @@ $small-breakpoint: 960px;
} }
h4 { h4 {
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
font-size: 16px; font-size: 16px;
line-height: 24px; line-height: 24px;
font-weight: 500; font-weight: 500;
@ -545,7 +545,7 @@ $small-breakpoint: 960px;
} }
h5 { h5 {
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
font-size: 14px; font-size: 14px;
line-height: 24px; line-height: 24px;
font-weight: 500; font-weight: 500;
@ -554,7 +554,7 @@ $small-breakpoint: 960px;
} }
h6 { h6 {
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
font-size: 12px; font-size: 12px;
line-height: 24px; line-height: 24px;
font-weight: 500; font-weight: 500;
@ -621,7 +621,7 @@ $small-breakpoint: 960px;
.hero .heading { .hero .heading {
padding-bottom: 20px; padding-bottom: 20px;
font-family: 'mastodon-font-sans-serif', sans-serif; font-family: $font-sans-serif, sans-serif;
font-size: 16px; font-size: 16px;
font-weight: 400; font-weight: 400;
font-size: 16px; font-size: 16px;
@ -672,7 +672,7 @@ $small-breakpoint: 960px;
text-decoration: none; text-decoration: none;
padding: 12px 16px; padding: 12px 16px;
line-height: 32px; line-height: 32px;
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
font-weight: 500; font-weight: 500;
font-size: 14px; font-size: 14px;
@ -745,7 +745,7 @@ $small-breakpoint: 960px;
.about-short { .about-short {
background: darken($ui-base-color, 4%); background: darken($ui-base-color, 4%);
padding: 50px 0 30px; padding: 50px 0 30px;
font-family: 'mastodon-font-sans-serif', sans-serif; font-family: $font-sans-serif, sans-serif;
font-size: 16px; font-size: 16px;
font-weight: 400; font-weight: 400;
font-size: 16px; font-size: 16px;
@ -1015,7 +1015,7 @@ $small-breakpoint: 960px;
display: flex; display: flex;
-webkit-overflow-scrolling: touch; -webkit-overflow-scrolling: touch;
-ms-overflow-style: -ms-autohiding-scrollbar; -ms-overflow-style: -ms-autohiding-scrollbar;
font-family: 'mastodon-font-sans-serif', sans-serif; font-family: $font-sans-serif, sans-serif;
font-size: 13px; font-size: 13px;
line-height: 18px; line-height: 18px;
font-weight: 400; font-weight: 400;

@ -443,7 +443,7 @@ $no-columns-breakpoint: 600px;
border-radius: 0 0 4px 4px; border-radius: 0 0 4px 4px;
padding: 10px; padding: 10px;
color: $darker-text-color; color: $darker-text-color;
font-family: 'mastodon-font-monospace', monospace; font-family: $font-monospace, monospace;
font-size: 12px; font-size: 12px;
word-wrap: break-word; word-wrap: break-word;
min-height: 20px; min-height: 20px;

@ -6,7 +6,7 @@
} }
body { body {
font-family: 'mastodon-font-sans-serif', sans-serif; font-family: $font-sans-serif, sans-serif;
background: darken($ui-base-color, 8%); background: darken($ui-base-color, 8%);
font-size: 13px; font-size: 13px;
line-height: 18px; line-height: 18px;
@ -29,8 +29,8 @@ body {
// Fira Sans => Firefox OS // Fira Sans => Firefox OS
// Droid Sans => Older Androids (<4.0) // Droid Sans => Older Androids (<4.0)
// Helvetica Neue => Older macOS <10.11 // Helvetica Neue => Older macOS <10.11
// mastodon-font-sans-serif => web-font (Roboto) fallback and newer Androids (>=4.0) // $font-sans-serif => web-font (Roboto) fallback and newer Androids (>=4.0)
font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", mastodon-font-sans-serif, sans-serif; font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", $font-sans-serif, sans-serif;
} }
&.app-body { &.app-body {

@ -37,7 +37,7 @@
outline: 0; outline: 0;
padding: 12px 16px; padding: 12px 16px;
line-height: 32px; line-height: 32px;
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
font-weight: 500; font-weight: 500;
font-size: 14px; font-size: 14px;
} }
@ -633,7 +633,7 @@
font-size: 18px; font-size: 18px;
margin-bottom: 5px; margin-bottom: 5px;
color: $primary-text-color; color: $primary-text-color;
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
} }
} }

@ -35,7 +35,7 @@
font-weight: 500; font-weight: 500;
font-size: 24px; font-size: 24px;
color: $primary-text-color; color: $primary-text-color;
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
margin-bottom: 20px; margin-bottom: 20px;
} }

@ -1,7 +1,7 @@
$no-columns-breakpoint: 600px; $no-columns-breakpoint: 600px;
code { code {
font-family: 'mastodon-font-monospace', monospace; font-family: $font-monospace, monospace;
font-weight: 400; font-weight: 400;
} }
@ -474,7 +474,7 @@ code {
width: 100%; width: 100%;
border: none; border: none;
padding: 10px; padding: 10px;
font-family: 'mastodon-font-monospace', monospace; font-family: $font-monospace, monospace;
background: $ui-base-color; background: $ui-base-color;
color: $primary-text-color; color: $primary-text-color;
font-size: 14px; font-size: 14px;
@ -718,7 +718,7 @@ code {
.form_admin_settings_custom_css, .form_admin_settings_custom_css,
.form_admin_settings_closed_registrations_message { .form_admin_settings_closed_registrations_message {
textarea { textarea {
font-family: 'mastodon-font-monospace', monospace; font-family: $font-monospace, monospace;
} }
} }
@ -742,7 +742,7 @@ code {
border: 0; border: 0;
padding: 10px; padding: 10px;
font-size: 14px; font-size: 14px;
font-family: 'mastodon-font-monospace', monospace; font-family: $font-monospace, monospace;
} }
button { button {

@ -145,6 +145,19 @@ body.rtl {
margin-right: 6px; margin-right: 6px;
} }
.status__action-bar {
&__counter {
margin-right: 0;
margin-left: 11px;
.status__action-bar-button {
margin-right: 0;
margin-left: 4px;
}
}
}
.status__action-bar-button { .status__action-bar-button {
float: right; float: right;
margin-right: 0; margin-right: 0;
@ -285,4 +298,13 @@ body.rtl {
} }
} }
} }
.public-layout {
.header {
.nav-button {
margin-left: 8px;
margin-right: 0;
}
}
}
} }

@ -90,7 +90,7 @@
} }
samp { samp {
font-family: 'mastodon-font-monospace', monospace; font-family: $font-monospace, monospace;
} }
button.table-action-link { button.table-action-link {

@ -51,6 +51,10 @@ $media-modal-media-max-height: 80%;
$no-gap-breakpoint: 415px; $no-gap-breakpoint: 415px;
$font-sans-serif: 'mastodon-font-sans-serif' !default;
$font-display: 'mastodon-font-display' !default;
$font-monospace: 'mastodon-font-monospace' !default;
// Avatar border size (8% default, 100% for rounded avatars) // Avatar border size (8% default, 100% for rounded avatars)
$ui-avatar-border-size: 8%; $ui-avatar-border-size: 8%;

@ -14,6 +14,7 @@ const getMeta = (prop) => initialState && initialState.meta && initialState.meta
export const reduceMotion = getMeta('reduce_motion'); export const reduceMotion = getMeta('reduce_motion');
export const autoPlayGif = getMeta('auto_play_gif'); export const autoPlayGif = getMeta('auto_play_gif');
export const displaySensitiveMedia = getMeta('display_sensitive_media'); export const displaySensitiveMedia = getMeta('display_sensitive_media');
export const displayMedia = getMeta('display_media') || (getMeta('display_sensitive_media') ? 'show_all' : 'default');
export const unfollowModal = getMeta('unfollow_modal'); export const unfollowModal = getMeta('unfollow_modal');
export const boostModal = getMeta('boost_modal'); export const boostModal = getMeta('boost_modal');
export const favouriteModal = getMeta('favourite_modal'); export const favouriteModal = getMeta('favourite_modal');

@ -1,6 +1,7 @@
import escapeTextContentForBrowser from 'escape-html'; import escapeTextContentForBrowser from 'escape-html';
import emojify from '../../features/emoji/emoji'; import emojify from '../../features/emoji/emoji';
import { unescapeHTML } from '../../utils/html'; import { unescapeHTML } from '../../utils/html';
import { expandSpoilers } from '../../initial_state';
const domParser = new DOMParser(); const domParser = new DOMParser();
@ -57,7 +58,7 @@ export function normalizeStatus(status, normalOldStatus) {
normalStatus.search_index = domParser.parseFromString(searchContent, 'text/html').documentElement.textContent; normalStatus.search_index = domParser.parseFromString(searchContent, 'text/html').documentElement.textContent;
normalStatus.contentHtml = emojify(normalStatus.content, emojiMap); normalStatus.contentHtml = emojify(normalStatus.content, emojiMap);
normalStatus.spoilerHtml = emojify(escapeTextContentForBrowser(spoilerText), emojiMap); normalStatus.spoilerHtml = emojify(escapeTextContentForBrowser(spoilerText), emojiMap);
normalStatus.hidden = spoilerText.length > 0 || normalStatus.sensitive; normalStatus.hidden = expandSpoilers ? false : spoilerText.length > 0 || normalStatus.sensitive;
} }
return normalStatus; return normalStatus;

@ -0,0 +1,27 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`<AutosuggestEmoji /> renders emoji with custom url 1`] = `
<div
className="autosuggest-emoji"
>
<img
alt="foobar"
className="emojione"
src="http://example.com/emoji.png"
/>
:foobar:
</div>
`;
exports[`<AutosuggestEmoji /> renders native emoji 1`] = `
<div
className="autosuggest-emoji"
>
<img
alt="💙"
className="emojione"
src="/emoji/1f499.svg"
/>
:foobar:
</div>
`;

@ -0,0 +1,29 @@
import React from 'react';
import renderer from 'react-test-renderer';
import AutosuggestEmoji from '../autosuggest_emoji';
describe('<AutosuggestEmoji />', () => {
it('renders native emoji', () => {
const emoji = {
native: '💙',
colons: ':foobar:',
};
const component = renderer.create(<AutosuggestEmoji emoji={emoji} />);
const tree = component.toJSON();
expect(tree).toMatchSnapshot();
});
it('renders emoji with custom url', () => {
const emoji = {
custom: true,
imageUrl: 'http://example.com/emoji.png',
native: 'foobar',
colons: ':foobar:',
};
const component = renderer.create(<AutosuggestEmoji emoji={emoji} />);
const tree = component.toJSON();
expect(tree).toMatchSnapshot();
});
});

@ -6,7 +6,7 @@ import IconButton from './icon_button';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import { isIOS } from '../is_mobile'; import { isIOS } from '../is_mobile';
import classNames from 'classnames'; import classNames from 'classnames';
import { autoPlayGif, displaySensitiveMedia } from '../initial_state'; import { autoPlayGif, displayMedia } from '../initial_state';
const messages = defineMessages({ const messages = defineMessages({
toggle_visible: { id: 'media_gallery.toggle_visible', defaultMessage: 'Toggle visibility' }, toggle_visible: { id: 'media_gallery.toggle_visible', defaultMessage: 'Toggle visibility' },
@ -197,7 +197,7 @@ class MediaGallery extends React.PureComponent {
}; };
state = { state = {
visible: !this.props.sensitive || displaySensitiveMedia, visible: displayMedia !== 'hide_all' && !this.props.sensitive || displayMedia === 'show_all',
}; };
componentWillReceiveProps (nextProps) { componentWillReceiveProps (nextProps) {

@ -285,7 +285,7 @@ class Status extends ImmutablePureComponent {
</a> </a>
</div> </div>
<StatusContent status={status} onClick={this.handleClick} expanded={!status.get('hidden')} onExpandedToggle={this.handleExpandedToggle} /> <StatusContent status={status} onClick={this.handleClick} expanded={!status.get('hidden')} onExpandedToggle={this.handleExpandedToggle} collapsable />
{media} {media}

@ -6,6 +6,8 @@ import { FormattedMessage } from 'react-intl';
import Permalink from './permalink'; import Permalink from './permalink';
import classnames from 'classnames'; import classnames from 'classnames';
const MAX_HEIGHT = 642; // 20px * 32 (+ 2px padding at the top)
export default class StatusContent extends React.PureComponent { export default class StatusContent extends React.PureComponent {
static contextTypes = { static contextTypes = {
@ -17,10 +19,12 @@ export default class StatusContent extends React.PureComponent {
expanded: PropTypes.bool, expanded: PropTypes.bool,
onExpandedToggle: PropTypes.func, onExpandedToggle: PropTypes.func,
onClick: PropTypes.func, onClick: PropTypes.func,
collapsable: PropTypes.bool,
}; };
state = { state = {
hidden: true, hidden: true,
collapsed: null, // `collapsed: null` indicates that an element doesn't need collapsing, while `true` or `false` indicates that it does (and is/isn't).
}; };
_updateStatusLinks () { _updateStatusLinks () {
@ -53,6 +57,16 @@ export default class StatusContent extends React.PureComponent {
link.setAttribute('target', '_blank'); link.setAttribute('target', '_blank');
link.setAttribute('rel', 'noopener'); link.setAttribute('rel', 'noopener');
} }
if (
this.props.collapsable
&& this.props.onClick
&& this.state.collapsed === null
&& node.clientHeight > MAX_HEIGHT
&& this.props.status.get('spoiler_text').length === 0
) {
this.setState({ collapsed: true });
}
} }
componentDidMount () { componentDidMount () {
@ -113,6 +127,11 @@ export default class StatusContent extends React.PureComponent {
} }
} }
handleCollapsedClick = (e) => {
e.preventDefault();
this.setState({ collapsed: !this.state.collapsed });
}
setRef = (c) => { setRef = (c) => {
this.node = c; this.node = c;
} }
@ -132,12 +151,19 @@ export default class StatusContent extends React.PureComponent {
const classNames = classnames('status__content', { const classNames = classnames('status__content', {
'status__content--with-action': this.props.onClick && this.context.router, 'status__content--with-action': this.props.onClick && this.context.router,
'status__content--with-spoiler': status.get('spoiler_text').length > 0, 'status__content--with-spoiler': status.get('spoiler_text').length > 0,
'status__content--collapsed': this.state.collapsed === true,
}); });
if (isRtl(status.get('search_index'))) { if (isRtl(status.get('search_index'))) {
directionStyle.direction = 'rtl'; directionStyle.direction = 'rtl';
} }
const readMoreButton = (
<button className='status__content__read-more-button' onClick={this.props.onClick}>
<FormattedMessage id='status.read_more' defaultMessage='Read more' /><i className='fa fa-fw fa-angle-right' />
</button>
);
if (status.get('spoiler_text').length > 0) { if (status.get('spoiler_text').length > 0) {
let mentionsPlaceholder = ''; let mentionsPlaceholder = '';
@ -167,17 +193,23 @@ export default class StatusContent extends React.PureComponent {
</div> </div>
); );
} else if (this.props.onClick) { } else if (this.props.onClick) {
return ( const output = [
<div <div
ref={this.setRef} ref={this.setRef}
tabIndex='0' tabIndex='0'
className={classNames} className={classNames}
style={directionStyle} style={directionStyle}
dangerouslySetInnerHTML={content}
onMouseDown={this.handleMouseDown} onMouseDown={this.handleMouseDown}
onMouseUp={this.handleMouseUp} onMouseUp={this.handleMouseUp}
dangerouslySetInnerHTML={content} />,
/> ];
);
if (this.state.collapsed) {
output.push(readMoreButton);
}
return output;
} else { } else {
return ( return (
<div <div

@ -2,7 +2,7 @@ import React from 'react';
import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePropTypes from 'react-immutable-proptypes';
import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePureComponent from 'react-immutable-pure-component';
import Permalink from '../../../components/permalink'; import Permalink from '../../../components/permalink';
import { displaySensitiveMedia } from '../../../initial_state'; import { displayMedia } from '../../../initial_state';
export default class MediaItem extends ImmutablePureComponent { export default class MediaItem extends ImmutablePureComponent {
@ -11,7 +11,7 @@ export default class MediaItem extends ImmutablePureComponent {
}; };
state = { state = {
visible: !this.props.media.getIn(['status', 'sensitive']) || displaySensitiveMedia, visible: displayMedia !== 'hide_all' && !this.props.media.getIn(['status', 'sensitive']) || displayMedia === 'show_all',
}; };
handleClick = () => { handleClick = () => {

@ -27,7 +27,6 @@ export default class ColumnSettings extends React.PureComponent {
const showPushSettings = pushSettings.get('browserSupport') && pushSettings.get('isSubscribed'); const showPushSettings = pushSettings.get('browserSupport') && pushSettings.get('isSubscribed');
const pushStr = showPushSettings && <FormattedMessage id='notifications.column_settings.push' defaultMessage='Push notifications' />; const pushStr = showPushSettings && <FormattedMessage id='notifications.column_settings.push' defaultMessage='Push notifications' />;
const pushMeta = showPushSettings && <FormattedMessage id='notifications.column_settings.push_meta' defaultMessage='This device' />;
return ( return (
<div> <div>
@ -40,7 +39,7 @@ export default class ColumnSettings extends React.PureComponent {
<div className='column-settings__row'> <div className='column-settings__row'>
<SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'follow']} onChange={onChange} label={alertStr} /> <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'follow']} onChange={onChange} label={alertStr} />
{showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'follow']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />} {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'follow']} onChange={this.onPushChange} label={pushStr} />}
<SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'follow']} onChange={onChange} label={showStr} /> <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'follow']} onChange={onChange} label={showStr} />
<SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'follow']} onChange={onChange} label={soundStr} /> <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'follow']} onChange={onChange} label={soundStr} />
</div> </div>
@ -51,7 +50,7 @@ export default class ColumnSettings extends React.PureComponent {
<div className='column-settings__row'> <div className='column-settings__row'>
<SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'favourite']} onChange={onChange} label={alertStr} /> <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'favourite']} onChange={onChange} label={alertStr} />
{showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'favourite']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />} {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'favourite']} onChange={this.onPushChange} label={pushStr} />}
<SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'favourite']} onChange={onChange} label={showStr} /> <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'favourite']} onChange={onChange} label={showStr} />
<SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'favourite']} onChange={onChange} label={soundStr} /> <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'favourite']} onChange={onChange} label={soundStr} />
</div> </div>
@ -62,7 +61,7 @@ export default class ColumnSettings extends React.PureComponent {
<div className='column-settings__row'> <div className='column-settings__row'>
<SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'mention']} onChange={onChange} label={alertStr} /> <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'mention']} onChange={onChange} label={alertStr} />
{showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'mention']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />} {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'mention']} onChange={this.onPushChange} label={pushStr} />}
<SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'mention']} onChange={onChange} label={showStr} /> <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'mention']} onChange={onChange} label={showStr} />
<SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'mention']} onChange={onChange} label={soundStr} /> <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'mention']} onChange={onChange} label={soundStr} />
</div> </div>
@ -73,7 +72,7 @@ export default class ColumnSettings extends React.PureComponent {
<div className='column-settings__row'> <div className='column-settings__row'>
<SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'reblog']} onChange={onChange} label={alertStr} /> <SettingToggle prefix='notifications_desktop' settings={settings} settingPath={['alerts', 'reblog']} onChange={onChange} label={alertStr} />
{showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'reblog']} meta={pushMeta} onChange={this.onPushChange} label={pushStr} />} {showPushSettings && <SettingToggle prefix='notifications_push' settings={pushSettings} settingPath={['alerts', 'reblog']} onChange={this.onPushChange} label={pushStr} />}
<SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'reblog']} onChange={onChange} label={showStr} /> <SettingToggle prefix='notifications' settings={settings} settingPath={['shows', 'reblog']} onChange={onChange} label={showStr} />
<SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'reblog']} onChange={onChange} label={soundStr} /> <SettingToggle prefix='notifications' settings={settings} settingPath={['sounds', 'reblog']} onChange={onChange} label={soundStr} />
</div> </div>

@ -85,8 +85,9 @@ class Notification extends ImmutablePureComponent {
<div className='notification__favourite-icon-wrapper'> <div className='notification__favourite-icon-wrapper'>
<i className='fa fa-fw fa-user-plus' /> <i className='fa fa-fw fa-user-plus' />
</div> </div>
<span title={notification.get('created_at')}>
<FormattedMessage id='notification.follow' defaultMessage='{name} followed you' values={{ name: link }} /> <FormattedMessage id='notification.follow' defaultMessage='{name} followed you' values={{ name: link }} />
</span>
</div> </div>
<AccountContainer id={account.get('id')} withNote={false} hidden={this.props.hidden} /> <AccountContainer id={account.get('id')} withNote={false} hidden={this.props.hidden} />

@ -10,7 +10,6 @@ export default class SettingToggle extends React.PureComponent {
settings: ImmutablePropTypes.map.isRequired, settings: ImmutablePropTypes.map.isRequired,
settingPath: PropTypes.array.isRequired, settingPath: PropTypes.array.isRequired,
label: PropTypes.node.isRequired, label: PropTypes.node.isRequired,
meta: PropTypes.node,
onChange: PropTypes.func.isRequired, onChange: PropTypes.func.isRequired,
} }
@ -19,14 +18,13 @@ export default class SettingToggle extends React.PureComponent {
} }
render () { render () {
const { prefix, settings, settingPath, label, meta } = this.props; const { prefix, settings, settingPath, label } = this.props;
const id = ['setting-toggle', prefix, ...settingPath].filter(Boolean).join('-'); const id = ['setting-toggle', prefix, ...settingPath].filter(Boolean).join('-');
return ( return (
<div className='setting-toggle'> <div className='setting-toggle'>
<Toggle id={id} checked={settings.getIn(settingPath)} onChange={this.onChange} onKeyDown={this.onKeyDown} /> <Toggle id={id} checked={settings.getIn(settingPath)} onChange={this.onChange} onKeyDown={this.onKeyDown} />
<label htmlFor={id} className='setting-toggle__label'>{label}</label> <label htmlFor={id} className='setting-toggle__label'>{label}</label>
{meta && <span className='setting-meta__label'>{meta}</span>}
</div> </div>
); );
} }

@ -59,7 +59,8 @@ const messages = defineMessages({
const mapStateToProps = state => ({ const mapStateToProps = state => ({
isComposing: state.getIn(['compose', 'is_composing']), isComposing: state.getIn(['compose', 'is_composing']),
hasComposingText: state.getIn(['compose', 'text']) !== '', hasComposingText: state.getIn(['compose', 'text']).trim().length !== 0,
hasMediaAttachments: state.getIn(['compose', 'media_attachments']).size > 0,
dropdownMenuIsOpen: state.getIn(['dropdown_menu', 'openId']) !== null, dropdownMenuIsOpen: state.getIn(['dropdown_menu', 'openId']) !== null,
}); });
@ -201,6 +202,7 @@ class UI extends React.PureComponent {
children: PropTypes.node, children: PropTypes.node,
isComposing: PropTypes.bool, isComposing: PropTypes.bool,
hasComposingText: PropTypes.bool, hasComposingText: PropTypes.bool,
hasMediaAttachments: PropTypes.bool,
location: PropTypes.object, location: PropTypes.object,
intl: PropTypes.object.isRequired, intl: PropTypes.object.isRequired,
dropdownMenuIsOpen: PropTypes.bool, dropdownMenuIsOpen: PropTypes.bool,
@ -211,9 +213,9 @@ class UI extends React.PureComponent {
}; };
handleBeforeUnload = (e) => { handleBeforeUnload = (e) => {
const { intl, isComposing, hasComposingText } = this.props; const { intl, isComposing, hasComposingText, hasMediaAttachments } = this.props;
if (isComposing && hasComposingText) { if (isComposing && (hasComposingText || hasMediaAttachments)) {
// Setting returnValue to any string causes confirmation dialog. // Setting returnValue to any string causes confirmation dialog.
// Many browsers no longer display this text to users, // Many browsers no longer display this text to users,
// but we set user-friendly message for other browsers, e.g. Edge. // but we set user-friendly message for other browsers, e.g. Edge.

@ -5,7 +5,7 @@ import { fromJS } from 'immutable';
import { throttle } from 'lodash'; import { throttle } from 'lodash';
import classNames from 'classnames'; import classNames from 'classnames';
import { isFullscreen, requestFullscreen, exitFullscreen } from '../ui/util/fullscreen'; import { isFullscreen, requestFullscreen, exitFullscreen } from '../ui/util/fullscreen';
import { displaySensitiveMedia } from '../../initial_state'; import { displayMedia } from '../../initial_state';
const messages = defineMessages({ const messages = defineMessages({
play: { id: 'video.play', defaultMessage: 'Play' }, play: { id: 'video.play', defaultMessage: 'Play' },
@ -111,7 +111,7 @@ class Video extends React.PureComponent {
fullscreen: false, fullscreen: false,
hovered: false, hovered: false,
muted: false, muted: false,
revealed: !this.props.sensitive || displaySensitiveMedia, revealed: displayMedia !== 'hide_all' && !this.props.sensitive || displayMedia === 'show_all',
}; };
setPlayerRef = c => { setPlayerRef = c => {
@ -272,7 +272,7 @@ class Video extends React.PureComponent {
} }
render () { render () {
const { preview, src, inline, startTime, onOpenVideo, onCloseVideo, intl, alt, detailed } = this.props; const { preview, src, inline, startTime, onOpenVideo, onCloseVideo, intl, alt, detailed, sensitive } = this.props;
const { containerWidth, currentTime, duration, buffer, dragging, paused, fullscreen, hovered, muted, revealed } = this.state; const { containerWidth, currentTime, duration, buffer, dragging, paused, fullscreen, hovered, muted, revealed } = this.state;
const progress = (currentTime / duration) * 100; const progress = (currentTime / duration) * 100;
const playerStyle = {}; const playerStyle = {};
@ -296,6 +296,13 @@ class Video extends React.PureComponent {
preload = 'none'; preload = 'none';
} }
let warning;
if (sensitive) {
warning = <FormattedMessage id='status.sensitive_warning' defaultMessage='Sensitive content' />;
} else {
warning = <FormattedMessage id='status.media_hidden' defaultMessage='Media hidden' />;
}
return ( return (
<div <div
role='menuitem' role='menuitem'
@ -328,7 +335,7 @@ class Video extends React.PureComponent {
/> />
<button type='button' className={classNames('video-player__spoiler', { active: !revealed })} onClick={this.toggleReveal}> <button type='button' className={classNames('video-player__spoiler', { active: !revealed })} onClick={this.toggleReveal}>
<span className='video-player__spoiler__title'><FormattedMessage id='status.sensitive_warning' defaultMessage='Sensitive content' /></span> <span className='video-player__spoiler__title'>{warning}</span>
<span className='video-player__spoiler__subtitle'><FormattedMessage id='status.sensitive_toggle' defaultMessage='Click to view' /></span> <span className='video-player__spoiler__subtitle'><FormattedMessage id='status.sensitive_toggle' defaultMessage='Click to view' /></span>
</button> </button>

@ -5,7 +5,8 @@ const getMeta = (prop) => initialState && initialState.meta && initialState.meta
export const reduceMotion = getMeta('reduce_motion'); export const reduceMotion = getMeta('reduce_motion');
export const autoPlayGif = getMeta('auto_play_gif'); export const autoPlayGif = getMeta('auto_play_gif');
export const displaySensitiveMedia = getMeta('display_sensitive_media'); export const displayMedia = getMeta('display_media');
export const expandSpoilers = getMeta('expand_spoilers');
export const unfollowModal = getMeta('unfollow_modal'); export const unfollowModal = getMeta('unfollow_modal');
export const boostModal = getMeta('boost_modal'); export const boostModal = getMeta('boost_modal');
export const deleteModal = getMeta('delete_modal'); export const deleteModal = getMeta('delete_modal');

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "متابعُون جُدُد :", "notifications.column_settings.follow": "متابعُون جُدُد :",
"notifications.column_settings.mention": "الإشارات :", "notifications.column_settings.mention": "الإشارات :",
"notifications.column_settings.push": "الإخطارات المدفوعة", "notifications.column_settings.push": "الإخطارات المدفوعة",
"notifications.column_settings.push_meta": "هذا الجهاز",
"notifications.column_settings.reblog": "الترقيّات:", "notifications.column_settings.reblog": "الترقيّات:",
"notifications.column_settings.show": "إعرِضها في عمود", "notifications.column_settings.show": "إعرِضها في عمود",
"notifications.column_settings.sound": "أصدر صوتا", "notifications.column_settings.sound": "أصدر صوتا",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Siguidores nuevos:", "notifications.column_settings.follow": "Siguidores nuevos:",
"notifications.column_settings.mention": "Menciones:", "notifications.column_settings.mention": "Menciones:",
"notifications.column_settings.push": "Push notifications", "notifications.column_settings.push": "Push notifications",
"notifications.column_settings.push_meta": "Esti preséu",
"notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.reblog": "Boosts:",
"notifications.column_settings.show": "Amosar en columna", "notifications.column_settings.show": "Amosar en columna",
"notifications.column_settings.sound": "Reproducir soníu", "notifications.column_settings.sound": "Reproducir soníu",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Нови последователи:", "notifications.column_settings.follow": "Нови последователи:",
"notifications.column_settings.mention": "Споменавания:", "notifications.column_settings.mention": "Споменавания:",
"notifications.column_settings.push": "Push notifications", "notifications.column_settings.push": "Push notifications",
"notifications.column_settings.push_meta": "This device",
"notifications.column_settings.reblog": "Споделяния:", "notifications.column_settings.reblog": "Споделяния:",
"notifications.column_settings.show": "Покажи в колона", "notifications.column_settings.show": "Покажи в колона",
"notifications.column_settings.sound": "Play sound", "notifications.column_settings.sound": "Play sound",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Nous seguidors:", "notifications.column_settings.follow": "Nous seguidors:",
"notifications.column_settings.mention": "Mencions:", "notifications.column_settings.mention": "Mencions:",
"notifications.column_settings.push": "Push notificacions", "notifications.column_settings.push": "Push notificacions",
"notifications.column_settings.push_meta": "Aquest dispositiu",
"notifications.column_settings.reblog": "Impulsos:", "notifications.column_settings.reblog": "Impulsos:",
"notifications.column_settings.show": "Mostrar en la columna", "notifications.column_settings.show": "Mostrar en la columna",
"notifications.column_settings.sound": "Reproduïr so", "notifications.column_settings.sound": "Reproduïr so",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Abbunati novi:", "notifications.column_settings.follow": "Abbunati novi:",
"notifications.column_settings.mention": "Minzione:", "notifications.column_settings.mention": "Minzione:",
"notifications.column_settings.push": "Nutificazione Push", "notifications.column_settings.push": "Nutificazione Push",
"notifications.column_settings.push_meta": "Quess'apparechju",
"notifications.column_settings.reblog": "Spartere:", "notifications.column_settings.reblog": "Spartere:",
"notifications.column_settings.show": "Mustrà indè a colonna", "notifications.column_settings.show": "Mustrà indè a colonna",
"notifications.column_settings.sound": "Sunà", "notifications.column_settings.sound": "Sunà",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Noví sledovatelé:", "notifications.column_settings.follow": "Noví sledovatelé:",
"notifications.column_settings.mention": "Zmínky:", "notifications.column_settings.mention": "Zmínky:",
"notifications.column_settings.push": "Push oznámení", "notifications.column_settings.push": "Push oznámení",
"notifications.column_settings.push_meta": "Toto zařízení",
"notifications.column_settings.reblog": "Boosty:", "notifications.column_settings.reblog": "Boosty:",
"notifications.column_settings.show": "Zobrazit ve sloupci", "notifications.column_settings.show": "Zobrazit ve sloupci",
"notifications.column_settings.sound": "Přehrát zvuk", "notifications.column_settings.sound": "Přehrát zvuk",

@ -5,43 +5,42 @@
"account.blocked": "Blociwyd", "account.blocked": "Blociwyd",
"account.direct": "Neges breifat @{name}", "account.direct": "Neges breifat @{name}",
"account.disclaimer_full": "Gall y wybodaeth isod adlewyrchu darlun anghyflawn o broffil defnyddiwr.", "account.disclaimer_full": "Gall y wybodaeth isod adlewyrchu darlun anghyflawn o broffil defnyddiwr.",
"account.domain_blocked": "Domain hidden", "account.domain_blocked": "Parth wedi ei guddio",
"account.edit_profile": "Golygu proffil", "account.edit_profile": "Golygu proffil",
"account.endorse": "Feature on profile", "account.endorse": "Arddangos ar fy mhroffil",
"account.follow": "Dilyn", "account.follow": "Dilyn",
"account.followers": "Dilynwyr", "account.followers": "Dilynwyr",
"account.followers.empty": "Nid oes neb yn dilyn y defnyddiwr hwn eto.", "account.followers.empty": "Nid oes neb yn dilyn y defnyddiwr hwn eto.",
"account.follows": "Yn dilyn", "account.follows": "Yn dilyn",
"account.follows.empty": "Nid yw'r defnyddiwr hwn yn dilyn unrhyw un eto.", "account.follows.empty": "Nid yw'r defnyddiwr hwn yn dilyn unrhyw un eto.",
"account.follows_you": "Yn eich dilyn chi", "account.follows_you": "Yn eich dilyn chi",
"account.hide_reblogs": "Hide boosts from @{name}", "account.hide_reblogs": "Cuddio bwstiau o @{name}",
"account.link_verified_on": "Ownership of this link was checked on {date}",
"account.media": "Cyfryngau", "account.media": "Cyfryngau",
"account.mention": "Crybwyll @{name}", "account.mention": "Crybwyll @{name}",
"account.moved_to": "Mae @{name} wedi symud i:", "account.moved_to": "Mae @{name} wedi symud i:",
"account.mute": "Mute @{name}", "account.mute": "Tawelu @{name}",
"account.mute_notifications": "Mute notifications from @{name}", "account.mute_notifications": "Cuddio hysbysiadau o @{name}",
"account.muted": "Distewyd", "account.muted": "Distewyd",
"account.posts": "Tŵtiau", "account.posts": "Tŵtiau",
"account.posts_with_replies": "Toots and replies", "account.posts_with_replies": "Tŵtiau ac atebion",
"account.report": "Adroddwch @{name}", "account.report": "Adroddwch @{name}",
"account.requested": "Awaiting approval. Click to cancel follow request", "account.requested": "Aros am gymeradwyaeth. Cliciwch er mwyn canslo cais dilyn",
"account.share": "Rhannwch broffil @{name}", "account.share": "Rhannwch broffil @{name}",
"account.show_reblogs": "Show boosts from @{name}", "account.show_reblogs": "Dangoswch bwstiau o @{name}",
"account.unblock": "Dadflociwch @{name}", "account.unblock": "Dadflociwch @{name}",
"account.unblock_domain": "Dadguddiwch {domain}", "account.unblock_domain": "Dadguddiwch {domain}",
"account.unendorse": "Don't feature on profile", "account.unendorse": "Peidwch a'i arddangos ar fy mhroffil",
"account.unfollow": "Daddilynwch", "account.unfollow": "Daddilynwch",
"account.unmute": "Unmute @{name}", "account.unmute": "Dad-dawelu @{name}",
"account.unmute_notifications": "Unmute notifications from @{name}", "account.unmute_notifications": "Dad-dawelu hysbysiadau o @{name}",
"account.view_full_profile": "View full profile", "account.view_full_profile": "Gweld proffil llawn",
"alert.unexpected.message": "Digwyddodd gwall annisgwyl.", "alert.unexpected.message": "Digwyddodd gwall annisgwyl.",
"alert.unexpected.title": "Wps!", "alert.unexpected.title": "Wps!",
"boost_modal.combo": "You can press {combo} to skip this next time", "boost_modal.combo": "Mae modd gwasgu {combo} er mwyn sgipio hyn tro nesa",
"bundle_column_error.body": "Aeth rhywbeth o'i le tra'n llwytho'r elfen hon.", "bundle_column_error.body": "Aeth rhywbeth o'i le tra'n llwytho'r elfen hon.",
"bundle_column_error.retry": "Ceisiwch eto", "bundle_column_error.retry": "Ceisiwch eto",
"bundle_column_error.title": "Gwall rhwydwaith", "bundle_column_error.title": "Gwall rhwydwaith",
"bundle_modal_error.close": "Close", "bundle_modal_error.close": "Cau",
"bundle_modal_error.message": "Aeth rhywbeth o'i le tra'n llwytho'r elfen hon.", "bundle_modal_error.message": "Aeth rhywbeth o'i le tra'n llwytho'r elfen hon.",
"bundle_modal_error.retry": "Ceiswich eto", "bundle_modal_error.retry": "Ceiswich eto",
"column.blocks": "Defnyddwyr a flociwyd", "column.blocks": "Defnyddwyr a flociwyd",
@ -54,10 +53,10 @@
"column.lists": "Rhestrau", "column.lists": "Rhestrau",
"column.mutes": "Defnyddwyr a ddistewyd", "column.mutes": "Defnyddwyr a ddistewyd",
"column.notifications": "Hysbysiadau", "column.notifications": "Hysbysiadau",
"column.pins": "Pinned toot", "column.pins": "Tŵtiau wedi eu pinio",
"column.public": "Federated timeline", "column.public": "",
"column_back_button.label": "Nôl", "column_back_button.label": "Nôl",
"column_header.hide_settings": "Hide settings", "column_header.hide_settings": "Cuddiwch dewisiadau",
"column_header.moveLeft_settings": "Symudwch y golofn i'r chwith", "column_header.moveLeft_settings": "Symudwch y golofn i'r chwith",
"column_header.moveRight_settings": "Symudwch y golofn i'r dde", "column_header.moveRight_settings": "Symudwch y golofn i'r dde",
"column_header.pin": "Piniwch", "column_header.pin": "Piniwch",
@ -73,30 +72,30 @@
"compose_form.placeholder": "Be syd ar eich meddwl?", "compose_form.placeholder": "Be syd ar eich meddwl?",
"compose_form.publish": "Tŵt", "compose_form.publish": "Tŵt",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.marked": "Media is marked as sensitive", "compose_form.sensitive.marked": "",
"compose_form.sensitive.unmarked": "Media is not marked as sensitive", "compose_form.sensitive.unmarked": "",
"compose_form.spoiler.marked": "Testun wedi ei guddio gan rybudd", "compose_form.spoiler.marked": "Testun wedi ei guddio gan rybudd",
"compose_form.spoiler.unmarked": "Nid yw'r testun wedi ei guddio", "compose_form.spoiler.unmarked": "Nid yw'r testun wedi ei guddio",
"compose_form.spoiler_placeholder": "Ysgrifenwch eich rhybudd yma", "compose_form.spoiler_placeholder": "Ysgrifenwch eich rhybudd yma",
"confirmation_modal.cancel": "Cancel", "confirmation_modal.cancel": "Canslo",
"confirmations.block.confirm": "Blociwch", "confirmations.block.confirm": "Blociwch",
"confirmations.block.message": "Ydych chi'n sicr eich bod eisiau blocio {name}?", "confirmations.block.message": "Ydych chi'n sicr eich bod eisiau blocio {name}?",
"confirmations.delete.confirm": "Dileu", "confirmations.delete.confirm": "Dileu",
"confirmations.delete.message": "Ydych chi'n sicr eich bod eisiau dileu y statws hwn?", "confirmations.delete.message": "Ydych chi'n sicr eich bod eisiau dileu y statws hwn?",
"confirmations.delete_list.confirm": "Dileu", "confirmations.delete_list.confirm": "Dileu",
"confirmations.delete_list.message": "Ydych chi'n sicr eich bod eisiau dileu y rhestr hwn am byth?", "confirmations.delete_list.message": "Ydych chi'n sicr eich bod eisiau dileu y rhestr hwn am byth?",
"confirmations.domain_block.confirm": "Hide entire domain", "confirmations.domain_block.confirm": "",
"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.domain_block.message": "",
"confirmations.mute.confirm": "Mute", "confirmations.mute.confirm": "Tawelu",
"confirmations.mute.message": "Ydych chi'n sicr eich bod am ddistewi {name}?", "confirmations.mute.message": "Ydych chi'n sicr eich bod am ddistewi {name}?",
"confirmations.redraft.confirm": "Delete & redraft", "confirmations.redraft.confirm": "Dilëwch & ailddrafftio",
"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.redraft.message": "Ydych chi'n siwr eich bod eisiau dileu y statws hwn a'i ailddrafftio? Bydd ffefrynnau a bwstiau'n cael ei colli, a bydd ymatebion i'r statws gwreiddiol yn cael eu hamddifadu.",
"confirmations.unfollow.confirm": "Dad-ddilynwch", "confirmations.unfollow.confirm": "Dad-ddilynwch",
"confirmations.unfollow.message": "Ydych chi'n sicr eich bod am ddad-ddilyn {name}?", "confirmations.unfollow.message": "Ydych chi'n sicr eich bod am ddad-ddilyn {name}?",
"embed.instructions": "Embed this status on your website by copying the code below.", "embed.instructions": "Mewnblannwch y statws hwn ar eich gwefan drwy gopïo'r côd isod.",
"embed.preview": "Dyma sut olwg fydd arno:", "embed.preview": "Dyma sut olwg fydd arno:",
"emoji_button.activity": "Gweithgarwch", "emoji_button.activity": "Gweithgarwch",
"emoji_button.custom": "Custom", "emoji_button.custom": "",
"emoji_button.flags": "Baneri", "emoji_button.flags": "Baneri",
"emoji_button.food": "Bwyd a Diod", "emoji_button.food": "Bwyd a Diod",
"emoji_button.label": "Mewnosodwch emoji", "emoji_button.label": "Mewnosodwch emoji",
@ -110,20 +109,20 @@
"emoji_button.symbols": "Symbolau", "emoji_button.symbols": "Symbolau",
"emoji_button.travel": "Teithio & Llefydd", "emoji_button.travel": "Teithio & Llefydd",
"empty_column.blocks": "Nid ydych wedi blocio unrhyw ddefnyddwyr eto.", "empty_column.blocks": "Nid ydych wedi blocio unrhyw ddefnyddwyr eto.",
"empty_column.community": "The local timeline is empty. Write something publicly to get the ball rolling!", "empty_column.community": "",
"empty_column.direct": "Nid oes gennych unrhyw negeseuon preifat eto. Pan y byddwch yn anfon neu derbyn un, mi fydd yn ymddangos yma.", "empty_column.direct": "Nid oes gennych unrhyw negeseuon preifat eto. Pan y byddwch yn anfon neu derbyn un, mi fydd yn ymddangos yma.",
"empty_column.domain_blocks": "Nid oes yna unrhyw barthau cuddiedig eto.", "empty_column.domain_blocks": "Nid oes yna unrhyw barthau cuddiedig eto.",
"empty_column.favourited_statuses": "Nid oes gennych unrhyw hoff dwtiau eto. Pan y byddwch yn hoffi un, mi fydd yn ymddangos yma.", "empty_column.favourited_statuses": "Nid oes gennych unrhyw hoff dwtiau eto. Pan y byddwch yn hoffi un, mi fydd yn ymddangos yma.",
"empty_column.favourites": "Nid oes neb wedi hoffi'r tŵt yma eto. Pan bydd rhywun yn ei hoffi, mi fyddent yn ymddangos yma.", "empty_column.favourites": "Nid oes neb wedi hoffi'r tŵt yma eto. Pan bydd rhywun yn ei hoffi, mi fyddent yn ymddangos yma.",
"empty_column.follow_requests": "You don't have any follow requests yet. When you receive one, it will show up here.", "empty_column.follow_requests": "Nid oes gennych unrhyw geisiadau dilyn eto. Pan dderbyniwch chi un, bydd yn ymddangos yma.",
"empty_column.hashtag": "Nid oes dim ar yr hashnod hwn eto.", "empty_column.hashtag": "Nid oes dim ar yr hashnod hwn eto.",
"empty_column.home": "Your home timeline is empty! Visit {public} or use search to get started and meet other users.", "empty_column.home": "",
"empty_column.home.public_timeline": "the public timeline", "empty_column.home.public_timeline": "y ffrwd cyhoeddus",
"empty_column.list": "There is nothing in this list yet. When members of this list post new statuses, they will appear here.", "empty_column.list": "Nid oes dim yn y rhestr yma eto. Pan y bydd aelodau'r rhestr yn cyhoeddi statws newydd, mi fydd yn ymddangos yma.",
"empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", "empty_column.lists": "Nid oes gennych unrhyw restrau eto. Pan grëwch chi un, mi fydd yn ymddangos yma.",
"empty_column.mutes": "You haven't muted any users yet.", "empty_column.mutes": "Nid ydych wedi tawelu unrhyw ddefnyddwyr eto.",
"empty_column.notifications": "You don't have any notifications yet. Interact with others to start the conversation.", "empty_column.notifications": "Nid oes gennych unrhyw hysbysiadau eto. Rhyngweithiwch ac eraill i ddechrau'r sgwrs.",
"empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other instances to fill it up", "empty_column.public": "Does dim byd yma! Ysgrifennwch rhywbeth yn gyhoeddus, neu dilynwch ddefnyddwyr o INSTANCES eraill i'w lenwi",
"follow_request.authorize": "Caniatau", "follow_request.authorize": "Caniatau",
"follow_request.reject": "Gwrthod", "follow_request.reject": "Gwrthod",
"getting_started.developers": "Datblygwyr", "getting_started.developers": "Datblygwyr",
@ -131,125 +130,124 @@
"getting_started.find_friends": "Canfod ffrindiau o Twitter", "getting_started.find_friends": "Canfod ffrindiau o Twitter",
"getting_started.heading": "Dechrau", "getting_started.heading": "Dechrau",
"getting_started.invite": "Gwahoddwch bobl", "getting_started.invite": "Gwahoddwch bobl",
"getting_started.open_source_notice": "Mastodon is open source software. You can contribute or report issues on GitHub at {github}.", "getting_started.open_source_notice": "Mae Mastodon yn feddalwedd côd agored. Mae modd cyfrannu neu adrodd materion ar GitHUb ar {github}.",
"getting_started.security": "Diogelwch", "getting_started.security": "Diogelwch",
"getting_started.terms": "Terms of service", "getting_started.terms": "Telerau Gwasanaeth",
"home.column_settings.basic": "Syml", "home.column_settings.basic": "Syml",
"home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_reblogs": "",
"home.column_settings.show_replies": "Dangoswch ymatebion", "home.column_settings.show_replies": "Dangoswch ymatebion",
"keyboard_shortcuts.back": "to navigate back", "keyboard_shortcuts.back": "",
"keyboard_shortcuts.blocked": "to open blocked users list", "keyboard_shortcuts.blocked": "i agor rhestr defnyddwyr a flociwyd",
"keyboard_shortcuts.boost": "to boost", "keyboard_shortcuts.boost": "",
"keyboard_shortcuts.column": "to focus a status in one of the columns", "keyboard_shortcuts.column": "",
"keyboard_shortcuts.compose": "to focus the compose textarea", "keyboard_shortcuts.compose": "",
"keyboard_shortcuts.description": "Disgrifiad", "keyboard_shortcuts.description": "Disgrifiad",
"keyboard_shortcuts.direct": "i agor colofn negeseuon preifat", "keyboard_shortcuts.direct": "i agor colofn negeseuon preifat",
"keyboard_shortcuts.down": "i symud lawr yn y rhestr", "keyboard_shortcuts.down": "i symud lawr yn y rhestr",
"keyboard_shortcuts.enter": "i agor statws", "keyboard_shortcuts.enter": "i agor statws",
"keyboard_shortcuts.favourite": "i hoffi", "keyboard_shortcuts.favourite": "i hoffi",
"keyboard_shortcuts.favourites": "i agor rhestr hoffi", "keyboard_shortcuts.favourites": "i agor rhestr hoffi",
"keyboard_shortcuts.federated": "to open federated timeline", "keyboard_shortcuts.federated": "",
"keyboard_shortcuts.heading": "Keyboard Shortcuts", "keyboard_shortcuts.heading": "",
"keyboard_shortcuts.home": "to open home timeline", "keyboard_shortcuts.home": "i agor ffrwd cartref",
"keyboard_shortcuts.hotkey": "Hotkey", "keyboard_shortcuts.hotkey": "Hotkey",
"keyboard_shortcuts.legend": "to display this legend", "keyboard_shortcuts.legend": "",
"keyboard_shortcuts.local": "to open local timeline", "keyboard_shortcuts.local": "i agor ffrwd lleol",
"keyboard_shortcuts.mention": "i grybwyll yr awdur", "keyboard_shortcuts.mention": "i grybwyll yr awdur",
"keyboard_shortcuts.muted": "to open muted users list", "keyboard_shortcuts.muted": "i agor rhestr defnyddwyr a dawelwyd",
"keyboard_shortcuts.my_profile": "i agor eich proffil", "keyboard_shortcuts.my_profile": "i agor eich proffil",
"keyboard_shortcuts.notifications": "i agor colofn hysbysiadau", "keyboard_shortcuts.notifications": "i agor colofn hysbysiadau",
"keyboard_shortcuts.pinned": "to open pinned toots list", "keyboard_shortcuts.pinned": "",
"keyboard_shortcuts.profile": "i agor proffil yr awdur", "keyboard_shortcuts.profile": "i agor proffil yr awdur",
"keyboard_shortcuts.reply": "i ateb", "keyboard_shortcuts.reply": "i ateb",
"keyboard_shortcuts.requests": "to open follow requests list", "keyboard_shortcuts.requests": "i agor rhestr ceisiadau dilyn",
"keyboard_shortcuts.search": "to focus search", "keyboard_shortcuts.search": "",
"keyboard_shortcuts.start": "to open \"get started\" column", "keyboard_shortcuts.start": "",
"keyboard_shortcuts.toggle_hidden": "to show/hide text behind CW", "keyboard_shortcuts.toggle_hidden": "",
"keyboard_shortcuts.toot": "i ddechrau tŵt newydd sbon", "keyboard_shortcuts.toot": "i ddechrau tŵt newydd sbon",
"keyboard_shortcuts.unfocus": "to un-focus compose textarea/search", "keyboard_shortcuts.unfocus": "",
"keyboard_shortcuts.up": "to move up in the list", "keyboard_shortcuts.up": "i symud yn uwch yn y rhestr",
"lightbox.close": "Cau", "lightbox.close": "Cau",
"lightbox.next": "Nesaf", "lightbox.next": "Nesaf",
"lightbox.previous": "Previous", "lightbox.previous": "",
"lists.account.add": "Ychwanegwch at restr", "lists.account.add": "Ychwanegwch at restr",
"lists.account.remove": "Remove from list", "lists.account.remove": "",
"lists.delete": "Dileu rhestr", "lists.delete": "Dileu rhestr",
"lists.edit": "Golygwch restr", "lists.edit": "Golygwch restr",
"lists.new.create": "Ychwanegwch restr", "lists.new.create": "Ychwanegwch restr",
"lists.new.title_placeholder": "New list title", "lists.new.title_placeholder": "Teitl rhestr newydd",
"lists.search": "Search among people you follow", "lists.search": "",
"lists.subheading": "Eich rhestrau", "lists.subheading": "Eich rhestrau",
"loading_indicator.label": "Llwytho...", "loading_indicator.label": "Llwytho...",
"media_gallery.toggle_visible": "Toggle visibility", "media_gallery.toggle_visible": "",
"missing_indicator.label": "Heb ei ganfod", "missing_indicator.label": "Heb ei ganfod",
"missing_indicator.sublabel": "Ni ellid canfod yr adnodd hwn", "missing_indicator.sublabel": "Ni ellid canfod yr adnodd hwn",
"mute_modal.hide_notifications": "Cuddiwch hysbysiadau rhag y defnyddiwr hwn?", "mute_modal.hide_notifications": "Cuddiwch hysbysiadau rhag y defnyddiwr hwn?",
"navigation_bar.apps": "Apiau symudol", "navigation_bar.apps": "Apiau symudol",
"navigation_bar.blocks": "Defnyddwyr wedi eu blocio", "navigation_bar.blocks": "Defnyddwyr wedi eu blocio",
"navigation_bar.community_timeline": "Local timeline", "navigation_bar.community_timeline": "",
"navigation_bar.compose": "Cyfansoddwch dŵt newydd", "navigation_bar.compose": "Cyfansoddwch dŵt newydd",
"navigation_bar.direct": "Negeseuon preifat", "navigation_bar.direct": "Negeseuon preifat",
"navigation_bar.discover": "Darganfyddwch", "navigation_bar.discover": "Darganfyddwch",
"navigation_bar.domain_blocks": "Parthau cuddiedig", "navigation_bar.domain_blocks": "Parthau cuddiedig",
"navigation_bar.edit_profile": "Golygu proffil", "navigation_bar.edit_profile": "Golygu proffil",
"navigation_bar.favourites": "Ffefrynnau", "navigation_bar.favourites": "Ffefrynnau",
"navigation_bar.filters": "Muted words", "navigation_bar.filters": "Geiriau a dawelwyd",
"navigation_bar.follow_requests": "Ceisiadau dilyn", "navigation_bar.follow_requests": "Ceisiadau dilyn",
"navigation_bar.info": "About this instance", "navigation_bar.info": "",
"navigation_bar.keyboard_shortcuts": "Hotkeys", "navigation_bar.keyboard_shortcuts": "",
"navigation_bar.lists": "Rhestrau", "navigation_bar.lists": "Rhestrau",
"navigation_bar.logout": "Allgofnodi", "navigation_bar.logout": "Allgofnodi",
"navigation_bar.mutes": "Muted users", "navigation_bar.mutes": "Defnyddwyr a dawelwyd",
"navigation_bar.personal": "Personol", "navigation_bar.personal": "Personol",
"navigation_bar.pins": "Tŵtiau wedi eu pinio", "navigation_bar.pins": "Tŵtiau wedi eu pinio",
"navigation_bar.preferences": "Dewisiadau", "navigation_bar.preferences": "Dewisiadau",
"navigation_bar.public_timeline": "Federated timeline", "navigation_bar.public_timeline": "",
"navigation_bar.security": "Diogelwch", "navigation_bar.security": "Diogelwch",
"notification.favourite": "hoffodd {name} eich statws", "notification.favourite": "hoffodd {name} eich statws",
"notification.follow": "dilynodd {name} chi", "notification.follow": "dilynodd {name} chi",
"notification.mention": "{name} mentioned you", "notification.mention": "Soniodd {name} amdanoch chi",
"notification.reblog": "{name} boosted your status", "notification.reblog": "",
"notifications.clear": "Clirio hysbysiadau", "notifications.clear": "Clirio hysbysiadau",
"notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.clear_confirmation": "",
"notifications.column_settings.alert": "Desktop notifications", "notifications.column_settings.alert": "",
"notifications.column_settings.favourite": "Ffefrynnau:", "notifications.column_settings.favourite": "Ffefrynnau:",
"notifications.column_settings.follow": "Dilynwyr newydd:", "notifications.column_settings.follow": "Dilynwyr newydd:",
"notifications.column_settings.mention": "Mentions:", "notifications.column_settings.mention": "",
"notifications.column_settings.push": "Push notifications", "notifications.column_settings.push": "Hysbysiadau push",
"notifications.column_settings.push_meta": "This device", "notifications.column_settings.reblog": "",
"notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.show": "",
"notifications.column_settings.show": "Show in column",
"notifications.column_settings.sound": "Chwarae sain", "notifications.column_settings.sound": "Chwarae sain",
"notifications.group": "{count} o hysbysiadau", "notifications.group": "{count} o hysbysiadau",
"onboarding.done": "Done", "onboarding.done": "Wedi'i wneud",
"onboarding.next": "Nesaf", "onboarding.next": "Nesaf",
"onboarding.page_five.public_timelines": "The local timeline shows public posts from everyone on {domain}. The federated timeline shows public posts from everyone who people on {domain} follow. These are the Public Timelines, a great way to discover new people.", "onboarding.page_five.public_timelines": "",
"onboarding.page_four.home": "The home timeline shows posts from people you follow.", "onboarding.page_four.home": "Mae'r ffrwd gartref yn dangos twtiau o bobl yr ydych yn dilyn.",
"onboarding.page_four.notifications": "The notifications column shows when someone interacts with you.", "onboarding.page_four.notifications": "",
"onboarding.page_one.federation": "Mastodon is a network of independent servers joining up to make one larger social network. We call these servers instances.", "onboarding.page_one.federation": "",
"onboarding.page_one.full_handle": "Your full handle", "onboarding.page_one.full_handle": "",
"onboarding.page_one.handle_hint": "This is what you would tell your friends to search for.", "onboarding.page_one.handle_hint": "",
"onboarding.page_one.welcome": "Croeso i Mastodon!", "onboarding.page_one.welcome": "Croeso i Mastodon!",
"onboarding.page_six.admin": "Your instance's admin is {admin}.", "onboarding.page_six.admin": "",
"onboarding.page_six.almost_done": "Almost done...", "onboarding.page_six.almost_done": "Bron a gorffen...",
"onboarding.page_six.appetoot": "Bon Apetŵt!", "onboarding.page_six.appetoot": "Bon Apetŵt!",
"onboarding.page_six.apps_available": "There are {apps} available for iOS, Android and other platforms.", "onboarding.page_six.apps_available": "Mae yna {apps} ar gael i iOS, Android a platfformau eraill.",
"onboarding.page_six.github": "Mastodon is free open-source software. You can report bugs, request features, or contribute to the code on {github}.", "onboarding.page_six.github": "Mae Mastodon yn feddalwedd côd agored rhad ac am ddim. Mae modd adrodd bygiau, gwneud ceisiadau am nodweddion penodol, neu gyfrannu i'r côd ar {github}.",
"onboarding.page_six.guidelines": "canllawiau cymunedol", "onboarding.page_six.guidelines": "canllawiau cymunedol",
"onboarding.page_six.read_guidelines": "Please read {domain}'s {guidelines}!", "onboarding.page_six.read_guidelines": "Darllenwch {guidelines} y {domain} os gwelwch yn dda!",
"onboarding.page_six.various_app": "apiau symudol", "onboarding.page_six.various_app": "apiau symudol",
"onboarding.page_three.profile": "Edit your profile to change your avatar, bio, and display name. There, you will also find other preferences.", "onboarding.page_three.profile": "",
"onboarding.page_three.search": "Use the search bar to find people and look at hashtags, such as {illustration} and {introductions}. To look for a person who is not on this instance, use their full handle.", "onboarding.page_three.search": "",
"onboarding.page_two.compose": "Write posts from the compose column. You can upload images, change privacy settings, and add content warnings with the icons below.", "onboarding.page_two.compose": "",
"onboarding.skip": "Skip", "onboarding.skip": "Sgipiwch",
"privacy.change": "Adjust status privacy", "privacy.change": "",
"privacy.direct.long": "Post to mentioned users only", "privacy.direct.long": "",
"privacy.direct.short": "Direct", "privacy.direct.short": "Uniongyrchol",
"privacy.private.long": "Post to followers only", "privacy.private.long": "Cyhoeddi i ddilynwyr yn unig",
"privacy.private.short": "Dilynwyr-yn-unig", "privacy.private.short": "Dilynwyr-yn-unig",
"privacy.public.long": "Post to public timelines", "privacy.public.long": "Cyhoeddi i ffrydiau cyhoeddus",
"privacy.public.short": "Cyhoeddus", "privacy.public.short": "Cyhoeddus",
"privacy.unlisted.long": "Do not show in public timelines", "privacy.unlisted.long": "Peidio a cyhoeddi i ffrydiau cyhoeddus",
"privacy.unlisted.short": "Heb ei restru", "privacy.unlisted.short": "Heb ei restru",
"regeneration_indicator.label": "Llwytho…", "regeneration_indicator.label": "Llwytho…",
"regeneration_indicator.sublabel": "Mae eich ffrwd cartref yn cael ei baratoi!", "regeneration_indicator.sublabel": "Mae eich ffrwd cartref yn cael ei baratoi!",
@ -259,79 +257,79 @@
"relative_time.minutes": "{number}m", "relative_time.minutes": "{number}m",
"relative_time.seconds": "{number}s", "relative_time.seconds": "{number}s",
"reply_indicator.cancel": "Canslo", "reply_indicator.cancel": "Canslo",
"report.forward": "Forward to {target}", "report.forward": "",
"report.forward_hint": "The account is from another server. Send an anonymized copy of the report there as well?", "report.forward_hint": "",
"report.hint": "The report will be sent to your instance moderators. You can provide an explanation of why you are reporting this account below:", "report.hint": "",
"report.placeholder": "Sylwadau ychwanegol", "report.placeholder": "Sylwadau ychwanegol",
"report.submit": "Submit", "report.submit": "Cyflwyno",
"report.target": "Report {target}", "report.target": "",
"search.placeholder": "Chwilio", "search.placeholder": "Chwilio",
"search_popout.search_format": "Advanced search format", "search_popout.search_format": "Fformat chwilio uwch",
"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.full_text": "",
"search_popout.tips.hashtag": "hashnod", "search_popout.tips.hashtag": "hashnod",
"search_popout.tips.status": "statws", "search_popout.tips.status": "statws",
"search_popout.tips.text": "Simple text returns matching display names, usernames and hashtags", "search_popout.tips.text": "",
"search_popout.tips.user": "defnyddiwr", "search_popout.tips.user": "defnyddiwr",
"search_results.accounts": "Pobl", "search_results.accounts": "Pobl",
"search_results.hashtags": "Hanshnodau", "search_results.hashtags": "Hanshnodau",
"search_results.statuses": "Twtiau", "search_results.statuses": "Twtiau",
"search_results.total": "{count, number} {count, plural, one {result} other {results}}", "search_results.total": "",
"standalone.public_title": "A look inside...", "standalone.public_title": "Golwg tu fewn...",
"status.block": "Block @{name}", "status.block": "Blociwch @{name}",
"status.cancel_reblog_private": "Unboost", "status.cancel_reblog_private": "",
"status.cannot_reblog": "This post cannot be boosted", "status.cannot_reblog": "",
"status.delete": "Dileu", "status.delete": "Dileu",
"status.detailed_status": "Detailed conversation view", "status.detailed_status": "",
"status.direct": "Neges breifat @{name}", "status.direct": "Neges breifat @{name}",
"status.embed": "Plannu", "status.embed": "Plannu",
"status.favourite": "Favourite", "status.favourite": "",
"status.filtered": "Filtered", "status.filtered": "",
"status.load_more": "Llwythwch mwy", "status.load_more": "Llwythwch mwy",
"status.media_hidden": "Media hidden", "status.media_hidden": "",
"status.mention": "Mention @{name}", "status.mention": "",
"status.more": "Mwy", "status.more": "Mwy",
"status.mute": "Mute @{name}", "status.mute": "Tawelu @{name}",
"status.mute_conversation": "Mute conversation", "status.mute_conversation": "",
"status.open": "Expand this status", "status.open": "",
"status.pin": "Pin on profile", "status.pin": "",
"status.pinned": "Pinned toot", "status.pinned": "",
"status.reblog": "Boost", "status.reblog": "",
"status.reblog_private": "Boost to original audience", "status.reblog_private": "",
"status.reblogged_by": "{name} boosted", "status.reblogged_by": "",
"status.reblogs.empty": "No one has boosted this toot yet. When someone does, they will show up here.", "status.reblogs.empty": "",
"status.redraft": "Delete & re-draft", "status.redraft": "Dilëwh & ailddrafftio",
"status.reply": "Ateb", "status.reply": "Ateb",
"status.replyAll": "Ateb i edefyn", "status.replyAll": "Ateb i edefyn",
"status.report": "Report @{name}", "status.report": "",
"status.sensitive_toggle": "Click to view", "status.sensitive_toggle": "",
"status.sensitive_warning": "Cynnwys sensitif", "status.sensitive_warning": "Cynnwys sensitif",
"status.share": "Rhannwch", "status.share": "Rhannwch",
"status.show_less": "Dangoswch lai", "status.show_less": "Dangoswch lai",
"status.show_less_all": "Dangoswch lai i bawb", "status.show_less_all": "Dangoswch lai i bawb",
"status.show_more": "Dangoswch fwy", "status.show_more": "Dangoswch fwy",
"status.show_more_all": "Show more for all", "status.show_more_all": "",
"status.unmute_conversation": "Unmute conversation", "status.unmute_conversation": "Dad-dawelu sgwrs",
"status.unpin": "Unpin from profile", "status.unpin": "",
"tabs_bar.federated_timeline": "Federated", "tabs_bar.federated_timeline": "",
"tabs_bar.home": "Hafan", "tabs_bar.home": "Hafan",
"tabs_bar.local_timeline": "Lleol", "tabs_bar.local_timeline": "Lleol",
"tabs_bar.notifications": "Hysbysiadau", "tabs_bar.notifications": "Hysbysiadau",
"tabs_bar.search": "Chwilio", "tabs_bar.search": "Chwilio",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking", "trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} yn siarad",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.", "ui.beforeunload": "Mi fyddwch yn colli eich drafft os gadewch Mastodon.",
"upload_area.title": "Drag & drop to upload", "upload_area.title": "Llusgwch & gollwing i uwchlwytho",
"upload_button.label": "Add media (JPEG, PNG, GIF, WebM, MP4, MOV)", "upload_button.label": "Ychwanegwch gyfryngau (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_form.description": "Describe for the visually impaired", "upload_form.description": "",
"upload_form.focus": "Crop", "upload_form.focus": "",
"upload_form.undo": "Delete", "upload_form.undo": "Dileu",
"upload_progress.label": "Uwchlwytho...", "upload_progress.label": "Uwchlwytho...",
"video.close": "Close video", "video.close": "Cau fideo",
"video.exit_fullscreen": "Exit full screen", "video.exit_fullscreen": "Gadael sgrîn llawn",
"video.expand": "Expand video", "video.expand": "Ymestyn fideo",
"video.fullscreen": "Full screen", "video.fullscreen": "Sgrîn llawn",
"video.hide": "Hide video", "video.hide": "Cuddio fideo",
"video.mute": "Mute sound", "video.mute": "Tawelu sain",
"video.pause": "Pause", "video.pause": "Oedi",
"video.play": "Chwarae", "video.play": "Chwarae",
"video.unmute": "Unmute sound" "video.unmute": "Dad-dawelu sain"
} }

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Nye følgere:", "notifications.column_settings.follow": "Nye følgere:",
"notifications.column_settings.mention": "Omtale:", "notifications.column_settings.mention": "Omtale:",
"notifications.column_settings.push": "Push notifikationer", "notifications.column_settings.push": "Push notifikationer",
"notifications.column_settings.push_meta": "Denne enhed",
"notifications.column_settings.reblog": "Fremhævelser:", "notifications.column_settings.reblog": "Fremhævelser:",
"notifications.column_settings.show": "Vis i kolonne", "notifications.column_settings.show": "Vis i kolonne",
"notifications.column_settings.sound": "Afspil lyd", "notifications.column_settings.sound": "Afspil lyd",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Neue Folgende:", "notifications.column_settings.follow": "Neue Folgende:",
"notifications.column_settings.mention": "Erwähnungen:", "notifications.column_settings.mention": "Erwähnungen:",
"notifications.column_settings.push": "Push-Benachrichtigungen", "notifications.column_settings.push": "Push-Benachrichtigungen",
"notifications.column_settings.push_meta": "Auf diesem Gerät",
"notifications.column_settings.reblog": "Geteilte Beiträge:", "notifications.column_settings.reblog": "Geteilte Beiträge:",
"notifications.column_settings.show": "In der Spalte anzeigen", "notifications.column_settings.show": "In der Spalte anzeigen",
"notifications.column_settings.sound": "Ton abspielen", "notifications.column_settings.sound": "Ton abspielen",

@ -1541,10 +1541,6 @@
"defaultMessage": "Push notifications", "defaultMessage": "Push notifications",
"id": "notifications.column_settings.push" "id": "notifications.column_settings.push"
}, },
{
"defaultMessage": "This device",
"id": "notifications.column_settings.push_meta"
},
{ {
"defaultMessage": "New followers:", "defaultMessage": "New followers:",
"id": "notifications.column_settings.follow" "id": "notifications.column_settings.follow"

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Νέοι ακόλουθοι:", "notifications.column_settings.follow": "Νέοι ακόλουθοι:",
"notifications.column_settings.mention": "Αναφορές:", "notifications.column_settings.mention": "Αναφορές:",
"notifications.column_settings.push": "Άμεσες ειδοποιήσεις", "notifications.column_settings.push": "Άμεσες ειδοποιήσεις",
"notifications.column_settings.push_meta": "Αυτή η συσκευή",
"notifications.column_settings.reblog": "Προωθήσεις:", "notifications.column_settings.reblog": "Προωθήσεις:",
"notifications.column_settings.show": "Εμφάνισε σε στήλη", "notifications.column_settings.show": "Εμφάνισε σε στήλη",
"notifications.column_settings.sound": "Ηχητική ειδοποίηση", "notifications.column_settings.sound": "Ηχητική ειδοποίηση",

@ -221,7 +221,6 @@
"notifications.column_settings.follow": "New followers:", "notifications.column_settings.follow": "New followers:",
"notifications.column_settings.mention": "Mentions:", "notifications.column_settings.mention": "Mentions:",
"notifications.column_settings.push": "Push notifications", "notifications.column_settings.push": "Push notifications",
"notifications.column_settings.push_meta": "This device",
"notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.reblog": "Boosts:",
"notifications.column_settings.show": "Show in column", "notifications.column_settings.show": "Show in column",
"notifications.column_settings.sound": "Play sound", "notifications.column_settings.sound": "Play sound",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Novaj sekvantoj:", "notifications.column_settings.follow": "Novaj sekvantoj:",
"notifications.column_settings.mention": "Mencioj:", "notifications.column_settings.mention": "Mencioj:",
"notifications.column_settings.push": "Puŝsciigoj", "notifications.column_settings.push": "Puŝsciigoj",
"notifications.column_settings.push_meta": "Ĉi tiu aparato",
"notifications.column_settings.reblog": "Diskonigoj:", "notifications.column_settings.reblog": "Diskonigoj:",
"notifications.column_settings.show": "Montri en kolumno", "notifications.column_settings.show": "Montri en kolumno",
"notifications.column_settings.sound": "Eligi sonon", "notifications.column_settings.sound": "Eligi sonon",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Nuevos seguidores:", "notifications.column_settings.follow": "Nuevos seguidores:",
"notifications.column_settings.mention": "Menciones:", "notifications.column_settings.mention": "Menciones:",
"notifications.column_settings.push": "Notificaciones push", "notifications.column_settings.push": "Notificaciones push",
"notifications.column_settings.push_meta": "Este dispositivo",
"notifications.column_settings.reblog": "Retoots:", "notifications.column_settings.reblog": "Retoots:",
"notifications.column_settings.show": "Mostrar en columna", "notifications.column_settings.show": "Mostrar en columna",
"notifications.column_settings.sound": "Reproducir sonido", "notifications.column_settings.sound": "Reproducir sonido",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Jarraitzaile berriak:", "notifications.column_settings.follow": "Jarraitzaile berriak:",
"notifications.column_settings.mention": "Aipamenak:", "notifications.column_settings.mention": "Aipamenak:",
"notifications.column_settings.push": "Push jakinarazpenak", "notifications.column_settings.push": "Push jakinarazpenak",
"notifications.column_settings.push_meta": "Gailu hau",
"notifications.column_settings.reblog": "Bultzadak:", "notifications.column_settings.reblog": "Bultzadak:",
"notifications.column_settings.show": "Erakutsi zutabean", "notifications.column_settings.show": "Erakutsi zutabean",
"notifications.column_settings.sound": "Jo soinua", "notifications.column_settings.sound": "Jo soinua",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "پیگیران تازه:", "notifications.column_settings.follow": "پیگیران تازه:",
"notifications.column_settings.mention": "نام‌بردن‌ها:", "notifications.column_settings.mention": "نام‌بردن‌ها:",
"notifications.column_settings.push": "اعلان‌ها از سمت سرور", "notifications.column_settings.push": "اعلان‌ها از سمت سرور",
"notifications.column_settings.push_meta": "این دستگاه",
"notifications.column_settings.reblog": "بازبوق‌ها:", "notifications.column_settings.reblog": "بازبوق‌ها:",
"notifications.column_settings.show": "نمایش در ستون", "notifications.column_settings.show": "نمایش در ستون",
"notifications.column_settings.sound": "پخش صدا", "notifications.column_settings.sound": "پخش صدا",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Uudet seuraajat:", "notifications.column_settings.follow": "Uudet seuraajat:",
"notifications.column_settings.mention": "Maininnat:", "notifications.column_settings.mention": "Maininnat:",
"notifications.column_settings.push": "Push-ilmoitukset", "notifications.column_settings.push": "Push-ilmoitukset",
"notifications.column_settings.push_meta": "Tämä laite",
"notifications.column_settings.reblog": "Buustit:", "notifications.column_settings.reblog": "Buustit:",
"notifications.column_settings.show": "Näytä sarakkeessa", "notifications.column_settings.show": "Näytä sarakkeessa",
"notifications.column_settings.sound": "Äänimerkki", "notifications.column_settings.sound": "Äänimerkki",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Nouveaux⋅elles abonné⋅e·s:", "notifications.column_settings.follow": "Nouveaux⋅elles abonné⋅e·s:",
"notifications.column_settings.mention": "Mentions:", "notifications.column_settings.mention": "Mentions:",
"notifications.column_settings.push": "Notifications", "notifications.column_settings.push": "Notifications",
"notifications.column_settings.push_meta": "Cet appareil",
"notifications.column_settings.reblog": "Partages:", "notifications.column_settings.reblog": "Partages:",
"notifications.column_settings.show": "Afficher dans la colonne", "notifications.column_settings.show": "Afficher dans la colonne",
"notifications.column_settings.sound": "Émettre un son", "notifications.column_settings.sound": "Émettre un son",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Novos seguidores:", "notifications.column_settings.follow": "Novos seguidores:",
"notifications.column_settings.mention": "Mencións:", "notifications.column_settings.mention": "Mencións:",
"notifications.column_settings.push": "Enviar notificacións", "notifications.column_settings.push": "Enviar notificacións",
"notifications.column_settings.push_meta": "Este aparello",
"notifications.column_settings.reblog": "Promocións:", "notifications.column_settings.reblog": "Promocións:",
"notifications.column_settings.show": "Mostrar en columna", "notifications.column_settings.show": "Mostrar en columna",
"notifications.column_settings.sound": "Reproducir son", "notifications.column_settings.sound": "Reproducir son",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "עוקבים חדשים:", "notifications.column_settings.follow": "עוקבים חדשים:",
"notifications.column_settings.mention": "פניות:", "notifications.column_settings.mention": "פניות:",
"notifications.column_settings.push": "הודעות בדחיפה", "notifications.column_settings.push": "הודעות בדחיפה",
"notifications.column_settings.push_meta": "מכשיר זה",
"notifications.column_settings.reblog": "הדהודים:", "notifications.column_settings.reblog": "הדהודים:",
"notifications.column_settings.show": "הצגה בטור", "notifications.column_settings.show": "הצגה בטור",
"notifications.column_settings.sound": "שמע מופעל", "notifications.column_settings.sound": "שמע מופעל",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Novi sljedbenici:", "notifications.column_settings.follow": "Novi sljedbenici:",
"notifications.column_settings.mention": "Spominjanja:", "notifications.column_settings.mention": "Spominjanja:",
"notifications.column_settings.push": "Push notifications", "notifications.column_settings.push": "Push notifications",
"notifications.column_settings.push_meta": "This device",
"notifications.column_settings.reblog": "Boostovi:", "notifications.column_settings.reblog": "Boostovi:",
"notifications.column_settings.show": "Prikaži u stupcu", "notifications.column_settings.show": "Prikaži u stupcu",
"notifications.column_settings.sound": "Sviraj zvuk", "notifications.column_settings.sound": "Sviraj zvuk",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Új követők:", "notifications.column_settings.follow": "Új követők:",
"notifications.column_settings.mention": "Megemítéseim:", "notifications.column_settings.mention": "Megemítéseim:",
"notifications.column_settings.push": "Push értesítések", "notifications.column_settings.push": "Push értesítések",
"notifications.column_settings.push_meta": "Ezen eszköz",
"notifications.column_settings.reblog": "Rebloggolások:", "notifications.column_settings.reblog": "Rebloggolások:",
"notifications.column_settings.show": "Oszlopban mutatás", "notifications.column_settings.show": "Oszlopban mutatás",
"notifications.column_settings.sound": "Hang lejátszása", "notifications.column_settings.sound": "Hang lejátszása",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Նոր հետեւողներ՝", "notifications.column_settings.follow": "Նոր հետեւողներ՝",
"notifications.column_settings.mention": "Նշումներ՝", "notifications.column_settings.mention": "Նշումներ՝",
"notifications.column_settings.push": "Հրելու ծանուցումներ", "notifications.column_settings.push": "Հրելու ծանուցումներ",
"notifications.column_settings.push_meta": "Այս սարքը",
"notifications.column_settings.reblog": "Տարածածներից՝", "notifications.column_settings.reblog": "Տարածածներից՝",
"notifications.column_settings.show": "Ցուցադրել սյունում", "notifications.column_settings.show": "Ցուցադրել սյունում",
"notifications.column_settings.sound": "Ձայն հանել", "notifications.column_settings.sound": "Ձայն հանել",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Pengikut baru:", "notifications.column_settings.follow": "Pengikut baru:",
"notifications.column_settings.mention": "Balasan:", "notifications.column_settings.mention": "Balasan:",
"notifications.column_settings.push": "Push notifications", "notifications.column_settings.push": "Push notifications",
"notifications.column_settings.push_meta": "This device",
"notifications.column_settings.reblog": "Boost:", "notifications.column_settings.reblog": "Boost:",
"notifications.column_settings.show": "Tampilkan dalam kolom", "notifications.column_settings.show": "Tampilkan dalam kolom",
"notifications.column_settings.sound": "Mainkan suara", "notifications.column_settings.sound": "Mainkan suara",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Nova sequanti:", "notifications.column_settings.follow": "Nova sequanti:",
"notifications.column_settings.mention": "Mencioni:", "notifications.column_settings.mention": "Mencioni:",
"notifications.column_settings.push": "Push notifications", "notifications.column_settings.push": "Push notifications",
"notifications.column_settings.push_meta": "This device",
"notifications.column_settings.reblog": "Repeti:", "notifications.column_settings.reblog": "Repeti:",
"notifications.column_settings.show": "Montrar en kolumno", "notifications.column_settings.show": "Montrar en kolumno",
"notifications.column_settings.sound": "Plear sono", "notifications.column_settings.sound": "Plear sono",

@ -3,7 +3,7 @@
"account.block": "Blocca @{name}", "account.block": "Blocca @{name}",
"account.block_domain": "Nascondi tutto da {domain}", "account.block_domain": "Nascondi tutto da {domain}",
"account.blocked": "Bloccato", "account.blocked": "Bloccato",
"account.direct": "Direct Message @{name}", "account.direct": "Invia messaggio diretto a @{name}",
"account.disclaimer_full": "Il profilo dell'utente mostrato qui sotto potrebbe essere incompleto.", "account.disclaimer_full": "Il profilo dell'utente mostrato qui sotto potrebbe essere incompleto.",
"account.domain_blocked": "Dominio nascosto", "account.domain_blocked": "Dominio nascosto",
"account.edit_profile": "Modifica profilo", "account.edit_profile": "Modifica profilo",
@ -54,7 +54,7 @@
"column.lists": "Liste", "column.lists": "Liste",
"column.mutes": "Utenti silenziati", "column.mutes": "Utenti silenziati",
"column.notifications": "Notifiche", "column.notifications": "Notifiche",
"column.pins": "Pinned toot", "column.pins": "Toot fissati in cima",
"column.public": "Timeline federata", "column.public": "Timeline federata",
"column_back_button.label": "Indietro", "column_back_button.label": "Indietro",
"column_header.hide_settings": "Nascondi impostazioni", "column_header.hide_settings": "Nascondi impostazioni",
@ -79,11 +79,11 @@
"compose_form.spoiler.unmarked": "Il testo non è nascosto", "compose_form.spoiler.unmarked": "Il testo non è nascosto",
"compose_form.spoiler_placeholder": "Content warning", "compose_form.spoiler_placeholder": "Content warning",
"confirmation_modal.cancel": "Annulla", "confirmation_modal.cancel": "Annulla",
"confirmations.block.confirm": "Block", "confirmations.block.confirm": "Blocca",
"confirmations.block.message": "Sei sicuro di voler bloccare {name}?", "confirmations.block.message": "Sei sicuro di voler bloccare {name}?",
"confirmations.delete.confirm": "Delete", "confirmations.delete.confirm": "Cancella",
"confirmations.delete.message": "Sei sicuro di voler cancellare questo status?", "confirmations.delete.message": "Sei sicuro di voler cancellare questo status?",
"confirmations.delete_list.confirm": "Delete", "confirmations.delete_list.confirm": "Cancella",
"confirmations.delete_list.message": "Sei sicuro di voler cancellare definitivamente questa lista?", "confirmations.delete_list.message": "Sei sicuro di voler cancellare definitivamente questa lista?",
"confirmations.domain_block.confirm": "Nascondi intero dominio", "confirmations.domain_block.confirm": "Nascondi intero dominio",
"confirmations.domain_block.message": "Sei davvero sicuro che vuoi bloccare l'intero {domain}? Nella maggior parte dei casi, pochi blocchi o silenziamenti mirati sono sufficienti e preferibili. Non vedrai nessun contenuto di quel dominio né nelle timeline pubbliche né nelle notifiche. I tuoi seguaci di quel dominio saranno eliminati.", "confirmations.domain_block.message": "Sei davvero sicuro che vuoi bloccare l'intero {domain}? Nella maggior parte dei casi, pochi blocchi o silenziamenti mirati sono sufficienti e preferibili. Non vedrai nessun contenuto di quel dominio né nelle timeline pubbliche né nelle notifiche. I tuoi seguaci di quel dominio saranno eliminati.",
@ -119,7 +119,7 @@
"empty_column.hashtag": "Non c'è ancora nessun post con questo hashtag.", "empty_column.hashtag": "Non c'è ancora nessun post con questo hashtag.",
"empty_column.home": "Non stai ancora seguendo nessuno. Visita {public} o usa la ricerca per incontrare nuove persone.", "empty_column.home": "Non stai ancora seguendo nessuno. Visita {public} o usa la ricerca per incontrare nuove persone.",
"empty_column.home.public_timeline": "la timeline pubblica", "empty_column.home.public_timeline": "la timeline pubblica",
"empty_column.list": "Non c'è niente in questo elenco ancora. Quando i membri di questo elenco postano nuovi stati, questi appariranno qui.", "empty_column.list": "Non c'è ancora niente in questa lista. Quando i membri di questa lista pubblicheranno nuovi stati, appariranno qui.",
"empty_column.lists": "Non hai ancora nessuna lista. Quando ne creerai qualcuna, comparirà qui.", "empty_column.lists": "Non hai ancora nessuna lista. Quando ne creerai qualcuna, comparirà qui.",
"empty_column.mutes": "Non hai ancora silenziato nessun utente.", "empty_column.mutes": "Non hai ancora silenziato nessun utente.",
"empty_column.notifications": "Non hai ancora nessuna notifica. Interagisci con altri per iniziare conversazioni.", "empty_column.notifications": "Non hai ancora nessuna notifica. Interagisci con altri per iniziare conversazioni.",
@ -179,7 +179,7 @@
"lists.new.title_placeholder": "Titolo della nuova lista", "lists.new.title_placeholder": "Titolo della nuova lista",
"lists.search": "Cerca tra le persone che segui", "lists.search": "Cerca tra le persone che segui",
"lists.subheading": "Le tue liste", "lists.subheading": "Le tue liste",
"loading_indicator.label": "Carico...", "loading_indicator.label": "Caricamento...",
"media_gallery.toggle_visible": "Imposta visibilità", "media_gallery.toggle_visible": "Imposta visibilità",
"missing_indicator.label": "Non trovato", "missing_indicator.label": "Non trovato",
"missing_indicator.sublabel": "Risorsa non trovata", "missing_indicator.sublabel": "Risorsa non trovata",
@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Nuovi seguaci:", "notifications.column_settings.follow": "Nuovi seguaci:",
"notifications.column_settings.mention": "Menzioni:", "notifications.column_settings.mention": "Menzioni:",
"notifications.column_settings.push": "Notifiche push", "notifications.column_settings.push": "Notifiche push",
"notifications.column_settings.push_meta": "Questo dispositivo",
"notifications.column_settings.reblog": "Post condivisi:", "notifications.column_settings.reblog": "Post condivisi:",
"notifications.column_settings.show": "Mostra in colonna", "notifications.column_settings.show": "Mostra in colonna",
"notifications.column_settings.sound": "Riproduci suono", "notifications.column_settings.sound": "Riproduci suono",
@ -242,7 +241,7 @@
"onboarding.page_three.search": "Usa la barra di ricerca per trovare persone e hashtag, come {illustration} e {introductions}. Per trovare una persona che non è su questa istanza, usa il suo nome utente completo.", "onboarding.page_three.search": "Usa la barra di ricerca per trovare persone e hashtag, come {illustration} e {introductions}. Per trovare una persona che non è su questa istanza, usa il suo nome utente completo.",
"onboarding.page_two.compose": "Puoi scrivere dei post dalla colonna di composizione. Puoi caricare immagini, modificare le impostazioni di privacy, e aggiungere avvisi sul contenuto con le icone qui sotto.", "onboarding.page_two.compose": "Puoi scrivere dei post dalla colonna di composizione. Puoi caricare immagini, modificare le impostazioni di privacy, e aggiungere avvisi sul contenuto con le icone qui sotto.",
"onboarding.skip": "Salta", "onboarding.skip": "Salta",
"privacy.change": "Modifica privacy post", "privacy.change": "Modifica privacy del post",
"privacy.direct.long": "Invia solo a utenti menzionati", "privacy.direct.long": "Invia solo a utenti menzionati",
"privacy.direct.short": "Diretto", "privacy.direct.short": "Diretto",
"privacy.private.long": "Invia solo ai seguaci", "privacy.private.long": "Invia solo ai seguaci",
@ -261,7 +260,7 @@
"reply_indicator.cancel": "Annulla", "reply_indicator.cancel": "Annulla",
"report.forward": "Inoltra a {target}", "report.forward": "Inoltra a {target}",
"report.forward_hint": "Questo account appartiene a un altro server. Mandare anche là una copia anonima del rapporto?", "report.forward_hint": "Questo account appartiene a un altro server. Mandare anche là una copia anonima del rapporto?",
"report.hint": "La segnalazione sara' invata ai tuoi moderatori di istanza. Di seguito, puoi fornire il motivo per il quale stai segnalando questo account:", "report.hint": "La segnalazione sarà inviata ai moderatori della tua istanza. Di seguito, puoi fornire il motivo per il quale stai segnalando questo account:",
"report.placeholder": "Commenti aggiuntivi", "report.placeholder": "Commenti aggiuntivi",
"report.submit": "Invia", "report.submit": "Invia",
"report.target": "Invio la segnalazione {target}", "report.target": "Invio la segnalazione {target}",
@ -328,10 +327,10 @@
"video.close": "Chiudi video", "video.close": "Chiudi video",
"video.exit_fullscreen": "Esci da modalità a schermo intero", "video.exit_fullscreen": "Esci da modalità a schermo intero",
"video.expand": "Espandi video", "video.expand": "Espandi video",
"video.fullscreen": "Full screen", "video.fullscreen": "Schermo intero",
"video.hide": "Nascondi video", "video.hide": "Nascondi video",
"video.mute": "Silenzia suono", "video.mute": "Silenzia suono",
"video.pause": "Pause", "video.pause": "Pausa",
"video.play": "Avvia", "video.play": "Avvia",
"video.unmute": "Riattiva suono" "video.unmute": "Riattiva suono"
} }

@ -221,7 +221,6 @@
"notifications.column_settings.follow": "新しいフォロワー:", "notifications.column_settings.follow": "新しいフォロワー:",
"notifications.column_settings.mention": "返信:", "notifications.column_settings.mention": "返信:",
"notifications.column_settings.push": "プッシュ通知", "notifications.column_settings.push": "プッシュ通知",
"notifications.column_settings.push_meta": "このデバイス",
"notifications.column_settings.reblog": "ブースト:", "notifications.column_settings.reblog": "ブースト:",
"notifications.column_settings.show": "カラムに表示", "notifications.column_settings.show": "カラムに表示",
"notifications.column_settings.sound": "通知音を再生", "notifications.column_settings.sound": "通知音を再生",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "ახალი მიმდევრები:", "notifications.column_settings.follow": "ახალი მიმდევრები:",
"notifications.column_settings.mention": "ხსენებები:", "notifications.column_settings.mention": "ხსენებები:",
"notifications.column_settings.push": "ფუშ შეტყობინებები", "notifications.column_settings.push": "ფუშ შეტყობინებები",
"notifications.column_settings.push_meta": "ეს მოწყობილობა",
"notifications.column_settings.reblog": "ბუსტები:", "notifications.column_settings.reblog": "ბუსტები:",
"notifications.column_settings.show": "გამოჩნდეს სვეტში", "notifications.column_settings.show": "გამოჩნდეს სვეტში",
"notifications.column_settings.sound": "ხმის დაკვრა", "notifications.column_settings.sound": "ხმის დაკვრა",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "새 팔로워:", "notifications.column_settings.follow": "새 팔로워:",
"notifications.column_settings.mention": "답글:", "notifications.column_settings.mention": "답글:",
"notifications.column_settings.push": "푸시 알림", "notifications.column_settings.push": "푸시 알림",
"notifications.column_settings.push_meta": "이 장치",
"notifications.column_settings.reblog": "부스트:", "notifications.column_settings.reblog": "부스트:",
"notifications.column_settings.show": "컬럼에 표시", "notifications.column_settings.show": "컬럼에 표시",
"notifications.column_settings.sound": "효과음 재생", "notifications.column_settings.sound": "효과음 재생",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Nieuwe volgers:", "notifications.column_settings.follow": "Nieuwe volgers:",
"notifications.column_settings.mention": "Vermeldingen:", "notifications.column_settings.mention": "Vermeldingen:",
"notifications.column_settings.push": "Pushmeldingen", "notifications.column_settings.push": "Pushmeldingen",
"notifications.column_settings.push_meta": "Dit apparaat",
"notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.reblog": "Boosts:",
"notifications.column_settings.show": "In kolom tonen", "notifications.column_settings.show": "In kolom tonen",
"notifications.column_settings.sound": "Geluid afspelen", "notifications.column_settings.sound": "Geluid afspelen",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Nye følgere:", "notifications.column_settings.follow": "Nye følgere:",
"notifications.column_settings.mention": "Nevnt:", "notifications.column_settings.mention": "Nevnt:",
"notifications.column_settings.push": "Push varsler", "notifications.column_settings.push": "Push varsler",
"notifications.column_settings.push_meta": "Denne enheten",
"notifications.column_settings.reblog": "Fremhevet:", "notifications.column_settings.reblog": "Fremhevet:",
"notifications.column_settings.show": "Vis i kolonne", "notifications.column_settings.show": "Vis i kolonne",
"notifications.column_settings.sound": "Spill lyd", "notifications.column_settings.sound": "Spill lyd",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Nòus seguidors:", "notifications.column_settings.follow": "Nòus seguidors:",
"notifications.column_settings.mention": "Mencions:", "notifications.column_settings.mention": "Mencions:",
"notifications.column_settings.push": "Notificacions", "notifications.column_settings.push": "Notificacions",
"notifications.column_settings.push_meta": "Aqueste periferic",
"notifications.column_settings.reblog": "Partatges:", "notifications.column_settings.reblog": "Partatges:",
"notifications.column_settings.show": "Mostrar dins la colomna", "notifications.column_settings.show": "Mostrar dins la colomna",
"notifications.column_settings.sound": "Emetre un son", "notifications.column_settings.sound": "Emetre un son",

@ -221,7 +221,6 @@
"notifications.column_settings.follow": "Nowi śledzący:", "notifications.column_settings.follow": "Nowi śledzący:",
"notifications.column_settings.mention": "Wspomnienia:", "notifications.column_settings.mention": "Wspomnienia:",
"notifications.column_settings.push": "Powiadomienia push", "notifications.column_settings.push": "Powiadomienia push",
"notifications.column_settings.push_meta": "To urządzenie",
"notifications.column_settings.reblog": "Podbicia:", "notifications.column_settings.reblog": "Podbicia:",
"notifications.column_settings.show": "Pokaż w kolumnie", "notifications.column_settings.show": "Pokaż w kolumnie",
"notifications.column_settings.sound": "Odtwarzaj dźwięk", "notifications.column_settings.sound": "Odtwarzaj dźwięk",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Novos seguidores:", "notifications.column_settings.follow": "Novos seguidores:",
"notifications.column_settings.mention": "Menções:", "notifications.column_settings.mention": "Menções:",
"notifications.column_settings.push": "Enviar notificações", "notifications.column_settings.push": "Enviar notificações",
"notifications.column_settings.push_meta": "Este aparelho",
"notifications.column_settings.reblog": "Compartilhamento:", "notifications.column_settings.reblog": "Compartilhamento:",
"notifications.column_settings.show": "Mostrar nas colunas", "notifications.column_settings.show": "Mostrar nas colunas",
"notifications.column_settings.sound": "Reproduzir som", "notifications.column_settings.sound": "Reproduzir som",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Novos seguidores:", "notifications.column_settings.follow": "Novos seguidores:",
"notifications.column_settings.mention": "Menções:", "notifications.column_settings.mention": "Menções:",
"notifications.column_settings.push": "Notificações Push", "notifications.column_settings.push": "Notificações Push",
"notifications.column_settings.push_meta": "Este dispositivo",
"notifications.column_settings.reblog": "Partilhas:", "notifications.column_settings.reblog": "Partilhas:",
"notifications.column_settings.show": "Mostrar nas colunas", "notifications.column_settings.show": "Mostrar nas colunas",
"notifications.column_settings.sound": "Reproduzir som", "notifications.column_settings.sound": "Reproduzir som",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Noi urmăritori:", "notifications.column_settings.follow": "Noi urmăritori:",
"notifications.column_settings.mention": "Mențiuni:", "notifications.column_settings.mention": "Mențiuni:",
"notifications.column_settings.push": "Notificări push", "notifications.column_settings.push": "Notificări push",
"notifications.column_settings.push_meta": "Acest dispozitiv",
"notifications.column_settings.reblog": "Redistribuite:", "notifications.column_settings.reblog": "Redistribuite:",
"notifications.column_settings.show": "Arată în coloană", "notifications.column_settings.show": "Arată în coloană",
"notifications.column_settings.sound": "Redă sunet", "notifications.column_settings.sound": "Redă sunet",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Новые подписчики:", "notifications.column_settings.follow": "Новые подписчики:",
"notifications.column_settings.mention": "Упоминания:", "notifications.column_settings.mention": "Упоминания:",
"notifications.column_settings.push": "Push-уведомления", "notifications.column_settings.push": "Push-уведомления",
"notifications.column_settings.push_meta": "Это устройство",
"notifications.column_settings.reblog": "Продвижения:", "notifications.column_settings.reblog": "Продвижения:",
"notifications.column_settings.show": "Показывать в колонке", "notifications.column_settings.show": "Показывать в колонке",
"notifications.column_settings.sound": "Проигрывать звук", "notifications.column_settings.sound": "Проигрывать звук",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Noví následujúci:", "notifications.column_settings.follow": "Noví následujúci:",
"notifications.column_settings.mention": "Zmienenia:", "notifications.column_settings.mention": "Zmienenia:",
"notifications.column_settings.push": "Push notifikácie", "notifications.column_settings.push": "Push notifikácie",
"notifications.column_settings.push_meta": "Toto zariadenie",
"notifications.column_settings.reblog": "Boosty:", "notifications.column_settings.reblog": "Boosty:",
"notifications.column_settings.show": "Zobraziť v stĺpci", "notifications.column_settings.show": "Zobraziť v stĺpci",
"notifications.column_settings.sound": "Prehrať zvuk", "notifications.column_settings.sound": "Prehrať zvuk",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "New followers:", "notifications.column_settings.follow": "New followers:",
"notifications.column_settings.mention": "Mentions:", "notifications.column_settings.mention": "Mentions:",
"notifications.column_settings.push": "Push notifications", "notifications.column_settings.push": "Push notifications",
"notifications.column_settings.push_meta": "This device",
"notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.reblog": "Boosts:",
"notifications.column_settings.show": "Show in column", "notifications.column_settings.show": "Show in column",
"notifications.column_settings.sound": "Play sound", "notifications.column_settings.sound": "Play sound",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Novi pratioci:", "notifications.column_settings.follow": "Novi pratioci:",
"notifications.column_settings.mention": "Pominjanja:", "notifications.column_settings.mention": "Pominjanja:",
"notifications.column_settings.push": "Guraj obaveštenja", "notifications.column_settings.push": "Guraj obaveštenja",
"notifications.column_settings.push_meta": "Ovaj uređaj",
"notifications.column_settings.reblog": "Podrški:", "notifications.column_settings.reblog": "Podrški:",
"notifications.column_settings.show": "Prikaži u koloni", "notifications.column_settings.show": "Prikaži u koloni",
"notifications.column_settings.sound": "Puštaj zvuk", "notifications.column_settings.sound": "Puštaj zvuk",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Нови пратиоци:", "notifications.column_settings.follow": "Нови пратиоци:",
"notifications.column_settings.mention": "Помињања:", "notifications.column_settings.mention": "Помињања:",
"notifications.column_settings.push": "Гурај обавештења", "notifications.column_settings.push": "Гурај обавештења",
"notifications.column_settings.push_meta": "Овај уређај",
"notifications.column_settings.reblog": "Подршки:", "notifications.column_settings.reblog": "Подршки:",
"notifications.column_settings.show": "Прикажи у колони", "notifications.column_settings.show": "Прикажи у колони",
"notifications.column_settings.sound": "Пуштај звук", "notifications.column_settings.sound": "Пуштај звук",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Nya följare:", "notifications.column_settings.follow": "Nya följare:",
"notifications.column_settings.mention": "Omnämningar:", "notifications.column_settings.mention": "Omnämningar:",
"notifications.column_settings.push": "Push meddelanden", "notifications.column_settings.push": "Push meddelanden",
"notifications.column_settings.push_meta": "Denna anordning",
"notifications.column_settings.reblog": "Knuffar:", "notifications.column_settings.reblog": "Knuffar:",
"notifications.column_settings.show": "Visa i kolumnen", "notifications.column_settings.show": "Visa i kolumnen",
"notifications.column_settings.sound": "Spela upp ljud", "notifications.column_settings.sound": "Spela upp ljud",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "New followers:", "notifications.column_settings.follow": "New followers:",
"notifications.column_settings.mention": "Mentions:", "notifications.column_settings.mention": "Mentions:",
"notifications.column_settings.push": "Push notifications", "notifications.column_settings.push": "Push notifications",
"notifications.column_settings.push_meta": "This device",
"notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.reblog": "Boosts:",
"notifications.column_settings.show": "Show in column", "notifications.column_settings.show": "Show in column",
"notifications.column_settings.sound": "Play sound", "notifications.column_settings.sound": "Play sound",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "క్రొత్త అనుచరులు:", "notifications.column_settings.follow": "క్రొత్త అనుచరులు:",
"notifications.column_settings.mention": "ప్రస్తావనలు:", "notifications.column_settings.mention": "ప్రస్తావనలు:",
"notifications.column_settings.push": "పుష్ ప్రకటనలు", "notifications.column_settings.push": "పుష్ ప్రకటనలు",
"notifications.column_settings.push_meta": "ఈ పరికరం",
"notifications.column_settings.reblog": "బూస్ట్ లు:", "notifications.column_settings.reblog": "బూస్ట్ లు:",
"notifications.column_settings.show": "నిలువు వరుసలో చూపు", "notifications.column_settings.show": "నిలువు వరుసలో చూపు",
"notifications.column_settings.sound": "ధ్వనిని ప్లే చేయి", "notifications.column_settings.sound": "ధ్వనిని ప్లే చేయి",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "New followers:", "notifications.column_settings.follow": "New followers:",
"notifications.column_settings.mention": "Mentions:", "notifications.column_settings.mention": "Mentions:",
"notifications.column_settings.push": "Push notifications", "notifications.column_settings.push": "Push notifications",
"notifications.column_settings.push_meta": "This device",
"notifications.column_settings.reblog": "Boosts:", "notifications.column_settings.reblog": "Boosts:",
"notifications.column_settings.show": "Show in column", "notifications.column_settings.show": "Show in column",
"notifications.column_settings.sound": "Play sound", "notifications.column_settings.sound": "Play sound",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Yeni takipçiler:", "notifications.column_settings.follow": "Yeni takipçiler:",
"notifications.column_settings.mention": "Bahsedilenler:", "notifications.column_settings.mention": "Bahsedilenler:",
"notifications.column_settings.push": "Push notifications", "notifications.column_settings.push": "Push notifications",
"notifications.column_settings.push_meta": "This device",
"notifications.column_settings.reblog": "Boostlar:", "notifications.column_settings.reblog": "Boostlar:",
"notifications.column_settings.show": "Bildirimlerde göster", "notifications.column_settings.show": "Bildirimlerde göster",
"notifications.column_settings.sound": "Ses çal", "notifications.column_settings.sound": "Ses çal",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "Нові підписники:", "notifications.column_settings.follow": "Нові підписники:",
"notifications.column_settings.mention": "Згадки:", "notifications.column_settings.mention": "Згадки:",
"notifications.column_settings.push": "Push-сповіщення", "notifications.column_settings.push": "Push-сповіщення",
"notifications.column_settings.push_meta": "Цей пристрій",
"notifications.column_settings.reblog": "Передмухи:", "notifications.column_settings.reblog": "Передмухи:",
"notifications.column_settings.show": "Показати в колонці", "notifications.column_settings.show": "Показати в колонці",
"notifications.column_settings.sound": "Відтворювати звуки", "notifications.column_settings.sound": "Відтворювати звуки",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "当有人关注你时:", "notifications.column_settings.follow": "当有人关注你时:",
"notifications.column_settings.mention": "当有人在嘟文中提及你时:", "notifications.column_settings.mention": "当有人在嘟文中提及你时:",
"notifications.column_settings.push": "推送通知", "notifications.column_settings.push": "推送通知",
"notifications.column_settings.push_meta": "此设备",
"notifications.column_settings.reblog": "当有人转嘟了你的嘟文时:", "notifications.column_settings.reblog": "当有人转嘟了你的嘟文时:",
"notifications.column_settings.show": "在通知栏显示", "notifications.column_settings.show": "在通知栏显示",
"notifications.column_settings.sound": "播放音效", "notifications.column_settings.sound": "播放音效",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "關注你:", "notifications.column_settings.follow": "關注你:",
"notifications.column_settings.mention": "提及你:", "notifications.column_settings.mention": "提及你:",
"notifications.column_settings.push": "推送通知", "notifications.column_settings.push": "推送通知",
"notifications.column_settings.push_meta": "這臺設備",
"notifications.column_settings.reblog": "轉推你的文章:", "notifications.column_settings.reblog": "轉推你的文章:",
"notifications.column_settings.show": "在通知欄顯示", "notifications.column_settings.show": "在通知欄顯示",
"notifications.column_settings.sound": "播放音效", "notifications.column_settings.sound": "播放音效",

@ -216,7 +216,6 @@
"notifications.column_settings.follow": "新的關注者:", "notifications.column_settings.follow": "新的關注者:",
"notifications.column_settings.mention": "提到:", "notifications.column_settings.mention": "提到:",
"notifications.column_settings.push": "推送通知", "notifications.column_settings.push": "推送通知",
"notifications.column_settings.push_meta": "這臺設備",
"notifications.column_settings.reblog": "轉嘟:", "notifications.column_settings.reblog": "轉嘟:",
"notifications.column_settings.show": "顯示在欄位中", "notifications.column_settings.show": "顯示在欄位中",
"notifications.column_settings.sound": "播放音效", "notifications.column_settings.sound": "播放音效",

@ -168,7 +168,7 @@ const openUrl = url =>
if (webClients.length !== 0) { if (webClients.length !== 0) {
const client = findBestClient(webClients); const client = findBestClient(webClients);
const { pathname } = new URL(url); const { pathname } = new URL(url, self.location);
if (pathname.startsWith('/web/')) { if (pathname.startsWith('/web/')) {
return client.focus().then(client => client.postMessage({ return client.focus().then(client => client.postMessage({

@ -169,7 +169,7 @@ p {
font-family: Helvetica, Arial, sans-serif; font-family: Helvetica, Arial, sans-serif;
@media only screen { @media only screen {
font-family: 'mastodon-font-sans-serif', sans-serif !important; font-family: $font-sans-serif, sans-serif !important;
} }
} }

@ -16,7 +16,7 @@ $small-breakpoint: 960px;
} }
.rich-formatting { .rich-formatting {
font-family: 'mastodon-font-sans-serif', sans-serif; font-family: $font-sans-serif, sans-serif;
font-size: 16px; font-size: 16px;
font-weight: 400; font-weight: 400;
font-size: 16px; font-size: 16px;
@ -31,7 +31,7 @@ $small-breakpoint: 960px;
p, p,
li { li {
font-family: 'mastodon-font-sans-serif', sans-serif; font-family: $font-sans-serif, sans-serif;
font-size: 16px; font-size: 16px;
font-weight: 400; font-weight: 400;
font-size: 16px; font-size: 16px;
@ -62,7 +62,7 @@ $small-breakpoint: 960px;
} }
h1 { h1 {
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
font-size: 26px; font-size: 26px;
line-height: 30px; line-height: 30px;
font-weight: 500; font-weight: 500;
@ -70,7 +70,7 @@ $small-breakpoint: 960px;
color: $secondary-text-color; color: $secondary-text-color;
small { small {
font-family: 'mastodon-font-sans-serif', sans-serif; font-family: $font-sans-serif, sans-serif;
display: block; display: block;
font-size: 18px; font-size: 18px;
font-weight: 400; font-weight: 400;
@ -79,7 +79,7 @@ $small-breakpoint: 960px;
} }
h2 { h2 {
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
font-size: 22px; font-size: 22px;
line-height: 26px; line-height: 26px;
font-weight: 500; font-weight: 500;
@ -88,7 +88,7 @@ $small-breakpoint: 960px;
} }
h3 { h3 {
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
font-size: 18px; font-size: 18px;
line-height: 24px; line-height: 24px;
font-weight: 500; font-weight: 500;
@ -97,7 +97,7 @@ $small-breakpoint: 960px;
} }
h4 { h4 {
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
font-size: 16px; font-size: 16px;
line-height: 24px; line-height: 24px;
font-weight: 500; font-weight: 500;
@ -106,7 +106,7 @@ $small-breakpoint: 960px;
} }
h5 { h5 {
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
font-size: 14px; font-size: 14px;
line-height: 24px; line-height: 24px;
font-weight: 500; font-weight: 500;
@ -115,7 +115,7 @@ $small-breakpoint: 960px;
} }
h6 { h6 {
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
font-size: 12px; font-size: 12px;
line-height: 24px; line-height: 24px;
font-weight: 500; font-weight: 500;
@ -180,7 +180,7 @@ $small-breakpoint: 960px;
&__section { &__section {
flex: 1 0 0; flex: 1 0 0;
font-family: 'mastodon-font-sans-serif', sans-serif; font-family: $font-sans-serif, sans-serif;
font-size: 16px; font-size: 16px;
line-height: 28px; line-height: 28px;
color: $primary-text-color; color: $primary-text-color;
@ -221,7 +221,7 @@ $small-breakpoint: 960px;
bottom: -40px; bottom: -40px;
.panel-header { .panel-header {
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
font-size: 14px; font-size: 14px;
line-height: 24px; line-height: 24px;
font-weight: 500; font-weight: 500;
@ -450,7 +450,7 @@ $small-breakpoint: 960px;
p, p,
li { li {
font-family: 'mastodon-font-sans-serif', sans-serif; font-family: $font-sans-serif, sans-serif;
font-size: 16px; font-size: 16px;
font-weight: 400; font-weight: 400;
font-size: 16px; font-size: 16px;
@ -499,7 +499,7 @@ $small-breakpoint: 960px;
} }
h1 { h1 {
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
font-size: 26px; font-size: 26px;
line-height: 30px; line-height: 30px;
font-weight: 500; font-weight: 500;
@ -507,7 +507,7 @@ $small-breakpoint: 960px;
color: $secondary-text-color; color: $secondary-text-color;
small { small {
font-family: 'mastodon-font-sans-serif', sans-serif; font-family: $font-sans-serif, sans-serif;
display: block; display: block;
font-size: 18px; font-size: 18px;
font-weight: 400; font-weight: 400;
@ -516,7 +516,7 @@ $small-breakpoint: 960px;
} }
h2 { h2 {
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
font-size: 22px; font-size: 22px;
line-height: 26px; line-height: 26px;
font-weight: 500; font-weight: 500;
@ -525,7 +525,7 @@ $small-breakpoint: 960px;
} }
h3 { h3 {
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
font-size: 18px; font-size: 18px;
line-height: 24px; line-height: 24px;
font-weight: 500; font-weight: 500;
@ -534,7 +534,7 @@ $small-breakpoint: 960px;
} }
h4 { h4 {
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
font-size: 16px; font-size: 16px;
line-height: 24px; line-height: 24px;
font-weight: 500; font-weight: 500;
@ -543,7 +543,7 @@ $small-breakpoint: 960px;
} }
h5 { h5 {
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
font-size: 14px; font-size: 14px;
line-height: 24px; line-height: 24px;
font-weight: 500; font-weight: 500;
@ -552,7 +552,7 @@ $small-breakpoint: 960px;
} }
h6 { h6 {
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
font-size: 12px; font-size: 12px;
line-height: 24px; line-height: 24px;
font-weight: 500; font-weight: 500;
@ -619,7 +619,7 @@ $small-breakpoint: 960px;
.hero .heading { .hero .heading {
padding-bottom: 20px; padding-bottom: 20px;
font-family: 'mastodon-font-sans-serif', sans-serif; font-family: $font-sans-serif, sans-serif;
font-size: 16px; font-size: 16px;
font-weight: 400; font-weight: 400;
font-size: 16px; font-size: 16px;
@ -670,7 +670,7 @@ $small-breakpoint: 960px;
text-decoration: none; text-decoration: none;
padding: 12px 16px; padding: 12px 16px;
line-height: 32px; line-height: 32px;
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
font-weight: 500; font-weight: 500;
font-size: 14px; font-size: 14px;
@ -743,7 +743,7 @@ $small-breakpoint: 960px;
.about-short { .about-short {
background: darken($ui-base-color, 4%); background: darken($ui-base-color, 4%);
padding: 50px 0 30px; padding: 50px 0 30px;
font-family: 'mastodon-font-sans-serif', sans-serif; font-family: $font-sans-serif, sans-serif;
font-size: 16px; font-size: 16px;
font-weight: 400; font-weight: 400;
font-size: 16px; font-size: 16px;
@ -1012,7 +1012,7 @@ $small-breakpoint: 960px;
display: flex; display: flex;
-webkit-overflow-scrolling: touch; -webkit-overflow-scrolling: touch;
-ms-overflow-style: -ms-autohiding-scrollbar; -ms-overflow-style: -ms-autohiding-scrollbar;
font-family: 'mastodon-font-sans-serif', sans-serif; font-family: $font-sans-serif, sans-serif;
font-size: 13px; font-size: 13px;
line-height: 18px; line-height: 18px;
font-weight: 400; font-weight: 400;

@ -432,7 +432,7 @@ $no-columns-breakpoint: 600px;
border-radius: 0 0 4px 4px; border-radius: 0 0 4px 4px;
padding: 10px; padding: 10px;
color: $darker-text-color; color: $darker-text-color;
font-family: 'mastodon-font-monospace', monospace; font-family: $font-monospace, monospace;
font-size: 12px; font-size: 12px;
word-wrap: break-word; word-wrap: break-word;
min-height: 20px; min-height: 20px;

@ -6,7 +6,7 @@
} }
body { body {
font-family: 'mastodon-font-sans-serif', sans-serif; font-family: $font-sans-serif, sans-serif;
background: darken($ui-base-color, 8%); background: darken($ui-base-color, 8%);
font-size: 13px; font-size: 13px;
line-height: 18px; line-height: 18px;
@ -29,8 +29,8 @@ body {
// Fira Sans => Firefox OS // Fira Sans => Firefox OS
// Droid Sans => Older Androids (<4.0) // Droid Sans => Older Androids (<4.0)
// Helvetica Neue => Older macOS <10.11 // Helvetica Neue => Older macOS <10.11
// mastodon-font-sans-serif => web-font (Roboto) fallback and newer Androids (>=4.0) // $font-sans-serif => web-font (Roboto) fallback and newer Androids (>=4.0)
font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", mastodon-font-sans-serif, sans-serif; font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", $font-sans-serif, sans-serif;
} }
&.app-body { &.app-body {

@ -552,7 +552,7 @@
.character-counter { .character-counter {
cursor: default; cursor: default;
font-family: 'mastodon-font-sans-serif', sans-serif; font-family: $font-sans-serif, sans-serif;
font-size: 14px; font-size: 14px;
font-weight: 600; font-weight: 600;
color: $lighter-text-color; color: $lighter-text-color;
@ -631,11 +631,13 @@
.status__content, .status__content,
.reply-indicator__content { .reply-indicator__content {
position: relative;
font-size: 15px; font-size: 15px;
line-height: 20px; line-height: 20px;
word-wrap: break-word; word-wrap: break-word;
font-weight: 400; font-weight: 400;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis;
white-space: pre-wrap; white-space: pre-wrap;
padding-top: 2px; padding-top: 2px;
color: $primary-text-color; color: $primary-text-color;
@ -721,6 +723,26 @@
} }
} }
.status__content.status__content--collapsed {
max-height: 20px * 15; // 15 lines is roughly above 500 characters
}
.status__content__read-more-button {
display: block;
font-size: 15px;
line-height: 20px;
color: lighten($ui-highlight-color, 8%);
border: 0;
background: transparent;
padding: 0;
padding-top: 8px;
&:hover,
&:active {
text-decoration: underline;
}
}
.status__content__spoiler-link { .status__content__spoiler-link {
display: inline-block; display: inline-block;
border-radius: 2px; border-radius: 2px;
@ -3009,8 +3031,7 @@ a.status-card {
line-height: 24px; line-height: 24px;
} }
.setting-toggle__label, .setting-toggle__label {
.setting-meta__label {
color: $darker-text-color; color: $darker-text-color;
display: inline-block; display: inline-block;
margin-bottom: 14px; margin-bottom: 14px;
@ -3018,10 +3039,6 @@ a.status-card {
vertical-align: middle; vertical-align: middle;
} }
.setting-meta__label {
float: right;
}
.empty-column-indicator, .empty-column-indicator,
.error-column { .error-column {
color: $dark-text-color; color: $dark-text-color;
@ -5122,7 +5139,7 @@ noscript {
width: 100%; width: 100%;
border: none; border: none;
padding: 10px; padding: 10px;
font-family: 'mastodon-font-monospace', monospace; font-family: $font-monospace, monospace;
background: $ui-base-color; background: $ui-base-color;
color: $primary-text-color; color: $primary-text-color;
font-size: 14px; font-size: 14px;

@ -37,7 +37,7 @@
outline: 0; outline: 0;
padding: 12px 16px; padding: 12px 16px;
line-height: 32px; line-height: 32px;
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
font-weight: 500; font-weight: 500;
font-size: 14px; font-size: 14px;
} }
@ -627,7 +627,7 @@
font-size: 18px; font-size: 18px;
margin-bottom: 5px; margin-bottom: 5px;
color: $primary-text-color; color: $primary-text-color;
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
} }
} }

@ -35,7 +35,7 @@
font-weight: 500; font-weight: 500;
font-size: 24px; font-size: 24px;
color: $primary-text-color; color: $primary-text-color;
font-family: 'mastodon-font-display', sans-serif; font-family: $font-display, sans-serif;
margin-bottom: 20px; margin-bottom: 20px;
} }

@ -1,7 +1,7 @@
$no-columns-breakpoint: 600px; $no-columns-breakpoint: 600px;
code { code {
font-family: 'mastodon-font-monospace', monospace; font-family: $font-monospace, monospace;
font-weight: 400; font-weight: 400;
} }
@ -474,7 +474,7 @@ code {
width: 100%; width: 100%;
border: none; border: none;
padding: 10px; padding: 10px;
font-family: 'mastodon-font-monospace', monospace; font-family: $font-monospace, monospace;
background: $ui-base-color; background: $ui-base-color;
color: $primary-text-color; color: $primary-text-color;
font-size: 14px; font-size: 14px;
@ -718,7 +718,7 @@ code {
.form_admin_settings_custom_css, .form_admin_settings_custom_css,
.form_admin_settings_closed_registrations_message { .form_admin_settings_closed_registrations_message {
textarea { textarea {
font-family: 'mastodon-font-monospace', monospace; font-family: $font-monospace, monospace;
} }
} }
@ -742,7 +742,7 @@ code {
border: 0; border: 0;
padding: 10px; padding: 10px;
font-size: 14px; font-size: 14px;
font-family: 'mastodon-font-monospace', monospace; font-family: $font-monospace, monospace;
} }
button { button {

@ -46,8 +46,8 @@ body.rtl {
.column-header__buttons { .column-header__buttons {
left: 0; left: 0;
right: auto; right: auto;
margin-left: -15px; margin-left: 0;
margin-right: 0; margin-right: -15px;
} }
.column-inline-form .icon-button { .column-inline-form .icon-button {
@ -78,10 +78,6 @@ body.rtl {
margin-right: 8px; margin-right: 8px;
} }
.setting-meta__label {
float: left;
}
.status__avatar { .status__avatar {
left: auto; left: auto;
right: 10px; right: 10px;
@ -145,6 +141,19 @@ body.rtl {
margin-right: 6px; margin-right: 6px;
} }
.status__action-bar {
&__counter {
margin-right: 0;
margin-left: 11px;
.status__action-bar-button {
margin-right: 0;
margin-left: 4px;
}
}
}
.status__action-bar-button { .status__action-bar-button {
float: right; float: right;
margin-right: 0; margin-right: 0;
@ -285,4 +294,13 @@ body.rtl {
} }
} }
} }
.public-layout {
.header {
.nav-button {
margin-left: 8px;
margin-right: 0;
}
}
}
} }

@ -90,7 +90,7 @@
} }
samp { samp {
font-family: 'mastodon-font-monospace', monospace; font-family: $font-monospace, monospace;
} }
button.table-action-link { button.table-action-link {

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save