4in1_ws_web/lib/TwigAddons/MyExtension.php
2025-04-13 22:00:39 +03:00

68 lines
2.1 KiB
PHP

<?php
namespace TwigAddons;
use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;
use Twig\TwigFunction;
class MyExtension extends AbstractExtension {
public function getFunctions() {
return [
new TwigFunction('svg', fn($name) => \skin::getInstance()->getSVG($name),
['is_safe' => ['html']]),
new TwigFunction('svgInPlace', fn($name) => \skin::getInstance()->getSVG($name, in_place: true),
['is_safe' => ['html']]),
new TwigFunction('svgPreload', function(...$icons) {
$skin = \skin::getInstance();
foreach ($icons as $icon)
$skin->preloadSVG($icon);
return null;
}),
new TwigFunction('bc', fn(...$args) => \skin::getInstance()->renderBreadCrumbs(...$args),
['is_safe' => ['html']]),
new TwigFunction('pageNav', fn(...$args) => \skin::getInstance()->renderPageNav(...$args),
['is_safe' => ['html']]),
new TwigFunction('csrf', fn($value) => \request_handler::getCSRF($value))
];
}
public function getFilters() {
return array(
new TwigFilter('lang', function($key, array $args = []) {
global $__lang;
array_walk($args, function(&$item, $key) {
$item = htmlescape($item);
});
array_unshift($args, $key);
return call_user_func_array([$__lang, 'get'], $args);
}, ['is_variadic' => true]),
new TwigFilter('hl', function($s, $keywords) {
return highlightSubstring($s, $keywords);
}),
new TwigFilter('plural', function($text, array $args = []) {
global $__lang;
array_unshift($args, $text);
return call_user_func_array([$__lang, 'num'], $args);
}, ['is_variadic' => true]),
);
}
public function getTokenParsers() {
return [new JsTagTokenParser()];
}
public function getName() {
return 'lang';
}
}