4in1_ws_web/lib/TwigAddons/MyExtension.php

106 lines
3.9 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])
// new TwigFilter('format_number', function($number, array $args = []) {
// array_unshift($args, $number);
// return call_user_func_array('formatNumber', $args);
// }, ['is_variadic' => true]),
// new TwigFilter('short_number', function($number, array $args = []) {
// array_unshift($args, $number);
// return call_user_func_array('shortNumber', $args);
// }, ['is_variadic']),
//
// new TwigFilter('format_time', function($ts, array $args = []) {
// array_unshift($args, $ts);
// return call_user_func_array('formatTime', $args);
// }, ['is_variadic' => true]),
//
// new TwigFilter('format_duration', function($seconds, array $args = []) {
// array_unshift($args, $seconds);
// return call_user_func_array('formatDuration', $args);
// }, ['is_variadic' => true]),
//
// new TwigFilter('format_size', function ($number, array $args = []) {
// array_unshift($args, $number);
// return call_user_func_array('sizeString', $args);
// }, ['is_variadic' => true]),
// new TwigFilter('hl', function($text, array $args = []) {
// $keywords = explode(' ', $args[0]);
// $keywords = array_filter($keywords, function($item) {
// return trim($item) != '';
// });
//
// return highlightKeyword($text, $keywords);
// }, ['is_variadic' => true, 'is_safe' => ['html']]),
// new TwigFilter('hex', function($number, array $args = []) {
// return '0x'.dechex((int)$number);
// })
);
}
public function getTokenParsers() {
return [new JsTagTokenParser()];
}
public function getName() {
return 'lang';
}
}