Sync theme between windows (#2090)
* Sync expandSideBar across tabs * Sync baseTheme, mainColor, secColor between windows * Fix lint errors * Fix lint errors: electric boogaloo
This commit is contained in:
parent
2dd184fba3
commit
815c348948
|
@ -101,6 +101,18 @@ export default Vue.extend({
|
||||||
return this.$store.getters.getDefaultInvidiousInstance
|
return this.$store.getters.getDefaultInvidiousInstance
|
||||||
},
|
},
|
||||||
|
|
||||||
|
baseTheme: function () {
|
||||||
|
return this.$store.getters.getBaseTheme
|
||||||
|
},
|
||||||
|
|
||||||
|
mainColor: function () {
|
||||||
|
return this.$store.getters.getMainColor
|
||||||
|
},
|
||||||
|
|
||||||
|
secColor: function () {
|
||||||
|
return this.$store.getters.getSecColor
|
||||||
|
},
|
||||||
|
|
||||||
externalLinkOpeningPromptNames: function () {
|
externalLinkOpeningPromptNames: function () {
|
||||||
return [
|
return [
|
||||||
this.$t('Yes'),
|
this.$t('Yes'),
|
||||||
|
@ -114,6 +126,13 @@ export default Vue.extend({
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
windowTitle: 'setWindowTitle',
|
windowTitle: 'setWindowTitle',
|
||||||
|
|
||||||
|
baseTheme: 'checkThemeSettings',
|
||||||
|
|
||||||
|
mainColor: 'checkThemeSettings',
|
||||||
|
|
||||||
|
secColor: 'checkThemeSettings',
|
||||||
|
|
||||||
$route () {
|
$route () {
|
||||||
// react to route changes...
|
// react to route changes...
|
||||||
// Hide top nav filter panel on page change
|
// Hide top nav filter panel on page change
|
||||||
|
@ -160,39 +179,22 @@ export default Vue.extend({
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
checkThemeSettings: function () {
|
checkThemeSettings: function () {
|
||||||
let baseTheme = localStorage.getItem('baseTheme')
|
|
||||||
let mainColor = localStorage.getItem('mainColor')
|
|
||||||
let secColor = localStorage.getItem('secColor')
|
|
||||||
|
|
||||||
if (baseTheme === null) {
|
|
||||||
baseTheme = 'dark'
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mainColor === null) {
|
|
||||||
mainColor = 'mainRed'
|
|
||||||
}
|
|
||||||
|
|
||||||
if (secColor === null) {
|
|
||||||
secColor = 'secBlue'
|
|
||||||
}
|
|
||||||
|
|
||||||
const theme = {
|
const theme = {
|
||||||
baseTheme: baseTheme,
|
baseTheme: this.baseTheme || 'dark',
|
||||||
mainColor: mainColor,
|
mainColor: this.mainColor || 'mainRed',
|
||||||
secColor: secColor
|
secColor: this.secColor || 'secBlue'
|
||||||
}
|
}
|
||||||
|
|
||||||
this.updateTheme(theme)
|
this.updateTheme(theme)
|
||||||
},
|
},
|
||||||
|
|
||||||
updateTheme: function (theme) {
|
updateTheme: function (theme) {
|
||||||
console.log(theme)
|
console.group('updateTheme')
|
||||||
const className = `${theme.baseTheme} ${theme.mainColor} ${theme.secColor}`
|
console.log('Theme: ', theme)
|
||||||
|
const className = `${theme.baseTheme} main${theme.mainColor} sec${theme.secColor}`
|
||||||
const body = document.getElementsByTagName('body')[0]
|
const body = document.getElementsByTagName('body')[0]
|
||||||
body.className = className
|
body.className = className
|
||||||
localStorage.setItem('baseTheme', theme.baseTheme)
|
console.groupEnd()
|
||||||
localStorage.setItem('mainColor', theme.mainColor)
|
|
||||||
localStorage.setItem('secColor', theme.secColor)
|
|
||||||
},
|
},
|
||||||
|
|
||||||
checkForNewUpdates: function () {
|
checkForNewUpdates: function () {
|
||||||
|
@ -473,7 +475,10 @@ export default Vue.extend({
|
||||||
'getExternalPlayerCmdArgumentsData',
|
'getExternalPlayerCmdArgumentsData',
|
||||||
'fetchInvidiousInstances',
|
'fetchInvidiousInstances',
|
||||||
'setRandomCurrentInvidiousInstance',
|
'setRandomCurrentInvidiousInstance',
|
||||||
'setupListenersToSyncWindows'
|
'setupListenersToSyncWindows',
|
||||||
|
'updateBaseTheme',
|
||||||
|
'updateMainColor',
|
||||||
|
'updateSecColor'
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -19,10 +19,6 @@ export default Vue.extend({
|
||||||
},
|
},
|
||||||
data: function () {
|
data: function () {
|
||||||
return {
|
return {
|
||||||
currentBaseTheme: '',
|
|
||||||
currentMainColor: '',
|
|
||||||
currentSecColor: '',
|
|
||||||
expandSideBar: false,
|
|
||||||
minUiScale: 50,
|
minUiScale: 50,
|
||||||
maxUiScale: 300,
|
maxUiScale: 300,
|
||||||
uiScaleStep: 5,
|
uiScaleStep: 5,
|
||||||
|
@ -70,6 +66,18 @@ export default Vue.extend({
|
||||||
return this.$store.getters.getBarColor
|
return this.$store.getters.getBarColor
|
||||||
},
|
},
|
||||||
|
|
||||||
|
baseTheme: function () {
|
||||||
|
return this.$store.getters.getBaseTheme
|
||||||
|
},
|
||||||
|
|
||||||
|
mainColor: function () {
|
||||||
|
return this.$store.getters.getMainColor
|
||||||
|
},
|
||||||
|
|
||||||
|
secColor: function () {
|
||||||
|
return this.$store.getters.getSecColor
|
||||||
|
},
|
||||||
|
|
||||||
isSideNavOpen: function () {
|
isSideNavOpen: function () {
|
||||||
return this.$store.getters.getIsSideNavOpen
|
return this.$store.getters.getIsSideNavOpen
|
||||||
},
|
},
|
||||||
|
@ -81,9 +89,15 @@ export default Vue.extend({
|
||||||
disableSmoothScrolling: function () {
|
disableSmoothScrolling: function () {
|
||||||
return this.$store.getters.getDisableSmoothScrolling
|
return this.$store.getters.getDisableSmoothScrolling
|
||||||
},
|
},
|
||||||
|
|
||||||
|
expandSideBar: function () {
|
||||||
|
return this.$store.getters.getExpandSideBar
|
||||||
|
},
|
||||||
|
|
||||||
hideLabelsSideBar: function () {
|
hideLabelsSideBar: function () {
|
||||||
return this.$store.getters.getHideLabelsSideBar
|
return this.$store.getters.getHideLabelsSideBar
|
||||||
},
|
},
|
||||||
|
|
||||||
restartPromptMessage: function () {
|
restartPromptMessage: function () {
|
||||||
return this.$t('Settings["The app needs to restart for changes to take effect. Restart and apply change?"]')
|
return this.$t('Settings["The app needs to restart for changes to take effect. Restart and apply change?"]')
|
||||||
},
|
},
|
||||||
|
@ -133,34 +147,15 @@ export default Vue.extend({
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted: function () {
|
mounted: function () {
|
||||||
this.currentBaseTheme = localStorage.getItem('baseTheme')
|
|
||||||
this.currentMainColor = localStorage.getItem('mainColor').replace('main', '')
|
|
||||||
this.currentSecColor = localStorage.getItem('secColor').replace('sec', '')
|
|
||||||
this.expandSideBar = localStorage.getItem('expandSideBar') === 'true'
|
|
||||||
this.disableSmoothScrollingToggleValue = this.disableSmoothScrolling
|
this.disableSmoothScrollingToggleValue = this.disableSmoothScrolling
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
updateBaseTheme: function (theme) {
|
|
||||||
const mainColor = `main${this.currentMainColor}`
|
|
||||||
const secColor = `sec${this.currentSecColor}`
|
|
||||||
|
|
||||||
const payload = {
|
|
||||||
baseTheme: theme,
|
|
||||||
mainColor: mainColor,
|
|
||||||
secColor: secColor
|
|
||||||
}
|
|
||||||
|
|
||||||
this.$parent.$parent.updateTheme(payload)
|
|
||||||
this.currentBaseTheme = theme
|
|
||||||
},
|
|
||||||
|
|
||||||
handleExpandSideBar: function (value) {
|
handleExpandSideBar: function (value) {
|
||||||
if (this.isSideNavOpen !== value) {
|
if (this.isSideNavOpen !== value) {
|
||||||
this.$store.commit('toggleSideNav')
|
this.$store.commit('toggleSideNav')
|
||||||
}
|
}
|
||||||
|
|
||||||
this.expandSideBar = value
|
this.updateExpandSideBar(value)
|
||||||
localStorage.setItem('expandSideBar', value)
|
|
||||||
},
|
},
|
||||||
|
|
||||||
handleRestartPrompt: function (value) {
|
handleRestartPrompt: function (value) {
|
||||||
|
@ -186,36 +181,12 @@ export default Vue.extend({
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
updateMainColor: function (color) {
|
|
||||||
const mainColor = `main${color}`
|
|
||||||
const secColor = `sec${this.currentSecColor}`
|
|
||||||
|
|
||||||
const payload = {
|
|
||||||
baseTheme: this.currentBaseTheme,
|
|
||||||
mainColor: mainColor,
|
|
||||||
secColor: secColor
|
|
||||||
}
|
|
||||||
|
|
||||||
this.$parent.$parent.updateTheme(payload)
|
|
||||||
this.currentMainColor = color
|
|
||||||
},
|
|
||||||
|
|
||||||
updateSecColor: function (color) {
|
|
||||||
const mainColor = `main${this.currentMainColor}`
|
|
||||||
const secColor = `sec${color}`
|
|
||||||
|
|
||||||
const payload = {
|
|
||||||
baseTheme: this.currentBaseTheme,
|
|
||||||
mainColor: mainColor,
|
|
||||||
secColor: secColor
|
|
||||||
}
|
|
||||||
|
|
||||||
this.$parent.$parent.updateTheme(payload)
|
|
||||||
this.currentSecColor = color
|
|
||||||
},
|
|
||||||
|
|
||||||
...mapActions([
|
...mapActions([
|
||||||
'updateBarColor',
|
'updateBarColor',
|
||||||
|
'updateBaseTheme',
|
||||||
|
'updateMainColor',
|
||||||
|
'updateSecColor',
|
||||||
|
'updateExpandSideBar',
|
||||||
'updateUiScale',
|
'updateUiScale',
|
||||||
'updateDisableSmoothScrolling',
|
'updateDisableSmoothScrolling',
|
||||||
'updateHideLabelsSideBar'
|
'updateHideLabelsSideBar'
|
||||||
|
|
|
@ -43,21 +43,21 @@
|
||||||
<ft-flex-box>
|
<ft-flex-box>
|
||||||
<ft-select
|
<ft-select
|
||||||
:placeholder="$t('Settings.Theme Settings.Base Theme.Base Theme')"
|
:placeholder="$t('Settings.Theme Settings.Base Theme.Base Theme')"
|
||||||
:value="currentBaseTheme"
|
:value="baseTheme"
|
||||||
:select-names="baseThemeNames"
|
:select-names="baseThemeNames"
|
||||||
:select-values="baseThemeValues"
|
:select-values="baseThemeValues"
|
||||||
@change="updateBaseTheme"
|
@change="updateBaseTheme"
|
||||||
/>
|
/>
|
||||||
<ft-select
|
<ft-select
|
||||||
:placeholder="$t('Settings.Theme Settings.Main Color Theme.Main Color Theme')"
|
:placeholder="$t('Settings.Theme Settings.Main Color Theme.Main Color Theme')"
|
||||||
:value="currentMainColor"
|
:value="mainColor"
|
||||||
:select-names="colorNames"
|
:select-names="colorNames"
|
||||||
:select-values="colorValues"
|
:select-values="colorValues"
|
||||||
@change="updateMainColor"
|
@change="updateMainColor"
|
||||||
/>
|
/>
|
||||||
<ft-select
|
<ft-select
|
||||||
:placeholder="$t('Settings.Theme Settings.Secondary Color Theme')"
|
:placeholder="$t('Settings.Theme Settings.Secondary Color Theme')"
|
||||||
:value="currentSecColor"
|
:value="secColor"
|
||||||
:select-names="colorNames"
|
:select-names="colorNames"
|
||||||
:select-values="colorValues"
|
:select-values="colorValues"
|
||||||
@change="updateSecColor"
|
@change="updateSecColor"
|
||||||
|
|
|
@ -60,6 +60,10 @@ export default Vue.extend({
|
||||||
return this.$store.getters.getBackendPreference
|
return this.$store.getters.getBackendPreference
|
||||||
},
|
},
|
||||||
|
|
||||||
|
expandSideBar: function () {
|
||||||
|
return this.$store.getters.getExpandSideBar
|
||||||
|
},
|
||||||
|
|
||||||
forwardText: function () {
|
forwardText: function () {
|
||||||
return this.$t('Forward')
|
return this.$t('Forward')
|
||||||
},
|
},
|
||||||
|
@ -80,9 +84,12 @@ export default Vue.extend({
|
||||||
searchContainer.style.display = 'none'
|
searchContainer.style.display = 'none'
|
||||||
}
|
}
|
||||||
|
|
||||||
if (localStorage.getItem('expandSideBar') === 'true') {
|
// Store is not up-to-date when the component mounts, so we use timeout.
|
||||||
|
setTimeout(() => {
|
||||||
|
if (this.expandSideBar) {
|
||||||
this.toggleSideNav()
|
this.toggleSideNav()
|
||||||
}
|
}
|
||||||
|
}, 0)
|
||||||
|
|
||||||
window.addEventListener('resize', function (event) {
|
window.addEventListener('resize', function (event) {
|
||||||
const width = event.srcElement.innerWidth
|
const width = event.srcElement.innerWidth
|
||||||
|
|
|
@ -167,7 +167,9 @@ const state = {
|
||||||
barColor: false,
|
barColor: false,
|
||||||
checkForBlogPosts: true,
|
checkForBlogPosts: true,
|
||||||
checkForUpdates: true,
|
checkForUpdates: true,
|
||||||
// currentTheme: 'lightRed',
|
baseTheme: 'dark',
|
||||||
|
mainColor: 'Red',
|
||||||
|
secColor: 'Blue',
|
||||||
defaultCaptionSettings: '{}',
|
defaultCaptionSettings: '{}',
|
||||||
defaultInterval: 5,
|
defaultInterval: 5,
|
||||||
defaultPlayback: 1,
|
defaultPlayback: 1,
|
||||||
|
@ -185,6 +187,7 @@ const state = {
|
||||||
externalPlayerExecutable: '',
|
externalPlayerExecutable: '',
|
||||||
externalPlayerIgnoreWarnings: false,
|
externalPlayerIgnoreWarnings: false,
|
||||||
externalPlayerCustomArgs: '',
|
externalPlayerCustomArgs: '',
|
||||||
|
expandSideBar: false,
|
||||||
forceLocalBackendForLegacy: false,
|
forceLocalBackendForLegacy: false,
|
||||||
hideActiveSubscriptions: false,
|
hideActiveSubscriptions: false,
|
||||||
hideChannelSubscriptions: false,
|
hideChannelSubscriptions: false,
|
||||||
|
|
Loading…
Reference in New Issue