diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index cc51f90b53..f77fc7ccef 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -100,11 +100,12 @@ abstract class Controller extends BaseController $this->monthFormat = (string)trans('config.month_js', [], $locale); $this->monthAndDayFormat = (string)trans('config.month_and_day_js', [], $locale); $this->dateTimeFormat = (string)trans('config.date_time_js', [], $locale); - + $darkMode = 'browser'; // get shown-intro-preference: if (auth()->check()) { $language = app('steam')->getLanguage(); $locale = app('steam')->getLocale(); + $darkMode = app('preferences')->get('darkMode', 'browser')->data; $page = $this->getPageName(); $shownDemo = $this->hasSeenDemo(); app('view')->share('language', $language); @@ -113,6 +114,7 @@ abstract class Controller extends BaseController app('view')->share('current_route_name', $page); app('view')->share('original_route_name', Route::currentRouteName()); } + app('view')->share('darkMode', $darkMode); return $next($request); } diff --git a/app/Http/Controllers/PreferencesController.php b/app/Http/Controllers/PreferencesController.php index f695d16920..97062d18a6 100644 --- a/app/Http/Controllers/PreferencesController.php +++ b/app/Http/Controllers/PreferencesController.php @@ -32,9 +32,9 @@ use Illuminate\Contracts\View\Factory; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Routing\Redirector; +use Illuminate\Support\Facades\Log; use Illuminate\View\View; use JsonException; -use Illuminate\Support\Facades\Log; use Psr\Container\ContainerExceptionInterface; use Psr\Container\NotFoundExceptionInterface; @@ -102,14 +102,15 @@ class PreferencesController extends Controller $languages = config('firefly.languages'); $locale = app('preferences')->get('locale', config('firefly.default_locale', 'equal'))->data; $listPageSize = app('preferences')->get('listPageSize', 50)->data; + $darkMode = app('preferences')->get('darkMode', 'browser')->data; $slackUrl = app('preferences')->get('slack_webhook_url', '')->data; $customFiscalYear = app('preferences')->get('customFiscalYear', 0)->data; $fiscalYearStartStr = app('preferences')->get('fiscalYearStart', '01-01')->data; $fiscalYearStart = date('Y').'-'.$fiscalYearStartStr; $tjOptionalFields = app('preferences')->get('transaction_journal_optional_fields', [])->data; + $availableDarkModes = config('firefly.available_dark_modes'); // notification preferences (single value for each): - $notifications = []; foreach (config('firefly.available_notifications') as $notification) { $notifications[$notification] = app('preferences')->get(sprintf('notification_%s', $notification), true)->data; @@ -140,6 +141,8 @@ class PreferencesController extends Controller 'isDocker', 'frontPageAccounts', 'languages', + 'darkMode', + 'availableDarkModes', 'notifications', 'slackUrl', 'locales', @@ -257,6 +260,12 @@ class PreferencesController extends Controller ]; app('preferences')->set('transaction_journal_optional_fields', $optionalTj); + // dark mode + $darkMode = $request->get('darkMode') ?? 'browser'; + if(in_array($darkMode, config('firefly.available_dark_modes'), true)) { + app('preferences')->set('darkMode', $darkMode); + } + session()->flash('success', (string)trans('firefly.saved_preferences')); app('preferences')->mark(); diff --git a/config/firefly.php b/config/firefly.php index 7b43095c17..1691ebcae0 100644 --- a/config/firefly.php +++ b/config/firefly.php @@ -205,6 +205,7 @@ return [ ], // default user-related values + 'darkMode' => 'browser', 'list_length' => 10, // to be removed if v1 is cancelled. 'default_preferences' => [ 'frontPageAccounts' => [], @@ -241,6 +242,7 @@ return [ TransactionJournal::class, Recurrence::class, ], + 'available_dark_modes' => ['light', 'dark', 'browser'], 'bill_reminder_periods' => [90, 30, 14, 7, 0], 'valid_view_ranges' => ['1D', '1W', '1M', '3M', '6M', '1Y',], 'allowedMimes' => [ diff --git a/resources/lang/en_US/firefly.php b/resources/lang/en_US/firefly.php index 50583a1be6..461cd5f510 100644 --- a/resources/lang/en_US/firefly.php +++ b/resources/lang/en_US/firefly.php @@ -1262,7 +1262,12 @@ return [ // preferences + 'dark_mode_option_browser' => 'Let your browser decide', + 'dark_mode_option_light' => 'Always light', + 'dark_mode_option_dark' => 'Always dark', 'equal_to_language' => '(equal to language)', + 'dark_mode_preference' => 'Dark mode', + 'dark_mode_preference_help' => 'Tell Firefly III when to use dark mode.', 'pref_home_screen_accounts' => 'Home screen accounts', 'pref_home_screen_accounts_help' => 'Which accounts should be displayed on the home page?', 'pref_view_range' => 'View range', diff --git a/resources/views/layout/default.twig b/resources/views/layout/default.twig index e2652917cb..d9e15c5dda 100644 --- a/resources/views/layout/default.twig +++ b/resources/views/layout/default.twig @@ -29,6 +29,7 @@ {# the theme #} + {% if 'browser' == darkMode %} - - - + + + {% endif %} + {% if 'dark' == darkMode %} + + {% endif %} + {% if 'light' == darkMode %} + + {% endif %} {# Firefly III customisations #} diff --git a/resources/views/layout/empty.twig b/resources/views/layout/empty.twig index 78653895da..3220b082fc 100644 --- a/resources/views/layout/empty.twig +++ b/resources/views/layout/empty.twig @@ -20,19 +20,27 @@ {# the theme #} - - - + {% if 'browser' == darkMode %} + + + + {% endif %} + {% if 'dark' == darkMode %} + + {% endif %} + {% if 'light' == darkMode %} + + {% endif %} {# Firefly III customisations #} diff --git a/resources/views/layout/guest.twig b/resources/views/layout/guest.twig index 495390f8a7..1c57486734 100644 --- a/resources/views/layout/guest.twig +++ b/resources/views/layout/guest.twig @@ -30,19 +30,27 @@ {# the theme #} - - - + {% if 'browser' == darkMode %} + + + + {% endif %} + {% if 'dark' == darkMode %} + + {% endif %} + {% if 'light' == darkMode %} + + {% endif %} {# Firefly III customisations #} diff --git a/resources/views/preferences/index.twig b/resources/views/preferences/index.twig index 63bbfc09a5..5860e8e728 100644 --- a/resources/views/preferences/index.twig +++ b/resources/views/preferences/index.twig @@ -283,6 +283,19 @@
{{ 'list_page_size_help'|_ }}
{{ ExpandedForm.integer('listPageSize',listPageSize,{'label' : 'list_page_size_label'|_}) }} +{{ 'dark_mode_preference_help'|_ }}
+ {% for mode in availableDarkModes %} +