AcePerl
view release on metacpan or search on metacpan
Ace/Browser/SearchSubs.pm view on Meta::CPAN
TR(th({-class=>'resultstitle'},$title));
unless (@$objects) {
print end_table,p();
return;
}
print start_Tr,start_td;
my $need_navbar = $offset > 0 || $count >= MAXOBJECTS;
my @buttons = make_navigation_bar($offset,$count) if $need_navbar;
print table({-width=>'50%',-align=>'CENTER'},Tr(@buttons)) if $need_navbar;
print table({-width=>'100%'},tableize(ROWS,COLS,\@rheaders,\@cheaders,@$objects));
print end_td,end_Tr,end_table,p();
}
# ------ ugly internal routines for scrolling along the search results list -----
sub make_navigation_bar {
my($offset,$count) = @_;
my (@buttons);
my ($page,$pages) = (1+int($offset/MAXOBJECTS),1+int($count/MAXOBJECTS));
my $c = Configuration();
my $icons = $c->Icons || '/ico';
my $spacer = "$icons/". SPACER_ICON;
my $left = "$icons/". LEFT_ICON;
my $right = "$icons/". RIGHT_ICON;
my $url = url(-absolute=>1,-query=>1);
# my $url = self_url();
push(@buttons,td({-align=>'RIGHT',-valign=>'MIDDLE'},
$offset > 0
? a({-href=>$url
. '&scroll=-' . MAXOBJECTS},
img({-src=>$left,-alt=>'< PREVIOUS',-border=>0}))
: img({-src=>$spacer,-alt=>''})
)
);
my $p = 1;
while ($pages/$p > 25) { $p++; }
my (@v,%v);
for (my $i=1;$i<=$pages;$i++) {
next unless ($i == $page) or (($i-1) % $p == 0);
my $s = ($i - $page) * MAXOBJECTS;
push(@v,$s);
$v{$s}=$i;
}
my @hidden;
Delete('scroll');
Delete('Go');
foreach (param()) {
push(@hidden,hidden(-name=>$_,-value=>[param($_)]));
}
push(@buttons,
td({-valign=>'MIDDLE',-align=>'CENTER'},
start_form({-name=>'form1'}),
submit(-name=>'Go',-label=>'Go to'),
'page',
popup_menu(-name=>'scroll',-Values=>\@v,-labels=>\%v,
-default=>($page-1)*MAXOBJECTS-$offset,
-override=>1,
-onChange=>'document.form1.submit()'),
"of $pages",
@hidden,
end_form()
)
);
push(@buttons,td({-align=>'LEFT',-valign=>'MIDDLE'},
$offset + MAXOBJECTS <= $count
? a({-href=>$url
. '&scroll=+' . MAXOBJECTS},
img({-src=>$right,-alt=>'NEXT >',-border=>0}))
: img({-src=>$spacer,-alt=>''})
)
);
@buttons;
}
sub min { return $_[0] < $_[1] ? $_[0] : $_[1] }
#line 295
sub tableize {
my($rows,$columns,$rheaders,$cheaders,@elements) = @_;
my($result);
my($row,$column);
$result .= TR($rheaders ? th(' ') : (),th({-align=>'LEFT'},$cheaders))
if $cheaders and @$cheaders > 1;
for ($row=0;$row<$rows;$row++) {
next unless defined($elements[$row]);
$result .= "<TR>";
$result .= qq(<TH ALIGN=LEFT CLASS="search">$rheaders->[$row]</TH>) if $rheaders;
for ($column=0;$column<$columns;$column++) {
$result .= qq(<TD VALIGN=TOP CLASS="search">) . $elements[$column*$rows + $row] . "</TD>"
if defined($elements[$column*$rows + $row]);
}
$result .= "</TR>";
}
return $result;
}
1;
__END__
=back
=head1 BUGS
Please report them.
=head1 SEE ALSO
L<Ace::Object>, L<Ace::Browser::SiteDefs>, L<Ace::Browsr::AceSubs>,
the README.ACEBROWSER file.
=head1 AUTHOR
Lincoln Stein <lstein@cshl.org>.
( run in 0.827 second using v1.01-cache-2.11-cpan-39bf76dae61 )