The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

HTML::Native::List - List of HTML::Native objects

SYNOPSIS

    use HTML::Native::List;

    # Create some HTML
    my $list = HTML::Native::List->new (
      [ img => { src => "logo.png" } ],
      [ h1 => "Hello!" ],
      "This is some text",
    );
    print $list;
    # prints "<img src="logo.png" /><h1>Hello!</h1>This is some text"

DESCRIPTION

An HTML::Native::List object represents a list containing a mixture of HTML::Native objects (themselves representing HTML elements) and plain-text content. HTML::Native uses an HTML::Native::List object to represent the children of an HTML element.

An HTML::Native::List object is a tied array (see perltie). You can treat it as a normal Perl array:

    my $list = HTML::Native::List->new (
      [ img => { src => "logo.png" } ],
      [ h1 => "Hello!" ],
      "This is some text",
    );
    print $list->[1];
    # prints "<h1>Hello!</h1>"

Any anonymous arrays within the contents will be automatically converted into new HTML::Native objects. For example:

    my $list = HTML::Native::List->new();
    push @$list, [ p => "Hello world" ];
    print $list;
    # prints "<p>Hello world</p>"

See HTML::Native for more documentation and examples.

SUBCLASSING

When subclassing HTML::Native::List, you may wish to override the class that is used by default to hold new elements. You can do this by overriding the new_element() method:

new_element()

    $elem = $self->new_element ( ... )

The default implementation of this method simply calls HTML::Native->new():

    return HTML::Native->new ( @_ );

ADVANCED

DYNAMIC GENERATION

You can use anonymous subroutines (closures) to dynamically generate portions of an HTML::Native::List array. For example:

    my $message;
    my $list = HTML::Native::List->new (
      [ h1 => "Dynamic content" ],
      sub { return $message; },
    );
    $message = "Hello world!";
    print $list;
    # prints "<h1>Dynamic content</h1>Hello world!"

The subroutine can return either a single fully-constructed HTML::Native::List object, or a list of arguments ready to be passed to HTML::Native::List->new(). For example:

    sub {
      return HTML::Native::List->new (
        [ img => { src => $image } ],
        [ p => $message ],
      );
    }

or

    sub {
      return ( [ img => { src => $image } ],
               [ p => $message ] );
    }