diff --git a/modules/backend/models/BrandSettings.php b/modules/backend/models/BrandSettings.php
index dbab84a09..ca9895c15 100644
--- a/modules/backend/models/BrandSettings.php
+++ b/modules/backend/models/BrandSettings.php
@@ -97,19 +97,17 @@ class BrandSettings extends Model
{
$parser = new Less_Parser(['compress' => true]);
- $svgHead = 'data:image/svg+xml;charset=UTF-8,';
- $svgOpen = static::cssEscape('');
+ $primaryColorLight = self::get('primary_color_light', self::PRIMARY_LIGHT);
+ $primaryColorDark = self::get('primary_color_dark', self::PRIMARY_DARK);
+ $secondaryColorLight = self::get('secondary_color_light', self::SECONDARY_LIGHT);
+ $secondaryColorDark = self::get('secondary_color_dark', self::SECONDARY_DARK);
$vars = [
'logo-image' => "'".self::getLogo()."'",
- 'primary-color-light' => self::get('primary_color_light', self::PRIMARY_LIGHT),
- 'primary-color-dark' => self::get('primary_color_dark', self::PRIMARY_DARK),
- 'secondary-color-light' => self::get('secondary_color_light', self::SECONDARY_LIGHT),
- 'secondary-color-dark' => self::get('secondary_color_dark', self::SECONDARY_DARK),
- 'svg-head' => "'".$svgHead."'",
- 'svg-open' => "'".$svgOpen."'",
- 'svg-close' => "'".$svgClose."'"
+ 'primary-color-light' => $primaryColorLight,
+ 'primary-color-dark' => $primaryColorDark,
+ 'secondary-color-light' => $secondaryColorLight,
+ 'secondary-color-dark' => $secondaryColorDark,
];
$parser->ModifyVars($vars);
@@ -120,18 +118,66 @@ class BrandSettings extends Model
);
$css = $parser->getCss();
+ $css .= self::makeTabSvg($primaryColorLight, $primaryColorDark);
return $css;
}
/**
- * Escape for RFC 3986, generally good for CSS
- * @param string $string
+ * The PHP LESS parser dies trying to dynamically generate
+ * the tab SVG CSS, so process it manually instead.
+ * @param string $light
+ * @param string $dark
+ * @return string
*/
- protected static function cssEscape($string)
+ protected static function makeTabSvg($light, $dark)
{
- $entities = array('%21', '%2A', '%27', '%28', '%29', '%3B', '%3A', '%40', '%26', '%3D', '%2B', '%24', '%2C', '%2F', '%3F', '%25', '%23', '%5B', '%5D');
- $replacements = array('!', '*', "'", "(", ")", ";", ":", "@", "&", "=", "+", "$", ",", "/", "?", "%", "#", "[", "]");
- return str_replace($entities, $replacements, rawurlencode($string));
+ /*
+ * Desaturate and darken the dark color
+ */
+ $dark = substr($dark, 1); // Remove the #
+ $func = new \Less_Functions(null);
+ $value = new \Less_Tree_Dimension('14.5', '%');
+ $color = new \Less_Tree_Color($dark);
+ $color = $func->desaturate($color, $value);
+ $value = new \Less_Tree_Dimension('5', '%');
+ $black = new \Less_Tree_Color('000000');
+ $color = $func->mix($black, $color, $value);
+ $dark = $color->toRGB();
+
+ /*
+ * SVG Definition
+ */
+ $svg = '';
+ $svg .= '';
+
+ /*
+ * Escape CSS
+ */
+ $revert = ['%21'=>'!', '%2A'=>'*', '%27'=>"'",'%3F'=>'?','%26'=>'&','%2C'=>',','%2F'=>'/','%40'=>'@','%2B'=>'+','%24'=>'$'];
+ $svg = strtr(rawurlencode($svg), $revert);
+
+ /*
+ * Add header
+ */
+ $svg = 'data:image/svg+xml;charset=UTF-8,' . $svg;
+
+ /*
+ * Compile CSS
+ */
+ $css = '';
+ $css .= '.fancy-layout .control-tabs.master > div > div.tabs-container > ul.nav-tabs > li a > span.title:before,';
+ $css .= '.fancy-layout.control-tabs.master > div > div.tabs-container > ul.nav-tabs > li a > span.title:before,';
+ $css .= '.fancy-layout .control-tabs.master > div > div.tabs-container > ul.nav-tabs > li a > span.title:after,';
+ $css .= '.fancy-layout.control-tabs.master > div > div.tabs-container > ul.nav-tabs > li a > span.title:after {';
+ $css .= "background-image: url('".$svg."')}";
+
+ return $css;
}
}
diff --git a/modules/backend/models/brandsettings/custom.less b/modules/backend/models/brandsettings/custom.less
index 69fb79f06..b7f15c7d6 100644
--- a/modules/backend/models/brandsettings/custom.less
+++ b/modules/backend/models/brandsettings/custom.less
@@ -114,12 +114,6 @@ table.table.data {
@color-fancy-master-tabs-bg: @primary-color-dark;
@color-fancy-form-inactive-tab: mix(black, desaturate(@primary-color-dark, 14.5%), 5%);
-@tab-svg-part1: escape('');
-@tab-svg-part2: escape('');
-@tab-svg-part3: escape('');
-@tab-svg-part4: escape('');
-@tab-svg-part5: escape('');
-
.fancy-layout {
.control-tabs, &.control-tabs {
&.master {
@@ -150,9 +144,14 @@ table.table.data {
> div > div.tabs-container > ul.nav-tabs > li {
a > span.title {
background-color: @color-fancy-form-inactive-tab;
- &:before, &:after {
- background-image: url(~'@{svg-head}@{svg-open}@{tab-svg-part1}@{tab-svg-part2}@{tab-svg-part3}@{tab-svg-part4}@{tab-svg-part5}@{svg-close}');
- }
+
+ //
+ // Disabled: See BrandSettings::makeTabSvg()
+ //
+ //&:before, &:after {
+ // background-image: url(~'@{tab-svg}');
+ //}
+
}
&.active {
a > span.title {
diff --git a/modules/backend/models/brandsettings/fields.yaml b/modules/backend/models/brandsettings/fields.yaml
index 4357de9c4..02b91d95f 100644
--- a/modules/backend/models/brandsettings/fields.yaml
+++ b/modules/backend/models/brandsettings/fields.yaml
@@ -11,7 +11,7 @@ tabs:
commentAbove: backend::lang.branding.logo_description
mode: image
imageHeight: 170
- imageWidth: 170
+ imageWidth: 340
tab: backend::lang.branding.brand
app_name: