<%perl>
my %a;
my @vars;
#---------- "mode" argument parsing and mode menu at top of page ----------
# for debugging, invoke as
# http://www.chiark.greenend.org.uk/ucgi/~clareb/mason/pirates/pirate-route?debug=1
@vars= ({ Name => 'Ocean',
Before => 'Ocean: ',
CmpCanon => sub { ucfirst lc $_[0] },
Values => [ ocean_list() ]
}, { Name => 'Dropdowns',
Before => 'Interface: ',
CmpCanon => sub { !!$_[0] },
Values => [ [ 0, 'Type in names' ],
[ 4, 'Select from menus' ] ]
});
foreach my $var (@vars) {
my $name= $var->{Name};
my $lname= lc $name;
$var->{Before}= '' unless exists $var->{Before};
$var->{CmpCanon}= sub { $_[0]; } unless exists $var->{CmpCanon};
foreach my $val (@{ $var->{Values} }) {
next if ref $val;
$val= [ $val, encode_entities($val) ];
}
if (exists $ARGS{$lname}) {
$a{$name}= $ARGS{$lname};
} else {
$a{$name}= $var->{Values}[0][0];
}
}
my %baseqf;
foreach my $var (@vars) {
my $lname= lc $var->{Name};
next unless exists $ARGS{$lname};
$baseqf{$lname}= $ARGS{$lname};
}
my %queryqf;
foreach my $var (keys %ARGS) {
next unless $var =~
m/^(?:routestring|islandid\d|archipelago\d|debug)$/;
$queryqf{$var}= $ARGS{$var};
}
my $uri= URI->new($m->current_comp()->name());
my $quri= sub { $uri->query_form(@_); $uri->path_query(); };
foreach my $var (@vars) {
my $name= $var->{Name};
my $lname= lc $var->{Name};
my $delim= $var->{Before};
my $canon= &{$var->{CmpCanon}}($a{$name});
my $cvalix= 0;
foreach my $valr (@{ $var->{Values} }) {
print $delim; $delim= "\n|\n";
my ($value,$html) = @$valr;
my $iscurrent= &{$var->{CmpCanon}}($value) eq $canon;
my $after;
if ($iscurrent) {
print '';
$after= '';
} else {
my %qf= (%baseqf,%queryqf);
delete $qf{$lname};
$qf{$lname}= $value if $cvalix;
print '';
$after= '';
}
print $html, $after;
$cvalix++;
}
print "\n\n";
}
#---------- initial checks, startup, main entry form ----------
die "unknown ocean $a{Ocean} ?"
unless grep { $_ eq $a{Ocean} } ocean_list();
db_setocean($a{Ocean});
db_connect();
%perl>
<%args>
$debug => 0
$routestring => ''
%args>
Specify route
%#---------- debugging and epilogue ----------
% if ($debug) {
Debug log:
% }
<%init>
use CommodsWeb;
use HTML::Entities;
use URI::Escape;
%init>