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.

Parameters:

  • id (String)

    ID that is unique with regards to the rendered HTML page.

  • title (String)

    Title/heading of the framed box

  • width (Fixnum or nil) (defaults to: 600)

    Width of the frame. Use nil to set no width.

  • content (Any object that respons to to_html) (defaults to: nil)

    Object to frame

  • &block (HTMLBuilder actions)


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.

Parameters:



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(<<"EOT"
function init_viewframe_#{@id}() {
  if (readCookie('postrunner_checkbox_#view_#{@id}') == 'false') {
$('#checkbox-#{@id}').attr('checked', false);
$('#view_#{@id}').hide();
  } else {
$('#checkbox-#{@id}').attr('checked', true);
$('#view_#{@id}').show();
  };
};
EOT
              )
    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