% my $listview = sprintf '.%sview', $request->listviewmode; # list or editlist

<h2><% eval '$search' ? 'Search results: ' : '' %><% ucfirst( $request->model_class->plural_moniker ) %></h2>

<& .switch   &>
<& $listview &>
<& pager     &>
<& addnew    &>
<& search    &>
    
% # -------------------------------------
<%def .listview>
<%perl>
    my $callback = sub 
    {
        my ( $object ) = @_;
        
        return $request->as_form( mode => 'edit_button',   entity => $object )->render . 
               $request->as_form( mode => 'delete_button', entity => $object )->render;
    };

    my @data = $request->tabulate( $objects, with_colnames => 1, callback => $callback );
    
    my $i = 0;
    
    push @{ $data[0] }, 'Actions';
</%perl>
<div class="NavListTable"><% $request->quick_table( labels => 'T' )->render( @data ) %></div>
</%def>

% # -------------------------------------
<%def .editlistview>
<%perl>
    # Note: turn off stickiness. Otherwise, all the forms will display the values submitted 
    # in the previous action, e.g. addnew.
    my @forms = $request->as_forms( submit          => [ qw( view update edit delete ) ],
                                    reset           => 'reset',
                                    selectnum       => 2,
                                    mode            => 'editlist',
                                    no_textareas    => 1,
                                    sticky          => 0, 
                                    jsfunc          => qq(
if (form._submit.value == "delete") {
    if (confirm("Really DELETE this entry?")) return true;
    return false;
}
),
                                    );

    my %names = $objects->[0]->column_names;
                                    
</%perl>
<div class="FormListTable">
<table border="0">
<tr>
% foreach my $col ( $objects->[0]->display_columns ) {
<th><% $names{ $col } %></th>
% }
<th colspan="5">Actions</th>
</tr>
% foreach my $form ( @forms ) {
<% $request->render_form_as_row( $form ) %>
% }
</table>
</div>
</%def>

% # -------------------------------------
<%def .switch>
% my $other = $request->listviewmode eq 'editlist' ? 'navigable' : 'editable';
<p class="subheading">
<% $request->link( table  => $request->model_class->table,
                   action => 'switchlistmode',
                   label  => "Switch to $other list view",
                   ) %>
</p>
</%def>