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; }
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(')'); }
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('}'); } }
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')); }
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(')'); }
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())); }
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(')'); }
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')); }
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") // ; // } }
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"); }
protected function compileMacros(JsCompiler $compiler, \Twig_NodeInterface $node) { $compiler->subcompile($node->getNode('macros')); }
public function compile(JsCompiler $compiler, \Twig_NodeInterface $node) { foreach ($node as $subNode) { $compiler->subcompile($subNode); } }
public function compile(JsCompiler $compiler, \Twig_Node_Expression_Test $node) { $compiler->subcompile($node->getNode('node')); }