From 39310cd4af71ba30e4d1fee3d1c8b2015507280b Mon Sep 17 00:00:00 2001 From: Andy Miller Date: Thu, 10 Sep 2020 15:43:47 -0600 Subject: [PATCH] Added svg_image twig function --- system/src/Grav/Common/Twig/TwigExtension.php | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/system/src/Grav/Common/Twig/TwigExtension.php b/system/src/Grav/Common/Twig/TwigExtension.php index 58b1d6d68..b1929adac 100644 --- a/system/src/Grav/Common/Twig/TwigExtension.php +++ b/system/src/Grav/Common/Twig/TwigExtension.php @@ -174,6 +174,7 @@ class TwigExtension extends \Twig_Extension implements \Twig_Extension_GlobalsIn new \Twig_SimpleFunction('nicefilesize', [$this, 'niceFilesizeFunc']), new \Twig_SimpleFunction('nicetime', [$this, 'nicetimeFunc']), new \Twig_SimpleFunction('cron', [$this, 'cronFunc']), + new \Twig_SimpleFunction('svg_image', [$this, 'svgImageFunction']), new \Twig_SimpleFunction('xss', [$this, 'xssFunc']), @@ -1442,4 +1443,41 @@ class TwigExtension extends \Twig_Extension implements \Twig_Extension_GlobalsIn break; } } + + /** + * Returns the content of an SVG image and adds extra classes as needed + * + * @param $path + * @param $classes + * @return string|string[]|null + */ + public static function svgImageFunction($path, $classes) + { + $path = Utils::fullPath($path); + + if (file_exists($path)) { + $svg = file_get_contents($path); + $classes = " inline-block $classes"; + $matched = false; + + //Look for existing class + $svg = preg_replace_callback('/^/', function($matches) use ($classes, &$matched) { + if (isset($matches[2])) { + $new_classes = $matches[2] . $classes; + $matched = true; + return str_replace($matches[1], "class=\"$new_classes\"", $matches[0]); + } + }, $svg + ); + + // no matches found just add the class + if (!$matched) { + $classes = trim($classes); + $svg = str_replace('