NAME
Dancer2::Plugin::Menu - Automatically generate an HTML menu for your Dancer2 app
VERSION
version 0.007
SYNOPSIS
In your app:
use Dancer2;
use Dancer2::Plugin::Menu;
menu_item(
{ title => 'My Parent Item', weight => 3 },
get 'path' => sub { template },
);
menu_item(
{ title => 'My Child1 Item', weight => 3 },
get 'path/menu1' => sub { template },
);
menu_item(
{ title => 'My Child2 Item', weight => 4 },
get 'path/menu2' => sub { template },
);
In your template file:
<% menu %>
This will generate a hierarchical menu that will look like this when the path/menu1
route is visted:
<ul><li class="active">Path
<ul><li class="active">My Child1 Item</li>
<li>My Child2 Item</li>
</ul>
</ul>
DESCRIPTION
This module generates HTML for routes wrapped in the menu_item
keyword. Menu items will be injected into the template wherever the <% menu %>
tag is located. Child menu items are wrapped in <li%>
HTML tags which are themselves wrapped in a <ul%>
tag associated with the parent menu item. Menu items within the current route are given the active
class so they can be styled.
The module is in early development stages and currently has few options. It has not been heavily tested and there are likely bugs especially with dynaimc paths which are completely untested at this time. The module should work and be adqueate for simple menu structures, however.
KEYWORDS
menu_item( { [title => $str], [weight => $num] }, ROUTE METHOD
REGEXP
, CODE
)
Wraps a conventional route handler preceded by a required hash reference containing data that will be applied to the route's endpoint.
Two keys can be supplied in the hash reference: a title
for the menu item and a weight
. The title
will be used as the content for the menu items. The weight
will determine the order of the menu items. Heavier items (with larger values) will "sink" to the bottom compared to sibling menu items. If two sibling menu items have the same weight, the menu items will be ordered alphabetically.
Menu items that are not endpoints in the route or that don't have a title
, will automatically generate a title according to the path segment's name. For example, this route:
/categories/fun food/desserts
is converted to a hierachy of menu items entitled Categories
, Fun food
, and Desserts
. Note that captialization is automatically added. Automatic titles will be overridden with endpoint specific titles if they are supplied in a later menu_item
call.
If the weight
is not supplied it will default to a value of 5
.
CONFIGURATION
Add a <% menu %>
tag in the appropriate location withing your Dancer2 template files. If desired, add css for <li%>
tags in the active
class.
REQUIRES
SUPPORT
Perldoc
You can find documentation for this module with the perldoc command.
perldoc Dancer2::Plugin::Menu
Websites
The following websites have more information about this module, and may be of help to you. As always, in addition to those websites please use your favorite search engine to discover more resources.
MetaCPAN
A modern, open-source CPAN search engine, useful to view POD in HTML format.
Source Code
The code is open to the world, and available for you to hack on. Please feel free to browse it and play with it, or whatever. If you want to contribute patches, please send me a diff or prod me to pull from your repository :)
https://github.com/sdondley/Dancer2-Plugin-Menu
git clone git://github.com/sdondley/Dancer2-Plugin-Menu.git
BUGS AND LIMITATIONS
You can make new bug reports, and view existing ones, through the web interface at https://github.com/sdondley/Dancer2-Plugin-Menu/issues.
INSTALLATION
See perlmodinstall for information and options on installing Perl modules.
SEE ALSO
AUTHOR
Steve Dondley <s@dondley.com>
COPYRIGHT AND LICENSE
This software is copyright (c) 2018 by Steve Dondley.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.