X-Git-Url: http://git.ieval.ro/?a=blobdiff_plain;f=lib%2FHTML%2FElement%2FLibrary.pm;h=936840ba8a71ab11f4516cdcc1987f82ad96cd97;hb=3caedb5b3a025561935df4403083c02425cb3845;hp=7c6cf7557808cc42dc40b5c89fa4b55a27dc470f;hpb=9b7a5679d7b975da7cb52f34503d1d8b4e174f3b;p=html-element-library.git diff --git a/lib/HTML/Element/Library.pm b/lib/HTML/Element/Library.pm index 7c6cf75..936840b 100644 --- a/lib/HTML/Element/Library.pm +++ b/lib/HTML/Element/Library.pm @@ -43,16 +43,27 @@ sub HTML::Element::hash_map { my %p = validate(@_, { hash => { type => HASHREF }, to_attr => 1, - excluding => { type => ARRAYREF }, + excluding => { type => ARRAYREF , default => [] }, debug => { default => 0 }, }); - my @same_as = $container->look_down('_attr' => $p{to_attr}); + warn 'The container tag is ', $container->tag if $p{debug} ; + warn 'hash' . Dumper($p{hash}) if $p{debug} ; + warn 'at_under' . Dumper(\@_); + + my @same_as = $container->look_down( $p{to_attr} => qr/.+/ ) ; + + warn 'Found ' . scalar(@same_as) . ' nodes' if $p{debug} ; + for my $same_as (@same_as) { - next if first { $same_as->attr($p{to_attr}) eq $_ } @{$p{excluding}} ; - my $hash_key = $same_as->attr($p{to_attr}) ; - $same_as->replace_content( $p{hash}->{$hash_key} ) ; + my $attr_val = $same_as->attr($p{to_attr}) ; + if (first { $attr_val eq $_ } @{$p{excluding}}) { + warn "excluding $attr_val" if $p{debug} ; + next; + } + warn "processing $attr_val" if $p{debug} ; + $same_as->replace_content( $p{hash}->{$attr_val} ) ; } } @@ -646,23 +657,30 @@ sub HTML::Element::unroll_select { my $select = {}; my $select_node = $s->look_down(id => $select{select_label}); + warn "Select Node: " . $select_node if $select{debug}; - my $option = $select_node->look_down('_tag' => 'option'); + unless ($select{append}) { + for my $option ($select_node->look_down('_tag' => 'option')) { + $option->delete; + } + } -# warn $option; + my $option = HTML::Element->new('option'); + warn "Option Node: " . $option if $select{debug}; $option->detach; while (my $row = $select{data_iter}->($select{data})) { -# warn Dumper($row); - my $o = $option->clone; - $o->attr('value', $select{option_value}->($row)); - $o->attr('SELECTED', 1) if ($select{option_selected}->($row)) ; - - $o->replace_content($select{option_content}->($row)); - $select_node->push_content($o); + warn "Data Row:" . Dumper($row) if $select{debug}; + my $o = $option->clone; + $o->attr('value', $select{option_value}->($row)); + $o->attr('SELECTED', 1) if (exists $select{option_selected} and $select{option_selected}->($row)) ; + + $o->replace_content($select{option_content}->($row)); + $select_node->push_content($o); + warn $o->as_HTML if $select{debug}; } @@ -758,13 +776,13 @@ This method is designed to take a hashref and populate a series of elements. For - - - + + +
1(877) 255-3239*********1(877) 255-3239*********
-In the table above, there are several attributes named C. If we have a hashref whose keys are the same: +In the table above, there are several attributes named C<< smap >>. If we have a hashref whose keys are the same: my %data = (people_id => 888, phone => '444-4444', password => 'dont-you-dare-render'); @@ -1218,6 +1236,8 @@ The C method has this API: option_selected => $closure, # boolean to decide if SELECTED data => $data # the data to be put into the SELECT data_iter => $closure # the thing that will get a row of data + debug => $boolean, + append => $boolean, # remove the sample