* LT-281: Users shall be able to switch between themes * Avoiding compatibility issues * Typo fixing
75 lines
2.3 KiB
Stylus
75 lines
2.3 KiB
Stylus
$themes = {}
|
|
$defaultTheme = 'tide'
|
|
|
|
// Import the theme variables
|
|
@import "./themes/theme-tide.styl"
|
|
@import "./themes/theme-tigerlily.styl"
|
|
@import "./themes/theme-crickets.styl"
|
|
@import "./themes/theme-honeycomb.styl"
|
|
@import "./themes/theme-mint.styl"
|
|
@import "./themes/theme-overcast.styl"
|
|
@import "./themes/theme-quartz.styl"
|
|
|
|
/*
|
|
* Process each theme variable in the given value, splitting it by space
|
|
*/
|
|
parseSpaceVars($theme, $value, $alpha)
|
|
// Split values by space
|
|
$valueSplit = split(' ', $value)
|
|
|
|
// Create an empty list
|
|
$list = ''
|
|
pop($list)
|
|
|
|
// Iterate over split values
|
|
for $property in $valueSplit
|
|
// Try to get the theme with current property key
|
|
$val = $theme[$property]
|
|
if ($val)
|
|
if($val is a 'color')
|
|
// Apply given alpha if it's a color
|
|
$val = alpha($val, $alpha)
|
|
// Push the processed theme variable to the list
|
|
push($list, $val)
|
|
else
|
|
// Push the property itself if not found in theme variables
|
|
push($list, $property)
|
|
|
|
// Merge the resulting processed list by joining values back with space
|
|
join(' ', $list)
|
|
|
|
/*
|
|
* Process each theme variable in the given value, splitting it by comma
|
|
*/
|
|
parseCommaVars($theme, $value, $alpha)
|
|
// Split values by comma
|
|
$valueSplit = split(',', $value)
|
|
|
|
// Create an empty list
|
|
$list = ''
|
|
pop($list)
|
|
|
|
// Iterate over split values
|
|
for $sentence in $valueSplit
|
|
// Procces the values splitting by space
|
|
push($list, parseSpaceVars($theme, $sentence, $alpha))
|
|
|
|
// Merge the resulting processed list by joining values back with comma
|
|
unquote(join(',', $list))
|
|
|
|
/*
|
|
* Return a processed theme variable or color with alpha
|
|
*/
|
|
theme($property, $value, $alpha=1)
|
|
|
|
// Crete the selector for default theme
|
|
/ {selector()}
|
|
{$property}: parseCommaVars($themes[$defaultTheme], $value, $alpha)
|
|
|
|
// Create the selector for each registered theme
|
|
for $themeName, $theme in $themes
|
|
for $selectorPiece in split(',', selector())
|
|
// prefix the selector with the body.theme-{themeName} selector
|
|
/ body.theme-{$themeName} {$selectorPiece}
|
|
{$property}: parseCommaVars($theme, $value, $alpha)
|