diff --git a/assets/css/app.css b/assets/css/app.css index 8feeba485..3f5a29c75 100644 --- a/assets/css/app.css +++ b/assets/css/app.css @@ -145,12 +145,17 @@ a:hover { color: var(--evcc-background); } -.btn-primary:hover, -.btn-primary:active { +.btn-primary:hover { background-color: var(--evcc-accent3); border-color: var(--evcc-accent3); } +.btn-primary:active { + color: var(--evcc-default-text) !important; + background-color: var(--evcc-accent3) !important; + border-color: var(--evcc-accent3) !important; +} + .btn:disabled { color: inherit !important; background-color: inherit !important; @@ -164,12 +169,17 @@ a:hover { border-width: 2px; border-color: var(--bs-primary); } -.btn-outline-primary:hover, -.btn-outline-primary:active { - color: var(--evcc-accent3); - background-color: transparent; +.btn-outline-primary:hover { + color: var(--evcc-accent3) !important; + background-color: transparent !important; border-width: 2px; - border-color: var(--evcc-accent3); + border-color: var(--evcc-accent3) !important; +} +.btn-outline-primary:active { + color: var(--evcc-default-text) !important; + background-color: var(--evcc-accent3) !important; + border-width: 2px; + border-color: var(--evcc-accent3) !important; } .text-evcc { @@ -219,7 +229,8 @@ a:hover { } } -@media (--lg-and-up) { +/* breakpoint lg */ +@media (min-width: 992px) { .modal-lg, .modal-xl { --bs-modal-width: 850px; @@ -247,7 +258,8 @@ a:hover { color: var(--evcc-default-text); } -@media (--sm-and-up) { +/* breakpoint sm */ +@media (min-width: 576px) { .modal-content { padding: 2rem; } diff --git a/assets/js/components/FormRow.vue b/assets/js/components/FormRow.vue new file mode 100644 index 000000000..74f71b893 --- /dev/null +++ b/assets/js/components/FormRow.vue @@ -0,0 +1,20 @@ + + + diff --git a/assets/js/components/GlobalSettingsModal.vue b/assets/js/components/GlobalSettingsModal.vue new file mode 100644 index 000000000..4d7dbf918 --- /dev/null +++ b/assets/js/components/GlobalSettingsModal.vue @@ -0,0 +1,133 @@ + + + + diff --git a/assets/js/components/Loadpoint.vue b/assets/js/components/Loadpoint.vue index cce7e0140..5ce23670c 100644 --- a/assets/js/components/Loadpoint.vue +++ b/assets/js/components/Loadpoint.vue @@ -326,7 +326,8 @@ export default { opacity: 0.5; margin: 0 -1rem; } -@media (--sm-and-up) { +/* breakpoint sm */ +@media (min-width: 576px) { .divider { margin: 0 -1.5rem; } diff --git a/assets/js/components/SavingsTile.vue b/assets/js/components/SavingsTile.vue index 514af9303..dac9289fc 100644 --- a/assets/js/components/SavingsTile.vue +++ b/assets/js/components/SavingsTile.vue @@ -63,7 +63,9 @@ export default { width: 40px; flex: 0 0 auto; } -@media (--lg-and-up) { + +/* breakpoint lg */ +@media (min-width: 992px) { .tile-icon { width: 70px; } diff --git a/assets/js/components/SelectGroup.story.vue b/assets/js/components/SelectGroup.story.vue new file mode 100644 index 000000000..308fa3269 --- /dev/null +++ b/assets/js/components/SelectGroup.story.vue @@ -0,0 +1,29 @@ + + + diff --git a/assets/js/components/SelectGroup.vue b/assets/js/components/SelectGroup.vue new file mode 100644 index 000000000..9fc6a6daa --- /dev/null +++ b/assets/js/components/SelectGroup.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/assets/js/components/Site.vue b/assets/js/components/Site.vue index 4711b660c..497ab4422 100644 --- a/assets/js/components/Site.vue +++ b/assets/js/components/Site.vue @@ -111,7 +111,7 @@ export default { }, topNavigation: function () { const vehicleLogins = this.auth ? this.auth.vehicles : {}; - return { vehicleLogins }; + return { vehicleLogins, ...this.collectProps(TopNavigation) }; }, showParkingLot: function () { // work in progess diff --git a/assets/js/components/Sponsor.vue b/assets/js/components/Sponsor.vue index 8ecefe9d6..515711119 100644 --- a/assets/js/components/Sponsor.vue +++ b/assets/js/components/Sponsor.vue @@ -106,13 +106,17 @@ export default { .become-sponsor { width: 100%; } -@media (--sm-and-up) { + +/* breakpoint sm */ +@media (min-width: 576px) { .confetti-button, .become-sponsor { width: 75%; } } -@media (--lg-and-up) { + +/* breakpoint lg */ +@media (min-width: 992px) { .confetti-button, .become-sponsor { width: 40%; diff --git a/assets/js/components/TargetSoCSelect.vue b/assets/js/components/TargetSoCSelect.vue index 802b6efa7..d1f267774 100644 --- a/assets/js/components/TargetSoCSelect.vue +++ b/assets/js/components/TargetSoCSelect.vue @@ -22,6 +22,7 @@ - + + diff --git a/i18n/de.toml b/i18n/de.toml index 24f3b9f71..95ea9265b 100644 --- a/i18n/de.toml +++ b/i18n/de.toml @@ -1,15 +1,32 @@ [header] sessions = "Ladevorgänge" -docs = "Doku" +settings = "Einstellungen" +docs = "Dokumentation" blog = "Blog" github = "GitHub" login = "Fahrzeug Logins" about = "Über evcc" -[header.theme] -auto = "Design: System" -light = "Design: Hell" -dark = "Design: Dunkel" +[settings] +title = "Einstellungen" + +[settings.theme] +label = "Design" +auto = "System" +light = "Hell" +dark = "Dunkel" + +[settings.language] +label = "Sprache" +auto = "Automatisch" + +[settings.unit] +label = "Einheit" +km = "Km" +mi = "Meilen" + +[settings.telemetry] +label = "Telemetrie" [footer.version] availableShort = "Update" @@ -53,7 +70,7 @@ greenEnergySub1 = "über evcc geladen" greenEnergySub2 = "seit Oktober 2022" [footer.telemetry] -optIn = "Ich möchte meine Daten auch beisteuern." +optIn = "Ich möchte meine Ladedaten mit der Community teilen." optInMoreDetails = "Mehr Details gibts {0}." optInMoreDetailsLink = "hier" optInSponsorship = "Sponsoring erforderlich." diff --git a/i18n/en.toml b/i18n/en.toml index cd5b6458e..798109202 100644 --- a/i18n/en.toml +++ b/i18n/en.toml @@ -1,15 +1,32 @@ [header] sessions = "Charging sessions" +settings = "Settings" docs = "Documentation" blog = "Blog" github = "GitHub" login = "Vehicle logins" about = "About" -[header.theme] -auto = "Design: system" -light = "Design: light" -dark = "Design: dark" +[settings] +title = "Settings" + +[settings.theme] +label = "Design" +auto = "system" +light = "light" +dark = "dark" + +[settings.language] +label = "Language" +auto = "Automatic" + +[settings.unit] +label = "Units" +km = "km" +mi = "miles" + +[settings.telemetry] +label = "Telemetry" [footer.version] availableShort = "install" diff --git a/server/http_handler.go b/server/http_handler.go index 275543a3f..9c9d76800 100644 --- a/server/http_handler.go +++ b/server/http_handler.go @@ -197,10 +197,13 @@ func sessionHandler(w http.ResponseWriter, r *http.Request) { } if r.URL.Query().Get("format") == "csv" { - // get request language - lang := r.Header.Get("Accept-Language") - if tags, _, err := language.ParseAcceptLanguage(lang); err == nil && len(tags) > 0 { - lang = tags[0].String() + lang := r.URL.Query().Get("lang") + if lang == "" { + // get request language + lang = r.Header.Get("Accept-Language") + if tags, _, err := language.ParseAcceptLanguage(lang); err == nil && len(tags) > 0 { + lang = tags[0].String() + } } ctx := context.WithValue(context.Background(), locale.Locale, lang) diff --git a/vite.config.js b/vite.config.js index 40d78d985..7570a4653 100644 --- a/vite.config.js +++ b/vite.config.js @@ -11,6 +11,7 @@ export default defineConfig({ outDir: "../dist/", emptyOutDir: true, assetsInlineLimit: 1024, + chunkSizeWarningLimit: 550, rollupOptions: { output: { manualChunks: undefined,