class Borges::HtmlResponse < Borges::Response def add_element(anObject) @stack.last.add(anObject) end def body return @body end def contents stream = '' print_html_on(stream) return stream end def head return @head end def initialize super() @head = Borges::HtmlElement.new('head') @body = Borges::HtmlElement.new('body') @stack = [@body] end def pop_element return @stack.pop end def print_html_on(str) str << "#{@head}#{@body}" end def push_element(anObject) add_element(anObject) @stack.push(anObject) end def render_on(html) root = Borges::HtmlElement.named('html') root.add(@head) root.add(@body) root.render_on_indent(html, 0) end def with_element_do(anElement, aBlock) push_element(anElement) aBlock.call pop_element end end