#14 Introduce dark mode
This commit is contained in:
@@ -3,7 +3,7 @@ package de.financer.chart;
|
|||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
|
||||||
public class ChartDefinitions {
|
public class ChartDefinitions {
|
||||||
public static final Color TRANSPARENT = new Color(0.0f, 0.0f, 0.0f, 0.0f);
|
public static final Color TRANSPARENT = new Color(0xFF, 0xFF, 0xFF, 0);
|
||||||
public static final Color BLUE = new Color(0, 143, 251);
|
public static final Color BLUE = new Color(0, 143, 251);
|
||||||
public static final Color RED = new Color(211, 0, 0);
|
public static final Color RED = new Color(211, 0, 0);
|
||||||
public static final Color GREEN = new Color(0, 169, 0);
|
public static final Color GREEN = new Color(0, 169, 0);
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ public class ExpensesAllPeriodsGenerator extends AbstractChartGenerator<EmptyPar
|
|||||||
chart.getCategoryPlot().setOutlineVisible(false);
|
chart.getCategoryPlot().setOutlineVisible(false);
|
||||||
|
|
||||||
chart.getCategoryPlot().setBackgroundPaint(ChartDefinitions.TRANSPARENT);
|
chart.getCategoryPlot().setBackgroundPaint(ChartDefinitions.TRANSPARENT);
|
||||||
|
chart.setBackgroundPaint(ChartDefinitions.TRANSPARENT);
|
||||||
|
|
||||||
chart.getCategoryPlot().getRenderer().setSeriesPaint(0, ChartDefinitions.BLUE);
|
chart.getCategoryPlot().getRenderer().setSeriesPaint(0, ChartDefinitions.BLUE);
|
||||||
chart.getCategoryPlot().getRenderer().setSeriesStroke(0, new BasicStroke(2f));
|
chart.getCategoryPlot().getRenderer().setSeriesStroke(0, new BasicStroke(2f));
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ public class FinancerConfig {
|
|||||||
private String currencyCode;
|
private String currencyCode;
|
||||||
private Currency currency;
|
private Currency currency;
|
||||||
private DayOfWeek firstDayOfWeek;
|
private DayOfWeek firstDayOfWeek;
|
||||||
|
private boolean darkMode;
|
||||||
|
|
||||||
public String getServerUrl() {
|
public String getServerUrl() {
|
||||||
return serverUrl;
|
return serverUrl;
|
||||||
@@ -63,4 +64,12 @@ public class FinancerConfig {
|
|||||||
public void setFirstDayOfWeek(String firstDayOfWeek) {
|
public void setFirstDayOfWeek(String firstDayOfWeek) {
|
||||||
this.firstDayOfWeek = DayOfWeek.valueOf(firstDayOfWeek);
|
this.firstDayOfWeek = DayOfWeek.valueOf(firstDayOfWeek);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isDarkMode() {
|
||||||
|
return darkMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDarkMode(boolean darkMode) {
|
||||||
|
this.darkMode = darkMode;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ public class AccountController {
|
|||||||
model.addAttribute("showClosed", showClosedBoolean);
|
model.addAttribute("showClosed", showClosedBoolean);
|
||||||
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
||||||
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
||||||
|
ControllerUtils.addDarkMode(model, this.financerConfig);
|
||||||
|
|
||||||
return "account/accountOverview";
|
return "account/accountOverview";
|
||||||
}
|
}
|
||||||
@@ -75,6 +76,7 @@ public class AccountController {
|
|||||||
model.addAttribute("form", new NewAccountForm());
|
model.addAttribute("form", new NewAccountForm());
|
||||||
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
||||||
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
||||||
|
ControllerUtils.addDarkMode(model, this.financerConfig);
|
||||||
|
|
||||||
return "account/newAccount";
|
return "account/newAccount";
|
||||||
}
|
}
|
||||||
@@ -100,6 +102,7 @@ public class AccountController {
|
|||||||
model.addAttribute("errorMessage", responseReason.name());
|
model.addAttribute("errorMessage", responseReason.name());
|
||||||
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
||||||
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
||||||
|
ControllerUtils.addDarkMode(model, this.financerConfig);
|
||||||
|
|
||||||
return "account/newAccount";
|
return "account/newAccount";
|
||||||
}
|
}
|
||||||
@@ -144,6 +147,7 @@ public class AccountController {
|
|||||||
|
|
||||||
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
||||||
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
||||||
|
ControllerUtils.addDarkMode(model, this.financerConfig);
|
||||||
|
|
||||||
return "account/accountDetails";
|
return "account/accountDetails";
|
||||||
}
|
}
|
||||||
@@ -164,6 +168,7 @@ public class AccountController {
|
|||||||
model.addAttribute("errorMessage", responseReason.name());
|
model.addAttribute("errorMessage", responseReason.name());
|
||||||
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
||||||
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
||||||
|
ControllerUtils.addDarkMode(model, this.financerConfig);
|
||||||
|
|
||||||
return "account/accountDetails";
|
return "account/accountDetails";
|
||||||
}
|
}
|
||||||
@@ -187,6 +192,7 @@ public class AccountController {
|
|||||||
model.addAttribute("errorMessage", responseReason.name());
|
model.addAttribute("errorMessage", responseReason.name());
|
||||||
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
||||||
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
||||||
|
ControllerUtils.addDarkMode(model, this.financerConfig);
|
||||||
|
|
||||||
return "account/accountDetails";
|
return "account/accountDetails";
|
||||||
}
|
}
|
||||||
@@ -194,6 +200,13 @@ public class AccountController {
|
|||||||
return "redirect:/accountOverview";
|
return "redirect:/accountOverview";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/toggleDarkMode")
|
||||||
|
public String toggleDarkMode(Model model) {
|
||||||
|
this.financerConfig.setDarkMode(!this.financerConfig.isDarkMode());
|
||||||
|
|
||||||
|
return "redirect:/accountOverview";
|
||||||
|
}
|
||||||
|
|
||||||
// ---------------------------------------------
|
// ---------------------------------------------
|
||||||
|
|
||||||
@Autowired(required = false)
|
@Autowired(required = false)
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ public class AccountGroupController {
|
|||||||
public String newAccountGroup(Model model) {
|
public String newAccountGroup(Model model) {
|
||||||
model.addAttribute("form", new NewAccountGroupForm());
|
model.addAttribute("form", new NewAccountGroupForm());
|
||||||
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
||||||
|
ControllerUtils.addDarkMode(model, this.financerConfig);
|
||||||
|
|
||||||
return "accountGroup/newAccountGroup";
|
return "accountGroup/newAccountGroup";
|
||||||
}
|
}
|
||||||
@@ -40,6 +41,7 @@ public class AccountGroupController {
|
|||||||
model.addAttribute("errorMessage", responseReason.name());
|
model.addAttribute("errorMessage", responseReason.name());
|
||||||
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
||||||
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
||||||
|
ControllerUtils.addDarkMode(model, this.financerConfig);
|
||||||
|
|
||||||
return "accountGroup/newAccountGroup";
|
return "accountGroup/newAccountGroup";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -140,6 +140,7 @@ public class CalendarController {
|
|||||||
|
|
||||||
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
||||||
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
||||||
|
ControllerUtils.addDarkMode(model, this.financerConfig);
|
||||||
|
|
||||||
return "recurringTransaction/calendar";
|
return "recurringTransaction/calendar";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ public class RecurringTransactionController {
|
|||||||
model.addAttribute("form", form);
|
model.addAttribute("form", form);
|
||||||
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
||||||
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
||||||
|
ControllerUtils.addDarkMode(model, this.financerConfig);
|
||||||
|
|
||||||
return "recurringTransaction/newRecurringTransaction";
|
return "recurringTransaction/newRecurringTransaction";
|
||||||
}
|
}
|
||||||
@@ -98,6 +99,7 @@ public class RecurringTransactionController {
|
|||||||
model.addAttribute("errorMessage", responseReason.name());
|
model.addAttribute("errorMessage", responseReason.name());
|
||||||
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
||||||
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
||||||
|
ControllerUtils.addDarkMode(model, this.financerConfig);
|
||||||
|
|
||||||
return "recurringTransaction/newRecurringTransaction";
|
return "recurringTransaction/newRecurringTransaction";
|
||||||
}
|
}
|
||||||
@@ -114,6 +116,7 @@ public class RecurringTransactionController {
|
|||||||
model.addAttribute("subTitle", "dueToday");
|
model.addAttribute("subTitle", "dueToday");
|
||||||
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
||||||
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
||||||
|
ControllerUtils.addDarkMode(model, this.financerConfig);
|
||||||
|
|
||||||
return "recurringTransaction/recurringTransactionList";
|
return "recurringTransaction/recurringTransactionList";
|
||||||
}
|
}
|
||||||
@@ -127,6 +130,7 @@ public class RecurringTransactionController {
|
|||||||
model.addAttribute("subTitle", "active");
|
model.addAttribute("subTitle", "active");
|
||||||
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
||||||
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
||||||
|
ControllerUtils.addDarkMode(model, this.financerConfig);
|
||||||
|
|
||||||
return "recurringTransaction/recurringTransactionList";
|
return "recurringTransaction/recurringTransactionList";
|
||||||
}
|
}
|
||||||
@@ -140,6 +144,7 @@ public class RecurringTransactionController {
|
|||||||
model.addAttribute("subTitle", "all");
|
model.addAttribute("subTitle", "all");
|
||||||
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
||||||
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
||||||
|
ControllerUtils.addDarkMode(model, this.financerConfig);
|
||||||
|
|
||||||
return "recurringTransaction/recurringTransactionList";
|
return "recurringTransaction/recurringTransactionList";
|
||||||
}
|
}
|
||||||
@@ -159,6 +164,7 @@ public class RecurringTransactionController {
|
|||||||
model.addAttribute("subTitle", "all");
|
model.addAttribute("subTitle", "all");
|
||||||
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
||||||
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
||||||
|
ControllerUtils.addDarkMode(model, this.financerConfig);
|
||||||
|
|
||||||
if (!ResponseReason.OK.equals(responseReason)) {
|
if (!ResponseReason.OK.equals(responseReason)) {
|
||||||
model.addAttribute("errorMessage", responseReason.name());
|
model.addAttribute("errorMessage", responseReason.name());
|
||||||
@@ -183,6 +189,7 @@ public class RecurringTransactionController {
|
|||||||
model.addAttribute("subTitle", sub);
|
model.addAttribute("subTitle", sub);
|
||||||
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
||||||
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
||||||
|
ControllerUtils.addDarkMode(model, this.financerConfig);
|
||||||
|
|
||||||
Iterable<RecurringTransaction> recurringTransactions;
|
Iterable<RecurringTransaction> recurringTransactions;
|
||||||
|
|
||||||
@@ -240,6 +247,7 @@ public class RecurringTransactionController {
|
|||||||
model.addAttribute("subTitle", form.getSubTitle());
|
model.addAttribute("subTitle", form.getSubTitle());
|
||||||
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
||||||
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
||||||
|
ControllerUtils.addDarkMode(model, this.financerConfig);
|
||||||
|
|
||||||
Iterable<RecurringTransaction> recurringTransactions;
|
Iterable<RecurringTransaction> recurringTransactions;
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ public class ReportController {
|
|||||||
model.addAttribute("availableCharts", ChartType.valueList(true));
|
model.addAttribute("availableCharts", ChartType.valueList(true));
|
||||||
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
||||||
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
||||||
|
ControllerUtils.addDarkMode(model, this.financerConfig);
|
||||||
|
|
||||||
return "report/selectChart";
|
return "report/selectChart";
|
||||||
}
|
}
|
||||||
@@ -42,6 +43,7 @@ public class ReportController {
|
|||||||
model.addAttribute("availableCharts", ChartType.valueList(true));
|
model.addAttribute("availableCharts", ChartType.valueList(true));
|
||||||
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
||||||
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
||||||
|
ControllerUtils.addDarkMode(model, this.financerConfig);
|
||||||
|
|
||||||
return "report/selectChart";
|
return "report/selectChart";
|
||||||
}
|
}
|
||||||
@@ -55,6 +57,7 @@ public class ReportController {
|
|||||||
model.addAttribute("form", new ConfigAccountGroupExpenseForPeriodForm());
|
model.addAttribute("form", new ConfigAccountGroupExpenseForPeriodForm());
|
||||||
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
||||||
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
||||||
|
ControllerUtils.addDarkMode(model, this.financerConfig);
|
||||||
|
|
||||||
return "report/configureAccountGroupExpensesForPeriod";
|
return "report/configureAccountGroupExpensesForPeriod";
|
||||||
case ACCOUNT_EXPENSES_CURRENT_PERIOD:
|
case ACCOUNT_EXPENSES_CURRENT_PERIOD:
|
||||||
@@ -65,6 +68,7 @@ public class ReportController {
|
|||||||
model.addAttribute("form", new ConfigAccountExpenseForPeriodForm());
|
model.addAttribute("form", new ConfigAccountExpenseForPeriodForm());
|
||||||
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
||||||
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
||||||
|
ControllerUtils.addDarkMode(model, this.financerConfig);
|
||||||
|
|
||||||
return "report/configureAccountExpensesForPeriod";
|
return "report/configureAccountExpensesForPeriod";
|
||||||
case EXPENSE_PERIOD_TOTALS_CURRENT_YEAR:
|
case EXPENSE_PERIOD_TOTALS_CURRENT_YEAR:
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ public class TransactionController {
|
|||||||
model.addAttribute("showSum", false);
|
model.addAttribute("showSum", false);
|
||||||
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
||||||
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
||||||
|
ControllerUtils.addDarkMode(model, this.financerConfig);
|
||||||
|
|
||||||
return "transaction/searchTransactions";
|
return "transaction/searchTransactions";
|
||||||
}
|
}
|
||||||
@@ -74,6 +75,7 @@ public class TransactionController {
|
|||||||
model.addAttribute("showActionDelete", false);
|
model.addAttribute("showActionDelete", false);
|
||||||
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
||||||
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
||||||
|
ControllerUtils.addDarkMode(model, this.financerConfig);
|
||||||
|
|
||||||
return "transaction/searchTransactions";
|
return "transaction/searchTransactions";
|
||||||
}
|
}
|
||||||
@@ -113,6 +115,7 @@ public class TransactionController {
|
|||||||
|
|
||||||
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
||||||
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
||||||
|
ControllerUtils.addDarkMode(model, this.financerConfig);
|
||||||
|
|
||||||
return "transaction/newTransaction";
|
return "transaction/newTransaction";
|
||||||
}
|
}
|
||||||
@@ -156,6 +159,7 @@ public class TransactionController {
|
|||||||
|
|
||||||
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
ControllerUtils.addVersionAttribute(model, this.financerConfig);
|
||||||
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
ControllerUtils.addCurrencySymbol(model, this.financerConfig);
|
||||||
|
ControllerUtils.addDarkMode(model, this.financerConfig);
|
||||||
|
|
||||||
if (!ResponseReason.OK.equals(responseReason)) {
|
if (!ResponseReason.OK.equals(responseReason)) {
|
||||||
model.addAttribute("errorMessage", responseReason.name());
|
model.addAttribute("errorMessage", responseReason.name());
|
||||||
|
|||||||
@@ -99,4 +99,8 @@ public class ControllerUtils {
|
|||||||
// Add a space right in front of the currency symbol, so it's not glued to the amount
|
// Add a space right in front of the currency symbol, so it's not glued to the amount
|
||||||
model.addAttribute("currencySymbol", " " + financerConfig.getCurrency().getSymbol());
|
model.addAttribute("currencySymbol", " " + financerConfig.getCurrency().getSymbol());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void addDarkMode(Model model, FinancerConfig financerConfig) {
|
||||||
|
model.addAttribute("darkMode", financerConfig.isDarkMode());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,3 +40,7 @@ logging.level.de.pushservice=DEBUG
|
|||||||
# The first day of a week in a calendar
|
# The first day of a week in a calendar
|
||||||
# Possible values: MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
|
# Possible values: MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
|
||||||
financer.firstDayOfWeek=MONDAY
|
financer.firstDayOfWeek=MONDAY
|
||||||
|
|
||||||
|
# Whether dark mode should be enabled by default
|
||||||
|
# Possible values: true|default
|
||||||
|
financer.darkMode=true
|
||||||
@@ -239,6 +239,11 @@ financer.calendar.previous=Previous month
|
|||||||
financer.calendar.next=Next month
|
financer.calendar.next=Next month
|
||||||
financer.calendar.current=Current month
|
financer.calendar.current=Current month
|
||||||
|
|
||||||
|
financer.footer.changelog=Changelog
|
||||||
|
financer.footer.readme=Readme
|
||||||
|
financer.footer.testNotification=Test notification
|
||||||
|
financer.footer.toggleDarkMode=Toggle dark mode
|
||||||
|
|
||||||
financer.error-message.UNKNOWN_ERROR=An unknown error occurred!
|
financer.error-message.UNKNOWN_ERROR=An unknown error occurred!
|
||||||
financer.error-message.INVALID_ACCOUNT_TYPE=The selected account type is not valid!
|
financer.error-message.INVALID_ACCOUNT_TYPE=The selected account type is not valid!
|
||||||
financer.error-message.FROM_ACCOUNT_NOT_FOUND=The specified from account has not been found!
|
financer.error-message.FROM_ACCOUNT_NOT_FOUND=The specified from account has not been found!
|
||||||
|
|||||||
@@ -238,6 +238,11 @@ financer.calendar.previous=Letzter Monat
|
|||||||
financer.calendar.next=N\u00E4chster Monat
|
financer.calendar.next=N\u00E4chster Monat
|
||||||
financer.calendar.current=Aktueller Monat
|
financer.calendar.current=Aktueller Monat
|
||||||
|
|
||||||
|
financer.footer.changelog=\u00C4nderungshistorie
|
||||||
|
financer.footer.readme=Liesmich
|
||||||
|
financer.footer.testNotification=Test Benachrichtigung
|
||||||
|
financer.footer.toggleDarkMode=Dark Mode umschalten
|
||||||
|
|
||||||
financer.error-message.UNKNOWN_ERROR=Ein unbekannter Fehler ist aufgetreten!
|
financer.error-message.UNKNOWN_ERROR=Ein unbekannter Fehler ist aufgetreten!
|
||||||
financer.error-message.INVALID_ACCOUNT_TYPE=Der ausgew\u00E4hlte Kontotyp ist ung\u00FCltig!
|
financer.error-message.INVALID_ACCOUNT_TYPE=Der ausgew\u00E4hlte Kontotyp ist ung\u00FCltig!
|
||||||
financer.error-message.FROM_ACCOUNT_NOT_FOUND=Das ausgew\u00E4hlte Von-Konto wurde nicht gefunden!
|
financer.error-message.FROM_ACCOUNT_NOT_FOUND=Das ausgew\u00E4hlte Von-Konto wurde nicht gefunden!
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
v44 -> v45:
|
v44 -> v45:
|
||||||
- #5 Having no periods breaks the "expenses per period" graph on the account overview page
|
- #5 Having no periods breaks the "expenses per period" graph on the account overview page
|
||||||
|
- #14 Introduce toggleable dark mode
|
||||||
|
|
||||||
v43 -> v44:
|
v43 -> v44:
|
||||||
- #8: Remove hard dependency on push-service - integrate new release of push-service
|
- #8: Remove hard dependency on push-service - integrate new release of push-service
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
/* Color definitions for dark mode */
|
||||||
|
:root {
|
||||||
|
--error-color: #D30000;
|
||||||
|
--bank-color: #008FFB;
|
||||||
|
--cash-color: #FFCB00;
|
||||||
|
--income-color: #00A900;
|
||||||
|
--liability-color: #D36000;
|
||||||
|
--expense-color: #D30000;
|
||||||
|
--start-color: #AB005D;
|
||||||
|
--text-color: #7f7f7f;
|
||||||
|
--background-color: #1d1f21;
|
||||||
|
--link-color: #87ab63;
|
||||||
|
--hover-color: #1f1f2f;
|
||||||
|
--border-color: #7f7f7f;
|
||||||
|
}
|
||||||
|
/* --------------------- */
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
/* Color definitions for light mode */
|
||||||
|
:root {
|
||||||
|
--error-color: #D30000;
|
||||||
|
--bank-color: #008FFB;
|
||||||
|
--cash-color: #FFCB00;
|
||||||
|
--income-color: #00A900;
|
||||||
|
--liability-color: #D36000;
|
||||||
|
--expense-color: #D30000;
|
||||||
|
--start-color: #AB005D;
|
||||||
|
--text-color: #000000;
|
||||||
|
--background-color: #FFFFFF;
|
||||||
|
--link-color: #0000EE;
|
||||||
|
--hover-color: lightgrey;
|
||||||
|
--border-color: #ddd;
|
||||||
|
}
|
||||||
|
/* --------------------- */
|
||||||
@@ -1,16 +1,18 @@
|
|||||||
/* Variable declarations */
|
/* Variable declarations */
|
||||||
:root {
|
:root {
|
||||||
--error-color: #D30000/*#ff6666*/;
|
|
||||||
--bank-color: #008FFB;
|
|
||||||
--cash-color: #FFCB00;
|
|
||||||
--income-color: #00A900;
|
|
||||||
--liability-color: #D36000;
|
|
||||||
--expense-color: #D30000;
|
|
||||||
--start-color: #AB005D;
|
|
||||||
--type-row-width: 5px;
|
--type-row-width: 5px;
|
||||||
}
|
}
|
||||||
/* --------------------- */
|
/* --------------------- */
|
||||||
|
|
||||||
|
body {
|
||||||
|
color: var(--text-color);
|
||||||
|
background-color: var(--background-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: var(--link-color);
|
||||||
|
}
|
||||||
|
|
||||||
#account-overview-table,
|
#account-overview-table,
|
||||||
#transaction-table,
|
#transaction-table,
|
||||||
#recurring-transaction-list-table {
|
#recurring-transaction-list-table {
|
||||||
@@ -27,7 +29,7 @@
|
|||||||
#transaction-table td,
|
#transaction-table td,
|
||||||
#recurring-transaction-list-table th,
|
#recurring-transaction-list-table th,
|
||||||
#recurring-transaction-list-table td {
|
#recurring-transaction-list-table td {
|
||||||
border-bottom: 1px solid #ddd;
|
border-bottom: 1px solid var(--border-color);
|
||||||
padding: 0.3em;
|
padding: 0.3em;
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
}
|
}
|
||||||
@@ -37,11 +39,11 @@
|
|||||||
#recurring-transaction-list-table th {
|
#recurring-transaction-list-table th {
|
||||||
position: sticky;
|
position: sticky;
|
||||||
top: 0px;
|
top: 0px;
|
||||||
background-color: white;
|
background-color: var(--background-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
tr:hover {
|
tr:hover {
|
||||||
background-color: lightgrey;
|
background-color: var(--hover-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.overspend {
|
.overspend {
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
<title th:text="#{financer.account-details.title}"/>
|
<title th:text="#{financer.account-details.title}"/>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<link th:if="${darkMode}" rel="stylesheet" th:href="@{/css/darkModeColors.css}" />
|
||||||
|
<link th:if="${!darkMode}" rel="stylesheet" th:href="@{/css/lightModeColors.css}" />
|
||||||
<link rel="stylesheet" th:href="@{/css/main.css}">
|
<link rel="stylesheet" th:href="@{/css/main.css}">
|
||||||
<link rel="shortcut icon" th:href="@{/favicon.ico}" />
|
<link rel="shortcut icon" th:href="@{/favicon.ico}" />
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
<title th:text="#{financer.account-overview.title}"/>
|
<title th:text="#{financer.account-overview.title}"/>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<link th:if="${darkMode}" rel="stylesheet" th:href="@{/css/darkModeColors.css}" />
|
||||||
|
<link th:if="${!darkMode}" rel="stylesheet" th:href="@{/css/lightModeColors.css}" />
|
||||||
<link rel="stylesheet" th:href="@{/css/main.css}" />
|
<link rel="stylesheet" th:href="@{/css/main.css}" />
|
||||||
<link rel="shortcut icon" th:href="@{/favicon.ico}" />
|
<link rel="shortcut icon" th:href="@{/favicon.ico}" />
|
||||||
<script th:src="@{/javascript/push-service-client-init.js}"></script>
|
<script th:src="@{/javascript/push-service-client-init.js}"></script>
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
<title th:text="#{financer.account-new.title}"/>
|
<title th:text="#{financer.account-new.title}"/>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<link th:if="${darkMode}" rel="stylesheet" th:href="@{/css/darkModeColors.css}" />
|
||||||
|
<link th:if="${!darkMode}" rel="stylesheet" th:href="@{/css/lightModeColors.css}" />
|
||||||
<link rel="stylesheet" th:href="@{/css/main.css}">
|
<link rel="stylesheet" th:href="@{/css/main.css}">
|
||||||
<link rel="shortcut icon" th:href="@{/favicon.ico}" />
|
<link rel="shortcut icon" th:href="@{/favicon.ico}" />
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
<title th:text="#{financer.account-group-new.title}"/>
|
<title th:text="#{financer.account-group-new.title}"/>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<link th:if="${darkMode}" rel="stylesheet" th:href="@{/css/darkModeColors.css}" />
|
||||||
|
<link th:if="${!darkMode}" rel="stylesheet" th:href="@{/css/lightModeColors.css}" />
|
||||||
<link rel="stylesheet" th:href="@{/css/main.css}">
|
<link rel="stylesheet" th:href="@{/css/main.css}">
|
||||||
<link rel="shortcut icon" th:href="@{/favicon.ico}" />
|
<link rel="shortcut icon" th:href="@{/favicon.ico}" />
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
<hr>
|
<hr>
|
||||||
<div>
|
<div>
|
||||||
<span th:text="'financer v' + ${financerVersion}"/>
|
<span th:text="'financer v' + ${financerVersion}"/>
|
||||||
(<a th:href="@{/changelog.txt}">Changelog</a>, <a th:href="@{/readme.txt}">Readme</a>, <a th:href="@{/sendTestNotification}">Test</a>)
|
(<a th:href="@{/changelog.txt}" th:text="#{financer.footer.changelog}" />,
|
||||||
|
<a th:href="@{/readme.txt}" th:text="#{financer.footer.readme}" />,
|
||||||
|
<a th:href="@{/sendTestNotification}" th:text="#{financer.footer.testNotification}" />,
|
||||||
|
<a th:href="@{/toggleDarkMode}" th:text="#{financer.footer.toggleDarkMode}" />)
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -4,6 +4,8 @@
|
|||||||
<title th:text="#{financer.recurring-transaction-calendar.title}"/>
|
<title th:text="#{financer.recurring-transaction-calendar.title}"/>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<link th:if="${darkMode}" rel="stylesheet" th:href="@{/css/darkModeColors.css}" />
|
||||||
|
<link th:if="${!darkMode}" rel="stylesheet" th:href="@{/css/lightModeColors.css}" />
|
||||||
<link rel="stylesheet" th:href="@{/css/main.css}">
|
<link rel="stylesheet" th:href="@{/css/main.css}">
|
||||||
<link rel="shortcut icon" th:href="@{/favicon.ico}"/>
|
<link rel="shortcut icon" th:href="@{/favicon.ico}"/>
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
<title th:text="#{financer.recurring-transaction-new.title}"/>
|
<title th:text="#{financer.recurring-transaction-new.title}"/>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<link th:if="${darkMode}" rel="stylesheet" th:href="@{/css/darkModeColors.css}" />
|
||||||
|
<link th:if="${!darkMode}" rel="stylesheet" th:href="@{/css/lightModeColors.css}" />
|
||||||
<link rel="stylesheet" th:href="@{/css/main.css}">
|
<link rel="stylesheet" th:href="@{/css/main.css}">
|
||||||
<link rel="shortcut icon" th:href="@{/favicon.ico}" />
|
<link rel="shortcut icon" th:href="@{/favicon.ico}" />
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
<title th:text="#{financer.recurring-to-transaction-with-amount.title}"/>
|
<title th:text="#{financer.recurring-to-transaction-with-amount.title}"/>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<link th:if="${darkMode}" rel="stylesheet" th:href="@{/css/darkModeColors.css}" />
|
||||||
|
<link th:if="${!darkMode}" rel="stylesheet" th:href="@{/css/lightModeColors.css}" />
|
||||||
<link rel="stylesheet" th:href="@{/css/main.css}">
|
<link rel="stylesheet" th:href="@{/css/main.css}">
|
||||||
<link rel="shortcut icon" th:href="@{/favicon.ico}" />
|
<link rel="shortcut icon" th:href="@{/favicon.ico}" />
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
<title th:text="#{'financer.recurring-transaction-list.title.' + ${subTitle}}"/>
|
<title th:text="#{'financer.recurring-transaction-list.title.' + ${subTitle}}"/>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<link th:if="${darkMode}" rel="stylesheet" th:href="@{/css/darkModeColors.css}" />
|
||||||
|
<link th:if="${!darkMode}" rel="stylesheet" th:href="@{/css/lightModeColors.css}" />
|
||||||
<link rel="stylesheet" th:href="@{/css/main.css}">
|
<link rel="stylesheet" th:href="@{/css/main.css}">
|
||||||
<link rel="shortcut icon" th:href="@{/favicon.ico}" />
|
<link rel="shortcut icon" th:href="@{/favicon.ico}" />
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
<title th:text="#{financer.chart-config-account-expenses-for-period.title}"/>
|
<title th:text="#{financer.chart-config-account-expenses-for-period.title}"/>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<link th:if="${darkMode}" rel="stylesheet" th:href="@{/css/darkModeColors.css}" />
|
||||||
|
<link th:if="${!darkMode}" rel="stylesheet" th:href="@{/css/lightModeColors.css}" />
|
||||||
<link rel="stylesheet" th:href="@{/css/main.css}">
|
<link rel="stylesheet" th:href="@{/css/main.css}">
|
||||||
<link rel="shortcut icon" th:href="@{/favicon.ico}" />
|
<link rel="shortcut icon" th:href="@{/favicon.ico}" />
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
<title th:text="#{financer.chart-config-account-group-expenses-for-period.title}"/>
|
<title th:text="#{financer.chart-config-account-group-expenses-for-period.title}"/>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<link th:if="${darkMode}" rel="stylesheet" th:href="@{/css/darkModeColors.css}" />
|
||||||
|
<link th:if="${!darkMode}" rel="stylesheet" th:href="@{/css/lightModeColors.css}" />
|
||||||
<link rel="stylesheet" th:href="@{/css/main.css}">
|
<link rel="stylesheet" th:href="@{/css/main.css}">
|
||||||
<link rel="shortcut icon" th:href="@{/favicon.ico}" />
|
<link rel="shortcut icon" th:href="@{/favicon.ico}" />
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
<title th:text="#{financer.chart-select.title}"/>
|
<title th:text="#{financer.chart-select.title}"/>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<link th:if="${darkMode}" rel="stylesheet" th:href="@{/css/darkModeColors.css}" />
|
||||||
|
<link th:if="${!darkMode}" rel="stylesheet" th:href="@{/css/lightModeColors.css}" />
|
||||||
<link rel="stylesheet" th:href="@{/css/main.css}">
|
<link rel="stylesheet" th:href="@{/css/main.css}">
|
||||||
<link rel="shortcut icon" th:href="@{/favicon.ico}" />
|
<link rel="shortcut icon" th:href="@{/favicon.ico}" />
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
<title th:text="#{financer.transaction-new.title}"/>
|
<title th:text="#{financer.transaction-new.title}"/>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<link th:if="${darkMode}" rel="stylesheet" th:href="@{/css/darkModeColors.css}" />
|
||||||
|
<link th:if="${!darkMode}" rel="stylesheet" th:href="@{/css/lightModeColors.css}" />
|
||||||
<link rel="stylesheet" th:href="@{/css/main.css}">
|
<link rel="stylesheet" th:href="@{/css/main.css}">
|
||||||
<link rel="shortcut icon" th:href="@{/favicon.ico}" />
|
<link rel="shortcut icon" th:href="@{/favicon.ico}" />
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
@@ -4,6 +4,8 @@
|
|||||||
<title th:text="#{financer.search-transactions.title}"/>
|
<title th:text="#{financer.search-transactions.title}"/>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<link th:if="${darkMode}" rel="stylesheet" th:href="@{/css/darkModeColors.css}" />
|
||||||
|
<link th:if="${!darkMode}" rel="stylesheet" th:href="@{/css/lightModeColors.css}" />
|
||||||
<link rel="stylesheet" th:href="@{/css/main.css}">
|
<link rel="stylesheet" th:href="@{/css/main.css}">
|
||||||
<link rel="shortcut icon" th:href="@{/favicon.ico}" />
|
<link rel="shortcut icon" th:href="@{/favicon.ico}" />
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
Reference in New Issue
Block a user