chiark / gitweb /
Make colourful pages pass W3C HTML and CSS validators
[ypp-sc-tools.db-test.git] / yarrg / web / query_routesearch
index 36e6055b898610a3ccb2910e641203f9923bbddd..9c583b8899338489228249fef319dc360e7d3883 100644 (file)
 <%args>
 $quri
 $dbh
+$baseqf
 $queryqf
 $islandstring => '';
 $capacitystring => '';
 $lossperleague => '';
 $capitalstring => '';
 $distance => '';
+$prselector
+$someresults
 $emsgokorprint
+$allargs
 </%args>
 
 <%perl>
@@ -63,12 +67,15 @@ my $maxcountea=15;
 
 </%perl>
 
+<div class="query">
 <h1>Find most profitable routes and trades</h1>
 
 % if ($qa->{Dropdowns}) {
 This feature is not available from the "drop down menus" interface.
 % } else {
 
+% $prselector->('RouteSearchType');
+
 <form action="<% $quri->() |h %>" method="get">
 
 <& enter_route, qa=>$qa, dbh=>$dbh, emsg_r=>\$emsg, warningfs_r=>\@warningfs,
@@ -89,13 +96,15 @@ This feature is not available from the "drop down menus" interface.
  </&>
 </&>
 
-<input type=submit name=submit value="Go">
+<input type=submit name=submit value="Search">
 % my $ours= sub { $_[0] =~ m/^lossperleague|^islandstring|^capitalstring|^capacitystring|^distance/; };
 <& "lookup:formhidden", ours => $ours &>
 
 % }
 
 </form>
+</div>
+<div class="results">
 <%perl>
 
 if (!$emsg && $maxdist > $maxmaxdist) {
@@ -103,9 +112,12 @@ if (!$emsg && $maxdist > $maxmaxdist) {
                " supported, sorry.";
 }
 
-$emsgokorprint->($emsg) or return;
-@islandids or return;
-defined $routeparams->{MaxMass} or defined $routeparams->{MaxVolume} or return;
+print("</div>"), return
+     unless $emsgokorprint->($emsg)
+       and @islandids
+       and $allargs->{'submit'}
+       and (defined $routeparams->{MaxMass} or
+            defined $routeparams->{MaxVolume});
 
 #---------- prepare island names ----------
 
@@ -136,7 +148,9 @@ foreach my $k (qw(MaxMass MaxVolume MaxCapital)) {
 push @rsargs, defined $routeparams->{LossPerLeaguePct}
        ? $routeparams->{LossPerLeaguePct}*0.01 : 1e-9;
 push @rsargs, '0';
-push @rsargs, 'search',$maxdist, $maxcountea,$maxcountea, 'any', @islandids;
+push @rsargs, 'search',$maxdist, $maxcountea,$maxcountea;
+push @rsargs, $ARGS{RouteSearchType} ? 'circ' : 'any';
+push @rsargs, @islandids;
 
 m/[^-.0-9a-zA-Z]/ and die "$_ $& ?" foreach @rsargs;
 
@@ -198,10 +212,13 @@ while (<$fh>) {
        for ($i=1; $i < @i-1; $i++) {
                push @{ $item->{Vias} }, $i[$i];
        }
-       my %linkqf= %$queryqf;
+       my %linkqf= (%$baseqf, %$queryqf);
        delete $linkqf{'query'};
        $linkqf{'routestring'}= join ', ', @fi;
        $item->{Url}= $quri->(%linkqf);
+       $item->{ArchesString}= join ', ', @a;
+       $item->{ViasString}= join ' ', map { $_.',' } @{ $item->{Vias} };
+       $item->{RouteSortString}= join ', ', @i;
        $results{$ap}{$isles}= $item;
 }
 
@@ -252,6 +269,8 @@ seconds of CPU time so more processing resources should be available soon.
        return;
 }
 
+$someresults->();
+
 </%perl>
 % foreach my $ap (qw(A P)) {
 %      if ($ap eq 'A') {
@@ -259,44 +278,66 @@ seconds of CPU time so more processing resources should be available soon.
 %      } else {
 <h2>Best routes for profit per league</h2>
 %      }
-<table rules=groups>
+<table class="data" rules=groups id="ap<% $ap %>_table">
 <colgroup span=2>
 <colgroup span=1>
 <colgroup span=1>
 <colgroup span=3>
-<tbody>
 <tr>
 <th colspan=2>Profit
 <th>Dist.
 <th>Archipelagoes
-<th colspan=3>Route
+<th>
+<th>Route
+<th>
 <tr>
 <th>Abs.
 <th>Per.lg.
 <th>
-<th>
+<th>(link to plan)
 <th>Start
 <th>Via
 <th>Finish
-<tbody>
+<tr id="ap<% $ap %>_sortrow"><th><th><th><th><th><th><th>
 %      my $datarow=0;
+%      my %sortkeys;
 %      foreach my $isles (sort {
 %                      $results{$ap}{$b}{$ap} <=>
 %                      $results{$ap}{$a}{$ap}
 %              } keys %{$results{$ap}}) {
 %              my $item= $results{$ap}{$isles};
-<tr class="datarow<% $datarow %>">
+%              my $ci=0;
+%              my $rowid= "r${ap}$isles"; $rowid =~ y/ /_/;
+%              foreach my $k (qw(A P Leagues ArchesString
+%                                Start RouteSortString Finish)) {
+%                      $sortkeys{$ci}{$rowid}= $item->{$k};
+%                      $ci++;
+%              }
+<tr class="datarow<% $datarow %>" id="<% $rowid %>">
 <td align=right><% $item->{A} |h %>
 <td align=right><% $item->{P} |h %>
 <td align=right><% $item->{Leagues} |h %>
-<td align=left><a href="<% $item->{Url} |h %>"><% join ', ', @{ $item->{Archs} } |h %></a>
+<td align=left><a href="<% $item->{Url} |h %>"><%
+                 $item->{ArchesString} |h %></a>
 <td align=left><% $item->{Start} |h %>,
-<td align=left><% join ' ', map { $_.',' } @{ $item->{Vias} } |h %>
+<td align=left><% $item->{ViasString} |h %>
 <td align=left><% $item->{Finish} |h %>
 </td>
 %              $datarow ^= 1;
 %      } # $isles
 </table>
+<&| tabsort,   table => "ap${ap}_table", sortkeys => "ap${ap}_sortkeys",
+               throw => "ap${ap}_sortrow", rowclass => "datarow", cols => [
+               { DoReverse => 1, Numeric => 1 },
+               { DoReverse => 1, Numeric => 1 },
+               { DoReverse => 1, Numeric => 1 },
+               { },
+               { },
+               { },
+               { },
+       ] &>
+  ap<% $ap %>_sortkeys= <% to_json_protecttags(\%sortkeys) %>;
+</&tabsort>
 % } # $ap
 
 <p>
@@ -308,7 +349,4 @@ Per league values count each island visited as one
 to be sailed.  All profit figures are somewhat approximate; get a
 complete trading plan for a route for accurate information.
 
-<%perl>
-
-
-</%perl>
+</div>