From 42eeb402ad574236902e40d35d630fa15d29a985 Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Tue, 15 Nov 2022 15:42:26 +0100 Subject: Fix type hints regressions (#4855) Fix regressions from https://github.com/FreshRSS/FreshRSS/pull/4561 Example: ``` PHP Fatal error: Uncaught TypeError: Argument 1 passed to checkToken() must be an instance of FreshRSS_UserConfiguration, instance of Minz_Configuration given, called in /var/www/FreshRSS/p/api/greader.php on line 1091 and defined in /var/www/FreshRSS/p/api/greader.php:223 Stack trace: #0 /var/www/FreshRSS/p/api/greader.php(1091): checkToken() #1 {main} thrown in /var/www/FreshRSS/p/api/greader.php on line 223 ``` Improvement of https://github.com/FreshRSS/FreshRSS/pull/4110 --- app/Models/UserConfiguration.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'app/Models/UserConfiguration.php') diff --git a/app/Models/UserConfiguration.php b/app/Models/UserConfiguration.php index 05c3c08ac..b8b023d79 100644 --- a/app/Models/UserConfiguration.php +++ b/app/Models/UserConfiguration.php @@ -66,6 +66,10 @@ * @property string $view_mode * @property array $volatile */ -class FreshRSS_UserConfiguration extends Minz_Configuration { +final class FreshRSS_UserConfiguration extends Minz_Configuration { + public static function init($config_filename, $default_filename = null, $configuration_setter = null): FreshRSS_UserConfiguration { + parent::register('user', $config_filename, $default_filename, $configuration_setter); + return parent::get('user'); + } } -- cgit v1.2.3 From 6261dc9cf41aaaa0eb2a05fbe81bc107ab91bbdd Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Tue, 29 Nov 2022 15:27:32 +0100 Subject: User-defined time zone (#4906) * User-defined time zone #fix https://github.com/FreshRSS/FreshRSS/issues/2754 * Update app/i18n/nl/conf.php Co-authored-by: Frans de Jonge * Timezone when creating a new user Co-authored-by: Frans de Jonge --- app/Controllers/configureController.php | 1 + app/Controllers/userController.php | 1 + app/FreshRSS.php | 3 +++ app/Models/UserConfiguration.php | 1 + app/i18n/cz/conf.php | 1 + app/i18n/de/conf.php | 1 + app/i18n/el/conf.php | 1 + app/i18n/en-us/conf.php | 1 + app/i18n/en/conf.php | 1 + app/i18n/es/conf.php | 1 + app/i18n/fr/conf.php | 1 + app/i18n/he/conf.php | 1 + app/i18n/id/conf.php | 1 + app/i18n/it/conf.php | 1 + app/i18n/ja/conf.php | 1 + app/i18n/ko/conf.php | 1 + app/i18n/nl/conf.php | 1 + app/i18n/oc/conf.php | 1 + app/i18n/pl/conf.php | 1 + app/i18n/pt-br/conf.php | 1 + app/i18n/ru/conf.php | 1 + app/i18n/sk/conf.php | 1 + app/i18n/tr/conf.php | 1 + app/i18n/zh-cn/conf.php | 1 + app/i18n/zh-tw/conf.php | 1 + app/views/auth/register.phtml | 12 ++++++++++++ app/views/configure/display.phtml | 19 +++++++++++++++++++ app/views/user/manage.phtml | 16 ++++++++++++++-- config-user.default.php | 2 ++ 29 files changed, 74 insertions(+), 2 deletions(-) (limited to 'app/Models/UserConfiguration.php') diff --git a/app/Controllers/configureController.php b/app/Controllers/configureController.php index 613bacade..926ab2272 100755 --- a/app/Controllers/configureController.php +++ b/app/Controllers/configureController.php @@ -42,6 +42,7 @@ class FreshRSS_configure_Controller extends FreshRSS_ActionController { public function displayAction() { if (Minz_Request::isPost()) { FreshRSS_Context::$user_conf->language = Minz_Request::param('language', 'en'); + FreshRSS_Context::$user_conf->timezone = Minz_Request::param('timezone', ''); FreshRSS_Context::$user_conf->theme = Minz_Request::param('theme', FreshRSS_Themes::$defaultTheme); FreshRSS_Context::$user_conf->content_width = Minz_Request::param('content_width', 'thin'); FreshRSS_Context::$user_conf->topline_read = Minz_Request::param('topline_read', false); diff --git a/app/Controllers/userController.php b/app/Controllers/userController.php index 06dbab9fa..55b4ca7cb 100644 --- a/app/Controllers/userController.php +++ b/app/Controllers/userController.php @@ -344,6 +344,7 @@ class FreshRSS_user_Controller extends FreshRSS_ActionController { $ok = self::createUser($new_user_name, $email, $passwordPlain, array( 'language' => Minz_Request::param('new_user_language', FreshRSS_Context::$user_conf->language), + 'timezone' => Minz_Request::param('new_user_timezone', ''), 'is_admin' => Minz_Request::paramBoolean('new_user_is_admin'), 'enabled' => true, )); diff --git a/app/FreshRSS.php b/app/FreshRSS.php index 602c46658..02460af69 100644 --- a/app/FreshRSS.php +++ b/app/FreshRSS.php @@ -99,6 +99,9 @@ class FreshRSS extends Minz_FrontController { Minz_Session::_param('language', $language); Minz_Translate::init($language); + + $timezone = isset(FreshRSS_Context::$user_conf) ? FreshRSS_Context::$user_conf->timezone : ''; + date_default_timezone_set($timezone != '' ? $timezone : '' . ini_get('date.timezone')); } private static function getThemeFileUrl($theme_id, $filename) { diff --git a/app/Models/UserConfiguration.php b/app/Models/UserConfiguration.php index b8b023d79..157737cb8 100644 --- a/app/Models/UserConfiguration.php +++ b/app/Models/UserConfiguration.php @@ -28,6 +28,7 @@ * @property-read string $is_admin * @property int|null $keep_history_default * @property string $language + * @property string $timezone * @property bool $lazyload * @property string $mail_login * @property bool $mark_updated_article_unread diff --git a/app/i18n/cz/conf.php b/app/i18n/cz/conf.php index 7b603555c..7b0b85465 100644 --- a/app/i18n/cz/conf.php +++ b/app/i18n/cz/conf.php @@ -57,6 +57,7 @@ return array( 'portrait' => 'Na výšku', 'square' => 'Čtverec', ), + 'timezone' => 'Time zone', // TODO 'title' => 'Zobrazení', 'width' => array( 'content' => 'Šířka obsahu', diff --git a/app/i18n/de/conf.php b/app/i18n/de/conf.php index 5e9cdb36e..52826353b 100644 --- a/app/i18n/de/conf.php +++ b/app/i18n/de/conf.php @@ -57,6 +57,7 @@ return array( 'portrait' => 'Hochformat', 'square' => 'Quadrat', ), + 'timezone' => 'Time zone', // TODO 'title' => 'Anzeige', 'width' => array( 'content' => 'Inhaltsbreite', diff --git a/app/i18n/el/conf.php b/app/i18n/el/conf.php index 98f559d18..a068282ea 100644 --- a/app/i18n/el/conf.php +++ b/app/i18n/el/conf.php @@ -57,6 +57,7 @@ return array( 'portrait' => 'Portrait', // TODO 'square' => 'Square', // TODO ), + 'timezone' => 'Time zone', // TODO 'title' => 'Display', // TODO 'width' => array( 'content' => 'Content width', // TODO diff --git a/app/i18n/en-us/conf.php b/app/i18n/en-us/conf.php index 8330e4970..8a572def3 100644 --- a/app/i18n/en-us/conf.php +++ b/app/i18n/en-us/conf.php @@ -57,6 +57,7 @@ return array( 'portrait' => 'Portrait', // IGNORE 'square' => 'Square', // IGNORE ), + 'timezone' => 'Time zone', // IGNORE 'title' => 'Display', // IGNORE 'width' => array( 'content' => 'Content width', // IGNORE diff --git a/app/i18n/en/conf.php b/app/i18n/en/conf.php index fe03499ea..d6633f981 100644 --- a/app/i18n/en/conf.php +++ b/app/i18n/en/conf.php @@ -57,6 +57,7 @@ return array( 'portrait' => 'Portrait', 'square' => 'Square', ), + 'timezone' => 'Time zone', 'title' => 'Display', 'width' => array( 'content' => 'Content width', diff --git a/app/i18n/es/conf.php b/app/i18n/es/conf.php index c91b0205c..8c77dcd7e 100755 --- a/app/i18n/es/conf.php +++ b/app/i18n/es/conf.php @@ -57,6 +57,7 @@ return array( 'portrait' => 'Retrato', 'square' => 'Cuadrado', ), + 'timezone' => 'Time zone', // TODO 'title' => 'Visualización', 'width' => array( 'content' => 'Ancho de contenido', diff --git a/app/i18n/fr/conf.php b/app/i18n/fr/conf.php index 61306289c..71902d96d 100644 --- a/app/i18n/fr/conf.php +++ b/app/i18n/fr/conf.php @@ -57,6 +57,7 @@ return array( 'portrait' => 'Portrait', // IGNORE 'square' => 'Carrée', ), + 'timezone' => 'Fuseau horaire', 'title' => 'Affichage', 'width' => array( 'content' => 'Largeur du contenu', diff --git a/app/i18n/he/conf.php b/app/i18n/he/conf.php index ad479db44..ec322fddf 100644 --- a/app/i18n/he/conf.php +++ b/app/i18n/he/conf.php @@ -57,6 +57,7 @@ return array( 'portrait' => 'Portrait', // TODO 'square' => 'Square', // TODO ), + 'timezone' => 'Time zone', // TODO 'title' => 'תצוגה', 'width' => array( 'content' => 'רוחב התוכן', diff --git a/app/i18n/id/conf.php b/app/i18n/id/conf.php index b8a5b4fc1..f46347fe2 100644 --- a/app/i18n/id/conf.php +++ b/app/i18n/id/conf.php @@ -57,6 +57,7 @@ return array( 'portrait' => 'Portrait', // TODO 'square' => 'Square', // TODO ), + 'timezone' => 'Time zone', // TODO 'title' => 'Display', // TODO 'width' => array( 'content' => 'Content width', // TODO diff --git a/app/i18n/it/conf.php b/app/i18n/it/conf.php index 4597687cc..8efe6be41 100644 --- a/app/i18n/it/conf.php +++ b/app/i18n/it/conf.php @@ -57,6 +57,7 @@ return array( 'portrait' => 'Ritratto', 'square' => 'Squadrata', ), + 'timezone' => 'Time zone', // TODO 'title' => 'Visualizzazione', 'width' => array( 'content' => 'Larghezza contenuto', diff --git a/app/i18n/ja/conf.php b/app/i18n/ja/conf.php index 5e9aabfa2..f84354c36 100644 --- a/app/i18n/ja/conf.php +++ b/app/i18n/ja/conf.php @@ -57,6 +57,7 @@ return array( 'portrait' => 'ポートレート', 'square' => '四角', ), + 'timezone' => 'Time zone', // TODO 'title' => 'ディスプレイ', 'width' => array( 'content' => 'コンテンツ幅', diff --git a/app/i18n/ko/conf.php b/app/i18n/ko/conf.php index 279f2f4ad..95fda6969 100644 --- a/app/i18n/ko/conf.php +++ b/app/i18n/ko/conf.php @@ -57,6 +57,7 @@ return array( 'portrait' => '세로 방향', 'square' => '정사각형', ), + 'timezone' => 'Time zone', // TODO 'title' => '표시', 'width' => array( 'content' => '내용 표시 너비', diff --git a/app/i18n/nl/conf.php b/app/i18n/nl/conf.php index 8b3d597b1..261c3aa33 100644 --- a/app/i18n/nl/conf.php +++ b/app/i18n/nl/conf.php @@ -57,6 +57,7 @@ return array( 'portrait' => 'Staand', 'square' => 'Vierkant', ), + 'timezone' => 'Tijdzone', 'title' => 'Opmaak', 'width' => array( 'content' => 'Inhoud breedte', diff --git a/app/i18n/oc/conf.php b/app/i18n/oc/conf.php index c1834e9aa..9f157a497 100644 --- a/app/i18n/oc/conf.php +++ b/app/i18n/oc/conf.php @@ -57,6 +57,7 @@ return array( 'portrait' => 'Retrach', 'square' => 'Carrat', ), + 'timezone' => 'Time zone', // TODO 'title' => 'Afichatge', 'width' => array( 'content' => 'Largor del contengut', diff --git a/app/i18n/pl/conf.php b/app/i18n/pl/conf.php index 31b0d238c..3349bbf53 100644 --- a/app/i18n/pl/conf.php +++ b/app/i18n/pl/conf.php @@ -57,6 +57,7 @@ return array( 'portrait' => 'Portret', 'square' => 'Kwadrat', ), + 'timezone' => 'Time zone', // TODO 'title' => 'Wyświetlanie', 'width' => array( 'content' => 'Rozmiar treści', diff --git a/app/i18n/pt-br/conf.php b/app/i18n/pt-br/conf.php index b925aee21..bcf9fbd2f 100644 --- a/app/i18n/pt-br/conf.php +++ b/app/i18n/pt-br/conf.php @@ -57,6 +57,7 @@ return array( 'portrait' => 'Modo retrato', 'square' => 'Modo quadrado', ), + 'timezone' => 'Time zone', // TODO 'title' => 'Exibição', 'width' => array( 'content' => 'Largura do conteúdo', diff --git a/app/i18n/ru/conf.php b/app/i18n/ru/conf.php index c0d25aec1..98e6f5003 100644 --- a/app/i18n/ru/conf.php +++ b/app/i18n/ru/conf.php @@ -57,6 +57,7 @@ return array( 'portrait' => 'Вертикальный', 'square' => 'Квадратный', ), + 'timezone' => 'Time zone', // TODO 'title' => 'Отображение', 'width' => array( 'content' => 'Ширина содержимого', diff --git a/app/i18n/sk/conf.php b/app/i18n/sk/conf.php index 7efc3a75d..822de7b09 100644 --- a/app/i18n/sk/conf.php +++ b/app/i18n/sk/conf.php @@ -57,6 +57,7 @@ return array( 'portrait' => 'Nastojato', 'square' => 'Štvorec', ), + 'timezone' => 'Time zone', // TODO 'title' => 'Zobraziť', 'width' => array( 'content' => 'Šírka obsahu', diff --git a/app/i18n/tr/conf.php b/app/i18n/tr/conf.php index 7220d6670..14eb152c3 100644 --- a/app/i18n/tr/conf.php +++ b/app/i18n/tr/conf.php @@ -57,6 +57,7 @@ return array( 'portrait' => 'Portre', 'square' => 'Kare', ), + 'timezone' => 'Time zone', // TODO 'title' => 'Görünüm', 'width' => array( 'content' => 'İçerik genişliği', diff --git a/app/i18n/zh-cn/conf.php b/app/i18n/zh-cn/conf.php index 3a1282a12..a4d293aeb 100644 --- a/app/i18n/zh-cn/conf.php +++ b/app/i18n/zh-cn/conf.php @@ -57,6 +57,7 @@ return array( 'portrait' => '纵向', 'square' => '方形', ), + 'timezone' => 'Time zone', // TODO 'title' => '显示', 'width' => array( 'content' => '内容宽度', diff --git a/app/i18n/zh-tw/conf.php b/app/i18n/zh-tw/conf.php index 15fabaa40..61ba44151 100644 --- a/app/i18n/zh-tw/conf.php +++ b/app/i18n/zh-tw/conf.php @@ -57,6 +57,7 @@ return array( 'portrait' => '肖像', 'square' => '方塊', ), + 'timezone' => 'Time zone', // TODO 'title' => '顯示', 'width' => array( 'content' => '內容寬度', diff --git a/app/views/auth/register.phtml b/app/views/auth/register.phtml index a56eff3ee..66c4a1ccb 100644 --- a/app/views/auth/register.phtml +++ b/app/views/auth/register.phtml @@ -15,6 +15,18 @@ +
+ + +
+
+
+ +
+ +
+
+
diff --git a/app/views/user/manage.phtml b/app/views/user/manage.phtml index 0d01d33d7..22a1a4d03 100644 --- a/app/views/user/manage.phtml +++ b/app/views/user/manage.phtml @@ -15,8 +15,6 @@ - -
@@ -30,6 +28,20 @@
+
+ +
+ +
+
+
diff --git a/config-user.default.php b/config-user.default.php index f7759396a..e1f332bf2 100644 --- a/config-user.default.php +++ b/config-user.default.php @@ -7,6 +7,8 @@ return array ( 'enabled' => true, 'is_admin' => false, 'language' => 'en', + // A timezone identifier such as 'Europe/Paris' https://php.net/timezones or blank for server default + 'timezone' => '', 'archiving' => [ 'keep_period' => 'P3M', 'keep_max' => 200, -- cgit v1.2.3 From b5a418ec1618cb1a058aee3dd47baa63562c9194 Mon Sep 17 00:00:00 2001 From: maTh Date: Mon, 9 Jan 2023 10:40:38 +0100 Subject: Added: Dark mode for Origine +Origine compact themes (#4843) * first draft * fix: theme slider: properties box * improved colors * option to enable/disable dark mode * fixes * Update app/i18n/fr/conf.php Co-authored-by: Alexandre Alapetite * i18n english improved * fix dark background color for favorites + hover colors * select list: no, auto Co-authored-by: Alexandre Alapetite --- app/Controllers/configureController.php | 2 + app/Models/ConfigurationSetter.php | 7 ++ app/Models/UserConfiguration.php | 1 + app/i18n/cz/conf.php | 1 + app/i18n/de/conf.php | 1 + app/i18n/el/conf.php | 1 + app/i18n/en-us/conf.php | 1 + app/i18n/en/conf.php | 1 + app/i18n/es/conf.php | 1 + app/i18n/fr/conf.php | 1 + app/i18n/he/conf.php | 1 + app/i18n/id/conf.php | 1 + app/i18n/it/conf.php | 1 + app/i18n/ja/conf.php | 1 + app/i18n/ko/conf.php | 1 + app/i18n/nl/conf.php | 1 + app/i18n/oc/conf.php | 1 + app/i18n/pl/conf.php | 1 + app/i18n/pt-br/conf.php | 1 + app/i18n/ru/conf.php | 1 + app/i18n/sk/conf.php | 1 + app/i18n/tr/conf.php | 1 + app/i18n/zh-cn/conf.php | 1 + app/i18n/zh-tw/conf.php | 1 + app/layout/layout.phtml | 2 +- app/views/configure/display.phtml | 10 ++ config-user.default.php | 1 + p/themes/Origine-compact/origine-compact.css | 5 - p/themes/Origine-compact/origine-compact.rtl.css | 5 - p/themes/Origine/origine.css | 119 +++++++++++++++++++++-- p/themes/Origine/origine.rtl.css | 119 +++++++++++++++++++++-- 31 files changed, 265 insertions(+), 27 deletions(-) (limited to 'app/Models/UserConfiguration.php') diff --git a/app/Controllers/configureController.php b/app/Controllers/configureController.php index 926ab2272..710a927d6 100755 --- a/app/Controllers/configureController.php +++ b/app/Controllers/configureController.php @@ -25,6 +25,7 @@ class FreshRSS_configure_Controller extends FreshRSS_ActionController { * The options available on the page are: * - language (default: en) * - theme (default: Origin) + * - darkMode (default: no) * - content width (default: thin) * - display of read action in header * - display of favorite action in header @@ -44,6 +45,7 @@ class FreshRSS_configure_Controller extends FreshRSS_ActionController { FreshRSS_Context::$user_conf->language = Minz_Request::param('language', 'en'); FreshRSS_Context::$user_conf->timezone = Minz_Request::param('timezone', ''); FreshRSS_Context::$user_conf->theme = Minz_Request::param('theme', FreshRSS_Themes::$defaultTheme); + FreshRSS_Context::$user_conf->darkMode = Minz_Request::param('darkMode', 'no'); FreshRSS_Context::$user_conf->content_width = Minz_Request::param('content_width', 'thin'); FreshRSS_Context::$user_conf->topline_read = Minz_Request::param('topline_read', false); FreshRSS_Context::$user_conf->topline_favorite = Minz_Request::param('topline_favorite', false); diff --git a/app/Models/ConfigurationSetter.php b/app/Models/ConfigurationSetter.php index c822bcf4d..258c2ad58 100644 --- a/app/Models/ConfigurationSetter.php +++ b/app/Models/ConfigurationSetter.php @@ -234,6 +234,13 @@ class FreshRSS_ConfigurationSetter { $data['sticky_post'] = $this->handleBool($value); } + private function _darkMode(&$data, $value) { + if (!in_array($value, [ 'no', 'auto'], true)) { + $value = 'no'; + } + $data['darkMode'] = $value; + } + private function _bottomline_date(&$data, $value) { $data['bottomline_date'] = $this->handleBool($value); } diff --git a/app/Models/UserConfiguration.php b/app/Models/UserConfiguration.php index 157737cb8..53b12cc2e 100644 --- a/app/Models/UserConfiguration.php +++ b/app/Models/UserConfiguration.php @@ -53,6 +53,7 @@ * @property bool $sides_close_article * @property bool $sticky_post * @property string $theme + * @property string $darkMode * @property string $token * @property bool $topline_date * @property bool $topline_display_authors diff --git a/app/i18n/cz/conf.php b/app/i18n/cz/conf.php index 7b0b85465..9d646be36 100644 --- a/app/i18n/cz/conf.php +++ b/app/i18n/cz/conf.php @@ -32,6 +32,7 @@ return array( ), 'display' => array( '_' => 'Zobrazení', + 'darkMode' => 'Automatic dark mode (beta)', // TODO 'icon' => array( 'bottom_line' => 'Spodní řádek', 'display_authors' => 'Autoři', diff --git a/app/i18n/de/conf.php b/app/i18n/de/conf.php index 52826353b..33604b618 100644 --- a/app/i18n/de/conf.php +++ b/app/i18n/de/conf.php @@ -32,6 +32,7 @@ return array( ), 'display' => array( '_' => 'Anzeige', + 'darkMode' => 'Automatic dark mode (beta)', // TODO 'icon' => array( 'bottom_line' => 'Fußzeile', 'display_authors' => 'Autoren', diff --git a/app/i18n/el/conf.php b/app/i18n/el/conf.php index a068282ea..e2629bd54 100644 --- a/app/i18n/el/conf.php +++ b/app/i18n/el/conf.php @@ -32,6 +32,7 @@ return array( ), 'display' => array( '_' => 'Display', // TODO + 'darkMode' => 'Automatic dark mode (beta)', // TODO 'icon' => array( 'bottom_line' => 'Bottom line', // TODO 'display_authors' => 'Authors', // TODO diff --git a/app/i18n/en-us/conf.php b/app/i18n/en-us/conf.php index 8a572def3..760cbf37f 100644 --- a/app/i18n/en-us/conf.php +++ b/app/i18n/en-us/conf.php @@ -32,6 +32,7 @@ return array( ), 'display' => array( '_' => 'Display', // IGNORE + 'darkMode' => 'Automatic dark mode (beta)', // TODO 'icon' => array( 'bottom_line' => 'Bottom line', // IGNORE 'display_authors' => 'Authors', // IGNORE diff --git a/app/i18n/en/conf.php b/app/i18n/en/conf.php index d6633f981..02f95b6a8 100644 --- a/app/i18n/en/conf.php +++ b/app/i18n/en/conf.php @@ -32,6 +32,7 @@ return array( ), 'display' => array( '_' => 'Display', + 'darkMode' => 'Automatic dark mode (beta)', // TODO 'icon' => array( 'bottom_line' => 'Bottom line', 'display_authors' => 'Authors', diff --git a/app/i18n/es/conf.php b/app/i18n/es/conf.php index 8c77dcd7e..74d324c24 100755 --- a/app/i18n/es/conf.php +++ b/app/i18n/es/conf.php @@ -32,6 +32,7 @@ return array( ), 'display' => array( '_' => 'Visualización', + 'darkMode' => 'Automatic dark mode (beta)', // TODO 'icon' => array( 'bottom_line' => 'Línea inferior', 'display_authors' => 'Autores/Autoras', diff --git a/app/i18n/fr/conf.php b/app/i18n/fr/conf.php index 71902d96d..88a51eee1 100644 --- a/app/i18n/fr/conf.php +++ b/app/i18n/fr/conf.php @@ -32,6 +32,7 @@ return array( ), 'display' => array( '_' => 'Affichage', + 'darkMode' => 'Mode sombre automatique (bêta)', 'icon' => array( 'bottom_line' => 'Ligne du bas', 'display_authors' => 'Auteurs', diff --git a/app/i18n/he/conf.php b/app/i18n/he/conf.php index ec322fddf..2d0eea4b9 100644 --- a/app/i18n/he/conf.php +++ b/app/i18n/he/conf.php @@ -32,6 +32,7 @@ return array( ), 'display' => array( '_' => 'תצוגה', + 'darkMode' => 'Automatic dark mode (beta)', // TODO 'icon' => array( 'bottom_line' => 'שורה תחתונה', 'display_authors' => 'Authors', // TODO diff --git a/app/i18n/id/conf.php b/app/i18n/id/conf.php index f46347fe2..10f649823 100644 --- a/app/i18n/id/conf.php +++ b/app/i18n/id/conf.php @@ -32,6 +32,7 @@ return array( ), 'display' => array( '_' => 'Display', // TODO + 'darkMode' => 'Automatic dark mode (beta)', // TODO 'icon' => array( 'bottom_line' => 'Bottom line', // TODO 'display_authors' => 'Authors', // TODO diff --git a/app/i18n/it/conf.php b/app/i18n/it/conf.php index 8efe6be41..5065fe7ea 100644 --- a/app/i18n/it/conf.php +++ b/app/i18n/it/conf.php @@ -32,6 +32,7 @@ return array( ), 'display' => array( '_' => 'Visualizzazione', + 'darkMode' => 'Automatic dark mode (beta)', // TODO 'icon' => array( 'bottom_line' => 'Barra in fondo', 'display_authors' => 'Autori', diff --git a/app/i18n/ja/conf.php b/app/i18n/ja/conf.php index f84354c36..1247a0ce9 100644 --- a/app/i18n/ja/conf.php +++ b/app/i18n/ja/conf.php @@ -32,6 +32,7 @@ return array( ), 'display' => array( '_' => '表示', + 'darkMode' => 'Automatic dark mode (beta)', // TODO 'icon' => array( 'bottom_line' => '行の下部', 'display_authors' => '著者', diff --git a/app/i18n/ko/conf.php b/app/i18n/ko/conf.php index 95fda6969..9ee82802e 100644 --- a/app/i18n/ko/conf.php +++ b/app/i18n/ko/conf.php @@ -32,6 +32,7 @@ return array( ), 'display' => array( '_' => '표시', + 'darkMode' => 'Automatic dark mode (beta)', // TODO 'icon' => array( 'bottom_line' => '하단', 'display_authors' => '저자', diff --git a/app/i18n/nl/conf.php b/app/i18n/nl/conf.php index 261c3aa33..8a22f9e27 100644 --- a/app/i18n/nl/conf.php +++ b/app/i18n/nl/conf.php @@ -32,6 +32,7 @@ return array( ), 'display' => array( '_' => 'Opmaak', + 'darkMode' => 'Automatic dark mode (beta)', // TODO 'icon' => array( 'bottom_line' => 'Onderaan', 'display_authors' => 'Auteurs', diff --git a/app/i18n/oc/conf.php b/app/i18n/oc/conf.php index 9f157a497..4d1e03786 100644 --- a/app/i18n/oc/conf.php +++ b/app/i18n/oc/conf.php @@ -32,6 +32,7 @@ return array( ), 'display' => array( '_' => 'Afichatge', + 'darkMode' => 'Automatic dark mode (beta)', // TODO 'icon' => array( 'bottom_line' => 'Linha enbàs', 'display_authors' => 'Autors', diff --git a/app/i18n/pl/conf.php b/app/i18n/pl/conf.php index 3349bbf53..f026fe128 100644 --- a/app/i18n/pl/conf.php +++ b/app/i18n/pl/conf.php @@ -32,6 +32,7 @@ return array( ), 'display' => array( '_' => 'Wyświetlanie', + 'darkMode' => 'Automatic dark mode (beta)', // TODO 'icon' => array( 'bottom_line' => 'Dolny margines', 'display_authors' => 'Autorzy', diff --git a/app/i18n/pt-br/conf.php b/app/i18n/pt-br/conf.php index bcf9fbd2f..dc05a0fa0 100644 --- a/app/i18n/pt-br/conf.php +++ b/app/i18n/pt-br/conf.php @@ -32,6 +32,7 @@ return array( ), 'display' => array( '_' => 'Exibição', + 'darkMode' => 'Automatic dark mode (beta)', // TODO 'icon' => array( 'bottom_line' => 'Linha inferior', 'display_authors' => 'Autores', diff --git a/app/i18n/ru/conf.php b/app/i18n/ru/conf.php index 98e6f5003..4d65a9dcb 100644 --- a/app/i18n/ru/conf.php +++ b/app/i18n/ru/conf.php @@ -32,6 +32,7 @@ return array( ), 'display' => array( '_' => 'Отображение', + 'darkMode' => 'Automatic dark mode (beta)', // TODO 'icon' => array( 'bottom_line' => 'Нижняя линия', 'display_authors' => 'Авторы', diff --git a/app/i18n/sk/conf.php b/app/i18n/sk/conf.php index 822de7b09..ab68d07ca 100644 --- a/app/i18n/sk/conf.php +++ b/app/i18n/sk/conf.php @@ -32,6 +32,7 @@ return array( ), 'display' => array( '_' => 'Zobrazenie', + 'darkMode' => 'Automatic dark mode (beta)', // TODO 'icon' => array( 'bottom_line' => 'Spodný riadok', 'display_authors' => 'Autori', diff --git a/app/i18n/tr/conf.php b/app/i18n/tr/conf.php index 14eb152c3..cb72d3973 100644 --- a/app/i18n/tr/conf.php +++ b/app/i18n/tr/conf.php @@ -32,6 +32,7 @@ return array( ), 'display' => array( '_' => 'Görünüm', + 'darkMode' => 'Automatic dark mode (beta)', // TODO 'icon' => array( 'bottom_line' => 'Alt çizgi', 'display_authors' => 'Yazarlar', diff --git a/app/i18n/zh-cn/conf.php b/app/i18n/zh-cn/conf.php index a4d293aeb..d558c025e 100644 --- a/app/i18n/zh-cn/conf.php +++ b/app/i18n/zh-cn/conf.php @@ -32,6 +32,7 @@ return array( ), 'display' => array( '_' => '显示', + 'darkMode' => 'Automatic dark mode (beta)', // TODO 'icon' => array( 'bottom_line' => '底栏', 'display_authors' => '作者', diff --git a/app/i18n/zh-tw/conf.php b/app/i18n/zh-tw/conf.php index 61ba44151..3001f64c5 100644 --- a/app/i18n/zh-tw/conf.php +++ b/app/i18n/zh-tw/conf.php @@ -32,6 +32,7 @@ return array( ), 'display' => array( '_' => '顯示', + 'darkMode' => 'Automatic dark mode (beta)', // TODO 'icon' => array( 'bottom_line' => '底欄', 'display_authors' => '作者', diff --git a/app/layout/layout.phtml b/app/layout/layout.phtml index 48ada7183..1e9ce6905 100644 --- a/app/layout/layout.phtml +++ b/app/layout/layout.phtml @@ -52,7 +52,7 @@ if (_t('gen.dir') === 'rtl') { - +
+
+ +
+ +
+
+ content_width; ?>
diff --git a/config-user.default.php b/config-user.default.php index e1f332bf2..5a26841ac 100644 --- a/config-user.default.php +++ b/config-user.default.php @@ -64,6 +64,7 @@ return array ( 'site' => true, ), 'theme' => 'Origine', + 'darkMode' => 'no', 'content_width' => 'thin', 'shortcuts' => array ( 'actualize' => 'q', diff --git a/p/themes/Origine-compact/origine-compact.css b/p/themes/Origine-compact/origine-compact.css index bea5d5cf6..d94b09fb7 100644 --- a/p/themes/Origine-compact/origine-compact.css +++ b/p/themes/Origine-compact/origine-compact.css @@ -40,11 +40,6 @@ a.btn, } /*=== Dropdown */ -.item ~ .dropdown-header, -.item.separator { - border-top-color: #ddd; -} - /*=== Alerts */ /*=== Pagination */ /*=== Boxes */ diff --git a/p/themes/Origine-compact/origine-compact.rtl.css b/p/themes/Origine-compact/origine-compact.rtl.css index 8929847bb..c98c5f6da 100644 --- a/p/themes/Origine-compact/origine-compact.rtl.css +++ b/p/themes/Origine-compact/origine-compact.rtl.css @@ -40,11 +40,6 @@ a.btn, } /*=== Dropdown */ -.item ~ .dropdown-header, -.item.separator { - border-top-color: #ddd; -} - /*=== Alerts */ /*=== Pagination */ /*=== Boxes */ diff --git a/p/themes/Origine/origine.css b/p/themes/Origine/origine.css index fd119fe19..af9d3330a 100644 --- a/p/themes/Origine/origine.css +++ b/p/themes/Origine/origine.css @@ -12,8 +12,10 @@ --background-color-hover: #f6f6f6; --unread-article-background-color: #fff3ed; + --unread-article-background-color-hover: #faeee8; --unread-article-border-color: #ff5300; --favorite-article-background-color: #fff6da; + --favorite-article-background-color-hover: #fcf2d6; --favorite-article-border-color: #ffc300; --contrast-background-color: #0084cc; @@ -825,34 +827,42 @@ a:hover .icon { border-left: 2px solid var(--contrast-border-color-active); } -.flux .flux_header:hover { - background-color: var(--background-color-hover) !important; +.flux .flux_header:hover, +.flux .flux_header:hover .item { + background-color: var(--background-color-hover); } -.flux .flux_header:not(.current):hover .item.title { - background: inherit; +.flux .flux_header:not(.current):hover .flux_header, +.flux .flux_header:not(.current):hover .flux_header .item { + background-color: var(--background-color-hover); } .flux.not_read { border-left: 2px solid var(--unread-article-border-color); } -.flux.not_read .flux_header { +.flux.not_read .flux_header .item { background-color: var(--unread-article-background-color); } -.flux.not_read:not(.current):hover .item.title { - background: inherit; +.flux.not_read:not(.current):hover .flux_header, +.flux.not_read:not(.current):hover .flux_header .item { + background-color: var(--unread-article-background-color-hover); } .flux.favorite { border-left: 2px solid var(--favorite-article-border-color); } -.flux.favorite:not(.current) { +.flux.favorite:not(.current) .flux_header .item { background-color: var(--favorite-article-background-color); } +.flux.favorite:not(.current):hover .flux_header, +.flux.favorite:not(.current):hover .flux_header .item { + background-color: var(--favorite-article-background-color-hover); +} + .flux_header { font-size: 0.9rem; border-top: 1px solid var(--border-color); @@ -1188,3 +1198,96 @@ a:hover .icon { display: none; } } + +@media screen and (prefers-color-scheme: dark) { + :root .darkMode_auto { + --frss-background-color: #000; + --frss-background-color-middle: #222; + --frss-border-color: #444; + --frss-font-color-grey-dark: #999; + --frss-font-color-dark: #ddd; + --frss-modal-background-color-transparent: #000000a3; + --frss-background-color-transparent: #000000a3; + --frss-scrollbar-handle: #fff1; + --frss-scrollbar-handle-hover: #fff4; + + --background-color-light-gradient: #111; + --background-color-light: #111; + --background-color-light-shadowed: #191919; + --background-color-grey: #1f1f1f; + --background-color-hover: #09090977; + + --unread-article-background-color: #201f1e; + --unread-article-background-color-hover: #1a1918; + --unread-article-border-color: #ff5300; + --favorite-article-background-color: #24221d; + --favorite-article-background-color-hover: #1d1b17; + --favorite-article-border-color: #ffc300; + + --contrast-background-color: #0084cc; + --contrast-background-color-gradient: #0045cc; + --contrast-background-color-hover: #06c; + --contrast-background-color-active: #038; + --contrast-border-color: #0062b7; + + --contrast-background-font-color: #eee; + + --attention-background-color-gradient1: #ea4a46; + --attention-background-color-gradient2: #911811; + + --attention-background-color-gradient1-hover: #d14641; + --attention-background-color-gradient2-hover: #bd362f; + --attention-background-color-active: #bd362f; + --attention-border-color: #c44742; + + --empty-feed-color: #e67e22; + --error-feed-color: #bd362f; + + --alert-warn-background-color: #ffffe022; + --alert-warn-font-color: #ccc; + --alert-warn-border-color: #eeb; + --alert-success-background-color: #e8ffe814; + --alert-success-font-color: #96c196; + --alert-success-border-color: #cec; + --alert-error-background-color: #fdda; + --alert-error-font-color: #693a3a; + --alert-error-boder-color: #ecc; + + --notification-good-background-color: #ffe; + --notification-good-border-color: #eeb; + --notification-good-font-color: #916a37; + --notification-bad-background-color: #fdd; + --notification-bad-font-color: #643838; + --notification-bad-border-color: #ecc; + --notification-close-background-color-hover: #aaa2; + + --font-color: #ccc; + --font-color-grey: #aaa; + --font-color-light-shadowed: #555; + --font-color-light: #ccc; + + --text-shadow-color: #1c1c1c; + --text-shadow-color-dark: #666; + --box-shadow-color: #4446; + --box-shadow-color-inset: #1f1f1f; + + --font-color-link: #467eb3; + --font-color-link-hover: #0062be; + + --border-color: #222; + --border-color-shadow-side: #333; + --contrast-border-color-active: #0062be; + + --form-element-font-color-focus: #879db1; + --form-element-border-color-focus: #0062be; + --form-element-focus-box-shadow-color-inset: #110; + --form-element-border-color-invalid: #f00; + --form-element-invalid-box-shadow-color-inset: #fdd; + } + + .btn.active, + .btn:active, + .dropdown-target:target ~ .btn.dropdown-toggle { + background: var(--border-color); + } +} diff --git a/p/themes/Origine/origine.rtl.css b/p/themes/Origine/origine.rtl.css index 9127ac9e8..27c381f6a 100644 --- a/p/themes/Origine/origine.rtl.css +++ b/p/themes/Origine/origine.rtl.css @@ -12,8 +12,10 @@ --background-color-hover: #f6f6f6; --unread-article-background-color: #fff3ed; + --unread-article-background-color-hover: #faeee8; --unread-article-border-color: #ff5300; --favorite-article-background-color: #fff6da; + --favorite-article-background-color-hover: #fcf2d6; --favorite-article-border-color: #ffc300; --contrast-background-color: #0084cc; @@ -825,34 +827,42 @@ a:hover .icon { border-right: 2px solid var(--contrast-border-color-active); } -.flux .flux_header:hover { - background-color: var(--background-color-hover) !important; +.flux .flux_header:hover, +.flux .flux_header:hover .item { + background-color: var(--background-color-hover); } -.flux .flux_header:not(.current):hover .item.title { - background: inherit; +.flux .flux_header:not(.current):hover .flux_header, +.flux .flux_header:not(.current):hover .flux_header .item { + background-color: var(--background-color-hover); } .flux.not_read { border-right: 2px solid var(--unread-article-border-color); } -.flux.not_read .flux_header { +.flux.not_read .flux_header .item { background-color: var(--unread-article-background-color); } -.flux.not_read:not(.current):hover .item.title { - background: inherit; +.flux.not_read:not(.current):hover .flux_header, +.flux.not_read:not(.current):hover .flux_header .item { + background-color: var(--unread-article-background-color-hover); } .flux.favorite { border-right: 2px solid var(--favorite-article-border-color); } -.flux.favorite:not(.current) { +.flux.favorite:not(.current) .flux_header .item { background-color: var(--favorite-article-background-color); } +.flux.favorite:not(.current):hover .flux_header, +.flux.favorite:not(.current):hover .flux_header .item { + background-color: var(--favorite-article-background-color-hover); +} + .flux_header { font-size: 0.9rem; border-top: 1px solid var(--border-color); @@ -1188,3 +1198,96 @@ a:hover .icon { display: none; } } + +@media screen and (prefers-color-scheme: dark) { + :root .darkMode_auto { + --frss-background-color: #000; + --frss-background-color-middle: #222; + --frss-border-color: #444; + --frss-font-color-grey-dark: #999; + --frss-font-color-dark: #ddd; + --frss-modal-background-color-transparent: #000000a3; + --frss-background-color-transparent: #000000a3; + --frss-scrollbar-handle: #fff1; + --frss-scrollbar-handle-hover: #fff4; + + --background-color-light-gradient: #111; + --background-color-light: #111; + --background-color-light-shadowed: #191919; + --background-color-grey: #1f1f1f; + --background-color-hover: #09090977; + + --unread-article-background-color: #201f1e; + --unread-article-background-color-hover: #1a1918; + --unread-article-border-color: #ff5300; + --favorite-article-background-color: #24221d; + --favorite-article-background-color-hover: #1d1b17; + --favorite-article-border-color: #ffc300; + + --contrast-background-color: #0084cc; + --contrast-background-color-gradient: #0045cc; + --contrast-background-color-hover: #06c; + --contrast-background-color-active: #038; + --contrast-border-color: #0062b7; + + --contrast-background-font-color: #eee; + + --attention-background-color-gradient1: #ea4a46; + --attention-background-color-gradient2: #911811; + + --attention-background-color-gradient1-hover: #d14641; + --attention-background-color-gradient2-hover: #bd362f; + --attention-background-color-active: #bd362f; + --attention-border-color: #c44742; + + --empty-feed-color: #e67e22; + --error-feed-color: #bd362f; + + --alert-warn-background-color: #ffffe022; + --alert-warn-font-color: #ccc; + --alert-warn-border-color: #eeb; + --alert-success-background-color: #e8ffe814; + --alert-success-font-color: #96c196; + --alert-success-border-color: #cec; + --alert-error-background-color: #fdda; + --alert-error-font-color: #693a3a; + --alert-error-boder-color: #ecc; + + --notification-good-background-color: #ffe; + --notification-good-border-color: #eeb; + --notification-good-font-color: #916a37; + --notification-bad-background-color: #fdd; + --notification-bad-font-color: #643838; + --notification-bad-border-color: #ecc; + --notification-close-background-color-hover: #aaa2; + + --font-color: #ccc; + --font-color-grey: #aaa; + --font-color-light-shadowed: #555; + --font-color-light: #ccc; + + --text-shadow-color: #1c1c1c; + --text-shadow-color-dark: #666; + --box-shadow-color: #4446; + --box-shadow-color-inset: #1f1f1f; + + --font-color-link: #467eb3; + --font-color-link-hover: #0062be; + + --border-color: #222; + --border-color-shadow-side: #333; + --contrast-border-color-active: #0062be; + + --form-element-font-color-focus: #879db1; + --form-element-border-color-focus: #0062be; + --form-element-focus-box-shadow-color-inset: #110; + --form-element-border-color-invalid: #f00; + --form-element-invalid-box-shadow-color-inset: #fdd; + } + + .btn.active, + .btn:active, + .dropdown-target:target ~ .btn.dropdown-toggle { + background: var(--border-color); + } +} -- cgit v1.2.3