Skip to content

Commit

Permalink
Home page: Add options to set simple navbar/standard background the d…
Browse files Browse the repository at this point in the history
…efault on mobile/desktop (#2800)

This adds new boolean config parameters to the home page settings that allow
setting the default navbar style and standard background for mobile and desktop devices.
The device-specific settings allow to override these defaults by using a segmented button
with three options: The admin's default, option A and option B.

---------

Signed-off-by: Florian Hotze <[email protected]>
  • Loading branch information
florian-h05 authored Oct 21, 2024
1 parent a1787ed commit 85c3c31
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@ import { actionGroup, actionParams } from '../actions.js'

export const OhHomePageDefinition = () => new WidgetDefinition('oh-home-page', 'Home page')
.params([
pb('simpleNavbarMobileDefault', 'Default to Simple Navbar on Mobile', 'Use the simple navbar by default on mobile devices'),
pb('simpleNavbarDesktopDefault', 'Default to Simple Navbar on Desktop', 'Use the simple navbar by default on desktop devices'),
pb('standardBackgroundMobileDefault', 'Default to Standard Background on Mobile', 'Use the standard background (light grey in light mode) by default on mobile devices'),
pb('standardBackgroundDesktopDefault', 'Default to Standard Background on Desktop', 'Use the standard background (light grey in light mode) by default on desktop devices'),
pt('displayModelCardsTo', 'Display model cards to', 'Restrict who sees the Locations/Equipment/Properties tabs with the model cards')
.o([
{ value: 'role:administrator', label: 'Administrators' },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,14 @@
"about.darkMode.dark": "Dark",
"about.navigationBarsStyle": "Navigation bars style",
"about.miscellaneous": "Miscellaneous",
"about.miscellaneous.home.navbar": "Simple navigation bar on home page",
"about.miscellaneous.home.background": "Standard home page background color",
"about.miscellaneous.home.navbar": "Home page navigation bar",
"about.miscellaneous.home.navbar.default": "Default",
"about.miscellaneous.home.navbar.simple": "Simple",
"about.miscellaneous.home.navbar.large": "Large",
"about.miscellaneous.home.background": "Home page background color",
"about.miscellaneous.home.background.default": "Default",
"about.miscellaneous.home.background.standard": "Standard",
"about.miscellaneous.home.background.white": "White",
"about.miscellaneous.home.hideChatInput": "Hide chat input box on home page",
"about.miscellaneous.home.disableCardExpansionAnimation": "Disable card expansion animations",
"about.miscellaneous.theme.disablePageTransition": "Disable page transition animations",
Expand Down
38 changes: 33 additions & 5 deletions bundles/org.openhab.ui/web/src/components/theme-switcher.vue
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<template>
<f7-block>
<f7-block class="theme-switcher">
<f7-block-title class="padding-left" v-t="'about.theme'" />
<f7-row>
<f7-col width="25" class="theme-picker auto" @click="switchTheme('auto')">
Expand Down Expand Up @@ -52,11 +52,31 @@
<f7-list>
<f7-list-item>
<span v-t="'about.miscellaneous.home.navbar'" />
<f7-toggle :checked="homePageNavbarStyle === 'simple'" @toggle:change="setHomePageNavbarStyle" />
<f7-segmented class="home-navbar-selection">
<f7-button outline small :active="homePageNavbarStyle === 'default'" @click="setHomePageNavbarStyle('default')">
{{ $t('about.miscellaneous.home.navbar.default') }}
</f7-button>
<f7-button outline small :active="homePageNavbarStyle === 'simple'" @click="setHomePageNavbarStyle('simple')">
{{ $t('about.miscellaneous.home.navbar.simple') }}
</f7-button>
<f7-button outline small :active="homePageNavbarStyle === 'large'" @click="setHomePageNavbarStyle('large')">
{{ $t('about.miscellaneous.home.navbar.large') }}
</f7-button>
</f7-segmented>
</f7-list-item>
<f7-list-item>
<span v-t="'about.miscellaneous.home.background'" />
<f7-toggle :checked="homePageBackground === 'standard'" @toggle:change="setHomePageBackground" />
<f7-segmented class="home-navbar-selection">
<f7-button outline small :active="homePageBackground === 'default'" @click="setHomePageBackground('default')">
{{ $t('about.miscellaneous.home.background.default') }}
</f7-button>
<f7-button outline small :active="homePageBackground === 'standard'" @click="setHomePageBackground('standard')">
{{ $t('about.miscellaneous.home.background.standard') }}
</f7-button>
<f7-button outline small :active="homePageBackground === 'white'" @click="setHomePageBackground('white')">
{{ $t('about.miscellaneous.home.background.white') }}
</f7-button>
</f7-segmented>
</f7-list-item>
<f7-list-item v-show="$store.getters.apiEndpoint('habot')">
<span v-t="'about.miscellaneous.home.hideChatInput'" />
Expand All @@ -80,6 +100,14 @@
</f7-row>
</f7-block>
</template>

<style lang="stylus">
.theme-switcher
.home-navbar-selection
.button
width auto
</style>

<script>
import { loadLocaleMessages } from '@/js/i18n'
import ItemPicker from '@/components/config/controls/item-picker.vue'
Expand Down Expand Up @@ -111,11 +139,11 @@ export default {
location.reload()
},
setHomePageNavbarStyle (value) {
localStorage.setItem('openhab.ui:theme.home.navbar', (value) ? 'simple' : 'default')
localStorage.setItem('openhab.ui:theme.home.navbar', value)
location.reload()
},
setHomePageBackground (value) {
localStorage.setItem('openhab.ui:theme.home.background', (value) ? 'standard' : 'default')
localStorage.setItem('openhab.ui:theme.home.background', value)
location.reload()
},
setHideChatInput (value) {
Expand Down
24 changes: 21 additions & 3 deletions bundles/org.openhab.ui/web/src/pages/home.vue
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
<template>
<f7-page stacked name="HomePage" class="page-home" :class="{ 'standard-background': $f7.data.themeOptions.homeBackground === 'standard' }" @page:init="onPageInit" @page:beforein="onPageBeforeIn" @page:afterin="onPageAfterIn" @page:beforeout="onPageBeforeOut">
<f7-navbar :large="$f7.data.themeOptions.homeNavbar !== 'simple'" :large-transparent="$f7.data.themeOptions.homeNavbar !== 'simple'" class="home-nav disable-user-select">
<f7-page stacked name="HomePage" class="page-home" :class="{ 'standard-background': standardBackground }" @page:init="onPageInit" @page:beforein="onPageBeforeIn" @page:afterin="onPageAfterIn" @page:beforeout="onPageBeforeOut">
<f7-navbar :large="!simpleNavbar" :large-transparent="!simpleNavbar" class="home-nav disable-user-select">
<f7-nav-left>
<f7-link icon-ios="f7:menu" icon-aurora="f7:menu" icon-md="material:menu" panel-open="left" />
</f7-nav-left>
<f7-nav-title-large v-if="$f7.data.themeOptions.homeNavbar !== 'simple'" class="home-title-large">
<f7-nav-title-large v-if="!simpleNavbar" class="home-title-large">
<span class="today">{{ new Date().toLocaleString($store.getters.locale, { weekday: 'long', day: 'numeric', month: 'long' }) }}</span>
{{ title }}
</f7-nav-title-large>
Expand Down Expand Up @@ -113,6 +113,24 @@ export default {
store: this.$store.getters.trackedItems
}
},
simpleNavbar () {
const homeNavbar = this.$f7.data.themeOptions.homeNavbar
if (homeNavbar !== 'default') return homeNavbar === 'simple'
if (this.$f7.device.desktop) {
return this.homePageComponent?.config?.simpleNavbarDesktopDefault === true
} else {
return this.homePageComponent?.config?.simpleNavbarMobileDefault === true
}
},
standardBackground () {
const homeBackground = this.$f7.data.themeOptions.homeBackground
if (homeBackground !== 'default') return homeBackground === 'standard'
if (this.$f7.device.desktop) {
return this.homePageComponent?.config?.standardBackgroundDesktopDefault === true
} else {
return this.homePageComponent?.config?.standardBackgroundMobileDefault === true
}
},
homePageComponent () {
const page = this.$store.getters.page('home')
if (!page) return null
Expand Down

0 comments on commit 85c3c31

Please sign in to comment.