...
 
Commits (46)
  • Dan Hunsaker's avatar
    54192a9b
  • Yusuke Nakamura's avatar
    08281267
  • ThibG's avatar
    01e36231
  • Eugen Rochko's avatar
    Fix check-i18n builds (#11084) · 65efe892
    Eugen Rochko authored
    * Fix check-i18n builds
    
    * Remove check for missing plural forms
    65efe892
  • Eugen Rochko's avatar
    103a9f44
  • 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
  • dependabot-preview[bot]'s avatar
  • dependabot-preview[bot]'s avatar
  • dependabot-preview[bot]'s avatar
    Bump ox from 2.10.1 to 2.11.0 (#11101) · 9639a7f8
    dependabot-preview[bot] authored
    Bumps ox from 2.10.1 to 2.11.0.
    Signed-off-by: 's avatardependabot-preview[bot] <support@dependabot.com>
    9639a7f8
  • 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
  • ThibG's avatar
    Fix User#active scope only returning suspended users (#11111) · 17747e2c
    ThibG authored
    Fix a regression from #10660
    17747e2c
  • ThibG's avatar
  • Eugen Rochko's avatar
    New Crowdin translations (#11077) · ede0be5d
    Eugen Rochko authored
    * New translations en.json (Persian)
    [ci skip]
    
    * New translations en.yml (Dutch)
    [ci skip]
    
    * New translations simple_form.en.yml (Dutch)
    [ci skip]
    
    * New translations activerecord.en.yml (Dutch)
    [ci skip]
    
    * New translations devise.en.yml (Dutch)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Dutch)
    [ci skip]
    
    * New translations en.yml (Chinese Simplified)
    [ci skip]
    
    * New translations en.yml (Chinese Simplified)
    [ci skip]
    
    * New translations en.yml (Chinese Simplified)
    [ci skip]
    
    * New translations en.yml (Chinese Simplified)
    [ci skip]
    
    * New translations en.yml (Chinese Simplified)
    [ci skip]
    
    * New translations en.yml (Czech)
    [ci skip]
    
    * New translations en.yml (Chinese Simplified)
    [ci skip]
    
    * New translations en.yml (Chinese Simplified)
    [ci skip]
    
    * New translations en.yml (Chinese Simplified)
    [ci skip]
    
    * New translations en.yml (Chinese Simplified)
    [ci skip]
    
    * New translations en.yml (Chinese Simplified)
    [ci skip]
    
    * New translations en.yml (Chinese Simplified)
    [ci skip]
    
    * New translations en.json (Czech)
    [ci skip]
    
    * New translations en.json (Greek)
    [ci skip]
    
    * New translations simple_form.en.yml (Greek)
    [ci skip]
    
    * New translations en.json (Greek)
    [ci skip]
    
    * New translations en.yml (Chinese Simplified)
    [ci skip]
    
    * New translations en.yml (Persian)
    [ci skip]
    
    * New translations en.json (Persian)
    [ci skip]
    
    * New translations en.yml (Persian)
    [ci skip]
    
    * New translations simple_form.en.yml (Persian)
    [ci skip]
    
    * New translations simple_form.en.yml (Persian)
    [ci skip]
    
    * New translations simple_form.en.yml (Persian)
    [ci skip]
    
    * New translations activerecord.en.yml (Persian)
    [ci skip]
    
    * New translations en.yml (Welsh)
    [ci skip]
    
    * New translations en.yml (Welsh)
    [ci skip]
    
    * New translations en.yml (Welsh)
    [ci skip]
    
    * New translations en.yml (Japanese)
    [ci skip]
    
    * New translations en.yml (Japanese)
    [ci skip]
    
    * New translations en.json (Bengali)
    [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.yml (Welsh)
    [ci skip]
    
    * New translations en.yml (Welsh)
    [ci skip]
    
    * New translations simple_form.en.yml (Welsh)
    [ci skip]
    
    * New translations simple_form.en.yml (Welsh)
    [ci skip]
    
    * New translations simple_form.en.yml (Welsh)
    [ci skip]
    
    * New translations activerecord.en.yml (Welsh)
    [ci skip]
    
    * New translations devise.en.yml (Welsh)
    [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 devise.en.yml (Welsh)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Welsh)
    [ci skip]
    
    * New translations en.json (Chinese Simplified)
    [ci skip]
    
    * New translations en.yml (Welsh)
    [ci skip]
    
    * New translations en.yml (Thai)
    [ci skip]
    
    * New translations simple_form.en.yml (Thai)
    [ci skip]
    
    * New translations en.json (Thai)
    [ci skip]
    
    * New translations en.yml (Thai)
    [ci skip]
    
    * New translations en.json (Thai)
    [ci skip]
    
    * New translations en.json (Thai)
    [ci skip]
    
    * New translations en.json (Thai)
    [ci skip]
    
    * New translations en.json (Thai)
    [ci skip]
    
    * New translations en.json (Thai)
    [ci skip]
    
    * New translations en.json (Thai)
    [ci skip]
    
    * New translations en.yml (Thai)
    [ci skip]
    
    * New translations activerecord.en.yml (Thai)
    [ci skip]
    
    * New translations devise.en.yml (Thai)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Thai)
    [ci skip]
    
    * New translations simple_form.en.yml (Thai)
    [ci skip]
    
    * New translations en.json (Slovak)
    [ci skip]
    
    * New translations en.yml (Thai)
    [ci skip]
    
    * New translations simple_form.en.yml (Slovak)
    [ci skip]
    
    * New translations devise.en.yml (Slovak)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Thai)
    [ci skip]
    
    * New translations en.yml (Slovak)
    [ci skip]
    
    * New translations en.yml (Thai)
    [ci skip]
    
    * New translations activerecord.en.yml (Thai)
    [ci skip]
    
    * New translations devise.en.yml (Thai)
    [ci skip]
    
    * New translations en.yml (Slovak)
    [ci skip]
    
    * New translations 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.json (Arabic)
    [ci skip]
    
    * New translations en.yml (Arabic)
    [ci skip]
    
    * New translations devise.en.yml (Arabic)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Arabic)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Welsh)
    [ci skip]
    
    * New translations doorkeeper.en.yml (German)
    [ci skip]
    
    * New translations doorkeeper.en.yml (German)
    [ci skip]
    
    * New translations doorkeeper.en.yml (German)
    [ci skip]
    
    * New translations en.json (Chinese Simplified)
    [ci skip]
    
    * New translations en.json (Chinese Simplified)
    [ci skip]
    
    * New translations en.json (Chinese Simplified)
    [ci skip]
    
    * New translations en.json (Chinese Simplified)
    [ci skip]
    
    * New translations activerecord.en.yml (Japanese)
    [ci skip]
    
    * New translations devise.en.yml (Japanese)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Japanese)
    [ci skip]
    
    * New translations simple_form.en.yml (Japanese)
    [ci skip]
    
    * New translations en.yml (Thai)
    [ci skip]
    
    * New translations simple_form.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.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 (Corsican)
    [ci skip]
    
    * New translations en.json (Slovenian)
    [ci skip]
    
    * New translations en.json (Slovenian)
    [ci skip]
    
    * New translations en.json (Slovenian)
    [ci skip]
    
    * New translations en.json (Slovenian)
    [ci skip]
    
    * New translations en.json (Slovenian)
    [ci skip]
    
    * New translations en.json (Slovenian)
    [ci skip]
    
    * New translations en.json (Slovenian)
    [ci skip]
    
    * New translations en.json (Slovenian)
    [ci skip]
    
    * New translations en.yml (Slovak)
    [ci skip]
    
    * New translations en.yml (Slovak)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Slovenian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Slovenian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Slovenian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Slovenian)
    [ci skip]
    
    * New translations activerecord.en.yml (Slovenian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Slovenian)
    [ci skip]
    
    * New translations en.yml (Japanese)
    [ci skip]
    
    * New translations en.yml (Japanese)
    [ci skip]
    
    * New translations en.json (Hungarian)
    [ci skip]
    
    * New translations en.json (Hungarian)
    [ci skip]
    
    * New translations en.json (Hungarian)
    [ci skip]
    
    * New translations en.json (Hungarian)
    [ci skip]
    
    * New translations en.json (Hungarian)
    [ci skip]
    
    * New translations en.json (Hungarian)
    [ci skip]
    
    * New translations en.json (Hungarian)
    [ci skip]
    
    * New translations en.json (Hungarian)
    [ci skip]
    
    * New translations en.json (Hungarian)
    [ci skip]
    
    * New translations en.json (Hungarian)
    [ci skip]
    
    * New translations en.json (Hungarian)
    [ci skip]
    
    * New translations en.json (Hungarian)
    [ci skip]
    
    * New translations devise.en.yml (Hungarian)
    [ci skip]
    
    * New translations devise.en.yml (Hungarian)
    [ci skip]
    
    * New translations devise.en.yml (Hungarian)
    [ci skip]
    
    * New translations devise.en.yml (Hungarian)
    [ci skip]
    
    * New translations devise.en.yml (Hungarian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Hungarian)
    [ci skip]
    
    * New translations simple_form.en.yml (Hungarian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Hungarian)
    [ci skip]
    
    * New translations simple_form.en.yml (Hungarian)
    [ci skip]
    
    * New translations simple_form.en.yml (Hungarian)
    [ci skip]
    
    * New translations simple_form.en.yml (Hungarian)
    [ci skip]
    
    * New translations simple_form.en.yml (Hungarian)
    [ci skip]
    
    * New translations en.yml (Hungarian)
    [ci skip]
    
    * New translations en.json (Arabic)
    [ci skip]
    
    * New translations en.yml (Arabic)
    [ci skip]
    
    * New translations en.yml (Hungarian)
    [ci skip]
    
    * New translations en.yml (Hungarian)
    [ci skip]
    
    * New translations en.yml (Hungarian)
    [ci skip]
    
    * New translations en.yml (Hungarian)
    [ci skip]
    
    * New translations en.yml (Hungarian)
    [ci skip]
    
    * New translations en.yml (Hungarian)
    [ci skip]
    
    * New translations en.json (Spanish)
    [ci skip]
    
    * New translations en.yml (Spanish)
    [ci skip]
    
    * New translations en.json (Basque)
    [ci skip]
    
    * New translations en.yml (Basque)
    [ci skip]
    
    * New translations en.yml (Slovak)
    [ci skip]
    
    * New translations en.yml (Slovak)
    [ci skip]
    
    * New translations en.yml (Slovak)
    [ci skip]
    
    * New translations en.yml (Hungarian)
    [ci skip]
    
    * New translations en.yml (Hungarian)
    [ci skip]
    
    * New translations en.yml (Hungarian)
    [ci skip]
    
    * New translations en.yml (Hungarian)
    [ci skip]
    
    * New translations en.yml (Hungarian)
    [ci skip]
    
    * New translations en.yml (Hungarian)
    [ci skip]
    
    * New translations en.yml (Hungarian)
    [ci skip]
    
    * New translations en.yml (Hungarian)
    [ci skip]
    
    * New translations en.yml (Hungarian)
    [ci skip]
    
    * New translations en.yml (Hungarian)
    [ci skip]
    
    * New translations en.yml (Hungarian)
    [ci skip]
    
    * New translations en.yml (Hungarian)
    [ci skip]
    
    * New translations en.yml (Hungarian)
    [ci skip]
    
    * New translations en.yml (Hungarian)
    [ci skip]
    
    * New translations activerecord.en.yml (Hungarian)
    [ci skip]
    
    * i18n-tasks normalize
    
    * yarn manage:translations
    ede0be5d
  • Alix Rossi's avatar
    Add label for admin theme selector (#11121) · 26d3b2ef
    Alix Rossi authored
    * Add simple_form default for admin theme selector
    
    * Revert "Add simple_form default for admin theme selector"
    
    This reverts commit 0b736f78a87d61075f9b9f774d8da80e1e897b47.
    
    * Add setting_theme label to admin theme selector
    26d3b2ef
  • Eugen Rochko's avatar
    e9a11dca
  • Eugen Rochko's avatar
    Add audio uploads (#11123) · f7f23b4a
    Eugen Rochko authored
    * Add audio uploads
    
    Fix #4827
    
    Accept uploads of OGG, WAV, FLAC, OPUS and MP3 files, and converts
    them to OGG. Media attachments get a new `audio` type. In the UI,
    audio uploads are displayed identically to video uploads.
    
    * Improve code style
    f7f23b4a
  • Acid Chicken (硫酸鶏)'s avatar
  • Eugen Rochko's avatar
    Add moderation API (#9387) · 7696f772
    Eugen Rochko authored
    Fix #8580
    Fix #7143
    7696f772
  • Eugen Rochko's avatar
  • Eugen Rochko's avatar
    Change audio format from ogg to mp3 for wider compatibility (#11141) · 49ebda4d
    Eugen Rochko authored
    * Change audio format from ogg to mp3 for wider compatibility
    
    * Add media description as title to links of unknown media attachments
    49ebda4d
  • Eugen Rochko's avatar
    Change domain blocks to automatically support subdomains (#11138) · 707ddf78
    Eugen Rochko authored
    * Change domain blocks to automatically support subdomains
    
    If a more authoritative domain is blocked (example.com), then the
    same block will be applied to a subdomain (foo.example.com)
    
    * Match subdomains of existing accounts when blocking/unblocking domains
    
    * Improve code style
    707ddf78
  • Eugen Rochko's avatar
  • Eugen Rochko's avatar
    New Crowdin translations (#11116) · 6e7e714b
    Eugen Rochko authored
    * New translations devise.en.yml (Chinese Traditional, Hong Kong)
    [ci skip]
    
    * New translations devise.en.yml (Chinese Traditional)
    [ci skip]
    
    * New translations activerecord.en.yml (Thai)
    [ci skip]
    
    * New translations activerecord.en.yml (Slovak)
    [ci skip]
    
    * New translations activerecord.en.yml (French)
    [ci skip]
    
    * New translations activerecord.en.yml (Hungarian)
    [ci skip]
    
    * New translations activerecord.en.yml (Hebrew)
    [ci skip]
    
    * New translations activerecord.en.yml (Greek)
    [ci skip]
    
    * New translations activerecord.en.yml (German)
    [ci skip]
    
    * New translations activerecord.en.yml (Georgian)
    [ci skip]
    
    * New translations activerecord.en.yml (Galician)
    [ci skip]
    
    * New translations activerecord.en.yml (Esperanto)
    [ci skip]
    
    * New translations activerecord.en.yml (Danish)
    [ci skip]
    
    * New translations activerecord.en.yml (Czech)
    [ci skip]
    
    * New translations activerecord.en.yml (Corsican)
    [ci skip]
    
    * New translations activerecord.en.yml (Chinese Traditional, Hong Kong)
    [ci skip]
    
    * New translations activerecord.en.yml (Indonesian)
    [ci skip]
    
    * New translations activerecord.en.yml (Japanese)
    [ci skip]
    
    * New translations activerecord.en.yml (Swedish)
    [ci skip]
    
    * New translations activerecord.en.yml (Portuguese, Brazilian)
    [ci skip]
    
    * New translations activerecord.en.yml (Spanish)
    [ci skip]
    
    * New translations activerecord.en.yml (Slovenian)
    [ci skip]
    
    * New translations devise.en.yml (Ido)
    [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 activerecord.en.yml (Portuguese)
    [ci skip]
    
    * New translations activerecord.en.yml (Kazakh)
    [ci skip]
    
    * New translations activerecord.en.yml (Polish)
    [ci skip]
    
    * New translations activerecord.en.yml (Persian)
    [ci skip]
    
    * New translations activerecord.en.yml (Occitan)
    [ci skip]
    
    * New translations activerecord.en.yml (Norwegian)
    [ci skip]
    
    * New translations activerecord.en.yml (Korean)
    [ci skip]
    
    * New translations devise.en.yml (Hungarian)
    [ci skip]
    
    * New translations devise.en.yml (Indonesian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Ido)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Korean)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Kazakh)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Japanese)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Indonesian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Hungarian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Norwegian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Hebrew)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Greek)
    [ci skip]
    
    * New translations doorkeeper.en.yml (German)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Georgian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Galician)
    [ci skip]
    
    * New translations doorkeeper.en.yml (French)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Finnish)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Occitan)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Slovenian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Ukrainian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Turkish)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Thai)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Swedish)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Spanish)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Slovak)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Persian)
    [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 (Russian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Portuguese, Brazilian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Portuguese)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Polish)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Esperanto)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Danish)
    [ci skip]
    
    * New translations devise.en.yml (Persian)
    [ci skip]
    
    * New translations devise.en.yml (Serbian (Latin))
    [ci skip]
    
    * New translations devise.en.yml (Serbian (Cyrillic))
    [ci skip]
    
    * New translations devise.en.yml (Russian)
    [ci skip]
    
    * New translations devise.en.yml (Portuguese, Brazilian)
    [ci skip]
    
    * New translations devise.en.yml (Portuguese)
    [ci skip]
    
    * New translations devise.en.yml (Polish)
    [ci skip]
    
    * New translations devise.en.yml (Occitan)
    [ci skip]
    
    * New translations devise.en.yml (Slovenian)
    [ci skip]
    
    * New translations devise.en.yml (Norwegian)
    [ci skip]
    
    * New translations activerecord.en.yml (Chinese Simplified)
    [ci skip]
    
    * New translations devise.en.yml (Korean)
    [ci skip]
    
    * New translations devise.en.yml (Kazakh)
    [ci skip]
    
    * New translations devise.en.yml (Japanese)
    [ci skip]
    
    * New translations devise.en.yml (Slovak)
    [ci skip]
    
    * New translations devise.en.yml (Spanish)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Czech)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Croatian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Corsican)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Chinese Traditional, Hong Kong)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Chinese Traditional)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Chinese Simplified)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Catalan)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Bulgarian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Basque)
    [ci skip]
    
    * New translations devise.en.yml (Swedish)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Asturian)
    [ci skip]
    
    * New translations devise.en.yml (Welsh)
    [ci skip]
    
    * New translations devise.en.yml (Ukrainian)
    [ci skip]
    
    * New translations devise.en.yml (Turkish)
    [ci skip]
    
    * New translations devise.en.yml (Thai)
    [ci skip]
    
    * New translations simple_form.en.yml (Welsh)
    [ci skip]
    
    * New translations activerecord.en.yml (Catalan)
    [ci skip]
    
    * New translations en.json (Thai)
    [ci skip]
    
    * New translations en.yml (Bulgarian)
    [ci skip]
    
    * New translations en.yml (Bengali)
    [ci skip]
    
    * New translations en.yml (Basque)
    [ci skip]
    
    * New translations en.json (Ukrainian)
    [ci skip]
    
    * New translations en.json (Turkish)
    [ci skip]
    
    * New translations en.json (Telugu)
    [ci skip]
    
    * New translations en.yml (Chinese Simplified)
    [ci skip]
    
    * New translations en.json (Tamil)
    [ci skip]
    
    * New translations en.json (Swedish)
    [ci skip]
    
    * New translations en.json (Spanish)
    [ci skip]
    
    * New translations en.json (Slovenian)
    [ci skip]
    
    * New translations en.json (Slovak)
    [ci skip]
    
    * New translations en.json (Serbian (Latin))
    [ci skip]
    
    * New translations en.json (Serbian (Cyrillic))
    [ci skip]
    
    * New translations en.yml (Catalan)
    [ci skip]
    
    * New translations en.yml (Chinese Traditional)
    [ci skip]
    
    * New translations en.json (Romanian)
    [ci skip]
    
    * New translations en.yml (Georgian)
    [ci skip]
    
    * New translations en.yml (Indonesian)
    [ci skip]
    
    * New translations en.yml (Ido)
    [ci skip]
    
    * New translations en.yml (Hungarian)
    [ci skip]
    
    * New translations en.yml (Hebrew)
    [ci skip]
    
    * New translations en.yml (Greek)
    [ci skip]
    
    * New translations en.yml (German)
    [ci skip]
    
    * New translations en.yml (Galician)
    [ci skip]
    
    * New translations en.yml (Chinese Traditional, Hong Kong)
    [ci skip]
    
    * New translations en.yml (French)
    [ci skip]
    
    * New translations en.yml (Finnish)
    [ci skip]
    
    * New translations en.yml (Esperanto)
    [ci skip]
    
    * New translations en.yml (Danish)
    [ci skip]
    
    * New translations en.yml (Croatian)
    [ci skip]
    
    * New translations en.yml (Corsican)
    [ci skip]
    
    * New translations en.json (Portuguese, Brazilian)
    [ci skip]
    
    * New translations en.json (Chinese Traditional, Hong Kong)
    [ci skip]
    
    * New translations en.json (Finnish)
    [ci skip]
    
    * New translations en.json (Danish)
    [ci skip]
    
    * New translations en.json (Croatian)
    [ci skip]
    
    * New translations en.json (Chinese Traditional)
    [ci skip]
    
    * New translations en.json (Catalan)
    [ci skip]
    
    * New translations en.json (Bulgarian)
    [ci skip]
    
    * New translations en.json (Bengali)
    [ci skip]
    
    * New translations devise.en.yml (Czech)
    [ci skip]
    
    * New translations simple_form.en.yml (Czech)
    [ci skip]
    
    * New translations en.json (Georgian)
    [ci skip]
    
    * New translations en.json (Portuguese)
    [ci skip]
    
    * New translations en.json (Occitan)
    [ci skip]
    
    * New translations en.json (Norwegian)
    [ci skip]
    
    * New translations en.json (Malay)
    [ci skip]
    
    * New translations en.json (Lithuanian)
    [ci skip]
    
    * New translations en.json (Latvian)
    [ci skip]
    
    * New translations en.json (Kazakh)
    [ci skip]
    
    * New translations en.json (Indonesian)
    [ci skip]
    
    * New translations en.json (Ido)
    [ci skip]
    
    * New translations en.json (Hebrew)
    [ci skip]
    
    * New translations en.yml (Kazakh)
    [ci skip]
    
    * New translations simple_form.en.yml (Occitan)
    [ci skip]
    
    * New translations simple_form.en.yml (Norwegian)
    [ci skip]
    
    * New translations simple_form.en.yml (Korean)
    [ci skip]
    
    * New translations simple_form.en.yml (Japanese)
    [ci skip]
    
    * New translations simple_form.en.yml (Polish)
    [ci skip]
    
    * New translations simple_form.en.yml (Indonesian)
    [ci skip]
    
    * New translations simple_form.en.yml (Ido)
    [ci skip]
    
    * New translations simple_form.en.yml (Hungarian)
    [ci skip]
    
    * New translations simple_form.en.yml (Hebrew)
    [ci skip]
    
    * New translations simple_form.en.yml (Greek)
    [ci skip]
    
    * New translations simple_form.en.yml (German)
    [ci skip]
    
    * New translations simple_form.en.yml (Persian)
    [ci skip]
    
    * New translations simple_form.en.yml (Portuguese)
    [ci skip]
    
    * New translations simple_form.en.yml (Galician)
    [ci skip]
    
    * New translations activerecord.en.yml (Basque)
    [ci skip]
    
    * New translations en.yml (Czech)
    [ci skip]
    
    * New translations simple_form.en.yml (Ukrainian)
    [ci skip]
    
    * New translations simple_form.en.yml (Turkish)
    [ci skip]
    
    * New translations simple_form.en.yml (Thai)
    [ci skip]
    
    * New translations simple_form.en.yml (Swedish)
    [ci skip]
    
    * New translations simple_form.en.yml (Portuguese, Brazilian)
    [ci skip]
    
    * New translations simple_form.en.yml (Spanish)
    [ci skip]
    
    * New translations simple_form.en.yml (Slovenian)
    [ci skip]
    
    * New translations simple_form.en.yml (Slovak)
    [ci skip]
    
    * New translations simple_form.en.yml (Serbian (Latin))
    [ci skip]
    
    * New translations simple_form.en.yml (Serbian (Cyrillic))
    [ci skip]
    
    * New translations simple_form.en.yml (Russian)
    [ci skip]
    
    * New translations simple_form.en.yml (Romanian)
    [ci skip]
    
    * New translations simple_form.en.yml (Georgian)
    [ci skip]
    
    * New translations simple_form.en.yml (French)
    [ci skip]
    
    * New translations en.yml (Korean)
    [ci skip]
    
    * New translations en.yml (Portuguese, Brazilian)
    [ci skip]
    
    * New translations en.yml (Slovenian)
    [ci skip]
    
    * New translations en.yml (Slovak)
    [ci skip]
    
    * New translations en.yml (Serbian (Latin))
    [ci skip]
    
    * New translations en.yml (Serbian (Cyrillic))
    [ci skip]
    
    * New translations en.yml (Russian)
    [ci skip]
    
    * New translations en.yml (Romanian)
    [ci skip]
    
    * New translations en.yml (Portuguese)
    [ci skip]
    
    * New translations en.yml (Swedish)
    [ci skip]
    
    * New translations en.yml (Polish)
    [ci skip]
    
    * New translations en.yml (Persian)
    [ci skip]
    
    * New translations en.yml (Occitan)
    [ci skip]
    
    * New translations en.yml (Norwegian)
    [ci skip]
    
    * New translations en.yml (Malay)
    [ci skip]
    
    * New translations en.yml (Lithuanian)
    [ci skip]
    
    * New translations en.yml (Latvian)
    [ci skip]
    
    * New translations en.yml (Spanish)
    [ci skip]
    
    * New translations en.yml (Tamil)
    [ci skip]
    
    * New translations simple_form.en.yml (Finnish)
    [ci skip]
    
    * New translations simple_form.en.yml (Chinese Simplified)
    [ci skip]
    
    * New translations simple_form.en.yml (Esperanto)
    [ci skip]
    
    * New translations simple_form.en.yml (Danish)
    [ci skip]
    
    * New translations simple_form.en.yml (Croatian)
    [ci skip]
    
    * New translations simple_form.en.yml (Corsican)
    [ci skip]
    
    * New translations simple_form.en.yml (Chinese Traditional, Hong Kong)
    [ci skip]
    
    * New translations simple_form.en.yml (Chinese Traditional)
    [ci skip]
    
    * New translations simple_form.en.yml (Catalan)
    [ci skip]
    
    * New translations en.yml (Telugu)
    [ci skip]
    
    * New translations simple_form.en.yml (Bulgarian)
    [ci skip]
    
    * New translations simple_form.en.yml (Basque)
    [ci skip]
    
    * New translations en.yml (Welsh)
    [ci skip]
    
    * New translations en.yml (Ukrainian)
    [ci skip]
    
    * New translations en.yml (Turkish)
    [ci skip]
    
    * New translations en.yml (Thai)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Welsh)
    [ci skip]
    
    * New translations simple_form.en.yml (Japanese)
    [ci skip]
    
    * New translations en.json (Finnish)
    [ci skip]
    
    * New translations en.json (Finnish)
    [ci skip]
    
    * New translations en.json (Finnish)
    [ci skip]
    
    * New translations activerecord.en.yml (Finnish)
    [ci skip]
    
    * New translations en.json (Japanese)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Japanese)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Greek)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Italian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Italian)
    [ci skip]
    
    * New translations en.yml (Italian)
    [ci skip]
    
    * New translations en.json (Slovak)
    [ci skip]
    
    * New translations en.yml (Slovak)
    [ci skip]
    
    * New translations en.yml (Slovak)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Polish)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Czech)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Corsican)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Corsican)
    [ci skip]
    
    * New translations en.yml (Italian)
    [ci skip]
    
    * New translations en.json (Italian)
    [ci skip]
    
    * New translations en.yml (Italian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Slovenian)
    [ci skip]
    
    * New translations en.json (Chinese Simplified)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Chinese Simplified)
    [ci skip]
    
    * New translations en.yml (Polish)
    [ci skip]
    
    * New translations en.json (Dutch)
    [ci skip]
    
    * New translations en.json (German)
    [ci skip]
    
    * i18n-tasks normalize
    
    * yarn manage:translations
    6e7e714b
  • Eugen Rochko's avatar
    Bump version to 2.9.1 (#11143) · 84f945d6
    Eugen Rochko authored
    84f945d6
  • Eugen Rochko's avatar
  • Eugen Rochko's avatar
  • koyu's avatar
    6eb52410
  • Eugen Rochko's avatar
    Fix audio-only OGG and WebM files not being processed as such (#11151) · b927bb3f
    Eugen Rochko authored
    Also, because Chrome sends audio/mp3 instead of audio/mpeg as it's
    supposed to, we need to whitelist that mime type as well
    b927bb3f
  • Eugen Rochko's avatar
    New Crowdin translations (#11144) · 8fe7116c
    Eugen Rochko authored
    * New translations simple_form.en.yml (Japanese)
    [ci skip]
    
    * New translations en.json (Catalan)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Catalan)
    [ci skip]
    
    * New translations en.json (Slovenian)
    [ci skip]
    
    * New translations en.json (Slovenian)
    [ci skip]
    
    * New translations en.json (Slovenian)
    [ci skip]
    
    * New translations en.json (Slovenian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (Galician)
    [ci skip]
    
    * New translations en.json (Arabic)
    [ci skip]
    
    * New translations en.json (Slovenian)
    [ci skip]
    
    * New translations doorkeeper.en.yml (German)
    [ci skip]
    
    * New translations en.json (Slovenian)
    [ci skip]
    
    * i18n-tasks normalize
    
    * yarn manage:translations
    8fe7116c
  • Eugen Rochko's avatar
    Bump version to 2.9.2 (#11152) · b5c772c3
    Eugen Rochko authored
    b5c772c3
  • Eugen Rochko's avatar
    66ac1bd0
  • Jyrki's avatar
    Merge tag 'v2.9.2' into changes · 9ddb901a
    Jyrki authored
    9ddb901a
  • Jyrki's avatar
    Refactor filtering, add WAS blog filter matcher · fc7ab78d
    Jyrki authored
    fc7ab78d
  • Jyrki's avatar
    Log filtered statuses to redis as well · a4015f8f
    Jyrki authored
    a4015f8f
......@@ -174,8 +174,7 @@ jobs:
steps:
- *attach_workspace
- run: bundle exec i18n-tasks check-normalized
- run: bundle exec i18n-tasks unused
- run: bundle exec i18n-tasks missing -t plural
- run: bundle exec i18n-tasks unused -l en
- run: bundle exec i18n-tasks check-consistent-interpolations
workflows:
......
......@@ -3,6 +3,45 @@ Changelog
All notable changes to this project will be documented in this file.
## [2.9.2] - 2019-06-22
### Added
- Add `short_description` and `approval_required` to `GET /api/v1/instance` ([Gargron](https://github.com/tootsuite/mastodon/pull/11146))
### Changed
- Change camera icon to paperclip icon in upload form ([koyuawsmbrtn](https://github.com/tootsuite/mastodon/pull/11149))
### Fixed
- Fix audio-only OGG and WebM files not being processed as such ([Gargron](https://github.com/tootsuite/mastodon/pull/11151))
- Fix audio not being downloaded from remote servers ([Gargron](https://github.com/tootsuite/mastodon/pull/11145))
## [2.9.1] - 2019-06-22
### Added
- Add moderation API ([Gargron](https://github.com/tootsuite/mastodon/pull/9387))
- Add audio uploads ([Gargron](https://github.com/tootsuite/mastodon/pull/11123), [Gargron](https://github.com/tootsuite/mastodon/pull/11141))
### Changed
- Change domain blocks to automatically support subdomains ([Gargron](https://github.com/tootsuite/mastodon/pull/11138))
- Change Nanobox configuration to bring it up to date ([danhunsaker](https://github.com/tootsuite/mastodon/pull/11083))
### Removed
- Remove expensive counters from federation page in admin UI ([Gargron](https://github.com/tootsuite/mastodon/pull/11139))
### Fixed
- Fix converted media being saved with original extension and mime type ([Gargron](https://github.com/tootsuite/mastodon/pull/11130))
- Fix layout of identity proofs settings ([acid-chicken](https://github.com/tootsuite/mastodon/pull/11126))
- Fix active scope only returning suspended users ([ThibG](https://github.com/tootsuite/mastodon/pull/11111))
- Fix sanitizer making block level elements unreadable ([Gargron](https://github.com/tootsuite/mastodon/pull/10836))
- Fix label for site theme not being translated in admin UI ([palindromordnilap](https://github.com/tootsuite/mastodon/pull/11121))
- Fix statuses not being filtered irreversibly in web UI under some circumstances ([ThibG](https://github.com/tootsuite/mastodon/pull/11113))
- Fix scrolling behaviour in compose form ([ThibG](https://github.com/tootsuite/mastodon/pull/11093))
## [2.9.0] - 2019-06-13
### Added
......
......@@ -18,7 +18,9 @@ Bug reports and feature suggestions can be submitted to [GitHub Issues](https://
## Translations
You can submit translations via pull request.
You can submit translations via [Crowdin](https://crowdin.com/project/mastodon). They are periodically merged into the codebase.
[![Crowdin](https://d322cqt584bo4o.cloudfront.net/mastodon/localized.svg)][crowdin]
## Pull requests
......
......@@ -15,7 +15,7 @@ gem 'makara', '~> 0.4'
gem 'pghero', '~> 2.2'
gem 'dotenv-rails', '~> 2.7'
gem 'aws-sdk-s3', '~> 1.41', require: false
gem 'aws-sdk-s3', '~> 1.42', require: false
gem 'fog-core', '<= 2.1.0'
gem 'fog-openstack', '~> 0.3', require: false
gem 'paperclip', '~> 6.0'
......@@ -62,7 +62,7 @@ gem 'nokogiri', '~> 1.10'
gem 'nsa', '~> 0.2'
gem 'oj', '~> 3.7'
gem 'ostatus2', '~> 2.0'
gem 'ox', '~> 2.10'
gem 'ox', '~> 2.11'
gem 'posix-spawn', git: 'https://github.com/rtomayko/posix-spawn', ref: '58465d2e213991f8afb13b984854a49fcdcc980c'
gem 'pundit', '~> 2.0'
gem 'premailer-rails'
......@@ -108,14 +108,14 @@ group :production, :test do
end
group :test do
gem 'capybara', '~> 3.22'
gem 'capybara', '~> 3.24'
gem 'climate_control', '~> 0.2'
gem 'faker', '~> 1.9'
gem 'microformats', '~> 4.1'
gem 'rails-controller-testing', '~> 1.0'
gem 'rspec-sidekiq', '~> 3.0'
gem 'simplecov', '~> 0.16', require: false
gem 'webmock', '~> 3.5'
gem 'webmock', '~> 3.6'
gem 'parallel_tests', '~> 2.29'
end
......
......@@ -76,8 +76,8 @@ GEM
av (0.9.0)
cocaine (~> 0.5.3)
aws-eventstream (1.0.3)
aws-partitions (1.169.0)
aws-sdk-core (3.54.0)
aws-partitions (1.175.0)
aws-sdk-core (3.55.0)
aws-eventstream (~> 1.0, >= 1.0.2)
aws-partitions (~> 1.0)
aws-sigv4 (~> 1.1)
......@@ -85,7 +85,7 @@ GEM
aws-sdk-kms (1.21.0)
aws-sdk-core (~> 3, >= 3.53.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.41.0)
aws-sdk-s3 (1.42.0)
aws-sdk-core (~> 3, >= 3.53.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.1)
......@@ -129,7 +129,7 @@ GEM
sshkit (~> 1.3)
capistrano-yarn (2.0.2)
capistrano (~> 3.0)
capybara (3.22.0)
capybara (3.24.0)
addressable
mini_mime (>= 0.1.3)
nokogiri (~> 1.8)
......@@ -253,7 +253,7 @@ GEM
railties (>= 4.0.1)
hamster (3.0.0)
concurrent-ruby (~> 1.0)
hashdiff (0.3.7)
hashdiff (0.4.0)
hashie (3.6.0)
heapy (0.1.4)
highline (2.0.1)
......@@ -269,7 +269,7 @@ GEM
domain_name (~> 0.5)
http-form_data (2.1.1)
http_accept_language (2.1.1)
httplog (1.3.0)
httplog (1.3.1)
rack (>= 1.0)
rainbow (>= 2.0.0)
i18n (1.6.0)
......@@ -320,7 +320,7 @@ GEM
letter_opener (~> 1.0)
railties (>= 3.2)
link_header (0.0.8)
lograge (0.11.1)
lograge (0.11.2)
actionpack (>= 4)
activesupport (>= 4)
railties (>= 4)
......@@ -382,7 +382,7 @@ GEM
addressable (~> 2.5)
http (~> 3.0)
nokogiri (~> 1.8)
ox (2.10.1)
ox (2.11.0)
paperclip (6.0.0)
activemodel (>= 4.2.0)
activesupport (>= 4.2.0)
......@@ -401,7 +401,7 @@ GEM
equatable (~> 0.5.0)
tty-color (~> 0.4.0)
pg (1.1.4)
pghero (2.2.0)
pghero (2.2.1)
activerecord
pkg-config (1.3.7)
premailer (1.11.1)
......@@ -531,15 +531,15 @@ GEM
rainbow (>= 2.2.2, < 4.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 1.4.0, < 1.7)
rubocop-rails (2.0.0)
rack (>= 2.0)
rubocop-rails (2.0.1)
rack (>= 1.1)
rubocop (>= 0.70.0)
ruby-progressbar (1.10.1)
ruby-saml (1.9.0)
nokogiri (>= 1.5.10)
rufus-scheduler (3.5.2)
fugit (~> 1.1, >= 1.1.5)
safe_yaml (1.0.4)
safe_yaml (1.0.5)
sanitize (5.0.0)
crass (~> 1.0.2)
nokogiri (>= 1.8.0)
......@@ -621,10 +621,10 @@ GEM
uniform_notifier (1.12.1)
warden (1.2.8)
rack (>= 2.0.6)
webmock (3.5.1)
webmock (3.6.0)
addressable (>= 2.3.6)
crack (>= 0.3.2)
hashdiff
hashdiff (>= 0.4.0, < 2.0.0)
webpacker (4.0.7)
activesupport (>= 4.2)
rack-proxy (>= 0.6.1)
......@@ -647,7 +647,7 @@ DEPENDENCIES
active_record_query_trace (~> 1.6)
addressable (~> 2.6)
annotate (~> 2.7)
aws-sdk-s3 (~> 1.41)
aws-sdk-s3 (~> 1.42)
better_errors (~> 2.5)
binding_of_caller (~> 0.7)
blurhash (~> 0.1)
......@@ -660,7 +660,7 @@ DEPENDENCIES
capistrano-rails (~> 1.4)
capistrano-rbenv (~> 2.1)
capistrano-yarn (~> 2.0)
capybara (~> 3.22)
capybara (~> 3.24)
charlock_holmes (~> 0.7.6)
chewy (~> 5.0)
cld3 (~> 3.2.4)
......@@ -710,7 +710,7 @@ DEPENDENCIES
omniauth-cas (~> 1.1)
omniauth-saml (~> 1.10)
ostatus2 (~> 2.0)
ox (~> 2.10)
ox (~> 2.11)
paperclip (~> 6.0)
paperclip-av-transcoder (~> 0.6)
parallel_tests (~> 2.29)
......@@ -757,7 +757,7 @@ DEPENDENCIES
tty-prompt (~> 0.19)
twitter-text (~> 1.14)
tzinfo-data (~> 1.2019)
webmock (~> 3.5)
webmock (~> 3.6)
webpacker (~> 4.0)
webpush
......
......@@ -127,6 +127,7 @@ module Admin
:by_domain,
:active,
:pending,
:disabled,
:silenced,
:suspended,
:username,
......
......@@ -13,7 +13,7 @@ module Admin
authorize :domain_block, :create?
@domain_block = DomainBlock.new(resource_params)
existing_domain_block = resource_params[:domain].present? ? DomainBlock.find_by(domain: resource_params[:domain]) : nil
existing_domain_block = resource_params[:domain].present? ? DomainBlock.rule_for(resource_params[:domain]) : nil
if existing_domain_block.present? && !@domain_block.stricter_than?(existing_domain_block)
@domain_block.save
......
......@@ -18,7 +18,7 @@ module Admin
@blocks_count = Block.where(target_account: Account.where(domain: params[:id])).count
@available = DeliveryFailureTracker.available?(Account.select(:shared_inbox_url).where(domain: params[:id]).first&.shared_inbox_url)
@media_storage = MediaAttachment.where(account: Account.where(domain: params[:id])).sum(:file_file_size)
@domain_block = DomainBlock.find_by(domain: params[:id])
@domain_block = DomainBlock.rule_for(params[:id])
end
private
......
# frozen_string_literal: true
class Api::V1::Admin::AccountActionsController < Api::BaseController
before_action -> { doorkeeper_authorize! :'admin:write', :'admin:write:accounts' }
before_action :require_staff!
before_action :set_account
def create
account_action = Admin::AccountAction.new(resource_params)
account_action.target_account = @account
account_action.current_account = current_account
account_action.save!
render_empty
end
private
def set_account
@account = Account.find(params[:account_id])
end
def resource_params
params.permit(
:type,
:report_id,
:warning_preset_id,
:text,
:send_email_notification
)
end
end
# frozen_string_literal: true
class Api::V1::Admin::AccountsController < Api::BaseController
include Authorization
include AccountableConcern
LIMIT = 100
before_action -> { doorkeeper_authorize! :'admin:read', :'admin:read:accounts' }, only: [:index, :show]
before_action -> { doorkeeper_authorize! :'admin:write', :'admin:write:accounts' }, except: [:index, :show]
before_action :require_staff!
before_action :set_accounts, only: :index
before_action :set_account, except: :index
before_action :require_local_account!, only: [:enable, :approve, :reject]
after_action :insert_pagination_headers, only: :index
FILTER_PARAMS = %i(
local
remote
by_domain
active
pending
disabled
silenced
suspended
username
display_name
email
ip
staff
).freeze
PAGINATION_PARAMS = (%i(limit) + FILTER_PARAMS).freeze
def index
authorize :account, :index?
render json: @accounts, each_serializer: REST::Admin::AccountSerializer
end
def show
authorize @account, :show?
render json: @account, serializer: REST::Admin::AccountSerializer
end
def enable
authorize @account.user, :enable?
@account.user.enable!
log_action :enable, @account.user
render json: @account, serializer: REST::Admin::AccountSerializer
end
def approve
authorize @account.user, :approve?
@account.user.approve!
render json: @account, serializer: REST::Admin::AccountSerializer
end
def reject
authorize @account.user, :reject?
SuspendAccountService.new.call(@account, including_user: true, destroy: true, skip_distribution: true)
render json: @account, serializer: REST::Admin::AccountSerializer
end
def unsilence
authorize @account, :unsilence?
@account.unsilence!
log_action :unsilence, @account
render json: @account, serializer: REST::Admin::AccountSerializer
end
def unsuspend
authorize @account, :unsuspend?
@account.unsuspend!
log_action :unsuspend, @account
render json: @account, serializer: REST::Admin::AccountSerializer
end
private
def set_accounts
@accounts = filtered_accounts.order(id: :desc).includes(user: [:invite_request, :invite]).paginate_by_id(limit_param(LIMIT), params_slice(:max_id, :since_id, :min_id))
end
def set_account
@account = Account.find(params[:id])
end
def filtered_accounts
AccountFilter.new(filter_params).results
end
def filter_params
params.permit(*FILTER_PARAMS)
end
def insert_pagination_headers
set_pagination_headers(next_path, prev_path)
end
def next_path
api_v1_admin_accounts_url(pagination_params(max_id: pagination_max_id)) if records_continue?
end
def prev_path
api_v1_admin_accounts_url(pagination_params(min_id: pagination_since_id)) unless @accounts.empty?
end
def pagination_max_id
@accounts.last.id
end
def pagination_since_id
@accounts.first.id
end
def records_continue?
@accounts.size == limit_param(LIMIT)
end
def pagination_params(core_params)
params.slice(*PAGINATION_PARAMS).permit(*PAGINATION_PARAMS).merge(core_params)
end
def require_local_account!
forbidden unless @account.local? && @account.user.present?
end
end
# frozen_string_literal: true
class Api::V1::Admin::ReportsController < Api::BaseController
include Authorization
include AccountableConcern
LIMIT = 100
before_action -> { doorkeeper_authorize! :'admin:read', :'admin:read:reports' }, only: [:index, :show]
before_action -> { doorkeeper_authorize! :'admin:write', :'admin:write:reports' }, except: [:index, :show]
before_action :require_staff!
before_action :set_reports, only: :index
before_action :set_report, except: :index
after_action :insert_pagination_headers, only: :index
FILTER_PARAMS = %i(
resolved
account_id
target_account_id
).freeze
PAGINATION_PARAMS = (%i(limit) + FILTER_PARAMS).freeze
def index
authorize :report, :index?
render json: @reports, each_serializer: REST::Admin::ReportSerializer
end
def show
authorize @report, :show?
render json: @report, serializer: REST::Admin::ReportSerializer
end
def assign_to_self
authorize @report, :update?
@report.update!(assigned_account_id: current_account.id)
log_action :assigned_to_self, @report
render json: @report, serializer: REST::Admin::ReportSerializer
end
def unassign
authorize @report, :update?
@report.update!(assigned_account_id: nil)
log_action :unassigned, @report
render json: @report, serializer: REST::Admin::ReportSerializer
end
def reopen
authorize @report, :update?
@report.unresolve!
log_action :reopen, @report
render json: @report, serializer: REST::Admin::ReportSerializer
end
def resolve
authorize @report, :update?
@report.resolve!(current_account)
log_action :resolve, @report
render json: @report, serializer: REST::Admin::ReportSerializer
end
private
def set_reports
@reports = filtered_reports.order(id: :desc).with_accounts.paginate_by_id(limit_param(LIMIT), params_slice(:max_id, :since_id, :min_id))
end
def set_report
@report = Report.find(params[:id])
end
def filtered_reports
ReportFilter.new(filter_params).results
end
def filter_params
params.permit(*FILTER_PARAMS)
end
def insert_pagination_headers
set_pagination_headers(next_path, prev_path)
end
def next_path
api_v1_admin_reports_url(pagination_params(max_id: pagination_max_id)) if records_continue?
end
def prev_path
api_v1_admin_reports_url(pagination_params(min_id: pagination_since_id)) unless @reports.empty?
end
def pagination_max_id
@reports.last.id
end
def pagination_since_id
@reports.first.id
end
def records_continue?
@reports.size == limit_param(LIMIT)
end
def pagination_params(core_params)
params.slice(*PAGINATION_PARAMS).permit(*PAGINATION_PARAMS).merge(core_params)
end
end
......@@ -7,6 +7,8 @@ class MediaController < ApplicationController
before_action :set_media_attachment
before_action :verify_permitted_status!
before_action :check_playable, only: :player
before_action :allow_iframing, only: :player
content_security_policy only: :player do |p|
p.frame_ancestors(false)
......@@ -18,8 +20,6 @@ class MediaController < ApplicationController
def player
@body_classes = 'player'
response.headers['X-Frame-Options'] = 'ALLOWALL'
raise ActiveRecord::RecordNotFound unless @media_attachment.video? || @media_attachment.gifv?
end
private
......@@ -34,4 +34,12 @@ class MediaController < ApplicationController
# Reraise in order to get a 404 instead of a 403 error code
raise ActiveRecord::RecordNotFound
end
def check_playable
not_found unless @media_attachment.larger_media_format?
end
def allow_iframing
response.headers['X-Frame-Options'] = 'ALLOWALL'
end
end
......@@ -39,6 +39,6 @@ class MediaProxyController < ApplicationController
end
def reject_media?
DomainBlock.find_by(domain: @media_attachment.account.domain)&.reject_media?
DomainBlock.reject_media?(@media_attachment.account.domain)
end
end
......@@ -56,8 +56,4 @@ class Settings::IdentityProofsController < Settings::BaseController
def post_params
params.require(:account_identity_proof).permit(:post_status, :status_text)
end
def set_body_classes
@body_classes = ''
end
end
......@@ -48,9 +48,14 @@ export function updateNotifications(notification, intlMessages, intlLocale) {
let filtered = false;
if (notification.type === 'mention') {
const dropRegex = regexFromFilters(filters.filter(filter => filter.get('irreversible')));
const regex = regexFromFilters(filters);
const searchIndex = notification.status.spoiler_text + '\n' + unescapeHTML(notification.status.content);
if (dropRegex && dropRegex.test(searchIndex)) {
return;
}
filtered = regex && regex.test(searchIndex);
}
......
......@@ -157,7 +157,7 @@ class Item extends React.PureComponent {
if (attachment.get('type') === 'unknown') {
return (
<div className={classNames('media-gallery__item', { standalone })} key={attachment.get('id')} style={{ left: left, top: top, right: right, bottom: bottom, width: `${width}%`, height: `${height}%` }}>
<a className='media-gallery__item-thumbnail' href={attachment.get('remote_url')} target='_blank' style={{ cursor: 'pointer' }}>
<a className='media-gallery__item-thumbnail' href={attachment.get('remote_url')} target='_blank' style={{ cursor: 'pointer' }} title={attachment.get('description')}>
<canvas width={32} height={32} ref={this.setCanvasRef} className='media-gallery__preview' />
</a>
</div>
......
......@@ -333,17 +333,17 @@ class Status extends ImmutablePureComponent {
media={status.get('media_attachments')}
/>
);
} else if (status.getIn(['media_attachments', 0, 'type']) === 'video') {
const video = status.getIn(['media_attachments', 0]);
} else if (['video', 'audio'].includes(status.getIn(['media_attachments', 0, 'type']))) {
const attachment = status.getIn(['media_attachments', 0]);
media = (
<Bundle fetchComponent={Video} loading={this.renderLoadingVideoPlayer} >
{Component => (
<Component
preview={video.get('preview_url')}
blurhash={video.get('blurhash')}
src={video.get('url')}
alt={video.get('description')}
preview={attachment.get('preview_url')}
blurhash={attachment.get('blurhash')}
src={attachment.get('url')}
alt={attachment.get('description')}
width={this.props.cachedMediaWidth}
height={110}
inline
......
......@@ -60,6 +60,7 @@ class ComposeForm extends ImmutablePureComponent {
onPickEmoji: PropTypes.func.isRequired,
showSearch: PropTypes.bool,
anyMedia: PropTypes.bool,
singleColumn: PropTypes.bool,
};
static defaultProps = {
......@@ -115,7 +116,7 @@ class ComposeForm extends ImmutablePureComponent {
}
handleFocus = () => {
if (this.composeForm) {
if (this.composeForm && !this.props.singleColumn) {
this.composeForm.scrollIntoView();
}
}
......
......@@ -7,9 +7,11 @@ import ImmutablePureComponent from 'react-immutable-pure-component';
import ImmutablePropTypes from 'react-immutable-proptypes';
const messages = defineMessages({
upload: { id: 'upload_button.label', defaultMessage: 'Add media (JPEG, PNG, GIF, WebM, MP4, MOV)' },
upload: { id: 'upload_button.label', defaultMessage: 'Add media ({formats})' },
});
const SUPPORTED_FORMATS = 'JPEG, PNG, GIF, WebM, MP4, MOV, OGG, WAV, MP3, FLAC';
const makeMapStateToProps = () => {
const mapStateToProps = state => ({
acceptContentTypes: state.getIn(['media_attachments', 'accept_content_types']),
......@@ -60,9 +62,9 @@ class UploadButton extends ImmutablePureComponent {
return (
<div className='compose-form__upload-button'>
<IconButton icon='camera' title={intl.formatMessage(messages.upload)} disabled={disabled} onClick={this.handleClick} className='compose-form__upload-button-icon' size={18} inverted style={iconStyle} />
<IconButton icon='paperclip' title={intl.formatMessage(messages.upload, { formats: SUPPORTED_FORMATS })} disabled={disabled} onClick={this.handleClick} className='compose-form__upload-button-icon' size={18} inverted style={iconStyle} />
<label>
<span style={{ display: 'none' }}>{intl.formatMessage(messages.upload)}</span>
<span style={{ display: 'none' }}>{intl.formatMessage(messages.upload, { formats: SUPPORTED_FORMATS })}</span>
<input
key={resetFileKey}
ref={this.setRef}
......
......@@ -3,7 +3,7 @@ import UploadButton from '../components/upload_button';
import { uploadCompose } from '../../../actions/compose';
const mapStateToProps = state => ({
disabled: state.getIn(['compose', 'is_uploading']) || (state.getIn(['compose', 'media_attachments']).size > 3 || state.getIn(['compose', 'media_attachments']).some(m => m.get('type') === 'video')),
disabled: state.getIn(['compose', 'is_uploading']) || (state.getIn(['compose', 'media_attachments']).size > 3 || state.getIn(['compose', 'media_attachments']).some(m => ['video', 'audio'].includes(m.get('type')))),
unavailable: state.getIn(['compose', 'poll']) !== null,
resetFileKey: state.getIn(['compose', 'resetFileKey']),
});
......
......@@ -107,15 +107,15 @@ export default class DetailedStatus extends ImmutablePureComponent {
}
if (status.get('media_attachments').size > 0) {
if (status.getIn(['media_attachments', 0, 'type']) === 'video') {
const video = status.getIn(['media_attachments', 0]);
if (['video', 'audio'].includes(status.getIn(['media_attachments', 0, 'type']))) {
const attachment = status.getIn(['media_attachments', 0]);
media = (
<Video
preview={video.get('preview_url')}
blurhash={video.get('blurhash')}
src={video.get('url')}
alt={video.get('description')}
preview={attachment.get('preview_url')}
blurhash={attachment.get('blurhash')}
src={attachment.get('url')}
alt={attachment.get('description')}
width={300}
height={150}
inline
......
......@@ -8,7 +8,7 @@ const ComposePanel = () => (
<div className='compose-panel'>
<SearchContainer openInRoute />
<NavigationContainer />
<ComposeFormContainer />
<ComposeFormContainer singleColumn />
<LinkFooter withHotkeys />
</div>
);
......
......@@ -45,7 +45,7 @@
"bundle_modal_error.message": "لقد وقع هناك خطأ أثناء عملية تحميل هذا العنصر.",
"bundle_modal_error.retry": "إعادة المحاولة",
"column.blocks": "الحسابات المحجوبة",
"column.community": "التَسَلْسُل الزَمني المحلي",
"column.community": "الخيط العام المحلي",
"column.direct": "الرسائل المباشرة",
"column.domain_blocks": "النطاقات المخفية",
"column.favourites": "المفضلة",
......@@ -109,7 +109,7 @@
"emoji_button.food": "الطعام والشراب",
"emoji_button.label": "أدرج إيموجي",
"emoji_button.nature": "الطبيعة",
"emoji_button.not_found": "لا إيموجو !! (╯°□°)╯︵ ┻━┻",
"emoji_button.not_found": "لا إيموجو!! (╯°□°)╯︵ ┻━┻",
"emoji_button.objects": "أشياء",
"emoji_button.people": "الناس",
"emoji_button.recent": "الشائعة الاستخدام",
......@@ -120,7 +120,7 @@
"empty_column.account_timeline": "ليس هناك تبويقات!",
"empty_column.account_unavailable": "الملف الشخصي غير متوفر",
"empty_column.blocks": "لم تقم بحظر أي مستخدِم بعد.",
"empty_column.community": "الخط الزمني المحلي فارغ. أكتب شيئا ما للعامة كبداية!",
"empty_column.community": "الخط العام المحلي فارغ. أكتب شيئا ما للعامة كبداية!",
"empty_column.direct": "لم تتلق أية رسالة خاصة مباشِرة بعد. سوف يتم عرض الرسائل المباشرة هنا إن قمت بإرسال واحدة أو تلقيت البعض منها.",
"empty_column.domain_blocks": "ليس هناك نطاقات مخفية بعد.",
"empty_column.favourited_statuses": "ليس لديك أية تبويقات مفضلة بعد. عندما ستقوم بالإعجاب بواحد، سيظهر هنا.",
......@@ -164,8 +164,8 @@
"introduction.federation.federated.text": "كافة المنشورات التي نُشِرت إلى العامة على الخوادم الأخرى للفديفرس سوف يتم عرضها على الخيط المُوحَّد.",
"introduction.federation.home.headline": "الرئيسي",
"introduction.federation.home.text": "سوف تُعرَض منشورات الأشخاص الذين تُتابِعهم على الخيط الرئيسي. بإمكانك متابعة أي حساب أيا كان الخادم الذي هو عليه!",
"introduction.federation.local.headline": "المحلي",
"introduction.federation.local.text": "المنشورات المُوجّهة للعامة على نفس الخادم الذي أنتم عليه ستظهر على الخيط الزمني المحلي.",
"introduction.federation.local.headline": "الخيط العام المحلي",
"introduction.federation.local.text": "المنشورات المُوجّهة للعامة على نفس الخادم الذي أنتم عليه ستظهر على الخيط العام المحلي.",
"introduction.interactions.action": "إنهاء العرض التوضيحي!",
"introduction.interactions.favourite.headline": "الإضافة إلى المفضلة",
"introduction.interactions.favourite.text": "يمكِنك إضافة أي تبويق إلى المفضلة و إعلام صاحبه أنك أعجِبت بذاك التبويق.",
......@@ -192,7 +192,7 @@
"keyboard_shortcuts.home": "لفتح الخيط الرئيسي",
"keyboard_shortcuts.hotkey": "مفتاح الاختصار",
"keyboard_shortcuts.legend": "لعرض هذا المفتاح",
"keyboard_shortcuts.local": "لفتح الخيط الزمني المحلي",
"keyboard_shortcuts.local": "لفتح الخيط العام المحلي",
"keyboard_shortcuts.mention": "لذِكر الناشر",
"keyboard_shortcuts.muted": "لفتح قائمة المستخدِمين المكتومين",
"keyboard_shortcuts.my_profile": "لفتح ملفك الشخصي",
......@@ -221,7 +221,7 @@
"lists.new.title_placeholder": "عنوان القائمة الجديدة",
"lists.search": "إبحث في قائمة الحسابات التي تُتابِعها",
"lists.subheading": "قوائمك",
"loading_indicator.label": "تحميل ...",
"loading_indicator.label": "تحميل...",
"media_gallery.toggle_visible": "عرض / إخفاء",
"missing_indicator.label": "تعذر العثور عليه",
"missing_indicator.sublabel": "تعذر العثور على هذا المورد",
......@@ -358,7 +358,7 @@
"suggestions.header": "يمكن أن يهمك…",
"tabs_bar.federated_timeline": "الموحَّد",
"tabs_bar.home": "الرئيسية",
"tabs_bar.local_timeline": "المحلي",
"tabs_bar.local_timeline": "الخيط العام المحلي",
"tabs_bar.notifications": "الإخطارات",
"tabs_bar.search": "البحث",
"time_remaining.days": "{number, plural, one {# يوم} other {# أيام}} متبقية",
......@@ -369,7 +369,7 @@
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} آخرون {people}} يتحدثون",
"ui.beforeunload": "سوف تفقد مسودتك إن تركت ماستدون.",
"upload_area.title": "اسحب ثم أفلت للرفع",
"upload_button.label": "إضافة وسائط (JPEG، PNG، GIF، WebM، MP4، MOV)",
"upload_button.label": "إضافة وسائط ({formats})",
"upload_error.limit": "لقد تم بلوغ الحد الأقصى المسموح به لإرسال الملفات.",
"upload_error.poll": "لا يمكن إدراج ملفات في استطلاعات الرأي.",
"upload_form.description": "وصف للمعاقين بصريا",
......
......@@ -239,7 +239,7 @@
"navigation_bar.follow_requests": "অনুসরণের অনুরোধগুলি",
"navigation_bar.follows_and_followers": "Follows and followers",
"navigation_bar.info": "এই সার্ভার সম্পর্কে",
"navigation_bar.keyboard_shortcuts": "চাবি ব্যবহার",
"navigation_bar.keyboard_shortcuts": "হটকীগুলি",
"navigation_bar.lists": "তালিকাগুলো",
"navigation_bar.logout": "বাইরে যান",
"navigation_bar.mutes": "যেসব বেভহারকারীদের কার্যক্রম বন্ধ করা আছে",
......
......@@ -314,7 +314,7 @@
"search_results.accounts": "Gent",
"search_results.hashtags": "Etiquetes",
"search_results.statuses": "Toots",
"search_results.total": "{count, number} {count, plural, one {result} other {results}}",
"search_results.total": "{count, number} {count, plural, one {resultat} other {resultats}}",
"status.admin_account": "Obre l'interfície de moderació per a @{name}",
"status.admin_status": "Obre aquest toot a la interfície de moderació",
"status.block": "Bloqueja @{name}",
......@@ -366,7 +366,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 {person} other {people}} talking",
"trends.count_by_accounts": "{count} {rawCount, plural, one {persona} other {gent}} talking",
"ui.beforeunload": "El teu esborrany es perdrà si surts de Mastodon.",
"upload_area.title": "Arrossega i deixa anar per a carregar",
"upload_button.label": "Afegir multimèdia (JPEG, PNG, GIF, WebM, MP4, MOV)",
......
......@@ -161,7 +161,7 @@
"intervals.full.minutes": "{number, plural, one {# minuta} other {# minute}}",
"introduction.federation.action": "Cuntinuà",
"introduction.federation.federated.headline": "Federata",
"introduction.federation.federated.text": "I statuti pubblichi da l'altri servori di u fediverse saranu mustrati nant'à a linea pubblica federata.",
"introduction.federation.federated.text": "I statuti pubblichi da l'altri servori di u fediverse saranu mustrati nant'à a linea pubblica glubale.",
"introduction.federation.home.headline": "Accolta",
"introduction.federation.home.text": "I statuti da a ghjente che vo siguitate saranu affissati nant'à a linea d'accolta. Pudete seguità qualvogliasia nant'à tutti i servori!",
"introduction.federation.local.headline": "Lucale",
......@@ -187,7 +187,7 @@
"keyboard_shortcuts.enter": "apre u statutu",
"keyboard_shortcuts.favourite": "aghjunghje à i favuriti",
"keyboard_shortcuts.favourites": "per apre a lista di i favuriti",
"keyboard_shortcuts.federated": "per apre a linea pubblica federata",
"keyboard_shortcuts.federated": "per apre a linea pubblica glubale",
"keyboard_shortcuts.heading": "Accorte cù a tastera",
"keyboard_shortcuts.home": "per apre a linea d'accolta",
"keyboard_shortcuts.hotkey": "Accorta",
......@@ -286,9 +286,9 @@
"privacy.direct.short": "Direttu",
"privacy.private.long": "Mustrà solu à l'abbunati",
"privacy.private.short": "Privatu",
"privacy.public.long": "Mustrà à tuttu u mondu nant'a linea pubblica",
"privacy.public.long": "Mustrà à tuttu u mondu nant'à e linee pubbliche",
"privacy.public.short": "Pubblicu",
"privacy.unlisted.long": "Ùn mette micca nant'a linea pubblica (ma tutt'u mondu pò vede u statutu nant'à u vostru prufile)",
"privacy.unlisted.long": "Ùn mette micca nant'à e linee pubbliche",
"privacy.unlisted.short": "Micca listatu",
"regeneration_indicator.label": "Caricamentu…",
"regeneration_indicator.sublabel": "Priparazione di a vostra pagina d'accolta!",
......
......@@ -300,7 +300,7 @@
"reply_indicator.cancel": "Zrušit",
"report.forward": "Přeposlat na {target}",
"report.forward_hint": "Tento účet je z jiného serveru. Chcete na něj také poslat anonymizovanou kopii?",
"report.hint": "Toto nahlášení bude zasláno moderátorům vašeho serveru. Níže můžete uvést, proč tento účet nahlašujete:",
"report.hint": "Nahlášení bude zasláno moderátorům vašeho serveru. Níže můžete uvést, proč tento účet nahlašujete:",
"report.placeholder": "Dodatečné komentáře",
"report.submit": "Odeslat",
"report.target": "Nahlášení uživatele {target}",
......
......@@ -264,7 +264,7 @@
"notifications.column_settings.follow": "Dilynwyr newydd:",
"notifications.column_settings.mention": "Crybwylliadau:",
"notifications.column_settings.poll": "Canlyniadau pleidlais:",
"notifications.column_settings.push": "Hysbysiadau push",
"notifications.column_settings.push": "Hysbysiadau gwthiadwy",
"notifications.column_settings.reblog": "Hybiadau:",
"notifications.column_settings.show": "Dangos yn y golofn",
"notifications.column_settings.sound": "Chwarae sain",
......
......@@ -369,7 +369,7 @@
"trends.count_by_accounts": "{count} {rawCount, plural, eine {Person} other {Personen}} reden darüber",
"ui.beforeunload": "Dein Entwurf geht verloren, wenn du Mastodon verlässt.",
"upload_area.title": "Zum Hochladen hereinziehen",
"upload_button.label": "Mediendatei hinzufügen (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_button.label": "Mediendatei hinzufügen ({formats})",
"upload_error.limit": "Dateiupload-Limit erreicht.",
"upload_error.poll": "Dateiuploads sind in Kombination mit Umfragen nicht erlaubt.",
"upload_form.description": "Für Menschen mit Sehbehinderung beschreiben",
......
......@@ -1051,7 +1051,7 @@
{
"descriptors": [
{
"defaultMessage": "Add media (JPEG, PNG, GIF, WebM, MP4, MOV)",
"defaultMessage": "Add media ({formats})",
"id": "upload_button.label"
}
],
......
{
"account.add_or_remove_from_list": "Προσθήκη ή Αφαίρεση από λίστες",
"account.badges.bot": "Μποτ",
"account.block": "Απόκλεισε τον/την @{name}",
"account.block": "Αποκλισμός @{name}",
"account.block_domain": "Απόκρυψε τα πάντα από το {domain}",
"account.blocked": "Αποκλεισμένος/η",
"account.direct": "Προσωπικό μήνυμα προς @{name}",
......@@ -27,13 +27,13 @@
"account.posts_with_replies": "Τουτ και απαντήσεις",
"account.report": "Κατάγγειλε @{name}",
"account.requested": "Εκκρεμεί έγκριση. Κάνε κλικ για να ακυρώσεις το αίτημα παρακολούθησης",
"account.share": "Μοιράσου το προφίλ του/της @{name}",
"account.show_reblogs": "Δείξε τις προωθήσεις του/της @{name}",
"account.share": "Μοίρασμα του προφίλ @{name}",
"account.show_reblogs": "Εμφάνιση προωθήσεων από @{name}",
"account.unblock": "Ξεμπλόκαρε @{name}",
"account.unblock_domain": "Αποκάλυψε το {domain}",
"account.unendorse": "Άνευ προβολής στο προφίλ",
"account.unfollow": "Διακοπή παρακολούθησης",
"account.unmute": "Διακοπή αποσιώπησης του/της @{name}",
"account.unmute": "Διακοπή αποσιώπησης @{name}",
"account.unmute_notifications": "Διακοπή αποσιώπησης ειδοποιήσεων του/της @{name}",
"alert.unexpected.message": "Προέκυψε απροσδόκητο σφάλμα.",
"alert.unexpected.title": "Εεπ!",
......@@ -41,8 +41,8 @@
"bundle_column_error.body": "Κάτι πήγε στραβά ενώ φορτωνόταν αυτό το στοιχείο.",
"bundle_column_error.retry": "Δοκίμασε ξανά",
"bundle_column_error.title": "Σφάλμα δικτύου",
"bundle_modal_error.close": "Κλείσε",
"bundle_modal_error.message": "Κάτι πήγε στραβά ενώ φορτωνόταν αυτό το στοιχείο.",
"bundle_modal_error.close": "Κλείσιμο",
"bundle_modal_error.message": "Κάτι πήγε στραβά κατά τη φόρτωση του στοιχείου.",
"bundle_modal_error.retry": "Δοκίμασε ξανά",
"column.blocks": "Αποκλεισμένοι χρήστες",
"column.community": "Τοπική ροή",
......@@ -69,7 +69,7 @@
"compose_form.direct_message_warning_learn_more": "Μάθετε περισσότερα",
"compose_form.hashtag_warning": "Αυτό το τουτ δεν θα εμφανίζεται κάτω από κανένα hashtag καθώς είναι αφανές. Μόνο τα δημόσια τουτ μπορούν να αναζητηθούν ανά hashtag.",
"compose_form.lock_disclaimer": "Ο λογαριασμός σου δεν είναι {locked}. Οποιοσδήποτε μπορεί να σε ακολουθήσει για να δει τις δημοσιεύσεις σας προς τους ακολούθους σας.",
"compose_form.lock_disclaimer.lock": "κλειδωμένος",
"compose_form.lock_disclaimer.lock": "κλειδωμένο",
"compose_form.placeholder": "Τι σκέφτεσαι;",
"compose_form.poll.add_option": "Προσθήκη επιλογής",
"compose_form.poll.duration": "Διάρκεια δημοσκόπησης",
......@@ -88,7 +88,7 @@
"confirmations.block.confirm": "Απόκλεισε",
"confirmations.block.message": "Σίγουρα θες να αποκλείσεις {name};",
"confirmations.delete.confirm": "Διέγραψε",
"confirmations.delete.message": "Σίγουρα θες να διαγράψεις αυτή την κατάσταση;",
"confirmations.delete.message": "Σίγουρα θες να διαγράψεις αυτή τη δημοσίευση;",
"confirmations.delete_list.confirm": "Διέγραψε",
"confirmations.delete_list.message": "Σίγουρα θες να διαγράψεις οριστικά αυτή τη λίστα;",
"confirmations.domain_block.confirm": "Απόκρυψη ολόκληρου του τομέα",
......@@ -149,7 +149,7 @@
"hashtag.column_header.tag_mode.none": "χωρίς {additional}",
"hashtag.column_settings.select.no_options_message": "Δεν βρέθηκαν προτάσεις",
"hashtag.column_settings.select.placeholder": "Γράψε μερικές ταμπέλες…",
"hashtag.column_settings.tag_mode.all": "Όλα αυτα",
"hashtag.column_settings.tag_mode.all": "Όλα αυτά",
"hashtag.column_settings.tag_mode.any": "Οποιοδήποτε από αυτά",
"hashtag.column_settings.tag_mode.none": "Κανένα από αυτά",
"hashtag.column_settings.tag_toggle": "Προσθήκη επιπλέον ταμπελών για την κολώνα",
......
......@@ -369,7 +369,7 @@
"trends.count_by_accounts": "{count} {rawCount, plural, one {person} other {people}} talking",
"ui.beforeunload": "Your draft will be lost if you leave Mastodon.",
"upload_area.title": "Drag & drop to upload",
"upload_button.label": "Add media (JPEG, PNG, GIF, WebM, MP4, MOV)",
"upload_button.label": "Add media ({formats})",
"upload_error.limit": "File upload limit exceeded.",
"upload_error.poll": "File upload not allowed with polls.",
"upload_form.description": "Describe for the visually impaired",
......
......@@ -17,7 +17,7 @@
"account.hide_reblogs": "Ocultar retoots de @{name}",
"account.link_verified_on": "El proprietario de este link fue verificado el {date}",
"account.locked_info": "El estado de privacidad de esta cuenta està configurado como bloqueado. El proprietario debe revisar manualmente quien puede seguirle.",
"account.media": "Media",
"account.media": "Multimedia",
"account.mention": "Mencionar a @{name}",
"account.moved_to": "{name} se ha mudado a:",
"account.mute": "Silenciar a @{name}",
......@@ -36,7 +36,7 @@
"account.unmute": "Dejar de silenciar a @{name}",
"account.unmute_notifications": "Dejar de silenciar las notificaciones de @{name}",
"alert.unexpected.message": "Hubo un error inesperado.",
"alert.unexpected.title": "Oops!",
"alert.unexpected.title": "¡Ups!",
"boost_modal.combo": "Puedes presionar {combo} para saltear este aviso la próxima vez",
"bundle_column_error.body": "Algo salió mal al cargar este componente.",
"bundle_column_error.retry": "Inténtalo de nuevo",
......@@ -71,25 +71,25 @@
"compose_form.lock_disclaimer": "Tu cuenta no está bloqueada. Todos pueden seguirte para ver tus toots solo para seguidores.",
"compose_form.lock_disclaimer.lock": "bloqueado",
"compose_form.placeholder": "¿En qué estás pensando?",
"compose_form.poll.add_option": "Add a choice",
"compose_form.poll.duration": "Poll duration",
"compose_form.poll.option_placeholder": "Choice {number}",
"compose_form.poll.remove_option": "Remove this choice",
"compose_form.poll.add_option": "Añadir una opción",
"compose_form.poll.duration": "Duración de la encuesta",
"compose_form.poll.option_placeholder": "Elección {number}",
"compose_form.poll.remove_option": "Eliminar esta opción",
"compose_form.publish": "Tootear",
"compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.hide": "Mark media as sensitive",
"compose_form.sensitive.hide": "Marcar multimedia como sensible",
"compose_form.sensitive.marked": "Material marcado como sensible",
"compose_form.sensitive.unmarked": "Material no marcado como sensible",
"compose_form.spoiler.marked": "Texto oculto tras la advertencia",
"compose_form.spoiler.unmarked": "Texto no oculto",
"compose_form.spoiler_placeholder": "Advertencia de contenido",
"confirmation_modal.cancel": "Cancelar",
"confirmations.block.block_and_report": "Block & Report",
"confirmations.block.block_and_report": "Bloquear y Reportar",
"confirmations.block.confirm": "Bloquear",
"confirmations.block.message": "¿Estás seguro de que quieres bloquear a {name}?",
"confirmations.delete.confirm": "Eliminar",
"confirmations.delete.message": "¿Estás seguro de que quieres borrar este toot?",
"confirmations.delete_list.confirm": "Delete",
"confirmations.delete_list.confirm": "Eliminar",
"confirmations.delete_list.message": "¿Seguro que quieres borrar esta lista permanentemente?",
"confirmations.domain_block.confirm": "Ocultar dominio entero",
"confirmations.domain_block.message": "¿Seguro de que quieres bloquear al dominio {domain} entero? En general unos cuantos bloqueos y silenciados concretos es suficiente y preferible.",
......@@ -97,7 +97,7 @@
"confirmations.mute.message": "¿Estás seguro de que quieres silenciar a {name}?",
"confirmations.redraft.confirm": "Borrar y volver a borrador",
"confirmations.redraft.message": "Estás seguro de que quieres borrar este estado y volverlo a borrador? Perderás todas las respuestas, impulsos y favoritos asociados a él, y las respuestas a la publicación original quedarán huérfanos.",
"confirmations.reply.confirm": "Reply",
"confirmations.reply.confirm": "Responder",
"confirmations.reply.message": "Replying now will overwrite the message you are currently composing. Are you sure you want to proceed?",
"confirmations.unfollow.confirm": "Dejar de seguir",
"confirmations.unfollow.message": "¿Estás seguro de que quieres dejar de seguir a {name}?",
......@@ -117,8 +117,8 @@
"emoji_button.search_results": "Resultados de búsqueda",
"emoji_button.symbols": "Símbolos",
"emoji_button.travel": "Viajes y lugares",
"empty_column.account_timeline": "No toots here!",
"empty_column.account_unavailable": "Profile unavailable",
"empty_column.account_timeline": "¡No hay toots aquí!",
"empty_column.account_unavailable": "Perfil no disponible",
"empty_column.blocks": "Aún no has bloqueado a ningún usuario.",
"empty_column.community": "La línea de tiempo local está vacía. ¡Escribe algo para empezar la fiesta!",
"empty_column.direct": "Aún no tienes ningún mensaje directo. Cuando envíes o recibas uno, se mostrará aquí.",
......@@ -137,21 +137,21 @@
"follow_request.authorize": "Autorizar",
"follow_request.reject": "Rechazar",
"getting_started.developers": "Desarrolladores",
"getting_started.directory": "Profile directory",
"getting_started.documentation": "Documentation",
"getting_started.directory": "Directorio de perfil",
"getting_started.documentation": "Documentación",
"getting_started.heading": "Primeros pasos",
"getting_started.invite": "Invitar usuarios",
"getting_started.open_source_notice": "Mastodon es software libre. Puedes contribuir o reportar errores en {github}.",
"getting_started.security": "Seguridad",
"getting_started.terms": "Términos de servicio",
"hashtag.column_header.tag_mode.all": "and {additional}",
"hashtag.column_header.tag_mode.any": "or {additional}",
"hashtag.column_header.tag_mode.none": "without {additional}",
"hashtag.column_settings.select.no_options_message": "No suggestions found",
"hashtag.column_settings.select.placeholder": "Enter hashtags…",
"hashtag.column_header.tag_mode.all": "y {additional}",
"hashtag.column_header.tag_mode.any": "o {additional}",
"hashtag.column_header.tag_mode.none": "sin {additional}",
"hashtag.column_settings.select.no_options_message": "No se encontraron sugerencias",
"hashtag.column_settings.select.placeholder": "Introduzca hashtags…",
"hashtag.column_settings.tag_mode.all": "All of these",
"hashtag.column_settings.tag_mode.any": "Any of these",
"hashtag.column_settings.tag_mode.none": "None of these",
"hashtag.column_settings.tag_mode.any": "Cualquiera de estos",
"hashtag.column_settings.tag_mode.none": "Ninguno de estos",
"hashtag.column_settings.tag_toggle": "Include additional tags in this column",
"home.column_settings.basic": "Básico",
"home.column_settings.show_reblogs": "Mostrar retoots",
......@@ -159,29 +159,29 @@
"intervals.full.days": "{number, plural, one {# day} other {# days}}",
"intervals.full.hours": "{number, plural, one {# hour} other {# hours}}",
"intervals.full.minutes": "{number, plural, one {# minute} other {# minutes}}",
"introduction.federation.action": "Next",
"introduction.federation.federated.headline": "Federated",
"introduction.federation.action": "Siguiente",
"introduction.federation.federated.headline": "Federado",
"introduction.federation.federated.text": "Public posts from other servers of the fediverse will appear in the federated timeline.",
"introduction.federation.home.headline": "Home",
"introduction.federation.home.headline": "Inicio",
"introduction.federation.home.text": "Posts from people you follow will appear in your home feed. You can follow anyone on any server!",
"introduction.federation.local.headline": "Local",
"introduction.federation.local.text": "Public posts from people on the same server as you will appear in the local timeline.",
"introduction.interactions.action": "Finish toot-orial!",
"introduction.interactions.favourite.headline": "Favourite",
"introduction.interactions.action": "¡Terminar tutorial!",
"introduction.interactions.favourite.headline": "Favorito",
"introduction.interactions.favourite.text": "You can save a toot for later, and let the author know that you liked it, by favouriting it.",
"introduction.interactions.reblog.headline": "Boost",
"introduction.interactions.reblog.text": "You can share other people's toots with your followers by boosting them.",
"introduction.interactions.reply.headline": "Reply",
"introduction.interactions.reply.headline": "Responder",
"introduction.interactions.reply.text": "You can reply to other people's and your own toots, which will chain them together in a conversation.",
"introduction.welcome.action": "Let's go!",
"introduction.welcome.headline": "First steps",
"introduction.welcome.action": "¡Vamos!",
"introduction.welcome.headline": "Primeros pasos",
"introduction.welcome.text": "Welcome to the fediverse! In a few moments, you'll be able to broadcast messages and talk to your friends across a wide variety of servers. But this server, {domain}, is special—it hosts your profile, so remember its name.",
"keyboard_shortcuts.back": "volver atrás",
"keyboard_shortcuts.blocked": "abrir una lista de usuarios bloqueados",
"keyboard_shortcuts.boost": "retootear",
"keyboard_shortcuts.column": "enfocar un estado en una de las columnas",
"keyboard_shortcuts.compose": "enfocar el área de texto de redacción",
"keyboard_shortcuts.description": "Description",
"keyboard_shortcuts.description": "Descripción",
"keyboard_shortcuts.direct": "abrir la columna de mensajes directos",
"keyboard_shortcuts.down": "mover hacia abajo en la lista",
"keyboard_shortcuts.enter": "to open status",
......@@ -211,10 +211,10 @@