Forráskód Böngészése

[TwigBundle] removed usage of HelperTokenParser for the js/css tags

Fabien Potencier 14 éve
szülő
commit
3f492cae40

+ 8 - 4
src/Symfony/Bundle/TwigBundle/Extension/TemplatingExtension.php

@@ -8,6 +8,10 @@ use Symfony\Bundle\TwigBundle\TokenParser\IncludeTokenParser;
 use Symfony\Bundle\TwigBundle\TokenParser\UrlTokenParser;
 use Symfony\Bundle\TwigBundle\TokenParser\PathTokenParser;
 use Symfony\Bundle\TwigBundle\TokenParser\RenderTokenParser;
+use Symfony\Bundle\TwigBundle\TokenParser\StylesheetTokenParser;
+use Symfony\Bundle\TwigBundle\TokenParser\StylesheetsTokenParser;
+use Symfony\Bundle\TwigBundle\TokenParser\JavascriptTokenParser;
+use Symfony\Bundle\TwigBundle\TokenParser\JavascriptsTokenParser;
 use Symfony\Component\Yaml\Dumper as YamlDumper;
 
 /*
@@ -98,16 +102,16 @@ class TemplatingExtension extends \Twig_Extension
     {
         return array(
             // {% javascript 'bundles/blog/js/blog.js' %}
-            new HelperTokenParser('javascript', '<js> [with <arguments:hash>]', 'templating.helper.javascripts', 'add'),
+            new JavascriptTokenParser(),
 
             // {% javascripts %}
-            new HelperTokenParser('javascripts', '', 'templating.helper.javascripts', 'render'),
+            new JavascriptsTokenParser(),
 
             // {% stylesheet 'bundles/blog/css/blog.css' with { 'media': 'screen' } %}
-            new HelperTokenParser('stylesheet', '<css> [with <arguments:hash>]', 'templating.helper.stylesheets', 'add'),
+            new StylesheetTokenParser(),
 
             // {% stylesheets %}
-            new HelperTokenParser('stylesheets', '', 'templating.helper.stylesheets', 'render'),
+            new StylesheetsTokenParser(),
 
             // {% render 'BlogBundle:Post:list' with { 'limit': 2 }, { 'alt': 'BlogBundle:Post:error' } %}
             new RenderTokenParser(),

+ 42 - 0
src/Symfony/Bundle/TwigBundle/Node/JavascriptNode.php

@@ -0,0 +1,42 @@
+<?php
+
+namespace Symfony\Bundle\TwigBundle\Node;
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a javascript node.
+ *
+ * @author Fabien Potencier <fabien.potencier@symfony-project.com>
+ */
+class JavascriptNode extends \Twig_Node
+{
+    public function __construct(\Twig_Node_Expression $expr, \Twig_Node_Expression $attributes, $lineno, $tag = null)
+    {
+        parent::__construct(array('expr' => $expr, 'attributes' => $attributes), array(), $lineno, $tag);
+    }
+
+    /**
+     * Compiles the node to PHP.
+     *
+     * @param \Twig_Compiler A Twig_Compiler instance
+     */
+    public function compile(\Twig_Compiler $compiler)
+    {
+        $compiler
+            ->addDebugInfo($this)
+            ->write("echo \$this->env->getExtension('templating')->getContainer()->get('templating.helper.javascripts')->add(")
+            ->subcompile($this->getNode('expr'))
+            ->raw(', ')
+            ->subcompile($this->getNode('attributes'))
+            ->raw(");\n")
+        ;
+    }
+}

+ 38 - 0
src/Symfony/Bundle/TwigBundle/Node/JavascriptsNode.php

@@ -0,0 +1,38 @@
+<?php
+
+namespace Symfony\Bundle\TwigBundle\Node;
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a javascripts node.
+ *
+ * @author Fabien Potencier <fabien.potencier@symfony-project.com>
+ */
+class JavascriptsNode extends \Twig_Node
+{
+    public function __construct($lineno, $tag = null)
+    {
+        parent::__construct(array(), array(), $lineno, $tag);
+    }
+
+    /**
+     * Compiles the node to PHP.
+     *
+     * @param \Twig_Compiler A Twig_Compiler instance
+     */
+    public function compile(\Twig_Compiler $compiler)
+    {
+        $compiler
+            ->addDebugInfo($this)
+            ->write("echo \$this->env->getExtension('templating')->getContainer()->get('templating.helper.javascripts')->render();\n")
+        ;
+    }
+}

+ 42 - 0
src/Symfony/Bundle/TwigBundle/Node/StylesheetNode.php

@@ -0,0 +1,42 @@
+<?php
+
+namespace Symfony\Bundle\TwigBundle\Node;
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a stylesheet node.
+ *
+ * @author Fabien Potencier <fabien.potencier@symfony-project.com>
+ */
+class StylesheetNode extends \Twig_Node
+{
+    public function __construct(\Twig_Node_Expression $expr, \Twig_Node_Expression $attributes, $lineno, $tag = null)
+    {
+        parent::__construct(array('expr' => $expr, 'attributes' => $attributes), array(), $lineno, $tag);
+    }
+
+    /**
+     * Compiles the node to PHP.
+     *
+     * @param \Twig_Compiler A Twig_Compiler instance
+     */
+    public function compile(\Twig_Compiler $compiler)
+    {
+        $compiler
+            ->addDebugInfo($this)
+            ->write("echo \$this->env->getExtension('templating')->getContainer()->get('templating.helper.stylesheets')->add(")
+            ->subcompile($this->getNode('expr'))
+            ->raw(', ')
+            ->subcompile($this->getNode('attributes'))
+            ->raw(");\n")
+        ;
+    }
+}

+ 38 - 0
src/Symfony/Bundle/TwigBundle/Node/StylesheetsNode.php

@@ -0,0 +1,38 @@
+<?php
+
+namespace Symfony\Bundle\TwigBundle\Node;
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a stylesheets node.
+ *
+ * @author Fabien Potencier <fabien.potencier@symfony-project.com>
+ */
+class StylesheetsNode extends \Twig_Node
+{
+    public function __construct($lineno, $tag = null)
+    {
+        parent::__construct(array(), array(), $lineno, $tag);
+    }
+
+    /**
+     * Compiles the node to PHP.
+     *
+     * @param \Twig_Compiler A Twig_Compiler instance
+     */
+    public function compile(\Twig_Compiler $compiler)
+    {
+        $compiler
+            ->addDebugInfo($this)
+            ->write("echo \$this->env->getExtension('templating')->getContainer()->get('templating.helper.stylesheets')->render();\n")
+        ;
+    }
+}

+ 57 - 0
src/Symfony/Bundle/TwigBundle/TokenParser/JavascriptTokenParser.php

@@ -0,0 +1,57 @@
+<?php
+
+namespace Symfony\Bundle\TwigBundle\TokenParser;
+
+use Symfony\Bundle\TwigBundle\Node\JavascriptNode;
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * 
+ *
+ * @author Fabien Potencier <fabien.potencier@symfony-project.com>
+ */
+class JavascriptTokenParser extends \Twig_TokenParser
+{
+    /**
+     * Parses a token and returns a node.
+     *
+     * @param \Twig_Token $token A \Twig_Token instance
+     *
+     * @return \Twig_NodeInterface A \Twig_NodeInterface instance
+     */
+    public function parse(\Twig_Token $token)
+    {
+        $expr = $this->parser->getExpressionParser()->parseExpression();
+
+        // attributes
+        if ($this->parser->getStream()->test(\Twig_Token::NAME_TYPE, 'with')) {
+            $this->parser->getStream()->next();
+
+            $attributes = $this->parser->getExpressionParser()->parseExpression();
+        } else {
+            $attributes = new \Twig_Node_Expression_Array(array(), $token->getLine());
+        }
+
+        $this->parser->getStream()->expect(\Twig_Token::BLOCK_END_TYPE);
+
+        return new JavascriptNode($expr, $attributes, $token->getLine(), $this->getTag());
+    }
+
+    /**
+     * Gets the tag name associated with this token parser.
+     *
+     * @param string The tag name
+     */
+    public function getTag()
+    {
+        return 'javascript';
+    }
+}

+ 46 - 0
src/Symfony/Bundle/TwigBundle/TokenParser/JavascriptsTokenParser.php

@@ -0,0 +1,46 @@
+<?php
+
+namespace Symfony\Bundle\TwigBundle\TokenParser;
+
+use Symfony\Bundle\TwigBundle\Node\JavascriptsNode;
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * 
+ *
+ * @author Fabien Potencier <fabien.potencier@symfony-project.com>
+ */
+class JavascriptsTokenParser extends \Twig_TokenParser
+{
+    /**
+     * Parses a token and returns a node.
+     *
+     * @param \Twig_Token $token A \Twig_Token instance
+     *
+     * @return \Twig_NodeInterface A \Twig_NodeInterface instance
+     */
+    public function parse(\Twig_Token $token)
+    {
+        $this->parser->getStream()->expect(\Twig_Token::BLOCK_END_TYPE);
+
+        return new JavascriptsNode($token->getLine(), $this->getTag());
+    }
+
+    /**
+     * Gets the tag name associated with this token parser.
+     *
+     * @param string The tag name
+     */
+    public function getTag()
+    {
+        return 'javascripts';
+    }
+}

+ 57 - 0
src/Symfony/Bundle/TwigBundle/TokenParser/StylesheetTokenParser.php

@@ -0,0 +1,57 @@
+<?php
+
+namespace Symfony\Bundle\TwigBundle\TokenParser;
+
+use Symfony\Bundle\TwigBundle\Node\StylesheetNode;
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * 
+ *
+ * @author Fabien Potencier <fabien.potencier@symfony-project.com>
+ */
+class StylesheetTokenParser extends \Twig_TokenParser
+{
+    /**
+     * Parses a token and returns a node.
+     *
+     * @param \Twig_Token $token A \Twig_Token instance
+     *
+     * @return \Twig_NodeInterface A \Twig_NodeInterface instance
+     */
+    public function parse(\Twig_Token $token)
+    {
+        $expr = $this->parser->getExpressionParser()->parseExpression();
+
+        // attributes
+        if ($this->parser->getStream()->test(\Twig_Token::NAME_TYPE, 'with')) {
+            $this->parser->getStream()->next();
+
+            $attributes = $this->parser->getExpressionParser()->parseExpression();
+        } else {
+            $attributes = new \Twig_Node_Expression_Array(array(), $token->getLine());
+        }
+
+        $this->parser->getStream()->expect(\Twig_Token::BLOCK_END_TYPE);
+
+        return new StylesheetNode($expr, $attributes, $token->getLine(), $this->getTag());
+    }
+
+    /**
+     * Gets the tag name associated with this token parser.
+     *
+     * @param string The tag name
+     */
+    public function getTag()
+    {
+        return 'stylesheet';
+    }
+}

+ 46 - 0
src/Symfony/Bundle/TwigBundle/TokenParser/StylesheetsTokenParser.php

@@ -0,0 +1,46 @@
+<?php
+
+namespace Symfony\Bundle\TwigBundle\TokenParser;
+
+use Symfony\Bundle\TwigBundle\Node\StylesheetsNode;
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * 
+ *
+ * @author Fabien Potencier <fabien.potencier@symfony-project.com>
+ */
+class StylesheetsTokenParser extends \Twig_TokenParser
+{
+    /**
+     * Parses a token and returns a node.
+     *
+     * @param \Twig_Token $token A \Twig_Token instance
+     *
+     * @return \Twig_NodeInterface A \Twig_NodeInterface instance
+     */
+    public function parse(\Twig_Token $token)
+    {
+        $this->parser->getStream()->expect(\Twig_Token::BLOCK_END_TYPE);
+
+        return new StylesheetsNode($token->getLine(), $this->getTag());
+    }
+
+    /**
+     * Gets the tag name associated with this token parser.
+     *
+     * @param string The tag name
+     */
+    public function getTag()
+    {
+        return 'stylesheets';
+    }
+}