From 4a7daddbd09806e47fc3b6df9cfc42ed5eb84758 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Wed, 12 Aug 2009 20:39:13 +0100 Subject: [PATCH] Invokes "routetrade" component to get answers --- yarrg/web/route | 81 +++++++++++++++++++++++++++++++++------ yarrg/web/routetextstring | 20 ++++++---- yarrg/web/routetrade | 27 +++++++++++++ 3 files changed, 109 insertions(+), 19 deletions(-) create mode 100644 yarrg/web/routetrade diff --git a/yarrg/web/route b/yarrg/web/route index 1366345..595976f 100644 --- a/yarrg/web/route +++ b/yarrg/web/route @@ -4,6 +4,11 @@ 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 @@ -141,6 +146,7 @@ function tr_Ready() { tr_request= false; tr_Request(); } +window.onload= tr_Needed;
 

-% if (length $routestring) { - -
-DATA FOR 
-<% $routestring |h %>
-WOULD GO HERE
-
- -% } - % } else { #---------- dropdowns, user selects from menus ---------- <%perl> @@ -199,6 +195,7 @@ 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; @@ -249,11 +246,73 @@ function ms_Setarch(dd) { -% } #---------- end of dropdowns, now common code ---------- +% } #---------- end of dropdowns, now common middle of page code ---------- +

Results

+ +<%perl> +#========== result computations ========== + +#---------- result computation - textstring ---------- +if (!$a{Dropdowns}) { + if (length $routestring) { + 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) { + + 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) { + +<& routetrade, islandids => \@islandids, archipelagoes => \@archipelagoes &> + +% } + %#---------- debugging and epilogue ---------- % if ($debug) { diff --git a/yarrg/web/routetextstring b/yarrg/web/routetextstring index 4cec5f9..685b465 100644 --- a/yarrg/web/routetextstring +++ b/yarrg/web/routetextstring @@ -31,12 +31,16 @@ if ($format =~ 'json') { success => 1, show => length $canontext ? encode_entities($canontext) : ' ', - })}; + })}; $output_wrong= sub { print to_json({ success => 0, show => $_[0], - })}; -} + })}; +} +if ($format =~ 'return') { + $output= sub { return { Error => '', Results => \@results }; }; + $output_wrong= sub { return { Error => $_[0] }; }; +} foreach my $each (split m#[/|,]#, $string) { $each =~ s/^\s*//; $each =~ s/\s*$//; $each =~ s/\s+/ /g; @@ -57,12 +61,12 @@ foreach my $each (split m#[/|,]#, $string) { } if (!$results) { if (!%m) { - $err->('no island or arch matches "%s"'); + return $err->('no island or arch matches "%s"'); } elsif (%m > 5) { - $err->(' '); + return $err->(' '); } else { - $err->('ambiguous island or arch "%s", could be '. - join(', ', sort keys %m)); + return $err->('ambiguous island or arch "%s",'. + ' could be '.join(', ', sort keys %m)); } } push @results, $results->[0]; @@ -70,6 +74,6 @@ foreach my $each (split m#[/|,]#, $string) { $canontext= join ' | ', map { $_->[2] } @results; -$output->(); +return $output->(); diff --git a/yarrg/web/routetrade b/yarrg/web/routetrade new file mode 100644 index 0000000..d0d4a76 --- /dev/null +++ b/yarrg/web/routetrade @@ -0,0 +1,27 @@ +<%args> +@islandids +@archipelagoes + + +%# So, add code to do right thing here: + +
+Route is as follows:
+
+% foreach my $i (0..$#islandids) {
+%   my $islandid= $islandids[$i];
+%   my $archipelago= $archipelagoes[$i];
+%   $islandid= '' unless defined $islandid;
+%   $archipelago= '' unless defined $archipelago;
+%
+  islandid=<% $islandid %>  archipelago=<% $archipelago %>
+%
+% }
+
+
+ +<%init> +use CommodsWeb; +db_setocean('Midnight'); +db_connect(); + -- 2.30.2