lib/postrunner/ViewFrame.rb in postrunner-0.1.0 vs lib/postrunner/ViewFrame.rb in postrunner-0.2.0

- old
+ new

@@ -14,37 +14,67 @@ # Creates an HTML frame around the passed object or HTML block. class ViewFrame # Create a ViewFrame object. + # @param id [String] ID that is unique with regards to the rendered HTML + # page. # @param title [String] Title/heading of the framed box # @param width [Fixnum or nil] Width of the frame. Use nil to set no # width. # @param content [Any object that respons to to_html] Object to frame # @param &block [HTMLBuilder actions] - def initialize(title, width = 600, content = nil, &block) + 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 # Generate the HTML code for the frame and the enclosing content. # @param doc [HTMLBuilder] HTML document def to_html(doc) doc.unique(:viewframe_style) { # Add the necessary style sheet snippets to the document head. - doc.head { doc.style(style) } + doc.head { + doc.style(style) + doc.script({ '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.b(@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 { + 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) } @@ -79,11 +109,13 @@ -moz-box-shadow: 0 3px 10px rgba(0,0,0,0.1); -webkit-box-shadow: 0 3px 10px rgba(0,0,0,0.1); } .widget_frame_title { font-size:13pt; - padding-bottom: 5px; - text-align: left; + height: 23px; +} +.view_frame { + padding-top: 5px; } EOT end end