HTML::Widget::Element::Block - Block Level Element


HTML-Widget documentation Contained in the HTML-Widget distribution.

Index


Code Index:

NAME

Top

HTML::Widget::Element::Block - Block Level Element

SYNOPSIS

Top

    my $e = $widget->element( 'Block', 'div' );
    $e->value('bar');

DESCRIPTION

Top

Block Level Element. Base class for HTML::Widget::Element::Fieldset

METHODS

Top

new

Returns a new Block element. Not usually required, use $widget->element() or $block->element() to create a new Block element within an existing widget or element.

type

Default value is div, to create a <div> container. Can be changed to create a tag of any type.

element

Add a new element, nested within this Block. See element in HTML::Widget for full documentation.

push_content

Add previously-created elements to the end of this block's elements.

unshift_content

Add previously-created elements to the start of this block's elements.

block_container

Creates a new block container object of type $self->block_container_class. Defaults to HTML::Widget::BlockContainer.

block_container_class

Sets the class to be used by $self->block_container. Can be called as a class or instance method.

containerize

Containerize the block and all its contained elements for later rendering. Uses HTML::Widget::BlockContainer by default, but this can be over-ridden on a class or instance basis via block_container_class.

get_elements

    my @elements = $self->get_elements;

    my @elements = $self->get_elements( type => 'Textfield' );

    my @elements = $self->get_elements( name => 'username' );

Returns a list of all elements added to the widget.

If a 'type' argument is given, only returns the elements of that type.

If a 'name' argument is given, only returns the elements with that name.

get_element

    my $element = $self->get_element;

    my $element = $self->get_element( type => 'Textfield' );

    my $element = $self->get_element( name => 'username' );

Similar to get_elements(), but only returns the first element in the list.

Accepts the same arguments as get_elements().

find_elements

Similar to get_elements(), and has the same alternate forms, but performs a recursive search through itself and child elements.

SEE ALSO

Top

HTML::Widget::Element

AUTHOR

Top

Michael Gray, mjg@cpan.org

LICENSE

Top

This library is free software, you can redistribute it and/or modify it under the same terms as Perl itself.


HTML-Widget documentation Contained in the HTML-Widget distribution.
package HTML::Widget::Element::Block;

use warnings;
use strict;
use base 'HTML::Widget::Element::NullContainer';
use NEXT;
use Carp qw/croak/;

__PACKAGE__->mk_classaccessor(
    block_container_class => 'HTML::Widget::BlockContainer' );

__PACKAGE__->mk_accessors(qw/type wrap_sub/);

sub new {
    return shift->NEXT::new(@_)->type('div');
}

sub block_container {
    my ( $self, $attributes ) = @_;
    my $class = $self->block_container_class
        || 'HTML::Widget::BlockContainer';
    my $file = $class . ".pm";
    $file =~ s{::}{/}g;
    eval { require $file };
    croak "Unable to load block container class $class: $@" if $@;

    return $class->new( { passive => $self->passive, %$attributes } );
}

sub block_container_class {
    my ($self) = shift;

    if ( not $_[0] and @_ >= 1 ) {
        delete $self->{block_container_class};
    }

    return $self->_block_container_class_accessor(@_);
}

sub containerize {
    my ( $self, $w, $value, $error, $args ) = @_;

    # NB: block-level HTML::Element generated here
    my %attrs;
    unless ( $self->{_anonymous} ) {
        $attrs{id} = $self->id($w);
    }
    my $e = HTML::Element->new( $self->type, %attrs );

    my @pre_content  = $self->_pre_content_elements($w);
    my @post_content = $self->_post_content_elements($w);

    local $w->{attributes}->{id} = $self->id($w);

    my @content = $w->_containerize_elements( $self->content, $args );

    $e->attr( $_ => ${ $self->attributes }{$_} )
        for ( keys %{ $self->attributes } );

    return $self->block_container( {
            element      => $e,
            content      => \@content,
            pre_content  => \@pre_content,
            post_content => \@post_content,
            wrap_sub     => $self->wrap_sub,
            name         => $self->name,
        } );
}

sub _pre_content_elements  { return (); }
sub _post_content_elements { return (); }

1;