diff --git a/src/Symfony/Bundle/AsseticBundle/Resources/config/filters/cssimport.xml b/src/Symfony/Bundle/AsseticBundle/Resources/config/filters/cssimport.xml new file mode 100644 index 0000000000..08440cd956 --- /dev/null +++ b/src/Symfony/Bundle/AsseticBundle/Resources/config/filters/cssimport.xml @@ -0,0 +1,16 @@ + + + + + + Assetic\Filter\CssImportFilter + + + + + + + + diff --git a/src/Symfony/Bundle/AsseticBundle/Resources/config/filters/packager.xml b/src/Symfony/Bundle/AsseticBundle/Resources/config/filters/packager.xml new file mode 100644 index 0000000000..6446116854 --- /dev/null +++ b/src/Symfony/Bundle/AsseticBundle/Resources/config/filters/packager.xml @@ -0,0 +1,18 @@ + + + + + + Assetic\Filter\PackagerFilter + + + + + + + %assetic.filter.packager.packages% + + + diff --git a/src/Symfony/Bundle/AsseticBundle/Resources/config/templating_php.xml b/src/Symfony/Bundle/AsseticBundle/Resources/config/templating_php.xml index 421a91bfdb..2b60a044eb 100644 --- a/src/Symfony/Bundle/AsseticBundle/Resources/config/templating_php.xml +++ b/src/Symfony/Bundle/AsseticBundle/Resources/config/templating_php.xml @@ -15,14 +15,12 @@ - %assetic.debug% - %assetic.debug% diff --git a/src/Symfony/Bundle/AsseticBundle/Routing/AsseticLoader.php b/src/Symfony/Bundle/AsseticBundle/Routing/AsseticLoader.php index a18e1be7d8..b85f6152c2 100644 --- a/src/Symfony/Bundle/AsseticBundle/Routing/AsseticLoader.php +++ b/src/Symfony/Bundle/AsseticBundle/Routing/AsseticLoader.php @@ -67,8 +67,11 @@ class AsseticLoader extends Loader $this->loadRouteForAsset($routes, $asset, $name); + $debug = isset($formula[2]['debug']) ? $formula[2]['debug'] : $this->am->isDebug(); + $combine = isset($formula[2]['combine']) ? $formula[2]['combine'] : !$debug; + // add a route for each "leaf" in debug mode - if (isset($formula[2]['debug']) ? $formula[2]['debug'] : $this->am->isDebug()) { + if (!$combine) { $i = 0; foreach ($asset as $leaf) { $this->loadRouteForAsset($routes, $leaf, $name, $i++); diff --git a/src/Symfony/Bundle/AsseticBundle/Templating/AsseticHelper.php b/src/Symfony/Bundle/AsseticBundle/Templating/AsseticHelper.php index e41caa93d4..49442095a9 100644 --- a/src/Symfony/Bundle/AsseticBundle/Templating/AsseticHelper.php +++ b/src/Symfony/Bundle/AsseticBundle/Templating/AsseticHelper.php @@ -13,6 +13,7 @@ namespace Symfony\Bundle\AsseticBundle\Templating; use Assetic\Asset\AssetInterface; use Assetic\Factory\AssetFactory; +use Assetic\Util\TraversableString; use Symfony\Component\Templating\Helper\Helper; /** @@ -23,18 +24,15 @@ use Symfony\Component\Templating\Helper\Helper; abstract class AsseticHelper extends Helper { protected $factory; - protected $debug; /** * Constructor. * * @param AssetFactory $factory The asset factory - * @param Boolean $debug The debug mode */ - public function __construct(AssetFactory $factory, $debug = false) + public function __construct(AssetFactory $factory) { $this->factory = $factory; - $this->debug = $debug; } /** @@ -43,7 +41,7 @@ abstract class AsseticHelper extends Helper public function javascripts($inputs = array(), $filters = array(), array $options = array()) { if (!isset($options['output'])) { - $options['output'] = 'js/*'; + $options['output'] = 'js/*.js'; } return $this->getAssetUrls($inputs, $filters, $options); @@ -55,7 +53,7 @@ abstract class AsseticHelper extends Helper public function stylesheets($inputs = array(), $filters = array(), array $options = array()) { if (!isset($options['output'])) { - $options['output'] = 'css/*'; + $options['output'] = 'css/*.css'; } return $this->getAssetUrls($inputs, $filters, $options); @@ -109,7 +107,11 @@ abstract class AsseticHelper extends Helper } if (!isset($options['debug'])) { - $options['debug'] = $this->debug; + $options['debug'] = $this->factory->isDebug(); + } + + if (!isset($options['combine'])) { + $options['combine'] = !$options['debug']; } if (isset($options['single']) && $options['single'] && 1 < count($inputs)) { @@ -117,23 +119,25 @@ abstract class AsseticHelper extends Helper } if (!isset($options['name'])) { - $options['name'] = $this->factory->generateAssetName($inputs, $filters); + $options['name'] = $this->factory->generateAssetName($inputs, $filters, $options); } - $coll = $this->factory->createAsset($inputs, $filters, $options); + $asset = $this->factory->createAsset($inputs, $filters, $options); - if (!$options['debug']) { - return array($this->getAssetUrl($coll, $options)); + $one = $this->getAssetUrl($asset, $options); + $many = array(); + if ($options['combine']) { + $many[] = $one; + } else { + $i = 0; + foreach ($asset as $leaf) { + $many[] = $this->getAssetUrl($leaf, array_replace($options, array( + 'name' => $options['name'].'_'.$i++, + ))); + } } - $urls = array(); - foreach ($coll as $leaf) { - $urls[] = $this->getAssetUrl($leaf, array_replace($options, array( - 'name' => $options['name'].'_'.count($urls), - ))); - } - - return $urls; + return new TraversableString($one, $many); } /** diff --git a/src/Symfony/Bundle/AsseticBundle/Templating/DynamicAsseticHelper.php b/src/Symfony/Bundle/AsseticBundle/Templating/DynamicAsseticHelper.php index 0c64108626..c4bdcd75a0 100644 --- a/src/Symfony/Bundle/AsseticBundle/Templating/DynamicAsseticHelper.php +++ b/src/Symfony/Bundle/AsseticBundle/Templating/DynamicAsseticHelper.php @@ -29,13 +29,12 @@ class DynamicAsseticHelper extends AsseticHelper * * @param RouterHelper $routerHelper The router helper * @param AssetFactory $factory The asset factory - * @param Boolean $debug The debug mode */ - public function __construct(RouterHelper $routerHelper, AssetFactory $factory, $debug = false) + public function __construct(RouterHelper $routerHelper, AssetFactory $factory) { $this->routerHelper = $routerHelper; - parent::__construct($factory, $debug); + parent::__construct($factory); } protected function getAssetUrl(AssetInterface $asset, $options = array()) diff --git a/src/Symfony/Bundle/AsseticBundle/Templating/StaticAsseticHelper.php b/src/Symfony/Bundle/AsseticBundle/Templating/StaticAsseticHelper.php index 9fa2011311..5ee685355c 100644 --- a/src/Symfony/Bundle/AsseticBundle/Templating/StaticAsseticHelper.php +++ b/src/Symfony/Bundle/AsseticBundle/Templating/StaticAsseticHelper.php @@ -29,13 +29,12 @@ class StaticAsseticHelper extends AsseticHelper * * @param AssetsHelper $assetsHelper The assets helper * @param AssetFactory $factory The asset factory - * @param Boolean $debug The debug mode */ - public function __construct(AssetsHelper $assetsHelper, AssetFactory $factory, $debug = false) + public function __construct(AssetsHelper $assetsHelper, AssetFactory $factory) { $this->assetsHelper = $assetsHelper; - parent::__construct($factory, $debug); + parent::__construct($factory); } protected function getAssetUrl(AssetInterface $asset, $options = array()) diff --git a/src/Symfony/Bundle/AsseticBundle/Tests/DependencyInjection/AsseticExtensionTest.php b/src/Symfony/Bundle/AsseticBundle/Tests/DependencyInjection/AsseticExtensionTest.php index e73793b863..91820a3910 100644 --- a/src/Symfony/Bundle/AsseticBundle/Tests/DependencyInjection/AsseticExtensionTest.php +++ b/src/Symfony/Bundle/AsseticBundle/Tests/DependencyInjection/AsseticExtensionTest.php @@ -102,12 +102,16 @@ class AsseticExtensionTest extends \PHPUnit_Framework_TestCase return array( array('closure', array('jar' => '/path/to/closure.jar')), array('coffee'), + array('compass'), + array('cssembed', array('jar' => '/path/to/cssembed.jar')), + array('cssimport'), array('cssrewrite'), - array('jpegtran'), array('jpegoptim'), + array('jpegtran'), array('less'), array('lessphp'), array('optipng'), + array('packager'), array('pngout'), array('sass'), array('scss'), diff --git a/src/Symfony/Bundle/AsseticBundle/Tests/FunctionalTest.php b/src/Symfony/Bundle/AsseticBundle/Tests/FunctionalTest.php index 266844744d..61e2438a6d 100644 --- a/src/Symfony/Bundle/AsseticBundle/Tests/FunctionalTest.php +++ b/src/Symfony/Bundle/AsseticBundle/Tests/FunctionalTest.php @@ -43,41 +43,6 @@ class FunctionalTest extends \PHPUnit_Framework_TestCase $filesystem->remove($this->cacheDir); } - public function testRoutes() - { - $countRoutes = function($router) - { - $count = 0; - foreach ($router->getRouteCollection()->all() as $name => $route) { - if (0 === strpos($name, '_assetic_')) { - ++$count; - } - } - - return $count; - }; - - $kernel = new TestKernel('test', false); - $kernel->boot(); - - $am = $kernel->getContainer()->get('assetic.asset_manager'); - $names = $am->getNames(); - $baseline = $expected = count($names); - - foreach ($names as $name) { - $asset = $am->get($name); - foreach ($asset as $leaf) { - ++$expected; - } - } - - $this->assertEquals($baseline, $countRoutes($kernel->getContainer()->get('router'))); - - $kernel = new TestKernel('test', true); - $kernel->boot(); - $this->assertEquals($expected, $countRoutes($kernel->getContainer()->get('router'))); - } - public function testTwigRenderDebug() { $kernel = new TestKernel('test', true); diff --git a/src/Symfony/Bundle/AsseticBundle/Tests/Templating/AsseticHelperTest.php b/src/Symfony/Bundle/AsseticBundle/Tests/Templating/AsseticHelperTest.php index 5c124bba17..fd1ed8fd3b 100644 --- a/src/Symfony/Bundle/AsseticBundle/Tests/Templating/AsseticHelperTest.php +++ b/src/Symfony/Bundle/AsseticBundle/Tests/Templating/AsseticHelperTest.php @@ -34,7 +34,7 @@ class AsseticHelperTest extends \PHPUnit_Framework_TestCase $helper = new AsseticHelperForTest(new AssetFactory('/foo', $debug), $debug); $urls = $helper->javascripts(array('js/jquery.js', 'js/jquery.plugin.js')); - $this->assertInternalType('array', $urls, '->javascripts() returns an array'); + $this->assertInstanceOf('Traversable', $urls, '->javascripts() returns an array'); $this->assertEquals($count, count($urls), $message); }