class EJX::Template::Subtemplate

Attributes

append[R]
children[R]

Public Class Methods

new(opening, modifiers, append: true) click to toggle source
# File lib/ejx/template/subtemplate.rb, line 5
def initialize(opening, modifiers, append: true)
  @children = [opening]
  @modifiers = modifiers
  @append = append
end

Public Instance Methods

to_js(indentation: 4, var_generator: nil, append: "__output") click to toggle source
# File lib/ejx/template/subtemplate.rb, line 11
def to_js(indentation: 4, var_generator: nil, append: "__output")
  global_output_var = var_generator.next
  output_var = var_generator.next
  
  output = ''
  if @append
    output << "#{' '*indentation}var #{global_output_var} = [];\n"
    output << "#{' '*indentation}__ejx_append("
    output << @children.first << "\n"
  else
    output << "#{' '*indentation}#{@children.first}\n"
  end

  output << "#{' '*(indentation+4)}var #{output_var} = [];\n"
  
  @children[1..-2].each do |child|
    output << case child
    when EJX::Template::String
      "#{' '*(indentation+4)}__ejx_append(#{child.to_js}, #{output_var}, false, __promises);\n"
    else
      child.to_js(indentation: indentation + 4, var_generator: var_generator, append: output_var)
    end
  end
  
  output << ' '*(indentation+4) << "#{global_output_var}.push(#{output_var});\n" if @append
  output << ' '*(indentation+4) << "return #{output_var};\n";
  output << ' '*indentation << @children.last.strip.delete_suffix(';')
  output << if @append
    ", #{append}, true, __promises, #{global_output_var});\n"
  else
    ";\n"
  end

  output
end