. // }}} /** * GNU social Twig extensions * * @package GNUsocial * @category Twig * * @author Ângelo D. Moura * @copyright 2020 Free Software Foundation, Inc http://www.fsf.org * @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later */ namespace App\Twig; use Twig\Environment; use Twig\Error\LoaderError; use Twig\Error\RuntimeError; use Twig\Error\SyntaxError; use Twig\Extension\AbstractExtension; use Twig\TwigFunction; class IconsExtension extends AbstractExtension { public function getFunctions() { return [ new TwigFunction('icon', [$this, 'embedSvgIcon'], ['needs_environment' => true] ), ]; } /** * Renders the Svg Icon template and returns it. * * @param Environment $twig * @param string $icon_name * @param string $icon_css_class * * @return string * * @author Ângelo D. Moura */ public function embedSvgIcon(Environment $twig, string $icon_name = '', string $icon_css_class = '') { try { return $twig->render('@public_path/assets/icons/' . $icon_name . '.svg.twig', ['iconClass' => $icon_css_class]); } catch (LoaderError $e) { //return an empty string (a missing icon is not that important of an error) return ''; } catch (RuntimeError $e) { //return an empty string (a missing icon is not that important of an error) return ''; } catch (SyntaxError $e) { //return an empty string (a missing icon is not that important of an error) return ''; } } }