diff options
42 files changed, 170 insertions, 54 deletions
diff --git a/README.fr.md b/README.fr.md index 783004879..fb10064ec 100644 --- a/README.fr.md +++ b/README.fr.md @@ -236,9 +236,9 @@ Voir le [dépôt dédié à ces extensions](https://github.com/FreshRSS/Extensio | Suomi (fi) | ■■■■■■■■■・ 96% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffi+%2F%28TODO%7CDIRTY%29%24%2F) | | Français (fr) | ■■■■■■■■■■ 100% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffr+%2F%28TODO%7CDIRTY%29%24%2F) | | עברית (he) | ■■■■・・・・・・ 43% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhe+%2F%28TODO%7CDIRTY%29%24%2F) | -| Magyar (hu) | ■■■■■■■■■■ 100% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhu+%2F%28TODO%7CDIRTY%29%24%2F) | +| Magyar (hu) | ■■■■■■■■■・ 99% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhu+%2F%28TODO%7CDIRTY%29%24%2F) | | Bahasa Indonesia (id) | ■■■■■■■■■・ 93% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fid+%2F%28TODO%7CDIRTY%29%24%2F) | -| Italiano (it) | ■■■■■■■■■■ 100% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fit+%2F%28TODO%7CDIRTY%29%24%2F) | +| Italiano (it) | ■■■■■■■■■・ 99% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fit+%2F%28TODO%7CDIRTY%29%24%2F) | | 日本語 (ja) | ■■■■■■■■■・ 91% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fja+%2F%28TODO%7CDIRTY%29%24%2F) | | 한국어 (ko) | ■■■■■■■■・・ 85% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fko+%2F%28TODO%7CDIRTY%29%24%2F) | | Latviešu (lv) | ■■■■■■■・・・ 79% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Flv+%2F%28TODO%7CDIRTY%29%24%2F) | @@ -247,7 +247,7 @@ Voir le [dépôt dédié à ces extensions](https://github.com/FreshRSS/Extensio | Polski (pl) | ■■■■■■■■■・ 99% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpl+%2F%28TODO%7CDIRTY%29%24%2F) | | Português (Brasil) (pt-BR) | ■■■■■■■■・・ 84% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-BR+%2F%28TODO%7CDIRTY%29%24%2F) | | Português (Portugal) (pt-PT) | ■■■■■■■■・・ 84% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-PT+%2F%28TODO%7CDIRTY%29%24%2F) | -| Русский (ru) | ■■■■■■■■■■ 100% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fru+%2F%28TODO%7CDIRTY%29%24%2F) | +| Русский (ru) | ■■■■■■■■■・ 99% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fru+%2F%28TODO%7CDIRTY%29%24%2F) | | Slovenčina (sk) | ■■■■■■■■・・ 85% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fsk+%2F%28TODO%7CDIRTY%29%24%2F) | | Türkçe (tr) | ■■■■■■■■■・ 92% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ftr+%2F%28TODO%7CDIRTY%29%24%2F) | | Українська (uk) | ■■■■■■■■■・ 95% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fuk+%2F%28TODO%7CDIRTY%29%24%2F) | @@ -132,9 +132,9 @@ See the [repository dedicated to those extensions](https://github.com/FreshRSS/E | Suomi (fi) | ■■■■■■■■■・ 96% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffi+%2F%28TODO%7CDIRTY%29%24%2F) | | Français (fr) | ■■■■■■■■■■ 100% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffr+%2F%28TODO%7CDIRTY%29%24%2F) | | עברית (he) | ■■■■・・・・・・ 43% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhe+%2F%28TODO%7CDIRTY%29%24%2F) | -| Magyar (hu) | ■■■■■■■■■■ 100% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhu+%2F%28TODO%7CDIRTY%29%24%2F) | +| Magyar (hu) | ■■■■■■■■■・ 99% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhu+%2F%28TODO%7CDIRTY%29%24%2F) | | Bahasa Indonesia (id) | ■■■■■■■■■・ 93% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fid+%2F%28TODO%7CDIRTY%29%24%2F) | -| Italiano (it) | ■■■■■■■■■■ 100% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fit+%2F%28TODO%7CDIRTY%29%24%2F) | +| Italiano (it) | ■■■■■■■■■・ 99% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fit+%2F%28TODO%7CDIRTY%29%24%2F) | | 日本語 (ja) | ■■■■■■■■■・ 91% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fja+%2F%28TODO%7CDIRTY%29%24%2F) | | 한국어 (ko) | ■■■■■■■■・・ 85% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fko+%2F%28TODO%7CDIRTY%29%24%2F) | | Latviešu (lv) | ■■■■■■■・・・ 79% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Flv+%2F%28TODO%7CDIRTY%29%24%2F) | @@ -143,7 +143,7 @@ See the [repository dedicated to those extensions](https://github.com/FreshRSS/E | Polski (pl) | ■■■■■■■■■・ 99% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpl+%2F%28TODO%7CDIRTY%29%24%2F) | | Português (Brasil) (pt-BR) | ■■■■■■■■・・ 84% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-BR+%2F%28TODO%7CDIRTY%29%24%2F) | | Português (Portugal) (pt-PT) | ■■■■■■■■・・ 84% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fpt-PT+%2F%28TODO%7CDIRTY%29%24%2F) | -| Русский (ru) | ■■■■■■■■■■ 100% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fru+%2F%28TODO%7CDIRTY%29%24%2F) | +| Русский (ru) | ■■■■■■■■■・ 99% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fru+%2F%28TODO%7CDIRTY%29%24%2F) | | Slovenčina (sk) | ■■■■■■■■・・ 85% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fsk+%2F%28TODO%7CDIRTY%29%24%2F) | | Türkçe (tr) | ■■■■■■■■■・ 92% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ftr+%2F%28TODO%7CDIRTY%29%24%2F) | | Українська (uk) | ■■■■■■■■■・ 95% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fuk+%2F%28TODO%7CDIRTY%29%24%2F) | diff --git a/app/i18n/cs/conf.php b/app/i18n/cs/conf.php index 9662e0108..73fb94220 100644 --- a/app/i18n/cs/conf.php +++ b/app/i18n/cs/conf.php @@ -359,6 +359,7 @@ return array( 'skip_next_article' => 'Zaměřit na další bez otevření', 'skip_previous_article' => 'Zaměřit na předchozí bez otevření', 'title' => 'Zkratky', + 'toggle_aside' => 'Toggle sidebar', // TODO 'toggle_media' => 'Přehrát/pozastavit médium', 'user_filter' => 'Přístup k uživatelským dotazům', 'user_filter_help' => 'Pokud je pouze jeden uživatelský dotaz, je použit. Jinak jsou dotazy dostupné podle jejich čísla.', diff --git a/app/i18n/de/conf.php b/app/i18n/de/conf.php index 9c3e22f75..2099513c9 100644 --- a/app/i18n/de/conf.php +++ b/app/i18n/de/conf.php @@ -359,6 +359,7 @@ return array( 'skip_next_article' => 'Nächsten markieren ohne zu öffnen', 'skip_previous_article' => 'Vorherigen markieren ohne zu öffnen', 'title' => 'Tastenkombination', + 'toggle_aside' => 'Toggle sidebar', // TODO 'toggle_media' => 'Medien abspielen/anhalten', 'user_filter' => 'Auf Benutzerfilter zugreifen', 'user_filter_help' => 'Wenn es nur einen Benutzerfilter gibt, wird dieser verwendet. Ansonsten sind die Filter über ihre Nummer erreichbar.', diff --git a/app/i18n/el/conf.php b/app/i18n/el/conf.php index d254c1853..8b0a4236d 100644 --- a/app/i18n/el/conf.php +++ b/app/i18n/el/conf.php @@ -359,6 +359,7 @@ return array( 'skip_next_article' => 'Focus next without opening', // TODO 'skip_previous_article' => 'Focus previous without opening', // TODO 'title' => 'Shortcuts', // TODO + 'toggle_aside' => 'Toggle sidebar', // TODO 'toggle_media' => 'Play/pause media', // TODO 'user_filter' => 'Access user queries', // TODO 'user_filter_help' => 'If there is only one user query, it is used. Otherwise, queries are accessible by their number.', // TODO diff --git a/app/i18n/en-US/conf.php b/app/i18n/en-US/conf.php index 34d93b7d0..ba9b55b24 100644 --- a/app/i18n/en-US/conf.php +++ b/app/i18n/en-US/conf.php @@ -359,6 +359,7 @@ return array( 'skip_next_article' => 'Focus next without opening', // IGNORE 'skip_previous_article' => 'Focus previous without opening', // IGNORE 'title' => 'Shortcuts', // IGNORE + 'toggle_aside' => 'Toggle sidebar', // IGNORE 'toggle_media' => 'Play/pause media', // IGNORE 'user_filter' => 'Access user queries', // IGNORE 'user_filter_help' => 'If there is only one user query, it is used. Otherwise, queries are accessible by their number.', // IGNORE diff --git a/app/i18n/en/conf.php b/app/i18n/en/conf.php index 0b69aede1..2e4c20d32 100644 --- a/app/i18n/en/conf.php +++ b/app/i18n/en/conf.php @@ -359,6 +359,7 @@ return array( 'skip_next_article' => 'Focus next without opening', 'skip_previous_article' => 'Focus previous without opening', 'title' => 'Shortcuts', + 'toggle_aside' => 'Toggle sidebar', 'toggle_media' => 'Play/pause media', 'user_filter' => 'Access user queries', 'user_filter_help' => 'If there is only one user query, it is used. Otherwise, queries are accessible by their number.', diff --git a/app/i18n/es/conf.php b/app/i18n/es/conf.php index 6655852e6..f43b1079f 100644 --- a/app/i18n/es/conf.php +++ b/app/i18n/es/conf.php @@ -359,6 +359,7 @@ return array( 'skip_next_article' => 'Enfoque siguiente sin abrir', 'skip_previous_article' => 'Enfoque anterior sin abrir', 'title' => 'Atajos de teclado', + 'toggle_aside' => 'Toggle sidebar', // TODO 'toggle_media' => 'Jugar/pausar medios', 'user_filter' => 'Acceso a filtros de usuario', 'user_filter_help' => 'Si solo hay un filtro de usuario, ese será el que se use. En caso contrario, los filtros están accesibles por su numeración.', diff --git a/app/i18n/fa/conf.php b/app/i18n/fa/conf.php index 9bf8b7501..870b49dc8 100644 --- a/app/i18n/fa/conf.php +++ b/app/i18n/fa/conf.php @@ -359,6 +359,7 @@ return array( 'skip_next_article' => ' فوکوس بعدی بدون باز کردن', 'skip_previous_article' => ' فوکوس قبلی بدون باز کردن', 'title' => ' میانبرها', + 'toggle_aside' => 'Toggle sidebar', // TODO 'toggle_media' => ' پخش/مکث رسانه', 'user_filter' => ' به درخواست های کاربر دسترسی پیدا کنید', 'user_filter_help' => ' اگر فقط یک درخواست کاربر وجود داشته باشد', diff --git a/app/i18n/fi/conf.php b/app/i18n/fi/conf.php index 196137e76..7261d270f 100644 --- a/app/i18n/fi/conf.php +++ b/app/i18n/fi/conf.php @@ -359,6 +359,7 @@ return array( 'skip_next_article' => 'Siirry seuraavaan, mutta älä avaa', 'skip_previous_article' => 'Siirry edelliseen, mutta älä avaa', 'title' => 'Pikanäppäimet', + 'toggle_aside' => 'Toggle sidebar', // TODO 'toggle_media' => 'Toista/keskeytä media', 'user_filter' => 'Siirry käyttäjän kyselyihin', 'user_filter_help' => 'Jos kyselyitä on vain yksi, sitä käytetään automaattisesti. Muussa tapauksessa kyselyn voi valita numerolla.', diff --git a/app/i18n/fr/conf.php b/app/i18n/fr/conf.php index befd951f0..27950983c 100644 --- a/app/i18n/fr/conf.php +++ b/app/i18n/fr/conf.php @@ -359,6 +359,7 @@ return array( 'skip_next_article' => 'Passer au suivant sans ouvrir', 'skip_previous_article' => 'Passer au précédent sans ouvrir', 'title' => 'Raccourcis', + 'toggle_aside' => 'Afficher/masquer la barre latérale', 'toggle_media' => 'Lire/arrêter le média', 'user_filter' => 'Accéder aux filtres utilisateur', 'user_filter_help' => 'S’il n’y a qu’un filtre utilisateur, celui-ci est utilisé automatiquement. Sinon ils sont accessibles par leur numéro.', diff --git a/app/i18n/he/conf.php b/app/i18n/he/conf.php index 65014e92c..f7018c582 100644 --- a/app/i18n/he/conf.php +++ b/app/i18n/he/conf.php @@ -359,6 +359,7 @@ return array( 'skip_next_article' => 'Focus next without opening', // TODO 'skip_previous_article' => 'Focus previous without opening', // TODO 'title' => 'קיצורי דרך', + 'toggle_aside' => 'Toggle sidebar', // TODO 'toggle_media' => 'Play/pause media', // TODO 'user_filter' => 'גישה למססנים', 'user_filter_help' => 'אם יש רק מזנן אחד הוא יהיה בשימוש. אחרת המסננים ישמשו על בסיס המספר שלהם.', diff --git a/app/i18n/hu/conf.php b/app/i18n/hu/conf.php index 261895d17..d6a362324 100644 --- a/app/i18n/hu/conf.php +++ b/app/i18n/hu/conf.php @@ -359,6 +359,7 @@ return array( 'skip_next_article' => 'Ugrás a következőre megnyitás nélkül', 'skip_previous_article' => 'Ugrás az előzőre megnyitás nélkül', 'title' => 'Gyorsgombok', + 'toggle_aside' => 'Toggle sidebar', // TODO 'toggle_media' => 'Média indítás/megállítás', 'user_filter' => 'Felhasználói lekérdezések elfogadása', 'user_filter_help' => 'Ha csak egy felhasználói lekérdezés van, akkor az kerül felhasználásra. Ellenkező esetben a lekérdezések a számuk alapján érhetőek el.', diff --git a/app/i18n/id/conf.php b/app/i18n/id/conf.php index 26f3fc5fa..9163067f9 100644 --- a/app/i18n/id/conf.php +++ b/app/i18n/id/conf.php @@ -359,6 +359,7 @@ return array( 'skip_next_article' => 'Fokus berikutnya tanpa membuka', 'skip_previous_article' => 'Fokus sebelumnya tanpa membuka', 'title' => 'Pintasan', + 'toggle_aside' => 'Toggle sidebar', // TODO 'toggle_media' => 'Putar/jeda media', 'user_filter' => 'Akses pencarian pengguna', 'user_filter_help' => 'Jika hanya ada satu pencarian pengguna, maka itu akan digunakan. Jika tidak, pencarian dapat diakses dengan nomornya', diff --git a/app/i18n/it/conf.php b/app/i18n/it/conf.php index efd4bf2b4..60f9c451c 100644 --- a/app/i18n/it/conf.php +++ b/app/i18n/it/conf.php @@ -359,6 +359,7 @@ return array( 'skip_next_article' => 'Evidenzia il prossimo senza aprire', 'skip_previous_article' => 'Evidenzia il precedente senza aprire', 'title' => 'Comandi da tastiera', + 'toggle_aside' => 'Toggle sidebar', // TODO 'toggle_media' => 'Riproduci/Metti in pausa i media', 'user_filter' => 'Accedi alle ricerche personali', 'user_filter_help' => 'Se è presente una sola ricerca personale verrà usata quella, altrimenti usare anche il numero associato.', diff --git a/app/i18n/ja/conf.php b/app/i18n/ja/conf.php index bf1b58413..9340bfaef 100644 --- a/app/i18n/ja/conf.php +++ b/app/i18n/ja/conf.php @@ -359,6 +359,7 @@ return array( 'skip_next_article' => '次の記事を開かずにフォーカスする', 'skip_previous_article' => '前の記事を開かずにフォーカスする', 'title' => 'ショートカット', + 'toggle_aside' => 'Toggle sidebar', // TODO 'toggle_media' => 'メディアの 再生/停止', 'user_filter' => 'ユーザークエリにアクセスする', 'user_filter_help' => 'ユーザークエリが一つしかなければ、それを使う。そうではなければ、番号でクエリを選択する。', diff --git a/app/i18n/ko/conf.php b/app/i18n/ko/conf.php index 82da8dd53..9ad972740 100644 --- a/app/i18n/ko/conf.php +++ b/app/i18n/ko/conf.php @@ -359,6 +359,7 @@ return array( 'skip_next_article' => '다음 글로 커서 이동', 'skip_previous_article' => '이전 글로 커서 이동', 'title' => '단축키', + 'toggle_aside' => 'Toggle sidebar', // TODO 'toggle_media' => '미디어 재생/일시정지', 'user_filter' => '사용자 필터 사용하기', 'user_filter_help' => '사용자 필터가 하나만 설정되어 있다면 해당 필터를 사용하고, 그렇지 않다면 필터를 번호로 선택할 수 있습니다.', diff --git a/app/i18n/lv/conf.php b/app/i18n/lv/conf.php index 929826f3f..a9eced70b 100644 --- a/app/i18n/lv/conf.php +++ b/app/i18n/lv/conf.php @@ -359,6 +359,7 @@ return array( 'skip_next_article' => 'Fokusēt nākamo bez atvēršanas', 'skip_previous_article' => 'Fokusēt iepriekšējo bez atvēršanas', 'title' => 'Saīsnes', + 'toggle_aside' => 'Toggle sidebar', // TODO 'toggle_media' => 'Mēdiju atskaņošana/pauze', 'user_filter' => 'Piekļuve lietotāju pieprasījumiem', 'user_filter_help' => 'Ja ir tikai viens lietotāja pieprasījums, tiek izmantots tas. Pretējā gadījumā pieprasījumi ir pieejami pēc to numura.', diff --git a/app/i18n/nl/conf.php b/app/i18n/nl/conf.php index 47690b475..245100b6e 100644 --- a/app/i18n/nl/conf.php +++ b/app/i18n/nl/conf.php @@ -359,6 +359,7 @@ return array( 'skip_next_article' => 'Volgend artikel focusen zonder openen', 'skip_previous_article' => 'Vorig artikel focusen zonder openen', 'title' => 'Verwijzingen', + 'toggle_aside' => 'Toggle sidebar', // TODO 'toggle_media' => 'Media afspelen/pauzeren', 'user_filter' => 'Toegang gebruikers filters', 'user_filter_help' => 'Als er slechts één gebruikersfilter is, dan wordt die gebruikt. Anders zijn ze toegankelijk met hun nummer.', diff --git a/app/i18n/oc/conf.php b/app/i18n/oc/conf.php index 6d02a97c9..77317d612 100644 --- a/app/i18n/oc/conf.php +++ b/app/i18n/oc/conf.php @@ -359,6 +359,7 @@ return array( 'skip_next_article' => 'Centrar sul seguent sens lo dobrir', 'skip_previous_article' => 'Centrar sul precedent sens lo dobrir', 'title' => 'Acorchis', + 'toggle_aside' => 'Toggle sidebar', // TODO 'toggle_media' => 'Legir/arrestar mèdia', 'user_filter' => 'Accedir als filtres utilizaire', 'user_filter_help' => 'S’i a pas qu’un filtre utilizaire, aquel serà utilizat. Autrament los filtres son accessibles per lor numèro.', diff --git a/app/i18n/pl/conf.php b/app/i18n/pl/conf.php index feb726fc7..d99faeb84 100644 --- a/app/i18n/pl/conf.php +++ b/app/i18n/pl/conf.php @@ -359,6 +359,7 @@ return array( 'skip_next_article' => 'Przejdź do następnej wiadomości bez otwierania', 'skip_previous_article' => 'Przejdź do poprzedniej wiadomości bez otwierania', 'title' => 'Skróty klawiszowe', + 'toggle_aside' => 'Pokaż/ukryj pasek boczny', 'toggle_media' => 'Odtwarzanie/pauza mediów', 'user_filter' => 'Przejdź do zapisanych zapytań', 'user_filter_help' => 'Gdy zapisane jest tylko jedno zapytanie jest ono od razu wykorzystywane. W przeciwnym przypadku zapytania są dostępne przez wybranie ich numeru.', diff --git a/app/i18n/pt-BR/conf.php b/app/i18n/pt-BR/conf.php index 39d6ec077..0dbf44201 100644 --- a/app/i18n/pt-BR/conf.php +++ b/app/i18n/pt-BR/conf.php @@ -359,6 +359,7 @@ return array( 'skip_next_article' => 'Focar o próximo sem abri-lo', 'skip_previous_article' => 'Focar o anterior sem abri-lo', 'title' => 'Atalhos', + 'toggle_aside' => 'Toggle sidebar', // TODO 'toggle_media' => 'Reproduzir/pausar mídia', 'user_filter' => 'Acesse filtros de usuário', 'user_filter_help' => 'Se há apenas um filtro, ele é utilizado. Caso contrário, os filtros serão acessíveis pelos seus números.', diff --git a/app/i18n/pt-PT/conf.php b/app/i18n/pt-PT/conf.php index c7a310156..ce3c66760 100644 --- a/app/i18n/pt-PT/conf.php +++ b/app/i18n/pt-PT/conf.php @@ -359,6 +359,7 @@ return array( 'skip_next_article' => 'Focar o próximo sem abri-lo', 'skip_previous_article' => 'Focar o anterior sem abri-lo', 'title' => 'Atalhos', + 'toggle_aside' => 'Toggle sidebar', // TODO 'toggle_media' => 'Reproduzir/pausar mídia', 'user_filter' => 'Acesse filtros de utilizador', 'user_filter_help' => 'Se há apenas um filtro, ele é utilizado. Caso contrário, os filtros serão acessíveis pelos seus números.', diff --git a/app/i18n/ru/conf.php b/app/i18n/ru/conf.php index e90f5d7cd..351f29a1a 100644 --- a/app/i18n/ru/conf.php +++ b/app/i18n/ru/conf.php @@ -359,6 +359,7 @@ return array( 'skip_next_article' => 'Перейти к следующей, не раскрывая', 'skip_previous_article' => 'Перейти к предыдущей, не раскрывая', 'title' => 'Горячие клавиши', + 'toggle_aside' => 'Toggle sidebar', // TODO 'toggle_media' => 'Играть/приостановить медиаконтент', 'user_filter' => 'К пользовательским запросам', 'user_filter_help' => 'Если запрос единственный, он будет вызван. Иначе запросы доступны по их номеру.', diff --git a/app/i18n/sk/conf.php b/app/i18n/sk/conf.php index d848d8f0d..93fc8681d 100644 --- a/app/i18n/sk/conf.php +++ b/app/i18n/sk/conf.php @@ -359,6 +359,7 @@ return array( 'skip_next_article' => 'Prejde na ďalší bez otvorenia', 'skip_previous_article' => 'Prejde na predošlý bez otvorenia', 'title' => 'Skratky', + 'toggle_aside' => 'Toggle sidebar', // TODO 'toggle_media' => 'Spustiť/zastaviť médium', 'user_filter' => 'Použiť používateľské filtre', 'user_filter_help' => 'Ak je nastavený iba jeden spôsob zdieľania, použije sa. Inak si spôsoby zdieľania vyberá používateľ podľa čísla.', diff --git a/app/i18n/tr/conf.php b/app/i18n/tr/conf.php index 7c1fae419..9d62dc975 100644 --- a/app/i18n/tr/conf.php +++ b/app/i18n/tr/conf.php @@ -359,6 +359,7 @@ return array( 'skip_next_article' => 'Açmadan sonrakine odaklan', 'skip_previous_article' => 'Açmadan öncesine odaklan', 'title' => 'Kısayollar', + 'toggle_aside' => 'Toggle sidebar', // TODO 'toggle_media' => 'Medyayı oynat/duraklat', 'user_filter' => 'Kullanıcı sorgularına eriş', 'user_filter_help' => 'Eğer yalnızca bir kullanıcı sorgusu varsa, o kullanılır. Aksi takdirde, sorgular numaralarıyla erişilebilir.', diff --git a/app/i18n/uk/conf.php b/app/i18n/uk/conf.php index 9a46c2e15..afcf26c98 100644 --- a/app/i18n/uk/conf.php +++ b/app/i18n/uk/conf.php @@ -359,6 +359,7 @@ return array( 'skip_next_article' => 'Сфокусувати наступну не відкриваючи', 'skip_previous_article' => 'Сфокусувати попередню не відкриваючи', 'title' => 'Клавіші', + 'toggle_aside' => 'Toggle sidebar', // TODO 'toggle_media' => 'Почати/зупинити відтворення', 'user_filter' => 'Користувацькі запити', 'user_filter_help' => 'Якщо користувацький запит лише один, використовується одразу він. Інакше обирайте запити їхніми номерами.', diff --git a/app/i18n/zh-CN/conf.php b/app/i18n/zh-CN/conf.php index 6b188e5ff..452688b00 100644 --- a/app/i18n/zh-CN/conf.php +++ b/app/i18n/zh-CN/conf.php @@ -359,6 +359,7 @@ return array( 'skip_next_article' => '跳转到下一篇文章而不打开', 'skip_previous_article' => '跳转到上一篇文章而不打开', 'title' => '快捷键', + 'toggle_aside' => 'Toggle sidebar', // TODO 'toggle_media' => '播放/暂停媒体', 'user_filter' => '显示自定义查询', 'user_filter_help' => '如果有多个自定义过滤器,则会按照它们的序号依次访问。', diff --git a/app/i18n/zh-TW/conf.php b/app/i18n/zh-TW/conf.php index 6057f46b0..0e5249683 100644 --- a/app/i18n/zh-TW/conf.php +++ b/app/i18n/zh-TW/conf.php @@ -359,6 +359,7 @@ return array( 'skip_next_article' => '跳轉到下一篇文章而不打開', 'skip_previous_article' => '跳轉到上一篇文章而不打開', 'title' => '快捷鍵', + 'toggle_aside' => 'Toggle sidebar', // TODO 'toggle_media' => '播放/暫停媒體', 'user_filter' => '顯示自定義查詢', 'user_filter_help' => '如果有多個自定義過濾器,則會按照它們的序號依次訪問。', diff --git a/app/layout/aside_configure.phtml b/app/layout/aside_configure.phtml index 6ebf232e2..e4c8741dc 100644 --- a/app/layout/aside_configure.phtml +++ b/app/layout/aside_configure.phtml @@ -109,6 +109,11 @@ </ul> </nav> <a class="close-aside" href="#close">❌</a> + <nav class="nav_menu nav_mobile"> - <a class="btn toggle_aside" href="#aside_feed"><?= _i('category') ?></a> + <div id="nav_menu_toggle_aside" class="group"> + <button class="btn" title="<?= _t('conf.shortcut.toggle_aside') ?>"> + <?= _i('category') ?> + </button> + </div> </nav> diff --git a/app/layout/aside_subscription.phtml b/app/layout/aside_subscription.phtml index f7ed09213..6493f59c8 100644 --- a/app/layout/aside_subscription.phtml +++ b/app/layout/aside_subscription.phtml @@ -61,6 +61,10 @@ <?php if (Minz_Request::actionName() !== 'repartition') { ?> <a class="close-aside" href="#close">❌</a> <nav class="nav_menu nav_mobile"> - <a class="btn toggle_aside" href="#aside_feed"><?= _i('category') ?></a> + <div id="nav_menu_toggle_aside"> + <button class="btn"> + <?= _i('category') ?> + </button> + </div> </nav> <?php } ?> diff --git a/app/layout/nav_menu.phtml b/app/layout/nav_menu.phtml index 4529d0df3..cc158a674 100644 --- a/app/layout/nav_menu.phtml +++ b/app/layout/nav_menu.phtml @@ -5,7 +5,9 @@ <nav class="nav_menu"> <?php if ($actual_view === 'normal' || $actual_view === 'reader') { ?> <div id="nav_menu_toggle_aside" class="group"> - <a class="btn toggle_aside" href="#aside_feed"><?= _i('category') ?></a> + <button class="btn<?= $actual_view === 'normal' ? ' active' : '' ?>" title="<?= _t('conf.shortcut.toggle_aside') ?>"> + <?= _i('category') ?> + </button> </div> <?php } ?> diff --git a/app/views/configure/shortcut.phtml b/app/views/configure/shortcut.phtml index 3f7f84759..37847e39a 100644 --- a/app/views/configure/shortcut.phtml +++ b/app/views/configure/shortcut.phtml @@ -170,6 +170,13 @@ <legend><?= _t('conf.shortcut.other_action') ?></legend> <div class="form-group"> + <label class="group-name" for="toggle_aside"><?= _t('conf.shortcut.toggle_aside') ?></label> + <div class="group-controls"> + <input type="text" id="toggle_aside" name="shortcuts[toggle_aside]" list="keys" value="<?= $s['toggle_aside'] ?>" /> + </div> + </div> + + <div class="form-group"> <label class="group-name" for="actualize"><?= _t('gen.action.actualize') ?></label> <div class="group-controls"> <input type="text" id="actualize" name="shortcuts[actualize]" list="keys" value="<?= $s['actualize'] ?>" /> diff --git a/app/views/helpers/javascript_vars.phtml b/app/views/helpers/javascript_vars.phtml index 96275d51b..73e047e11 100644 --- a/app/views/helpers/javascript_vars.phtml +++ b/app/views/helpers/javascript_vars.phtml @@ -65,6 +65,7 @@ echo json_encode([ 'reading_view' => $s['reading_view'] ?? '', 'rss_view' => $s['rss_view'] ?? '', 'toggle_media' => $s['toggle_media'] ?? '', + 'toggle_aside' => $s['toggle_aside'] ?? '', ], 'urls' => [ 'index' => _url('index', 'index'), diff --git a/app/views/index/reader.phtml b/app/views/index/reader.phtml index d76af2dc7..648b046ed 100644 --- a/app/views/index/reader.phtml +++ b/app/views/index/reader.phtml @@ -59,3 +59,13 @@ $useKeepUnreadImportant = !FreshRSS_Context::isImportant() && !FreshRSS_Context: </div> </main> <?php endif; ?> + +<?php $class = $this->displaySlider ? ' active' : ''; ?> +<aside id="slider" class="<?= $class ?>"> + <a class="toggle_aside" href="#close"><?= _i('close') ?></a> + <div id="slider-content"> + </div> +</aside> +<a href="#" id="close-slider" class="<?= $class ?>"> + <?= _i('close') ?> +</a> diff --git a/app/views/stats/repartition.phtml b/app/views/stats/repartition.phtml index d7515a789..34edd1ab1 100644 --- a/app/views/stats/repartition.phtml +++ b/app/views/stats/repartition.phtml @@ -6,7 +6,12 @@ ?> <nav class="nav_menu"> - <a class="btn toggle_aside" href="#aside_feed"><?= _i('category') ?></a> + <div id="nav_menu_toggle_aside" class="nav_mobile"> + <button class="btn"> + <?= _i('category') ?> + </button> + </div> + <select id="feed_select" class="select-change"> <option data-url="<?= _url('stats', 'repartition') ?>"><?= _t('admin.stats.all_feeds') ?></option> diff --git a/config-user.default.php b/config-user.default.php index 42c736700..c838a7117 100644 --- a/config-user.default.php +++ b/config-user.default.php @@ -96,6 +96,7 @@ return array ( 'global_view' => '2', 'reading_view' => '3', 'toggle_media' => 'v', + 'toggle_aside' => 't', ), # Disabling favicons and using emojis instead of icons improves performance for users with many feeds diff --git a/p/scripts/main.js b/p/scripts/main.js index 73848060b..50dc31bb9 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -922,6 +922,64 @@ function init_posts() { } } +function toggle_aside_click(manual = true) { + const aside = document.querySelector('.aside'); + const toggle_aside = document.querySelector('#nav_menu_toggle_aside button'); + if (!toggle_aside) { + return; + } + + const active = toggle_aside.classList.contains('active'); + if (active) { + toggle_aside.classList.remove('active'); + aside.classList.remove('visible'); + aside.style.display = 'none'; + } else { + toggle_aside.classList.add('active'); + aside.classList.add('visible'); + aside.style.display = ''; + } + + if (manual && ['normal', 'reader'].includes(context.current_view)) { + sessionStorage.setItem(`FreshRSS_aside-toggled_${context.current_view}`, !active ? 1 : 0); + } +} + +function init_nav_menu() { + const aside = document.querySelector('.aside'); + const toggle_aside = document.querySelector('#nav_menu_toggle_aside button'); + if (!toggle_aside) { + return; + } + + function sync(e) { + const active = toggle_aside.classList.contains('active'); + if ((e.matches && active) || (!e.matches && !active)) { + toggle_aside_click(false); + } + } + + const media = window.matchMedia('(max-width: 840px)'); + media.onchange = sync; + + const state = sessionStorage.getItem(`FreshRSS_aside-toggled_${context.current_view}`); + if (state !== null) { + const active = toggle_aside.classList.contains('active'); + if (state != active) toggle_aside_click(false); + } + if (getComputedStyle(aside).display !== 'none') { + if (context.current_view === 'normal') aside.classList.add('visible'); + sync(media); + } + const close_aside = [ + document.querySelector('.aside a.toggle_aside'), + document.querySelector('a.close-aside'), // background of aside (#close) + ]; + + toggle_aside.addEventListener('click', toggle_aside_click); + close_aside.forEach(close => close.addEventListener('click', toggle_aside_click)); +} + function rememberOpenCategory(category_id, isOpen) { if (context.display_categories === 'remember') { const open_categories = JSON.parse(localStorage.getItem('FreshRSS_open_categories') || '{}'); @@ -1204,6 +1262,7 @@ function init_shortcuts() { if (k === s.reading_view) { delayedClick(document.querySelector('#nav_menu_views .view-reader')); ev.preventDefault(); return; } if (k === s.global_view) { delayedClick(document.querySelector('#nav_menu_views .view-global')); ev.preventDefault(); return; } if (k === s.toggle_media) { toggle_media(); ev.preventDefault(); } + if (k === s.toggle_aside) { toggle_aside_click(); ev.preventDefault(); } }); } @@ -2226,6 +2285,7 @@ function init_main_afterDOM() { init_notifications(); init_csp_alert(); init_confirm_action(); + init_nav_menu(); const stream = document.getElementById('stream'); if (stream) { init_load_more(stream); diff --git a/p/themes/Swage/swage.css b/p/themes/Swage/swage.css index 592f49167..13e6543cb 100644 --- a/p/themes/Swage/swage.css +++ b/p/themes/Swage/swage.css @@ -981,6 +981,10 @@ main.post .drop-section li.item.feed a:hover .icon { filter: brightness(1); } } + + .btn { + box-sizing: content-box; + } } .flux { diff --git a/p/themes/Swage/swage.rtl.css b/p/themes/Swage/swage.rtl.css index 345622b82..0055a4979 100644 --- a/p/themes/Swage/swage.rtl.css +++ b/p/themes/Swage/swage.rtl.css @@ -981,6 +981,10 @@ main.post .drop-section li.item.feed a:hover .icon { filter: brightness(1); } } + + .btn { + box-sizing: content-box; + } } .flux { diff --git a/p/themes/base-theme/frss.css b/p/themes/base-theme/frss.css index 4d95990b6..6f11c4d22 100644 --- a/p/themes/base-theme/frss.css +++ b/p/themes/base-theme/frss.css @@ -1913,6 +1913,10 @@ a.website:hover .favicon { z-index: 50; } +.aside:not(.visible) ~ #nav_entries { + display: none; +} + #nav_entries button { background-color: transparent; display: table-cell; @@ -2356,7 +2360,6 @@ html.slider-active { .nav-login, .aside .toggle_aside, #slider .toggle_aside, -.nav_menu .toggle_aside, .configure .dropdown-header-close { display: none; } @@ -2372,30 +2375,15 @@ html.slider-active { /*=== READER */ /*===========*/ -.reader .nav_menu .toggle_aside { - display: inline-block; -} - -.reader .aside .toggle_aside { - padding: 1rem 0px; - display: block; - width: 100%; -} - .reader .aside { display: none; - width: 0; } -.reader .aside:target { +.reader .aside.visible { display: table-cell; width: 300px; } -.reader .aside_feed .configure-feeds { - margin-top: 10px; -} - .reader .flux { padding: 1rem 0 2rem; } @@ -2478,7 +2466,7 @@ html.slider-active { display: none; } - .aside:target { + .aside.visible { box-shadow: 3px 3px 5px var(--frss-box-shadow-color-transparent); } @@ -2668,7 +2656,7 @@ html.slider-active { display: inline-block; } - .aside:target + .close-aside, + .aside.visible + .close-aside, .configure .dropdown-target:target ~ .dropdown-close { background-color: var(--frss-modal-background-color-transparent); display: block; @@ -2682,10 +2670,14 @@ html.slider-active { z-index: 99; } - .nav_mobile { + .nav_menu.nav_mobile { display: block; } + .nav_mobile { + display: initial; + } + .aside { position: fixed; top: 0; bottom: 0; @@ -2695,8 +2687,8 @@ html.slider-active { z-index: 100; } - .aside:target, - .reader .aside:target { + .aside.visible, + .reader .aside.visible { width: 90%; height: 100vh; } @@ -2743,6 +2735,7 @@ html.slider-active { } #nav_entries { + display: table !important; width: 100%; } diff --git a/p/themes/base-theme/frss.rtl.css b/p/themes/base-theme/frss.rtl.css index 9e4d7cd32..684ad2f81 100644 --- a/p/themes/base-theme/frss.rtl.css +++ b/p/themes/base-theme/frss.rtl.css @@ -1913,6 +1913,10 @@ a.website:hover .favicon { z-index: 50; } +.aside:not(.visible) ~ #nav_entries { + display: none; +} + #nav_entries button { background-color: transparent; display: table-cell; @@ -2356,7 +2360,6 @@ html.slider-active { .nav-login, .aside .toggle_aside, #slider .toggle_aside, -.nav_menu .toggle_aside, .configure .dropdown-header-close { display: none; } @@ -2372,30 +2375,15 @@ html.slider-active { /*=== READER */ /*===========*/ -.reader .nav_menu .toggle_aside { - display: inline-block; -} - -.reader .aside .toggle_aside { - padding: 1rem 0px; - display: block; - width: 100%; -} - .reader .aside { display: none; - width: 0; } -.reader .aside:target { +.reader .aside.visible { display: table-cell; width: 300px; } -.reader .aside_feed .configure-feeds { - margin-top: 10px; -} - .reader .flux { padding: 1rem 0 2rem; } @@ -2478,7 +2466,7 @@ html.slider-active { display: none; } - .aside:target { + .aside.visible { box-shadow: -3px 3px 5px var(--frss-box-shadow-color-transparent); } @@ -2668,7 +2656,7 @@ html.slider-active { display: inline-block; } - .aside:target + .close-aside, + .aside.visible + .close-aside, .configure .dropdown-target:target ~ .dropdown-close { background-color: var(--frss-modal-background-color-transparent); display: block; @@ -2682,10 +2670,14 @@ html.slider-active { z-index: 99; } - .nav_mobile { + .nav_menu.nav_mobile { display: block; } + .nav_mobile { + display: initial; + } + .aside { position: fixed; top: 0; bottom: 0; @@ -2695,8 +2687,8 @@ html.slider-active { z-index: 100; } - .aside:target, - .reader .aside:target { + .aside.visible, + .reader .aside.visible { width: 90%; height: 100vh; } @@ -2743,6 +2735,7 @@ html.slider-active { } #nav_entries { + display: table !important; width: 100%; } |
