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

NAME

Plack::Component::Tags::HTML - Plack component for Tags with HTML output.

SYNOPSIS

 package App;

 use base qw(Plack::Component::Tags::HTML);

 sub _css {
        my $self = shift;
        $self->{'css'}->put(
                # Structure defined by CSS::Struct
        );
        return;
 }

 sub _prepare_app {
        my $self = shift;
        # Preparation of app, before Plack::Component::call().
        return;
 }

 sub _process_actions {
        my ($self, $env) = @_;
        # Process actions in Plack::Component::call() before output.
        return;
 }

 sub _tags_middle {
        my $self = shift;
        $self->{'tags'}->put(
                # Structure defined by Tags
        );
        return;
 }

DESCRIPTION

This component is helper for creating Plack application with Tags. It is based on Plack::Component.

ACCESSOR METHODS

author

Author string to HTML head. Default value is undef.

content_type

Content type for output. Default value is 'text/html; charset=__ENCODING__'.

css

CSS::Struct::Output object. Default value is CSS::Struct::Output::Raw->new.

encoding

Set encoding for output. Default value is 'utf-8'.

favicon

Link to favicon. Default value is undef.

flag_begin

Flag that means begin of html writing via Tags::HTML::Page::Begin. Example is in EXAMPLE2. Default value is 1.

flag_end

Flag that means end of html writing via Tags::HTML::Page::End. Example is in EXAMPLE2. Default value is 1.

generator

Generator string to HTML head. Default value is undef.

psgi_app

PSGI application to run instead of normal process. Intent of this is change application in _process_actions method. Default value is undef.

status_code

HTTP status code. Default value is 200.

title

Title of page. Default value is undef.

tags

Tags::Output object. Default value is

 Tags::Output::Raw->new(
         'xml' => 1,
         'no_simple' => ['textarea'],
         'preserved' => ['pre'],
 ));

METHODS TO OVERWRITE

_css

Method to set css via $self->{'css'} object. Argument is $self only.

_prepare_app

Method to set app preparation part. Called only once on start. Argument is $self only.

_process_actions

Method to set app processing part. Called in each call before creating of output. Argument is $self and $env.

_tags_middle

Method to set tags via $self->{'tags'} object. Argument is $self only.

METHODS IMPLEMENTED

call

Inherited from Plack::Component. There is run of:

 $self->_process_actions($env);
 $self->_css;
 $self->_tags;

After it Generate and encode output from Tags to output with HTTP code. HTTP status code is defined by status_code() method and Content-Type is defined by content_type method.

prepare_app

Initialize default values for:

 tags()
 css()
 encoding()
 content_type()
 status_code()

and run _prepare_app().

ERRORS

 prepare_app():
         Accessor 'css' must be a 'CSS::Struct::Output' object.
         Accessor 'tags' must be a 'Tags::Output' object.

EXAMPLE1

 package App;

 use base qw(Plack::Component::Tags::HTML);
 use strict;
 use warnings;

 sub _tags_middle {
         my $self = shift;

         $self->{'tags'}->put(
                 ['d', 'Hello world'],
         );

         return;
 }

 package main;

 use Plack::Runner;

 my $app = App->new(
         'title' => 'My app',
 )->to_app;
 my $runner = Plack::Runner->new;
 $runner->run($app);

 # Output:
 # HTTP::Server::PSGI: Accepting connections at http://0:5000/

 # Output by HEAD to http://localhost:5000/:
 # 200 OK
 # Date: Sun, 31 Oct 2021 10:35:33 GMT
 # Server: HTTP::Server::PSGI
 # Content-Length: 166
 # Content-Type: text/html; charset=utf-8
 # Client-Date: Sun, 31 Oct 2021 10:35:33 GMT
 # Client-Peer: 127.0.0.1:5000
 # Client-Response-Num: 1

 # Output by GET to http://localhost:5000/:
 # <!DOCTYPE html>
 # <html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>My app</title></head><body>Hello world</body></html>

EXAMPLE2

 package App;

 use base qw(Plack::Component::Tags::HTML);
 use strict;
 use warnings;

 sub _tags_middle {
         my $self = shift;

         $self->{'tags'}->put(
                 ['d', 'Hello world'],
         );

         return;
 }

 package main;

 use Plack::Runner;

 my $app = App->new(
         'flag_begin' => 0,
         'flag_end' => 0,
         'title' => 'My app',
 )->to_app;
 my $runner = Plack::Runner->new;
 $runner->run($app);

 # HTTP::Server::PSGI: Accepting connections at http://0:5000/

 # Output by HEAD to http://localhost:5000/:
 # 200 OK
 # Date: Sun, 27 Feb 2022 18:52:59 GMT
 # Server: HTTP::Server::PSGI
 # Content-Length: 11
 # Content-Type: text/html; charset=utf-8
 # Client-Date: Sun, 27 Feb 2022 18:52:59 GMT
 # Client-Peer: 127.0.0.1:5000
 # Client-Response-Num: 1

 # Output by GET to http://localhost:5000/:
 # Hello world

DEPENDENCIES

CSS::Struct::Output::Raw, Encode, Plack::Component, Plack::Util::Accessor, Tags::HTML::Page::Begin, Tags::HTML::Page::End, Tags::Output::Raw.

SEE ALSO

Plack::Component

Base class for PSGI endpoints

REPOSITORY

https://github.com/michal-josef-spacek/Plack-Component-Tags-HTML

AUTHOR

Michal Josef Špaček mailto:skim@cpan.org

http://skim.cz

LICENSE AND COPYRIGHT

© Michal Josef Špaček 2020-2022

BSD 2-Clause License

VERSION

0.04