X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.web-live.git;a=blobdiff_plain;f=yarrg%2Fweb%2Froute;fp=yarrg%2Fweb%2Froute;h=0000000000000000000000000000000000000000;hp=9c7200c39480df0343ab70b7615e4e994316b3d2;hb=63f1acf6e7821a94d3a906ba831203ff916e7893;hpb=c363ec70c47a05f429b3bda15f4a4e42d5233eb2 diff --git a/yarrg/web/route b/yarrg/web/route deleted file mode 100644 index 9c7200c..0000000 --- a/yarrg/web/route +++ /dev/null @@ -1,345 +0,0 @@ -Specify route - -<%perl> -my %a; -my @vars; - -# for output: -my @archipelagoes; -my @islandids; -my %islandid2; - -#---------- "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 ---------- - -dbw_connect($a{Ocean}); - - -<%args> -$debug => 0 -$routestring => '' - - -

Specify route

-
- -%#---------- textbox, user enters route as string ---------- -% if (!$a{Dropdowns}) { - -Enter route (islands, or archipelagoes, separated by |s or commas; - abbreviations are OK):
- - - -
-
 

- -% } else { #---------- dropdowns, user selects from menus ---------- - -<%perl> -my ($sth,$row);; -my @archlistdata; -my %islandlistdata; -$islandlistdata{'none'}= [ [ "none", "Select island..." ] ]; - -my $optionlistmap= sub { - my ($optlist, $selected) = @_; - my $out=''; - foreach my $entry (@$optlist) { - $out.= sprintf('', - encode_entities($entry->[0]), - defined $selected && $entry->[0] eq $selected - ? 'selected' : '', - encode_entities($entry->[1])); - } - return $out; -}; - -my $dbh= dbw_connect($a{Ocean}); - -$sth= $dbh->prepare("SELECT DISTINCT archipelago FROM islands - ORDER BY archipelago;"); -$sth->execute(); - -while ($row=$sth->fetchrow_arrayref) { - my ($arch)= @$row; - push @archlistdata, [ $arch, $arch ]; - $islandlistdata{$arch}= [ [ "none", "Whole arch" ] ]; -} - -$sth= $dbh->prepare("SELECT islandid,islandname,archipelago - FROM islands - ORDER BY islandname;"); -$sth->execute(); - -while ($row=$sth->fetchrow_arrayref) { - my $arch= $row->[2]; - push @{ $islandlistdata{'none'} }, [ @$row ]; - push @{ $islandlistdata{$arch} }, [ @$row ]; - $islandid2{$row->[0]}= { Name => $row->[1], Arch => $arch }; -} - -my %resetislandlistdata; -foreach my $arch (keys %islandlistdata) { - $resetislandlistdata{$arch}= - $optionlistmap->($islandlistdata{$arch}, ''); -} - - - - - - - - - - -% for my $dd (0..$a{Dropdowns}-1) { - -% } - - - -% for my $dd (0..$a{Dropdowns}-1) { -% my $arch= $ARGS{"archipelago$dd"}; -% $arch= 'none' if !defined $arch; - -% } - - -
-
-
- -% } #---------- end of dropdowns, now common middle of page code ---------- - - -
- -<%perl> -#========== result computations ========== - -my $results_head; -$results_head= sub { - print "

Results

\n"; - $results_head= sub { }; -}; - -#---------- result computation - textstring ---------- -if (!$a{Dropdowns}) { - if (length $routestring) { - $results_head->(); - my $rsr= $m->comp('routetextstring', - ocean => $a{Ocean}, - string => $routestring, - format => 'return' - ); - if (length $rsr->{Error}) { - print encode_entities($rsr->{Error}); - } else { - foreach my $entry (@{ $rsr->{Results} }) { - push @archipelagoes, - defined $entry->[1] ? undef : $entry->[0]; - push @islandids, $entry->[1]; - } - } - } - -} else { #---------- results - dropdowns ---------- - -my $argorundef= sub { - my ($dd,$base) = @_; - my $thing= $ARGS{"${base}${dd}"}; - $thing= undef if defined $thing and $thing eq 'none'; - return $thing; -}; - -for my $dd (0..$a{Dropdowns}-1) { - my $arch= $argorundef->($dd,'archipelago'); - my $island= $argorundef->($dd,'islandid'); - next unless defined $arch or defined $island; - if (defined $island and defined $arch) { - my $ii= $islandid2{$island}; - my $iarch= $ii->{Arch}; - if ($iarch ne $arch) { - $results_head->(); - - Specified archipelago <% $arch %> but - island <% $ii->{Name} %> - which is in <% $iarch %>; using the island.
-<%perl> - } - $arch= undef; - } - push @archipelagoes, $arch; - push @islandids, $island; -} - -}#---------- result processing, common stuff - - -% if (@islandids) { -% $results_head->(); - -<& routetrade, islandids => \@islandids, archipelagoes => \@archipelagoes &> - -% } - -%#---------- debugging and epilogue ---------- - -% if ($debug) { -

-

-Debug log:
-
-% } - - - -<%init> -use CommodsWeb; -use HTML::Entities; -use URI::Escape; -use JSON; - -