From 1a00c5619f11c5faecd384b011e037a8ed5fde46 Mon Sep 17 00:00:00 2001 From: Rigel Kent Date: Thu, 6 Sep 2018 12:00:53 +0200 Subject: refactor theme toggle into a service --- client/src/app/core/theme/index.ts | 1 + client/src/app/core/theme/theme.service.ts | 31 ++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 client/src/app/core/theme/index.ts create mode 100644 client/src/app/core/theme/theme.service.ts (limited to 'client/src/app/core/theme') diff --git a/client/src/app/core/theme/index.ts b/client/src/app/core/theme/index.ts new file mode 100644 index 000000000..713f4747b --- /dev/null +++ b/client/src/app/core/theme/index.ts @@ -0,0 +1 @@ +export * from './theme.service' diff --git a/client/src/app/core/theme/theme.service.ts b/client/src/app/core/theme/theme.service.ts new file mode 100644 index 000000000..d8e02e2e5 --- /dev/null +++ b/client/src/app/core/theme/theme.service.ts @@ -0,0 +1,31 @@ +import { Injectable } from '@angular/core' + +@Injectable() +export class ThemeService { + private theme = document.querySelector('body') + private previousTheme = {} + + constructor () { + // initialise the alternative theme with dark theme colors + this.previousTheme['mainBackgroundColor'] = '#111111' + this.previousTheme['mainForegroundColor'] = '#fff' + this.previousTheme['submenuColor'] = 'rgb(32,32,32)' + this.previousTheme['inputColor'] = 'gray' + this.previousTheme['inputPlaceholderColor'] = '#fff' + } + + toggleDarkTheme () { + // switch properties + this.switchProperty('mainBackgroundColor') + this.switchProperty('mainForegroundColor') + this.switchProperty('submenuColor') + this.switchProperty('inputColor') + this.switchProperty('inputPlaceholderColor') + } + + private switchProperty (property, newValue?) { + const propertyOldvalue = window.getComputedStyle(this.theme).getPropertyValue('--' + property) + this.theme.style.setProperty('--' + property, (newValue) ? newValue : this.previousTheme[property]) + this.previousTheme[property] = propertyOldvalue + } +} -- cgit v1.2.3