diff options
| author | lambda <pleromagit@rogerbraun.net> | 2017-11-19 11:39:00 +0000 |
|---|---|---|
| committer | lambda <pleromagit@rogerbraun.net> | 2017-11-19 11:39:00 +0000 |
| commit | 9674320e0983fd35267115fe111711ba5e2ebec8 (patch) | |
| tree | 11410aed1012f1b98ecabb4cb2b7fb47ec52f273 /src/components/style_switcher/style_switcher.js | |
| parent | 86e685ac3452e42c3276e6ea2d3e7988abf2941a (diff) | |
| parent | a7500410ff17fbf742336d065a1dfedf87df587b (diff) | |
Merge branch 'feature/custom-theme' into 'develop'
Customizable themes
Closes #41
See merge request pleroma/pleroma-fe!165
Diffstat (limited to 'src/components/style_switcher/style_switcher.js')
| -rw-r--r-- | src/components/style_switcher/style_switcher.js | 60 |
1 files changed, 56 insertions, 4 deletions
diff --git a/src/components/style_switcher/style_switcher.js b/src/components/style_switcher/style_switcher.js index d265572d..b1359d13 100644 --- a/src/components/style_switcher/style_switcher.js +++ b/src/components/style_switcher/style_switcher.js @@ -2,18 +2,70 @@ export default { data () { return { availableStyles: [], - selected: this.$store.state.config.theme + selected: this.$store.state.config.theme, + bgColorLocal: '', + fgColorLocal: '', + textColorLocal: '', + linkColorLocal: '' } }, created () { const self = this - window.fetch('/static/css/themes.json') + + window.fetch('/static/styles.json') .then((data) => data.json()) - .then((themes) => { self.availableStyles = themes }) + .then((themes) => { + self.availableStyles = themes + }) + }, + mounted () { + const rgbstr2hex = (rgb) => { + if (rgb[0] === '#') { + return rgb + } + rgb = rgb.match(/\d+/g) + return `#${((Number(rgb[0]) << 16) + (Number(rgb[1]) << 8) + Number(rgb[2])).toString(16)}` + } + this.bgColorLocal = rgbstr2hex(this.$store.state.config.colors['base00']) + this.fgColorLocal = rgbstr2hex(this.$store.state.config.colors['base02']) + this.textColorLocal = rgbstr2hex(this.$store.state.config.colors['base05']) + this.linkColorLocal = rgbstr2hex(this.$store.state.config.colors['base08']) + }, + methods: { + setCustomTheme () { + if (!this.bgColorLocal && !this.fgColorLocal && !this.linkColorLocal) { + // reset to picked themes + } + const rgb = (hex) => { + const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex) + return result ? { + r: parseInt(result[1], 16), + g: parseInt(result[2], 16), + b: parseInt(result[3], 16) + } : null + } + const bgRgb = rgb(this.bgColorLocal) + const fgRgb = rgb(this.fgColorLocal) + const textRgb = rgb(this.textColorLocal) + const linkRgb = rgb(this.linkColorLocal) + if (bgRgb && fgRgb && linkRgb) { + this.$store.dispatch('setOption', { + name: 'customTheme', + value: { + fg: fgRgb, + bg: bgRgb, + text: textRgb, + link: linkRgb + }}) + } + } }, watch: { selected () { - this.$store.dispatch('setOption', { name: 'theme', value: this.selected }) + this.bgColorLocal = this.selected[1] + this.fgColorLocal = this.selected[2] + this.textColorLocal = this.selected[3] + this.linkColorLocal = this.selected[4] } } } |
