Skip to content

Commit

Permalink
[TwigBundle] removed usage of HelperTokenParser for the js/css tags
Browse files Browse the repository at this point in the history
  • Loading branch information
fabpot committed Jan 3, 2011
1 parent 840bd8a commit 3f492ca
Show file tree
Hide file tree
Showing 9 changed files with 374 additions and 4 deletions.
12 changes: 8 additions & 4 deletions src/Symfony/Bundle/TwigBundle/Extension/TemplatingExtension.php
Expand Up @@ -8,6 +8,10 @@
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;

/*
Expand Down Expand Up @@ -98,16 +102,16 @@ public function getTokenParsers()
{
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(),
Expand Down
42 changes: 42 additions & 0 deletions 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 changes: 38 additions & 0 deletions 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 changes: 42 additions & 0 deletions 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 changes: 38 additions & 0 deletions 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")
;
}
}
@@ -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';
}
}
@@ -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';
}
}
@@ -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';
}
}

0 comments on commit 3f492ca

Please sign in to comment.