X-Git-Url: https://git.rapsys.eu/packbundle/blobdiff_plain/2ea87caa7cfe5a3248be9f47c514e8103dcdf730..3fdef4d1590ac30c760dbe80c62416a07f182aca:/Twig/PackExtension.php diff --git a/Twig/PackExtension.php b/Twig/PackExtension.php index c6e0d96..91a7a89 100644 --- a/Twig/PackExtension.php +++ b/Twig/PackExtension.php @@ -4,115 +4,53 @@ namespace Rapsys\PackBundle\Twig; use Symfony\Component\HttpKernel\Config\FileLocator; use Symfony\Component\DependencyInjection\ContainerInterface; -use Symfony\Component\Asset\Packages; -use Twig\TwigFilter; +use Symfony\Component\Asset\PackageInterface; +use Twig\Extension\AbstractExtension; -class PackExtension extends \Twig_Extension { - public function __construct(FileLocator $fileLocator, ContainerInterface $containerInterface, Packages $assetsPackages) { - //Set file locator - $this->fileLocator = $fileLocator; - //Set container interface - $this->containerInterface = $containerInterface; - //Set assets packages - $this->assetsPackages = $assetsPackages; +class PackExtension extends AbstractExtension { + //The config + private $config; + + //The output + private $output; + + //The filter + private $filters; - //Set default prefix - //XXX: require symfony 3.3 - $this->prefix = $this->containerInterface->getParameter('kernel.project_dir').'/web/'; + //The file locator + protected $locator; - //Set default coutput - $this->coutput = 'css/*.pack.css'; - //Set default joutput - $this->joutput = 'js/*.pack.js'; - //Set default ioutput - $this->ioutput = 'img/*.pack.jpg'; + //The assets package + protected $package; - //Set default cfilter - $this->cfilter = array('Rapsys\PackBundle\Twig\Filter\CPackFilter'); - //Set default jfilter - $this->jfilter = array('Rapsys\PackBundle\Twig\Filter\JPackFilter'); - //Set default ifilter - $this->ifilter = array('Rapsys\PackBundle\Twig\Filter\IPackFilter'); + public function __construct(FileLocator $locator, ContainerInterface $container, PackageInterface $package) { + //Set file locator + $this->locator = $locator; + + //Set assets packages + $this->package = $package; - //Load configuration - if ($containerInterface->hasParameter('rapsys_pack')) { - if ($parameters = $containerInterface->getParameter('rapsys_pack')) { - foreach($parameters as $k => $v) { - if (isset($this->$k) && !empty($v)) { - $this->$k = $v; - } - } + //Retrieve bundle config + if ($parameters = $container->getParameter($this->getAlias())) { + //Set config, output and filters arrays + foreach(['config', 'output', 'filters'] as $k) { + $this->$k = $parameters[$k]; } } - - //Fix prefix - $this->prefix = $this->fileLocator->locate($this->prefix); } public function getTokenParsers() { - return array( - new PackTokenParser($this->fileLocator, $this->containerInterface, $this->assetsPackages, $this->prefix, 'stylesheet', $this->coutput, $this->cfilter), - new PackTokenParser($this->fileLocator, $this->containerInterface, $this->assetsPackages, $this->prefix, 'javascript', $this->joutput, $this->jfilter), - new PackTokenParser($this->fileLocator, $this->containerInterface, $this->assetsPackages, $this->prefix, 'image', $this->ioutput, $this->ifilter) - ); + return [ + new PackTokenParser($this->locator, $this->package, $this->config, 'stylesheet', $this->output['css'], $this->filters['css']), + new PackTokenParser($this->locator, $this->package, $this->config, 'javascript', $this->output['js'], $this->filters['js']), + new PackTokenParser($this->locator, $this->package, $this->config, 'image', $this->output['img'], $this->filters['img']) + ]; } - public function getFilters() { - return array( - new TwigFilter( - 'bb2html', - function($text) { - $ctx = bbcode_create( - array( - '' => array('type' => BBCODE_TYPE_ROOT), - 'code' => array( - 'type' => BBCODE_TYPE_OPTARG, - 'open_tag' => '
',
-								'close_tag' => '
', - 'default_arg' => '{CONTENT}' - ), - 'ul' => array( - 'type' => BBCODE_TYPE_NOARG, - 'open_tag' => '', - 'childs' => 'li' - ), - 'li' => array( - 'type' => BBCODE_TYPE_NOARG, - 'open_tag' => '
  • ', - 'close_tag' => '
  • ', - 'parent' => 'ul', - 'childs' => 'url' - ), - 'url' => array( - 'type' => BBCODE_TYPE_OPTARG, - 'open_tag' => '', - 'close_tag' => '', - 'default_arg' => '{CONTENT}', - 'parent' => 'p,li' - ) - ) - ); - $text = nl2br(bbcode_parse($ctx, htmlspecialchars($text))); - if (preg_match_all('#\]*\>(.*?)\#s', $text, $matches) && !empty($matches[1])) { - foreach($matches[1] as $string) { - $text = str_replace($string, str_replace('
    ', '', $string), $text); - } - } - if (preg_match_all('#\]*\>(.*?)\#s', $text, $matches) && !empty($matches[1])) { - foreach($matches[1] as $string) { - $text = str_replace($string, str_replace('
    ', '', $string), $text); - } - } - $text = preg_replace( - array('#(
    (\r?\n?))*(
    (\r?\n?))*#', '#(
    (\r?\n?))*(
    (\r?\n?))*#', '#(
    (\r?\n?)){2,}#'), - array('

    \2\2

    ', '

    \2\2

    ', '

    \2

    '), - $text - ); - return $text; - }, - array('is_safe' => array('html')) - ) - ); + /** + * {@inheritdoc} + */ + public function getAlias() { + return 'rapsys_pack'; } }