From: Ian Jackson Date: Wed, 12 Aug 2009 18:25:14 +0000 (+0100) Subject: Preserve form values across submissions X-Git-Tag: 3.4~215 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.db-test.git;a=commitdiff_plain;h=598b6371434047312704df43e69cab629e1f3a3d Preserve form values across submissions --- diff --git a/yarrg/web/route b/yarrg/web/route index 84b61e4..1366345 100644 --- a/yarrg/web/route +++ b/yarrg/web/route @@ -22,21 +22,40 @@ my @vars; 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{lc $name}) { - $a{$name}= $ARGS{lc $name}; + 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; @@ -49,21 +68,10 @@ foreach my $var (@vars) { print ''; $after= ''; } else { - my %qf= (); - foreach my $innerr (@vars) { - my $n= lc $innerr->{Name}; - if ($n ne lc $name) { - next unless exists $ARGS{$n}; - $qf{$n}= $ARGS{$n}; - } else { - next if !$cvalix; - $qf{$n}= $value; - } - } - my $uri= URI->new($m->current_comp()->name()); - $qf{'debug'}=1 if $debug; - $uri->query_form(%qf); - print ''; + my %qf= (%baseqf,%queryqf); + delete $qf{$lname}; + $qf{$lname}= $value if $cvalix; + print ''; $after= ''; } print $html, $after; @@ -83,10 +91,11 @@ db_connect(); <%args> $debug => 0 +$routestring => ''

Specify route

-
+ %#---------- textbox, user enters route as string ---------- % if (!$a{Dropdowns}) { @@ -135,19 +144,41 @@ function tr_Ready() {
 

+% if (length $routestring) { + +
+DATA FOR 
+<% $routestring |h %>
+WOULD GO HERE
+
+ +% } + % } else { #---------- dropdowns, user selects from menus ---------- <%perl> my ($sth,$row);; -my $archlistdata=''; +my @archlistdata; my %islandlistdata; -$islandlistdata{'none'}= <Select island... -END +$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; +}; $sth= $dbh->prepare("SELECT DISTINCT archipelago FROM islands ORDER BY archipelago;"); @@ -155,12 +186,8 @@ $sth->execute(); while ($row=$sth->fetchrow_arrayref) { my ($arch)= @$row; - $archlistdata.= - sprintf('', - map { encode_entities($_) } ($arch,$arch)); - $islandlistdata{$arch}= <Whole arch -END + push @archlistdata, [ $arch, $arch ]; + $islandlistdata{$arch}= [ [ "none", "Whole arch" ] ]; } $sth= $dbh->prepare("SELECT islandid,islandname,archipelago @@ -170,16 +197,22 @@ $sth->execute(); while ($row=$sth->fetchrow_arrayref) { my $arch= $row->[2]; - my $here= sprintf('', - map { encode_entities($_) } @$row[0..1]); - $islandlistdata{'none'} .= $here; - $islandlistdata{$arch} .= $here; + push @{ $islandlistdata{'none'} }, [ @$row ]; + push @{ $islandlistdata{$arch} }, [ @$row ]; +} + +my %resetislandlistdata; +foreach my $arch (keys %islandlistdata) { + $resetislandlistdata{$arch}= + &$optionlistmap($islandlistdata{$arch}, ''); } + +