-
-
23 May 2022 15:17:22 UTC
- Distribution: Mojolicious
- Source (raw)
- Browse (raw)
- Changes
- Homepage
- How to Contribute
- Repository
- Issues
- Testers (120 / 4 / 6)
- Kwalitee
Bus factor: 6- 90.64% Coverage
- License: artistic_2
- Perl: v5.16.0
- Activity
24 month- Tools
- Download (827.39KB)
- MetaCPAN Explorer
- Permissions
- Subscribe to distribution
- Permalinks
- This version
- Latest version
- NAME
- SYNOPSIS
- DESCRIPTION
- HELPERS
- button_to
- check_box
- color_field
- csrf_button_to
- csrf_field
- date_field
- datetime_field
- email_field
- file_field
- form_for
- hidden_field
- image
- input_tag
- javascript
- label_for
- link_to
- month_field
- number_field
- password_field
- radio_button
- range_field
- search_field
- select_field
- stylesheet
- submit_button
- t
- tag
- tag_with_error
- tel_field
- text_area
- text_field
- time_field
- url_field
- week_field
- METHODS
- SEE ALSO
NAME
Mojolicious::Plugin::TagHelpers - Tag helpers plugin
SYNOPSIS
# Mojolicious $app->plugin('TagHelpers'); # Mojolicious::Lite plugin 'TagHelpers';
DESCRIPTION
Mojolicious::Plugin::TagHelpers is a collection of HTML tag helpers for Mojolicious, based on the HTML Living Standard.
Most form helpers can automatically pick up previous input values and will show them as default. You can also use "param" in Mojolicious::Plugin::DefaultHelpers to set them manually and let necessary attributes always be generated automatically.
% param country => 'germany' unless param 'country'; <%= radio_button country => 'germany' %> Germany <%= radio_button country => 'france' %> France <%= radio_button country => 'uk' %> UK
For fields that failed validation with "validation" in Mojolicious::Plugin::DefaultHelpers the
field-with-error
class will be automatically added through "tag_with_error", to make styling with CSS easier.<input class="field-with-error" name="age" type="text" value="250">
This is a core plugin, that means it is always enabled and its code a good example for learning how to build new plugins, you're welcome to fork it.
See "PLUGINS" in Mojolicious::Plugins for a list of plugins that are available by default.
HELPERS
Mojolicious::Plugin::TagHelpers implements the following helpers.
button_to
%= button_to Test => 'some_get_route' %= button_to Test => some_get_route => {id => 23} => (class => 'menu') %= button_to Test => 'http://example.com/test' => (class => 'menu') %= button_to Remove => 'some_delete_route'
Generate portable
form
tag with "form_for", containing a single button.<form action="/path/to/get/route"> <input type="submit" value="Test"> </form> <form action="/path/to/get/route/23" class="menu"> <input type="submit" value="Test"> </form> <form action="http://example.com/test" class="menu"> <input type="submit" value="Test"> </form> <form action="/path/to/delete/route?_method=DELETE" method="POST"> <input type="submit" value="Remove"> </form>
check_box
%= check_box 'employed' %= check_box employed => 1 %= check_box employed => 1, checked => undef, id => 'foo'
Generate
input
tag of typecheckbox
. Previous input values will automatically get picked up and shown as default.<input name="employed" type="checkbox"> <input name="employed" type="checkbox" value="1"> <input checked id="foo" name="employed" type="checkbox" value="1">
color_field
%= color_field 'background' %= color_field background => '#ffffff' %= color_field background => '#ffffff', id => 'foo'
Generate
input
tag of typecolor
. Previous input values will automatically get picked up and shown as default.<input name="background" type="color"> <input name="background" type="color" value="#ffffff"> <input id="foo" name="background" type="color" value="#ffffff">
csrf_button_to
%= csrf_button_to Remove => 'some_delete_route'
Same as "button_to", but also includes a "csrf_field".
<form action="/path/to/delete/route?_method=DELETE" method="POST"> <input name="csrf_token" type="hidden" value="fa6a08..."> <input type="submit" value="Remove"> </form>
csrf_field
%= csrf_field
Generate
input
tag of typehidden
with "csrf_token" in Mojolicious::Plugin::DefaultHelpers.<input name="csrf_token" type="hidden" value="fa6a08...">
date_field
%= date_field 'end' %= date_field end => '2012-12-21' %= date_field end => '2012-12-21', id => 'foo'
Generate
input
tag of typedate
. Previous input values will automatically get picked up and shown as default.<input name="end" type="date"> <input name="end" type="date" value="2012-12-21"> <input id="foo" name="end" type="date" value="2012-12-21">
datetime_field
%= datetime_field 'end' %= datetime_field end => '2012-12-21T23:59:59' %= datetime_field end => '2012-12-21T23:59:59', id => 'foo'
Generate
input
tag of typedatetime-local
. Previous input values will automatically get picked up and shown as default.<input name="end" type="datetime-local"> <input name="end" type="datetime-local" value="2012-12-21T23:59:59"> <input id="foo" name="end" type="datetime-local" value="2012-12-21T23:59:59">
email_field
%= email_field 'notify' %= email_field notify => 'nospam@example.com' %= email_field notify => 'nospam@example.com', id => 'foo'
Generate
input
tag of typeemail
. Previous input values will automatically get picked up and shown as default.<input name="notify" type="email"> <input name="notify" type="email" value="nospam@example.com"> <input id="foo" name="notify" type="email" value="nospam@example.com">
file_field
%= file_field 'avatar' %= file_field 'avatar', id => 'foo'
Generate
input
tag of typefile
.<input name="avatar" type="file"> <input id="foo" name="avatar" type="file">
form_for
%= form_for login => begin %= text_field 'first_name' %= submit_button % end %= form_for login => {format => 'txt'} => (method => 'POST') => begin %= text_field 'first_name' %= submit_button % end %= form_for '/login' => (enctype => 'multipart/form-data') => begin %= text_field 'first_name', disabled => 'disabled' %= submit_button % end %= form_for 'http://example.com/login' => (method => 'POST') => begin %= text_field 'first_name' %= submit_button % end %= form_for some_delete_route => begin %= submit_button 'Remove' % end
Generate portable
form
tag with "url_for" in Mojolicious::Controller. For routes that do not allowGET
, amethod
attribute with the valuePOST
will be automatically added. And for methods other thanGET
orPOST
, an_method
query parameter will be added as well.<form action="/path/to/login"> <input name="first_name" type="text"> <input type="submit" value="Ok"> </form> <form action="/path/to/login.txt" method="POST"> <input name="first_name" type="text"> <input type="submit" value="Ok"> </form> <form action="/path/to/login" enctype="multipart/form-data"> <input disabled="disabled" name="first_name" type="text"> <input type="submit" value="Ok"> </form> <form action="http://example.com/login" method="POST"> <input name="first_name" type="text"> <input type="submit" value="Ok"> </form> <form action="/path/to/delete/route?_method=DELETE" method="POST"> <input type="submit" value="Remove"> </form>
hidden_field
%= hidden_field foo => 'bar' %= hidden_field foo => 'bar', id => 'bar'
Generate
input
tag of typehidden
.<input name="foo" type="hidden" value="bar"> <input id="bar" name="foo" type="hidden" value="bar">
image
%= image '/images/foo.png' %= image '/images/foo.png', alt => 'Foo'
Generate portable
img
tag.<img src="/path/to/images/foo.png"> <img alt="Foo" src="/path/to/images/foo.png">
input_tag
%= input_tag 'first_name' %= input_tag first_name => 'Default' %= input_tag 'employed', type => 'checkbox'
Generate
input
tag. Previous input values will automatically get picked up and shown as default.<input name="first_name"> <input name="first_name" value="Default"> <input name="employed" type="checkbox">
javascript
%= javascript '/script.js' %= javascript '/script.js', defer => undef %= javascript begin const a = 'b'; % end
Generate portable
script
tag for JavaScript asset.<script src="/path/to/script.js"></script> <script defer src="/path/to/script.js"></script> <script><![CDATA[ const a = 'b'; ]]></script>
label_for
%= label_for first_name => 'First name' %= label_for first_name => 'First name', class => 'user' %= label_for first_name => begin First name % end %= label_for first_name => (class => 'user') => begin First name % end
Generate
label
tag.<label for="first_name">First name</label> <label class="user" for="first_name">First name</label> <label for="first_name"> First name </label> <label class="user" for="first_name"> First name </label>
link_to
%= link_to Home => 'index' %= link_to Home => 'index' => {format => 'txt'} => (class => 'menu') %= link_to index => {format => 'txt'} => (class => 'menu') => begin Home % end %= link_to Contact => 'mailto:sri@example.com' <%= link_to index => begin %>Home<% end %> <%= link_to '/file.txt' => begin %>File<% end %> <%= link_to 'https://mojolicious.org' => begin %>Mojolicious<% end %> <%= link_to url_for->query(foo => 'bar')->to_abs => begin %>Retry<% end %>
Generate portable
a
tag with "url_for" in Mojolicious::Controller, defaults to using the capitalized link target as content.<a href="/path/to/index">Home</a> <a class="menu" href="/path/to/index.txt">Home</a> <a class="menu" href="/path/to/index.txt"> Home </a> <a href="mailto:sri@example.com">Contact</a> <a href="/path/to/index">Home</a> <a href="/path/to/file.txt">File</a> <a href="https://mojolicious.org">Mojolicious</a> <a href="http://127.0.0.1:3000/current/path?foo=bar">Retry</a>
month_field
%= month_field 'vacation' %= month_field vacation => '2012-12' %= month_field vacation => '2012-12', id => 'foo'
Generate
input
tag of typemonth
. Previous input values will automatically get picked up and shown as default.<input name="vacation" type="month"> <input name="vacation" type="month" value="2012-12"> <input id="foo" name="vacation" type="month" value="2012-12">
number_field
%= number_field 'age' %= number_field age => 25 %= number_field age => 25, id => 'foo', min => 0, max => 200
Generate
input
tag of typenumber
. Previous input values will automatically get picked up and shown as default.<input name="age" type="number"> <input name="age" type="number" value="25"> <input id="foo" max="200" min="0" name="age" type="number" value="25">
password_field
%= password_field 'pass' %= password_field 'pass', id => 'foo'
Generate
input
tag of typepassword
.<input name="pass" type="password"> <input id="foo" name="pass" type="password">
radio_button
%= radio_button 'test' %= radio_button country => 'germany' %= radio_button country => 'germany', checked => undef, id => 'foo'
Generate
input
tag of typeradio
. Previous input values will automatically get picked up and shown as default.<input name="test" type="radio"> <input name="country" type="radio" value="germany"> <input checked id="foo" name="country" type="radio" value="germany">
range_field
%= range_field 'age' %= range_field age => 25 %= range_field age => 25, id => 'foo', min => 0, max => 200
Generate
input
tag of typerange
. Previous input values will automatically get picked up and shown as default.<input name="age" type="range"> <input name="age" type="range" value="25"> <input id="foo" max="200" min="200" name="age" type="range" value="25">
search_field
%= search_field 'q' %= search_field q => 'perl' %= search_field q => 'perl', id => 'foo'
Generate
input
tag of typesearch
. Previous input values will automatically get picked up and shown as default.<input name="q" type="search"> <input name="q" type="search" value="perl"> <input id="foo" name="q" type="search" value="perl">
select_field
%= select_field country => ['de', 'en'] %= select_field country => [[Germany => 'de'], 'en'], id => 'eu' %= select_field country => [[Germany => 'de', selected => 'selected'], 'en'] %= select_field country => [c(EU => [[Germany => 'de'], 'en'], id => 'eu')] %= select_field country => [c(EU => ['de', 'en']), c(Asia => ['cn', 'jp'])]
Generate
select
andoption
tags from array references andoptgroup
tags from Mojo::Collection objects. Previous input values will automatically get picked up and shown as default.<select name="country"> <option value="de">de</option> <option value="en">en</option> </select> <select id="eu" name="country"> <option value="de">Germany</option> <option value="en">en</option> </select> <select name="country"> <option selected="selected" value="de">Germany</option> <option value="en">en</option> </select> <select name="country"> <optgroup id="eu" label="EU"> <option value="de">Germany</option> <option value="en">en</option> </optgroup> </select> <select name="country"> <optgroup label="EU"> <option value="de">de</option> <option value="en">en</option> </optgroup> <optgroup label="Asia"> <option value="cn">cn</option> <option value="jp">jp</option> </optgroup> </select>
stylesheet
%= stylesheet '/foo.css' %= stylesheet '/foo.css', title => 'Foo style' %= stylesheet begin body {color: #000} % end
Generate portable
style
orlink
tag for CSS asset.<link href="/path/to/foo.css" rel="stylesheet"> <link href="/path/to/foo.css" rel="stylesheet" title="Foo style"> <style><![CDATA[ body {color: #000} ]]></style>
submit_button
%= submit_button %= submit_button 'Ok!', id => 'foo'
Generate
input
tag of typesubmit
.<input type="submit" value="Ok"> <input id="foo" type="submit" value="Ok!">
t
%= t div => 'test & 123'
Alias for "tag".
<div>test & 123</div>
tag
%= tag 'br' %= tag 'div' %= tag 'div', id => 'foo', hidden => undef %= tag 'div', 'test & 123' %= tag 'div', id => 'foo', 'test & 123' %= tag 'div', data => {my_id => 1, Name => 'test'}, 'test & 123' %= tag div => begin test & 123 % end <%= tag div => (id => 'foo') => begin %>test & 123<% end %>
Alias for "new_tag" in Mojo::DOM.
<br> <div></div> <div id="foo" hidden></div> <div>test & 123</div> <div id="foo">test & 123</div> <div data-my-id="1" data-name="test">test & 123</div> <div> test & 123 </div> <div id="foo">test & 123</div>
Very useful for reuse in more specific tag helpers.
my $output = $c->tag('meta'); my $output = $c->tag('meta', charset => 'UTF-8'); my $output = $c->tag('div', '<p>This will be escaped</p>'); my $output = $c->tag('div', sub { '<p>This will not be escaped</p>' });
Results are automatically wrapped in Mojo::ByteStream objects to prevent accidental double escaping in
ep
templates.tag_with_error
%= tag_with_error 'input', class => 'foo'
Same as "tag", but adds the class
field-with-error
.<input class="foo field-with-error">
tel_field
%= tel_field 'work' %= tel_field work => '123456789' %= tel_field work => '123456789', id => 'foo'
Generate
input
tag of typetel
. Previous input values will automatically get picked up and shown as default.<input name="work" type="tel"> <input name="work" type="tel" value="123456789"> <input id="foo" name="work" type="tel" value="123456789">
text_area
%= text_area 'story' %= text_area 'story', cols => 40 %= text_area story => 'Default', cols => 40 %= text_area story => (cols => 40) => begin Default % end
Generate
textarea
tag. Previous input values will automatically get picked up and shown as default.<textarea name="story"></textarea> <textarea cols="40" name="story"></textarea> <textarea cols="40" name="story">Default</textarea> <textarea cols="40" name="story"> Default </textarea>
text_field
%= text_field 'first_name' %= text_field first_name => 'Default' %= text_field first_name => 'Default', class => 'user'
Generate
input
tag of typetext
. Previous input values will automatically get picked up and shown as default.<input name="first_name" type="text"> <input name="first_name" type="text" value="Default"> <input class="user" name="first_name" type="text" value="Default">
time_field
%= time_field 'start' %= time_field start => '23:59:59' %= time_field start => '23:59:59', id => 'foo'
Generate
input
tag of typetime
. Previous input values will automatically get picked up and shown as default.<input name="start" type="time"> <input name="start" type="time" value="23:59:59"> <input id="foo" name="start" type="time" value="23:59:59">
url_field
%= url_field 'address' %= url_field address => 'https://mojolicious.org' %= url_field address => 'https://mojolicious.org', id => 'foo'
Generate
input
tag of typeurl
. Previous input values will automatically get picked up and shown as default.<input name="address" type="url"> <input name="address" type="url" value="https://mojolicious.org"> <input id="foo" name="address" type="url" value="https://mojolicious.org">
week_field
%= week_field 'vacation' %= week_field vacation => '2012-W17' %= week_field vacation => '2012-W17', id => 'foo'
Generate
input
tag of typeweek
. Previous input values will automatically get picked up and shown as default.<input name="vacation" type="week"> <input name="vacation" type="week" value="2012-W17"> <input id="foo" name="vacation" type="week" value="2012-W17">
METHODS
Mojolicious::Plugin::TagHelpers inherits all methods from Mojolicious::Plugin and implements the following new ones.
register
$plugin->register(Mojolicious->new);
Register helpers in Mojolicious application.
SEE ALSO
Module Install Instructions
To install Mojolicious, copy and paste the appropriate command in to your terminal.
cpanm Mojolicious
perl -MCPAN -e shell install Mojolicious
For more information on module installation, please visit the detailed CPAN module installation guide.