Class: PostRunner::ViewFrame

Inherits:
Object
  • Object
show all
Defined in:
lib/postrunner/ViewFrame.rb

Overview

Creates an HTML frame around the passed object or HTML block.

Instance Method Summary collapse

Constructor Details

#initialize(id, title, width = 600, content = nil, hide_button = false, &block) ⇒ ViewFrame

Create a ViewFrame object.



26
27
28
29
30
31
32
33
34
# File 'lib/postrunner/ViewFrame.rb', line 26

def initialize(id, title, width = 600, content = nil, hide_button = false,
               &block)
  @id = id
  @title = title
  @content = content
  @block = block
  @width = width
  @hide_button = hide_button
end

Instance Method Details

#to_html(doc) ⇒ Object

Generate the HTML code for the frame and the enclosing content.



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/postrunner/ViewFrame.rb', line 38

def to_html(doc)
  doc.unique(:viewframe_style) {
    # Add the necessary style sheet snippets to the document head.
    doc.head {
      doc.style(style)
      doc.script({ 'language' => 'javascript', 'type' => 'text/javascript',
                   'src' => 'postrunner/postrunner.js' })
    }
  }
  doc.head {
    doc.script("function init_viewframe_\#{@id}() {\n  if (readCookie('postrunner_checkbox_#view_\#{@id}') == 'false') {\n$('#checkbox-\#{@id}').attr('checked', false);\n$('#view_\#{@id}').hide();\n  } else {\n$('#checkbox-\#{@id}').attr('checked', true);\n$('#view_\#{@id}').show();\n  };\n};\n"
              )
    doc.body_init_script("init_viewframe_#{@id}();")
  }

  attr = { 'class' => 'widget_frame' }
  attr['style'] = "width: #{@width}px" if @width
  doc.div(attr) {
    doc.div({ 'class' => 'widget_frame_title' }) {
      doc.div('style' => 'float:left') { doc.b(@title) }
      if @hide_button
        doc.div('style' => 'float:right') {
          doc.input('id' => "checkbox-#{@id}", 'type' => "checkbox",
                    'onclick' =>
                    "pr_view_frame_toggle(this, \"#view_#{@id}\");")
        }
      end
    }
    doc.div('class' => 'view_frame', 'id' => "view_#{@id}") {
      # The @content holds an object that must respond to to_html to
      # generate the HTML code.
      if @content
        if @content.is_a?(Array)
          @content.each { |c| c.to_html(doc) }
        else
          @content.to_html(doc)
        end
      end
      # The block generates HTML code directly
      @block.yield if @block
    }
  }
end