NAME

Text::HyperScript - The HyperScript like library for Perl.

SYNOPSIS

use feature qw(say);
use Text::HyperScript qw(h true);

# tag only
say h('hr');          # => '<hr />'
say h(script => q{}); # => '<script></script>'

# tag with content
say h('p', 'hi,');    # => '<p>hi,</p>'
say h('p', ['hi,']);  # => '<p>hi,</p>'

say h('p', 'hi', h('b', ['anonymous']));  # => '<p>hi,<b>anonymous</b></p>'
say h('p', 'foo', ['bar'], 'baz');        # => '<p>foobarbarz</p>'

# tag with attributes
say h('hr', { id => 'foo' });                     # => '<hr id="foo" />'
say h('hr', { id => 'foo', class => 'bar'});      # => '<hr class="bar" id="foo">'
say h('hr', { class => ['foo', 'bar', 'baz'] });  # => '<hr class="bar baz foo">' 

# tag with prefixed attributes
say h('hr', { data => { foo => 'bar' } });              # => '<hr data-foo="bar">'
say h('hr', { data => { foo => [qw(foo bar baz)] } });  # => '<hr data-foo="bar baz foo">'

# tag with value-less attribute
say h('script', { crossorigin => true }, ""); # <script crossorigin></script>

DESCRIPTION

This module is a html/xml string generator like as hyperscirpt.

The name of this module contains HyperScript, but this module features isn't same of another language or original implementation.

This module has submodule for some tagset:

HTML5: Text::HyperScript::HTML5

FUNCTIONS

h

This function makes html/xml text by perl code.

This function is complex. but it's powerful.

Arguments:

h($tag, [ \%attrs, $content, ...])
$tag

Tag name of element.

This value should be Str value.

\%attrs

Attributes of element.

Result of attributes sorted by alphabetical according.

You could pass to theses types as attribute values:

Str

If you passed to this type, attribute value became a Str value.

For example:

h('hr', { id => 'id' }); # => '<hr id="id" />'
Text::HyperScript::Boolean

If you passed to this type, attribute value became a value-less attribute.

For example:

# `true()` returns Text::HyperScript::Boolean value as !!1 (true)
h('script', { crossorigin => true }); # => '<script crossorigin></script>'
ArrayRef[Str]

If you passed to this type, attribute value became a sorted (alphabetical according), delimited by whitespace Str value,

For example:

h('hr', { class => [qw( foo bar baz )] });
# => '<hr class="bar baz foo">'
HashRef[ Str | ArrayRef[Str] | Text::HyperScript::Boolean ]

This type is a shorthand of prefixed attributes.

For example:

h('hr', { data => { id => 'foo', flags => [qw(bar baz)], enabled => true } });
# => '<hr data-enabled data-flags="bar baz" data-id="foo" />'
$contnet

Contents of element.

You could pass to these types:

Str

Plain text as content.

This value always applied html/xml escape.

Text::HyperScript::NodeString

Raw html/xml string as content.

This value does not applied html/xml escape, you should not use this type for untrusted text.

ArrayRef[ Str | Text::HyperScript::NodeString ]

The ArrayRef of $content.

This type value is flatten of other $content value.

text

This function returns a html/xml escaped text.

If you use untrusted stirng for display, you should use this function for wrapping untrusted content.

raw

This function makes a instance of Text::HyperScript::NodeString.

Instance of Text::HyperScript::NodeString has to_string method, that return text with html/xml markup.

The value of Text::HyperScript::NodeString always does not escaped, you should not use this function for display untrusted content. Please use text instead of this function.

true / false

This functions makes instance of Text::HyperScript::Boolean value.

Instance of Text::HyperScript::Boolean has two method like as is_true and is_false, these method returns that value pointed true or false values.

Usage of these functions for make html5 value-less attribute.

For example:

h('script', { crossorigin => true }, ''); # => '<script crossorigin></script>'

QUESTION AND ANSWERS

How do I get element of empty content like as `script`?

This case you chould gets element string by pass to empty string.

For example:

h('script', ''); # <script></script>

Why all attributes and attribute values sorted by alphabetical according?

This reason that gets same result on randomized orderd hash keys.

LICENSE

Copyright (C) OKAMURA Naoki a.k.a nyarla.

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

AUTHOR

OKAMURA Naoki a.k.a nyarla: <nyarla@kalaclista.com>

SEE ALSO

Text::HyperScript::HTML5