From: Ian Jackson Date: Sun, 11 Oct 2009 19:00:04 +0000 (+0100) Subject: WIP routesearch UI: entry done, now must compute results X-Git-Tag: 5.0^2~51 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.db-test.git;a=commitdiff_plain;h=f2f25e1201a92e62c3eeb35cdec0a62539e18cb5 WIP routesearch UI: entry done, now must compute results --- diff --git a/yarrg/web/check_distance b/yarrg/web/check_distance new file mode 100644 index 0000000..223cc5a --- /dev/null +++ b/yarrg/web/check_distance @@ -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 + 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 . + + 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. + + + +<%attr> +significant_nonempty => 1 + + +<%method execute> +<%args> +$string +$dbh +$debugf + + +<%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); + + + diff --git a/yarrg/web/enter_advrouteopts b/yarrg/web/enter_advrouteopts index 2a5eff0..c8a6ddb 100644 --- a/yarrg/web/enter_advrouteopts +++ b/yarrg/web/enter_advrouteopts @@ -32,8 +32,10 @@ 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->{SayOptionalCapital} + The results are returned there: $routeparams->{LossPerLeaguePct} $routeparams->{MaxMass} $routeparams->{MaxVolume} @@ -78,7 +80,8 @@ Expected losses: -
Available capital: +Available capital<% + $routeparams->{SayOptionalCapital} ? ' (optional)' : '' %>: <&| qtextstring, qa => $qa, dbh => $dbh, prefix => 'ac', thingstring => 'capitalstring', emsgstore => $routeparams->{EmsgRef}, diff --git a/yarrg/web/lookup b/yarrg/web/lookup index 93e44d4..9f74f33 100755 --- a/yarrg/web/lookup +++ b/yarrg/web/lookup @@ -159,8 +159,8 @@ foreach my $var (@vars) { 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 | diff --git a/yarrg/web/qtextstring b/yarrg/web/qtextstring index c958915..93eb124 100644 --- a/yarrg/web/qtextstring +++ b/yarrg/web/qtextstring @@ -49,6 +49,9 @@ my $stringval= $qa->{$thingstring}; $stringval='' if !defined $stringval; my $p= $prefix.'_'; +my $checker= $m->fetch_comp("check_${thingstring}"); +my $significant_nonempty= $checker->attr_exists('significant_nonempty'); + <&| script &> @@ -58,7 +61,7 @@ my $p= $prefix.'_'; <%$p%>timeout=false; <%$p%>request=false; -<%$p%>done=''; +<%$p%>done=<% $significant_nonempty ? "null" : "''" %>; <%$p%>needed=''; function <%$p%>Later(){ window.clearTimeout(<%$p%>timeout); @@ -103,7 +106,7 @@ register_onload(<%$p%>Needed);
 

<%perl> -if (length $thingstring) { +if ($significant_nonempty || length $thingstring) { my ($emsg,$canonstring,@results)= $m->comp('qtextstringcheck', what => $thingstring, ocean => $qa->{Ocean}, diff --git a/yarrg/web/query_routesearch b/yarrg/web/query_routesearch index 53128f6..bbeba5b 100644 --- a/yarrg/web/query_routesearch +++ b/yarrg/web/query_routesearch @@ -36,9 +36,12 @@ <%args> $quri $dbh +$islandstring => ''; $capacitystring => ''; $lossperleague => ''; $capitalstring => ''; +$distance => ''; +$someresults $emsgokorprint @@ -48,8 +51,9 @@ my @warningfs; my @islandids; my $qa= \%ARGS; -my $routeparams= { EmsgRef => \$emsg }; +my $routeparams= { EmsgRef => \$emsg, SayOptionalCapital => 1 }; my $maxdist; +

Find most profitable routes and trades

@@ -67,12 +71,23 @@ This feature is not available from the "drop down menus" interface. <&| enter_advrouteopts, qa=>$qa, dbh=>$dbh, routeparams=>$routeparams &>
- Something: + Maximum distance: <&| qtextstring, qa => $qa, dbh => $dbh, prefix => 'ml', - thingstring => 'capitalstring', emsgstore => \$emsg, + thingstring => 'distance', emsgstore => \$emsg, onresults => sub { ($maxdist)= @_; } &> + +% my $ours= sub { $_[0] =~ m/^lossperleague|^islandstring|^capitalstring|^capacitystring|^distance/; }; +<& "lookup:formhidden", ours => $ours &> % } + + +<%perl> + +$emsgokorprint->($emsg) or return; +@islandids or return; + +