chiark / gitweb /
WIP routesearch UI: entry done, now must compute results
authorIan Jackson <ian@liberator.(none)>
Sun, 11 Oct 2009 19:00:04 +0000 (20:00 +0100)
committerIan Jackson <ian@liberator.(none)>
Sun, 11 Oct 2009 19:00:04 +0000 (20:00 +0100)
yarrg/web/check_distance [new file with mode: 0644]
yarrg/web/enter_advrouteopts
yarrg/web/lookup
yarrg/web/qtextstring
yarrg/web/query_routesearch

diff --git a/yarrg/web/check_distance b/yarrg/web/check_distance
new file mode 100644 (file)
index 0000000..223cc5a
--- /dev/null
@@ -0,0 +1,68 @@
+<%doc>
+
+ This is part of the YARRG website.  YARRG is a tool and website
+ for assisting players of Yohoho Puzzle Pirates.
+
+ Copyright (C) 2009 Ian Jackson <ijackson@chiark.greenend.org.uk>
+ Copyright (C) 2009 Clare Boothby
+
+  YARRG's client code etc. is covered by the ordinary GNU GPL (v3 or later).
+  The YARRG website is covered by the GNU Affero GPL v3 or later, which
+   basically means that every installation of the website will let you
+   download the source.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+ Yohoho and Puzzle Pirates are probably trademarks of Three Rings and
+ are used without permission.  This program is not endorsed or
+ sponsored by Three Rings.
+
+
+ This Mason component simply defines how to interpret distances.
+
+</%doc>
+
+<%attr>
+significant_nonempty => 1
+</%attr>
+
+<%method execute>
+<%args>
+$string
+$dbh
+$debugf
+</%args>
+
+<%perl>
+
+$_= $string;
+s/^\s+//; s/\s+$//;
+
+my $leagues;
+my $canon;
+
+if (!m/\S/) {
+       $leagues= 20;
+       $canon= '(default: 20 leagues)';
+} elsif (m/^([1-9]\d*)( leagues)?$/i) {
+       $leagues= $1;
+       $canon= "$leagues leagues";
+} else {
+       expected_error("Cannot understand distance \`$_'.");
+}
+
+return ($canon,$leagues);
+
+</%perl>
+</%method>
index 2a5eff0e5c5c677334ec055b709d1c566cfdb4f6..c8a6ddbb2429a983e40fad372fb97821564b9f03 100644 (file)
  This Mason component generates entry fields for route planning
  advanced parameters (capacity limits, etc).
 
  This Mason component generates entry fields for route planning
  advanced parameters (capacity limits, etc).
 
The results are returned in $routeparams:
Some useful parameters are in %$routeparams:
        ${ $routeparams->{EmsgRef} }
        ${ $routeparams->{EmsgRef} }
+       $routeparams->{SayOptionalCapital}
+ The results are returned there:
        $routeparams->{LossPerLeaguePct}
        $routeparams->{MaxMass}
        $routeparams->{MaxVolume}
        $routeparams->{LossPerLeaguePct}
        $routeparams->{MaxMass}
        $routeparams->{MaxVolume}
@@ -78,7 +80,8 @@ Expected losses:
 </table>
 <table><tr>
 
 </table>
 <table><tr>
 
-<td>Available capital:
+<td>Available capital<%
+ $routeparams->{SayOptionalCapital} ? ' (optional)' : '' %>:
 
 <&| qtextstring, qa => $qa, dbh => $dbh, prefix => 'ac',
     thingstring => 'capitalstring', emsgstore => $routeparams->{EmsgRef},
 
 <&| qtextstring, qa => $qa, dbh => $dbh, prefix => 'ac',
     thingstring => 'capitalstring', emsgstore => $routeparams->{EmsgRef},
index 93e44d4455df1cb89043dca178c22525c4239095..9f74f3369bb8e7bcf33601c73c8eca3831997114 100755 (executable)
@@ -159,8 +159,8 @@ foreach my $var (@vars) {
 
 foreach my $var (keys %ARGS) {
        next unless $var =~
 
 foreach my $var (keys %ARGS) {
        next unless $var =~
-               m/^(?: (?:route|commod|capacity|capital)string |
-                       lossperleague |
+               m/^(?: (?:route|commod|capacity|capital|island)string |
+                       lossperleague | distance |
                        commodid |
                        islandid \d |
                        archipelago \d |
                        commodid |
                        islandid \d |
                        archipelago \d |
index c958915ae33fdfa012c0e9ab639db0636d84b95e..93eb1249633499550bf763cb7c33ccd1c735115b 100644 (file)
@@ -49,6 +49,9 @@ my $stringval= $qa->{$thingstring};
 $stringval='' if !defined $stringval;
 
 my $p= $prefix.'_';
 $stringval='' if !defined $stringval;
 
 my $p= $prefix.'_';
+my $checker= $m->fetch_comp("check_${thingstring}");
+my $significant_nonempty= $checker->attr_exists('significant_nonempty');
+
 </%perl>
 
 <&| script &>
 </%perl>
 
 <&| script &>
@@ -58,7 +61,7 @@ my $p= $prefix.'_';
 
 <%$p%>timeout=false;
 <%$p%>request=false;
 
 <%$p%>timeout=false;
 <%$p%>request=false;
-<%$p%>done='';
+<%$p%>done=<% $significant_nonempty ? "null" : "''" %>;
 <%$p%>needed='';
 function <%$p%>Later(){
   window.clearTimeout(<%$p%>timeout);
 <%$p%>needed='';
 function <%$p%>Later(){
   window.clearTimeout(<%$p%>timeout);
@@ -103,7 +106,7 @@ register_onload(<%$p%>Needed);
 <div id="<%$p%>results">&nbsp;</div><br>
 
 <%perl>
 <div id="<%$p%>results">&nbsp;</div><br>
 
 <%perl>
-if (length $thingstring) {
+if ($significant_nonempty || length $thingstring) {
        my ($emsg,$canonstring,@results)= $m->comp('qtextstringcheck',
                what => $thingstring,
                ocean => $qa->{Ocean},
        my ($emsg,$canonstring,@results)= $m->comp('qtextstringcheck',
                what => $thingstring,
                ocean => $qa->{Ocean},
index 53128f6483d255723b1ec4df69b2617dbde54387..bbeba5b522e59ce506ec29d9fb334fa01ae93334 100644 (file)
 <%args>
 $quri
 $dbh
 <%args>
 $quri
 $dbh
+$islandstring => '';
 $capacitystring => '';
 $lossperleague => '';
 $capitalstring => '';
 $capacitystring => '';
 $lossperleague => '';
 $capitalstring => '';
+$distance => '';
+$someresults
 $emsgokorprint
 </%args>
 
 $emsgokorprint
 </%args>
 
@@ -48,8 +51,9 @@ my @warningfs;
 my @islandids;
 
 my $qa= \%ARGS;
 my @islandids;
 
 my $qa= \%ARGS;
-my $routeparams= { EmsgRef => \$emsg };
+my $routeparams= { EmsgRef => \$emsg, SayOptionalCapital => 1 };
 my $maxdist;
 my $maxdist;
+
 </%perl>
 
 <h1>Find most profitable routes and trades</h1>
 </%perl>
 
 <h1>Find most profitable routes and trades</h1>
@@ -67,12 +71,23 @@ This feature is not available from the "drop down menus" interface.
 
 <&| enter_advrouteopts, qa=>$qa, dbh=>$dbh, routeparams=>$routeparams &>
 <td>
 
 <&| enter_advrouteopts, qa=>$qa, dbh=>$dbh, routeparams=>$routeparams &>
 <td>
Something:
Maximum distance:
  <&| qtextstring, qa => $qa, dbh => $dbh, prefix => 'ml',
  <&| qtextstring, qa => $qa, dbh => $dbh, prefix => 'ml',
-    thingstring => 'capitalstring', emsgstore => \$emsg,
+    thingstring => 'distance', emsgstore => \$emsg,
     onresults => sub { ($maxdist)= @_; } &>
  </&>
 </&>
 
     onresults => sub { ($maxdist)= @_; } &>
  </&>
 </&>
 
+<input type=submit name=submit value="Go">
+% my $ours= sub { $_[0] =~ m/^lossperleague|^islandstring|^capitalstring|^capacitystring|^distance/; };
+<& "lookup:formhidden", ours => $ours &>
 
 % }
 
 % }
+
+</form>
+<%perl>
+
+$emsgokorprint->($emsg) or return;
+@islandids or return;
+
+</%perl>