def visit_FilterBlock(self, node, frame): local = Frame(EvalContext(self.environment, self.name)) local.buffer = '_fbuf' local.toplevel = frame.toplevel self.writeline('var %s = [];' % local.buffer) for n in node.body: self.visit(n, local) bits = frame.buffer, node.filter.name, local.buffer self.writeline('%s.push(Jasinja.filters.%s(%s.join("")));' % bits)
def visit_Template(self, node, frame=None): frame = Frame(EvalContext(self.environment, self.name)) frame.buffer = '_buf' frame.toplevel = True self.indent() self.writeline('') self.writeline('"%s": {' % self.name) self.indent() self.writeline('') self.writeline('') self.write('"macros": ') macros = list(node.find_all(nodes.Macro)) if not macros: self.write('{},') else: self.write('{') self.indent() self.writeline('') for i, n in enumerate(macros): self.jsmacro(n, frame) if i != len(macros) - 1: self.write(',') self.writeline('') self.outdent() self.writeline('},') self.writeline('') self.write('"blocks": ') blocks = list(node.find_all(nodes.Block)) if not blocks: self.write('{},') else: self.write('{') self.indent() self.writeline('') for i, n in enumerate(blocks): self.block(n, frame) if i != len(blocks) - 1: self.write(',') self.writeline('') self.outdent() self.writeline('},') self.writeline('') self.writeline('"render": function(ctx, tmpl) {') self.indent() extends = node.find(nodes.Extends) if extends: self.newline() self.write('return Jasinja.templates[') self.visit(extends.template, frame) self.write('].render(ctx, this);') else: self.writeline('') self.writeline('tmpl = Jasinja.utils.extend(this, tmpl);') self.writeline('') self.writeline('var %s = [];' % frame.buffer) for n in node.body: self.visit(n, frame) self.writeline('return %s.join("");' % frame.buffer) self.writeline('') self.outdent() self.writeline('}') self.outdent() self.writeline('') self.writeline('}') self.writeline('')