Class: ViewHandler

Inherits:
Object show all
Defined in:
lib/volt/server/html_parser/view_handler.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(initial_path, allow_sections = true) ⇒ ViewHandler

Returns a new instance of ViewHandler.



12
13
14
15
16
17
18
19
20
# File 'lib/volt/server/html_parser/view_handler.rb', line 12

def initialize(initial_path, allow_sections=true)
  @original_path = initial_path

  # Default to the body section
  initial_path += '/body' if allow_sections

  @scope = [ViewScope.new(self, initial_path)]
  @templates = {}
end

Instance Attribute Details

#scopeObject (readonly)

Returns the value of attribute scope.



2
3
4
# File 'lib/volt/server/html_parser/view_handler.rb', line 2

def scope
  @scope
end

#templatesObject (readonly)

Returns the value of attribute templates.



2
3
4
# File 'lib/volt/server/html_parser/view_handler.rb', line 2

def templates
  @templates
end

Instance Method Details

#binding(binding) ⇒ Object



30
31
32
# File 'lib/volt/server/html_parser/view_handler.rb', line 30

def binding(binding)
  @scope.last.add_binding(binding)
end

#comment(comment) ⇒ Object



22
23
24
# File 'lib/volt/server/html_parser/view_handler.rb', line 22

def comment(comment)
  last << "<!--#{comment}-->"
end

#end_tag(tag_name) ⇒ Object



54
55
56
57
58
59
60
61
# File 'lib/volt/server/html_parser/view_handler.rb', line 54

def end_tag(tag_name)
  if @in_textarea && tag_name == 'textarea'
    last.close_scope
    @in_textarea = nil
  else
    last << "</#{tag_name}>"
  end
end

#htmlObject



4
5
6
# File 'lib/volt/server/html_parser/view_handler.rb', line 4

def html
  last.html
end

#lastObject



8
9
10
# File 'lib/volt/server/html_parser/view_handler.rb', line 8

def last
  @scope.last
end

#start_section(tag_name, attributes, unary) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/volt/server/html_parser/view_handler.rb', line 63

def start_section(tag_name, attributes, unary)
  path = last.path
  # Start of section
  if @in_section
    # Close any previous sections
    last.close_scope
  else
    # This is the first time we've hit a section header, everything
    # outside of the headers should be removed
    @templates = {}
  end

  @in_section = tag_name[1..-1]

  # Set the new path to include the section
  new_path = @original_path + '/' + @in_section
  @scope = [ViewScope.new(self, new_path)]
end

#start_tag(tag_name, attributes, unary) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/volt/server/html_parser/view_handler.rb', line 34

def start_tag(tag_name, attributes, unary)
  case tag_name[0]
  when ':'
    # Component
    last.add_component(tag_name, attributes, unary)
  else
    if tag_name == 'textarea'
      @in_textarea = true
      last.add_textarea(tag_name, attributes, unary)
    else

      # Normal tag
      attributes = last.process_attributes(tag_name, attributes)
      attr_str = last.attribute_string(attributes)

      last << "<#{tag_name}#{attr_str}#{unary ? ' /' : ''}>"
    end
  end
end

#text(text) ⇒ Object



26
27
28
# File 'lib/volt/server/html_parser/view_handler.rb', line 26

def text(text)
  last << text
end