diff -r 000000000000 -r 7f95f8617b0b vendor/bundles/Symfony/Bundle/AsseticBundle/Templating/AsseticHelper.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/bundles/Symfony/Bundle/AsseticBundle/Templating/AsseticHelper.php Sat Sep 24 15:40:41 2011 +0200 @@ -0,0 +1,157 @@ + + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ + +namespace Symfony\Bundle\AsseticBundle\Templating; + +use Assetic\Asset\AssetInterface; +use Assetic\Factory\AssetFactory; +use Assetic\Util\TraversableString; +use Symfony\Component\Templating\Helper\Helper; + +/** + * The "assetic" templating helper. + * + * @author Kris Wallsmith + */ +abstract class AsseticHelper extends Helper +{ + protected $factory; + + /** + * Constructor. + * + * @param AssetFactory $factory The asset factory + */ + public function __construct(AssetFactory $factory) + { + $this->factory = $factory; + } + + /** + * Returns an array of javascript urls. + */ + public function javascripts($inputs = array(), $filters = array(), array $options = array()) + { + if (!isset($options['output'])) { + $options['output'] = 'js/*.js'; + } + + return $this->getAssetUrls($inputs, $filters, $options); + } + + /** + * Returns an array of stylesheet urls. + */ + public function stylesheets($inputs = array(), $filters = array(), array $options = array()) + { + if (!isset($options['output'])) { + $options['output'] = 'css/*.css'; + } + + return $this->getAssetUrls($inputs, $filters, $options); + } + + /** + * Returns an array of one image url. + */ + public function image($inputs = array(), $filters = array(), array $options = array()) + { + if (!isset($options['output'])) { + $options['output'] = 'images/*'; + } + + $options['single'] = true; + + return $this->getAssetUrls($inputs, $filters, $options); + } + + /** + * Gets the URLs for the configured asset. + * + * Usage looks something like this: + * + * assets('@jquery, js/src/core/*', '?yui_js') as $url): ?> + * + * + * + * When in debug mode, the helper returns an array of one or more URLs. + * When not in debug mode it returns an array of one URL. + * + * @param array|string $inputs An array or comma-separated list of input strings + * @param array|string $filters An array or comma-separated list of filter names + * @param array $options An array of options + * + * @return array An array of URLs for the asset + */ + private function getAssetUrls($inputs = array(), $filters = array(), array $options = array()) + { + $explode = function($value) + { + return array_map('trim', explode(',', $value)); + }; + + if (!is_array($inputs)) { + $inputs = $explode($inputs); + } + + if (!is_array($filters)) { + $filters = $explode($filters); + } + + if (!isset($options['debug'])) { + $options['debug'] = $this->factory->isDebug(); + } + + if (!isset($options['combine'])) { + $options['combine'] = !$options['debug']; + } + + if (isset($options['single']) && $options['single'] && 1 < count($inputs)) { + $inputs = array_slice($inputs, -1); + } + + if (!isset($options['name'])) { + $options['name'] = $this->factory->generateAssetName($inputs, $filters, $options); + } + + $asset = $this->factory->createAsset($inputs, $filters, $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++, + ))); + } + } + + return new TraversableString($one, $many); + } + + /** + * Returns an URL for the supplied asset. + * + * @param AssetInterface $asset An asset + * @param array $options An array of options + * + * @return string An echo-ready URL + */ + abstract protected function getAssetUrl(AssetInterface $asset, $options = array()); + + public function getName() + { + return 'assetic'; + } +}