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);
}