diff options
| author | 2025-11-04 12:49:21 +0100 | |
|---|---|---|
| committer | 2025-11-04 12:49:21 +0100 | |
| commit | b6c63d223931382aae84dc6d394cdd1bb58121bc (patch) | |
| tree | f512ea0f11873f89740cb7692442d11b26d59ee3 | |
| parent | 7d4854a0a4f5665db599f18c34035786465639f3 (diff) | |
Better transitions between groups of articles (#8174)
fix https://github.com/FreshRSS/FreshRSS/issues/7520
fix https://github.com/FreshRSS/FreshRSS/issues/8168
fix https://github.com/FreshRSS/FreshRSS/discussions/8172
71 files changed, 549 insertions, 255 deletions
diff --git a/README.fr.md b/README.fr.md index 1feab33f4..3d82eec8d 100644 --- a/README.fr.md +++ b/README.fr.md @@ -227,31 +227,31 @@ Voir le [dépôt dédié à ces extensions](https://github.com/FreshRSS/Extensio | Langage | Progression | | | - | - | - | | Čeština (cs) | ■■■■■■■■・・ 85% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fcs+%2F%28TODO%7CDIRTY%29%24%2F) | -| Deutsch (de) | ■■■■■■■■■・ 96% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fde+%2F%28TODO%7CDIRTY%29%24%2F) | +| Deutsch (de) | ■■■■■■■■■・ 95% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fde+%2F%28TODO%7CDIRTY%29%24%2F) | | Ελληνικά (el) | ■■■■・・・・・・ 40% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fel+%2F%28TODO%7CDIRTY%29%24%2F) | | English (en) | ■■■■■■■■■■ 100% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fen+%2F%28TODO%7CDIRTY%29%24%2F) | | English (United States) (en-US) | ■■■■■■■■■■ 100% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fen-US+%2F%28TODO%7CDIRTY%29%24%2F) | | Español (es) | ■■■■■■■■・・ 88% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fes+%2F%28TODO%7CDIRTY%29%24%2F) | -| فارسی (fa) | ■■■■■■■■■・ 94% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffa+%2F%28TODO%7CDIRTY%29%24%2F) | +| فارسی (fa) | ■■■■■■■■■・ 93% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffa+%2F%28TODO%7CDIRTY%29%24%2F) | | 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) | ■■■■・・・・・・ 44% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhe+%2F%28TODO%7CDIRTY%29%24%2F) | -| Magyar (hu) | ■■■■■■■■■・ 96% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhu+%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) | ■■■■■■■■■・ 95% | [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) | ■■■■■■■■■・ 97% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fit+%2F%28TODO%7CDIRTY%29%24%2F) | -| 日本語 (ja) | ■■■■■■■■■・ 92% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fja+%2F%28TODO%7CDIRTY%29%24%2F) | +| Italiano (it) | ■■■■■■■■■・ 96% | [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) | -| Nederlands (nl) | ■■■■■■■■■・ 96% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fnl+%2F%28TODO%7CDIRTY%29%24%2F) | +| Nederlands (nl) | ■■■■■■■■■・ 95% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fnl+%2F%28TODO%7CDIRTY%29%24%2F) | | Occitan (oc) | ■■■■■■■・・・ 78% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Foc+%2F%28TODO%7CDIRTY%29%24%2F) | | 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) | ■■■■■■■■・・ 85% | [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) | ■■■■■■■■・・ 85% | [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) | +| 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) | ■■■■■■■■■・ 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) | ■■■■■■■■■・ 93% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ftr+%2F%28TODO%7CDIRTY%29%24%2F) | -| Українська (uk) | ■■■■■■■■■・ 96% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fuk+%2F%28TODO%7CDIRTY%29%24%2F) | -| 简体中文 (zh-CN) | ■■■■■■■■・・ 87% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-CN+%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) | +| 简体中文 (zh-CN) | ■■■■■■■■・・ 86% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-CN+%2F%28TODO%7CDIRTY%29%24%2F) | | 正體中文 (zh-TW) | ■■■■■■■■・・ 85% | [contribuer](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-TW+%2F%28TODO%7CDIRTY%29%24%2F) | </translations> @@ -123,31 +123,31 @@ See the [repository dedicated to those extensions](https://github.com/FreshRSS/E | Language | Progress | | | - | - | - | | Čeština (cs) | ■■■■■■■■・・ 85% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fcs+%2F%28TODO%7CDIRTY%29%24%2F) | -| Deutsch (de) | ■■■■■■■■■・ 96% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fde+%2F%28TODO%7CDIRTY%29%24%2F) | +| Deutsch (de) | ■■■■■■■■■・ 95% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fde+%2F%28TODO%7CDIRTY%29%24%2F) | | Ελληνικά (el) | ■■■■・・・・・・ 40% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fel+%2F%28TODO%7CDIRTY%29%24%2F) | | English (en) | ■■■■■■■■■■ 100% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fen+%2F%28TODO%7CDIRTY%29%24%2F) | | English (United States) (en-US) | ■■■■■■■■■■ 100% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fen-US+%2F%28TODO%7CDIRTY%29%24%2F) | | Español (es) | ■■■■■■■■・・ 88% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fes+%2F%28TODO%7CDIRTY%29%24%2F) | -| فارسی (fa) | ■■■■■■■■■・ 94% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffa+%2F%28TODO%7CDIRTY%29%24%2F) | +| فارسی (fa) | ■■■■■■■■■・ 93% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ffa+%2F%28TODO%7CDIRTY%29%24%2F) | | 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) | ■■■■・・・・・・ 44% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhe+%2F%28TODO%7CDIRTY%29%24%2F) | -| Magyar (hu) | ■■■■■■■■■・ 96% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fhu+%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) | ■■■■■■■■■・ 95% | [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) | ■■■■■■■■■・ 97% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fit+%2F%28TODO%7CDIRTY%29%24%2F) | -| 日本語 (ja) | ■■■■■■■■■・ 92% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fja+%2F%28TODO%7CDIRTY%29%24%2F) | +| Italiano (it) | ■■■■■■■■■・ 96% | [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) | -| Nederlands (nl) | ■■■■■■■■■・ 96% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fnl+%2F%28TODO%7CDIRTY%29%24%2F) | +| Nederlands (nl) | ■■■■■■■■■・ 95% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fnl+%2F%28TODO%7CDIRTY%29%24%2F) | | Occitan (oc) | ■■■■■■■・・・ 78% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Foc+%2F%28TODO%7CDIRTY%29%24%2F) | | 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) | ■■■■■■■■・・ 85% | [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) | ■■■■■■■■・・ 85% | [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) | +| 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) | ■■■■■■■■■・ 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) | ■■■■■■■■■・ 93% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Ftr+%2F%28TODO%7CDIRTY%29%24%2F) | -| Українська (uk) | ■■■■■■■■■・ 96% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fuk+%2F%28TODO%7CDIRTY%29%24%2F) | -| 简体中文 (zh-CN) | ■■■■■■■■・・ 87% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-CN+%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) | +| 简体中文 (zh-CN) | ■■■■■■■■・・ 86% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-CN+%2F%28TODO%7CDIRTY%29%24%2F) | | 正體中文 (zh-TW) | ■■■■■■■■・・ 85% | [contribute](https://github.com/search?q=repo%3AFreshRSS%2FFreshRSS+path%3Aapp%2Fi18n%2Fzh-TW+%2F%28TODO%7CDIRTY%29%24%2F) | </translations> diff --git a/app/Controllers/indexController.php b/app/Controllers/indexController.php index 8043e8f79..9005dff93 100644 --- a/app/Controllers/indexController.php +++ b/app/Controllers/indexController.php @@ -31,6 +31,44 @@ class FreshRSS_index_Controller extends FreshRSS_ActionController { } /** + * @return '.future'|'.today'|'.yesterday'|'' + */ + private static function dayRelative(int $timestamp, bool $mayBeFuture): string { + static $today = null; + if (!is_int($today)) { + $today = strtotime('today') ?: 0; + } + if ($today <= 0) { + return ''; + } elseif ($mayBeFuture && ($timestamp >= $today + 86400)) { + return '.future'; + } elseif ($timestamp >= $today) { + return '.today'; + } elseif ($timestamp >= $today - 86400) { + return '.yesterday'; + } + return ''; + } + + /** + * Content for displaying a transition between entries when sorting by specific criteria. + * @param 'id'|'c.name'|'date'|'f.name'|'link'|'title'|'rand'|'lastUserModified'|'length' $sort + */ + public static function transition(FreshRSS_Entry $entry, string $sort): string { + return match ($sort) { + 'id' => _t('index.feed.received' . self::dayRelative($entry->dateAdded(raw: true), mayBeFuture: false)) . + ' — ' . timestamptodate($entry->dateAdded(raw: true), hour: false), + 'date' => _t('index.feed.published' . self::dayRelative($entry->date(raw: true), mayBeFuture: true)) . + ' — ' . timestamptodate($entry->date(raw: true), hour: false), + 'lastUserModified' => _t('index.feed.userModified' . self::dayRelative($entry->lastUserModified(), mayBeFuture: false)) . + ' — ' . timestamptodate($entry->lastUserModified(), hour: false), + 'c.name' => $entry->feed()?->category()?->name() ?? '', + 'f.name' => $entry->feed()?->name() ?? '', + default => '', + }; + } + + /** * This action displays the normal view of FreshRSS. */ public function normalAction(): void { @@ -297,10 +335,11 @@ class FreshRSS_index_Controller extends FreshRSS_ActionController { } $continuation_values[] = $pagingEntry === null ? 0 : match (FreshRSS_Context::$sort) { - 'c.name' => $pagingEntry->feed()?->category()?->name() ?? '', - 'date' => $pagingEntry->date(true), + 'c.name' => $pagingEntry->feed()?->categoryId() === FreshRSS_CategoryDAO::DEFAULTCATEGORYID ? + FreshRSS_CategoryDAO::DEFAULT_CATEGORY_NAME : $pagingEntry->feed()?->category()?->name() ?? '', + 'date' => $pagingEntry->date(raw: true), 'f.name' => $pagingEntry->feed()?->name() ?? '', - 'link' => $pagingEntry->link(true), + 'link' => $pagingEntry->link(raw: true), 'title' => $pagingEntry->title(), 'lastUserModified' => $pagingEntry->lastUserModified(), 'length' => $pagingEntry->sqlContentLength() ?? 0, diff --git a/app/Models/CategoryDAO.php b/app/Models/CategoryDAO.php index e2fc825ac..e03f69016 100644 --- a/app/Models/CategoryDAO.php +++ b/app/Models/CategoryDAO.php @@ -4,6 +4,7 @@ declare(strict_types=1); class FreshRSS_CategoryDAO extends Minz_ModelPdo { public const DEFAULTCATEGORYID = 1; + public const DEFAULT_CATEGORY_NAME = 'Uncategorized'; public function sqlResetSequence(): bool { return true; // Nothing to do for MySQL @@ -14,7 +15,7 @@ class FreshRSS_CategoryDAO extends Minz_ModelPdo { $stm = $this->pdo->prepare('UPDATE `_category` SET name = :name WHERE id = :id'); if ($stm !== false) { $stm->bindValue(':id', self::DEFAULTCATEGORYID, PDO::PARAM_INT); - $stm->bindValue(':name', 'Uncategorized'); + $stm->bindValue(':name', self::DEFAULT_CATEGORY_NAME); } return $stm !== false && $stm->execute(); } diff --git a/app/Models/Context.php b/app/Models/Context.php index 8cd78c779..be4a06cc8 100644 --- a/app/Models/Context.php +++ b/app/Models/Context.php @@ -232,10 +232,10 @@ final class FreshRSS_Context { self::$total_important_unread = FreshRSS_Category::countUnread(self::categories(), FreshRSS_Feed::PRIORITY_IMPORTANT); } - self::_get(Minz_Request::paramString('get') ?: 'a'); + self::_get(Minz_Request::paramString('get', plaintext: true) ?: 'a'); self::$state = Minz_Request::paramInt('state') ?: FreshRSS_Context::userConf()->default_state; - $state_forced_by_user = Minz_Request::paramString('state', true) !== ''; + $state_forced_by_user = Minz_Request::paramString('state', plaintext: true) !== ''; if (!$state_forced_by_user) { if (FreshRSS_Context::userConf()->show_fav_unread && (self::isCurrentGet('s') || self::isCurrentGet('T') || self::isTag())) { self::$state = FreshRSS_Entry::STATE_NOT_READ | FreshRSS_Entry::STATE_READ; @@ -249,9 +249,9 @@ final class FreshRSS_Context { } self::$search = new FreshRSS_BooleanSearch(Minz_Request::paramString('search')); - $order = Minz_Request::paramString('order', true) ?: FreshRSS_Context::userConf()->sort_order; + $order = Minz_Request::paramString('order', plaintext: true) ?: FreshRSS_Context::userConf()->sort_order; self::$order = in_array($order, ['ASC', 'DESC'], true) ? $order : 'DESC'; - $sort = Minz_Request::paramString('sort', true) ?: FreshRSS_Context::userConf()->sort; + $sort = Minz_Request::paramString('sort', plaintext: true) ?: FreshRSS_Context::userConf()->sort; self::$sort = in_array($sort, ['id', 'c.name', 'date', 'f.name', 'link', 'title', 'rand', 'lastUserModified', 'length'], true) ? $sort : 'id'; self::$number = Minz_Request::paramInt('nb') ?: FreshRSS_Context::userConf()->posts_per_page; if (self::$number > FreshRSS_Context::userConf()->max_posts_per_rss) { @@ -260,9 +260,9 @@ final class FreshRSS_Context { FreshRSS_Context::userConf()->posts_per_page); } self::$offset = Minz_Request::paramInt('offset'); - $id_max = Minz_Request::paramString('idMax', true); + $id_max = Minz_Request::paramString('idMax', plaintext: true); self::$id_max = ctype_digit($id_max) ? $id_max : '0'; - $continuation_id = Minz_Request::paramString('cid', true); + $continuation_id = Minz_Request::paramString('cid', plaintext: true); self::$continuation_id = ctype_digit($continuation_id) ? $continuation_id : '0'; self::$sinceHours = Minz_Request::paramInt('hours'); } diff --git a/app/Models/Days.php b/app/Models/Days.php deleted file mode 100644 index c445c6355..000000000 --- a/app/Models/Days.php +++ /dev/null @@ -1,8 +0,0 @@ -<?php -declare(strict_types=1); - -class FreshRSS_Days { - public const TODAY = 0; - public const YESTERDAY = 1; - public const BEFORE_YESTERDAY = 2; -} diff --git a/app/Models/Entry.php b/app/Models/Entry.php index 62d4019d8..3cf6382dd 100644 --- a/app/Models/Entry.php +++ b/app/Models/Entry.php @@ -873,23 +873,6 @@ HTML; $feed->applyFilterActions($this); } - public function isDay(int $day, int $today): bool { - $date = $this->dateAdded(true); - switch ($day) { - case FreshRSS_Days::TODAY: - $tomorrow = $today + 86400; - return $date >= $today && $date < $tomorrow; - case FreshRSS_Days::YESTERDAY: - $yesterday = $today - 86400; - return $date >= $yesterday && $date < $today; - case FreshRSS_Days::BEFORE_YESTERDAY: - $yesterday = $today - 86400; - return $date < $yesterday; - default: - return false; - } - } - /** * @param string $url Overridden URL. Will default to the entry URL. * @throws Minz_Exception diff --git a/app/i18n/cs/index.php b/app/i18n/cs/index.php index 18b7fd655..0a5689157 100644 --- a/app/i18n/cs/index.php +++ b/app/i18n/cs/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Nejsou žádné články k zobrazení.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Received before yesterday', // TODO + '_' => 'Received', // TODO 'today' => 'Received today', // TODO 'yesterday' => 'Received yesterday', // TODO ), @@ -45,6 +51,11 @@ return array( 'title' => 'Hlavní kanál', 'title_fav' => 'Oblíbené', 'title_global' => 'Zobrazení přehledu', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Protokoly', diff --git a/app/i18n/de/index.php b/app/i18n/de/index.php index 41c192f71..4ce5f864e 100644 --- a/app/i18n/de/index.php +++ b/app/i18n/de/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Es gibt keinen Artikel zum Anzeigen.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Vor gestern empfangen', + '_' => 'Received', // TODO 'today' => 'Heute empfangen', 'yesterday' => 'Gestern empfangen', ), @@ -45,6 +51,11 @@ return array( 'title' => 'Haupt-Feeds', 'title_fav' => 'Favoriten', 'title_global' => 'Globale Ansicht', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Protokolle', diff --git a/app/i18n/el/index.php b/app/i18n/el/index.php index 251eb9353..0134d40ea 100644 --- a/app/i18n/el/index.php +++ b/app/i18n/el/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'There are no articles to show.', // TODO + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Received before yesterday', // TODO + '_' => 'Received', // TODO 'today' => 'Received today', // TODO 'yesterday' => 'Received yesterday', // TODO ), @@ -45,6 +51,11 @@ return array( 'title' => 'Main stream', // TODO 'title_fav' => 'Favourites', // TODO 'title_global' => 'Global view', // TODO + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Logs', // TODO diff --git a/app/i18n/en-US/index.php b/app/i18n/en-US/index.php index d112d143e..7d05d4f21 100644 --- a/app/i18n/en-US/index.php +++ b/app/i18n/en-US/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'There are no articles to show.', // IGNORE + 'published' => array( + '_' => 'Published', // IGNORE + 'future' => 'Published in the future', // IGNORE + 'today' => 'Published today', // IGNORE + 'yesterday' => 'Published yesterday', // IGNORE + ), 'received' => array( - 'before_yesterday' => 'Received before yesterday', // IGNORE + '_' => 'Received', // IGNORE 'today' => 'Received today', // IGNORE 'yesterday' => 'Received yesterday', // IGNORE ), @@ -45,6 +51,11 @@ return array( 'title' => 'Main stream', // IGNORE 'title_fav' => 'Favorites', 'title_global' => 'Global view', // IGNORE + 'userModified' => array( + '_' => 'Modified by user', // IGNORE + 'today' => 'Modified by user today', // IGNORE + 'yesterday' => 'Modified by user yesterday', // IGNORE + ), ), 'log' => array( '_' => 'Logs', // IGNORE diff --git a/app/i18n/en/index.php b/app/i18n/en/index.php index d0a39a7a5..fed6491f7 100644 --- a/app/i18n/en/index.php +++ b/app/i18n/en/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'There are no articles to show.', + 'published' => array( + '_' => 'Published', + 'future' => 'Published in the future', + 'today' => 'Published today', + 'yesterday' => 'Published yesterday', + ), 'received' => array( - 'before_yesterday' => 'Received before yesterday', + '_' => 'Received', 'today' => 'Received today', 'yesterday' => 'Received yesterday', ), @@ -45,6 +51,11 @@ return array( 'title' => 'Main stream', 'title_fav' => 'Favourites', 'title_global' => 'Global view', + 'userModified' => array( + '_' => 'Modified by user', + 'today' => 'Modified by user today', + 'yesterday' => 'Modified by user yesterday', + ), ), 'log' => array( '_' => 'Logs', diff --git a/app/i18n/es/index.php b/app/i18n/es/index.php index 73a5e3e39..1a0c04cd1 100644 --- a/app/i18n/es/index.php +++ b/app/i18n/es/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'No hay artículos a mostrar.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Received before yesterday', // TODO + '_' => 'Received', // TODO 'today' => 'Received today', // TODO 'yesterday' => 'Received yesterday', // TODO ), @@ -45,6 +51,11 @@ return array( 'title' => 'Salida Principal', 'title_fav' => 'Favoritos', 'title_global' => 'Vista global', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Registros', diff --git a/app/i18n/fa/index.php b/app/i18n/fa/index.php index 65f331a5f..1ad29523b 100644 --- a/app/i18n/fa/index.php +++ b/app/i18n/fa/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => ' هیچ مقاله ای برای نمایش وجود ندارد.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'پیش از دیروز دریافت شد', + '_' => 'Received', // TODO 'today' => 'امروز دریافت شد', 'yesterday' => 'دیروز دریافت شد', ), @@ -45,6 +51,11 @@ return array( 'title' => ' جریان اصلی', 'title_fav' => ' موارد دلخواه', 'title_global' => ' نمای جهانی', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => ' سیاهههای مربوط', diff --git a/app/i18n/fi/index.php b/app/i18n/fi/index.php index 311d13077..f09b5ffc5 100644 --- a/app/i18n/fi/index.php +++ b/app/i18n/fi/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Näytettäviä artikkeleita ei ole.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Saapuneet aikaisemmin kuin eilen', + '_' => 'Received', // TODO 'today' => 'Saapuneet tänään', 'yesterday' => 'Saapuneet eilen', ), @@ -45,6 +51,11 @@ return array( 'title' => 'Pääsyötevirta', 'title_fav' => 'Suosikit', 'title_global' => 'Yleisnäkymä', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Lokit', diff --git a/app/i18n/fr/index.php b/app/i18n/fr/index.php index f51a09ba6..83faedddb 100644 --- a/app/i18n/fr/index.php +++ b/app/i18n/fr/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Il n’y a aucun article à afficher.', + 'published' => array( + '_' => 'Publié', + 'future' => 'Publié dans le futur', + 'today' => 'Publié aujourd’hui', + 'yesterday' => 'Publié hier', + ), 'received' => array( - 'before_yesterday' => 'Reçu avant avant-hier', + '_' => 'Reçu', 'today' => 'Reçu aujourd’hui', 'yesterday' => 'Reçu hier', ), @@ -45,6 +51,11 @@ return array( 'title' => 'Flux principal', 'title_fav' => 'Favoris', 'title_global' => 'Vue globale', + 'userModified' => array( + '_' => 'Modifié par l’utilisateur', + 'today' => 'Modifié par l’utilisateur aujourd’hui', + 'yesterday' => 'Modifié par l’utilisateur hier', + ), ), 'log' => array( '_' => 'Logs', // IGNORE diff --git a/app/i18n/he/index.php b/app/i18n/he/index.php index d52319cba..ed7aa038d 100644 --- a/app/i18n/he/index.php +++ b/app/i18n/he/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'אין מאמר להצגה.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Received before yesterday', // TODO + '_' => 'Received', // TODO 'today' => 'Received today', // TODO 'yesterday' => 'Received yesterday', // TODO ), @@ -45,6 +51,11 @@ return array( 'title' => 'הזנה ראשית', 'title_fav' => 'מועדפים', 'title_global' => 'תצוגה גלובלית', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'לוגים', diff --git a/app/i18n/hu/index.php b/app/i18n/hu/index.php index 2345f1249..3e4e1c71f 100644 --- a/app/i18n/hu/index.php +++ b/app/i18n/hu/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Nincs megjeleníthető cikk.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Tegnapelőtt fogadva', + '_' => 'Received', // TODO 'today' => 'Ma fogadva', 'yesterday' => 'Tegnap fogadva', ), @@ -45,6 +51,11 @@ return array( 'title' => 'Minden cikk', 'title_fav' => 'Kedvencek', 'title_global' => 'Globális nézet', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Log-ok', diff --git a/app/i18n/id/index.php b/app/i18n/id/index.php index c06292759..bcca45c0c 100644 --- a/app/i18n/id/index.php +++ b/app/i18n/id/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Tidak ada artikel untuk diperlihatkan.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Diterima sebelum kemarin', + '_' => 'Received', // TODO 'today' => 'Diterima hari ini', 'yesterday' => 'Diterima kemarin', ), @@ -45,6 +51,11 @@ return array( 'title' => 'Bagian Utama', 'title_fav' => 'Favorit', 'title_global' => 'Tampilan Global', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Log', diff --git a/app/i18n/it/index.php b/app/i18n/it/index.php index 1c9a3b2f1..e12baec60 100644 --- a/app/i18n/it/index.php +++ b/app/i18n/it/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Non ci sono articoli da mostrare.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Ricevuto prima di ieri', + '_' => 'Received', // TODO 'today' => 'Ricevuto oggi', 'yesterday' => 'Ricevuto ieri', ), @@ -45,6 +51,11 @@ return array( 'title' => 'Flusso principale', 'title_fav' => 'Preferiti', 'title_global' => 'Vista globale per categorie', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Log', diff --git a/app/i18n/ja/index.php b/app/i18n/ja/index.php index a0879d7b8..a44283c72 100644 --- a/app/i18n/ja/index.php +++ b/app/i18n/ja/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => '表示できる記事がありません', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => '一昨日以前', + '_' => 'Received', // TODO 'today' => '今日', 'yesterday' => '昨日', ), @@ -45,6 +51,11 @@ return array( 'title' => 'メイン', 'title_fav' => 'お気に入り', 'title_global' => 'グローバルビュー', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'ログ', diff --git a/app/i18n/ko/index.php b/app/i18n/ko/index.php index bce49f545..f9b272b58 100644 --- a/app/i18n/ko/index.php +++ b/app/i18n/ko/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => '글이 없습니다.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Received before yesterday', // TODO + '_' => 'Received', // TODO 'today' => 'Received today', // TODO 'yesterday' => 'Received yesterday', // TODO ), @@ -45,6 +51,11 @@ return array( 'title' => '메인 스트림', 'title_fav' => '즐겨찾기', 'title_global' => '전체 모드', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => '로그', diff --git a/app/i18n/lv/index.php b/app/i18n/lv/index.php index db22eda5b..fcc506ecb 100644 --- a/app/i18n/lv/index.php +++ b/app/i18n/lv/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Nav neviena raksta, ko parādīt.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Received before yesterday', // TODO + '_' => 'Received', // TODO 'today' => 'Received today', // TODO 'yesterday' => 'Received yesterday', // TODO ), @@ -45,6 +51,11 @@ return array( 'title' => 'Galvenā plūsma', 'title_fav' => 'Mīļākie', 'title_global' => 'Globālais skats', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Žurnāli', diff --git a/app/i18n/nl/index.php b/app/i18n/nl/index.php index 2993a43b6..8c6561c7b 100644 --- a/app/i18n/nl/index.php +++ b/app/i18n/nl/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Er is geen artikel om te laten zien.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Ontvangen vóór gisteren', + '_' => 'Received', // TODO 'today' => 'Vandaag ontvangen', 'yesterday' => 'Gisteren ontvangen', ), @@ -45,6 +51,11 @@ return array( 'title' => 'Overzicht', 'title_fav' => 'Favorieten', 'title_global' => 'Globale weergave', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Log bestanden', diff --git a/app/i18n/oc/index.php b/app/i18n/oc/index.php index 8f28b6ca6..56d71543e 100644 --- a/app/i18n/oc/index.php +++ b/app/i18n/oc/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'I a pas cap de flux de mostrar.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Received before yesterday', // TODO + '_' => 'Received', // TODO 'today' => 'Received today', // TODO 'yesterday' => 'Received yesterday', // TODO ), @@ -45,6 +51,11 @@ return array( 'title' => 'Flux màger', 'title_fav' => 'Favorits', 'title_global' => 'Vista generala', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Jornals d’audit', // IGNORE diff --git a/app/i18n/pl/index.php b/app/i18n/pl/index.php index 869edb00b..ddf9cb3c8 100644 --- a/app/i18n/pl/index.php +++ b/app/i18n/pl/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Brak wiadomości do wyświetlenia.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Otrzymane przedwczoraj', + '_' => 'Received', // TODO 'today' => 'Otrzymane dzisiaj', 'yesterday' => 'Otrzymane wczoraj', ), @@ -45,6 +51,11 @@ return array( 'title' => 'Kanał główny', 'title_fav' => 'Ulubione', 'title_global' => 'Widok globalny', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Dziennik', diff --git a/app/i18n/pt-BR/index.php b/app/i18n/pt-BR/index.php index 787dea15d..e8d3e6b11 100644 --- a/app/i18n/pt-BR/index.php +++ b/app/i18n/pt-BR/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Não há nenhum artigo para mostrar.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Received before yesterday', // TODO + '_' => 'Received', // TODO 'today' => 'Received today', // TODO 'yesterday' => 'Received yesterday', // TODO ), @@ -45,6 +51,11 @@ return array( 'title' => 'Stream principal', 'title_fav' => 'Favoritos', 'title_global' => 'Visualização Global', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Logs', // IGNORE diff --git a/app/i18n/pt-PT/index.php b/app/i18n/pt-PT/index.php index 127bef26f..e2746eebe 100644 --- a/app/i18n/pt-PT/index.php +++ b/app/i18n/pt-PT/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Não há nenhum artigo para mostrar.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Received before yesterday', // TODO + '_' => 'Received', // TODO 'today' => 'Received today', // TODO 'yesterday' => 'Received yesterday', // TODO ), @@ -45,6 +51,11 @@ return array( 'title' => 'Stream principal', 'title_fav' => 'Favoritos', 'title_global' => 'Visualização Global', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Logs', // IGNORE diff --git a/app/i18n/ru/index.php b/app/i18n/ru/index.php index c60c9820a..3da44b000 100644 --- a/app/i18n/ru/index.php +++ b/app/i18n/ru/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Нет статей для отображения.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Получено раньше, чем вчера', + '_' => 'Received', // TODO 'today' => 'Получено сегодня', 'yesterday' => 'Получено вчера', ), @@ -45,6 +51,11 @@ return array( 'title' => 'Основной поток', 'title_fav' => 'Избранное', 'title_global' => 'Глобальный вид', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Журнал', diff --git a/app/i18n/sk/index.php b/app/i18n/sk/index.php index d4aa174b1..da3236938 100644 --- a/app/i18n/sk/index.php +++ b/app/i18n/sk/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Žiadne články.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Received before yesterday', // TODO + '_' => 'Received', // TODO 'today' => 'Received today', // TODO 'yesterday' => 'Received yesterday', // TODO ), @@ -45,6 +51,11 @@ return array( 'title' => 'Všetky kanály', 'title_fav' => 'Obľúbené', 'title_global' => 'Prehľad', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Záznamy', diff --git a/app/i18n/tr/index.php b/app/i18n/tr/index.php index 50b81b517..ea1ba9e15 100644 --- a/app/i18n/tr/index.php +++ b/app/i18n/tr/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Gösterilecek makale yok.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Dünden önceki gün alınanlar', + '_' => 'Received', // TODO 'today' => 'Bugün alınanlar', 'yesterday' => 'Dün alınanlar', ), @@ -45,6 +51,11 @@ return array( 'title' => 'Ana akış', 'title_fav' => 'Favoriler', 'title_global' => 'Genel görünüm', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Günlükler', diff --git a/app/i18n/uk/index.php b/app/i18n/uk/index.php index 0922444a6..03f5fc459 100644 --- a/app/i18n/uk/index.php +++ b/app/i18n/uk/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => 'Нема статей для показу.', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Отримано раніше за вчора', + '_' => 'Received', // TODO 'today' => 'Отримано сьогодні', 'yesterday' => 'Отримано вчора', ), @@ -45,6 +51,11 @@ return array( 'title' => 'Головний потік', 'title_fav' => 'Вподобані', 'title_global' => 'Глобальний показ', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => 'Журнали', diff --git a/app/i18n/zh-CN/index.php b/app/i18n/zh-CN/index.php index ae134e954..ec48038fa 100644 --- a/app/i18n/zh-CN/index.php +++ b/app/i18n/zh-CN/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => '没有文章可以显示。', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Received before yesterday', // TODO + '_' => 'Received', // TODO 'today' => 'Received today', // TODO 'yesterday' => 'Received yesterday', // TODO ), @@ -45,6 +51,11 @@ return array( 'title' => '首页', 'title_fav' => '收藏', 'title_global' => '全局视图', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => '日志', diff --git a/app/i18n/zh-TW/index.php b/app/i18n/zh-TW/index.php index 45bf17c1b..f62519ec3 100644 --- a/app/i18n/zh-TW/index.php +++ b/app/i18n/zh-TW/index.php @@ -36,8 +36,14 @@ return array( ), 'feed' => array( 'empty' => '暫時沒有文章可顯示。', + 'published' => array( + '_' => 'Published', // TODO + 'future' => 'Published in the future', // TODO + 'today' => 'Published today', // TODO + 'yesterday' => 'Published yesterday', // TODO + ), 'received' => array( - 'before_yesterday' => 'Received before yesterday', // TODO + '_' => 'Received', // TODO 'today' => 'Received today', // TODO 'yesterday' => 'Received yesterday', // TODO ), @@ -45,6 +51,11 @@ return array( 'title' => '首頁', 'title_fav' => '收藏', 'title_global' => '全局視圖', + 'userModified' => array( + '_' => 'Modified by user', // TODO + 'today' => 'Modified by user today', // TODO + 'yesterday' => 'Modified by user yesterday', // TODO + ), ), 'log' => array( '_' => '日誌', diff --git a/app/views/index/normal.phtml b/app/views/index/normal.phtml index cc54d10fd..9f2bbdbcc 100644 --- a/app/views/index/normal.phtml +++ b/app/views/index/normal.phtml @@ -8,9 +8,7 @@ if (!Minz_Request::paramBoolean('ajax')) { call_user_func($this->callbackBeforeEntries, $this); -$display_today = FreshRSS_Context::$sort === 'id'; -$display_yesterday = $display_today; -$display_others = $display_today; +$last_transition = ''; $useKeepUnreadImportant = !FreshRSS_Context::isImportant() && !FreshRSS_Context::isFeed(); $today = @strtotime('today'); @@ -59,26 +57,19 @@ $today = @strtotime('today'); // We most likely already have the feed object in cache, otherwise make a request $this->feed = FreshRSS_Category::findFeed($this->categories, $this->entry->feedId()) ?? $this->entry->feed() ?? FreshRSS_Feed::default(); + $this->entry->_feed($this->feed); - if ($display_today && $this->entry->isDay(FreshRSS_Days::TODAY, $today)) { - ?><div class="day" id="day_today"><?= _t('index.feed.received.today') ?> - <span class="date"> — <?= timestamptodate(time(), false) ?></span> + if ($last_transition !== ($transition = FreshRSS_index_Controller::transition($this->entry, FreshRSS_Context::$sort))) { + $last_transition = $transition; + ?><div class="transition"> + <span class="transition-value"> + <?php if (FreshRSS_Context::$sort === 'f.name' && FreshRSS_Context::userConf()->show_favicons): ?> + <img class="favicon" src="<?= $this->feed->favicon() ?>" alt="✇" loading="lazy" /> + <?php endif;?> + <?= $transition ?> + </span> <span class="name"><?= FreshRSS_Context::$name ?></span> </div><?php - $display_today = false; - } - if ($display_yesterday && $this->entry->isDay(FreshRSS_Days::YESTERDAY, $today)) { - ?><div class="day" id="day_yesterday"><?= _t('index.feed.received.yesterday') ?> - <span class="date"> — <?= timestamptodate(time() - 86400, false) ?></span> - <span class="name"><?= FreshRSS_Context::$name ?></span> - </div><?php - $display_yesterday = false; - } - if ($display_others && $this->entry->isDay(FreshRSS_Days::BEFORE_YESTERDAY, $today)) { - ?><div class="day" id="day_before_yesterday"><?= _t('index.feed.received.before_yesterday') ?> - <span class="name"><?= FreshRSS_Context::$name ?></span> - </div><?php - $display_others = false; } ?><div class="flux<?= !$this->entry->isRead() ? ' not_read' : '' ?><?= $this->entry->isFavorite() ? ' favorite' : '' diff --git a/app/views/index/reader.phtml b/app/views/index/reader.phtml index 49321f9f5..d76af2dc7 100644 --- a/app/views/index/reader.phtml +++ b/app/views/index/reader.phtml @@ -31,6 +31,7 @@ $useKeepUnreadImportant = !FreshRSS_Context::isImportant() && !FreshRSS_Context: //We most likely already have the feed object in cache, otherwise make a request $this->feed = FreshRSS_Category::findFeed($this->categories, $this->entry->feedId()) ?? $this->entry->feed() ?? FreshRSS_Feed::default(); + $this->entry->_feed($this->feed); ?><div class="flux<?= !$this->entry->isRead() ? ' not_read' : '' ?><?= $this->entry->isFavorite() ? ' favorite' : '' ?><?= $useKeepUnreadImportant && ($this->feed->priority() >= FreshRSS_Feed::PRIORITY_IMPORTANT) ? ' keep_unread ' : '' diff --git a/app/views/stats/idle.phtml b/app/views/stats/idle.phtml index b01e246fd..4e2a4eed7 100644 --- a/app/views/stats/idle.phtml +++ b/app/views/stats/idle.phtml @@ -41,7 +41,7 @@ <li class="item feed<?= $error_class, $empty_class, $mute_class ?>" title="<?= $error_title, $empty_title ?>"> <a class="configure open-slider" href="<?= _url('stats', 'feed', 'id', $feedInPeriod['id'], 'sub', 'idle') ?>" title="<?= _t('gen.action.manage') ?>"><?= _i('configure') ?></a><?php if (FreshRSS_Context::userConf()->show_favicons): ?><img class="favicon" src="<?= $feedInPeriod['favicon'] ?>" alt="✇" loading="lazy" /><?php - endif; ?><span title="<?= timestamptodate((int)($feedInPeriod['last_date']), false) ?>"><?= $feedInPeriod['name'] ?> + endif; ?><span title="<?= timestamptodate((int)($feedInPeriod['last_date']), hour: false) ?>"><?= $feedInPeriod['name'] ?> (<?= _t('admin.stats.number_entries', $feedInPeriod['nb_articles']) ?>)</span> </li> <?php } ?> diff --git a/config-user.default.php b/config-user.default.php index 7f614d564..42c736700 100644 --- a/config-user.default.php +++ b/config-user.default.php @@ -53,6 +53,7 @@ return array ( # Set to `true` to mark it unread, or `false` to leave it as-is. 'mark_updated_article_unread' => false, //TODO: -1 => ignore, 0 => update, 1 => update and mark as unread + # 'id'|'c.name'|'date'|'f.name'|'link'|'title'|'rand'|'lastUserModified'|'length' 'sort' => 'id', 'mark_read_button' => 'big', 'sort_order' => 'DESC', diff --git a/p/api/greader.php b/p/api/greader.php index 1986b8c3d..144508ad4 100644 --- a/p/api/greader.php +++ b/p/api/greader.php @@ -414,7 +414,7 @@ final class GReaderAPI { } } $c_name = htmlspecialchars($c_name, ENT_COMPAT, 'UTF-8'); - if (in_array($c_name, ['', 'Uncategorized', _t('gen.short.default_category')], true)) { + if (in_array($c_name, ['', FreshRSS_CategoryDAO::DEFAULT_CATEGORY_NAME, _t('gen.short.default_category')], true)) { $addCatId = FreshRSS_CategoryDAO::DEFAULTCATEGORYID; } else { $categoryDAO = FreshRSS_Factory::createCategoryDao(); diff --git a/p/scripts/main.js b/p/scripts/main.js index 2c0912a7e..fe5e81f6d 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -2009,7 +2009,7 @@ let load_more = false; let box_load_more = null; function remove_existing_posts() { - document.querySelectorAll('.flux, .day').forEach(function (div) { + document.querySelectorAll('.flux, .transition').forEach(function (div) { div.remove(); }); } @@ -2032,9 +2032,15 @@ function load_more_posts() { const html = this.response; const streamFooter = document.getElementById('stream-footer'); + const transitions = document.querySelectorAll('#stream > .transition'); + let lastTransition = transitions.length > 0 ? transitions[transitions.length - 1] : null; const streamAdopted = document.adoptNode(html.getElementById('stream')); - streamAdopted.querySelectorAll('.flux, .day').forEach(function (div) { + streamAdopted.querySelectorAll('.flux, .transition').forEach(function (div) { + if (lastTransition !== null && div.classList.contains('transition') && div.textContent === lastTransition.textContent) { + lastTransition = null; + return; // Skip duplicate transition + } box_load_more.insertBefore(div, streamFooter); }); @@ -2053,13 +2059,6 @@ function load_more_posts() { toggle_bigMarkAsRead_button(); } - document.querySelectorAll('[id^=day_]').forEach(function (div) { - const ids = document.querySelectorAll('[id="' + div.id + '"]'); - for (let i = ids.length - 1; i > 0; i--) { // Keep only the first - ids[i].remove(); - } - }); - init_load_more(box_load_more); const div_load_more = document.getElementById('load_more'); diff --git a/p/themes/Alternative-Dark/adark.css b/p/themes/Alternative-Dark/adark.css index 0d6ce7e36..5a4725309 100644 --- a/p/themes/Alternative-Dark/adark.css +++ b/p/themes/Alternative-Dark/adark.css @@ -709,8 +709,8 @@ kbd { background: var(--contrast-background-color-hover); } -/*=== Day indication */ -.day { +/*=== Transition indication, e.g. day */ +.transition { padding: 0 10px; font-weight: bold; line-height: 3; @@ -719,15 +719,15 @@ kbd { border-top: 1px solid var(--border-color-dark); } -.day span { +.transition span { line-height: 1.5; } -#new-article + .day { +#new-article + .transition { border-top: none; } -.day .name { +.transition .name { padding: 0 10px 0 0; color: var(--font-color-light); font-size: 1.8em; @@ -1144,7 +1144,7 @@ kbd { border-left: 2px solid var(--background-color-light); } - .day .name { + .transition .name { display: none!important; font-size: 1.1rem; text-shadow: none; diff --git a/p/themes/Alternative-Dark/adark.rtl.css b/p/themes/Alternative-Dark/adark.rtl.css index 78219d75c..f6ba6dea0 100644 --- a/p/themes/Alternative-Dark/adark.rtl.css +++ b/p/themes/Alternative-Dark/adark.rtl.css @@ -709,8 +709,8 @@ kbd { background: var(--contrast-background-color-hover); } -/*=== Day indication */ -.day { +/*=== Transition indication, e.g. day */ +.transition { padding: 0 10px; font-weight: bold; line-height: 3; @@ -719,15 +719,15 @@ kbd { border-top: 1px solid var(--border-color-dark); } -.day span { +.transition span { line-height: 1.5; } -#new-article + .day { +#new-article + .transition { border-top: none; } -.day .name { +.transition .name { padding: 0 0 0 10px; color: var(--font-color-light); font-size: 1.8em; @@ -1144,7 +1144,7 @@ kbd { border-right: 2px solid var(--background-color-light); } - .day .name { + .transition .name { display: none!important; font-size: 1.1rem; text-shadow: none; diff --git a/p/themes/Ansum/_layout.scss b/p/themes/Ansum/_layout.scss index 9e7ef2957..97de599b7 100644 --- a/p/themes/Ansum/_layout.scss +++ b/p/themes/Ansum/_layout.scss @@ -117,8 +117,8 @@ main.prompt { background: variables.$main-first-alt; } -/*=== Day indication */ -.day { +/*=== Transition indication, e.g. day */ +.transition { padding: 1rem 0 0 1.25rem; color: variables.$light-font-color; font-size: 0.875rem; diff --git a/p/themes/Ansum/_mobile.scss b/p/themes/Ansum/_mobile.scss index dc109caaa..19796e3db 100644 --- a/p/themes/Ansum/_mobile.scss +++ b/p/themes/Ansum/_mobile.scss @@ -126,7 +126,7 @@ } } - .day { + .transition { text-align: center; padding: 1rem 0; diff --git a/p/themes/Ansum/ansum.css b/p/themes/Ansum/ansum.css index d94816dca..2d5da338c 100644 --- a/p/themes/Ansum/ansum.css +++ b/p/themes/Ansum/ansum.css @@ -778,8 +778,8 @@ main.prompt { background: #b7641d; } -/*=== Day indication */ -.day { +/*=== Transition indication, e.g. day */ +.transition { padding: 1rem 0 0 1.25rem; color: #6d655f; font-size: 0.875rem; @@ -788,7 +788,7 @@ main.prompt { letter-spacing: 1px; text-transform: uppercase; } -.day .name { +.transition .name { padding: 0 1rem 0 1rem; color: #363330; font-size: 0.875rem; @@ -1289,11 +1289,11 @@ main.prompt { .dropdown-target:target ~ a.dropdown-toggle:not(.btn)::after { bottom: -17px; } - .day { + .transition { text-align: center; padding: 1rem 0; } - .day .name { + .transition .name { padding: 0; display: block; width: 100%; diff --git a/p/themes/Ansum/ansum.rtl.css b/p/themes/Ansum/ansum.rtl.css index ef7ab4cc8..2cfaef5aa 100644 --- a/p/themes/Ansum/ansum.rtl.css +++ b/p/themes/Ansum/ansum.rtl.css @@ -778,8 +778,8 @@ main.prompt { background: #b7641d; } -/*=== Day indication */ -.day { +/*=== Transition indication, e.g. day */ +.transition { padding: 1rem 1.25rem 0 0; color: #6d655f; font-size: 0.875rem; @@ -788,7 +788,7 @@ main.prompt { letter-spacing: 1px; text-transform: uppercase; } -.day .name { +.transition .name { padding: 0 1rem 0 1rem; color: #363330; font-size: 0.875rem; @@ -1289,11 +1289,11 @@ main.prompt { .dropdown-target:target ~ a.dropdown-toggle:not(.btn)::after { bottom: -17px; } - .day { + .transition { text-align: center; padding: 1rem 0; } - .day .name { + .transition .name { padding: 0; display: block; width: 100%; diff --git a/p/themes/Dark-pink/pinkdark.css b/p/themes/Dark-pink/pinkdark.css index 922d427a8..3bfc91129 100644 --- a/p/themes/Dark-pink/pinkdark.css +++ b/p/themes/Dark-pink/pinkdark.css @@ -52,11 +52,11 @@ background: #ff92a2; } -.day { +.transition { color: #ffb6c1; } -.day .name { +.transition .name { color: #ffb6c1; } diff --git a/p/themes/Dark-pink/pinkdark.rtl.css b/p/themes/Dark-pink/pinkdark.rtl.css index 670bacbb8..a3f813831 100644 --- a/p/themes/Dark-pink/pinkdark.rtl.css +++ b/p/themes/Dark-pink/pinkdark.rtl.css @@ -52,11 +52,11 @@ background: #ff92a2; } -.day { +.transition { color: #ffb6c1; } -.day .name { +.transition .name { color: #ffb6c1; } diff --git a/p/themes/Dark/dark.css b/p/themes/Dark/dark.css index 4d5d69f2b..6d2e01993 100644 --- a/p/themes/Dark/dark.css +++ b/p/themes/Dark/dark.css @@ -443,8 +443,8 @@ button.as-link[disabled] { background-color: var(--dark-background-color3); } -/*=== Day indication */ -.day { +/*=== Transition indication, e.g. day */ +.transition { border-top: 1px solid var(--dark-border-color3); border-bottom: 1px solid var(--dark-border-color3); } diff --git a/p/themes/Dark/dark.rtl.css b/p/themes/Dark/dark.rtl.css index 69a296409..cfb1ed37d 100644 --- a/p/themes/Dark/dark.rtl.css +++ b/p/themes/Dark/dark.rtl.css @@ -443,8 +443,8 @@ button.as-link[disabled] { background-color: var(--dark-background-color3); } -/*=== Day indication */ -.day { +/*=== Transition indication, e.g. day */ +.transition { border-top: 1px solid var(--dark-border-color3); border-bottom: 1px solid var(--dark-border-color3); } diff --git a/p/themes/Flat/flat.css b/p/themes/Flat/flat.css index fb99b5f20..bd02514af 100644 --- a/p/themes/Flat/flat.css +++ b/p/themes/Flat/flat.css @@ -655,15 +655,15 @@ th { background: #2980b9; } -/*=== Day indication */ -.day { +/*=== Transition indication, e.g. day */ +.transition { padding: 0 10px; font-weight: bold; line-height: 3em; border-left: 2px solid #ecf0f1; } -.day .name { +.transition .name { padding: 0 10px 0 0; color: #aab; font-size: 1.8em; @@ -991,7 +991,7 @@ th { bottom: -19px; } - .day .name { + .transition .name { font-size: 1.1rem; } diff --git a/p/themes/Flat/flat.rtl.css b/p/themes/Flat/flat.rtl.css index 5e075b421..5a4537fcb 100644 --- a/p/themes/Flat/flat.rtl.css +++ b/p/themes/Flat/flat.rtl.css @@ -655,15 +655,15 @@ th { background: #2980b9; } -/*=== Day indication */ -.day { +/*=== Transition indication, e.g. day */ +.transition { padding: 0 10px; font-weight: bold; line-height: 3em; border-right: 2px solid #ecf0f1; } -.day .name { +.transition .name { padding: 0 0 0 10px; color: #aab; font-size: 1.8em; @@ -991,7 +991,7 @@ th { bottom: -19px; } - .day .name { + .transition .name { font-size: 1.1rem; } diff --git a/p/themes/Mapco/_layout.scss b/p/themes/Mapco/_layout.scss index 27e3e8413..d011237af 100644 --- a/p/themes/Mapco/_layout.scss +++ b/p/themes/Mapco/_layout.scss @@ -122,8 +122,8 @@ main.prompt { background: variables.$main-first-alt; } -/*=== Day indication */ -.day { +/*=== Transition indication, e.g. day */ +.transition { padding: 1rem 0 0 1.25rem; color: variables.$light-font-color; font-size: 0.875rem; diff --git a/p/themes/Mapco/_mobile.scss b/p/themes/Mapco/_mobile.scss index c05a49502..b66590f70 100644 --- a/p/themes/Mapco/_mobile.scss +++ b/p/themes/Mapco/_mobile.scss @@ -133,7 +133,7 @@ } } - .day { + .transition { text-align: center; padding: 1rem 0; diff --git a/p/themes/Mapco/mapco.css b/p/themes/Mapco/mapco.css index 0591d090a..09b57156a 100644 --- a/p/themes/Mapco/mapco.css +++ b/p/themes/Mapco/mapco.css @@ -793,8 +793,8 @@ main.prompt { background: #25c; } -/*=== Day indication */ -.day { +/*=== Transition indication, e.g. day */ +.transition { padding: 1rem 0 0 1.25rem; color: #5b6871; font-size: 0.875rem; @@ -803,7 +803,7 @@ main.prompt { letter-spacing: 1px; text-transform: uppercase; } -.day .name { +.transition .name { padding: 0 1rem 0 1rem; color: #303136; font-size: 0.875rem; @@ -1306,11 +1306,11 @@ main.prompt { .dropdown-target:target ~ a.dropdown-toggle:not(.btn)::after { bottom: -17px; } - .day { + .transition { text-align: center; padding: 1rem 0; } - .day .name { + .transition .name { padding: 0; display: block; width: 100%; diff --git a/p/themes/Mapco/mapco.rtl.css b/p/themes/Mapco/mapco.rtl.css index 1146efdb0..39813f4bd 100644 --- a/p/themes/Mapco/mapco.rtl.css +++ b/p/themes/Mapco/mapco.rtl.css @@ -793,8 +793,8 @@ main.prompt { background: #25c; } -/*=== Day indication */ -.day { +/*=== Transition indication, e.g. day */ +.transition { padding: 1rem 1.25rem 0 0; color: #5b6871; font-size: 0.875rem; @@ -803,7 +803,7 @@ main.prompt { letter-spacing: 1px; text-transform: uppercase; } -.day .name { +.transition .name { padding: 0 1rem 0 1rem; color: #303136; font-size: 0.875rem; @@ -1306,11 +1306,11 @@ main.prompt { .dropdown-target:target ~ a.dropdown-toggle:not(.btn)::after { bottom: -17px; } - .day { + .transition { text-align: center; padding: 1rem 0; } - .day .name { + .transition .name { padding: 0; display: block; width: 100%; diff --git a/p/themes/Nord/nord.css b/p/themes/Nord/nord.css index dfd9beb94..47769c786 100644 --- a/p/themes/Nord/nord.css +++ b/p/themes/Nord/nord.css @@ -763,14 +763,14 @@ li.item.active { text-decoration: none; } -/*=== Day indication */ -.day { +/*=== Transition indication, e.g. day */ +.transition { padding: 0 10px; font-weight: bold; line-height: 3em; } -.day .name { +.transition .name { padding: 0 10px 0 0; font-size: 1.8em; opacity: 0.3; @@ -778,11 +778,6 @@ li.item.active { text-align: right; } -.name { - display: none; -} - - /*=== Feed article header and footer */ .flux_header { position: relative; @@ -1018,7 +1013,7 @@ li.item.active { @media print { .header, .aside, - .nav_menu, .day, + .nav_menu, .transition, .flux_header, .flux_content .bottom, .pagination, @@ -1303,7 +1298,7 @@ optgroup::before { padding: 1rem; } - .day .name { + .transition .name { font-size: 1.1rem; } diff --git a/p/themes/Nord/nord.rtl.css b/p/themes/Nord/nord.rtl.css index 7128be496..5820aebdc 100644 --- a/p/themes/Nord/nord.rtl.css +++ b/p/themes/Nord/nord.rtl.css @@ -763,14 +763,14 @@ li.item.active { text-decoration: none; } -/*=== Day indication */ -.day { +/*=== Transition indication, e.g. day */ +.transition { padding: 0 10px; font-weight: bold; line-height: 3em; } -.day .name { +.transition .name { padding: 0 0 0 10px; font-size: 1.8em; opacity: 0.3; @@ -778,11 +778,6 @@ li.item.active { text-align: left; } -.name { - display: none; -} - - /*=== Feed article header and footer */ .flux_header { position: relative; @@ -1018,7 +1013,7 @@ li.item.active { @media print { .header, .aside, - .nav_menu, .day, + .nav_menu, .transition, .flux_header, .flux_content .bottom, .pagination, @@ -1303,7 +1298,7 @@ optgroup::before { padding: 1rem; } - .day .name { + .transition .name { font-size: 1.1rem; } diff --git a/p/themes/Origine-compact/origine-compact.css b/p/themes/Origine-compact/origine-compact.css index 5f56cb860..3fcec661c 100644 --- a/p/themes/Origine-compact/origine-compact.css +++ b/p/themes/Origine-compact/origine-compact.css @@ -74,13 +74,13 @@ font-size: 0.7rem; } -/*=== Day indication */ -.day { +/*=== Transition indication, e.g. day */ +.transition { font-size: 0.9rem; line-height: 2; } -.day .name { +.transition .name { font-size: 1em; opacity: 0.6; } diff --git a/p/themes/Origine-compact/origine-compact.rtl.css b/p/themes/Origine-compact/origine-compact.rtl.css index 579266a7f..2af10ddbc 100644 --- a/p/themes/Origine-compact/origine-compact.rtl.css +++ b/p/themes/Origine-compact/origine-compact.rtl.css @@ -74,13 +74,13 @@ font-size: 0.7rem; } -/*=== Day indication */ -.day { +/*=== Transition indication, e.g. day */ +.transition { font-size: 0.9rem; line-height: 2; } -.day .name { +.transition .name { font-size: 1em; opacity: 0.6; } diff --git a/p/themes/Origine/origine.css b/p/themes/Origine/origine.css index 4264a54b9..6bb083e3f 100644 --- a/p/themes/Origine/origine.css +++ b/p/themes/Origine/origine.css @@ -804,8 +804,8 @@ button:hover .icon, background-color: var(--contrast-background-color-hover); } -/*=== Day indication */ -.day { +/*=== Transition indication, e.g. day */ +.transition { padding: 0 10px; font-weight: bold; line-height: 3; @@ -813,15 +813,15 @@ button:hover .icon, border-top: 1px solid var(--border-color); } -.day span { +.transition span { line-height: 1.5; } -#new-article + .day { +#new-article + .transition { border-top: none; } -.day .name { +.transition .name { padding: 0 10px 0 0; color: var(--font-color-light-shadowed); font-size: 1.8em; @@ -1193,7 +1193,7 @@ button:hover .icon, padding-right: 15px; } - .day .name { + .transition .name { font-size: 1.1rem; text-shadow: none; } diff --git a/p/themes/Origine/origine.rtl.css b/p/themes/Origine/origine.rtl.css index ffa4fd4e4..a2b82b987 100644 --- a/p/themes/Origine/origine.rtl.css +++ b/p/themes/Origine/origine.rtl.css @@ -804,8 +804,8 @@ button:hover .icon, background-color: var(--contrast-background-color-hover); } -/*=== Day indication */ -.day { +/*=== Transition indication, e.g. day */ +.transition { padding: 0 10px; font-weight: bold; line-height: 3; @@ -813,15 +813,15 @@ button:hover .icon, border-top: 1px solid var(--border-color); } -.day span { +.transition span { line-height: 1.5; } -#new-article + .day { +#new-article + .transition { border-top: none; } -.day .name { +.transition .name { padding: 0 0 0 10px; color: var(--font-color-light-shadowed); font-size: 1.8em; @@ -1193,7 +1193,7 @@ button:hover .icon, padding-left: 15px; } - .day .name { + .transition .name { font-size: 1.1rem; text-shadow: none; } diff --git a/p/themes/Pafat/pafat.css b/p/themes/Pafat/pafat.css index 064517fc8..ab9d5d1cd 100644 --- a/p/themes/Pafat/pafat.css +++ b/p/themes/Pafat/pafat.css @@ -754,8 +754,8 @@ a.signin { background-color: var(--background-color-new-article-hover); } -/*=== Day indication */ -.day { +/*=== Transition indication, e.g. day */ +.transition { padding: 0 10px; background-color: var(--background-color-white); color: var(--font-color-grey); @@ -765,15 +765,15 @@ a.signin { line-height: 3; } -.day span { +.transition span { line-height: 1.5; } -#new-article + .day { +#new-article + .transition { border-top: none; } -.day .name { +.transition .name { padding: 0 10px 0 0; color: var(--font-color-grey); font-size: 1.8em; @@ -1088,7 +1088,7 @@ a.signin { border-left: 1px solid var(--border-color-grey-dark); } - .day .name { + .transition .name { font-size: 1.1rem; text-shadow: none; } diff --git a/p/themes/Pafat/pafat.rtl.css b/p/themes/Pafat/pafat.rtl.css index 8809e4ea5..8f1de3b89 100644 --- a/p/themes/Pafat/pafat.rtl.css +++ b/p/themes/Pafat/pafat.rtl.css @@ -754,8 +754,8 @@ a.signin { background-color: var(--background-color-new-article-hover); } -/*=== Day indication */ -.day { +/*=== Transition indication, e.g. day */ +.transition { padding: 0 10px; background-color: var(--background-color-white); color: var(--font-color-grey); @@ -765,15 +765,15 @@ a.signin { line-height: 3; } -.day span { +.transition span { line-height: 1.5; } -#new-article + .day { +#new-article + .transition { border-top: none; } -.day .name { +.transition .name { padding: 0 0 0 10px; color: var(--font-color-grey); font-size: 1.8em; @@ -1088,7 +1088,7 @@ a.signin { border-right: 1px solid var(--border-color-grey-dark); } - .day .name { + .transition .name { font-size: 1.1rem; text-shadow: none; } diff --git a/p/themes/Swage/swage.css b/p/themes/Swage/swage.css index cd4d6b66a..852544e35 100644 --- a/p/themes/Swage/swage.css +++ b/p/themes/Swage/swage.css @@ -745,13 +745,13 @@ main.post .drop-section li.item.feed a:hover .icon { background-color: var(--color-background-nav-darker); } -.day { +.transition { padding: 0 10px; font-weight: bold; line-height: 3; text-align: center; } -.day .name { +.transition .name { display: none; } @@ -1171,7 +1171,7 @@ main.global { right: 3%; left: auto; } - .day .name { + .transition .name { font-size: 1.1rem; } .notification { @@ -1305,4 +1305,4 @@ button.as-link { #slider label { min-height: initial; -}
\ No newline at end of file +} diff --git a/p/themes/Swage/swage.rtl.css b/p/themes/Swage/swage.rtl.css index 5cb5def28..cb11e8ec1 100644 --- a/p/themes/Swage/swage.rtl.css +++ b/p/themes/Swage/swage.rtl.css @@ -745,13 +745,13 @@ main.post .drop-section li.item.feed a:hover .icon { background-color: var(--color-background-nav-darker); } -.day { +.transition { padding: 0 10px; font-weight: bold; line-height: 3; text-align: center; } -.day .name { +.transition .name { display: none; } @@ -1171,7 +1171,7 @@ main.global { left: 3%; right: auto; } - .day .name { + .transition .name { font-size: 1.1rem; } .notification { @@ -1305,4 +1305,4 @@ button.as-link { #slider label { min-height: initial; -}
\ No newline at end of file +} diff --git a/p/themes/Swage/swage.scss b/p/themes/Swage/swage.scss index 35b9aeac4..b9c0143d6 100644 --- a/p/themes/Swage/swage.scss +++ b/p/themes/Swage/swage.scss @@ -951,7 +951,7 @@ main.post .drop-section li.item.feed a:hover .icon { } } -.day { +.transition { padding: 0 10px; font-weight: bold; line-height: 3; @@ -1501,7 +1501,7 @@ main.global { left: auto; } - .day .name { + .transition .name { font-size: 1.1rem; } diff --git a/p/themes/base-theme/base.css b/p/themes/base-theme/base.css index a68713c90..c588de8ce 100644 --- a/p/themes/base-theme/base.css +++ b/p/themes/base-theme/base.css @@ -478,21 +478,21 @@ th { text-decoration: none; } -/*=== Day indication */ -.day { +/*=== Transition indication, e.g. day */ +.transition { padding: 0 10px; font-weight: bold; line-height: 3; } -.day span { +.transition span { line-height: 1.5; } -#new-article + .day { +#new-article + .transition { } -.day .name { +.transition .name { padding: 0 10px 0 0; font-size: 1.8em; opacity: 0.3; @@ -737,7 +737,7 @@ th { width: 400px; } - .day .name { + .transition .name { font-size: 1.1rem; } diff --git a/p/themes/base-theme/base.rtl.css b/p/themes/base-theme/base.rtl.css index d4e8a6eda..6b47da890 100644 --- a/p/themes/base-theme/base.rtl.css +++ b/p/themes/base-theme/base.rtl.css @@ -478,21 +478,21 @@ th { text-decoration: none; } -/*=== Day indication */ -.day { +/*=== Transition indication, e.g. day */ +.transition { padding: 0 10px; font-weight: bold; line-height: 3; } -.day span { +.transition span { line-height: 1.5; } -#new-article + .day { +#new-article + .transition { } -.day .name { +.transition .name { padding: 0 0 0 10px; font-size: 1.8em; opacity: 0.3; @@ -737,7 +737,7 @@ th { width: 400px; } - .day .name { + .transition .name { font-size: 1.1rem; } diff --git a/p/themes/base-theme/frss.css b/p/themes/base-theme/frss.css index 19db6e1a8..958d2ba1d 100644 --- a/p/themes/base-theme/frss.css +++ b/p/themes/base-theme/frss.css @@ -1413,12 +1413,12 @@ input[type="search"] { display: block; } -/*=== Day indication */ -.day { +/*=== Transition indication, e.g. day */ +.transition { background: inherit; } -.day .name { +.transition .name { position: absolute; right: 0; width: 50%; @@ -2485,7 +2485,7 @@ html.slider-active { } .flux_header .item.website span, - .item .date, .day .date, + .item .date, .dropdown-menu > .no-mobile, .no-mobile, .aside_feed .tree-folder-items .item .no-dropdown-toggle { @@ -2829,7 +2829,7 @@ html.slider-active { } .header, .aside, - .nav_menu, .day, + .nav_menu, .transition, .flux_header, .flux_content .bottom, .pagination, diff --git a/p/themes/base-theme/frss.rtl.css b/p/themes/base-theme/frss.rtl.css index 29c8fb03c..5e0324153 100644 --- a/p/themes/base-theme/frss.rtl.css +++ b/p/themes/base-theme/frss.rtl.css @@ -1413,12 +1413,12 @@ input[type="search"] { display: block; } -/*=== Day indication */ -.day { +/*=== Transition indication, e.g. day */ +.transition { background: inherit; } -.day .name { +.transition .name { position: absolute; left: 0; width: 50%; @@ -2485,7 +2485,7 @@ html.slider-active { } .flux_header .item.website span, - .item .date, .day .date, + .item .date, .dropdown-menu > .no-mobile, .no-mobile, .aside_feed .tree-folder-items .item .no-dropdown-toggle { @@ -2829,7 +2829,7 @@ html.slider-active { } .header, .aside, - .nav_menu, .day, + .nav_menu, .transition, .flux_header, .flux_content .bottom, .pagination, |
