Example #1
0
 public function compile(JsCompiler $compiler, \Twig_NodeInterface $node)
 {
     if (!$node instanceof \Twig_Node_Set) {
         throw new \RuntimeException(sprintf('$node must be an instanceof of \\Twig_Node_Set, but got "%s".', get_class($node)));
     }
     $compiler->addDebugInfo($node);
     if (count($node->getNode('names')) > 1) {
         $values = $node->getNode('values');
         foreach ($node->getNode('names') as $idx => $subNode) {
             $compiler->subcompile($subNode)->raw(' = ')->subcompile($values->getNode($idx))->raw(";\n");
         }
         return;
     }
     $count = $this->count++;
     $captureStringBuffer = 'cSb' . ($count > 0 ? $count : '');
     if ($node->getAttribute('capture')) {
         $compiler->write("var {$captureStringBuffer} = sb;\n")->write("sb = new twig.StringBuffer;")->subcompile($node->getNode('values'));
     }
     $compiler->subcompile($node->getNode('names'), false);
     if ($node->getAttribute('capture')) {
         $compiler->raw(" = new twig.Markup(sb.toString());\n")->write("sb = {$captureStringBuffer}");
     } else {
         $compiler->raw(' = ');
         if ($node->getAttribute('safe')) {
             $compiler->raw("new twig.Markup(")->subcompile($node->getNode('values'))->raw(")");
         } else {
             $compiler->subcompile($node->getNode('values'));
         }
     }
     $compiler->raw(";\n");
     $this->count = $count;
 }
Example #2
0
 public function compile(JsCompiler $compiler, \Twig_NodeInterface $node)
 {
     if (!$node instanceof \Twig_Node_Expression_GetAttr) {
         throw new \RuntimeException(sprintf('$node must be an instanceof of \\Expression_GetAttr, but got "%s".', get_class($node)));
     }
     $compiler->raw('twig.attr(');
     if ($node->getAttribute('is_defined_test') && $compiler->getEnvironment()->isStrictVariables()) {
         $compiler->subcompile(new \Twig_Node_Expression_Filter($node->getNode('node'), new \Twig_Node_Expression_Constant('default', $node->getLine()), new \Twig_Node(), $node->getLine()));
     } else {
         $compiler->subcompile($node->getNode('node'));
     }
     $compiler->raw(', ')->subcompile($node->getNode('attribute'));
     $defaultArguments = 0 === count($node->getNode('arguments'));
     $defaultAccess = \Twig_TemplateInterface::ANY_CALL === $node->getAttribute('type');
     $defaultTest = false == $node->getAttribute('is_defined_test');
     if (!$defaultArguments) {
         $compiler->raw(', ')->subcompile($node->getNode('arguments'));
     } elseif (!$defaultAccess || !$defaultTest) {
         $compiler->raw(', undefined');
     }
     if (!$defaultAccess) {
         $compiler->raw(', ')->repr($node->getAttribute('type'));
     } elseif (!$defaultTest) {
         $compiler->raw(', undefined');
     }
     if (!$defaultTest) {
         $compiler->raw(', ' . ($node->getAttribute('is_defined_test') ? 'true' : 'false'));
     }
     $compiler->raw(')');
 }
Example #3
0
 public function compile(JsCompiler $compiler, \Twig_NodeInterface $node)
 {
     if (!$node instanceof \Twig_Node_Expression_Array) {
         throw new \RuntimeException(sprintf('$node must be an instanceof of \\Expression_Array, but got "%s".', get_class($node)));
     }
     $pairs = $this->getKeyValuePairs($node);
     if ($isList = $this->isList($pairs)) {
         $compiler->raw('[');
     } elseif ($hasDynamicKeys = $this->hasDynamicKeys($pairs)) {
         $compiler->raw('twig.createObj(');
     } else {
         $compiler->raw('{');
     }
     $first = true;
     foreach ($pairs as $pair) {
         if (!$first) {
             $compiler->raw(', ');
         }
         $first = false;
         if ($isList) {
             $compiler->subcompile($pair['value']);
         } elseif ($hasDynamicKeys) {
             $compiler->subcompile($pair['key'])->raw(', ')->subcompile($pair['value']);
         } else {
             $compiler->subcompile($pair['key'])->raw(': ')->subcompile($pair['value']);
         }
     }
     if ($isList) {
         $compiler->raw(']');
     } elseif ($hasDynamicKeys) {
         $compiler->raw(')');
     } else {
         $compiler->raw('}');
     }
 }
Example #4
0
 public function compile(JsCompiler $compiler, \Twig_NodeInterface $node)
 {
     if (!$node instanceof \Twig_Node_AutoEscape) {
         throw new \RuntimeException(sprintf('$node must be an instanceof of \\AutoEscape, but got "%s".', get_class($node)));
     }
     $compiler->subcompile($node->getNode('body'));
 }
Example #5
0
 public function compile(JsCompiler $compiler, \Twig_NodeInterface $node)
 {
     if (!$node instanceof \Twig_Node_Expression_Function) {
         throw new \RuntimeException(sprintf('$node must be an instanceof of \\Expression_Function, but got "%s".', get_class($node)));
     }
     $function = $compiler->getEnvironment()->getFunction($node->getAttribute('name'));
     if (false === $function) {
         throw new \Twig_Error_Syntax(sprintf('The function "%s" does not exist', $node->getAttribute('name')), $node->getLine());
     }
     if ($jsFunction = $compiler->getJsFunction($node->getAttribute('name'))) {
         $compiler->raw($jsFunction . '(');
     } else {
         $compiler->raw('this.env_.invoke(')->string($node->getAttribute('name'))->raw(', ');
     }
     $compiler->raw($function->needsEnvironment() ? 'this.env_' : '');
     if ($function->needsContext()) {
         $compiler->raw($function->needsEnvironment() ? ', context' : 'context');
     }
     $first = true;
     foreach ($node->getNode('arguments') as $argNode) {
         if (!$first) {
             $compiler->raw(', ');
         } else {
             if ($function->needsEnvironment() || $function->needsContext()) {
                 $compiler->raw(', ');
             }
             $first = false;
         }
         $compiler->subcompile($argNode);
     }
     $compiler->raw(')');
 }
Example #6
0
 public function compile(JsCompiler $compiler, \Twig_NodeInterface $node)
 {
     if (!$node instanceof \Twig_Node_Expression_Test_Defined) {
         throw new \RuntimeException(sprintf('$node must be an instanceof of \\Twig_Node_Expression_Test_Defined, but got "%s".', get_class($node)));
     }
     $compiler->subcompile(new \Twig_Node_Expression_Test($node->getNode('node'), $node->getAttribute('name'), $node->getNode('arguments'), $node->getLine()));
 }
Example #7
0
 public function compile(JsCompiler $compiler, \Twig_NodeInterface $node)
 {
     if (!$node instanceof \Twig_Node_Expression_MethodCall) {
         throw new \RuntimeException(sprintf('$node must be an instanceof of \\Twig_Node_Expression_MethodCall, but got "%s".', get_class($node)));
     }
     $compiler->subcompile($node->getNode('node'))->raw('.')->raw($node->getAttribute('method'))->raw('(');
     $first = true;
     foreach ($node->getNode('arguments')->getKeyValuePairs() as $pair) {
         if (!$first) {
             $compiler->raw(', ');
         }
         $first = false;
         $compiler->subcompile($pair['value']);
     }
     $compiler->raw(')');
 }
Example #8
0
 public function compile(JsCompiler $compiler, \Twig_NodeInterface $node)
 {
     if (!$node instanceof \Twig_Node_Expression_DefaultFilter) {
         throw new \RuntimeException(sprintf('$node must be an instanceof of \\Twig_Node_Expression_DefaultFilter, but got "%s".', get_class($node)));
     }
     $compiler->subcompile($node->getNode('node'));
 }
Example #9
0
 public function compile(JsCompiler $compiler, \Twig_NodeInterface $node)
 {
     if (!$node instanceof \Twig_Node_Include) {
         throw new \RuntimeException(sprintf('$node must be an instanceof of \\Include, but got "%s".', get_class($node)));
     }
     $compiler->addDebugInfo($node);
     // Is there are use case for conditional includes at runtime?
     //         if ($node->getAttribute('ignore_missing')) {
     //             $compiler
     //                 ->write("try {\n")
     //                 ->indent()
     //             ;
     //         }
     $compiler->isTemplateName = true;
     if ($node->getNode('expr') instanceof Twig_Node_Expression_Constant) {
         $compiler->write("(new ")->subcompile($node->getNode('expr'))->raw("(this.env_)).render_(sb, ");
     } else {
         $compiler->write("(new ")->subcompile($node->getNode('expr'))->raw("(this.env_)).render_(sb, ");
     }
     $compiler->isTemplateName = false;
     if (false === $node->getAttribute('only')) {
         if (null === $node->getNode('variables')) {
             $compiler->raw('context');
         } else {
             $compiler->raw('twig.extend({}, context, ')->subcompile($node->getNode('variables'))->raw(')');
         }
     } else {
         if (null === $node->getNode('variables')) {
             $compiler->raw('{}');
         } else {
             $compiler->subcompile($node->getNode('variables'));
         }
     }
     $compiler->raw(");\n");
     //         if ($node->getAttribute('ignore_missing')) {
     //             $compiler
     //                 ->outdent()
     //                 ->write("} catch (Twig_Error_Loader \$e) {\n")
     //                 ->indent()
     //                 ->write("// ignore missing template\n")
     //                 ->outdent()
     //                 ->write("}\n\n")
     //             ;
     //         }
 }
Example #10
0
 public function compile(JsCompiler $compiler, \Twig_NodeInterface $node)
 {
     if (!$node instanceof \Twig_Node_If) {
         throw new \RuntimeException(sprintf('$node must be an instanceof of \\If, but got "%s".', get_class($node)));
     }
     $compiler->addDebugInfo($node);
     for ($i = 0; $i < count($node->getNode('tests')); $i += 2) {
         if ($i > 0) {
             $compiler->outdent()->write("} else if (");
         } else {
             $compiler->write('if (');
         }
         $compiler->subcompile($node->getNode('tests')->getNode($i))->raw(") {\n")->indent()->subcompile($node->getNode('tests')->getNode($i + 1));
     }
     if ($node->hasNode('else') && null !== $node->getNode('else')) {
         $compiler->outdent()->write("} else {\n")->indent()->subcompile($node->getNode('else'));
     }
     $compiler->outdent()->write("}\n");
 }
Example #11
0
 protected function compileMacros(JsCompiler $compiler, \Twig_NodeInterface $node)
 {
     $compiler->subcompile($node->getNode('macros'));
 }
Example #12
0
 public function compile(JsCompiler $compiler, \Twig_NodeInterface $node)
 {
     foreach ($node as $subNode) {
         $compiler->subcompile($subNode);
     }
 }
Example #13
0
 public function compile(JsCompiler $compiler, \Twig_Node_Expression_Test $node)
 {
     $compiler->subcompile($node->getNode('node'));
 }