2021-11-19 15:45:10 +00:00
|
|
|
import type { ChatType } from './types'
|
|
|
|
|
|
|
|
type AutoColorValue = string
|
|
|
|
|
|
|
|
interface AutoColors {
|
|
|
|
mainForeground: AutoColorValue
|
|
|
|
mainBackground: AutoColorValue
|
|
|
|
greyForeground: AutoColorValue
|
|
|
|
greyBackground: AutoColorValue
|
|
|
|
menuForeground: AutoColorValue
|
|
|
|
menuBackground: AutoColorValue
|
|
|
|
inputForeground: AutoColorValue
|
|
|
|
inputBackground: AutoColorValue
|
|
|
|
buttonForeground: AutoColorValue
|
|
|
|
buttonBackground: AutoColorValue
|
|
|
|
link: AutoColorValue
|
|
|
|
linkHover: AutoColorValue
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param chatType value of the settings 'chat-type'
|
|
|
|
* @param theme value of the settings 'converse-theme'
|
|
|
|
* @returns true if the theme can use autocolors
|
|
|
|
*/
|
|
|
|
function isAutoColorsAvailable (chatType: ChatType, theme: string): boolean {
|
|
|
|
if (chatType !== 'builtin-prosody' && chatType !== 'builtin-converse') {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
return theme === 'peertube' // currently the only theme that can handle autocolors.
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param autocolors
|
|
|
|
* @returns true if ok. Else a string array with invalid values.
|
|
|
|
*/
|
|
|
|
function areAutoColorsValid (autocolors: AutoColors): true | string[] {
|
|
|
|
const errors: string[] = []
|
|
|
|
for (const k in autocolors) {
|
|
|
|
const color = autocolors[k as keyof AutoColors]
|
|
|
|
// FIXME: there are missing cases. For now there are only basic values formats.
|
|
|
|
if (
|
|
|
|
!/^rgb\(\d{1,3},\s*\d{1,3},\s*\d{1,3}\)$/.test(color) &&
|
|
|
|
!/^rgba\(\d{1,3},\s*\d{1,3},\s*\d{1,3},\s*(1|0|0?.\d+)\)$/.test(color) &&
|
2021-11-22 12:30:55 +00:00
|
|
|
!/^#[0-9a-fA-F]{3,6}$/.test(color) &&
|
|
|
|
!/^[a-z]+$/
|
2021-11-19 15:45:10 +00:00
|
|
|
) {
|
|
|
|
errors.push(color)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (errors.length) {
|
|
|
|
return errors
|
|
|
|
}
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
export {
|
|
|
|
AutoColors,
|
|
|
|
isAutoColorsAvailable,
|
|
|
|
areAutoColorsValid
|
|
|
|
}
|