feat(gif): favourites and category shortcuts
OpenSSF Scorecard / Scorecard analysis (push) Waiting to run
CI / Build & test (Node 20) (push) Canceled after 0s
CI / Build & test (Node 24) (push) Canceled after 0s
CI / Build & test (push) Canceled after 0s
CodeQL / Analyze (javascript-typescript) (push) Canceled after 0s
Security / Secret scan (gitleaks) (push) Canceled after 0s
Security / Dependency scan (OSV-Scanner) (push) Canceled after 0s
Security / IaC/config scan (Trivy) (push) Canceled after 0s
Security / License compliance scan (Trivy) (push) Canceled after 0s
OpenSSF Scorecard / Scorecard analysis (push) Waiting to run
CI / Build & test (Node 20) (push) Canceled after 0s
CI / Build & test (Node 24) (push) Canceled after 0s
CI / Build & test (push) Canceled after 0s
CodeQL / Analyze (javascript-typescript) (push) Canceled after 0s
Security / Secret scan (gitleaks) (push) Canceled after 0s
Security / Dependency scan (OSV-Scanner) (push) Canceled after 0s
Security / IaC/config scan (Trivy) (push) Canceled after 0s
Security / License compliance scan (Trivy) (push) Canceled after 0s
Favourites are stored server-side per user, so one made on the phone is there on the desktop — the point of favouriting. The whole result is stored rather than an id: the provider offers no lookup by id, so an id-only favourite could not be rendered without re-finding it through search. Category chips translate their label but not their query, which goes to a provider that indexes in English. The star sits beside the tile button rather than inside it: a button within a button is invalid and swallows the click. Toggling is optimistic and reverts on failure, and favourites skip both the loading skeleton and the infinite scroll, which belong to provider-backed browsing only. Server caps favourites per user and rejects non-http(s) URLs, which become <img src> in everyone's picker.
This commit is contained in:
@@ -33,6 +33,22 @@ export const en = {
|
||||
'settings.voice.micTest.idle': 'Test your mic without joining a call.',
|
||||
'settings.voice.micTest.failed': 'Could not open the microphone. Check the device and its permission.',
|
||||
|
||||
// GIF picker
|
||||
'gif.search': 'Search GIFs',
|
||||
'gif.tab.favorites': 'Favorites',
|
||||
'gif.tab.trending': 'Trending',
|
||||
'gif.empty.search': 'No GIFs found',
|
||||
'gif.empty.trending': 'No trending GIFs',
|
||||
'gif.empty.favorites': 'No favorites yet — tap the star on any GIF.',
|
||||
'gif.favorite.add': 'Add to favorites',
|
||||
'gif.favorite.remove': 'Remove from favorites',
|
||||
'gif.category.hello': 'hello',
|
||||
'gif.category.lol': 'lol',
|
||||
'gif.category.love': 'love',
|
||||
'gif.category.birthday': 'happy birthday',
|
||||
'gif.category.dance': 'dance',
|
||||
'gif.category.facepalm': 'facepalm',
|
||||
|
||||
// Settings — privacy
|
||||
'privacy.title': 'Privacy',
|
||||
'privacy.discoverable.label': 'Allow others to find my profile',
|
||||
|
||||
@@ -32,6 +32,22 @@ export const ptBR: Partial<Dictionary> = {
|
||||
'settings.voice.micTest.idle': 'Teste seu microfone sem entrar numa call.',
|
||||
'settings.voice.micTest.failed': 'Não foi possível abrir o microfone. Verifique o dispositivo e a permissão.',
|
||||
|
||||
// Seletor de GIF
|
||||
'gif.search': 'Buscar GIFs',
|
||||
'gif.tab.favorites': 'Favoritos',
|
||||
'gif.tab.trending': 'Em alta',
|
||||
'gif.empty.search': 'Nenhum GIF encontrado',
|
||||
'gif.empty.trending': 'Nenhum GIF em alta',
|
||||
'gif.empty.favorites': 'Nenhum favorito ainda — toque na estrela de um GIF.',
|
||||
'gif.favorite.add': 'Adicionar aos favoritos',
|
||||
'gif.favorite.remove': 'Remover dos favoritos',
|
||||
'gif.category.hello': 'oi',
|
||||
'gif.category.lol': 'risada',
|
||||
'gif.category.love': 'amor',
|
||||
'gif.category.birthday': 'feliz aniversário',
|
||||
'gif.category.dance': 'dança',
|
||||
'gif.category.facepalm': 'vergonha alheia',
|
||||
|
||||
// Configurações — privacidade
|
||||
'privacy.title': 'Privacidade',
|
||||
'privacy.discoverable.label': 'Permitir que me encontrem',
|
||||
|
||||
Reference in New Issue
Block a user