From 3ff2fd1855455030e459e892cdca5064dcf7647e Mon Sep 17 00:00:00 2001 From: joneff Date: Fri, 16 Jul 2021 15:17:08 +0300 Subject: [PATCH] feat(functions): add escape-svg and str-replace functions --- .../default/scss/core/functions/_index.scss | 1 + .../default/scss/core/functions/_misc.scss | 34 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 packages/default/scss/core/functions/_misc.scss diff --git a/packages/default/scss/core/functions/_index.scss b/packages/default/scss/core/functions/_index.scss index b0808fae8b3..58db5d2150e 100644 --- a/packages/default/scss/core/functions/_index.scss +++ b/packages/default/scss/core/functions/_index.scss @@ -1,3 +1,4 @@ @import "_math.scss"; @import "_config-maps.scss"; @import "_colors.scss"; +@import "_misc.scss"; diff --git a/packages/default/scss/core/functions/_misc.scss b/packages/default/scss/core/functions/_misc.scss new file mode 100644 index 00000000000..e274c34590e --- /dev/null +++ b/packages/default/scss/core/functions/_misc.scss @@ -0,0 +1,34 @@ +$svg-escaped-characters: ( + ("<", "%3c"), + (">", "%3e"), + ("#", "%23"), + ("(", "%28"), + (")", "%29") +) !default; + +// See https://www.sassmeister.com/gist/1b4f2da5527830088e4d +@function str-replace($string, $search, $replace: "") { + $index: str-index($string, $search); + + @if $index { + @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace); + } + + @return $string; +} + +// See https://codepen.io/kevinweber/pen/dXWoRw +@function escape-svg($string) { + @if str-index($string, "data:image/svg+xml") { + @each $char, $encoded in $svg-escaped-characters { + // Do not escape the url brackets + @if str-index($string, "url(") == 1 { + $string: url("#{str-replace(str-slice($string, 6, -3), $char, $encoded)}"); + } @else { + $string: str-replace($string, $char, $encoded); + } + } + } + + @return $string; +}