...
 
Commits (40)
  • dependabot-preview[bot]'s avatar
  • dependabot-preview[bot]'s avatar
  • dependabot-preview[bot]'s avatar
  • dependabot-preview[bot]'s avatar
  • dependabot-preview[bot]'s avatar
  • dependabot-preview[bot]'s avatar
  • dependabot-preview[bot]'s avatar
  • dependabot-preview[bot]'s avatar
    Bump capistrano from 3.11.1 to 3.11.2 (#12012) · 4592c69b
    dependabot-preview[bot] authored
    * Bump capistrano from 3.11.1 to 3.11.2
    
    Bumps [capistrano](https://github.com/capistrano/capistrano) from 3.11.1 to 3.11.2.
    - [Release notes](https://github.com/capistrano/capistrano/releases)
    - [Commits](https://github.com/capistrano/capistrano/compare/v3.11.1...v3.11.2)
    Signed-off-by: default avatardependabot-preview[bot] <support@dependabot.com>
    
    * Bump capistrano from 3.11.1 to 3.11.2
    4592c69b
  • Jeong Arm's avatar
    c4fbfaf0
  • Eugen Rochko's avatar
    Fix S3 adapter retrying failing uploads with exponential backoff (#12085) · 086fc7ed
    Eugen Rochko authored
    The default limit of 10 retries with exponential backoff meant
    that if the S3 server was timing out, you would be stuck with it
    for much, much longer than the 5 second read timeout we expect.
    
    The uploading happens within a database transaction, which means
    a failing S3 server could negatively affect database performance
    086fc7ed
  • Hugo Gameiro's avatar
    a7917269
  • Mareena Kunjachan's avatar
    Fix spelling error in README (#12086) · efda1269
    Mareena Kunjachan authored
    fix a spelling error
    efda1269
  • Eugen Rochko's avatar
    Fix performance of home feed regeneration (#12084) · f665901e
    Eugen Rochko authored
    Fetching statuses from all followed accounts at once takes too long
    within Postgres. Fetching them one by one and merging in Ruby
    could be a lot less resource-intensive
    
    Because the query for dynamically fetching the home timeline is so
    heavy, we can no longer offer it when the home timeline is missing
    f665901e
  • Eugen Rochko's avatar
  • Eugen Rochko's avatar
  • Eugen Rochko's avatar
    b5be067c
  • Eugen Rochko's avatar
  • trwnh's avatar
    Add missing back button header for invalid account (#12094) · 95f21ab8
    trwnh authored
    Should fix #6786
    95f21ab8
  • Eugen Rochko's avatar
    Update AUTHORS.md (#12096) · 0336621c
    Eugen Rochko authored
    0336621c
  • Eugen Rochko's avatar
  • Eugen Rochko's avatar
  • Eugen Rochko's avatar
    Add `tootctl media usage` command (#12115) · 0aaa3afc
    Eugen Rochko authored
    0aaa3afc
  • Eugen Rochko's avatar
  • Eugen Rochko's avatar
  • Eugen Rochko's avatar
    Add admin setting to auto-approve hashtags (#12122) · c8bcf5cb
    Eugen Rochko authored
    Change inaccurate labels on other admin settings
    c8bcf5cb
  • Eugen Rochko's avatar
    Remove `lang` attribute from individual statuses (#12124) · 538db85d
    Eugen Rochko authored
    Fix #10930
    538db85d
  • Eugen Rochko's avatar
    Fix attachment not being re-downloaded even if file is not stored (#12125) · 354fdd31
    Eugen Rochko authored
    Change the behaviour of remotable concern. Previously, it would skip
    downloading an attachment if the stored remote URL is identical to
    the new one. Now it would not be skipped if the attachment is not
    actually currently stored by Paperclip.
    354fdd31
  • Eugen Rochko's avatar
    Remove auto-silence behaviour from spam check (#12117) · b5f7e128
    Eugen Rochko authored
    Fix #12113
    b5f7e128
  • Eugen Rochko's avatar
    Bump version to 3.0.1 (#12116) · e6d111f3
    Eugen Rochko authored
    e6d111f3
  • Eugen Rochko's avatar
    30a28a2e
  • Eugen Rochko's avatar
    Fix admin setting to auto-approve hashtags not affecting query (#12130) · 915f3712
    Eugen Rochko authored
    Follow-up to #12122
    915f3712
  • Eugen Rochko's avatar
  • Eugen Rochko's avatar
    Fix preloaded JSON-LD context for identity not being used (#12138) · 45eccaf8
    Eugen Rochko authored
    Regression from #11316
    45eccaf8
  • Eugen Rochko's avatar
    Update changelog for 3.0.1 (#12139) · a57ac072
    Eugen Rochko authored
    a57ac072
  • Eugen Rochko's avatar
  • Eugen Rochko's avatar
    New Crowdin translations (#12072) · 1fc5b613
    Eugen Rochko authored
    * New translations en.yml (German)
    [ci skip]
    
    * New translations simple_form.en.yml (German)
    [ci skip]
    
    * New translations en.yml (Slovak)
    [ci skip]
    
    * New translations en.yml (Slovak)
    [ci skip]
    
    * New translations en.json (Arabic)
    [ci skip]
    
    * New translations en.json (Arabic)
    [ci skip]
    
    * New translations en.yml (Arabic)
    [ci skip]
    
    * New translations devise.en.yml (Arabic)
    [ci skip]
    
    * New translations en.yml (Arabic)
    [ci skip]
    
    * New translations en.yml (Arabic)
    [ci skip]
    
    * New translations devise.en.yml (Arabic)
    [ci skip]
    
    * New translations en.yml (Turkish)
    [ci skip]
    
    * New translations en.json (Norwegian Nynorsk)
    [ci skip]
    
    * New translations en.json (Norwegian Nynorsk)
    [ci skip]
    
    * New translations en.json (Norwegian Nynorsk)
    [ci skip]
    
    * New translations en.json (Basque)
    [ci skip]
    
    * New translations en.yml (Basque)
    [ci skip]
    
    * New translations en.json (Norwegian Nynorsk)
    [ci skip]
    
    * New translations en.json (Basque)
    [ci skip]
    
    * New translations en.yml (Basque)
    [ci skip]
    
    * New translations simple_form.en.yml (Basque)
    [ci skip]
    
    * New translations devise.en.yml (Basque)
    [ci skip]
    
    * New translations en.json (Basque)
    [ci skip]
    
    * New translations en.yml (Basque)
    [ci skip]
    
    * New translations en.json (Thai)
    [ci skip]
    
    * New translations en.yml (Thai)
    [ci skip]
    
    * New translations devise.en.yml (Thai)
    [ci skip]
    
    * New translations en.yml (Thai)
    [ci skip]
    
    * New translations en.yml (Thai)
    [ci skip]
    
    * New translations en.json (Thai)
    [ci skip]
    
    * New translations en.yml (Thai)
    [ci skip]
    
    * New translations en.yml (Thai)
    [ci skip]
    
    * New translations en.yml (Turkish)
    [ci skip]
    
    * New translations en.yml (Turkish)
    [ci skip]
    
    * New translations en.yml (Spanish, Argentina)
    [ci skip]
    
    * New translations en.yml (French)
    [ci skip]
    
    * New translations en.json (French)
    [ci skip]
    
    * New translations en.json (French)
    [ci skip]
    
    * New translations devise.en.yml (French)
    [ci skip]
    
    * New translations en.yml (French)
    [ci skip]
    
    * New translations simple_form.en.yml (French)
    [ci skip]
    
    * New translations en.json (French)
    [ci skip]
    
    * New translations en.json (French)
    [ci skip]
    
    * New translations en.json (French)
    [ci skip]
    
    * New translations en.yml (Thai)
    [ci skip]
    
    * New translations en.yml (Thai)
    [ci skip]
    
    * New translations simple_form.en.yml (Thai)
    [ci skip]
    
    * New translations en.yml (Thai)
    [ci skip]
    
    * New translations en.yml (Thai)
    [ci skip]
    
    * New translations en.json (Slovak)
    [ci skip]
    
    * New translations en.yml (Turkish)
    [ci skip]
    
    * New translations en.yml (French)
    [ci skip]
    
    * New translations en.yml (French)
    [ci skip]
    
    * New translations en.yml (French)
    [ci skip]
    
    * New translations en.yml (French)
    [ci skip]
    
    * New translations simple_form.en.yml (French)
    [ci skip]
    
    * New translations en.yml (French)
    [ci skip]
    
    * New translations en.yml (Basque)
    [ci skip]
    
    * New translations en.json (Basque)
    [ci skip]
    
    * New translations en.yml (Basque)
    [ci skip]
    
    * New translations simple_form.en.yml (Basque)
    [ci skip]
    
    * New translations en.json (Basque)
    [ci skip]
    
    * New translations en.yml (Basque)
    [ci skip]
    
    * New translations simple_form.en.yml (Basque)
    [ci skip]
    
    * New translations en.json (Basque)
    [ci skip]
    
    * New translations en.yml (Basque)
    [ci skip]
    
    * New translations simple_form.en.yml (Basque)
    [ci skip]
    
    * New translations en.json (Basque)
    [ci skip]
    
    * New translations en.yml (Basque)
    [ci skip]
    
    * New translations en.yml (Basque)
    [ci skip]
    
    * New translations en.yml (Basque)
    [ci skip]
    
    * New translations en.json (French)
    [ci skip]
    
    * New translations devise.en.yml (Japanese)
    [ci skip]
    
    * New translations en.json (Japanese)
    [ci skip]
    
    * New translations en.yml (Japanese)
    [ci skip]
    
    * New translations en.yml (Indonesian)
    [ci skip]
    
    * New translations en.yml (Turkish)
    [ci skip]
    
    * New translations en.yml (Indonesian)
    [ci skip]
    
    * New translations en.yml (Indonesian)
    [ci skip]
    
    * New translations en.yml (Spanish, Argentina)
    [ci skip]
    
    * New translations en.yml (Spanish, Argentina)
    [ci skip]
    
    * New translations en.yml (Turkish)
    [ci skip]
    
    * New translations en.json (Spanish, Argentina)
    [ci skip]
    
    * New translations en.yml (Turkish)
    [ci skip]
    
    * New translations en.yml (Korean)
    [ci skip]
    
    * New translations simple_form.en.yml (Greek)
    [ci skip]
    
    * New translations en.json (Hungarian)
    [ci skip]
    
    * New translations en.yml (Hungarian)
    [ci skip]
    
    * New translations en.yml (Spanish, Argentina)
    [ci skip]
    
    * New translations en.json (Catalan)
    [ci skip]
    
    * New translations en.json (Catalan)
    [ci skip]
    
    * New translations en.json (Greek)
    [ci skip]
    
    * New translations simple_form.en.yml (Greek)
    [ci skip]
    
    * New translations devise.en.yml (Greek)
    [ci skip]
    
    * New translations en.yml (Greek)
    [ci skip]
    
    * New translations devise.en.yml (Greek)
    [ci skip]
    
    * New translations en.yml (Greek)
    [ci skip]
    
    * New translations en.yml (Indonesian)
    [ci skip]
    
    * New translations en.yml (Indonesian)
    [ci skip]
    
    * New translations en.yml (Indonesian)
    [ci skip]
    
    * New translations en.yml (Indonesian)
    [ci skip]
    
    * New translations en.yml (Indonesian)
    [ci skip]
    
    * New translations en.yml (Indonesian)
    [ci skip]
    
    * New translations en.yml (Esperanto)
    [ci skip]
    
    * New translations en.yml (Estonian)
    [ci skip]
    
    * New translations en.yml (Dutch)
    [ci skip]
    
    * New translations en.yml (Finnish)
    [ci skip]
    
    * New translations en.yml (Galician)
    [ci skip]
    
    * New translations en.yml (Chinese Simplified)
    [ci skip]
    
    * New translations en.yml (Chinese Traditional)
    [ci skip]
    
    * New translations en.yml (Corsican)
    [ci skip]
    
    * New translations en.yml (Czech)
    [ci skip]
    
    * New translations en.yml (Danish)
    [ci skip]
    
    * New translations en.yml (German)
    [ci skip]
    
    * New translations en.yml (Catalan)
    [ci skip]
    
    * New translations en.yml (Persian)
    [ci skip]
    
    * New translations en.yml (Occitan)
    [ci skip]
    
    * New translations en.yml (Korean)
    [ci skip]
    
    * New translations en.yml (Polish)
    [ci skip]
    
    * New translations en.yml (Greek)
    [ci skip]
    
    * New translations en.yml (Hungarian)
    [ci skip]
    
    * New translations en.yml (Italian)
    [ci skip]
    
    * New translations en.yml (Japanese)
    [ci skip]
    
    * New translations en.yml (Kazakh)
    [ci skip]
    
    * New translations en.yml (Hebrew)
    [ci skip]
    
    * New translations en.yml (Ido)
    [ci skip]
    
    * New translations en.yml (Indonesian)
    [ci skip]
    
    * New translations en.yml (Georgian)
    [ci skip]
    
    * New translations en.yml (Asturian)
    [ci skip]
    
    * New translations en.yml (Bulgarian)
    [ci skip]
    
    * New translations en.yml (Chinese Traditional, Hong Kong)
    [ci skip]
    
    * New translations en.yml (Croatian)
    [ci skip]
    
    * New translations en.yml (Lithuanian)
    [ci skip]
    
    * New translations en.yml (Arabic)
    [ci skip]
    
    * New translations en.yml (Albanian)
    [ci skip]
    
    * New translations en.yml (French)
    [ci skip]
    
    * New translations en.yml (Basque)
    [ci skip]
    
    * New translations en.yml (Bengali)
    [ci skip]
    
    * New translations en.yml (Malay)
    [ci skip]
    
    * New translations en.yml (Norwegian)
    [ci skip]
    
    * New translations en.yml (Telugu)
    [ci skip]
    
    * New translations en.yml (Swedish)
    [ci skip]
    
    * New translations en.yml (Thai)
    [ci skip]
    
    * New translations en.yml (Turkish)
    [ci skip]
    
    * New translations en.yml (Welsh)
    [ci skip]
    
    * New translations en.yml (Spanish, Argentina)
    [ci skip]
    
    * New translations en.yml (Spanish)
    [ci skip]
    
    * New translations en.yml (Serbian (Cyrillic))
    [ci skip]
    
    * New translations en.yml (Serbian (Latin))
    [ci skip]
    
    * New translations en.yml (Ukrainian)
    [ci skip]
    
    * New translations en.yml (Slovak)
    [ci skip]
    
    * New translations en.yml (Russian)
    [ci skip]
    
    * New translations en.yml (Slovenian)
    [ci skip]
    
    * New translations en.yml (Portuguese)
    [ci skip]
    
    * New translations en.yml (Portuguese, Brazilian)
    [ci skip]
    
    * New translations en.json (Indonesian)
    [ci skip]
    
    * New translations en.yml (Indonesian)
    [ci skip]
    
    * New translations en.json (Indonesian)
    [ci skip]
    
    * New translations en.json (Indonesian)
    [ci skip]
    
    * New translations en.json (Galician)
    [ci skip]
    
    * New translations en.json (Galician)
    [ci skip]
    
    * New translations en.yml (Galician)
    [ci skip]
    
    * New translations en.yml (Japanese)
    [ci skip]
    
    * New translations en.yml (Spanish, Argentina)
    [ci skip]
    
    * New translations en.yml (Spanish, Argentina)
    [ci skip]
    
    * New translations en.yml (Corsican)
    [ci skip]
    
    * New translations en.yml (Spanish, Argentina)
    [ci skip]
    
    * New translations en.yml (Greek)
    [ci skip]
    
    * New translations en.yml (Greek)
    [ci skip]
    
    * New translations en.yml (French)
    [ci skip]
    
    * New translations en.yml (Czech)
    [ci skip]
    
    * New translations en.yml (Arabic)
    [ci skip]
    
    * New translations en.json (Spanish)
    [ci skip]
    
    * New translations en.json (Spanish)
    [ci skip]
    
    * New translations en.yml (Spanish)
    [ci skip]
    
    * New translations en.yml (Spanish)
    [ci skip]
    
    * New translations en.yml (Japanese)
    [ci skip]
    
    * New translations en.yml (Japanese)
    [ci skip]
    
    * New translations simple_form.en.yml (Arabic)
    [ci skip]
    
    * New translations simple_form.en.yml (Arabic)
    [ci skip]
    
    * New translations en.yml (Spanish)
    [ci skip]
    
    * New translations en.yml (Arabic)
    [ci skip]
    
    * New translations simple_form.en.yml (Arabic)
    [ci skip]
    
    * New translations en.yml (Spanish)
    [ci skip]
    
    * New translations en.yml (Spanish)
    [ci skip]
    
    * New translations en.yml (Spanish)
    [ci skip]
    
    * New translations en.yml (Spanish)
    [ci skip]
    
    * New translations en.json (Japanese)
    [ci skip]
    
    * New translations en.yml (Spanish, Argentina)
    [ci skip]
    
    * New translations en.yml (Japanese)
    [ci skip]
    
    * New translations en.json (Spanish, Argentina)
    [ci skip]
    
    * New translations en.yml (Spanish, Argentina)
    [ci skip]
    
    * New translations en.json (Esperanto)
    [ci skip]
    
    * New translations en.yml (Esperanto)
    [ci skip]
    
    * New translations en.yml (Korean)
    [ci skip]
    
    * New translations en.yml (Esperanto)
    [ci skip]
    
    * New translations en.yml (Esperanto)
    [ci skip]
    
    * New translations simple_form.en.yml (Esperanto)
    [ci skip]
    
    * New translations devise.en.yml (Esperanto)
    [ci skip]
    
    * New translations en.yml (Korean)
    [ci skip]
    
    * New translations en.yml (Dutch)
    [ci skip]
    
    * New translations en.yml (German)
    [ci skip]
    
    * New translations en.yml (Catalan)
    [ci skip]
    
    * New translations en.yml (Turkish)
    [ci skip]
    
    * New translations activerecord.en.yml (Swedish)
    [ci skip]
    
    * New translations activerecord.en.yml (Swedish)
    [ci skip]
    
    * New translations en.json (Czech)
    [ci skip]
    
    * New translations en.yml (Czech)
    [ci skip]
    
    * New translations devise.en.yml (Czech)
    [ci skip]
    
    * New translations en.yml (Italian)
    [ci skip]
    
    * New translations en.yml (Japanese)
    [ci skip]
    
    * New translations en.yml (Korean)
    [ci skip]
    
    * New translations en.yml (Hungarian)
    [ci skip]
    
    * New translations en.yml (Persian)
    [ci skip]
    
    * New translations en.yml (Estonian)
    [ci skip]
    
    * New translations en.yml (Galician)
    [ci skip]
    
    * New translations en.yml (German)
    [ci skip]
    
    * New translations en.yml (Greek)
    [ci skip]
    
    * New translations en.yml (Dutch)
    [ci skip]
    
    * New translations en.yml (Portuguese, Brazilian)
    [ci skip]
    
    * New translations en.yml (Slovenian)
    [ci skip]
    
    * New translations en.yml (Spanish)
    [ci skip]
    
    * New translations en.yml (Catalan)
    [ci skip]
    
    * New translations en.yml (Corsican)
    [ci skip]
    
    * New translations en.yml (Czech)
    [ci skip]
    
    * New translations en.yml (Ukrainian)
    [ci skip]
    
    * New translations en.yml (Basque)
    [ci skip]
    
    * New translations en.yml (French)
    [ci skip]
    
    * New translations en.json (Arabic)
    [ci skip]
    
    * New translations en.yml (Arabic)
    [ci skip]
    
    * New translations en.yml (Czech)
    [ci skip]
    
    * New translations en.yml (Japanese)
    [ci skip]
    
    * New translations en.json (Swedish)
    [ci skip]
    
    * New translations en.yml (Arabic)
    [ci skip]
    
    * New translations en.yml (Czech)
    [ci skip]
    
    * New translations en.yml (German)
    [ci skip]
    
    * New translations en.json (Polish)
    [ci skip]
    
    * New translations en.json (Swedish)
    [ci skip]
    
    * New translations devise.en.yml (Czech)
    [ci skip]
    
    * New translations en.json (Polish)
    [ci skip]
    
    * New translations en.json (Polish)
    [ci skip]
    
    * New translations en.json (Swedish)
    [ci skip]
    
    * New translations en.json (Polish)
    [ci skip]
    
    * i18n-tasks normalize
    
    * yarn manage:translations
    
    * New translations en.yml (French)
    [ci skip]
    
    * New translations en.json (Swedish)
    [ci skip]
    
    * New translations activerecord.en.yml (Persian)
    [ci skip]
    
    * i18n-tasks normalize
    
    * yarn manage:translations
    1fc5b613
  • Eugen Rochko's avatar
    de59e7e6
  • Eugen Rochko's avatar
    New Crowdin translations (#12144) · c4118ba7
    Eugen Rochko authored
    * New translations activerecord.en.yml (Corsican)
    [ci skip]
    
    * New translations activerecord.en.yml (Czech)
    [ci skip]
    
    * New translations activerecord.en.yml (Danish)
    [ci skip]
    
    * New translations activerecord.en.yml (Dutch)
    [ci skip]
    
    * New translations activerecord.en.yml (Esperanto)
    [ci skip]
    
    * New translations activerecord.en.yml (Estonian)
    [ci skip]
    
    * New translations activerecord.en.yml (Finnish)
    [ci skip]
    
    * New translations activerecord.en.yml (French)
    [ci skip]
    
    * New translations activerecord.en.yml (Galician)
    [ci skip]
    
    * New translations activerecord.en.yml (Georgian)
    [ci skip]
    
    * New translations activerecord.en.yml (German)
    [ci skip]
    
    * New translations activerecord.en.yml (Greek)
    [ci skip]
    
    * New translations activerecord.en.yml (Hungarian)
    [ci skip]
    
    * New translations activerecord.en.yml (Chinese Simplified)
    [ci skip]
    
    * New translations activerecord.en.yml (Italian)
    [ci skip]
    
    * New translations activerecord.en.yml (Japanese)
    [ci skip]
    
    * New translations activerecord.en.yml (Kazakh)
    [ci skip]
    
    * New translations activerecord.en.yml (Korean)
    [ci skip]
    
    * New translations activerecord.en.yml (Norwegian)
    [ci skip]
    
    * New translations activerecord.en.yml (Occitan)
    [ci skip]
    
    * New translations activerecord.en.yml (Polish)
    [ci skip]
    
    * New translations activerecord.en.yml (Portuguese)
    [ci skip]
    
    * New translations activerecord.en.yml (Chinese Traditional, Hong Kong)
    [ci skip]
    
    * New translations activerecord.en.yml (Catalan)
    [ci skip]
    
    * New translations en.yml (Telugu)
    [ci skip]
    
    * New translations activerecord.en.yml (Chinese Traditional)
    [ci skip]
    
    * New translations en.json (Thai)
    [ci skip]
    
    * New translations en.yml (Thai)
    [ci skip]
    
    * New translations simple_form.en.yml (Thai)
    [ci skip]
    
    * New translations en.json (Turkish)
    [ci skip]
    
    * New translations en.yml (Turkish)
    [ci skip]
    
    * New translations simple_form.en.yml (Turkish)
    [ci skip]
    
    * New translations en.json (Welsh)
    [ci skip]
    
    * New translations en.yml (Welsh)
    [ci skip]
    
    * New translations simple_form.en.yml (Welsh)
    [ci skip]
    
    * New translations en.json (Spanish, Argentina)
    [ci skip]
    
    * New translations en.yml (Spanish, Argentina)
    [ci skip]
    
    * New translations en.json (Macedonian)
    [ci skip]
    
    * New translations activerecord.en.yml (Bulgarian)
    [ci skip]
    
    * New translations en.yml (Macedonian)
    [ci skip]
    
    * New translations activerecord.en.yml (Portuguese, Brazilian)
    [ci skip]
    
    * New translations activerecord.en.yml (Indonesian)
    [ci skip]
    
    * New translations activerecord.en.yml (Persian)
    [ci skip]
    
    * New translations activerecord.en.yml (Albanian)
    [ci skip]
    
    * New translations activerecord.en.yml (Arabic)
    [ci skip]
    
    * New translations activerecord.en.yml (Asturian)
    [ci skip]
    
    * New translations activerecord.en.yml (Basque)
    [ci skip]
    
    * New translations activerecord.en.yml (Bengali)
    [ci skip]
    
    * New translations activerecord.en.yml (Breton)
    [ci skip]
    
    * New translations simple_form.en.yml (Estonian)
    [ci skip]
    
    * New translations en.json (Persian)
    [ci skip]
    
    * New translations en.json (Estonian)
    [ci skip]
    
    * New translations en.yml (Serbian (Cyrillic))
    [ci skip]
    
    * New translations en.yml (Lithuanian)
    [ci skip]
    
    * New translations en.json (Malay)
    [ci skip]
    
    * New translations en.yml (Malay)
    [ci skip]
    
    * New translations en.json (Norwegian)
    [ci skip]
    
    * New translations en.yml (Norwegian)
    [ci skip]
    
    * New translations simple_form.en.yml (Norwegian)
    [ci skip]
    
    * New translations en.json (Russian)
    [ci skip]
    
    * New translations en.yml (Russian)
    [ci skip]
    
    * New translations simple_form.en.yml (Russian)
    [ci skip]
    
    * New translations en.json (Serbian (Cyrillic))
    [ci skip]
    
    * New translations simple_form.en.yml (Serbian (Cyrillic))
    [ci skip]
    
    * New translations en.json (Serbian (Latin))
    [ci skip]
    
    * New translations en.yml (Serbian (Latin))
    [ci skip]
    
    * New translations simple_form.en.yml (Serbian (Latin))
    [ci skip]
    
    * New translations en.json (Slovak)
    [ci skip]
    
    * New translations simple_form.en.yml (Chinese Traditional, Hong Kong)
    [ci skip]
    
    * New translations simple_form.en.yml (Slovak)
    [ci skip]
    
    * New translations en.json (Ukrainian)
    [ci skip]
    
    * New translations en.yml (Ukrainian)
    [ci skip]
    
    * New translations simple_form.en.yml (Ukrainian)
    [ci skip]
    
    * New translations en.json (Norwegian Nynorsk)
    [ci skip]
    
    * New translations en.json (Arabic)
    [ci skip]
    
    * New translations en.json (Lithuanian)
    [ci skip]
    
    * New translations en.json (Albanian)
    [ci skip]
    
    * New translations simple_form.en.yml (Ido)
    [ci skip]
    
    * New translations en.yml (Croatian)
    [ci skip]
    
    * New translations simple_form.en.yml (Croatian)
    [ci skip]
    
    * New translations en.yml (Chinese Traditional, Hong Kong)
    [ci skip]
    
    * New translations en.json (Georgian)
    [ci skip]
    
    * New translations en.yml (Georgian)
    [ci skip]
    
    * New translations simple_form.en.yml (Georgian)
    [ci skip]
    
    * New translations en.json (Chinese Traditional, Hong Kong)
    [ci skip]
    
    * New translations en.json (Hebrew)
    [ci skip]
    
    * New translations en.yml (Hebrew)
    [ci skip]
    
    * New translations simple_form.en.yml (Hebrew)
    [ci skip]
    
    * New translations en.json (Ido)
    [ci skip]
    
    * New translations en.yml (Ido)
    [ci skip]
    
    * New translations simple_form.en.yml (Bulgarian)
    [ci skip]
    
    * New translations en.yml (Latvian)
    [ci skip]
    
    * New translations en.json (Indonesian)
    [ci skip]
    
    * New translations en.yml (Indonesian)
    [ci skip]
    
    * New translations simple_form.en.yml (Indonesian)
    [ci skip]
    
    * New translations en.yml (Bulgarian)
    [ci skip]
    
    * New translations en.json (Bulgarian)
    [ci skip]
    
    * New translations en.json (Latvian)
    [ci skip]
    
    * New translations en.yml (Breton)
    [ci skip]
    
    * New translations en.json (Breton)
    [ci skip]
    
    * New translations simple_form.en.yml (Asturian)
    [ci skip]
    
    * New translations en.yml (Asturian)
    [ci skip]
    
    * New translations en.json (Asturian)
    [ci skip]
    
    * New translations en.yml (Arabic)
    [ci skip]
    
    * New translations en.yml (Slovak)
    [ci skip]
    
    * New translations en.yml (Albanian)
    [ci skip]
    
    * New translations en.json (Czech)
    [ci skip]
    
    * New translations simple_form.en.yml (Catalan)
    [ci skip]
    
    * New translations en.json (Chinese Simplified)
    [ci skip]
    
    * New translations en.yml (Chinese Simplified)
    [ci skip]
    
    * New translations simple_form.en.yml (Chinese Simplified)
    [ci skip]
    
    * New translations en.json (Chinese Traditional)
    [ci skip]
    
    * New translations en.yml (Chinese Traditional)
    [ci skip]
    
    * New translations simple_form.en.yml (Chinese Traditional)
    [ci skip]
    
    * New translations en.json (Corsican)
    [ci skip]
    
    * New translations en.yml (Corsican)
    [ci skip]
    
    * New translations simple_form.en.yml (Corsican)
    [ci skip]
    
    * New translations en.yml (Czech)
    [ci skip]
    
    * New translations en.json (Catalan)
    [ci skip]
    
    * New translations simple_form.en.yml (Czech)
    [ci skip]
    
    * New translations en.json (Danish)
    [ci skip]
    
    * New translations en.yml (Danish)
    [ci skip]
    
    * New translations simple_form.en.yml (Danish)
    [ci skip]
    
    * New translations en.json (Dutch)
    [ci skip]
    
    * New translations en.yml (Dutch)
    [ci skip]
    
    * New translations simple_form.en.yml (Dutch)
    [ci skip]
    
    * New translations en.json (Esperanto)
    [ci skip]
    
    * New translations en.yml (Esperanto)
    [ci skip]
    
    * New translations simple_form.en.yml (Esperanto)
    [ci skip]
    
    * New translations en.yml (Catalan)
    [ci skip]
    
    * New translations en.json (Croatian)
    [ci skip]
    
    * New translations en.yml (Bengali)
    [ci skip]
    
    * New translations simple_form.en.yml (Albanian)
    [ci skip]
    
    * New translations simple_form.en.yml (Basque)
    [ci skip]
    
    * New translations en.yml (Basque)
    [ci skip]
    
    * New translations en.json (Bengali)
    [ci skip]
    
    * New translations en.json (Basque)
    [ci skip]
    
    * New translations simple_form.en.yml (Arabic)
    [ci skip]
    
    * New translations devise.en.yml (Serbian (Cyrillic))
    [ci skip]
    
    * New translations devise.en.yml (Hungarian)
    [ci skip]
    
    * New translations devise.en.yml (Russian)
    [ci skip]
    
    * New translations devise.en.yml (Danish)
    [ci skip]
    
    * New translations devise.en.yml (Croatian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Asturian)
    [ci skip]
    
    * New translations devise.en.yml (Portuguese, Brazilian)
    [ci skip]
    
    * New translations devise.en.yml (Serbian (Latin))
    [ci skip]
    
    * New translations devise.en.yml (Slovak)
    [ci skip]
    
    * New translations devise.en.yml (Dutch)
    [ci skip]
    
    * New translations devise.en.yml (Portuguese)
    [ci skip]
    
    * New translations devise.en.yml (Estonian)
    [ci skip]
    
    * New translations devise.en.yml (Slovenian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Bulgarian)
    [ci skip]
    
    * New translations devise.en.yml (Hebrew)
    [ci skip]
    
    * New translations devise.en.yml (Spanish)
    [ci skip]
    
    * New translations devise.en.yml (Finnish)
    [ci skip]
    
    * New translations devise.en.yml (Swedish)
    [ci skip]
    
    * New translations devise.en.yml (German)
    [ci skip]
    
    * New translations devise.en.yml (Georgian)
    [ci skip]
    
    * New translations devise.en.yml (Ido)
    [ci skip]
    
    * New translations devise.en.yml (Polish)
    [ci skip]
    
    * New translations devise.en.yml (Corsican)
    [ci skip]
    
    * New translations devise.en.yml (Breton)
    [ci skip]
    
    * New translations devise.en.yml (Bengali)
    [ci skip]
    
    * New translations devise.en.yml (Asturian)
    [ci skip]
    
    * New translations devise.en.yml (Bulgarian)
    [ci skip]
    
    * New translations devise.en.yml (Albanian)
    [ci skip]
    
    * New translations devise.en.yml (Norwegian)
    [ci skip]
    
    * New translations activerecord.en.yml (Welsh)
    [ci skip]
    
    * New translations activerecord.en.yml (Ukrainian)
    [ci skip]
    
    * New translations activerecord.en.yml (Turkish)
    [ci skip]
    
    * New translations activerecord.en.yml (Thai)
    [ci skip]
    
    * New translations activerecord.en.yml (Spanish, Argentina)
    [ci skip]
    
    * New translations devise.en.yml (Galician)
    [ci skip]
    
    * New translations activerecord.en.yml (Slovenian)
    [ci skip]
    
    * New translations activerecord.en.yml (Slovak)
    [ci skip]
    
    * New translations devise.en.yml (Chinese Simplified)
    [ci skip]
    
    * New translations devise.en.yml (Occitan)
    [ci skip]
    
    * New translations activerecord.en.yml (Serbian (Latin))
    [ci skip]
    
    * New translations activerecord.en.yml (Serbian (Cyrillic))
    [ci skip]
    
    * New translations activerecord.en.yml (Russian)
    [ci skip]
    
    * New translations devise.en.yml (Persian)
    [ci skip]
    
    * New translations devise.en.yml (Chinese Traditional, Hong Kong)
    [ci skip]
    
    * New translations devise.en.yml (Kazakh)
    [ci skip]
    
    * New translations activerecord.en.yml (Spanish)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Chinese Traditional, Hong Kong)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Albanian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Occitan)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Basque)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Persian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Arabic)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Polish)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Portuguese)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Korean)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Portuguese, Brazilian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Ukrainian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Slovenian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Slovak)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Spanish)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Catalan)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Swedish)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Czech)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Estonian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Dutch)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Finnish)
    [ci skip]
    
    * New translations doorkeeper.en.yml (French)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Danish)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Galician)
    [ci skip]
    
    * New translations doorkeeper.en.yml (German)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Kazakh)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Greek)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Corsican)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Hungarian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Chinese Traditional)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Italian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Chinese Simplified)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Japanese)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Serbian (Latin))
    [ci skip]
    
    * New translations doorkeeper.en.yml (Serbian (Cyrillic))
    [ci skip]
    
    * New translations doorkeeper.en.yml (Croatian)
    [ci skip]
    
    * New translations devise.en.yml (Esperanto)
    [ci skip]
    
    * New translations devise.en.yml (Ukrainian)
    [ci skip]
    
    * New translations devise.en.yml (Basque)
    [ci skip]
    
    * New translations devise.en.yml (Thai)
    [ci skip]
    
    * New translations devise.en.yml (French)
    [ci skip]
    
    * New translations devise.en.yml (Japanese)
    [ci skip]
    
    * New translations activerecord.en.yml (Swedish)
    [ci skip]
    
    * New translations devise.en.yml (Czech)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Indonesian)
    [ci skip]
    
    * New translations devise.en.yml (Indonesian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Ido)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Hebrew)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Georgian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Welsh)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Russian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Thai)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Norwegian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Turkish)
    [ci skip]
    
    * New translations devise.en.yml (Arabic)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Esperanto)
    [ci skip]
    
    * New translations devise.en.yml (Catalan)
    [ci skip]
    
    * New translations devise.en.yml (Chinese Traditional)
    [ci skip]
    
    * New translations devise.en.yml (Greek)
    [ci skip]
    
    * New translations devise.en.yml (Italian)
    [ci skip]
    
    * New translations devise.en.yml (Korean)
    [ci skip]
    
    * New translations devise.en.yml (Turkish)
    [ci skip]
    
    * New translations devise.en.yml (Spanish, Argentina)
    [ci skip]
    
    * New translations devise.en.yml (Welsh)
    [ci skip]
    
    * New translations en.yml (Swedish)
    [ci skip]
    
    * i18n-tasks normalize
    
    * yarn manage:translations
    c4118ba7
  • Jyrki's avatar
    Merge tag 'v3.0.1' into changes · e5d6d1d7
    Jyrki authored
    e5d6d1d7
  • Jyrki's avatar
    Bump character limit to 1000 · 95d17122
    Jyrki authored
    95d17122
This diff is collapsed.
......@@ -3,6 +3,39 @@ Changelog
All notable changes to this project will be documented in this file.
## [3.0.1] - 2019-10-10
### Added
- Add `tootctl media usage` command ([Gargron](https://github.com/tootsuite/mastodon/pull/12115))
- Add admin setting to auto-approve trending hashtags ([Gargron](https://github.com/tootsuite/mastodon/pull/12122), [Gargron](https://github.com/tootsuite/mastodon/pull/12130))
### Changed
- Change `tootctl media refresh` to skip already downloaded attachments ([Gargron](https://github.com/tootsuite/mastodon/pull/12118))
### Removed
- Remove auto-silence behaviour from spam check ([Gargron](https://github.com/tootsuite/mastodon/pull/12117))
- Remove HTML `lang` attribute from individual statuses in web UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12124))
- Remove fallback to long description on sidebar and meta description ([Gargron](https://github.com/tootsuite/mastodon/pull/12119))
### Fixed
- Fix preloaded JSON-LD context for identity not being used ([Gargron](https://github.com/tootsuite/mastodon/pull/12138))
- Fix media editing modal changing dimensions once the image loads ([Gargron](https://github.com/tootsuite/mastodon/pull/12131))
- Fix not showing whether a custom emoji has a local counterpart in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/12135))
- Fix attachment not being re-downloaded even if file is not stored ([Gargron](https://github.com/tootsuite/mastodon/pull/12125))
- Fix old migration trying to use new column due to default status scope ([Gargron](https://github.com/tootsuite/mastodon/pull/12095))
- Fix column back button missing for not found accounts ([trwnh](https://github.com/tootsuite/mastodon/pull/12094))
- Fix issues with tootctl's parallelization and progress reporting ([Gargron](https://github.com/tootsuite/mastodon/pull/12093), [Gargron](https://github.com/tootsuite/mastodon/pull/12097))
- Fix existing user records with now-renamed `pt` locale ([Gargron](https://github.com/tootsuite/mastodon/pull/12092))
- Fix hashtag timeline REST API accepting too many hashtags ([Gargron](https://github.com/tootsuite/mastodon/pull/12091))
- Fix `GET /api/v1/instance` REST APIs being unavailable in secure mode ([Gargron](https://github.com/tootsuite/mastodon/pull/12089))
- Fix performance of home feed regeneration and merging ([Gargron](https://github.com/tootsuite/mastodon/pull/12084))
- Fix ffmpeg performance issues due to stdout buffer overflow ([hugogameiro](https://github.com/tootsuite/mastodon/pull/12088))
- Fix S3 adapter retrying failing uploads with exponential backoff ([Gargron](https://github.com/tootsuite/mastodon/pull/12085))
- Fix `tootctl accounts cull` advertising unused option flag ([Kjwon15](https://github.com/tootsuite/mastodon/pull/12074))
## [3.0.0] - 2019-10-03
### Added
......
......@@ -89,7 +89,7 @@ gem 'simple_form', '~> 4.1'
gem 'sprockets-rails', '~> 3.2', require: 'sprockets/railtie'
gem 'stoplight', '~> 2.1.3'
gem 'strong_migrations', '~> 0.4'
gem 'tty-command', '~> 0.8', require: false
gem 'tty-command', '~> 0.9', require: false
gem 'tty-prompt', '~> 0.19', require: false
gem 'twitter-text', '~> 1.14'
gem 'tzinfo-data', '~> 1.2019'
......@@ -116,7 +116,7 @@ end
group :test do
gem 'capybara', '~> 3.29'
gem 'climate_control', '~> 0.2'
gem 'faker', '~> 2.4'
gem 'faker', '~> 2.5'
gem 'microformats', '~> 4.1'
gem 'rails-controller-testing', '~> 1.0'
gem 'rspec-sidekiq', '~> 3.0'
......
......@@ -93,7 +93,7 @@ GEM
tzinfo (~> 1.1)
addressable (2.7.0)
public_suffix (>= 2.0.2, < 5.0)
airbrussh (1.3.3)
airbrussh (1.3.4)
sshkit (>= 1.6.1, != 1.7.0)
annotate (2.7.5)
activerecord (>= 3.2, < 7.0)
......@@ -142,7 +142,7 @@ GEM
bundler (>= 1.2.0, < 3)
thor (~> 0.18)
byebug (11.0.0)
capistrano (3.11.1)
capistrano (3.11.2)
airbrussh (>= 1.0.0)
i18n
rake (>= 10.0.0)
......@@ -188,13 +188,14 @@ GEM
css_parser (1.7.0)
addressable
debug_inspector (0.0.3)
derailed_benchmarks (1.3.6)
derailed_benchmarks (1.4.0)
benchmark-ips (~> 2)
get_process_mem (~> 0)
heapy (~> 0)
memory_profiler (~> 0)
rack (>= 1)
rake (> 10, < 13)
ruby-statistics (>= 2.1)
thor (~> 0.19)
devise (4.7.1)
bcrypt (~> 3.0)
......@@ -233,13 +234,13 @@ GEM
faraday
multi_json
encryptor (3.0.0)
equatable (0.5.0)
equatable (0.6.1)
erubi (1.8.0)
et-orbi (1.1.6)
tzinfo
excon (0.62.0)
fabrication (2.20.2)
faker (2.4.0)
faker (2.5.0)
i18n (~> 1.6.0)
faraday (0.15.4)
multipart-post (>= 1.2, < 3)
......@@ -265,7 +266,8 @@ GEM
fuubar (2.4.1)
rspec-core (~> 3.0)
ruby-progressbar (~> 1.4)
get_process_mem (0.2.3)
get_process_mem (0.2.4)
ffi (~> 1.0)
globalid (0.4.2)
activesupport (>= 4.2.0)
goldfinger (2.1.0)
......@@ -427,13 +429,13 @@ GEM
parser (2.6.4.0)
ast (~> 2.4.0)
parslet (1.8.2)
pastel (0.7.2)
equatable (~> 0.5.0)
tty-color (~> 0.4.0)
pastel (0.7.3)
equatable (~> 0.6)
tty-color (~> 0.5)
pg (1.1.4)
pghero (2.3.0)
activerecord (>= 5)
pkg-config (1.3.8)
pkg-config (1.3.9)
premailer (1.11.1)
addressable
css_parser (>= 1.6.0)
......@@ -568,6 +570,7 @@ GEM
ruby-progressbar (1.10.1)
ruby-saml (1.9.0)
nokogiri (>= 1.5.10)
ruby-statistics (2.1.1)
rufus-scheduler (3.5.2)
fugit (~> 1.1, >= 1.1.5)
safe_yaml (1.0.5)
......@@ -628,8 +631,8 @@ GEM
thor (0.20.3)
thread_safe (0.3.6)
tilt (2.0.9)
tty-color (0.4.3)
tty-command (0.8.2)
tty-color (0.5.0)
tty-command (0.9.0)
pastel (~> 0.7.0)
tty-cursor (0.7.0)
tty-prompt (0.19.0)
......@@ -654,7 +657,7 @@ GEM
uniform_notifier (1.12.1)
warden (1.2.8)
rack (>= 2.0.6)
webmock (3.7.5)
webmock (3.7.6)
addressable (>= 2.3.6)
crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0)
......@@ -708,7 +711,7 @@ DEPENDENCIES
doorkeeper (~> 5.2)
dotenv-rails (~> 2.7)
fabrication (~> 2.20)
faker (~> 2.4)
faker (~> 2.5)
fast_blank (~> 1.0)
fastimage
fog-core (<= 2.1.0)
......@@ -794,7 +797,7 @@ DEPENDENCIES
streamio-ffmpeg (~> 3.0)
strong_migrations (~> 0.4)
thor (~> 0.20)
tty-command (~> 0.8)
tty-command (~> 0.9)
tty-prompt (~> 0.19)
twitter-text (~> 1.14)
tzinfo-data (~> 1.2019)
......
......@@ -55,7 +55,7 @@ Private posts, locked accounts, phrase filtering, muting, blocking and all sorts
**OAuth2 and a straightforward REST API**
Mastodon acts as an OAuth2 provider so 3rd party apps can use the REST and Streaming APIs, resulting in a rich app ecosystem with a lot of choice!
Mastodon acts as an OAuth2 provider so 3rd party apps can use the REST and Streaming APIs, resulting in a rich app ecosystem with a lot of choices!
## Deployment
......
......@@ -4,6 +4,7 @@ class Api::V1::Instances::ActivityController < Api::BaseController
before_action :require_enabled_api!
skip_before_action :set_cache_headers
skip_before_action :require_authenticated_user!, unless: :whitelist_mode?
respond_to :json
......
......@@ -4,6 +4,7 @@ class Api::V1::Instances::PeersController < Api::BaseController
before_action :require_enabled_api!
skip_before_action :set_cache_headers
skip_before_action :require_authenticated_user!, unless: :whitelist_mode?
respond_to :json
......
......@@ -4,6 +4,7 @@ class Api::V1::InstancesController < Api::BaseController
respond_to :json
skip_before_action :set_cache_headers
skip_before_action :require_authenticated_user!, unless: :whitelist_mode?
def show
expires_in 3.minutes, public: true
......
......@@ -5,11 +5,17 @@ class Api::V1::StreamingController < Api::BaseController
def index
if Rails.configuration.x.streaming_api_base_url != request.host
uri = URI.parse(request.url)
uri.host = URI.parse(Rails.configuration.x.streaming_api_base_url).host
redirect_to uri.to_s, status: 301
redirect_to streaming_api_url, status: 301
else
raise ActiveRecord::RecordNotFound
not_found
end
end
private
def streaming_api_url
Addressable::URI.parse(request.url).tap do |uri|
uri.host = Addressable::URI.parse(Rails.configuration.x.streaming_api_base_url).host
end.to_s
end
end
......@@ -13,7 +13,7 @@ class Api::V1::Timelines::HomeController < Api::BaseController
render json: @statuses,
each_serializer: REST::StatusSerializer,
relationships: StatusRelationshipsPresenter.new(@statuses, current_user&.account_id),
status: regeneration_in_progress? ? 206 : 200
status: account_home_feed.regenerating? ? 206 : 200
end
private
......@@ -62,8 +62,4 @@ class Api::V1::Timelines::HomeController < Api::BaseController
def pagination_since_id
@statuses.first.id
end
def regeneration_in_progress?
Redis.current.exists("account:#{current_account.id}:regeneration")
end
end
......@@ -97,7 +97,7 @@ export function expandTimeline(timelineId, path, params = {}, done = noOp) {
api(getState).get(path, { params }).then(response => {
const next = getLinks(response).refs.find(link => link.rel === 'next');
dispatch(importFetchedStatuses(response.data));
dispatch(expandTimelineSuccess(timelineId, response.data, next ? next.uri : null, response.code === 206, isLoadingRecent, isLoadingMore, isLoadingRecent && preferPendingItems));
dispatch(expandTimelineSuccess(timelineId, response.data, next ? next.uri : null, response.status === 206, isLoadingRecent, isLoadingMore, isLoadingRecent && preferPendingItems));
done();
}).catch(error => {
dispatch(expandTimelineFail(timelineId, error, isLoadingMore));
......
import React from 'react';
import PropTypes from 'prop-types';
export default class ExtendedVideoPlayer extends React.PureComponent {
export default class GIFV extends React.PureComponent {
static propTypes = {
src: PropTypes.string.isRequired,
alt: PropTypes.string,
width: PropTypes.number,
height: PropTypes.number,
time: PropTypes.number,
controls: PropTypes.bool.isRequired,
muted: PropTypes.bool.isRequired,
onClick: PropTypes.func,
};
handleLoadedData = () => {
if (this.props.time) {
this.video.currentTime = this.props.time;
}
}
componentDidMount () {
this.video.addEventListener('loadeddata', this.handleLoadedData);
}
state = {
loading: true,
};
componentWillUnmount () {
this.video.removeEventListener('loadeddata', this.handleLoadedData);
handleLoadedData = () => {
this.setState({ loading: false });
}
setRef = (c) => {
this.video = c;
componentWillReceiveProps (nextProps) {
if (nextProps.src !== this.props.src) {
this.setState({ loading: true });
}
}
handleClick = e => {
e.stopPropagation();
const handler = this.props.onClick;
if (handler) handler();
const { onClick } = this.props;
if (onClick) {
e.stopPropagation();
onClick();
}
}
render () {
const { src, muted, controls, alt } = this.props;
const { src, width, height, alt } = this.props;
const { loading } = this.state;
return (
<div className='extended-video-player'>
<div className='gifv' style={{ position: 'relative' }}>
{loading && (
<canvas
width={width}
height={height}
role='button'
tabIndex='0'
aria-label={alt}
title={alt}
onClick={this.handleClick}
/>
)}
<video
ref={this.setRef}
src={src}
autoPlay
width={width}
height={height}
role='button'
tabIndex='0'
aria-label={alt}
title={alt}
muted={muted}
controls={controls}
loop={!controls}
muted
loop
autoPlay
playsInline
onClick={this.handleClick}
onLoadedData={this.handleLoadedData}
style={{ position: loading ? 'absolute' : 'static', top: 0, left: 0 }}
/>
</div>
);
......
import React from 'react';
import PropTypes from 'prop-types';
import { FormattedMessage } from 'react-intl';
import illustration from 'mastodon/../images/elephant_ui_disappointed.svg';
import classNames from 'classnames';
const MissingIndicator = () => (
<div className='regeneration-indicator missing-indicator'>
<div>
<div className='regeneration-indicator__figure' />
const MissingIndicator = ({ fullPage }) => (
<div className={classNames('regeneration-indicator', { 'regeneration-indicator--without-header': fullPage })}>
<div className='regeneration-indicator__figure'>
<img src={illustration} alt='' />
</div>
<div className='regeneration-indicator__label'>
<FormattedMessage id='missing_indicator.label' tagName='strong' defaultMessage='Not found' />
<FormattedMessage id='missing_indicator.sublabel' defaultMessage='This resource could not be found' />
</div>
<div className='regeneration-indicator__label'>
<FormattedMessage id='missing_indicator.label' tagName='strong' defaultMessage='Not found' />
<FormattedMessage id='missing_indicator.sublabel' defaultMessage='This resource could not be found' />
</div>
</div>
);
MissingIndicator.propTypes = {
fullPage: PropTypes.bool,
};
export default MissingIndicator;
import React from 'react';
import { FormattedMessage } from 'react-intl';
import illustration from 'mastodon/../images/elephant_ui_working.svg';
const MissingIndicator = () => (
<div className='regeneration-indicator'>
<div className='regeneration-indicator__figure'>
<img src={illustration} alt='' />
</div>
<div className='regeneration-indicator__label'>
<FormattedMessage id='regeneration_indicator.label' tagName='strong' defaultMessage='Loading&hellip;' />
<FormattedMessage id='regeneration_indicator.sublabel' defaultMessage='Your home feed is being prepared!' />
</div>
</div>
);
export default MissingIndicator;
......@@ -216,14 +216,14 @@ export default class StatusContent extends React.PureComponent {
return (
<div className={classNames} ref={this.setRef} tabIndex='0' style={directionStyle} onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp}>
<p style={{ marginBottom: hidden && status.get('mentions').isEmpty() ? '0px' : null }}>
<span dangerouslySetInnerHTML={spoilerContent} lang={status.get('language')} />
<span dangerouslySetInnerHTML={spoilerContent} />
{' '}
<button tabIndex='0' className={`status__content__spoiler-link ${hidden ? 'status__content__spoiler-link--show-more' : 'status__content__spoiler-link--show-less'}`} onClick={this.handleSpoilerClick}>{toggleText}</button>
</p>
{mentionsPlaceholder}
<div tabIndex={!hidden ? 0 : null} className={`status__content__text ${!hidden ? 'status__content__text--visible' : ''}`} style={directionStyle} dangerouslySetInnerHTML={content} lang={status.get('language')} />
<div tabIndex={!hidden ? 0 : null} className={`status__content__text ${!hidden ? 'status__content__text--visible' : ''}`} style={directionStyle} dangerouslySetInnerHTML={content} />
{!hidden && !!status.get('poll') && <PollContainer pollId={status.get('poll')} />}
</div>
......@@ -231,7 +231,7 @@ export default class StatusContent extends React.PureComponent {
} else if (this.props.onClick) {
const output = [
<div className={classNames} ref={this.setRef} tabIndex='0' style={directionStyle} onMouseDown={this.handleMouseDown} onMouseUp={this.handleMouseUp} key='status-content'>
<div className='status__content__text status__content__text--visible' style={directionStyle} dangerouslySetInnerHTML={content} lang={status.get('language')} />
<div className='status__content__text status__content__text--visible' style={directionStyle} dangerouslySetInnerHTML={content} />
{!!status.get('poll') && <PollContainer pollId={status.get('poll')} />}
</div>,
......@@ -245,7 +245,7 @@ export default class StatusContent extends React.PureComponent {
} else {
return (
<div className={classNames} ref={this.setRef} tabIndex='0' style={directionStyle}>
<div className='status__content__text status__content__text--visible' style={directionStyle} dangerouslySetInnerHTML={content} lang={status.get('language')} />
<div className='status__content__text status__content__text--visible' style={directionStyle} dangerouslySetInnerHTML={content} />
{!!status.get('poll') && <PollContainer pollId={status.get('poll')} />}
</div>
......
import { debounce } from 'lodash';
import React from 'react';
import { FormattedMessage } from 'react-intl';
import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
import StatusContainer from '../containers/status_container';
import ImmutablePureComponent from 'react-immutable-pure-component';
import LoadGap from './load_gap';
import ScrollableList from './scrollable_list';
import RegenerationIndicator from 'mastodon/components/regeneration_indicator';
export default class StatusList extends ImmutablePureComponent {
......@@ -81,18 +81,7 @@ export default class StatusList extends ImmutablePureComponent {
const { isLoading, isPartial } = other;
if (isPartial) {
return (
<div className='regeneration-indicator'>
<div>
<div className='regeneration-indicator__figure' />
<div className='regeneration-indicator__label'>
<FormattedMessage id='regeneration_indicator.label' tagName='strong' defaultMessage='Loading&hellip;' />
<FormattedMessage id='regeneration_indicator.sublabel' defaultMessage='Your home feed is being prepared!' />
</div>
</div>
</div>
);
return <RegenerationIndicator />;
}
let scrollableContent = (isLoading || statusIds.size > 0) ? (
......
......@@ -83,6 +83,7 @@ class AccountTimeline extends ImmutablePureComponent {
if (!isAccount) {
return (
<Column>
<ColumnBackButton multiColumn={multiColumn} />
<MissingIndicator />
</Column>
);
......
......@@ -88,7 +88,7 @@ class ComposeForm extends ImmutablePureComponent {
const { isSubmitting, isChangingUpload, isUploading, anyMedia } = this.props;
const fulltext = [this.props.spoilerText, countableText(this.props.text)].join('');
if (isSubmitting || isUploading || isChangingUpload || length(fulltext) > 500 || (fulltext.length !== 0 && fulltext.trim().length === 0 && !anyMedia)) {
if (isSubmitting || isUploading || isChangingUpload || length(fulltext) > 1000 || (fulltext.length !== 0 && fulltext.trim().length === 0 && !anyMedia)) {
return;
}
......@@ -181,7 +181,7 @@ class ComposeForm extends ImmutablePureComponent {
const { intl, onPaste, showSearch, anyMedia } = this.props;
const disabled = this.props.isSubmitting;
const text = [this.props.spoilerText, countableText(this.props.text)].join('');
const disabledButton = disabled || this.props.isUploading || this.props.isChangingUpload || length(text) > 500 || (text.length !== 0 && text.trim().length === 0 && !anyMedia);
const disabledButton = disabled || this.props.isUploading || this.props.isChangingUpload || length(text) > 1000 || (text.length !== 0 && text.trim().length === 0 && !anyMedia);
let publishText = '';
if (this.props.privacy === 'private' || this.props.privacy === 'direct') {
......@@ -243,7 +243,7 @@ class ComposeForm extends ImmutablePureComponent {
<PrivacyDropdownContainer />
<SpoilerButtonContainer />
</div>
<div className='character-counter__wrapper'><CharacterCounter max={500} text={text} /></div>
<div className='character-counter__wrapper'><CharacterCounter max={1000} text={text} /></div>
</div>
<div className='compose-form__publish'>
......
......@@ -4,7 +4,7 @@ import MissingIndicator from '../../components/missing_indicator';
const GenericNotFound = () => (
<Column>
<MissingIndicator />
<MissingIndicator fullPage />
</Column>
);
......
......@@ -16,6 +16,7 @@ import UploadProgress from 'mastodon/features/compose/components/upload_progress
import CharacterCounter from 'mastodon/features/compose/components/character_counter';
import { length } from 'stringz';
import { Tesseract as fetchTesseract } from 'mastodon/features/ui/util/async-components';
import GIFV from 'mastodon/components/gifv';
const messages = defineMessages({
close: { id: 'lightbox.close', defaultMessage: 'Close' },
......@@ -41,6 +42,36 @@ const removeExtraLineBreaks = str => str.replace(/\n\n/g, '******')
const assetHost = process.env.CDN_HOST || '';
class ImageLoader extends React.PureComponent {
static propTypes = {
src: PropTypes.string.isRequired,
width: PropTypes.number,
height: PropTypes.number,
};
state = {
loading: true,
};
componentDidMount() {
const image = new Image();
image.addEventListener('load', () => this.setState({ loading: false }));
image.src = this.props.src;
}
render () {
const { loading } = this.state;
if (loading) {
return <canvas width={this.props.width} height={this.props.height} />;
} else {
return <img {...this.props} alt='' />;
}
}
}
export default @connect(mapStateToProps, mapDispatchToProps)
@injectIntl
class FocalPointModal extends ImmutablePureComponent {
......@@ -60,6 +91,7 @@ class FocalPointModal extends ImmutablePureComponent {
description: '',
dirty: false,
progress: 0,
loading: true,
};
componentWillMount () {
......@@ -242,8 +274,8 @@ class FocalPointModal extends ImmutablePureComponent {
<div className='focal-point-modal__content'>
{focals && (
<div className={classNames('focal-point', { dragging })} ref={this.setRef} onMouseDown={this.handleMouseDown} onTouchStart={this.handleTouchStart}>
{media.get('type') === 'image' && <img src={media.get('url')} width={width} height={height} alt='' />}
{media.get('type') === 'gifv' && <video src={media.get('url')} width={width} height={height} loop muted autoPlay />}
{media.get('type') === 'image' && <ImageLoader src={media.get('url')} width={width} height={height} alt='' />}
{media.get('type') === 'gifv' && <GIFV src={media.get('url')} width={width} height={height} />}
<div className='focal-point__preview'>
<strong><FormattedMessage id='upload_modal.preview_label' defaultMessage='Preview ({ratio})' values={{ ratio: '16:9' }} /></strong>
......
......@@ -3,13 +3,13 @@ import ReactSwipeableViews from 'react-swipeable-views';
import ImmutablePropTypes from 'react-immutable-proptypes';
import PropTypes from 'prop-types';
import Video from 'mastodon/features/video';
import ExtendedVideoPlayer from 'mastodon/components/extended_video_player';
import classNames from 'classnames';
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
import IconButton from 'mastodon/components/icon_button';
import ImmutablePureComponent from 'react-immutable-pure-component';
import ImageLoader from './image_loader';
import Icon from 'mastodon/components/icon';
import GIFV from 'mastodon/components/gifv';
const messages = defineMessages({
close: { id: 'lightbox.close', defaultMessage: 'Close' },
......@@ -169,10 +169,8 @@ class MediaModal extends ImmutablePureComponent {
);
} else if (image.get('type') === 'gifv') {
return (
<ExtendedVideoPlayer
<GIFV
src={image.get('url')}
muted
controls={false}
width={width}
height={height}
key={image.get('preview_url')}
......
......@@ -115,7 +115,7 @@
"conversation.mark_as_read": "اعتبرها كمقروءة",
"conversation.open": "اعرض المحادثة",
"conversation.with": "بـ {names}",
"directory.federated": "From known fediverse",
"directory.federated": "مِن الفديفرس المعروف",
"directory.local": "مِن {domain} فقط",
"directory.new_arrivals": "الوافدون الجُدد",
"directory.recently_active": "نشط مؤخرا",
......@@ -155,7 +155,7 @@
"error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.",
"error.unexpected_crash.next_steps": "Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.",
"errors.unexpected_crash.copy_stacktrace": "Copy stacktrace to clipboard",
"errors.unexpected_crash.report_issue": "Report issue",
"errors.unexpected_crash.report_issue": "الإبلاغ عن خلل",
"follow_request.authorize": "ترخيص",
"follow_request.reject": "رفض",
"getting_started.developers": "المُطوِّرون",
......@@ -178,7 +178,6 @@
"home.column_settings.basic": "الأساسية",
"home.column_settings.show_reblogs": "عرض الترقيات",
"home.column_settings.show_replies": "اعرض الردود",
"home.column_settings.update_live": "Update in real-time",
"intervals.full.days": "{number, plural, one {# يوم} other {# أيام}}",
"intervals.full.hours": "{number, plural, one {# ساعة} other {# ساعات}}",
"intervals.full.minutes": "{number, plural, one {# دقيقة} other {# دقائق}}",
......@@ -244,7 +243,7 @@
"lists.new.title_placeholder": "عنوان القائمة الجديدة",
"lists.search": "إبحث في قائمة الحسابات التي تُتابِعها",
"lists.subheading": "قوائمك",
"load_pending": "{count, plural, one {# new item} other {# new items}}",
"load_pending": "{count, plural, one {# عنصر جديد} other {# عناصر جديدة}}",
"loading_indicator.label": "تحميل...",
"media_gallery.toggle_visible": "عرض / إخفاء",
"missing_indicator.label": "غير موجود",
......@@ -272,7 +271,6 @@
"navigation_bar.preferences": "التفضيلات",
"navigation_bar.public_timeline": "الخيط العام الموحد",
"navigation_bar.security": "الأمان",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "أُعجِب {name} بمنشورك",
"notification.follow": "{name} يتابعك",
"notification.mention": "{name} ذكرك",
......@@ -301,10 +299,10 @@
"notifications.group": "{count} إشعارات",
"poll.closed": "انتهى",
"poll.refresh": "تحديث",
"poll.total_people": "{count, plural, one {# person} other {# people}}",
"poll.total_people": "{count, plural, one {# شخص} other {# أشخاص}}",
"poll.total_votes": "{count, plural, one {# صوت} other {# أصوات}}",
"poll.vote": "صَوّت",
"poll.voted": "You voted for this answer",
"poll.voted": "لقد صوّتت على هذه الإجابة",
"poll_button.add_poll": "إضافة استطلاع للرأي",
"poll_button.remove_poll": "إزالة استطلاع الرأي",
"privacy.change": "اضبط خصوصية المنشور",
......@@ -391,10 +389,10 @@
"tabs_bar.notifications": "الإخطارات",
"tabs_bar.search": "البحث",
"time_remaining.days": "{number, plural, one {# يوم} other {# أيام}} متبقية",
"time_remaining.hours": "{number, plural, one {# hour} other {# hours}} left",
"time_remaining.minutes": "{number, plural, one {# minute} other {# minutes}} left",
"time_remaining.hours": "{number, plural, one {# ساعة} other {# ساعات}} متبقية",
"time_remaining.minutes": "{number, plural, one {# دقيقة} other {# دقائق}} متبقية",
"time_remaining.moments": "لحظات متبقية",
"time_remaining.seconds": "{number, plural, one {# second} other {# seconds}} left",
"time_remaining.seconds": "{number, plural, one {# ثانية} other {# ثوانٍ}} متبقية",
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} آخرون {people}} يتحدثون",
"trends.trending_now": "المتداولة الآن",
"ui.beforeunload": "سوف تفقد مسودتك إن تركت ماستدون.",
......@@ -408,7 +406,7 @@
"upload_modal.analyzing_picture": "جارٍ فحص الصورة…",
"upload_modal.apply": "طبّق",
"upload_modal.description_placeholder": "A quick brown fox jumps over the lazy dog",
"upload_modal.detect_text": "Detect text from picture",
"upload_modal.detect_text": "اكتشف النص مِن الصورة",
"upload_modal.edit_media": "تعديل الوسائط",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "معاينة ({ratio})",
......
......@@ -178,7 +178,6 @@
"home.column_settings.basic": "Basic",
"home.column_settings.show_reblogs": "Amosar toots compartíos",
"home.column_settings.show_replies": "Amosar rempuestes",
"home.column_settings.update_live": "Update in real-time",
"intervals.full.days": "{number, plural, one {# day} other {# days}}",
"intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
"intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
......@@ -272,7 +271,6 @@
"navigation_bar.preferences": "Preferencies",
"navigation_bar.public_timeline": "Llinia temporal federada",
"navigation_bar.security": "Seguranza",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} favourited your status",
"notification.follow": "{name} siguióte",
"notification.mention": "{name} mentóte",
......
......@@ -178,7 +178,6 @@
"home.column_settings.basic": "Basic",
"home.column_settings.show_reblogs": "Show boosts",
"home.column_settings.show_replies": "Show replies",
"home.column_settings.update_live": "Update in real-time",
"intervals.full.days": "{number, plural, one {# day} other {# days}}",
"intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
"intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
......@@ -272,7 +271,6 @@
"navigation_bar.preferences": "Предпочитания",
"navigation_bar.public_timeline": "Публичен канал",
"navigation_bar.security": "Security",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} хареса твоята публикация",
"notification.follow": "{name} те последва",
"notification.mention": "{name} те спомена",
......@@ -412,7 +410,7 @@
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Uploading...",
"upload_progress.label": "Uploading",
"video.close": "Close video",
"video.exit_fullscreen": "Exit full screen",
"video.expand": "Expand video",
......
......@@ -178,7 +178,6 @@
"home.column_settings.basic": "সাধারণ",
"home.column_settings.show_reblogs": "সমর্থনগুলো দেখান",
"home.column_settings.show_replies": "মতামত দেখান",
"home.column_settings.update_live": "Update in real-time",
"intervals.full.days": "{number, plural, one {# day} other {# days}}",
"intervals.full.hours": "{number, plural, one {# ঘটা} other {# ঘটা}}",
"intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
......@@ -272,7 +271,6 @@
"navigation_bar.preferences": "পছন্দসমূহ",
"navigation_bar.public_timeline": "যুক্তবিশ্বের সময়রেখা",
"navigation_bar.security": "নিরাপত্তা",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} আপনার কার্যক্রম পছন্দ করেছেন",
"notification.follow": "{name} আপনাকে অনুসরণ করেছেন",
"notification.mention": "{name} আপনাকে উল্লেখ করেছেন",
......
......@@ -178,7 +178,6 @@
"home.column_settings.basic": "Basic",
"home.column_settings.show_reblogs": "Show boosts",
"home.column_settings.show_replies": "Show replies",
"home.column_settings.update_live": "Update in real-time",
"intervals.full.days": "{number, plural, one {# day} other {# days}}",
"intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
"intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
......@@ -272,7 +271,6 @@
"navigation_bar.preferences": "Preferences",
"navigation_bar.public_timeline": "Federated timeline",
"navigation_bar.security": "Security",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} favourited your status",
"notification.follow": "{name} followed you",
"notification.mention": "{name} mentioned you",
......@@ -412,7 +410,7 @@
"upload_modal.edit_media": "Edit media",
"upload_modal.hint": "Click or drag the circle on the preview to choose the focal point which will always be in view on all thumbnails.",
"upload_modal.preview_label": "Preview ({ratio})",
"upload_progress.label": "Uploading...",
"upload_progress.label": "Uploading",
"video.close": "Close video",
"video.exit_fullscreen": "Exit full screen",
"video.expand": "Expand video",
......
......@@ -178,7 +178,6 @@
"home.column_settings.basic": "Bàsic",
"home.column_settings.show_reblogs": "Mostrar impulsos",
"home.column_settings.show_replies": "Mostrar respostes",
"home.column_settings.update_live": "Update in real-time",
"intervals.full.days": "{number, plural, one {# dia} other {# dies}}",
"intervals.full.hours": "{number, plural, one {# hora} other {# hores}}",
"intervals.full.minutes": "{number, plural, one {# minut} other {# minuts}}",
......@@ -272,7 +271,6 @@
"navigation_bar.preferences": "Preferències",
"navigation_bar.public_timeline": "Línia de temps federada",
"navigation_bar.security": "Seguretat",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} ha afavorit el teu estat",
"notification.follow": "{name} et segueix",
"notification.mention": "{name} t'ha esmentat",
......@@ -395,7 +393,7 @@
"time_remaining.minutes": "{number, plural, one {# minut} other {# minuts}} restants",
"time_remaining.moments": "Moments restants",
"time_remaining.seconds": "{number, plural, one {# segon} other {# segons}} restants",
"trends.count_by_accounts": "{count} {rawCount, plural, one {persona} other {gent}} talking",
"trends.count_by_accounts": "{count} {rawCount, plural, one {persona} other {persones}} parlant-hi",
"trends.trending_now": "Ara en tendència",
"ui.beforeunload": "El teu esborrany es perdrà si surts de Mastodon.",
"upload_area.title": "Arrossega i deixa anar per a carregar",
......
......@@ -178,7 +178,6 @@
"home.column_settings.basic": "Bàsichi",
"home.column_settings.show_reblogs": "Vede e spartere",
"home.column_settings.show_replies": "Vede e risposte",
"home.column_settings.update_live": "Attualizà in tempu reale",
"intervals.full.days": "{number, plural, one {# ghjornu} other {# ghjorni}}",
"intervals.full.hours": "{number, plural, one {# ora} other {# ore}}",
"intervals.full.minutes": "{number, plural, one {# minuta} other {# minute}}",
......@@ -272,7 +271,6 @@
"navigation_bar.preferences": "Preferenze",
"navigation_bar.public_timeline": "Linea pubblica glubale",
"navigation_bar.security": "Sicurità",
"notification.and_n_others": "è {count, plural, one {# altru} other {# altri}}",
"notification.favourite": "{name} hà aghjuntu u vostru statutu à i so favuriti",
"notification.follow": "{name} v'hà seguitatu",
"notification.mention": "{name} v'hà mintuvatu",
......
......@@ -43,7 +43,7 @@
"alert.unexpected.message": "Objevila se neočekávaná chyba.",
"alert.unexpected.title": "Jejda!",
"autosuggest_hashtag.per_week": "{count} za týden",
"boost_modal.combo": "Příště můžete pro přeskočení kliknout na {combo}",
"boost_modal.combo": "Příště můžete pro přeskočení stisknout {combo}",
"bundle_column_error.body": "Při načítání tohoto komponentu se něco pokazilo.",
"bundle_column_error.retry": "Zkuste to znovu",
"bundle_column_error.title": "Chyba sítě",
......@@ -164,7 +164,7 @@
"getting_started.heading": "Začínáme",
"getting_started.invite": "Pozvat lidi",
"getting_started.open_source_notice": "Mastodon je otevřený software. Na GitHubu k němu můžete přispět nebo nahlásit chyby: {github}.",
"getting_started.security": "Zabezpečení",
"getting_started.security": "Nastavení účtu",
"getting_started.terms": "Podmínky používání",
"hashtag.column_header.tag_mode.all": "a {additional}",
"hashtag.column_header.tag_mode.any": "nebo {additional}",
......@@ -178,7 +178,6 @@
"home.column_settings.basic": "Základní",
"home.column_settings.show_reblogs": "Zobrazit boosty",
"home.column_settings.show_replies": "Zobrazit odpovědi",
"home.column_settings.update_live": "Aktualizovat v reálném čase",
"intervals.full.days": "{number, plural, one {# den} few {# dny} many {# dne} other {# dní}}",
"intervals.full.hours": "{number, plural, one {# hodina} few {# hodiny} many {# hodiny} other {# hodin}}",
"intervals.full.minutes": "{number, plural, one {# minuta} few {# minuty} many {# minuty} other {# minut}}",
......@@ -272,7 +271,6 @@
"navigation_bar.preferences": "Předvolby",
"navigation_bar.public_timeline": "Federovaná časová osa",
"navigation_bar.security": "Zabezpečení",
"notification.and_n_others": "a {count, plural, one {# další} few {# další} many {# dalších} other {# dalších}}",
"notification.favourite": "{name} si oblíbil/a váš toot",
"notification.follow": "{name} vás začal/a sledovat",
"notification.mention": "{name} vás zmínil/a",
......
......@@ -178,7 +178,6 @@
"home.column_settings.basic": "Syml",
"home.column_settings.show_reblogs": "Dangos bŵstiau",
"home.column_settings.show_replies": "Dangos ymatebion",
"home.column_settings.update_live": "Update in real-time",
"intervals.full.days": "{number, plural, one {# ddydd} other {# o ddyddiau}}",
"intervals.full.hours": "{number, plural, one {# awr} other {# o oriau}}",
"intervals.full.minutes": "{number, plural, one {# funud} other {# o funudau}}",
......@@ -272,7 +271,6 @@
"navigation_bar.preferences": "Dewisiadau",
"navigation_bar.public_timeline": "Ffrwd y ffederasiwn",
"navigation_bar.security": "Diogelwch",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "hoffodd {name} eich tŵt",
"notification.follow": "dilynodd {name} chi",
"notification.mention": "Soniodd {name} amdanoch chi",
......
......@@ -111,10 +111,10 @@
"confirmations.reply.message": "Hvis du svarer nu vil du overskrive den besked du er ved at skrive. Er du sikker på, du vil fortsætte?",
"confirmations.unfollow.confirm": "Følg ikke længere",
"confirmations.unfollow.message": "Er du sikker på, du ikke længere vil følge {name}?",
"conversation.delete": "Delete conversation",
"conversation.mark_as_read": "Mark as read",
"conversation.open": "View conversation",
"conversation.with": "With {names}",
"conversation.delete": "Slet samtale",
"conversation.mark_as_read": "Marker som læst",
"conversation.open": "Vis samtale",
"conversation.with": "Med {names}",
"directory.federated": "Fra kendt fedivers",
"directory.local": "Kun fra {domain}",
"directory.new_arrivals": "Nye ankomster",
......@@ -178,7 +178,6 @@
"home.column_settings.basic": "Grundlæggende",
"home.column_settings.show_reblogs": "Vis fremhævelser",
"home.column_settings.show_replies": "Vis svar",
"home.column_settings.update_live": "Update in real-time",
"intervals.full.days": "{number, plural, one {# dag} other {# dage}}",
"intervals.full.hours": "{number, plural, one {# time} other {# timer}}",
"intervals.full.minutes": "{number, plural, one {# minut} other {# minutter}}",
......@@ -272,7 +271,6 @@
"navigation_bar.preferences": "Præferencer",
"navigation_bar.public_timeline": "Fælles tidslinje",
"navigation_bar.security": "Sikkerhed",
"notification.and_n_others": "and {count, plural, one {# other} other {# others}}",
"notification.favourite": "{name} favoriserede din status",
"notification.follow": "{name} fulgte dig",
"notification.mention": "{name} nævnte dig",
......
......@@ -10,7 +10,7 @@
"account.edit_profile": "Profil bearbeiten",
"account.endorse": "Auf Profil hervorheben",
"account.follow": "Folgen",
"account.followers": "Folger_innen",
"account.followers": "Folgende",
"account.followers.empty": "Diesem Profil folgt noch niemand.",
"account.follows": "Folgt",
"account.follows.empty": "Dieses Profil folgt noch niemandem.",
......@@ -99,7 +99,7 @@
"confirmations.delete_list.confirm": "Löschen",
"confirmations.delete_list.message": "Bist du dir sicher, dass du diese Liste permanent löschen möchtest?",
"confirmations.domain_block.confirm": "Die ganze Domain verbergen",
"confirmations.domain_block.message": "Bist du dir wirklich sicher, dass du die ganze Domain {domain} blockieren willst? In den meisten Fällen reichen ein paar gezielte Blockierungen oder Stummschaltungen aus. Nach der Blockierung wirst du nichts mehr von dieser Domain in öffentlichen Zeitleisten oder Benachrichtigungen sehen. Deine Folger_innen von dieser Domain werden auch entfernt.",
"confirmations.domain_block.message": "Bist du dir wirklich sicher, dass du die ganze Domain {domain} blockieren willst? In den meisten Fällen reichen ein paar gezielte Blockierungen oder Stummschaltungen aus. Du wirst den Inhalt von dieser Domain nicht in irgendwelchen öffentlichen Timelines oder den Benachrichtigungen finden. Deine Folgenden von dieser Domain werden entfernt.",
"confirmations.logout.confirm": "Abmelden",
"confirmations.logout.message": "Bist du sicher, dass du dich abmelden möchtest?",
"confirmations.mute.confirm": "Stummschalten",
......@@ -178,7 +178,6 @@
"home.column_settings.basic": "Einfach",
"home.column_settings.show_reblogs": "Geteilte Beiträge anzeigen",
"home.column_settings.show_replies": "Antworten anzeigen",
"home.column_settings.update_live": "In Echtzeit aktualisieren",
"intervals.full.days": "{number, plural, one {# Tag} other {# Tage}}",
"intervals.full.hours": "{number, plural, one {# Stunde} other {# Stunden}}",
"intervals.full.minutes": "{number, plural, one {# Minute} other {# Minuten}}",
......@@ -191,7 +190,7 @@
"introduction.federation.local.text": "Öffentliche Beiträge von Leuten auf demselben Server wie du erscheinen in der lokalen Zeitleiste.",
"introduction.interactions.action": "Tutorial beenden!",
"introduction.interactions.favourite.headline": "Favorisieren",
"introduction.interactions.favourite.text": "Du kannst Beitrage für später speichern und ihre Autor_innen wissen lassen, dass sie dir gefallen haben, indem du sie favorisierst.",
"introduction.interactions.favourite.text": "Du kannst Beitrage für später speichern und ihre Autoren wissen lassen, dass sie dir gefallen haben, indem du sie favorisierst.",
"introduction.interactions.reblog.headline": "Teilen",
"introduction.interactions.reblog.text": "Du kannst Beiträge anderer mit deinen Followern teilen, indem du sie teilst.",
"introduction.interactions.reply.headline": "Antworten",
......@@ -261,7 +260,7 @@
"navigation_bar.favourites": "Favoriten",
"navigation_bar.filters": "Stummgeschaltene Wörter",
"navigation_bar.follow_requests": "Folgeanfragen",
"navigation_bar.follows_and_followers": "Folger_innen und Gefolgte",
"navigation_bar.follows_and_followers": "Folgende und Gefolgte",
"navigation_bar.info": "Über diesen Server",
"navigation_bar.keyboard_shortcuts": "Tastenkombinationen",
"navigation_bar.lists": "Listen",
......@@ -272,7 +271,6 @@
"navigation_bar.preferences": "Einstellungen",
"navigation_bar.public_timeline": "Föderierte Zeitleiste",
"navigation_bar.security": "Sicherheit",
"notification.and_n_others": "und {count, plural, one {# andere Person} other {# andere Personen}}",
"notification.favourite": "{name} hat deinen Beitrag favorisiert",
"notification.follow": "{name} folgt dir",
"notification.mention": "{name} hat dich erwähnt",
......@@ -285,7 +283,7 @@
"notifications.column_settings.filter_bar.advanced": "Zeige alle Kategorien an",
"notifications.column_settings.filter_bar.category": "Schnellfilterleiste",
"notifications.column_settings.filter_bar.show": "Anzeigen",
"notifications.column_settings.follow": "Neue Folger_innen:",
"notifications.column_settings.follow": "Neue Folgende:",
"notifications.column_settings.mention": "Erwähnungen:",
"notifications.column_settings.poll": "Ergebnisse von Umfragen:",
"notifications.column_settings.push": "Push-Benachrichtigungen",
......@@ -295,7 +293,7 @@
"notifications.filter.all": "Alle",
"notifications.filter.boosts": "Geteilte Beiträge",
"notifications.filter.favourites": "Favorisierungen",
"notifications.filter.follows": "Folger_innen",
"notifications.filter.follows": "Folgt",
"notifications.filter.mentions": "Erwähnungen",
"notifications.filter.polls": "Ergebnisse der Umfrage",
"notifications.group": "{count} Benachrichtigungen",
......@@ -310,8 +308,8 @@
"privacy.change": "Sichtbarkeit des Beitrags anpassen",
"privacy.direct.long": "Wird an erwähnte Profile gesendet",
"privacy.direct.short": "Direktnachricht",
"privacy.private.long": "Wird nur für deine Folger_innen sichtbar sein",
"privacy.private.short": "Nur für Folger_innen",
"privacy.private.long": "Wird nur für deine Folgende sichtbar sein",
"privacy.private.short": "Nur für Folgende",
"privacy.public.long": "Wird in öffentlichen Zeitleisten erscheinen",
"privacy.public.short": "Öffentlich",
"privacy.unlisted.long": "Wird in öffentlichen Zeitleisten nicht gezeigt",
......
......@@ -278,6 +278,19 @@
],
"path": "app/javascript/mastodon/components/poll.json"
},
{
"descriptors": [
{
"defaultMessage": "Loading…",
"id": "regeneration_indicator.label"
},
{
"defaultMessage": "Your home feed is being prepared!",
"id": "regeneration_indicator.sublabel"
}
],
"path": "app/javascript/mastodon/components/regeneration_indicator.json"
},
{
"descriptors": [
{
......@@ -445,19 +458,6 @@
],
"path": "app/javascript/mastodon/components/status_content.json"
},
{
"descriptors": [
{
"defaultMessage": "Loading…",
"id": "regeneration_indicator.label"
},
{
"defaultMessage": "Your home feed is being prepared!",
"id": "regeneration_indicator.sublabel"
}
],
"path": "app/javascript/mastodon/components/status_list.json"
},
{
"descriptors": [
{
......@@ -1135,15 +1135,6 @@
],
"path": "app/javascript/mastodon/features/compose/components/upload_form.json"
},
{
"descriptors": [
{
"defaultMessage": "Uploading...",
"id": "upload_progress.label"
}
],
"path": "app/javascript/mastodon/features/compose/components/upload_progress.json"
},
{
"descriptors": [
{
......@@ -1435,6 +1426,10 @@
},
{
"descriptors": [
{
"defaultMessage": "Refresh",
"id": "refresh"
},
{
"defaultMessage": "No one has favourited this toot yet. When someone does, they will show up here.",
"id": "empty_column.favourites"
......@@ -1483,10 +1478,6 @@
},
{
"descriptors": [
{
"defaultMessage": "Refresh",
"id": "refresh"
},
{
"defaultMessage": "Profile unavailable",
"id": "empty_column.account_unavailable"
......@@ -1640,6 +1631,10 @@
},
{
"descriptors": [
{