forked from AkkomaGang/akkoma-fe
raddi customization UI
This commit is contained in:
parent
65f82cf294
commit
b23bd076c3
6 changed files with 109 additions and 15 deletions
|
@ -121,7 +121,7 @@
|
||||||
width: 32px;
|
width: 32px;
|
||||||
height: 32px;
|
height: 32px;
|
||||||
border-radius: $fallback--avatarAltRadius;
|
border-radius: $fallback--avatarAltRadius;
|
||||||
border-radius: 50%;
|
border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
line-height: 0;
|
line-height: 0;
|
||||||
|
|
||||||
|
|
|
@ -365,7 +365,8 @@ status-text-container {
|
||||||
.status .avatar {
|
.status .avatar {
|
||||||
width: 48px;
|
width: 48px;
|
||||||
height: 48px;
|
height: 48px;
|
||||||
border-radius: 5px;
|
border-radius: $fallback--avatarRadius;
|
||||||
|
border-radius: var(--avatarRadius, $fallback--avatarRadius);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
||||||
img {
|
img {
|
||||||
|
|
|
@ -9,10 +9,16 @@ export default {
|
||||||
btnColorLocal: '',
|
btnColorLocal: '',
|
||||||
textColorLocal: '',
|
textColorLocal: '',
|
||||||
linkColorLocal: '',
|
linkColorLocal: '',
|
||||||
redColorLocal: '#ff0000',
|
redColorLocal: '',
|
||||||
blueColorLocal: '#0095ff',
|
blueColorLocal: '',
|
||||||
greenColorLocal: '#0fa00f',
|
greenColorLocal: '',
|
||||||
orangeColorLocal: '#E3FF00'
|
orangeColorLocal: '',
|
||||||
|
btnRadiusLocal: '',
|
||||||
|
panelRadiusLocal: '',
|
||||||
|
avatarRadiusLocal: '',
|
||||||
|
avatarAltRadiusLocal: '',
|
||||||
|
attachmentRadiusLocal: '',
|
||||||
|
tooltipRadiusLocal: ''
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created () {
|
created () {
|
||||||
|
@ -26,20 +32,28 @@ export default {
|
||||||
},
|
},
|
||||||
mounted () {
|
mounted () {
|
||||||
this.bgColorLocal = rgbstr2hex(this.$store.state.config.colors.bg)
|
this.bgColorLocal = rgbstr2hex(this.$store.state.config.colors.bg)
|
||||||
this.btnColorLocal = rgbstr2hex(this.$store.state.config.colors.lightBg)
|
this.btnColorLocal = rgbstr2hex(this.$store.state.config.colors.btn)
|
||||||
this.textColorLocal = rgbstr2hex(this.$store.state.config.colors.fg)
|
this.textColorLocal = rgbstr2hex(this.$store.state.config.colors.fg)
|
||||||
this.linkColorLocal = rgbstr2hex(this.$store.state.config.colors.link)
|
this.linkColorLocal = rgbstr2hex(this.$store.state.config.colors.link)
|
||||||
|
|
||||||
this.redColorLocal = rgbstr2hex(this.$store.state.config.colors.cRed || this.redColorLocal)
|
this.redColorLocal = rgbstr2hex(this.$store.state.config.colors.cRed)
|
||||||
this.blueColorLocal = rgbstr2hex(this.$store.state.config.colors.cBlue || this.blueColorLocal)
|
this.blueColorLocal = rgbstr2hex(this.$store.state.config.colors.cBlue)
|
||||||
this.greenColorLocal = rgbstr2hex(this.$store.state.config.colors.cGreen || this.greenColorLocal)
|
this.greenColorLocal = rgbstr2hex(this.$store.state.config.colors.cGreen)
|
||||||
this.orangeColorLocal = rgbstr2hex(this.$store.state.config.colors.cOrange || this.orangeColorLocal)
|
this.orangeColorLocal = rgbstr2hex(this.$store.state.config.colors.cOrange)
|
||||||
|
|
||||||
|
this.btnRadiusLocal = this.$store.state.config.radii.btnRadius || 4
|
||||||
|
this.panelRadiusLocal = this.$store.state.config.radii.panelRadius || 10
|
||||||
|
this.avatarRadiusLocal = this.$store.state.config.radii.avatarRadius || 5
|
||||||
|
this.avatarAltRadiusLocal = this.$store.state.config.radii.avatarAltRadius || 50
|
||||||
|
this.tooltipRadiusLocal = this.$store.state.config.radii.tooltipRadius || 2
|
||||||
|
this.attachmentRadiusLocal = this.$store.state.config.radii.attachmentRadius || 5
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
setCustomTheme () {
|
setCustomTheme () {
|
||||||
if (!this.bgColorLocal && !this.btnColorLocal && !this.linkColorLocal) {
|
if (!this.bgColorLocal && !this.btnColorLocal && !this.linkColorLocal) {
|
||||||
// reset to picked themes
|
// reset to picked themes
|
||||||
}
|
}
|
||||||
|
|
||||||
const rgb = (hex) => {
|
const rgb = (hex) => {
|
||||||
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex)
|
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex)
|
||||||
return result ? {
|
return result ? {
|
||||||
|
@ -69,7 +83,13 @@ export default {
|
||||||
cRed: redRgb,
|
cRed: redRgb,
|
||||||
cBlue: blueRgb,
|
cBlue: blueRgb,
|
||||||
cGreen: greenRgb,
|
cGreen: greenRgb,
|
||||||
cOrange: orangeRgb
|
cOrange: orangeRgb,
|
||||||
|
btnRadius: this.btnRadiusLocal,
|
||||||
|
panelRadius: this.panelRadiusLocal,
|
||||||
|
avatarRadius: this.avatarRadiusLocal,
|
||||||
|
avatarAltRadius: this.avatarAltRadiusLocal,
|
||||||
|
tooltipRadius: this.tooltipRadiusLocal,
|
||||||
|
attachmentRadius: this.attachmentRadiusLocal
|
||||||
}})
|
}})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,7 +51,46 @@
|
||||||
<input id="orangecolor-t" class="theme-color-in" type="text" v-model="orangeColorLocal">
|
<input id="orangecolor-t" class="theme-color-in" type="text" v-model="orangeColorLocal">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div class="radius-container">
|
||||||
|
<div class="radius-item">
|
||||||
|
<label for="btnradius" class="theme-radius-lb">{{$t('settings.btnRadius')}}</label>
|
||||||
|
<input id="btnradius" class="theme-radius-rn" type="range" v-model="btnRadiusLocal">
|
||||||
|
<input id="btnradius-t" class="theme-radius-in" type="text" v-model="btnRadiusLocal">
|
||||||
|
</div>
|
||||||
|
<div class="radius-item">
|
||||||
|
<label for="panelradius" class="theme-radius-lb">{{$t('settings.panelRadius')}}</label>
|
||||||
|
<input id="panelradius" class="theme-radius-rn" type="range" v-model="panelRadiusLocal">
|
||||||
|
<input id="panelradius-t" class="theme-radius-in" type="text" v-model="panelRadiusLocal">
|
||||||
|
</div>
|
||||||
|
<div class="radius-item">
|
||||||
|
<label for="avatarradius" class="theme-radius-lb">{{$t('settings.avatarRadius')}}</label>
|
||||||
|
<input id="avatarradius" class="theme-radius-rn" type="range" v-model="avatarRadiusLocal">
|
||||||
|
<input id="avatarradius-t" class="theme-radius-in" type="green" v-model="avatarRadiusLocal">
|
||||||
|
</div>
|
||||||
|
<div class="radius-item">
|
||||||
|
<label for="avataraltradius" class="theme-radius-lb">{{$t('settings.avatarAltRadius')}}</label>
|
||||||
|
<input id="avataraltradius" class="theme-radius-rn" type="range" v-model="avatarAltRadiusLocal">
|
||||||
|
<input id="avataraltradius-t" class="theme-radius-in" type="text" v-model="avatarAltRadiusLocal">
|
||||||
|
</div>
|
||||||
|
<div class="radius-item">
|
||||||
|
<label for="attachmentradius" class="theme-radius-lb">{{$t('settings.attachmentRadius')}}</label>
|
||||||
|
<input id="attachmentrradius" class="theme-radius-rn" type="range" v-model="attachmentRadiusLocal">
|
||||||
|
<input id="attachmentradius-t" class="theme-radius-in" type="text" v-model="attachmentRadiusLocal">
|
||||||
|
</div>
|
||||||
|
<div class="radius-item">
|
||||||
|
<label for="tooltipradius" class="theme-radius-lb">{{$t('settings.tooltipRadius')}}</label>
|
||||||
|
<input id="tooltipradius" class="theme-radius-rn" type="range" v-model="tooltipRadiusLocal">
|
||||||
|
<input id="tooltipradius-t" class="theme-radius-in" type="text" v-model="tooltipRadiusLocal">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div :style="{
|
||||||
|
'--btnRadius': btnRadiusLocal + 'px',
|
||||||
|
'--panelRadius': panelRadiusLocal + 'px',
|
||||||
|
'--avatarRadius': avatarRadiusLocal + 'px',
|
||||||
|
'--avatarAltRadius': avatarAltRadiusLocal + 'px',
|
||||||
|
'--tooltipRadius': tooltipRadiusLocal + 'px',
|
||||||
|
'--attachmentRadius': attachmentRadiusLocal + 'px'
|
||||||
|
}">
|
||||||
<div class="panel">
|
<div class="panel">
|
||||||
<div class="panel-heading" :style="{ 'background-color': btnColorLocal, 'color': textColorLocal }">Preview</div>
|
<div class="panel-heading" :style="{ 'background-color': btnColorLocal, 'color': textColorLocal }">Preview</div>
|
||||||
<div class="panel-body theme-preview-content" :style="{ 'background-color': bgColorLocal, 'color': textColorLocal }">
|
<div class="panel-body theme-preview-content" :style="{ 'background-color': bgColorLocal, 'color': textColorLocal }">
|
||||||
|
@ -88,6 +127,7 @@
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.radius-item,
|
||||||
.color-item {
|
.color-item {
|
||||||
min-width: 20em;
|
min-width: 20em;
|
||||||
display:flex;
|
display:flex;
|
||||||
|
@ -100,13 +140,16 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.theme-radius-rn,
|
||||||
.theme-color-cl {
|
.theme-color-cl {
|
||||||
border: 0;
|
border: 0;
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
background: transparent;
|
background: transparent;
|
||||||
|
color: var(--faint, $fallback--faint);
|
||||||
}
|
}
|
||||||
|
|
||||||
.theme-color-cl,
|
.theme-color-cl,
|
||||||
|
.theme-radius-in,
|
||||||
.theme-color-in {
|
.theme-color-in {
|
||||||
margin-left: 4px;
|
margin-left: 4px;
|
||||||
}
|
}
|
||||||
|
@ -114,12 +157,29 @@
|
||||||
.theme-color-in {
|
.theme-color-in {
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
min-width: 4em;
|
min-width: 4em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.theme-radius-in {
|
||||||
|
min-width: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.theme-radius-in,
|
||||||
|
.theme-color-in {
|
||||||
max-width: 7em;
|
max-width: 7em;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.theme-radius-lb,
|
||||||
.theme-color-lb {
|
.theme-color-lb {
|
||||||
flex: 2;
|
flex: 2;
|
||||||
min-width: 7em;
|
min-width: 7em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.theme-radius-lb{
|
||||||
|
max-width: 50em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.theme-color-lb {
|
||||||
max-width: 10em;
|
max-width: 10em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -134,7 +134,8 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.avatar {
|
.avatar {
|
||||||
border-radius: 5px;
|
border-radius: $fallback--avatarRadius;
|
||||||
|
border-radius: var(--avatarRadius, $fallback--avatarRadius);
|
||||||
flex: 1 0 100%;
|
flex: 1 0 100%;
|
||||||
width: 56px;
|
width: 56px;
|
||||||
height: 56px;
|
height: 56px;
|
||||||
|
|
|
@ -64,6 +64,7 @@ const setColors = (col, commit) => {
|
||||||
|
|
||||||
const isDark = (col.text.r + col.text.g + col.text.b) > (col.bg.r + col.bg.g + col.bg.b)
|
const isDark = (col.text.r + col.text.g + col.text.b) > (col.bg.r + col.bg.g + col.bg.b)
|
||||||
let colors = {}
|
let colors = {}
|
||||||
|
let radii = {}
|
||||||
|
|
||||||
let mod = 10
|
let mod = 10
|
||||||
if (isDark) {
|
if (isDark) {
|
||||||
|
@ -89,11 +90,22 @@ const setColors = (col, commit) => {
|
||||||
colors.cGreen = col.cGreen && rgb2hex(col.cGreen.r, col.cGreen.g, col.cGreen.b)
|
colors.cGreen = col.cGreen && rgb2hex(col.cGreen.r, col.cGreen.g, col.cGreen.b)
|
||||||
colors.cOrange = col.cOrange && rgb2hex(col.cOrange.r, col.cOrange.g, col.cOrange.b)
|
colors.cOrange = col.cOrange && rgb2hex(col.cOrange.r, col.cOrange.g, col.cOrange.b)
|
||||||
|
|
||||||
|
console.log('OMGGGG')
|
||||||
|
console.log(JSON.stringify(col))
|
||||||
|
radii.btnRadius = col.btnRadius
|
||||||
|
radii.panelRadius = col.panelRadius
|
||||||
|
radii.avatarRadius = col.avatarRadius
|
||||||
|
radii.avatarAltRadius = col.avatarAltRadius
|
||||||
|
radii.tooltipRadius = col.tooltipRadius
|
||||||
|
radii.attachmentRadius = col.attachmentRadius
|
||||||
|
|
||||||
styleSheet.toString()
|
styleSheet.toString()
|
||||||
styleSheet.insertRule(`body { ${Object.entries(colors).map(([k, v]) => `--${k}: ${v}`).join(';')} }`, 'index-max')
|
styleSheet.insertRule(`body { ${Object.entries(colors).filter(([k, v]) => v).map(([k, v]) => `--${k}: ${v}`).join(';')} }`, 'index-max')
|
||||||
|
styleSheet.insertRule(`body { ${Object.entries(radii).filter(([k, v]) => v).map(([k, v]) => `--${k}: ${v}px`).join(';')} }`, 'index-max')
|
||||||
body.style.display = 'initial'
|
body.style.display = 'initial'
|
||||||
|
|
||||||
commit('setOption', { name: 'colors', value: colors })
|
commit('setOption', { name: 'colors', value: colors })
|
||||||
|
commit('setOption', { name: 'radii', value: radii })
|
||||||
commit('setOption', { name: 'customTheme', value: col })
|
commit('setOption', { name: 'customTheme', value: col })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue