68 lines
2.1 KiB
PHP
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';
|
|
}
|
|
|
|
}
|