* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Rapsys\PackBundle\Extension; use Symfony\Component\Asset\PackageInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpKernel\Config\FileLocator; use Twig\Extension\AbstractExtension; use Rapsys\PackBundle\Parser\TokenParser; use Rapsys\PackBundle\RapsysPackBundle; use Rapsys\PackBundle\Util\SluggerUtil; /** * {@inheritdoc} */ class PackExtension extends AbstractExtension { //The config private $config; //The output private $output; //The filter private $filters; //The file locator protected $locator; //The slugger instance protected $slugger; //The assets package protected $package; /** * @link https://twig.symfony.com/doc/2.x/advanced.html * * {@inheritdoc} */ public function __construct(FileLocator $locator, ContainerInterface $container, PackageInterface $package, SluggerUtil $slugger) { //Set file locator $this->locator = $locator; //Set slugger $this->slugger = $slugger; //Set assets packages $this->package = $package; //Retrieve bundle config if ($parameters = $container->getParameter(self::getAlias())) { //Set config, output and filters arrays foreach(['config', 'output', 'filters'] as $k) { $this->$k = $parameters[$k]; } } } /** * Returns a list of filters to add to the existing list. * * @return \Twig\TwigFilter[] */ public function getTokenParsers(): array { return [ new TokenParser($this->locator, $this->package, $this->config, 'stylesheet', $this->output['css'], $this->filters['css']), new TokenParser($this->locator, $this->package, $this->config, 'javascript', $this->output['js'], $this->filters['js']), new TokenParser($this->locator, $this->package, $this->config, 'image', $this->output['img'], $this->filters['img']) ]; } /** * Returns a list of filters to add to the existing list. * * @return \Twig\TwigFilter[] */ public function getFilters(): array { return [ new \Twig\TwigFilter('hash', [$this->slugger, 'hash']), new \Twig\TwigFilter('unshort', [$this->slugger, 'unshort']), new \Twig\TwigFilter('short', [$this->slugger, 'short']) ]; } /** * {@inheritdoc} */ public function getAlias(): string { return RapsysPackBundle::getAlias(); } }