vendor/bundles/Symfony/Bundle/AsseticBundle/Templating/AsseticHelper.php
changeset 0 7f95f8617b0b
--- /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 @@
+<?php
+
+/*
+ * This file is part of the Symfony framework.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * 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 <kris@symfony.com>
+ */
+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:
+     *
+     *     <?php foreach ($view['assetic']->assets('@jquery, js/src/core/*', '?yui_js') as $url): ?>
+     *         <script src="<?php echo $url ?>" type="text/javascript"></script>
+     *     <?php endforeach; ?>
+     *
+     * 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';
+    }
+}