Date: Tue, 4 Oct 2022 20:11:11 +0200
Subject: [PATCH 18/72] certinstall: remove independant view
---
app/src/router/routes.js | 10 --
app/src/views/domain/DomainCert.vue | 160 ----------------------------
app/src/views/domain/DomainInfo.vue | 7 --
3 files changed, 177 deletions(-)
delete mode 100644 app/src/views/domain/DomainCert.vue
diff --git a/app/src/router/routes.js b/app/src/router/routes.js
index 2f705404..d817808a 100644
--- a/app/src/router/routes.js
+++ b/app/src/router/routes.js
@@ -179,16 +179,6 @@ const routes = [
breadcrumb: ['domain-list', 'domain-info', 'domain-dns']
}
},
- {
- name: 'domain-cert',
- path: '/domains/:name/cert-management',
- component: () => import(/* webpackChunkName: "views/domain/cert" */ '@/views/domain/DomainCert'),
- props: true,
- meta: {
- args: { trad: 'certificate' },
- breadcrumb: ['domain-list', 'domain-info', 'domain-cert']
- }
- },
/* ───────╮
│ APPS │
diff --git a/app/src/views/domain/DomainCert.vue b/app/src/views/domain/DomainCert.vue
deleted file mode 100644
index e8e0c523..00000000
--- a/app/src/views/domain/DomainCert.vue
+++ /dev/null
@@ -1,160 +0,0 @@
-
-
-
-
- {{ $t('certificate_alert_' + cert.alert.trad) }}
-
-
-
-
-
-
- {{ cert.type }} ({{ name }})
-
-
-
-
-
-
- {{ $tc('day_validity', cert.validity) }}
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('install_letsencrypt_cert') }}
-
-
-
-
-
-
-
-
-
- {{ $t('manually_renew_letsencrypt') }}
-
-
-
-
-
-
-
-
-
- {{ $t('regenerate_selfsigned_cert') }}
-
-
-
-
-
-
-
-
-
- {{ $t('revert_to_selfsigned_cert') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/views/domain/DomainInfo.vue b/app/src/views/domain/DomainInfo.vue
index ed7cb2ac..3f52e27a 100644
--- a/app/src/views/domain/DomainInfo.vue
+++ b/app/src/views/domain/DomainInfo.vue
@@ -32,13 +32,6 @@
-
- {{ $t('certificate_manage') }}
-
- {{ $t('ssl_certificate') }}
-
-
-
{{ $t('domain_delete_longdesc') }}
Date: Fri, 7 Oct 2022 13:43:49 +0200
Subject: [PATCH 19/72] login: add card-form with admin username input to login
---
app/src/i18n/locales/en.json | 2 +-
app/src/store/info.js | 4 +-
app/src/views/Login.vue | 85 +++++++++++++++++++++++-------------
3 files changed, 58 insertions(+), 33 deletions(-)
diff --git a/app/src/i18n/locales/en.json b/app/src/i18n/locales/en.json
index 12acc54f..79b636f6 100644
--- a/app/src/i18n/locales/en.json
+++ b/app/src/i18n/locales/en.json
@@ -551,7 +551,7 @@
"none": "None",
"separator": ", "
},
- "wrong_password": "Wrong password",
+ "wrong_password_or_username": "Wrong password or username",
"yes": "Yes",
"yunohost_admin": "YunoHost Admin",
"certificate_manage": "Manage SSL certificate",
diff --git a/app/src/store/info.js b/app/src/store/info.js
index 1304c1ed..a34db1a2 100644
--- a/app/src/store/info.js
+++ b/app/src/store/info.js
@@ -142,8 +142,8 @@ export default {
})
},
- 'LOGIN' ({ dispatch }, password) {
- return api.post('login', { credentials: password }, null, { websocket: false }).then(() => {
+ 'LOGIN' ({ dispatch }, credentials) {
+ return api.post('login', { credentials }, null, { websocket: false }).then(() => {
dispatch('CONNECT')
})
},
diff --git a/app/src/views/Login.vue b/app/src/views/Login.vue
index db50f4e6..79955243 100644
--- a/app/src/views/Login.vue
+++ b/app/src/views/Login.vue
@@ -1,37 +1,35 @@
-
-
-
-
- {{ $t('password') }}
-
-
-
+
+
+
-
+
+
-
-
- {{ $t('login') }}
-
-
-
-
-
- {{ $t('wrong_password') }}
-
-
+
+
+ {{ $t('login') }}
+
+
+
diff --git a/app/src/views/tool/ToolList.vue b/app/src/views/tool/ToolList.vue
index 0b495e82..e326b5fd 100644
--- a/app/src/views/tool/ToolList.vue
+++ b/app/src/views/tool/ToolList.vue
@@ -24,7 +24,6 @@ export default {
{ routeName: 'tool-migrations', icon: 'share', translation: 'migrations' },
{ routeName: 'service-list', icon: 'gears', translation: 'services' },
{ routeName: 'tool-firewall', icon: 'shield', translation: 'firewall' },
- { routeName: 'tool-adminpw', icon: 'key-modern', translation: 'tools_adminpw' },
{ routeName: 'tool-settings', icon: 'sliders', translation: 'tools_yunohost_settings' },
{ routeName: 'tool-webadmin', icon: 'sliders', translation: 'tools_webadmin_settings' },
{ routeName: 'tool-power', icon: 'power-off', translation: 'tools_shutdown_reboot' }
From e3cad1c2b3af70e25658e4d10191457ad375ab06 Mon Sep 17 00:00:00 2001
From: Alexandre Aubin
Date: Sat, 8 Oct 2022 18:56:42 +0200
Subject: [PATCH 26/72] i18n: wording for global setting route
---
app/src/i18n/locales/en.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/i18n/locales/en.json b/app/src/i18n/locales/en.json
index 06b3039d..c1f3e4c5 100644
--- a/app/src/i18n/locales/en.json
+++ b/app/src/i18n/locales/en.json
@@ -455,7 +455,7 @@
"update": "Update user '{name}'"
},
"settings": {
- "update": "Update '{panel}' global settings panel"
+ "update": "Update '{panel}' global settings"
}
},
"run": "Run",
From 2a800976129c99482a022357fcf44c204f91bb99 Mon Sep 17 00:00:00 2001
From: Alexandre Aubin
Date: Sun, 9 Oct 2022 17:00:48 +0200
Subject: [PATCH 27/72] Merge firstname and lastname info
---
app/src/i18n/locales/en.json | 7 +++--
app/src/i18n/locales/fr.json | 5 +--
app/src/store/data.js | 3 +-
app/src/views/user/UserCreate.vue | 48 +++--------------------------
app/src/views/user/UserEdit.vue | 51 +++++--------------------------
5 files changed, 20 insertions(+), 94 deletions(-)
diff --git a/app/src/i18n/locales/en.json b/app/src/i18n/locales/en.json
index c1f3e4c5..b790154c 100644
--- a/app/src/i18n/locales/en.json
+++ b/app/src/i18n/locales/en.json
@@ -329,9 +329,10 @@
"path": "Path",
"perform": "Perform",
"placeholder": {
- "username": "johndoe",
- "firstname": "John",
- "lastname": "Doe",
+ "username": "samsmith",
+ "fullname": "Sam Smith",
+ "firstname": "Sam",
+ "lastname": "Smith",
"groupname": "My group name",
"domain": "my-domain.com",
"file": "Browse a file or drag and drop it"
diff --git a/app/src/i18n/locales/fr.json b/app/src/i18n/locales/fr.json
index 5d03b7d4..14c9bfe2 100644
--- a/app/src/i18n/locales/fr.json
+++ b/app/src/i18n/locales/fr.json
@@ -335,8 +335,9 @@
"domain": "mon-domaine.fr",
"groupname": "Le nom de mon groupe",
"lastname": "Dupont",
- "firstname": "Jean",
- "username": "jeandupont",
+ "firstname": "Camille",
+ "fullname": "Camille Dupont",
+ "username": "camilledupont",
"file": "Parcourir un fichier ou le faire glisser et déposer"
},
"perform": "Exécuter",
diff --git a/app/src/store/data.js b/app/src/store/data.js
index 50e39b48..e8a4163a 100644
--- a/app/src/store/data.js
+++ b/app/src/store/data.js
@@ -48,12 +48,11 @@ export default {
Vue.set(state.users_details, username, userData)
if (!state.users) return
const user = state.users[username]
- for (const key of ['firstname', 'lastname', 'mail']) {
+ for (const key of ['fullname', 'mail']) {
if (user[key] !== userData[key]) {
Vue.set(user, key, userData[key])
}
}
- Vue.set(user, 'fullname', `${userData.firstname} ${userData.lastname}`)
},
'UPDATE_USERS_DETAILS' (state, payload) {
diff --git a/app/src/views/user/UserCreate.vue b/app/src/views/user/UserCreate.vue
index 8f3af02c..1ae9e7c5 100644
--- a/app/src/views/user/UserCreate.vue
+++ b/app/src/views/user/UserCreate.vue
@@ -9,26 +9,7 @@
-
-
-
-
-
-
- {{ self[fname].label }}
-
-
-
-
-
-
-
-
+
@@ -82,10 +63,7 @@ export default {
form: {
username: '',
- fullname: {
- firstname: '',
- lastname: ''
- },
+ fullname: '',
domain: '',
password: '',
confirmation: ''
@@ -104,18 +82,9 @@ export default {
fullname: {
label: this.$i18n.t('user_fullname'),
- id: 'fullname',
props: {
- firstname: {
- id: 'firstname',
- label: this.$i18n.t('common.firstname'),
- placeholder: this.$i18n.t('placeholder.firstname')
- },
- lastname: {
- id: 'lastname',
- label: this.$i18n.t('common.lastname'),
- placeholder: this.$i18n.t('placeholder.lastname')
- }
+ id: 'fullname',
+ placeholder: this.$i18n.t('placeholder.fullname')
}
},
@@ -156,10 +125,7 @@ export default {
return {
form: {
username: { required, alphalownum_, notInUsers: unique(this.userNames) },
- fullname: {
- firstname: { required, name },
- lastname: { required, name }
- },
+ fullname: { required, name },
domain: { required },
password: { required, passwordLenght: minLength(8) },
confirmation: { required, passwordMatch: sameAs('password') }
@@ -189,10 +155,6 @@ export default {
diff --git a/app/src/scss/_variables.scss b/app/src/scss/_variables.scss
index 4182d446..5d990484 100644
--- a/app/src/scss/_variables.scss
+++ b/app/src/scss/_variables.scss
@@ -97,3 +97,7 @@ $fa-font-size-base: $font-size-base;
// ╰────────────────────╯
$thin-border: $hr-border-width solid $hr-border-color;
+
+$btn-padding-y-xs: .25rem;
+$btn-padding-x-xs: .35rem;
+$btn-line-height-xs: 1.5;
diff --git a/app/src/scss/main.scss b/app/src/scss/main.scss
index f1fe207a..4f4faee6 100644
--- a/app/src/scss/main.scss
+++ b/app/src/scss/main.scss
@@ -58,6 +58,11 @@ body {
}
}
+// Add xs sized btn
+.btn-xs {
+ @include button-size($btn-padding-y-xs, $btn-padding-x-xs, $btn-font-size-sm, $btn-line-height-xs, $btn-border-radius-sm);
+}
+
// Allow state of input group to be displayed under the group
.input-group .is-invalid ~ .invalid-feedback {
display: block;
From 8fb7cc8469f67054766277509e020952474754f6 Mon Sep 17 00:00:00 2001
From: axolotle
Date: Tue, 1 Feb 2022 17:44:50 +0100
Subject: [PATCH 32/72] update DomainList with RecursiveListGroup
---
app/src/i18n/locales/en.json | 6 ++-
app/src/views/domain/DomainList.vue | 77 ++++++++++++++++++-----------
2 files changed, 53 insertions(+), 30 deletions(-)
diff --git a/app/src/i18n/locales/en.json b/app/src/i18n/locales/en.json
index c1f3e4c5..aea969f0 100644
--- a/app/src/i18n/locales/en.json
+++ b/app/src/i18n/locales/en.json
@@ -160,7 +160,11 @@
"push_force": "Overwrite existing records",
"push_force_confirm": "Are you sure you want to force push all suggested dns records? Be aware that it may overwrite manually or important default records set by you or your registrar.",
"push_force_warning": "It looks like some DNS records that YunoHost would have set are already in the registrar configuration. You can use the overwrite option if you know what you are doing."
- }
+ },
+ "types": {
+ "main_domain": "Main domain"
+ },
+ "toggle_subdomains": "Toggle subdomains"
},
"domain_add": "Add domain",
"domain_add_dns_doc": "… and I have set my DNS correctly .",
diff --git a/app/src/views/domain/DomainList.vue b/app/src/views/domain/DomainList.vue
index 5e2f1795..94135b76 100644
--- a/app/src/views/domain/DomainList.vue
+++ b/app/src/views/domain/DomainList.vue
@@ -3,9 +3,10 @@
id="domain-list"
:search.sync="search"
:items="domains"
- :filtered-items="filteredDomains"
items-name="domains"
:queries="queries"
+ :filtered-items="hasFilteredItems"
+ @queries-response="onQueriesResponse"
>
@@ -14,57 +15,75 @@
-
-
-
-
- {{ domain }}
-
- {{ $t('words.default') }}
-
+
+
+
+
+
+ {{ data.name.replace(parent ? parent.data.name : null, '') }}
+ {{ parent.data.name }}
+
+
+
+
-
- https://{{ domain }}
-
-
-
-
+
+
+
+
From b7bc950719439123917d8304c24326b97a0c5aeb Mon Sep 17 00:00:00 2001
From: axolotle
Date: Tue, 1 Feb 2022 22:02:57 +0100
Subject: [PATCH 34/72] add ExplainWhat component to display a little help
popup
---
app/src/components/globals/ExplainWhat.vue | 73 ++++++++++++++++++++++
1 file changed, 73 insertions(+)
create mode 100644 app/src/components/globals/ExplainWhat.vue
diff --git a/app/src/components/globals/ExplainWhat.vue b/app/src/components/globals/ExplainWhat.vue
new file mode 100644
index 00000000..e5b3af82
--- /dev/null
+++ b/app/src/components/globals/ExplainWhat.vue
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+ {{ $t('details_about', { subject: title }) }}
+
+
+
+
+
+
+
+
+
+
+
From dcb9534e77204f227d2ff6f91ab3a5f713fd6e5d Mon Sep 17 00:00:00 2001
From: axolotle
Date: Tue, 1 Feb 2022 22:17:32 +0100
Subject: [PATCH 35/72] update DomainInfo page with moar data and config panel
---
app/src/i18n/locales/en.json | 38 ++++-
app/src/scss/main.scss | 3 +
app/src/store/data.js | 17 ++
app/src/views/domain/DomainInfo.vue | 232 ++++++++++++++++++++++------
4 files changed, 242 insertions(+), 48 deletions(-)
diff --git a/app/src/i18n/locales/en.json b/app/src/i18n/locales/en.json
index aea969f0..ce100431 100644
--- a/app/src/i18n/locales/en.json
+++ b/app/src/i18n/locales/en.json
@@ -144,6 +144,14 @@
"disabled": "Disabled",
"dns": "DNS",
"domain": {
+ "cert": {
+ "types": {
+ "self-signed": "Self-signed",
+ "lets-encrypt": "Let's Encrypt",
+ "other-unknown": "Other/Unknown"
+ },
+ "valid_for": "valid for {days}"
+ },
"config": {
"edit": "Edit domain configuration",
"title": "Domain configuration"
@@ -153,6 +161,19 @@
"auto_config_ignored": "ignored, won't be changed by YunoHost unless you check the overwrite option",
"auto_config_ok": "Automatic configuration seems to be OK!",
"auto_config_zone": "Current DNS zone",
+ "semi_auto_status": {
+ "activable": "Activable",
+ "activated": "Activated",
+ "has_changes": "Has changes",
+ "unavailable": "Unavailable"
+ },
+ "methods": {
+ "auto": "Automatic",
+ "handled_in_parent": "Handled in parent domain",
+ "manual": "Manual",
+ "none": "None",
+ "semi_auto": "Semi-automatic"
+ },
"edit": "Edit DNS configuration",
"info": "The automatic DNS records configuration is an experimental feature. Consider saving your current DNS zone from your DNS registrar's interface before pushing records from here.",
"manual_config": "Suggested DNS records for manual configuration",
@@ -161,7 +182,20 @@
"push_force_confirm": "Are you sure you want to force push all suggested dns records? Be aware that it may overwrite manually or important default records set by you or your registrar.",
"push_force_warning": "It looks like some DNS records that YunoHost would have set are already in the registrar configuration. You can use the overwrite option if you know what you are doing."
},
+ "explain": {
+ "main_domain": "The main domain is the domain from which users can connect to the portal (via \"{domain}/yunohost/sso\"). Therefore, it is not possible to delete it. If you want to delete \"{domain}\", you will first have to choose or add another domain and set it as the main domain."
+ },
+ "info": {
+ "apps_on_domain": "Apps installed on domain",
+ "certificate_authority": "SSL Certification authority",
+ "dns_config_method": "DNS config method",
+ "dns_semi_auto_config_feature": "Semi-auto DNS configuration feature",
+ "domain_type": "Domain type",
+ "registrar": "Registrar"
+ },
"types": {
+ "parent_domain": "Parent domain",
+ "subdomain": "Subdomain",
"main_domain": "Main domain"
},
"toggle_subdomains": "Toggle subdomains"
@@ -554,8 +588,10 @@
"browse": "Browse",
"collapse": "Collapse",
"default": "Default",
+ "link": "Link",
"none": "None",
- "separator": ", "
+ "separator": ", ",
+ "valid": "Valid"
},
"wrong_password_or_username": "Wrong password or username",
"yes": "Yes",
diff --git a/app/src/scss/main.scss b/app/src/scss/main.scss
index 4f4faee6..0fde40c0 100644
--- a/app/src/scss/main.scss
+++ b/app/src/scss/main.scss
@@ -68,7 +68,10 @@ body {
display: block;
}
+
+.tooltip { top: 0; }
// Descriptive list ( elems with inside)
+// FIXME REMOVE when every infos switch to `DescriptionRow`
.row-line {
@include media-breakpoint-up(md) {
&:hover {
diff --git a/app/src/store/data.js b/app/src/store/data.js
index ef82e457..a0fbf983 100644
--- a/app/src/store/data.js
+++ b/app/src/store/data.js
@@ -22,6 +22,7 @@ export default {
state: () => ({
main_domain: undefined,
domains: undefined, // Array
+ domains_details: {},
users: undefined, // basic user data: Object {username: {data}}
users_details: {}, // precise user data: Object {username: {data}}
groups: undefined,
@@ -33,6 +34,22 @@ export default {
state.domains = domains
},
+ 'SET_DOMAINS_DETAILS' (state, [name, { domains }]) {
+ Vue.set(state.domains_details, name, domains[name])
+ },
+
+ 'UPDATE_DOMAINS_DETAILS' (state, payload) {
+ // FIXME use a common function to execute the same code ?
+ this.commit('SET_DOMAINS_DETAILS', payload)
+ },
+
+ 'DEL_DOMAINS_DETAILS' (state, [name]) {
+ Vue.delete(state.domains_details, name)
+ if (state.domains) {
+ Vue.delete(state.domains, name)
+ }
+ },
+
'ADD_DOMAINS' (state, [{ domain }]) {
state.domains.push(domain)
},
diff --git a/app/src/views/domain/DomainInfo.vue b/app/src/views/domain/DomainInfo.vue
index 3f52e27a..6054683e 100644
--- a/app/src/views/domain/DomainInfo.vue
+++ b/app/src/views/domain/DomainInfo.vue
@@ -1,83 +1,221 @@
-
-
-
- {{ $t('domain_visit_url', { url: 'https://' + name }) }}
-
- {{ $t('domain_visit') }}
-
-
+
+
+
+
+
+
+ {{ $t('set_default') }}
+
-
- {{ $t('domain_default_desc') }}
-
- {{ $t('domain_default_longdesc') }}
-
-
- {{ $t('set_default') }}
-
-
+
+
+ {{ $t('delete') }}
+
+
-
- {{ $t('domain.config.edit') }}
-
- {{ $t('domain.config.title') }}
-
-
+
+
+
+ https://{{ name }}
+
+
-
- {{ $t('domain.dns.edit') }}
-
- {{ $t('domain_dns_config') }}
-
-
+
+
+
+
+ {{ $t('domain.types.main_domain') }}
+ ,
+
+ {{ $t('domain.types.' + (parentName ? 'subdomain' : 'parent_domain' )) }}
+
-
- {{ $t('domain_delete_longdesc') }}
-
-
- {{ $t('delete') }}
-
+
+
+
+ {{ $t('domain.cert.types.' + cert.authority) }}
+ ({{ $t('domain.cert.valid_for', { days: $tc('day_validity', cert.validity) }) }})
+
+
+
+
+ {{ $t('domain.dns.methods.' + dns.method) }}
+
+
+ (
+ {{ $t('domain.dns.semi_auto_status.' + dns.semi_auto_status) }})
+
+
+
+
+ {{ parentName }}
+
+
+
+
+
+
+
+ {{ $t('domain.dns.semi_auto_status.' + dns.semi_auto_status) }}
+
+
+
+
+
+
+
+
+
+ {{ app.name }}
+
+
+ {{ $t('app.visit_app') }}
+
+
+
+
+ {{ domain.apps ? '' : $t('words.none') }}
+
+
+
@@ -26,5 +27,25 @@ export default {
&.fs-sm {
font-size: 1rem;
}
+
+ &.variant {
+ font-size: .8rem;
+ width: 1.35rem;
+ min-width: 1.35rem;
+ height: 1.35rem;
+ line-height: 165%;
+ border-radius: 50rem;
+
+ @each $color, $value in $theme-colors {
+ &.#{$color} {
+ background-color: $value;
+ color: $white;
+ }
+ }
+
+ &.warning {
+ color: $black;
+ }
+ }
}
From 69d1d7ec1efc7f71fe7cfcd4ea5b56995a86d086 Mon Sep 17 00:00:00 2001
From: axolotle
Date: Thu, 6 Oct 2022 21:07:55 +0200
Subject: [PATCH 37/72] domaininfo: remove some info and update view with
action handling
---
app/src/i18n/locales/en.json | 8 +--
app/src/router/routes.js | 18 +++--
app/src/store/data.js | 4 +-
app/src/views/domain/DomainInfo.vue | 104 ++++++++--------------------
4 files changed, 47 insertions(+), 87 deletions(-)
diff --git a/app/src/i18n/locales/en.json b/app/src/i18n/locales/en.json
index ce100431..a42bdd61 100644
--- a/app/src/i18n/locales/en.json
+++ b/app/src/i18n/locales/en.json
@@ -146,9 +146,9 @@
"domain": {
"cert": {
"types": {
- "self-signed": "Self-signed",
- "lets-encrypt": "Let's Encrypt",
- "other-unknown": "Other/Unknown"
+ "selfsigned": "Self-signed",
+ "letsencrypt": "Let's Encrypt",
+ "other": "Other/Unknown"
},
"valid_for": "valid for {days}"
},
@@ -188,8 +188,6 @@
"info": {
"apps_on_domain": "Apps installed on domain",
"certificate_authority": "SSL Certification authority",
- "dns_config_method": "DNS config method",
- "dns_semi_auto_config_feature": "Semi-auto DNS configuration feature",
"domain_type": "Domain type",
"registrar": "Registrar"
},
diff --git a/app/src/router/routes.js b/app/src/router/routes.js
index ef339870..a610f5c6 100644
--- a/app/src/router/routes.js
+++ b/app/src/router/routes.js
@@ -141,14 +141,22 @@ const routes = [
}
},
{
- name: 'domain-info',
path: '/domains/:name',
component: () => import(/* webpackChunkName: "views/domain/info" */ '@/views/domain/DomainInfo'),
props: true,
- meta: {
- args: { param: 'name' },
- breadcrumb: ['domain-list', 'domain-info']
- }
+ children: [
+ {
+ name: 'domain-info',
+ path: ':tabId?',
+ component: () => import(/* webpackChunkName: "components/configPanel" */ '@/components/ConfigPanel'),
+ props: true,
+ meta: {
+ routerParams: ['name'], // Override router key params to avoid view recreation at tab change.
+ args: { param: 'name' },
+ breadcrumb: ['domain-list', 'domain-info']
+ }
+ }
+ ]
},
{
// no need for name here, only children are visited
diff --git a/app/src/store/data.js b/app/src/store/data.js
index a0fbf983..05bbd685 100644
--- a/app/src/store/data.js
+++ b/app/src/store/data.js
@@ -34,8 +34,8 @@ export default {
state.domains = domains
},
- 'SET_DOMAINS_DETAILS' (state, [name, { domains }]) {
- Vue.set(state.domains_details, name, domains[name])
+ 'SET_DOMAINS_DETAILS' (state, [name, details]) {
+ Vue.set(state.domains_details, name, details)
},
'UPDATE_DOMAINS_DETAILS' (state, payload) {
diff --git a/app/src/views/domain/DomainInfo.vue b/app/src/views/domain/DomainInfo.vue
index 6054683e..6a4331cf 100644
--- a/app/src/views/domain/DomainInfo.vue
+++ b/app/src/views/domain/DomainInfo.vue
@@ -1,5 +1,8 @@
-
+
@@ -31,49 +34,20 @@
id="explain-main-domain"
:title="$t('domain.types.main_domain')"
:content="$t('domain.explain.main_domain', { domain: name })"
- >{{ $t('domain.types.main_domain') }}
- ,
+ >{{ $t('domain.types.main_domain') }},
{{ $t('domain.types.' + (parentName ? 'subdomain' : 'parent_domain' )) }}
-
+
{{ $t('domain.cert.types.' + cert.authority) }}
({{ $t('domain.cert.valid_for', { days: $tc('day_validity', cert.validity) }) }})
-
-
- {{ $t('domain.dns.methods.' + dns.method) }}
-
-
- (
- {{ $t('domain.dns.semi_auto_status.' + dns.semi_auto_status) }})
-
-
-
-
- {{ parentName }}
-
-
-
-
-
-
-
- {{ $t('domain.dns.semi_auto_status.' + dns.semi_auto_status) }}
-
-
-
+
@@ -93,11 +67,11 @@
- {{ domain.apps ? '' : $t('words.none') }}
+ {{ domain.apps.length ? '' : $t('words.none') }}
-
+
@@ -146,26 +120,19 @@ export default {
return this.$store.getters.highestDomainParentName(this.name)
},
- certStatus () {
- const cert = this.domain.certificate
- const trad = (cert.validity < 15 ? 'renew.' : '') + cert.authority
- if (cert.validity <= 0) {
- return { trad: 'invalid', icon: 'times', variant: 'danger' }
- } else if (cert.authority === 'other-unknown') {
- return cert.validity < 15
- ? { trad, icon: 'exclamation', variant: 'danger' }
- : { trad, icon: 'check', variant: 'success' }
- } else if (cert.authority === 'lets-encrypt') {
- return { trad, icon: 'thumbs-up', variant: 'success' }
- }
- return { trad, icon: 'exclamation', variant: 'warning' }
- },
-
cert () {
- return {
- ...this.domain.certificate,
- status: this.certStatus
+ const { CA_type: authority, validity } = this.domain.certificate
+ const baseInfos = { authority, validity }
+ if (validity <= 0) {
+ return { icon: 'times', variant: 'danger', ...baseInfos }
+ } else if (authority === 'other') {
+ return validity < 15
+ ? { icon: 'exclamation', variant: 'danger', ...baseInfos }
+ : { icon: 'check', variant: 'success', ...baseInfos }
+ } else if (authority === 'letsencrypt') {
+ return { icon: 'thumbs-up', variant: 'success', ...baseInfos }
}
+ return { icon: 'exclamation', variant: 'warning', ...baseInfos }
},
dns () {
@@ -175,18 +142,6 @@ export default {
isMainDomain () {
if (!this.mainDomain) return
return this.name === this.mainDomain
- },
-
- semiAuto () {
- const status = this.dns.semi_auto_status
- if (!status) return
- if (status === 'unavailable') return { icon: 'times', variant: 'danger' }
- if (status === 'activable') return { icon: 'check', variant: 'info' }
- if (status === 'activated') return { icon: 'check', variant: 'success' }
- // FIXME mutate status on push --dry_run (misconfigured + has_diff)
- if (status === 'has_changes') return { icon: 'wrench', variant: 'warning' }
- if (status === 'misconfigured') return { icon: 'times', variant: 'danger' }
- return undefined
}
},
@@ -195,23 +150,22 @@ export default {
this.config = formatYunoHostConfigPanels(config)
},
- async applyConfig (id_) {
- const formatedData = await formatFormData(
- this.config.forms[id_],
- { removeEmpty: false, removeNull: true, multipart: false }
- )
+ async onConfigSubmit ({ id, form, action, name }) {
+ const args = await formatFormData(form, { removeEmpty: false, removeNull: true })
api.put(
- `domains/${this.name}/config`,
- { key: id_, args: objectToParams(formatedData) },
- { key: 'domains.update_config', name: this.name }
+ action
+ ? `domain/${this.name}/actions/${action}`
+ : `domains/${this.name}/config/${id}`,
+ { args: objectToParams(args) },
+ { key: `domains.${action ? 'action' : 'update'}_config`, id, name: this.name }
).then(() => {
this.$refs.view.fetchQueries({ triggerLoading: true })
}).catch(err => {
if (err.name !== 'APIBadRequestError') throw err
- const panel = this.config.panels.find(({ id }) => id_ === id)
+ const panel = this.config.panels.find(panel => panel.id === id)
if (err.data.name) {
- this.config.errors[id_][err.data.name].message = err.message
+ this.config.errors[id][err.data.name].message = err.message
} else this.$set(panel, 'serverError', err.message)
})
},
From a216d5909861657f44a5b7cd7fa8fb6e09378914 Mon Sep 17 00:00:00 2001
From: axolotle
Date: Fri, 7 Oct 2022 12:23:12 +0200
Subject: [PATCH 38/72] configpanels: do not display "save" button when non
editable
---
app/src/components/ConfigPanel.vue | 12 +++++++++---
app/src/helpers/yunohostArguments.js | 14 +++++++++++++-
2 files changed, 22 insertions(+), 4 deletions(-)
diff --git a/app/src/components/ConfigPanel.vue b/app/src/components/ConfigPanel.vue
index 78d6d1a5..e8c08270 100644
--- a/app/src/components/ConfigPanel.vue
+++ b/app/src/components/ConfigPanel.vue
@@ -2,6 +2,7 @@
@@ -13,8 +14,10 @@
{{ section.name }} {{ section.help }}
@@ -86,6 +89,9 @@ export default {
diff --git a/app/src/helpers/yunohostArguments.js b/app/src/helpers/yunohostArguments.js
index ffded7a5..f19ec8b6 100644
--- a/app/src/helpers/yunohostArguments.js
+++ b/app/src/helpers/yunohostArguments.js
@@ -10,6 +10,14 @@ import {
} from '@/helpers/commons'
+const NO_VALUE_FIELDS = [
+ 'ReadOnlyField',
+ 'ReadOnlyAlertItem',
+ 'MarkdownItem',
+ 'DisplayTextItem',
+ 'ButtonItem'
+]
+
/**
* Tries to find a translation corresponding to the user's locale/fallback locale in a
* Yunohost argument or simply return the string if it's not an object literal.
@@ -359,7 +367,7 @@ export function formatYunoHostConfigPanels (data) {
}
for (const { id: panelId, name, help, sections } of data.panels) {
- const panel = { id: panelId, sections: [], serverError: '' }
+ const panel = { id: panelId, sections: [], serverError: '', hasApplyButton: false }
result.forms[panelId] = {}
result.validations[panelId] = {}
result.errors[panelId] = {}
@@ -391,6 +399,10 @@ export function formatYunoHostConfigPanels (data) {
Object.assign(result.errors[panelId], errors)
section.fields = fields
panel.sections.push(section)
+
+ if (!section.isActionSection && Object.values(fields).some((field) => !NO_VALUE_FIELDS.includes(field.is))) {
+ panel.hasApplyButton = true
+ }
}
result.panels.push(panel)
From 3a3846bdaca54ec412209b0b00438d7da92a7e08 Mon Sep 17 00:00:00 2001
From: axolotle
Date: Fri, 7 Oct 2022 15:56:02 +0200
Subject: [PATCH 39/72] configpanels: allow slots to be passed to ConfigPanel
views
---
app/src/components/ConfigPanel.vue | 2 +-
app/src/components/ConfigPanels.vue | 6 +++++-
app/src/components/RoutableTabs.vue | 6 +++++-
3 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/app/src/components/ConfigPanel.vue b/app/src/components/ConfigPanel.vue
index e8c08270..f51dfadc 100644
--- a/app/src/components/ConfigPanel.vue
+++ b/app/src/components/ConfigPanel.vue
@@ -91,7 +91,7 @@ export default {
margin-bottom: 1em;
border-bottom: solid $border-width $gray-500;
}
-.panel-section:not(:last-child) {
+::v-deep .panel-section:not(:last-child) {
margin-bottom: 3rem;
}
diff --git a/app/src/components/ConfigPanels.vue b/app/src/components/ConfigPanels.vue
index cd959b59..a022a0f5 100644
--- a/app/src/components/ConfigPanels.vue
+++ b/app/src/components/ConfigPanels.vue
@@ -3,7 +3,11 @@
:routes="routes_"
v-bind="{ panels, forms, v: $v, ...$attrs }"
v-on="$listeners"
- />
+ >
+
+
+
+
+
+
From 47fa27b085cefad6fe83aa694b8419221339fe72 Mon Sep 17 00:00:00 2001
From: axolotle
Date: Mon, 10 Oct 2022 17:06:26 +0200
Subject: [PATCH 44/72] domain: remove no longer used DomainConfig view
---
app/src/router/routes.js | 29 -----------
app/src/views/domain/DomainConfig.vue | 73 ---------------------------
2 files changed, 102 deletions(-)
delete mode 100644 app/src/views/domain/DomainConfig.vue
diff --git a/app/src/router/routes.js b/app/src/router/routes.js
index a610f5c6..1fb7b81f 100644
--- a/app/src/router/routes.js
+++ b/app/src/router/routes.js
@@ -158,35 +158,6 @@ const routes = [
}
]
},
- {
- // no need for name here, only children are visited
- path: '/domains/:name/config',
- component: () => import(/* webpackChunkName: "views/domain/config" */ '@/views/domain/DomainConfig'),
- props: true,
- children: [
- {
- name: 'domain-config',
- path: ':tabId?',
- component: () => import(/* webpackChunkName: "components/configPanel" */ '@/components/ConfigPanel'),
- props: true,
- meta: {
- routerParams: ['name'], // Override router key params to avoid view recreation at tab change.
- args: { trad: 'config' },
- breadcrumb: ['domain-list', 'domain-info', 'domain-config']
- }
- }
- ]
- },
- {
- name: 'domain-dns',
- path: '/domains/:name/dns',
- component: () => import(/* webpackChunkName: "views/domain/dns" */ '@/views/domain/DomainDns'),
- props: true,
- meta: {
- args: { trad: 'dns' },
- breadcrumb: ['domain-list', 'domain-info', 'domain-dns']
- }
- },
/* ───────╮
│ APPS │
diff --git a/app/src/views/domain/DomainConfig.vue b/app/src/views/domain/DomainConfig.vue
deleted file mode 100644
index 83b1da98..00000000
--- a/app/src/views/domain/DomainConfig.vue
+++ /dev/null
@@ -1,73 +0,0 @@
-
-
-
-
-
-
-
From de0877b2d7dbda0d4ef237c307d29e17015661c4 Mon Sep 17 00:00:00 2001
From: axolotle
Date: Mon, 10 Oct 2022 21:16:10 +0200
Subject: [PATCH 45/72] postinstall: add first admin user form
---
app/src/i18n/locales/en.json | 8 +--
app/src/views/PostInstall.vue | 99 +++++++++++++++++++++++++++--------
2 files changed, 83 insertions(+), 24 deletions(-)
diff --git a/app/src/i18n/locales/en.json b/app/src/i18n/locales/en.json
index 1fcf1749..79efb90b 100644
--- a/app/src/i18n/locales/en.json
+++ b/app/src/i18n/locales/en.json
@@ -389,15 +389,17 @@
"ports": "Ports",
"postinstall": {
"force": "Force the post-install",
- "title": "Postinstall"
+ "title": "Postinstall",
+ "user": {
+ "title": "Create first admin user",
+ "first_user_help": "This user will be granted admin privileges and will be allowed to connect to this administration interface as well as directly to the server via SSH.\nAs it is a regular user, you will also be able to connect to the user portal (SSO) with its credentials.\nOnce the post-installation is complete, you will be able to create other admin users by adding them into the 'admins' group."
+ }
},
"postinstall_domain": "This is the first domain name linked to your YunoHost server, but also the one which will be used by your server's users to access the authentication portal. Accordingly, it will be visible by everyone, so choose it carefully.",
"postinstall_intro_1": "Congratulations! YunoHost has been successfully installed.",
"postinstall_intro_2": "Two more configuration steps are required to activate you server's services.",
"postinstall_intro_3": "You can obtain more information by visiting the appropriate documentation page ",
- "postinstall_password": "This password will be used to manage everything on your server. Take the time to choose it wisely.",
"postinstall_set_domain": "Set main domain",
- "postinstall_set_password": "Set administration password",
"previous": "Previous",
"protocol": "Protocol",
"readme": "Readme",
diff --git a/app/src/views/PostInstall.vue b/app/src/views/PostInstall.vue
index 17bfa878..7edc353f 100644
--- a/app/src/views/PostInstall.vue
+++ b/app/src/views/PostInstall.vue
@@ -12,7 +12,7 @@
-
+
{{ $t('begin') }}
@@ -33,16 +33,23 @@
-
-
-
+
+
-
-
-
-
+
+
+
+
{{ $t('previous') }}
@@ -74,25 +81,58 @@
diff --git a/app/src/views/_partials/index.js b/app/src/views/_partials/index.js
index 7ea629c8..afbb4e97 100644
--- a/app/src/views/_partials/index.js
+++ b/app/src/views/_partials/index.js
@@ -7,4 +7,3 @@ export { default as HistoryConsole } from './HistoryConsole'
export { default as ViewLockOverlay } from './ViewLockOverlay'
export { default as DomainForm } from './DomainForm'
-export { default as PasswordForm } from './PasswordForm'
From adefa0d702118f43a0189cad67b5d136bf05f2bf Mon Sep 17 00:00:00 2001
From: axolotle
Date: Tue, 11 Oct 2022 18:09:18 +0200
Subject: [PATCH 47/72] appcatalog: adapt to app v2 quality stuff changes
---
app/src/i18n/locales/en.json | 7 ---
app/src/views/app/AppCatalog.vue | 84 +++++++++++---------------------
2 files changed, 29 insertions(+), 62 deletions(-)
diff --git a/app/src/i18n/locales/en.json b/app/src/i18n/locales/en.json
index 1fcf1749..05b8bd5e 100644
--- a/app/src/i18n/locales/en.json
+++ b/app/src/i18n/locales/en.json
@@ -73,14 +73,9 @@
"app_show_categories": "Show categories",
"app_state_inprogress": "not yet working",
"app_state_inprogress_explanation": "This maintainer of this app declared that this application is not ready yet for production use. BE CAREFUL!",
- "app_state_notworking": "not working",
- "app_state_notworking_explanation": "This maintainer of this app declared it as 'not working'. IT WILL BREAK YOUR SYSTEM!",
"app_state_lowquality": "low quality",
"app_state_lowquality_explanation": "This app may be functional, but may still contain issues, or is not fully integrated with YunoHost, or it does not respect the good practices.",
- "app_state_highquality": "high quality",
"app_state_highquality_explanation": "This app is well-integrated with YunoHost since at least a year.",
- "app_state_working": "working",
- "app_state_working_explanation": "The maintainer of this app declared it as 'working'. It means that it should be functional (c.f. application level) but is not necessarily peer-reviewed, it may still contain issues or is not fully integrated with YunoHost.",
"applications": "Applications",
"archive_empty": "Empty archive",
"backup": "Backup",
@@ -537,8 +532,6 @@
"unignore": "Unignore",
"uninstall": "Uninstall",
"unknown": "Unknown",
- "unmaintained": "Unmaintained",
- "unmaintained_details": "This app has not been updated for quite a while and the previous maintainer has gone away or does not have time to maintain this app. Feel free to check the app repository to provide your help",
"upnp": "UPnP",
"upnp_disabled": "UPnP is disabled.",
"upnp_enabled": "UPnP is enabled.",
diff --git a/app/src/views/app/AppCatalog.vue b/app/src/views/app/AppCatalog.vue
index f03a59f1..7c252f13 100644
--- a/app/src/views/app/AppCatalog.vue
+++ b/app/src/views/app/AppCatalog.vue
@@ -70,27 +70,28 @@
{{ app.manifest.name }}
-
+
+
{{ $t('app_state_' + app.state) }}
{{ app.manifest.description }}
-
+
- {{ $t(app.maintained) }}
+ {{ $t('orphaned') }}
@@ -182,9 +183,9 @@ export default {
// Filtering options
qualityOptions: [
- { value: 'isHighQuality', text: this.$i18n.t('only_highquality_apps') },
- { value: 'isDecentQuality', text: this.$i18n.t('only_decent_quality_apps') },
- { value: 'isWorking', text: this.$i18n.t('only_working_apps') },
+ { value: 'high_quality', text: this.$i18n.t('only_highquality_apps') },
+ { value: 'decent_quality', text: this.$i18n.t('only_decent_quality_apps') },
+ { value: 'working', text: this.$i18n.t('only_working_apps') },
{ value: 'all', text: this.$i18n.t('all_apps') }
],
categories: [
@@ -197,7 +198,7 @@ export default {
search: '',
category: null,
subtag: 'all',
- quality: 'isDecentQuality',
+ quality: 'decent_quality',
// Custom install form
customInstall: {
@@ -264,51 +265,26 @@ export default {
},
methods: {
- formatQuality (app) {
- const filters = {
- isHighQuality: false,
- isDecentQuality: false,
- isWorking: false,
- state: 'inprogress'
- }
- if (app.state === 'inprogress') return filters
- if (app.state === 'working' && app.level > 0) {
- filters.state = 'working'
- filters.isWorking = true
- }
- if (app.level <= 4 || app.level === '?') {
- filters.state = 'lowquality'
- return filters
- } else {
- filters.isDecentQuality = true
- }
- if (app.level >= 8) {
- filters.state = 'highquality'
- filters.isHighQuality = true
- }
- return filters
- },
-
- formatColor (app) {
- if (app.isDecentQuality || app.isHighQuality) return 'success'
- if (app.isWorking) return 'warning'
- return 'danger'
- },
-
onQueriesResponse (data) {
- // APPS
const apps = []
for (const key in data.apps) {
const app = data.apps[key]
- if (app.state === 'notworking') continue
-
- Object.assign(app, this.formatQuality(app))
- app.isInstallable = !app.installed || app.manifest.multi_instance
- if (app.maintained !== 'request_adoption') {
- app.maintained = app.maintained ? 'maintained' : 'orphaned'
+ app.isInstallable = !app.installed || app.manifest.integration.multi_instance
+ app.working = app.state === 'working'
+ app.decent_quality = app.working && app.level > 4
+ app.color = app.high_quality || app.level > 4
+ ? 'success'
+ : app.working ? 'warning' : 'danger'
+ if (app.working && app.level <= 4) {
+ app.state = 'lowquality'
}
- app.color = this.formatColor(app)
- app.searchValues = [app.id, app.state, app.manifest.name.toLowerCase(), app.manifest.description.toLowerCase()].join(' ')
+ app.searchValues = [
+ app.id,
+ app.state,
+ app.manifest.name,
+ app.manifest.description,
+ app.potential_alternative_to.join(' ')
+ ].join(' ').toLowerCase()
apps.push(app)
}
this.apps = apps.sort((a, b) => a.id > b.id ? 1 : -1)
@@ -328,10 +304,8 @@ export default {
// INSTALL APP
async onInstallClick (app) {
- if (!app.isDecentQuality) {
- // Ask for confirmation
- const state = app.color === 'danger' ? 'inprogress' : app.state
- const confirmed = await this.$askConfirmation(this.$i18n.t('confirm_install_app_' + state))
+ if (!app.decent_quality) {
+ const confirmed = await this.$askConfirmation(this.$i18n.t('confirm_install_app_' + app.state))
if (!confirmed) return
}
this.$router.push({ name: 'app-install', params: { id: app.id } })
From 967f9d8842e5f485348ea52215b15c91d77e06a5 Mon Sep 17 00:00:00 2001
From: axolotle
Date: Tue, 18 Oct 2022 17:38:17 +0200
Subject: [PATCH 48/72] appinstall: use DescriptionRow and reflect app v2
changes
---
app/src/components/globals/DescriptionRow.vue | 2 +-
app/src/views/app/AppInstall.vue | 22 ++++++-------------
2 files changed, 8 insertions(+), 16 deletions(-)
diff --git a/app/src/components/globals/DescriptionRow.vue b/app/src/components/globals/DescriptionRow.vue
index c6056892..1175d1c4 100644
--- a/app/src/components/globals/DescriptionRow.vue
+++ b/app/src/components/globals/DescriptionRow.vue
@@ -35,7 +35,7 @@ export default {
diff --git a/app/src/views/app/AppInfo.vue b/app/src/views/app/AppInfo.vue
index e86cbbc0..55cc758c 100644
--- a/app/src/views/app/AppInfo.vue
+++ b/app/src/views/app/AppInfo.vue
@@ -2,33 +2,22 @@
-
-
- {{ $t(prop) }}
-
-
- {{ value }}
- {{ value }}
-
-
-
-
- {{ $t('app_info_access_desc') }}
-
-
-
- {{ allowedGroups.length > 0 ? allowedGroups.join(', ') + '.' : $t('nobody') }}
-
- {{ $t('groups_and_permissions_manage') }}
-
-
-
+ {{ value }}
+ {{ value }}
+
+
+ {{ allowedGroups.length > 0 ? allowedGroups.join(', ') + '.' : $t('nobody') }}
+
+ {{ $t('groups_and_permissions_manage') }}
+
+
@@ -243,7 +232,7 @@ export default {
label: mainPermission.label,
description: app.description,
version: app.version,
- multi_instance: this.$i18n.t(app.manifest.multi_instance ? 'yes' : 'no'),
+ multi_instance: this.$i18n.t(app.manifest.integration.multi_instance ? 'yes' : 'no'),
install_time: readableDate(app.settings.install_time, true, true)
}
if (app.settings.domain && app.settings.path) {
From 372942d5e3f3a59406c64bacdcb094a9e32ecb99 Mon Sep 17 00:00:00 2001
From: axolotle
Date: Tue, 18 Oct 2022 18:13:42 +0200
Subject: [PATCH 50/72] appactions: rm old app action route + view
---
app/src/i18n/locales/en.json | 4 --
app/src/router/routes.js | 10 ---
app/src/views/app/AppActions.vue | 106 -------------------------------
app/src/views/app/AppInfo.vue | 15 +----
4 files changed, 1 insertion(+), 134 deletions(-)
delete mode 100644 app/src/views/app/AppActions.vue
diff --git a/app/src/i18n/locales/en.json b/app/src/i18n/locales/en.json
index 05b8bd5e..4ec1499a 100644
--- a/app/src/i18n/locales/en.json
+++ b/app/src/i18n/locales/en.json
@@ -54,8 +54,6 @@
"api_not_found": "Seems like the web-admin tried to query something that doesn't exist.",
"api_not_responding": "The YunoHost API is not responding. Maybe 'yunohost-api' is down or got restarted?",
"api_waiting": "Waiting for the server's response...",
- "app_actions": "Actions",
- "app_actions_label": "Perform actions",
"app_choose_category": "Choose a category",
"app_config_panel": "Config panel",
"app_config_panel_label": "Configure this app",
@@ -69,7 +67,6 @@
"app_install_parameters": "Install settings",
"app_manage_label_and_tiles": "Manage label and tiles",
"app_make_default": "Make default",
- "app_no_actions": "This application doesn't have any actions",
"app_show_categories": "Show categories",
"app_state_inprogress": "not yet working",
"app_state_inprogress_explanation": "This maintainer of this app declared that this application is not ready yet for production use. BE CAREFUL!",
@@ -407,7 +404,6 @@
"change_url": "Change access URL of '{name}'",
"install": "Install app '{name}'",
"set_default": "Redirect '{domain}' domain root to '{name}'",
- "perform_action": "Perform action '{action}' of app '{name}'",
"uninstall": "Uninstall app '{name}'",
"update_config": "Update panel '{id}' of app '{name}' configuration"
},
diff --git a/app/src/router/routes.js b/app/src/router/routes.js
index 0cddd8f7..7d815851 100644
--- a/app/src/router/routes.js
+++ b/app/src/router/routes.js
@@ -210,16 +210,6 @@ const routes = [
breadcrumb: ['app-list', 'app-info']
}
},
- {
- name: 'app-actions',
- path: '/apps/:id/actions',
- component: () => import(/* webpackChunkName: "views/apps/actions" */ '@/views/app/AppActions'),
- props: true,
- meta: {
- args: { trad: 'app_actions' },
- breadcrumb: ['app-list', 'app-info', 'app-actions']
- }
- },
{
// no need for name here, only children are visited
path: '/apps/:id/config-panel',
diff --git a/app/src/views/app/AppActions.vue b/app/src/views/app/AppActions.vue
deleted file mode 100644
index 6a92dded..00000000
--- a/app/src/views/app/AppActions.vue
+++ /dev/null
@@ -1,106 +0,0 @@
-
-
-
-
- {{ $t('experimental_warning') }}
-
-
-
-
-
-
-
-
-
-
- {{ $t('app_no_actions') }}
-
-
-
-
-
diff --git a/app/src/views/app/AppInfo.vue b/app/src/views/app/AppInfo.vue
index 55cc758c..19727b7b 100644
--- a/app/src/views/app/AppInfo.vue
+++ b/app/src/views/app/AppInfo.vue
@@ -134,19 +134,6 @@
-
-
-
-
-
- {{ $t('app_actions') }}
-
-
-
-
@@ -184,7 +171,7 @@ export default {
},
computed: {
- ...mapGetters(['domains', 'experimental']),
+ ...mapGetters(['domains']),
allowedGroups () {
if (!this.app) return
From a90cc5f1603302325615456c8b654c52863ca60a Mon Sep 17 00:00:00 2001
From: axolotle
Date: Tue, 18 Oct 2022 19:38:56 +0200
Subject: [PATCH 51/72] applist: fix apps label and name
---
app/src/views/app/AppList.vue | 21 ++-------------------
1 file changed, 2 insertions(+), 19 deletions(-)
diff --git a/app/src/views/app/AppList.vue b/app/src/views/app/AppList.vue
index 27e1931b..f156b240 100644
--- a/app/src/views/app/AppList.vue
+++ b/app/src/views/app/AppList.vue
@@ -68,25 +68,8 @@ export default {
return
}
- const multiInstances = {}
- this.apps = apps.map(({ id, name, description, permissions, manifest }) => {
- // FIXME seems like some apps may no have a label (replace with id)
- const label = permissions[id + '.main'].label
- // Display the `id` of the instead of its `name` if multiple apps share the same name
- if (manifest.multi_instance) {
- if (!(name in multiInstances)) {
- multiInstances[name] = []
- }
- const labels = multiInstances[name]
- if (labels.includes(label)) {
- name = id
- }
- labels.push(label)
- }
- if (label === name) {
- name = null
- }
- return { id, name, description, label }
+ this.apps = apps.map(({ id, name, description, manifest }) => {
+ return { id, name: manifest.name, label: name, description }
}).sort((prev, app) => {
return prev.label > app.label ? 1 : -1
})
From cff734a76ce70d407bab91b9030283f46f324710 Mon Sep 17 00:00:00 2001
From: axolotle
Date: Tue, 18 Oct 2022 20:34:28 +0200
Subject: [PATCH 52/72] appcatalog: consider app lvl8 as high quality
---
app/src/views/app/AppCatalog.vue | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/app/src/views/app/AppCatalog.vue b/app/src/views/app/AppCatalog.vue
index 7c252f13..c776711a 100644
--- a/app/src/views/app/AppCatalog.vue
+++ b/app/src/views/app/AppCatalog.vue
@@ -270,11 +270,10 @@ export default {
for (const key in data.apps) {
const app = data.apps[key]
app.isInstallable = !app.installed || app.manifest.integration.multi_instance
- app.working = app.state === 'working'
+ app.working = app.state === 'working' && app.level > 0
app.decent_quality = app.working && app.level > 4
- app.color = app.high_quality || app.level > 4
- ? 'success'
- : app.working ? 'warning' : 'danger'
+ app.high_quality = app.working && app.level >= 8
+ app.color = app.decent_quality ? 'success' : app.working ? 'warning' : 'danger'
if (app.working && app.level <= 4) {
app.state = 'lowquality'
}
From be9b75eb030c570ce2a901604c3469ec433c1039 Mon Sep 17 00:00:00 2001
From: Alexandre Aubin
Date: Tue, 18 Oct 2022 19:59:32 +0200
Subject: [PATCH 53/72] app catalog: moar tweaks on state/colors for the case
where level <= 0
---
app/src/i18n/locales/en.json | 3 +++
app/src/views/app/AppCatalog.vue | 12 +++++++++---
2 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/app/src/i18n/locales/en.json b/app/src/i18n/locales/en.json
index 4ec1499a..4d9a36a9 100644
--- a/app/src/i18n/locales/en.json
+++ b/app/src/i18n/locales/en.json
@@ -68,6 +68,8 @@
"app_manage_label_and_tiles": "Manage label and tiles",
"app_make_default": "Make default",
"app_show_categories": "Show categories",
+ "app_state_broken": "broken",
+ "app_state_broken_explanation": "This application is currently broken and not installable according to YunoHost's automatic tests",
"app_state_inprogress": "not yet working",
"app_state_inprogress_explanation": "This maintainer of this app declared that this application is not ready yet for production use. BE CAREFUL!",
"app_state_lowquality": "low quality",
@@ -102,6 +104,7 @@
"confirm_install_custom_app": "WARNING! Installing 3rd party applications may compromise the integrity and security of your system. You should probably NOT install it unless you know what you are doing. Are you willing to take that risk?",
"confirm_install_domain_root": "Are you sure you want to install this application on '/'? You will not be able to install any other app on {domain}",
"confirm_app_install": "Are you sure you want to install this application?",
+ "confirm_install_app_broken": "WARNING! This application is broken according to YunoHost's automatic tests and it is likely to break your system! You should probably NOT install it unless you know what you are doing. Are you willing to take that risk?",
"confirm_install_app_lowquality": "Warning: this application may work but is not well-integrated in YunoHost. Some features such as single sign-on and backup/restore might not be available.",
"confirm_install_app_inprogress": "WARNING! This application is still experimental (if not explicitly not working) and it is likely to break your system! You should probably NOT install it unless you know what you are doing. Are you willing to take that risk?",
"confirm_migrations_skip": "Skipping migrations is not recommended. Are you sure you want to do that?",
diff --git a/app/src/views/app/AppCatalog.vue b/app/src/views/app/AppCatalog.vue
index c776711a..66bdc39b 100644
--- a/app/src/views/app/AppCatalog.vue
+++ b/app/src/views/app/AppCatalog.vue
@@ -270,12 +270,18 @@ export default {
for (const key in data.apps) {
const app = data.apps[key]
app.isInstallable = !app.installed || app.manifest.integration.multi_instance
- app.working = app.state === 'working' && app.level > 0
+ app.working = app.state === 'working'
app.decent_quality = app.working && app.level > 4
app.high_quality = app.working && app.level >= 8
- app.color = app.decent_quality ? 'success' : app.working ? 'warning' : 'danger'
- if (app.working && app.level <= 4) {
+ app.color = 'danger'
+ if (app.working && app.level <= 0) {
+ app.state = 'broken'
+ app.color = 'danger'
+ } else if (app.working && app.level <= 4) {
app.state = 'lowquality'
+ app.color = 'warning'
+ } else if (app.working) {
+ app.color = 'success'
}
app.searchValues = [
app.id,
From 2cf9c787e7062a54e54838d1b18f1f7e2e4b12d1 Mon Sep 17 00:00:00 2001
From: Alexandre Aubin
Date: Tue, 18 Oct 2022 20:00:51 +0200
Subject: [PATCH 54/72] app install: support 'group' question + tweak label
question
---
app/src/helpers/yunohostArguments.js | 2 +-
app/src/i18n/locales/en.json | 4 +++-
app/src/views/app/AppInstall.vue | 3 ++-
3 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/app/src/helpers/yunohostArguments.js b/app/src/helpers/yunohostArguments.js
index 0ba1d683..c0e52613 100644
--- a/app/src/helpers/yunohostArguments.js
+++ b/app/src/helpers/yunohostArguments.js
@@ -166,7 +166,7 @@ export function formatYunoHostArgument (arg) {
}
},
{
- types: ['select', 'user', 'domain', 'app'],
+ types: ['select', 'user', 'domain', 'app', 'group'],
name: 'SelectItem',
props: ['id:name', 'choices'],
callback: function () {
diff --git a/app/src/i18n/locales/en.json b/app/src/i18n/locales/en.json
index 4d9a36a9..549a74e4 100644
--- a/app/src/i18n/locales/en.json
+++ b/app/src/i18n/locales/en.json
@@ -312,7 +312,8 @@
"items_verbose_count": "There are {items}. | There is 1 {items}. | There are {items}.",
"items_verbose_items_left": "There are {items} left. | There is 1 {items} left. | There are {items} left.",
"label": "Label",
- "label_for_manifestname": "Label for {name} (name displayed in the user portal)",
+ "label_for_manifestname": "Label for {name}",
+ "label_for_manifestname_help": "This is the name displayed in the user portal. This can be changed later.",
"last_ran": "Last time ran:",
"license": "License",
"local_archives": "Local archives",
@@ -324,6 +325,7 @@
"manage_apps": "Manage apps",
"manage_domains": "Manage domains",
"manage_users": "Manage users",
+ "manage_groups": "Manage groups",
"migrations": "Migrations",
"migrations_pending": "Pending migrations",
"migrations_done": "Previous migrations",
diff --git a/app/src/views/app/AppInstall.vue b/app/src/views/app/AppInstall.vue
index 9f5ce862..8af0d9c0 100644
--- a/app/src/views/app/AppInstall.vue
+++ b/app/src/views/app/AppInstall.vue
@@ -90,7 +90,8 @@ export default {
manifest.install.unshift({
ask: this.$t('label_for_manifestname', { name: manifest.name }),
default: manifest.name,
- name: 'label'
+ name: 'label',
+ help: this.$t('label_for_manifestname_help')
})
const {
From 90806206f540fc6a355babf3b0e2f6faba78a5a9 Mon Sep 17 00:00:00 2001
From: Kay0u
Date: Fri, 2 Sep 2022 13:46:21 +0200
Subject: [PATCH 55/72] wip: add dark theme setting
---
app/src/App.vue | 2 ++
app/src/i18n/locales/en.json | 3 ++-
app/src/scss/_variables.scss | 15 +++++++++++++++
app/src/scss/main.scss | 19 ++++++++++++++++++-
app/src/store/settings.js | 12 ++++++++++++
app/src/views/_partials/HistoryConsole.vue | 4 ++++
app/src/views/tool/ToolWebadmin.vue | 9 ++++++++-
7 files changed, 61 insertions(+), 3 deletions(-)
diff --git a/app/src/App.vue b/app/src/App.vue
index f205e207..dc2a3247 100644
--- a/app/src/App.vue
+++ b/app/src/App.vue
@@ -153,6 +153,8 @@ export default {
if (today.getDate() === 31 && today.getMonth() + 1 === 10) {
this.$store.commit('SET_SPINNER', 'spookycat')
}
+
+ document.documentElement.setAttribute('data-theme', localStorage.getItem('theme') === "true" ? 'darkMode' : '') // updates the data-theme attribute
}
}
diff --git a/app/src/i18n/locales/en.json b/app/src/i18n/locales/en.json
index 2091446e..dde4ef00 100644
--- a/app/src/i18n/locales/en.json
+++ b/app/src/i18n/locales/en.json
@@ -525,7 +525,8 @@
"cache_description": "Consider disabling the cache if you plan on working with the CLI while also navigating in this web-admin.",
"experimental": "Experimental mode",
"experimental_description": "Gives you access to experimental features. These are considered unstable and may break your system. Enable this only if you know what you are doing.",
- "transitions": "Page transition animations"
+ "transitions": "Page transition animations",
+ "theme": "Toggle dark mode"
},
"tools_yunohost_settings": "YunoHost settings",
"tools_webadmin_settings": "Web-admin settings",
diff --git a/app/src/scss/_variables.scss b/app/src/scss/_variables.scss
index 5d990484..ecf89932 100644
--- a/app/src/scss/_variables.scss
+++ b/app/src/scss/_variables.scss
@@ -38,6 +38,17 @@ $theme-colors: (
'best': $purple
);
+:root {
+ --background-color: #fff;
+ --background-color-secondary: #fff;
+}
+
+[data-theme="darkMode"] {
+ /* Variables for dark mode */
+ --background-color: black;
+ --background-color-secondary: white;
+}
+
// Replace font-weight 300 with 200
$font-weight-light: 200;
$display1-weight: 200;
@@ -75,6 +86,10 @@ $hr-border-color: $gray-200;
$list-group-action-color: $gray-800;
+$background-color-primary: var(--background-color);
+
+$background-color-secondary: var(--background-color-secondary);
+
// ╭──────────────────────────────────────╮
// │ ┌─╴╭─╮┌─╮╷ ╭ ╭─┐╷╷╷┌─╴╭─╴╭─╮╭╮╮┌─╴ │
// │ ├─╴│ │├┬╯├┴╮╶─╴├─┤│││├─╴╰─╮│ ││││├─╴ │
diff --git a/app/src/scss/main.scss b/app/src/scss/main.scss
index 0fde40c0..e3eecb3f 100644
--- a/app/src/scss/main.scss
+++ b/app/src/scss/main.scss
@@ -25,18 +25,33 @@ body {
overflow-x: hidden;
min-height: 100vh;
margin: 0;
+ background-color: $background-color-primary;
}
#app {
display: flex;
flex-direction: column;
- min-height: 100vh
+ min-height: 100vh;
+ background-color: $background-color-primary;
}
.menu-list .list-group-item {
padding: $list-group-item-padding-y 0;
display: flex;
align-items: center;
+ background-color: $background-color-primary;
+}
+
+.list-group-item:hover {
+ background-color: $background-color-secondary;
+}
+
+.form-control {
+ background-color: $background-color-secondary;
+}
+
+.form-control:focus {
+ background-color: $background-color-secondary;
}
@@ -102,12 +117,14 @@ body {
h1, h2, h3, h4, h5, h6 {
margin: 0;
}
+ background-color: $background-color-primary;
}
.card-header, .list-group-item {
h1, h2, h3, h4, h5, h6 {
font-weight: $font-weight-normal;
}
+ background-color: $background-color-primary;
}
h3.card-title {
diff --git a/app/src/store/settings.js b/app/src/store/settings.js
index 79e505dc..6b356946 100644
--- a/app/src/store/settings.js
+++ b/app/src/store/settings.js
@@ -13,6 +13,7 @@ export default {
fallbackLocale: localStorage.getItem('fallbackLocale'),
cache: localStorage.getItem('cache') !== 'false',
transitions: localStorage.getItem('transitions') !== 'false',
+ theme: localStorage.getItem('theme') !== 'false',
experimental: localStorage.getItem('experimental') === 'true',
spinner: 'pacman',
supportedLocales: supportedLocales
@@ -46,6 +47,12 @@ export default {
'SET_SPINNER' (state, spinner) {
state.spinner = spinner
+ },
+
+ 'SET_THEME' (state, boolean) {
+ localStorage.setItem('theme', boolean)
+ state.theme = boolean
+ document.documentElement.setAttribute('data-theme', boolean ? 'darkMode' : '')
}
},
@@ -65,6 +72,10 @@ export default {
commit('SET_FALLBACKLOCALE', locale)
i18n.fallbackLocale = [locale, 'en']
})
+ },
+
+ 'UPDATE_THEME' ({ commit }, theme) {
+ commit('SET_THEME', theme)
}
},
@@ -73,6 +84,7 @@ export default {
fallbackLocale: state => (state.fallbackLocale),
cache: state => (state.cache),
transitions: state => (state.transitions),
+ theme: state => (state.theme),
experimental: state => state.experimental,
spinner: state => state.spinner,
diff --git a/app/src/views/_partials/HistoryConsole.vue b/app/src/views/_partials/HistoryConsole.vue
index 79d18bcd..3c736cf4 100644
--- a/app/src/views/_partials/HistoryConsole.vue
+++ b/app/src/views/_partials/HistoryConsole.vue
@@ -193,6 +193,7 @@ export default {
.card-header {
padding: $tooltip-padding-y $tooltip-padding-x;
+ background-color: $background-color-primary !important;
}
#console {
@@ -206,6 +207,8 @@ export default {
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
font-size: $font-size-sm;
+ background-color: $background-color-primary;
+
& > header {
cursor: ns-resize;
@@ -238,6 +241,7 @@ export default {
#history {
overflow-y: auto;
max-height: 20vh;
+ background-color: $background-color-primary;
&.no-max {
max-height: none;
diff --git a/app/src/views/tool/ToolWebadmin.vue b/app/src/views/tool/ToolWebadmin.vue
index 2861322e..bc0fce32 100644
--- a/app/src/views/tool/ToolWebadmin.vue
+++ b/app/src/views/tool/ToolWebadmin.vue
@@ -60,6 +60,13 @@ export default {
label: this.$i18n.t('tools_webadmin.transitions'),
component: 'CheckboxItem',
props: { labels: { true: 'enabled', false: 'disabled' } }
+ },
+
+ theme: {
+ id: 'theme',
+ label: this.$i18n.t('tools_webadmin.theme'),
+ component: 'CheckboxItem',
+ props: { labels: { true: '🌙', false: '☀️' } }
}
// experimental: added in `created()`
@@ -69,7 +76,7 @@ export default {
computed: {
// Those are set/get computed properties
- ...mapStoreGetSet(['locale', 'fallbackLocale'], 'dispatch'),
+ ...mapStoreGetSet(['locale', 'fallbackLocale', 'theme'], 'dispatch'),
...mapStoreGetSet(['cache', 'transitions', 'experimental'])
},
From c508c1e41485569a0827dac94e28e2a54c81cff0 Mon Sep 17 00:00:00 2001
From: Kay0u
Date: Mon, 5 Sep 2022 17:35:45 +0200
Subject: [PATCH 56/72] switch logo
---
app/src/App.vue | 12 +++++++++---
app/src/assets/{logo.png => logo_dark.png} | Bin
app/src/assets/logo_light.png | Bin 0 -> 17032 bytes
3 files changed, 9 insertions(+), 3 deletions(-)
rename app/src/assets/{logo.png => logo_dark.png} (100%)
create mode 100644 app/src/assets/logo_light.png
diff --git a/app/src/App.vue b/app/src/App.vue
index dc2a3247..51480bc1 100644
--- a/app/src/App.vue
+++ b/app/src/App.vue
@@ -7,7 +7,12 @@
:to="{ name: 'home' }" :disabled="waiting"
exact exact-active-class="active"
>
-
+
+
+
+
+
+
@@ -93,7 +98,8 @@ export default {
'routerKey',
'transitions',
'transitionName',
- 'waiting'
+ 'waiting',
+ 'theme'
])
},
@@ -154,7 +160,7 @@ export default {
this.$store.commit('SET_SPINNER', 'spookycat')
}
- document.documentElement.setAttribute('data-theme', localStorage.getItem('theme') === "true" ? 'darkMode' : '') // updates the data-theme attribute
+ document.documentElement.setAttribute('data-theme', localStorage.getItem('theme')) // updates the data-theme attribute
}
}
diff --git a/app/src/assets/logo.png b/app/src/assets/logo_dark.png
similarity index 100%
rename from app/src/assets/logo.png
rename to app/src/assets/logo_dark.png
diff --git a/app/src/assets/logo_light.png b/app/src/assets/logo_light.png
new file mode 100644
index 0000000000000000000000000000000000000000..791225b305ab889f7aeefc58b5350a55f8408dbf
GIT binary patch
literal 17032
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%0DhVUA!IvvG{(!F&Ftaidz)nE_wc!DP?*Ujz`R8
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
R^xX$gl2ezhmo^Xke*jf8{TToN
literal 0
HcmV?d00001
From ee304249fbcc6d4420e9f90bdd72cb601ea54576 Mon Sep 17 00:00:00 2001
From: Kay0u
Date: Mon, 5 Sep 2022 17:36:19 +0200
Subject: [PATCH 57/72] add some color scheme
---
app/src/scss/_variables.scss | 81 ++++++++++++++++++++++++++++--------
app/src/scss/main.scss | 45 +++++++++++++++++++-
app/src/store/settings.js | 2 +-
3 files changed, 108 insertions(+), 20 deletions(-)
diff --git a/app/src/scss/_variables.scss b/app/src/scss/_variables.scss
index ecf89932..5d691ff6 100644
--- a/app/src/scss/_variables.scss
+++ b/app/src/scss/_variables.scss
@@ -30,25 +30,71 @@
$font-size-base: .9rem;
$font-weight-bold: 500;
-$blue: #2f7ed2;
+:root {
+ --background-color: #ffffff;
+ --background-color-secondary: #fafbfc;
+ --border-color: #c5d9e8;
+ --font-color: #2c405a;
+ --font-color-secondary: #3f536e;
+
+ --black: #2c405a;
+ --blue: #0079c4;
+ --green: #81c926;
+ --grey: #8eacc5;
+ --orange: #fd7b1f;
+ --purple: #ab7ef6;
+ --red: #e0102b;
+ --turquoise: #26c1c9;
+ --white: #ffffff;
+ --yellow: #faca00;
+
+ --active: #0079c4;
+ --description: #8eacc5;
+ --error: #e0102b;
+ --normal: #c5d9e8;
+ --info: #0079c4;
+ --success: #81c926;
+ --warning: #ffc107;
+
+ --logo-src: "./assets/logo_dark.png";
+}
+
+[data-theme="true"] {
+ /* Variables for dark mode */
+ --background-color: #222c3c;
+ --background-color-secondary: #273142;
+ --border-color: #313d4f;
+ --font-color: #ffffff;
+ --font-color-secondary: #a9c7df;
+
+ --black: #25374f;
+ --blue: #0093ee;
+ --green: #96bf47;
+ --grey: #a9c7df;
+ --orange: #ffb610;
+ --purple: #ab7ef6;
+ --red: #e0102b;
+ --turquoise: #26c1c9;
+ --white: #ffffff;
+ --yellow: #ffc02a;
+
+ --active: #0093ee;
+ --description: #8eacc5;
+ --error: #e0102b;
+ --normal: #313d4f;
+ --info: #0093ee;
+ --success: #96bf47;
+ --warning: #ffc02a;
+
+ --logo-src: "./assets/logo_light.png";
+}
+
$purple: #9932cc;
-$yellow: #ffd452;
$theme-colors: (
- 'best': $purple
+ 'best': $purple,
);
-:root {
- --background-color: #fff;
- --background-color-secondary: #fff;
-}
-
-[data-theme="darkMode"] {
- /* Variables for dark mode */
- --background-color: black;
- --background-color-secondary: white;
-}
-
// Replace font-weight 300 with 200
$font-weight-light: 200;
$display1-weight: 200;
@@ -80,11 +126,12 @@ $list-group-item-padding-x: 1rem;
@import '~bootstrap-vue/src/variables';
-$body-color: $gray-800;
+$body-color: var(--font-color);
-$hr-border-color: $gray-200;
+$hr-border-color: var(--border-color);
-$list-group-action-color: $gray-800;
+$list-group-action-color: var(--font-color);
+$list-group-action-color-secondary: var(--font-color-secondary);
$background-color-primary: var(--background-color);
diff --git a/app/src/scss/main.scss b/app/src/scss/main.scss
index e3eecb3f..2919c7c0 100644
--- a/app/src/scss/main.scss
+++ b/app/src/scss/main.scss
@@ -40,10 +40,12 @@ body {
display: flex;
align-items: center;
background-color: $background-color-primary;
+ color: $list-group-action-color;
}
.list-group-item:hover {
background-color: $background-color-secondary;
+ color: var(--font-color-secondary);
}
.form-control {
@@ -200,14 +202,15 @@ h3.card-title {
}
code {
- background: ghostwhite;
+ background: var(--background-color-secondary);
}
.log {
margin-bottom: 0;
padding: 1rem;
- background-color: $light;
+ background-color: var(--background-color-secondary);
overflow: auto;
+ color: var(--font-color)
}
.unselectable {
@@ -217,3 +220,41 @@ code {
-ms-user-select: none;
user-select: none;
}
+
+/*
+.badge-success, .alert-success {
+ background-color: var(--success);
+ border-color: var(--border-color);
+}
+
+.badge-info, .alert-info {
+ background-color: var(--info);
+ border-color: var(--border-color);
+}
+
+.badge-warning, .alert-warning {
+ background-color: var(--warning);
+ border-color: var(--border-color);
+}
+
+.badge-danger, .alert-danger {
+ background-color: var(--error);
+ border-color: var(--border-color);
+}
+
+.list-group-item-success {
+ color: var(--success);
+}
+
+.list-group-item-info {
+ color: var(--info);
+}
+
+.list-group-item-warning {
+ color: var(--warning);
+}
+
+.list-group-item-danger {
+ color: var(--error);
+}
+*/
\ No newline at end of file
diff --git a/app/src/store/settings.js b/app/src/store/settings.js
index 6b356946..aa0222cf 100644
--- a/app/src/store/settings.js
+++ b/app/src/store/settings.js
@@ -52,7 +52,7 @@ export default {
'SET_THEME' (state, boolean) {
localStorage.setItem('theme', boolean)
state.theme = boolean
- document.documentElement.setAttribute('data-theme', boolean ? 'darkMode' : '')
+ document.documentElement.setAttribute('data-theme', boolean)
}
},
From de78d5b48583ec73be5e0fca3541995c032680cc Mon Sep 17 00:00:00 2001
From: Kay0u
Date: Mon, 5 Sep 2022 17:36:31 +0200
Subject: [PATCH 58/72] fix some css
---
app/src/components/globals/Card.vue | 1 +
app/src/components/globals/formItems/TagsSelectizeItem.vue | 1 -
app/src/views/PostInstall.vue | 2 +-
app/src/views/_partials/ErrorDisplay.vue | 2 +-
app/src/views/_partials/ViewLockOverlay.vue | 4 ++--
app/src/views/_partials/WarningDisplay.vue | 2 +-
app/src/views/diagnosis/Diagnosis.vue | 1 -
app/src/views/tool/ToolLog.vue | 2 +-
8 files changed, 7 insertions(+), 8 deletions(-)
diff --git a/app/src/components/globals/Card.vue b/app/src/components/globals/Card.vue
index b8e24249..9a7dcb3f 100644
--- a/app/src/components/globals/Card.vue
+++ b/app/src/components/globals/Card.vue
@@ -79,6 +79,7 @@ export default {
.btn + .btn {
margin-left: .5rem;
}
+ background-color: $background-color-primary !important;
}
}
diff --git a/app/src/components/globals/formItems/TagsSelectizeItem.vue b/app/src/components/globals/formItems/TagsSelectizeItem.vue
index f2243538..0177bb83 100644
--- a/app/src/components/globals/formItems/TagsSelectizeItem.vue
+++ b/app/src/components/globals/formItems/TagsSelectizeItem.vue
@@ -12,7 +12,6 @@
@remove="onRemoveTag({ option: tag, removeTag })"
:title="tag"
:disabled="disabled || disabledItems.includes(tag)"
- variant="light"
class="border border-dark mb-2"
>
{{ tag }}
diff --git a/app/src/views/PostInstall.vue b/app/src/views/PostInstall.vue
index 7edc353f..88e62d61 100644
--- a/app/src/views/PostInstall.vue
+++ b/app/src/views/PostInstall.vue
@@ -63,7 +63,7 @@
-
+
{{ $t('postinstall.force') }}
diff --git a/app/src/views/_partials/ErrorDisplay.vue b/app/src/views/_partials/ErrorDisplay.vue
index 7ed16a4e..6f77522a 100644
--- a/app/src/views/_partials/ErrorDisplay.vue
+++ b/app/src/views/_partials/ErrorDisplay.vue
@@ -42,7 +42,7 @@
diff --git a/app/src/views/_partials/ViewLockOverlay.vue b/app/src/views/_partials/ViewLockOverlay.vue
index efe6ba66..8bc37075 100644
--- a/app/src/views/_partials/ViewLockOverlay.vue
+++ b/app/src/views/_partials/ViewLockOverlay.vue
@@ -1,6 +1,6 @@
@@ -8,7 +8,7 @@
-
+
diff --git a/app/src/views/_partials/WarningDisplay.vue b/app/src/views/_partials/WarningDisplay.vue
index e156a30f..b1ce5d72 100644
--- a/app/src/views/_partials/WarningDisplay.vue
+++ b/app/src/views/_partials/WarningDisplay.vue
@@ -5,7 +5,7 @@
diff --git a/app/src/views/diagnosis/Diagnosis.vue b/app/src/views/diagnosis/Diagnosis.vue
index 4e1d26ee..739f2ba4 100644
--- a/app/src/views/diagnosis/Diagnosis.vue
+++ b/app/src/views/diagnosis/Diagnosis.vue
@@ -134,7 +134,6 @@ export default {
icon = 'info-circle'
} else if (item.ignored) {
icon = status !== 'error' ? status : 'times'
- item.variant = 'light'
report.ignoreds++
} else if (status === 'warning') {
icon = status
diff --git a/app/src/views/tool/ToolLog.vue b/app/src/views/tool/ToolLog.vue
index 0708de1b..2fd94840 100644
--- a/app/src/views/tool/ToolLog.vue
+++ b/app/src/views/tool/ToolLog.vue
@@ -44,7 +44,7 @@
{{ $t('logs_more') }}
From 7f58d4b0e336c513b9c51b6acc4d4eb078a68c79 Mon Sep 17 00:00:00 2001
From: Kay0u
Date: Tue, 6 Sep 2022 11:44:39 +0200
Subject: [PATCH 59/72] fix console color
---
app/src/views/_partials/HistoryConsole.vue | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/app/src/views/_partials/HistoryConsole.vue b/app/src/views/_partials/HistoryConsole.vue
index 3c736cf4..804813aa 100644
--- a/app/src/views/_partials/HistoryConsole.vue
+++ b/app/src/views/_partials/HistoryConsole.vue
@@ -4,7 +4,7 @@
-
+
header {
@@ -241,7 +239,6 @@ export default {
#history {
overflow-y: auto;
max-height: 20vh;
- background-color: $background-color-primary;
&.no-max {
max-height: none;
From 90231ef84de6159594f26e7502d5b8f3ba323ad6 Mon Sep 17 00:00:00 2001
From: Kay0u
Date: Tue, 6 Sep 2022 11:44:55 +0200
Subject: [PATCH 60/72] rename data-theme to dark-theme
---
app/src/App.vue | 4 ++--
app/src/scss/_variables.scss | 6 +-----
app/src/store/settings.js | 2 +-
3 files changed, 4 insertions(+), 8 deletions(-)
diff --git a/app/src/App.vue b/app/src/App.vue
index 51480bc1..d0b096a4 100644
--- a/app/src/App.vue
+++ b/app/src/App.vue
@@ -7,7 +7,7 @@
:to="{ name: 'home' }" :disabled="waiting"
exact exact-active-class="active"
>
-
+
@@ -160,7 +160,7 @@ export default {
this.$store.commit('SET_SPINNER', 'spookycat')
}
- document.documentElement.setAttribute('data-theme', localStorage.getItem('theme')) // updates the data-theme attribute
+ document.documentElement.setAttribute('dark-theme', localStorage.getItem('theme')) // updates the data-theme attribute
}
}
diff --git a/app/src/scss/_variables.scss b/app/src/scss/_variables.scss
index 5d691ff6..a34c599a 100644
--- a/app/src/scss/_variables.scss
+++ b/app/src/scss/_variables.scss
@@ -55,11 +55,9 @@ $font-weight-bold: 500;
--info: #0079c4;
--success: #81c926;
--warning: #ffc107;
-
- --logo-src: "./assets/logo_dark.png";
}
-[data-theme="true"] {
+[dark-theme="true"] {
/* Variables for dark mode */
--background-color: #222c3c;
--background-color-secondary: #273142;
@@ -85,8 +83,6 @@ $font-weight-bold: 500;
--info: #0093ee;
--success: #96bf47;
--warning: #ffc02a;
-
- --logo-src: "./assets/logo_light.png";
}
$purple: #9932cc;
diff --git a/app/src/store/settings.js b/app/src/store/settings.js
index aa0222cf..9d94c620 100644
--- a/app/src/store/settings.js
+++ b/app/src/store/settings.js
@@ -52,7 +52,7 @@ export default {
'SET_THEME' (state, boolean) {
localStorage.setItem('theme', boolean)
state.theme = boolean
- document.documentElement.setAttribute('data-theme', boolean)
+ document.documentElement.setAttribute('dark-theme', boolean)
}
},
From 72a941e648883a1f967e834b94d8f52284fbce88 Mon Sep 17 00:00:00 2001
From: Alexandre Aubin
Date: Sat, 8 Oct 2022 20:31:15 +0200
Subject: [PATCH 61/72] Try to improve dark-mode colors for alert boxes,
outline buttons
---
app/src/scss/_variables.scss | 43 ++++++++++++++++++++++++++++++++++--
app/src/scss/main.scss | 10 ++++++++-
2 files changed, 50 insertions(+), 3 deletions(-)
diff --git a/app/src/scss/_variables.scss b/app/src/scss/_variables.scss
index a34c599a..ca749353 100644
--- a/app/src/scss/_variables.scss
+++ b/app/src/scss/_variables.scss
@@ -34,7 +34,7 @@ $font-weight-bold: 500;
--background-color: #ffffff;
--background-color-secondary: #fafbfc;
--border-color: #c5d9e8;
- --font-color: #2c405a;
+ --font-color: #333;
--font-color-secondary: #3f536e;
--black: #2c405a;
@@ -59,7 +59,7 @@ $font-weight-bold: 500;
[dark-theme="true"] {
/* Variables for dark mode */
- --background-color: #222c3c;
+ --background-color: #202025;
--background-color-secondary: #273142;
--border-color: #313d4f;
--font-color: #ffffff;
@@ -85,6 +85,43 @@ $font-weight-bold: 500;
--warning: #ffc02a;
}
+//
+// FIXME : these five blocks are probably not well-written and are not just "variable declarations" ;/
+// probably to be refactored ...
+//
+[dark-theme="true"] .alert-success {
+ color: #4dd0af;
+ background-color: #005e46;
+ border: var(--border-color);
+}
+
+[dark-theme="true"] .alert-info {
+ color: #5dbecd;
+ background-color: #0c515c;
+ border: var(--border-color);
+}
+
+[dark-theme="true"] .alert-warning {
+ color: #f7ba59;
+ background-color: #7a4e09;
+ border: var(--border-color);
+}
+
+[dark-theme="true"] .alert-danger {
+ color: #ee8277;
+ background-color: #74261e;
+ border: var(--border-color);
+}
+
+[dark-theme="true"] .btn-outline-dark {
+ color: var(--font-color-secondary);
+ border-color: var(--border-color);
+}
+//
+// END FIXME
+//
+
+
$purple: #9932cc;
$theme-colors: (
@@ -133,6 +170,8 @@ $background-color-primary: var(--background-color);
$background-color-secondary: var(--background-color-secondary);
+$card-border-color: var(--border-color);
+
// ╭──────────────────────────────────────╮
// │ ┌─╴╭─╮┌─╮╷ ╭ ╭─┐╷╷╷┌─╴╭─╴╭─╮╭╮╮┌─╴ │
// │ ├─╴│ │├┬╯├┴╮╶─╴├─┤│││├─╴╰─╮│ ││││├─╴ │
diff --git a/app/src/scss/main.scss b/app/src/scss/main.scss
index 2919c7c0..3a37fddd 100644
--- a/app/src/scss/main.scss
+++ b/app/src/scss/main.scss
@@ -43,11 +43,19 @@ body {
color: $list-group-action-color;
}
+.list-group-item {
+ border-color: var(--border-color);
+}
+
.list-group-item:hover {
background-color: $background-color-secondary;
color: var(--font-color-secondary);
}
+.text-secondary {
+ color: var(--font-color-secondary) !important;
+}
+
.form-control {
background-color: $background-color-secondary;
}
@@ -257,4 +265,4 @@ code {
.list-group-item-danger {
color: var(--error);
}
-*/
\ No newline at end of file
+*/
From 940af448023082cfd3670791cc8e93d6e9a5fbd7 Mon Sep 17 00:00:00 2001
From: axolotle
Date: Wed, 19 Oct 2022 15:18:15 +0200
Subject: [PATCH 62/72] style: avoid rules declaration in variables file
---
app/src/scss/_variables.scss | 92 ------------------------------------
app/src/scss/main.scss | 91 +++++++++++++++++++++++++++++++++++
2 files changed, 91 insertions(+), 92 deletions(-)
diff --git a/app/src/scss/_variables.scss b/app/src/scss/_variables.scss
index ca749353..7327b85a 100644
--- a/app/src/scss/_variables.scss
+++ b/app/src/scss/_variables.scss
@@ -30,98 +30,6 @@
$font-size-base: .9rem;
$font-weight-bold: 500;
-:root {
- --background-color: #ffffff;
- --background-color-secondary: #fafbfc;
- --border-color: #c5d9e8;
- --font-color: #333;
- --font-color-secondary: #3f536e;
-
- --black: #2c405a;
- --blue: #0079c4;
- --green: #81c926;
- --grey: #8eacc5;
- --orange: #fd7b1f;
- --purple: #ab7ef6;
- --red: #e0102b;
- --turquoise: #26c1c9;
- --white: #ffffff;
- --yellow: #faca00;
-
- --active: #0079c4;
- --description: #8eacc5;
- --error: #e0102b;
- --normal: #c5d9e8;
- --info: #0079c4;
- --success: #81c926;
- --warning: #ffc107;
-}
-
-[dark-theme="true"] {
- /* Variables for dark mode */
- --background-color: #202025;
- --background-color-secondary: #273142;
- --border-color: #313d4f;
- --font-color: #ffffff;
- --font-color-secondary: #a9c7df;
-
- --black: #25374f;
- --blue: #0093ee;
- --green: #96bf47;
- --grey: #a9c7df;
- --orange: #ffb610;
- --purple: #ab7ef6;
- --red: #e0102b;
- --turquoise: #26c1c9;
- --white: #ffffff;
- --yellow: #ffc02a;
-
- --active: #0093ee;
- --description: #8eacc5;
- --error: #e0102b;
- --normal: #313d4f;
- --info: #0093ee;
- --success: #96bf47;
- --warning: #ffc02a;
-}
-
-//
-// FIXME : these five blocks are probably not well-written and are not just "variable declarations" ;/
-// probably to be refactored ...
-//
-[dark-theme="true"] .alert-success {
- color: #4dd0af;
- background-color: #005e46;
- border: var(--border-color);
-}
-
-[dark-theme="true"] .alert-info {
- color: #5dbecd;
- background-color: #0c515c;
- border: var(--border-color);
-}
-
-[dark-theme="true"] .alert-warning {
- color: #f7ba59;
- background-color: #7a4e09;
- border: var(--border-color);
-}
-
-[dark-theme="true"] .alert-danger {
- color: #ee8277;
- background-color: #74261e;
- border: var(--border-color);
-}
-
-[dark-theme="true"] .btn-outline-dark {
- color: var(--font-color-secondary);
- border-color: var(--border-color);
-}
-//
-// END FIXME
-//
-
-
$purple: #9932cc;
$theme-colors: (
diff --git a/app/src/scss/main.scss b/app/src/scss/main.scss
index 3a37fddd..f4ca87a6 100644
--- a/app/src/scss/main.scss
+++ b/app/src/scss/main.scss
@@ -16,6 +16,97 @@
@import '~fork-awesome/scss/fork-awesome.scss';
+:root {
+ --background-color: #ffffff;
+ --background-color-secondary: #fafbfc;
+ --border-color: #c5d9e8;
+ --font-color: #333;
+ --font-color-secondary: #3f536e;
+
+ --black: #2c405a;
+ --blue: #0079c4;
+ --green: #81c926;
+ --grey: #8eacc5;
+ --orange: #fd7b1f;
+ --purple: #ab7ef6;
+ --red: #e0102b;
+ --turquoise: #26c1c9;
+ --white: #ffffff;
+ --yellow: #faca00;
+
+ --active: #0079c4;
+ --description: #8eacc5;
+ --error: #e0102b;
+ --normal: #c5d9e8;
+ --info: #0079c4;
+ --success: #81c926;
+ --warning: #ffc107;
+}
+
+[dark-theme="true"] {
+ /* Variables for dark mode */
+ --background-color: #202025;
+ --background-color-secondary: #273142;
+ --border-color: #313d4f;
+ --font-color: #ffffff;
+ --font-color-secondary: #a9c7df;
+
+ --black: #25374f;
+ --blue: #0093ee;
+ --green: #96bf47;
+ --grey: #a9c7df;
+ --orange: #ffb610;
+ --purple: #ab7ef6;
+ --red: #e0102b;
+ --turquoise: #26c1c9;
+ --white: #ffffff;
+ --yellow: #ffc02a;
+
+ --active: #0093ee;
+ --description: #8eacc5;
+ --error: #e0102b;
+ --normal: #313d4f;
+ --info: #0093ee;
+ --success: #96bf47;
+ --warning: #ffc02a;
+}
+
+//
+// FIXME : these five blocks are probably not well-written and are not just "variable declarations" ;/
+// probably to be refactored ...
+//
+[dark-theme="true"] .alert-success {
+ color: #4dd0af;
+ background-color: #005e46;
+ border: var(--border-color);
+}
+
+[dark-theme="true"] .alert-info {
+ color: #5dbecd;
+ background-color: #0c515c;
+ border: var(--border-color);
+}
+
+[dark-theme="true"] .alert-warning {
+ color: #f7ba59;
+ background-color: #7a4e09;
+ border: var(--border-color);
+}
+
+[dark-theme="true"] .alert-danger {
+ color: #ee8277;
+ background-color: #74261e;
+ border: var(--border-color);
+}
+
+[dark-theme="true"] .btn-outline-dark {
+ color: var(--font-color-secondary);
+ border-color: var(--border-color);
+}
+//
+// END FIXME
+//
+
// Style overrides happens after dependencies imports
html {
From 5b0e31c37fedfd33ee5b078d992a300dd96f8d63 Mon Sep 17 00:00:00 2001
From: axolotle
Date: Thu, 20 Oct 2022 13:31:07 +0200
Subject: [PATCH 63/72] style: revert hard coded color/bg-color definitions and
variables
---
app/src/components/globals/Card.vue | 1 -
app/src/scss/_variables.scss | 13 +--
app/src/scss/main.scss | 108 +-------------------
app/src/views/PostInstall.vue | 2 +-
app/src/views/_partials/ErrorDisplay.vue | 2 +-
app/src/views/_partials/HistoryConsole.vue | 4 +-
app/src/views/_partials/ViewLockOverlay.vue | 4 +-
app/src/views/_partials/WarningDisplay.vue | 2 +-
app/src/views/diagnosis/Diagnosis.vue | 1 +
app/src/views/tool/ToolLog.vue | 2 +-
10 files changed, 15 insertions(+), 124 deletions(-)
diff --git a/app/src/components/globals/Card.vue b/app/src/components/globals/Card.vue
index 9a7dcb3f..b8e24249 100644
--- a/app/src/components/globals/Card.vue
+++ b/app/src/components/globals/Card.vue
@@ -79,7 +79,6 @@ export default {
.btn + .btn {
margin-left: .5rem;
}
- background-color: $background-color-primary !important;
}
}
diff --git a/app/src/scss/_variables.scss b/app/src/scss/_variables.scss
index 7327b85a..49520a66 100644
--- a/app/src/scss/_variables.scss
+++ b/app/src/scss/_variables.scss
@@ -67,18 +67,11 @@ $list-group-item-padding-x: 1rem;
@import '~bootstrap-vue/src/variables';
-$body-color: var(--font-color);
+$body-color: $gray-800;
-$hr-border-color: var(--border-color);
+$hr-border-color: $gray-200;
-$list-group-action-color: var(--font-color);
-$list-group-action-color-secondary: var(--font-color-secondary);
-
-$background-color-primary: var(--background-color);
-
-$background-color-secondary: var(--background-color-secondary);
-
-$card-border-color: var(--border-color);
+$list-group-action-color: $gray-800;
// ╭──────────────────────────────────────╮
// │ ┌─╴╭─╮┌─╮╷ ╭ ╭─┐╷╷╷┌─╴╭─╴╭─╮╭╮╮┌─╴ │
diff --git a/app/src/scss/main.scss b/app/src/scss/main.scss
index f4ca87a6..efeeaadd 100644
--- a/app/src/scss/main.scss
+++ b/app/src/scss/main.scss
@@ -71,42 +71,6 @@
--warning: #ffc02a;
}
-//
-// FIXME : these five blocks are probably not well-written and are not just "variable declarations" ;/
-// probably to be refactored ...
-//
-[dark-theme="true"] .alert-success {
- color: #4dd0af;
- background-color: #005e46;
- border: var(--border-color);
-}
-
-[dark-theme="true"] .alert-info {
- color: #5dbecd;
- background-color: #0c515c;
- border: var(--border-color);
-}
-
-[dark-theme="true"] .alert-warning {
- color: #f7ba59;
- background-color: #7a4e09;
- border: var(--border-color);
-}
-
-[dark-theme="true"] .alert-danger {
- color: #ee8277;
- background-color: #74261e;
- border: var(--border-color);
-}
-
-[dark-theme="true"] .btn-outline-dark {
- color: var(--font-color-secondary);
- border-color: var(--border-color);
-}
-//
-// END FIXME
-//
-
// Style overrides happens after dependencies imports
html {
@@ -116,43 +80,18 @@ body {
overflow-x: hidden;
min-height: 100vh;
margin: 0;
- background-color: $background-color-primary;
}
#app {
display: flex;
flex-direction: column;
min-height: 100vh;
- background-color: $background-color-primary;
}
.menu-list .list-group-item {
padding: $list-group-item-padding-y 0;
display: flex;
align-items: center;
- background-color: $background-color-primary;
- color: $list-group-action-color;
-}
-
-.list-group-item {
- border-color: var(--border-color);
-}
-
-.list-group-item:hover {
- background-color: $background-color-secondary;
- color: var(--font-color-secondary);
-}
-
-.text-secondary {
- color: var(--font-color-secondary) !important;
-}
-
-.form-control {
- background-color: $background-color-secondary;
-}
-
-.form-control:focus {
- background-color: $background-color-secondary;
}
@@ -218,19 +157,17 @@ body {
h1, h2, h3, h4, h5, h6 {
margin: 0;
}
- background-color: $background-color-primary;
}
.card-header, .list-group-item {
h1, h2, h3, h4, h5, h6 {
font-weight: $font-weight-normal;
}
- background-color: $background-color-primary;
}
h3.card-title {
margin-bottom: 1em;
- border-bottom: solid 1px #aaa;
+ border-bottom: solid 1px $hr-border-color;
}
// collapse icon
@@ -301,15 +238,14 @@ h3.card-title {
}
code {
- background: var(--background-color-secondary);
+ background: $light;
}
.log {
margin-bottom: 0;
padding: 1rem;
- background-color: var(--background-color-secondary);
+ background-color: $light;
overflow: auto;
- color: var(--font-color)
}
.unselectable {
@@ -319,41 +255,3 @@ code {
-ms-user-select: none;
user-select: none;
}
-
-/*
-.badge-success, .alert-success {
- background-color: var(--success);
- border-color: var(--border-color);
-}
-
-.badge-info, .alert-info {
- background-color: var(--info);
- border-color: var(--border-color);
-}
-
-.badge-warning, .alert-warning {
- background-color: var(--warning);
- border-color: var(--border-color);
-}
-
-.badge-danger, .alert-danger {
- background-color: var(--error);
- border-color: var(--border-color);
-}
-
-.list-group-item-success {
- color: var(--success);
-}
-
-.list-group-item-info {
- color: var(--info);
-}
-
-.list-group-item-warning {
- color: var(--warning);
-}
-
-.list-group-item-danger {
- color: var(--error);
-}
-*/
diff --git a/app/src/views/PostInstall.vue b/app/src/views/PostInstall.vue
index 88e62d61..7edc353f 100644
--- a/app/src/views/PostInstall.vue
+++ b/app/src/views/PostInstall.vue
@@ -63,7 +63,7 @@
-
+
{{ $t('postinstall.force') }}
diff --git a/app/src/views/_partials/ErrorDisplay.vue b/app/src/views/_partials/ErrorDisplay.vue
index 6f77522a..7ed16a4e 100644
--- a/app/src/views/_partials/ErrorDisplay.vue
+++ b/app/src/views/_partials/ErrorDisplay.vue
@@ -42,7 +42,7 @@
diff --git a/app/src/views/_partials/HistoryConsole.vue b/app/src/views/_partials/HistoryConsole.vue
index 804813aa..b513df90 100644
--- a/app/src/views/_partials/HistoryConsole.vue
+++ b/app/src/views/_partials/HistoryConsole.vue
@@ -4,7 +4,7 @@
-
+
@@ -8,7 +8,7 @@
-
+
diff --git a/app/src/views/_partials/WarningDisplay.vue b/app/src/views/_partials/WarningDisplay.vue
index b1ce5d72..e156a30f 100644
--- a/app/src/views/_partials/WarningDisplay.vue
+++ b/app/src/views/_partials/WarningDisplay.vue
@@ -5,7 +5,7 @@
diff --git a/app/src/views/diagnosis/Diagnosis.vue b/app/src/views/diagnosis/Diagnosis.vue
index 739f2ba4..4e1d26ee 100644
--- a/app/src/views/diagnosis/Diagnosis.vue
+++ b/app/src/views/diagnosis/Diagnosis.vue
@@ -134,6 +134,7 @@ export default {
icon = 'info-circle'
} else if (item.ignored) {
icon = status !== 'error' ? status : 'times'
+ item.variant = 'light'
report.ignoreds++
} else if (status === 'warning') {
icon = status
diff --git a/app/src/views/tool/ToolLog.vue b/app/src/views/tool/ToolLog.vue
index 2fd94840..0708de1b 100644
--- a/app/src/views/tool/ToolLog.vue
+++ b/app/src/views/tool/ToolLog.vue
@@ -44,7 +44,7 @@
{{ $t('logs_more') }}
From fc7b5f1484234f65144ce67ba8c61a53f80c0b1a Mon Sep 17 00:00:00 2001
From: axolotle
Date: Thu, 20 Oct 2022 13:34:05 +0200
Subject: [PATCH 64/72] scss: add bootstrap functions override to allow CSS
variables as base color
---
app/src/scss/_functions-override.scss | 245 ++++++++++++++++++++++++++
1 file changed, 245 insertions(+)
create mode 100644 app/src/scss/_functions-override.scss
diff --git a/app/src/scss/_functions-override.scss b/app/src/scss/_functions-override.scss
new file mode 100644
index 00000000..bf9f5793
--- /dev/null
+++ b/app/src/scss/_functions-override.scss
@@ -0,0 +1,245 @@
+// Taken from https://gist.github.com/johanlef/518a511b2b2f6b96c4f429b3af2f169a
+// Those functions overrides built-in bootstrap's computation color functions (that
+// generate flat variants and its darken/lighten alterations) to allow `var(--color)` CSS
+// variables to be used as primary colors and be instead computed on the fly with `calc()`s
+
+@function is-color($color) {
+ @if (type-of($color) == color) {
+ @return true;
+ }
+ @return false;
+}
+
+@function count-occurrences($string, $search) {
+ $searchIndex: str-index($string, $search);
+ $searchCount: 0;
+ @while $searchIndex {
+ $searchCount: $searchCount + 1;
+ $string: str-slice($string, $searchIndex + 1);
+ $searchIndex: str-index($string, $search);
+ }
+ @return $searchCount;
+}
+
+@function str-is-between($string, $first, $last) {
+ $firstCount: count-occurrences($string, $first);
+ $lastCount: count-occurrences($string, $last);
+ @return $firstCount == $lastCount;
+}
+
+@function recursive-color($color, $index: 0) {
+ $indices: (
+ 0: h,
+ 1: s,
+ 2: l,
+ 3: a
+ );
+ // find end of part
+ $end: str-index($color, ',');
+ @while ($end and not str-is-between(str-slice($color, 0, $end - 1), '(', ')')) {
+ $newEnd: str-index(str-slice($color, $end + 1), ',');
+ @if (not $newEnd) {
+ $newEnd: 0;
+ }
+ $end: 2 + $end + $newEnd;
+ }
+ @if ($end) {
+ $part: str-slice($color, 0, $end - 1);
+ $value: map-merge(
+ (
+ map-get($indices, $index): $part
+ ),
+ recursive-color(str-slice($color, $end + 1), $index + 1)
+ );
+ @return $value;
+ }
+ @return ();
+}
+
+@function to-hsl($color) {
+ $c: inspect($color);
+
+ $h: 0;
+ $s: 0;
+ $l: 0;
+ $a: 1;
+
+ @if (is-color($color)) {
+ // std color
+ $h: hue($color);
+ $s: saturation($color);
+ $l: lightness($color);
+ $a: alpha($color);
+
+ @return (h: $h, s: $s, l: $l, a: $a);
+ }
+
+ @if (str-slice($c, 0, 3) == 'var') {
+ // var(--color)
+ $commaPos: str-index($c, ',');
+ $end: -2;
+ @if ($commaPos) {
+ $end: $commaPos - 1;
+ }
+ $var: str-slice($c, 7, $end);
+
+ $h: var(--#{$var}-h);
+ $s: var(--#{$var}-s);
+ $l: var(--#{$var}-l);
+ $a: var(--#{$var}-a, 1);
+
+ @return (h: $h, s: $s, l: $l, a: $a);
+ }
+
+ @if ($c == '0') {
+ @return (h: $h, s: $s, l: $l, a: $a);
+ }
+
+ // color is (maybe complex) calculated color
+ // e.g.: hsla(calc((var(--white-h) + var(--primary-h)) / 2), calc((var(--white-s) + var(--primary-s)) / 2), calc((var(--white-l) + var(--primary-l)) / 2), calc((var(--white-a, 1) + var(--primary-a, 1)) / 2)), hsla(calc((var(--white-h) + var(--primary-h)) / 2), calc((var(--white-s) + var(--primary-s)) / 2), calc((var(--white-l) + var(--primary-l)) / 2), calc((var(--white-a, 1) + var(--primary-a, 1)) / 2))
+ $startPos: str-index($c, '(');
+ $c: str-slice($c, $startPos + 1, -2); // 3 or 4 comma-separated vomplex values
+ @return recursive-color($c);
+ // $hEnd: str-index($c, ',');
+ // @if ($hEnd) {
+ // $h: str-slice($c, 0, $hEnd - 1);
+ // $c: str-slice($c, $hEnd + 1);
+ // $sEnd: str-index($c, ',');
+ // @if ($hEnd) {
+ // $h: str-slice($c, 0, $hEnd - 1);
+ // $c: str-slice($c, $hEnd + 1);
+ // $sEnd: str-index($c, ',');
+ // }
+ // }
+
+ // @return (h: $h, s: $s, l: $l, a: $a);
+}
+
+@function render-hsla($h, $s, $l, $a: 1) {
+ @return hsla($h, $s, $l, $a);
+}
+
+@function lighten($color, $amount) {
+ @if (is-color($color)) {
+ @return scale-color($color: $color, $lightness: $amount);
+ }
+
+ $c: to-hsl($color);
+ $h: map-get($c, h);
+ $s: map-get($c, s);
+ $l: map-get($c, l);
+ $a: map-get($c, a);
+ @return render-hsla($h, $s, calc(#{$l} + #{$amount}), $a);
+}
+
+@function darken($color, $amount) {
+ @return lighten($color, $amount * -1);
+}
+
+@function rgba($red, $green, $blue: false, $alpha: false) {
+ $color: $red;
+
+ @if (not $blue and not $alpha) {
+ $alpha: $green;
+ $color: $red;
+ }
+
+ $c: to-hsl($color);
+ $h: map-get($c, h);
+ $s: map-get($c, s);
+ $l: map-get($c, l);
+ @return render-hsla($h, $s, $l, $alpha);
+}
+
+@function rgb($red, $green, $blue) {
+ @return rgba($red, $green, $blue, 1);
+}
+
+@function mix($color-1, $color-2, $weight: 50%) {
+ $c1: to-hsl($color-1);
+ $c2: to-hsl($color-2);
+
+ $h1: map-get($c1, h);
+ $s1: map-get($c1, s);
+ $l1: map-get($c1, l);
+ $a1: map-get($c1, a);
+
+ $h2: map-get($c2, h);
+ $s2: map-get($c2, s);
+ $l2: map-get($c2, l);
+ $a2: map-get($c2, a);
+
+ $h: calc((#{$h1} + #{$h2}) / 2);
+ $s: calc((#{$s1} + #{$s2}) / 2);
+ $l: calc((#{$l1} + #{$l2}) / 2);
+ $a: calc((#{$a1} + #{$a2}) / 2);
+
+ @return render-hsla($h, $s, $l, $a);
+}
+
+@function fade-in($color, $amount) {
+ $c: to-hsl($color);
+
+ $h: map-get($c, h);
+ $s: map-get($c, s);
+ $l: map-get($c, l);
+ $a: map-get($c, a);
+ @if (not $a) {
+ $a: 1;
+ }
+
+ @return render-hsla($h, $s, $l, $a + $amount);
+}
+
+@function color-yiq($color, $dark: $yiq-text-dark, $light: $yiq-text-light) {
+ @if (is-color($color)) {
+ $r: red($color);
+ $g: green($color);
+ $b: blue($color);
+
+ $yiq: (($r * 299) + ($g * 587) + ($b * 114)) / 1000;
+
+ @if ($yiq >= $yiq-contrasted-threshold) {
+ @return $dark;
+ } @else {
+ @return $light;
+ }
+ } @else {
+ $c: to-hsl($color);
+ $l: map-get($c, l);
+
+ $th: $yiq-contrasted-threshold / 2.56; // convert hex to dec
+ $lightness: calc(-100 * calc(#{$l} - calc(#{$th} * 1%)));
+
+ // ignoring hue and saturation, just a light or dark gray
+ @return render-hsla(0, 0%, $lightness, 1);
+ }
+}
+
+
+// Taken from https://gist.github.com/johanlef/518a511b2b2f6b96c4f429b3af2f169a?permalink_comment_id=4053335#gistcomment-4053335
+@function theme-color-level($color-name: "primary", $level: 0) {
+ $color: theme-color($color-name);
+ @if ($level == 0) {
+ @return $color;
+ }
+
+ $amount: $theme-color-interval * abs($level) / 100%;
+ $c: to-hsl($color);
+ $h: map-get($c, h);
+ $s: map-get($c, s);
+ $l: map-get($c, l);
+ $a: map-get($c, a);
+
+ @if ($level > 0) {
+ // Darken -X%: L = L * (1 - X)
+ // $rl: calc((#{$l} * #{1 - $amount}));
+ $rl: calc((#{$l} * #{$amount}));
+ @return render-hsla($h, $s, $rl, $a);
+ }
+ @if ($level < 0) {
+ // Ligthen +X%: L = L + X * (100 - L)
+ $rl: calc(#{$l} + #{$amount} * (100% - #{$l}));
+ @return render-hsla($h, $s, $rl, $a);
+ }
+}
From 3db2bbc9396b35c8a2e996ea2a62cbe4963fc779 Mon Sep 17 00:00:00 2001
From: axolotle
Date: Thu, 20 Oct 2022 13:41:56 +0200
Subject: [PATCH 65/72] scss: import parts of bootstrap only
---
app/src/scss/_variables.scss | 1 +
app/src/scss/main.scss | 36 +++++++++++++++++++++++++++++++++++-
2 files changed, 36 insertions(+), 1 deletion(-)
diff --git a/app/src/scss/_variables.scss b/app/src/scss/_variables.scss
index 49520a66..d0703f59 100644
--- a/app/src/scss/_variables.scss
+++ b/app/src/scss/_variables.scss
@@ -62,6 +62,7 @@ $list-group-item-padding-x: 1rem;
// Import default variables after the above setup to compute all other variables.
@import '~bootstrap/scss/functions.scss';
+@import '_functions-override.scss';
@import '~bootstrap/scss/variables';
@import '~bootstrap/scss/mixins.scss';
@import '~bootstrap-vue/src/variables';
diff --git a/app/src/scss/main.scss b/app/src/scss/main.scss
index efeeaadd..67febc3f 100644
--- a/app/src/scss/main.scss
+++ b/app/src/scss/main.scss
@@ -8,7 +8,41 @@
// Dependencies SCSS imports
// `~` allow to import a node_modules folder (resolved by Webpack)
-@import '~bootstrap/scss/bootstrap.scss';
+// @import "~bootstrap/scss/root";
+@import "~bootstrap/scss/reboot";
+@import "~bootstrap/scss/type";
+@import "~bootstrap/scss/images";
+@import "~bootstrap/scss/code";
+@import "~bootstrap/scss/grid";
+@import "~bootstrap/scss/tables";
+@import "~bootstrap/scss/forms";
+@import "~bootstrap/scss/buttons";
+@import "~bootstrap/scss/transitions";
+@import "~bootstrap/scss/dropdown";
+@import "~bootstrap/scss/button-group";
+@import "~bootstrap/scss/input-group";
+@import "~bootstrap/scss/custom-forms";
+@import "~bootstrap/scss/nav";
+@import "~bootstrap/scss/navbar";
+@import "~bootstrap/scss/card";
+@import "~bootstrap/scss/breadcrumb";
+// @import "~bootstrap/scss/pagination";
+@import "~bootstrap/scss/badge";
+// @import "~bootstrap/scss/jumbotron";
+@import "~bootstrap/scss/alert";
+@import "~bootstrap/scss/progress";
+// @import "~bootstrap/scss/media";
+@import "~bootstrap/scss/list-group";
+@import "~bootstrap/scss/close";
+// @import "~bootstrap/scss/toasts";
+@import "~bootstrap/scss/modal";
+@import "~bootstrap/scss/tooltip";
+@import "~bootstrap/scss/popover";
+// @import "~bootstrap/scss/carousel";
+@import "~bootstrap/scss/spinners";
+@import "~bootstrap/scss/utilities";
+// @import "~bootstrap/scss/print";
+
@import '~bootstrap-vue/src/index.scss';
// Import fonts
From b193e2d715d1b45929790474c127b41fcb920c46 Mon Sep 17 00:00:00 2001
From: axolotle
Date: Thu, 20 Oct 2022 13:44:14 +0200
Subject: [PATCH 66/72] scss: use CSS variables for light and dark theme
---
app/src/scss/_variables.scss | 35 ++++++++++-
app/src/scss/main.scss | 118 ++++++++++++++++++++---------------
2 files changed, 100 insertions(+), 53 deletions(-)
diff --git a/app/src/scss/_variables.scss b/app/src/scss/_variables.scss
index d0703f59..8d193cd9 100644
--- a/app/src/scss/_variables.scss
+++ b/app/src/scss/_variables.scss
@@ -30,12 +30,42 @@
$font-size-base: .9rem;
$font-weight-bold: 500;
-$purple: #9932cc;
+$white: var(--white);
+$gray-100: var(--gray-100);
+$gray-200: var(--gray-200);
+$gray-300: var(--gray-300);
+$gray-400: var(--gray-400);
+$gray-500: var(--gray-500);
+$gray-600: var(--gray-600);
+$gray-700: var(--gray-700);
+$gray-800: var(--gray-800);
+$gray-900: var(--gray-900);
+$black: var(--black);
+
+$blue: var(--blue);
+$indigo: var(--indigo);
+$purple: var(--purple);
+$pink: var(--pink);
+$red: var(--red);
+$orange: var(--orange);
+$yellow: var(--yellow);
+$green: var(--green);
+$teal: var(--teal);
+$cyan: var(--cyan);
$theme-colors: (
'best': $purple,
);
+$yiq-contrasted-threshold: var(--yiq-contrasted-threshold);
+
+$alert-bg-level: -10;
+$alert-border-level: -9;
+$alert-color-level: 5;
+
+$list-group-item-bg-level: -11;
+$list-group-item-color-level: 6;
+
// Replace font-weight 300 with 200
$font-weight-light: 200;
$display1-weight: 200;
@@ -60,6 +90,9 @@ $card-spacer-x: 1rem;
$list-group-item-padding-x: 1rem;
+// Hard coded for scss compilation to pass
+$b-toast-background-opacity: 100%;
+
// Import default variables after the above setup to compute all other variables.
@import '~bootstrap/scss/functions.scss';
@import '_functions-override.scss';
diff --git a/app/src/scss/main.scss b/app/src/scss/main.scss
index 67febc3f..fe051ba7 100644
--- a/app/src/scss/main.scss
+++ b/app/src/scss/main.scss
@@ -49,60 +49,81 @@
@import 'font';
@import '~fork-awesome/scss/fork-awesome.scss';
+// helper to set the required 4 CSS variables per color to allow `calc` computation of variants and states
+@mixin hsl-color($name, $h, $s, $l) {
+ --#{$name}: hsl(#{$h}, #{$s}, #{$l});
+ --#{$name}-h: #{$h};
+ --#{$name}-s: #{$s};
+ --#{$name}-l: #{$l};
+}
:root {
- --background-color: #ffffff;
- --background-color-secondary: #fafbfc;
- --border-color: #c5d9e8;
- --font-color: #333;
- --font-color-secondary: #3f536e;
+ color-scheme: light;
- --black: #2c405a;
- --blue: #0079c4;
- --green: #81c926;
- --grey: #8eacc5;
- --orange: #fd7b1f;
- --purple: #ab7ef6;
- --red: #e0102b;
- --turquoise: #26c1c9;
- --white: #ffffff;
- --yellow: #faca00;
+ --yiq-contrasted-threshold: 150;
- --active: #0079c4;
- --description: #8eacc5;
- --error: #e0102b;
- --normal: #c5d9e8;
- --info: #0079c4;
- --success: #81c926;
- --warning: #ffc107;
+ @include hsl-color('white', 0, 0%, 100%);
+ @include hsl-color('black', 0, 0%, 0%);
+ @include hsl-color('blue', 211, 64%, 50%);
+ @include hsl-color('indigo', 263, 90%, 51%);
+ @include hsl-color('purple', 280, 61%, 50%);
+ @include hsl-color('pink', 332, 79%, 58%);
+ @include hsl-color('red', 354, 70%, 54%);
+ @include hsl-color('orange', 27, 98%, 54%);
+ @include hsl-color('yellow', 45, 100%, 66%);
+ @include hsl-color('green', 134, 61%, 41%);
+ @include hsl-color('teal', 162, 73%, 46%);
+ @include hsl-color('cyan', 188, 78%, 41%);
+
+ @include hsl-color('gray-100', 210, 17%, 98%);
+ @include hsl-color('gray-200', 210, 16%, 93%);
+ @include hsl-color('gray-300', 210, 14%, 89%);
+ @include hsl-color('gray-400', 210, 14%, 83%);
+ @include hsl-color('gray-500', 210, 11%, 71%);
+ @include hsl-color('gray-600', 208, 7%, 46%);
+ @include hsl-color('gray-700', 210, 9%, 31%);
+ @include hsl-color('gray-800', 210, 10%, 23%);
+ @include hsl-color('gray-900', 210, 11%, 15%);
+
+ // Overwrite list-group-item variants to lighter ones (used in diagnosis for example)
+ @each $color, $value in $theme-colors {
+ @include list-group-item-variant($color, theme-color-level($color, $list-group-item-bg-level), theme-color-level($color, $list-group-item-color-level));
+ }
}
[dark-theme="true"] {
- /* Variables for dark mode */
- --background-color: #202025;
- --background-color-secondary: #273142;
- --border-color: #313d4f;
- --font-color: #ffffff;
- --font-color-secondary: #a9c7df;
+ color-scheme: dark; // Ask browser to use dark mode native styling
- --black: #25374f;
- --blue: #0093ee;
- --green: #96bf47;
- --grey: #a9c7df;
- --orange: #ffb610;
- --purple: #ab7ef6;
- --red: #e0102b;
- --turquoise: #26c1c9;
- --white: #ffffff;
- --yellow: #ffc02a;
+ --yiq-contrasted-threshold: 120;
- --active: #0093ee;
- --description: #8eacc5;
- --error: #e0102b;
- --normal: #313d4f;
- --info: #0093ee;
- --success: #96bf47;
- --warning: #ffc02a;
+ @include hsl-color('white', 256, 0%, 12.5%);
+ @include hsl-color('black', 256, 0%, 100%);
+ @include hsl-color('blue', 210.7, 95.5%, 65.5%);
+ @include hsl-color('purple', 280, 77.8%, 62.9%);
+ @include hsl-color('red', 0, 100%, 67.6%);
+ @include hsl-color('green', 134.3, 74.4%, 67.8%);
+ @include hsl-color('cyan', 188.4, 91.4%, 72.5%);
+
+ @include hsl-color('gray-900', 210, 17%, 98%);
+ @include hsl-color('gray-800', 210, 16%, 93%);
+ @include hsl-color('gray-700', 210, 14%, 89%);
+ @include hsl-color('gray-600', 210, 14%, 83%);
+ @include hsl-color('gray-500', 210, 11%, 71%);
+ @include hsl-color('gray-400', 208, 7%, 46%);
+ @include hsl-color('gray-300', 210, 9%, 31%);
+ @include hsl-color('gray-200', 210, 10%, 23%);
+ @include hsl-color('gray-100', 210, 11%, 15%);
+
+ // Overwrite list-group-item variants to lighter ones (used in diagnosis for example)
+ @each $color, $value in $theme-colors {
+ @include list-group-item-variant($color, theme-color-level($color, -6), theme-color-level($color, 2));
+ }
+
+ @each $color, $value in $theme-colors {
+ .alert-#{$color} {
+ @include alert-variant(theme-color-level($color, -6), theme-color-level($color, -5), theme-color-level($color, 2));
+ }
+ }
}
// Style overrides happens after dependencies imports
@@ -129,13 +150,6 @@ body {
}
-// Bootstrap overrides
-
-// Overwrite list-group-item variants to lighter ones (used in diagnosis for example)
-@each $color, $value in $theme-colors {
- @include list-group-item-variant($color, theme-color-level($color, -11), theme-color-level($color, 6));
-}
-
// Add breakpoints for w-*
@each $breakpoint in map-keys($grid-breakpoints) {
@each $size, $length in $sizes {
From 7c7ab64e15d83a989adfda61f2c280d4c15912da Mon Sep 17 00:00:00 2001
From: axolotle
Date: Thu, 20 Oct 2022 14:44:15 +0200
Subject: [PATCH 67/72] scss: fix hardcoded colors
---
app/src/components/globals/DescriptionRow.vue | 2 +-
app/src/components/globals/Icon.vue | 6 +-----
app/src/components/globals/formItems/TagsSelectizeItem.vue | 2 +-
app/src/scss/_variables.scss | 2 --
app/src/scss/main.scss | 2 +-
5 files changed, 4 insertions(+), 10 deletions(-)
diff --git a/app/src/components/globals/DescriptionRow.vue b/app/src/components/globals/DescriptionRow.vue
index 878d00c0..4cf80387 100644
--- a/app/src/components/globals/DescriptionRow.vue
+++ b/app/src/components/globals/DescriptionRow.vue
@@ -37,7 +37,7 @@ export default {
@include media-breakpoint-up(md) {
margin: .25rem 0;
&:hover {
- background-color: rgba(0, 0, 0, 0.05);
+ background-color: rgba($black, 0.05);
border-radius: 0.2rem;
}
}
diff --git a/app/src/components/globals/Icon.vue b/app/src/components/globals/Icon.vue
index 0799be35..077e7817 100644
--- a/app/src/components/globals/Icon.vue
+++ b/app/src/components/globals/Icon.vue
@@ -39,13 +39,9 @@ export default {
@each $color, $value in $theme-colors {
&.#{$color} {
background-color: $value;
- color: $white;
+ color: color-yiq($value);
}
}
-
- &.warning {
- color: $black;
- }
}
}
diff --git a/app/src/components/globals/formItems/TagsSelectizeItem.vue b/app/src/components/globals/formItems/TagsSelectizeItem.vue
index 0177bb83..158d3a51 100644
--- a/app/src/components/globals/formItems/TagsSelectizeItem.vue
+++ b/app/src/components/globals/formItems/TagsSelectizeItem.vue
@@ -150,7 +150,7 @@ export default {
padding-top: .5rem;
position: sticky;
top: 0;
- background-color: white;
+ background-color: $white;
}
}
diff --git a/app/src/scss/_variables.scss b/app/src/scss/_variables.scss
index 8d193cd9..de23611d 100644
--- a/app/src/scss/_variables.scss
+++ b/app/src/scss/_variables.scss
@@ -101,8 +101,6 @@ $b-toast-background-opacity: 100%;
@import '~bootstrap-vue/src/variables';
-$body-color: $gray-800;
-
$hr-border-color: $gray-200;
$list-group-action-color: $gray-800;
diff --git a/app/src/scss/main.scss b/app/src/scss/main.scss
index fe051ba7..a6f58f7d 100644
--- a/app/src/scss/main.scss
+++ b/app/src/scss/main.scss
@@ -178,7 +178,7 @@ body {
.row-line {
@include media-breakpoint-up(md) {
&:hover {
- background-color: rgba(0, 0, 0, 0.05);
+ background-color: rgba($black, 0.05);
border-radius: 0.2rem;
}
}
From afe01820e5f31ce10dfd6e83013640d22e668c33 Mon Sep 17 00:00:00 2001
From: axolotle
Date: Fri, 21 Oct 2022 13:43:28 +0200
Subject: [PATCH 68/72] scss: fix code color
---
app/src/scss/_variables.scss | 2 ++
app/src/scss/main.scss | 10 ++++++++++
2 files changed, 12 insertions(+)
diff --git a/app/src/scss/_variables.scss b/app/src/scss/_variables.scss
index de23611d..a5cc4b36 100644
--- a/app/src/scss/_variables.scss
+++ b/app/src/scss/_variables.scss
@@ -66,6 +66,8 @@ $alert-color-level: 5;
$list-group-item-bg-level: -11;
$list-group-item-color-level: 6;
+$code-color: var(--code-color);
+
// Replace font-weight 300 with 200
$font-weight-light: 200;
$display1-weight: 200;
diff --git a/app/src/scss/main.scss b/app/src/scss/main.scss
index a6f58f7d..53e28fd3 100644
--- a/app/src/scss/main.scss
+++ b/app/src/scss/main.scss
@@ -85,6 +85,8 @@
@include hsl-color('gray-800', 210, 10%, 23%);
@include hsl-color('gray-900', 210, 11%, 15%);
+ --code-color: var(--pink);
+
// Overwrite list-group-item variants to lighter ones (used in diagnosis for example)
@each $color, $value in $theme-colors {
@include list-group-item-variant($color, theme-color-level($color, $list-group-item-bg-level), theme-color-level($color, $list-group-item-color-level));
@@ -114,6 +116,8 @@
@include hsl-color('gray-200', 210, 10%, 23%);
@include hsl-color('gray-100', 210, 11%, 15%);
+ --code-color: var(--gray-800);
+
// Overwrite list-group-item variants to lighter ones (used in diagnosis for example)
@each $color, $value in $theme-colors {
@include list-group-item-variant($color, theme-color-level($color, -6), theme-color-level($color, 2));
@@ -287,6 +291,12 @@ h3.card-title {
code {
background: $light;
+ padding: .15rem .25rem;
+ border-radius: $border-radius;
+}
+
+pre code {
+ padding: 0;
}
.log {
From b588b6e1264e67cdfad92942e55d5902a7db3e7f Mon Sep 17 00:00:00 2001
From: axolotle
Date: Fri, 21 Oct 2022 13:45:54 +0200
Subject: [PATCH 69/72] scss: fix buttons focus state & --gray-n values
---
app/src/scss/main.scss | 28 ++++++++++++++++------------
1 file changed, 16 insertions(+), 12 deletions(-)
diff --git a/app/src/scss/main.scss b/app/src/scss/main.scss
index 53e28fd3..14dc296a 100644
--- a/app/src/scss/main.scss
+++ b/app/src/scss/main.scss
@@ -106,27 +106,31 @@
@include hsl-color('green', 134.3, 74.4%, 67.8%);
@include hsl-color('cyan', 188.4, 91.4%, 72.5%);
- @include hsl-color('gray-900', 210, 17%, 98%);
- @include hsl-color('gray-800', 210, 16%, 93%);
- @include hsl-color('gray-700', 210, 14%, 89%);
- @include hsl-color('gray-600', 210, 14%, 83%);
- @include hsl-color('gray-500', 210, 11%, 71%);
- @include hsl-color('gray-400', 208, 7%, 46%);
- @include hsl-color('gray-300', 210, 9%, 31%);
- @include hsl-color('gray-200', 210, 10%, 23%);
- @include hsl-color('gray-100', 210, 11%, 15%);
+ @include hsl-color('gray-900', 256, 0%, 98%);
+ @include hsl-color('gray-800', 256, 0%, 93%);
+ @include hsl-color('gray-700', 256, 0%, 89%);
+ @include hsl-color('gray-600', 256, 0%, 83%);
+ @include hsl-color('gray-500', 256, 0%, 71%);
+ @include hsl-color('gray-400', 256, 0%, 46%);
+ @include hsl-color('gray-300', 256, 0%, 31%);
+ @include hsl-color('gray-200', 256, 0%, 23%);
+ @include hsl-color('gray-100', 256, 0%, 15%);
--code-color: var(--gray-800);
- // Overwrite list-group-item variants to lighter ones (used in diagnosis for example)
@each $color, $value in $theme-colors {
@include list-group-item-variant($color, theme-color-level($color, -6), theme-color-level($color, 2));
- }
- @each $color, $value in $theme-colors {
.alert-#{$color} {
@include alert-variant(theme-color-level($color, -6), theme-color-level($color, -5), theme-color-level($color, 2));
}
+
+ .btn-#{$color} {
+ &:focus,
+ &.focus {
+ box-shadow: 0 0 0 $btn-focus-width rgba($value, .3);
+ }
+ }
}
}
From 6fa379fbd4cec62e989fa1946eb96774d5d1bca8 Mon Sep 17 00:00:00 2001
From: axolotle
Date: Fri, 21 Oct 2022 13:53:52 +0200
Subject: [PATCH 70/72] diagnosis: fix 'details' button style depending on
theme
---
app/src/views/diagnosis/Diagnosis.vue | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/app/src/views/diagnosis/Diagnosis.vue b/app/src/views/diagnosis/Diagnosis.vue
index 4e1d26ee..74d7ec64 100644
--- a/app/src/views/diagnosis/Diagnosis.vue
+++ b/app/src/views/diagnosis/Diagnosis.vue
@@ -76,7 +76,7 @@
{{ $t('details') }}
@@ -106,6 +106,8 @@