[wellwell-devel] [wellwell/zoom] Add support for dropdown menus to [zoom].
Stefan Hornburg
wellwell-devel at rt.icdevgroup.org
Sun Aug 15 14:13:29 UTC 2010
commit c365d352d709a08311eb21d460c70585f1b1cbf8
Author: Stefan Hornburg (Racke) <racke at linuxia.de>
Date: Sun Aug 15 16:12:57 2010 +0200
Add support for dropdown menus to [zoom].
lib/WellWell/Zoom.pm | 32 +++++++++++++++++++++++++++++++-
1 files changed, 31 insertions(+), 1 deletions(-)
---
diff --git a/lib/WellWell/Zoom.pm b/lib/WellWell/Zoom.pm
index eb645ad..7c3eea9 100644
--- a/lib/WellWell/Zoom.pm
+++ b/lib/WellWell/Zoom.pm
@@ -94,7 +94,11 @@ sub zoom {
}
for my $elt (@{$value->{elts}}) {
- if ($elt->{zoom_rep_att}) {
+ if ($elt->{zoom_rep_sub}) {
+ # call subroutine to handle this element
+ $elt->{zoom_rep_sub}->($elt, $rep_str);
+ }
+ elsif ($elt->{zoom_rep_att}) {
# replace attribute instead of embedded text (e.g. for <input>)
$elt->set_att($elt->{zoom_rep_att}, $rep_str);
}
@@ -177,6 +181,9 @@ sub parse_handler {
# replace value attribute instead of text
$elt->{zoom_rep_att} = 'value';
}
+ elsif ($gi eq 'select') {
+ $elt->{zoom_rep_sub} = \&set_selected;
+ }
elsif (! $elt->contains_only_text()) {
# contains real elements, so we have to be careful with
# set text and apply it only to the first PCDATA element
@@ -205,5 +212,28 @@ sub parse_handler {
return $sref;
}
+# set_selected - Set selected value in a dropdown menu
+
+sub set_selected {
+ my ($elt, $value) = @_;
+ my (@children, $eltval);
+
+ @children = $elt->children('option');
+
+ for my $node (@children) {
+ $eltval = $node->att('value');
+
+ unless (length($eltval)) {
+ $eltval = $node->text();
+ }
+
+ if ($eltval eq $value) {
+ $node->set_att('selected', 'selected');
+ }
+ else {
+ $node->del_att('selected', '');
+ }
+ }
+}
1;
More information about the wellwell-devel
mailing list