diff --git a/modules/backend/models/BrandSettings.php b/modules/backend/models/BrandSettings.php
index facf08fbb..817e8b30c 100644
--- a/modules/backend/models/BrandSettings.php
+++ b/modules/backend/models/BrandSettings.php
@@ -90,13 +90,22 @@ class BrandSettings extends Model
{
$parser = new Less_Parser(['compress' => true]);
- $parser->ModifyVars([
+ $svgHead = 'data:image/svg+xml;charset=UTF-8,';
+ $svgOpen = static::cssEscape('');
+
+ $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."'"
+ ];
+
+ $parser->ModifyVars($vars);
$parser->parse(
File::get(base_path().'/modules/backend/models/brandsettings/custom.less')
@@ -107,4 +116,15 @@ class BrandSettings extends Model
return $css;
}
+
+ /**
+ * Escape for RFC 3986, generally good for CSS
+ * @param string $string
+ */
+ protected static function cssEscape($string)
+ {
+ $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));
+ }
}
diff --git a/modules/backend/models/brandsettings/custom.less b/modules/backend/models/brandsettings/custom.less
index 202044736..9740f336b 100644
--- a/modules/backend/models/brandsettings/custom.less
+++ b/modules/backend/models/brandsettings/custom.less
@@ -63,14 +63,11 @@ body.outer .layout > .layout-row.layout-head {
@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: 'data:image/svg+xml;charset=UTF-8,';
-@tab-svg-part2: escape('');
+@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 {
@@ -93,7 +90,7 @@ body.outer .layout > .layout-row.layout-head {
a > span.title {
background-color: @color-fancy-form-inactive-tab;
&:before, &:after {
- background-image: url(~'@{tab-svg-part1}@{tab-svg-part2}@{tab-svg-part3}@{tab-svg-part4}@{tab-svg-part5}@{tab-svg-part6}@{tab-svg-part7}@{tab-svg-part8}');
+ background-image: url(~'@{svg-head}@{svg-open}@{tab-svg-part1}@{tab-svg-part2}@{tab-svg-part3}@{tab-svg-part4}@{tab-svg-part5}@{svg-close}');
}
}
&.active {