From cd39510cd5ed90c3085a34a1341246fb693c925a Mon Sep 17 00:00:00 2001 From: Henrik Askjer <henrik.askjer@uib.no> Date: Mon, 29 Nov 2021 11:15:46 +0100 Subject: [PATCH] modular settings --- src/App.vue | 36 +++--------------- src/components/Autocomplete.vue | 13 +++++-- src/components/Menu.vue | 65 ++++++--------------------------- src/components/Settings.vue | 44 ++++++++++++++++++++++ src/components/TopBar.vue | 51 ++++++++++++++++++++++++++ 5 files changed, 122 insertions(+), 87 deletions(-) create mode 100644 src/components/Settings.vue create mode 100644 src/components/TopBar.vue diff --git a/src/App.vue b/src/App.vue index 8a4e3863..584e1b94 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,23 +1,7 @@ <template> <v-app id="app"> <header> - <v-toolbar class = "top-bar" dense dark color="primary"> - <div class="beta" :title="release">{{version_label}}</div> - <v-spacer/> - <v-toolbar-items class="hidden-sm-and-down"> - <v-divider vertical/> - <v-btn text width="210" :class="$vuetify.breakpoint.name"><v-icon left>language</v-icon>Norsk (Bokmål)<v-icon right>expand_more</v-icon></v-btn> - <v-divider vertical/> - <v-btn text width="210"><v-icon left>settings</v-icon>Instillinger<v-icon right>expand_more</v-icon></v-btn> - <v-divider vertical/> - <v-btn text width="210" @click="toggleAbout"><v-icon left>{{$route.name=='about'? "chevron_left":"info"}}</v-icon>{{$route.name=='about'? "Tilbake":"Om ordbøkene"}}</v-btn> - <v-divider vertical/> - </v-toolbar-items> - <v-toolbar-items class="hidden-md-and-up"> - <v-divider vertical/> - <v-btn text><span>{{$t("menu.title")}}</span><v-icon right>menu</v-icon></v-btn> - </v-toolbar-items> - </v-toolbar> + <TopBar/> </header> <div class = "banner"> <h1><a aria-label="Ordbøkene bokmålsordboka og nynorskordboka sitt nettsted" :class="$vuetify.breakpoint.name" href="/" tabindex="1">Ordbøkene</a></h1> @@ -39,21 +23,15 @@ </v-app> </template> <script> +import TopBar from './components/TopBar.vue' + export default { - data: function() { - return { - version_label: process.env.VUE_APP_VERSION_LABEL, - release: process.env.VUE_APP_RELEASE - } - }, - methods: { - toggleAbout: function() { - this.$route.name=='about'? this.$router.back(): this.$router.push('/om') - } - }, mounted: function(){ this._i18n.locale = this.$store.state.currentLocale document.title = 'Ordbøkene - ' + this.version_label + }, + components: { + TopBar } } </script> @@ -201,6 +179,4 @@ footer > div.sm > div { height: 60px; } - - </style> diff --git a/src/components/Autocomplete.vue b/src/components/Autocomplete.vue index a85bf4f0..b2c7dfe7 100644 --- a/src/components/Autocomplete.vue +++ b/src/components/Autocomplete.vue @@ -53,7 +53,13 @@ </v-list-item> </v-list> </v-menu><v-divider vertical/> - <Menu activatorClass="search-field-button"/> + <v-dialog max-width="1200" width="1200" v-model="menuDialog" hide-overlay :fullscreen="$vuetify.breakpoint.mobile" + :close-on-content-click="false" transition="dialog-top-transition"> + <template v-slot:activator="{ on, attrs }"> + <v-btn v-bind="attrs" v-on="on" min-width="0px" class = "search-field-button" plain depressed color = "primary" text><span v-if="$vuetify.breakpoint.mdAndUp"></span><v-icon>more_vert</v-icon></v-btn> + </template> + <Menu @close="menuDialog=false"/> + </v-dialog> </template> <template v-slot:item="data"> @@ -86,6 +92,7 @@ import Menu from './Menu.vue' search: null, select: null, suggesting: null, + menuDialog: false } }, watch: { @@ -179,7 +186,7 @@ import Menu from './Menu.vue' padding-right: 10px; } - .search-field-button { - padding: 0px !important; + .search-field-button { + padding-right: 0px !important; } </style> diff --git a/src/components/Menu.vue b/src/components/Menu.vue index c22571ca..73ba5f8b 100644 --- a/src/components/Menu.vue +++ b/src/components/Menu.vue @@ -1,16 +1,11 @@ <template> - <v-dialog max-width="1200" width="1200" v-model="settings_dialog" hide-overlay :fullscreen="$vuetify.breakpoint.mobile" - :close-on-content-click="false" transition="dialog-top-transition"> - <template v-slot:activator="{ on, attrs }"> - <v-btn v-bind="attrs" v-on="on" min-width="0px" :class = "activatorClass" plain depressed color = "primary" text><span v-if="$vuetify.breakpoint.mdAndUp"></span><v-icon>more_vert</v-icon></v-btn> - </template> - <v-card> + <v-card> <v-toolbar dense dark color="primary"> <v-toolbar-title>Meny</v-toolbar-title><v-spacer></v-spacer> <v-toolbar-items><v-divider vertical/> <v-btn - @click="settings_dialog=false" + @click="$emit('close')" dark text >{{$t("close")}} @@ -34,38 +29,20 @@ dense> </v-select> </v-list> - <v-divider></v-divider> - <v-list three-line subheader> - <v-subheader>{{$t("settings.title")}}</v-subheader> - <v-checkbox - v-model="toggleSearchToolbar" - label="Vis verktøylinje for søkealternativer" - hide-details - ></v-checkbox> - <v-checkbox - v-model="toggleHGNO" - label="Vis homografnumre" - hide-details - ></v-checkbox> - <v-checkbox - v-model="toggleInflectionNo" - label="Vis bøyningsnumre" - hide-details - ></v-checkbox> - </v-list> + <Settings/> + </v-card-text> <v-card-actions><v-spacer/> - - <v-btn rounded depressed @click='resetStore'>Tilbakestill</v-btn> - <v-btn rounded depressed @click="settings_dialog = false">{{$t("close")}}</v-btn> + <v-btn rounded depressed @click='$store.commit("resetStore")'>Tilbakestill</v-btn> + <v-btn rounded depressed @click="$emit('close')">{{$t("close")}}</v-btn> </v-card-actions> </v-card> - </v-dialog> </template> <script> +import Settings from './Settings.vue' export default { name: "Menu", @@ -77,38 +54,18 @@ export default { return { locales: [{text: "norsk (bokmål)", value: "nob"}, {text: "norsk (nynorsk)", value: "nno"}, {text:"english", value: "eng"}], localesMap: {"nob": "norsk (bokmål)", "nno": "norsk (nynorsk)", "eng": "english"}, - settings_dialog: false } }, computed: { - toggleSearchToolbar: { - get () { return this.$store.state.showSearchToolbar}, - set () { this.$store.commit("toggle", "showSearchToolbar") - } - }, - toggleHGNO: { - get () { return this.$store.state.showHGNO}, - set () { this.$store.commit("toggle", "showHGNO") - } - }, - toggleInflectionNo: { - get () { return this.$store.state.showInflectionNo}, - set () { this.$store.commit("toggle", "showInflectionNo") - } - }, updateLocale: { get () { return {text: this.localesMap[this.$store.state.currentLocale], value: this.$store.state.currentLocale}}, set(value) { - this.$store.commit("setLocale", {value: value, i18n: this._i18n}) - } + this.$store.commit("setLocale", {value: value, i18n: this._i18n}) + } } - }, - methods: { - resetStore: function() { - this.$store.commit("resetStore") - - } + components: { + Settings } } </script> diff --git a/src/components/Settings.vue b/src/components/Settings.vue new file mode 100644 index 00000000..a8ebcefc --- /dev/null +++ b/src/components/Settings.vue @@ -0,0 +1,44 @@ +<template> +<v-list three-line subheader> + <v-subheader>{{$t("settings.title")}}</v-subheader> + <v-checkbox + v-model="toggleSearchToolbar" + label="Vis verktøylinje for søkealternativer" + hide-details + ></v-checkbox> + <v-checkbox + v-model="toggleHGNO" + label="Vis homografnumre" + hide-details + ></v-checkbox> + <v-checkbox + v-model="toggleInflectionNo" + label="Vis bøyningsnumre" + hide-details + ></v-checkbox> + </v-list> +</template> + +<script> + +export default { + name: "Settings", + computed: { + toggleSearchToolbar: { + get () { return this.$store.state.showSearchToolbar}, + set () { this.$store.commit("toggle", "showSearchToolbar") + } + }, + toggleHGNO: { + get () { return this.$store.state.showHGNO}, + set () { this.$store.commit("toggle", "showHGNO") + } + }, + toggleInflectionNo: { + get () { return this.$store.state.showInflectionNo}, + set () { this.$store.commit("toggle", "showInflectionNo") + } + } + }, +} +</script> diff --git a/src/components/TopBar.vue b/src/components/TopBar.vue new file mode 100644 index 00000000..f49f447d --- /dev/null +++ b/src/components/TopBar.vue @@ -0,0 +1,51 @@ +<template> + <v-toolbar class = "top-bar" dense dark color="primary"> + <div class="beta" :title="release">{{version_label}}</div> + <v-spacer/> + <v-toolbar-items class="hidden-sm-and-down"> + <v-divider vertical/> + <v-btn text width="210" :class="$vuetify.breakpoint.name"><v-icon left>language</v-icon>Norsk (Bokmål)<v-icon right>expand_more</v-icon></v-btn> + <v-divider vertical/> + <v-btn text width="210"><v-icon left>settings</v-icon>Instillinger<v-icon right>expand_more</v-icon></v-btn> + <v-divider vertical/> + <v-btn text width="210" @click="toggleAbout"><v-icon left>{{$route.name=='about'? "chevron_left":"info"}}</v-icon>{{$route.name=='about'? "Tilbake":"Om ordbøkene"}}</v-btn> + <v-divider vertical/> + </v-toolbar-items> + <v-toolbar-items> + <v-divider vertical/> + <v-dialog max-width="1200" width="1200" v-model="menuDialog" hide-overlay :fullscreen="$vuetify.breakpoint.mobile" + :close-on-content-click="false" transition="dialog-top-transition"> + <template v-slot:activator="{ on, attrs }"> + <v-btn text v-bind="attrs" v-on="on"> + <span v-if="$vuetify.breakpoint.mdAndUp">{{$t('menu.title')}}</span><v-icon :right="!$vuetify.breakpoint.mobile">menu</v-icon></v-btn> + </template> + <Menu @close="menuDialog=false"/> + </v-dialog> + + </v-toolbar-items> + <v-divider vertical/> + </v-toolbar> +</template> + +<script> +import Menu from './Menu.vue' + +export default { + name: "TopBar", + data: function() { + return { + version_label: process.env.VUE_APP_VERSION_LABEL, + release: process.env.VUE_APP_RELEASE, + menuDialog: false + } + }, + methods: { + toggleAbout: function() { + this.$route.name=='about'? this.$router.back(): this.$router.push('/om') + } + }, + components: { + Menu + } +} +</script> -- GitLab