vendor/assetic/src/Assetic/Extension/Twig/AsseticNode.php
changeset 0 7f95f8617b0b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/assetic/src/Assetic/Extension/Twig/AsseticNode.php	Sat Sep 24 15:40:41 2011 +0200
@@ -0,0 +1,123 @@
+<?php
+
+/*
+ * This file is part of the Assetic package, an OpenSky project.
+ *
+ * (c) 2010-2011 OpenSky Project Inc
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Assetic\Extension\Twig;
+
+use Assetic\Asset\AssetInterface;
+
+class AsseticNode extends \Twig_Node
+{
+    /**
+     * Constructor.
+     *
+     * Available attributes:
+     *
+     *  * debug:    The debug mode
+     *  * combine:  Whether to combine assets
+     *  * var_name: The name of the variable to expose to the body node
+     *
+     * @param AssetInterface     $asset      The asset
+     * @param Twig_NodeInterface $body       The body node
+     * @param array              $inputs     An array of input strings
+     * @param array              $filters    An array of filter strings
+     * @param string             $name       The name of the asset
+     * @param array              $attributes An array of attributes
+     * @param integer            $lineno     The line number
+     * @param string             $tag        The tag name
+     */
+    public function __construct(AssetInterface $asset, \Twig_NodeInterface $body, array $inputs, array $filters, $name, array $attributes = array(), $lineno = 0, $tag = null)
+    {
+        $nodes = array('body' => $body);
+
+        $attributes = array_replace(
+            array('debug' => null, 'combine' => null, 'var_name' => 'asset_url'),
+            $attributes,
+            array('asset' => $asset, 'inputs' => $inputs, 'filters' => $filters, 'name' => $name)
+        );
+
+        parent::__construct($nodes, $attributes, $lineno, $tag);
+    }
+
+    public function compile(\Twig_Compiler $compiler)
+    {
+        $compiler->addDebugInfo($this);
+
+        $combine = $this->getAttribute('combine');
+        $debug = $this->getAttribute('debug');
+
+        if (null === $combine && null !== $debug) {
+            $combine = !$debug;
+        }
+
+        if (null === $combine) {
+            $compiler
+                ->write("if (isset(\$context['assetic']['debug']) && \$context['assetic']['debug']) {\n")
+                ->indent()
+            ;
+
+            $this->compileDebug($compiler);
+
+            $compiler
+                ->outdent()
+                ->write("} else {\n")
+                ->indent()
+            ;
+
+            $this->compileAsset($compiler, $this->getAttribute('asset'), $this->getAttribute('name'));
+
+            $compiler
+                ->outdent()
+                ->write("}\n")
+            ;
+        } elseif ($combine) {
+            $this->compileAsset($compiler, $this->getAttribute('asset'), $this->getAttribute('name'));
+        } else {
+            $this->compileDebug($compiler);
+        }
+
+        $compiler
+            ->write('unset($context[')
+            ->repr($this->getAttribute('var_name'))
+            ->raw("]);\n")
+        ;
+    }
+
+    protected function compileDebug(\Twig_Compiler $compiler)
+    {
+        $i = 0;
+        foreach ($this->getAttribute('asset') as $leaf) {
+            $leafName = $this->getAttribute('name').'_'.$i++;
+            $this->compileAsset($compiler, $leaf, $leafName);
+        }
+    }
+
+    protected function compileAsset(\Twig_Compiler $compiler, AssetInterface $asset, $name)
+    {
+        $compiler
+            ->write("// asset \"$name\"\n")
+            ->write('$context[')
+            ->repr($this->getAttribute('var_name'))
+            ->raw('] = ')
+        ;
+
+        $this->compileAssetUrl($compiler, $asset, $name);
+
+        $compiler
+            ->raw(";\n")
+            ->subcompile($this->getNode('body'))
+        ;
+    }
+
+    protected function compileAssetUrl(\Twig_Compiler $compiler, AssetInterface $asset, $name)
+    {
+        $compiler->repr($asset->getTargetPath());
+    }
+}