X-Git-Url: https://git.rapsys.eu/.gitweb.cgi/packbundle/blobdiff_plain/bb11546ae005add2bdf1865f764b46ee8fa234e6..06e25924552ccb7dd05880ed38aecd86bbda49e8:/Twig/PackExtension.php?ds=inline

diff --git a/Twig/PackExtension.php b/Twig/PackExtension.php
index 5ce4ed6..91a7a89 100644
--- a/Twig/PackExtension.php
+++ b/Twig/PackExtension.php
@@ -4,114 +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
-		$this->prefix = '@RapsysPackBundle/Resources/public/';
+	//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('CPackFilter');
-		//Set default jfilter
-		$this->jfilter = array('JPackFilter');
-		//Set default ifilter
-		$this->ifilter = array('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' => '<pre class="{PARAM}">',
-								'close_tag' => '</pre>',
-								'default_arg' => '{CONTENT}'
-							),
-							'ul' => array(
-								'type' => BBCODE_TYPE_NOARG,
-								'open_tag' => '<ul>',
-								'close_tag' => '</ul>',
-								'childs' => 'li'
-							),
-							'li' => array(
-								'type' => BBCODE_TYPE_NOARG,
-								'open_tag' => '<li>',
-								'close_tag' => '</li>',
-								'parent' => 'ul',
-								'childs' => 'url'
-							),
-							'url' => array(
-								'type' => BBCODE_TYPE_OPTARG,
-								'open_tag' => '<a href="{PARAM}">',
-								'close_tag' => '</a>',
-								'default_arg' => '{CONTENT}',
-								'parent' => 'p,li'
-							)
-						)
-					);
-					$text = nl2br(bbcode_parse($ctx, htmlspecialchars($text)));
-					if (preg_match_all('#\<pre[^>]*\>(.*?)\</pre\>#s', $text, $matches) && !empty($matches[1])) {
-						foreach($matches[1] as $string) {
-							$text = str_replace($string, str_replace('<br />', '', $string), $text);
-						}
-					}
-					if (preg_match_all('#\<ul[^>]*\>(.*?)\</ul\>#s', $text, $matches) && !empty($matches[1])) {
-						foreach($matches[1] as $string) {
-							$text = str_replace($string, str_replace('<br />', '', $string), $text);
-						}
-					}
-					$text = preg_replace(
-						array('#(<br />(\r?\n?))*<pre#s', '#</pre>(<br />(\r?\n?))*#', '#(<br />(\r?\n?))*<ul#s', '#</ul>(<br />(\r?\n?))*#', '#(<br />(\r?\n?)){2,}#'),
-						array('</p>\2<pre', '</pre>\2<p>', '</p>\2<ul', '</ul>\2<p>', '</p>\2<p>'),
-						$text
-					);
-					return $text;
-				},
-				array('is_safe' => array('html'))
-			)
-		);
+	/**
+	 * {@inheritdoc}
+	 */
+	public function getAlias() {
+		return 'rapsys_pack';
 	}
 }