The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package TestApp::Controller::Root;

use Moose;
BEGIN { extends 'Catalyst::Controller' }
use CatalystX::Menu::mcDropdown;
use Data::Dumper;

__PACKAGE__->config(namespace => q{});

my $frozen_tree = <<'EOF';
{
    'About us' => {
        'children' => {},
        'menutitle' => 'About us',
        'uri' => bless( do{\(my $o = 'http://localhost/about/us')}, 'URI::http' )
    },
    'Main' => {
        'children' => {
            'Public' => {
                'children' => {},
                'menutitle' => 'A public function',
                'uri' => bless( do{\(my $o = 'http://localhost/public')}, 'URI::http' )
            }
        }
    }
};
EOF

sub begin :Private {
    my ($self, $c) = @_;

    my $menu = CatalystX::Menu::mcDropdown->new(
        context => $c,
        ul_id => 'navlist',
        ul_class => 'mcdropdown_menu',
        menupath_attr => 'MenuPath',
        menutitle_attr => 'MenuTitle',
        top_order => [qw(Main * Help)],
        filter => sub {
            my ($c, %action) = @_;
            return
            map { $_, $action{$_} }
            grep { $action{$_}->name =~ /^(?:public|aboutus)$/ }
            keys %action;
        },
    );

    $c->stash->{menu} = $menu->output;
}

sub big_menu :Local {
    my ($self, $c) = @_;

    my $menu = CatalystX::Menu::mcDropdown->new(
        context => $c,
        ul_id => 'navlist',
        ul_class => 'mcdropdown_menu',
        menupath_attr => 'MenuPath',
        menutitle_attr => 'MenuTitle',
        #top_order => [qw(Main * Help)],
    );

    $c->res->body($menu->output);
}

sub index :Path :Args(0) {
    my ($self, $c) = @_;
}

sub menu :Local {
    my ($self, $c) = @_;
    $c->res->body($c->stash->{menu});
}

sub menu_in_div :Local {
    my ($self, $c) = @_;
    $c->res->body($c->stash->{menu_in_div});
}

sub accounts
:Local
:MenuPath(/Customer/Accounts)
:MenuTitle('Customer accounts')
{
    my ($self, $c) = @_;

    $c->res->body('customer accounts');
}

sub orders
:Local
:MenuPath(/Customer/Orders)
:MenuTitle('Customer orders')
{
    my ($self, $c) = @_;

    $c->res->body('customer orders');
}

sub public
:Local
:MenuPath(/Main/Public)
:MenuTitle('A public function')
{
    my ($self, $c) = @_;

    $c->res->body('public action');
}

sub aboutus
:Path(/about/us)
:MenuPath(/About us)
:MenuTitle('About us')
{
    my ($self, $c) = @_;
    $c->res->body('about us action');
}

1;