diff options
author | Marius David Wieschollek <passwords.public@mdns.eu> | 2021-02-28 22:40:36 +0300 |
---|---|---|
committer | Marius David Wieschollek <passwords.public@mdns.eu> | 2021-02-28 22:40:36 +0300 |
commit | aa8cdf89e5406273a9fe8214f40676a30539bae1 (patch) | |
tree | be494cc9f4d9322902b78072703d527024864343 /src/vue | |
parent | b0cafe8df13ee45a5bf2d0ad256b9b5f62e68db7 (diff) |
Improve select field styling
Signed-off-by: Marius David Wieschollek <passwords.public@mdns.eu>
Diffstat (limited to 'src/vue')
-rw-r--r-- | src/vue/Components/Form/SelectField.vue | 65 | ||||
-rw-r--r-- | src/vue/Components/Options/Accounts.vue | 44 |
2 files changed, 82 insertions, 27 deletions
diff --git a/src/vue/Components/Form/SelectField.vue b/src/vue/Components/Form/SelectField.vue index a66e15b..16e2f4e 100644 --- a/src/vue/Components/Form/SelectField.vue +++ b/src/vue/Components/Form/SelectField.vue @@ -1,13 +1,15 @@ <template> - <select @change="handleChange" v-on="listeners"> - <option v-for="option in optionList" - :key="option.id" - :value="option.id" - :disabled="option.disabled" - :selected="option.id === value" - :title="getTranslated(option.description)">{{getTranslated(option.label)}} - </option> - </select> + <div class="select-field" :class="{disabled:disabled}"> + <select @change="handleChange" v-on="listeners" v-bind="$attrs" :disabled="disabled"> + <option v-for="option in optionList" + :key="option.id" + :value="option.id" + :disabled="option.disabled" + :selected="option.id === value" + :title="getTranslated(option.description)">{{ getTranslated(option.label) }} + </option> + </select> + </div> </template> <script> @@ -26,6 +28,10 @@ translate: { type : Boolean, default: true + }, + disabled : { + type : Boolean, + default: false } }, @@ -81,9 +87,44 @@ </script> <style lang="scss"> -select { - &[disabled] { - opacity: 0.5; +.select-field { + cursor : pointer; + background-color : var(--element-hover-bg-color); + border-radius : var(--button-border-radius); + position : relative; + + select { + border : 0; + cursor : pointer; + appearance : none; + background-color : rgba(0, 0, 0, 0); + padding : .25rem 1.75rem .25rem .25rem; + position : relative; + width : 100%; + z-index : 1; + } + + &.disabled { + opacity : 0.5; + cursor : not-allowed; + + select { + cursor : not-allowed; + } + } + + &:after { + font-family : var(--font-family-icon); + font-weight : var(--font-weight-icon); + content : "\f078"; + position : absolute; + right : .5rem; + top : 0; + bottom : 0; + display : flex; + align-items : center; + z-index : 0; + opacity : 0.5; } } </style>
\ No newline at end of file diff --git a/src/vue/Components/Options/Accounts.vue b/src/vue/Components/Options/Accounts.vue index 6d3d621..169cc83 100644 --- a/src/vue/Components/Options/Accounts.vue +++ b/src/vue/Components/Options/Accounts.vue @@ -2,11 +2,7 @@ <div> <div class="account-options"> <translate tag="label" for="master-account" say="SettingsAccountsMain"/> - <select id="master-account" v-model="defaultServer"> - <option v-for="server in servers" :key="server.getId()" :value="server.getId()" :disabled="!server.getEnabled()"> - {{server.getLabel()}} - </option> - </select> + <select-field id="master-account" v-model="defaultServer" :options="serverOptions"/> </div> <account-list :servers="servers" v-on:change="loadData"/> </div> @@ -20,9 +16,10 @@ import AccountList from '@vue/Components/Accounts/AccountList'; import SettingsService from '@js/Services/SettingsService'; import ErrorManager from '@js/Manager/ErrorManager'; + import SelectField from "@vue/Components/Form/SelectField"; export default { - components: {AccountList, Foldout, Translate, Icon}, + components: {SelectField, AccountList, Foldout, Translate, Icon}, data() { return { servers : [], @@ -30,6 +27,23 @@ }; }, + computed: { + serverOptions() { + let options = []; + for(let server of this.servers) { + options.push( + { + id : server.getId(), + disabled: !server.getEnabled(), + label : server.getLabel() + } + ); + } + + return options; + } + }, + created() { this.loadData(); }, @@ -57,15 +71,15 @@ </script> <style lang="scss"> - .account-options, - .account-form fieldset { - display : grid; - grid-template-columns : 2fr 1fr; - grid-row-gap : 0.5rem; - padding : 0.5rem 1rem; +.account-options, +.account-form fieldset { + display : grid; + grid-template-columns : 2fr 1fr; + grid-row-gap : 0.5rem; + padding : 0.5rem 1rem; - label { - line-height : 2rem; - } + label { + line-height : 2rem; } +} </style>
\ No newline at end of file |