X-Git-Url: http://git.ieval.ro/?a=blobdiff_plain;f=lib%2FHTML%2FElement%2FLibrary.pm;h=7c6cf7557808cc42dc40b5c89fa4b55a27dc470f;hb=9b7a5679d7b975da7cb52f34503d1d8b4e174f3b;hp=99abc3d39f7c534ce6eff10ac7cbba1cbedcbbeb;hpb=3c14ea1e4127f65aaf48989a5364977785b595cf;p=html-element-library.git diff --git a/lib/HTML/Element/Library.pm b/lib/HTML/Element/Library.pm index 99abc3d..7c6cf75 100644 --- a/lib/HTML/Element/Library.pm +++ b/lib/HTML/Element/Library.pm @@ -12,6 +12,7 @@ use Array::Group qw(:all); use Carp qw(confess); use Data::Dumper; use HTML::Element; +use List::Util qw(first); use List::MoreUtils qw/:all/; use Params::Validate qw(:all); use Scalar::Listify; @@ -36,13 +37,37 @@ sub HTML::Element::siblings { $p->content_list; } +sub HTML::Element::hash_map { + my $container = shift; + + my %p = validate(@_, { + hash => { type => HASHREF }, + to_attr => 1, + excluding => { type => ARRAYREF }, + debug => { default => 0 }, + }); + + my @same_as = $container->look_down('_attr' => $p{to_attr}); + + 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} ) ; + } + +} + + sub HTML::Element::passover { my ($tree, $child_id) = @_; - warn "ARGS: my ($tree, $child_id)"; + warn "ARGS: my ($tree, $child_id)" if $DEBUG; + warn $tree->as_HTML(undef, ' ') if $DEBUG; my $exodus = $tree->look_down(id => $child_id); + warn "E: $exodus" if $DEBUG; + my @s = HTML::Element::siblings($exodus); for my $s (@s) { @@ -188,6 +213,7 @@ sub HTML::Element::iter2 { warn "wrapper_data: " . Dumper $p{wrapper_data} if $p{debug} ; my $container = ref_or_ld($tree, $p{wrapper_ld}); + warn "container: " . $container if $p{debug} ; warn "wrapper_(preproc): " . $container->as_HTML if $p{debug} ; $p{wrapper_proc}->($container) if defined $p{wrapper_proc} ; warn "wrapper_(postproc): " . $container->as_HTML if $p{debug} ; @@ -725,6 +751,31 @@ One of these days, I'll around to writing a nice C section. =head2 Tree Rewriting Methods +=head3 $elem->hash_map(hash => \%h, to_attr => $attr, excluding => \@excluded) + +This method is designed to take a hashref and populate a series of elements. For example: + + + + + + + + +
1(877) 255-3239*********
+ +In the table above, there are several attributes named C. If we have a hashref whose keys are the same: + + my %data = (people_id => 888, phone => '444-4444', password => 'dont-you-dare-render'); + +Then a single API call allows us to populate the HTML while excluding those ones we dont: + + $tree->hash_map(hash => \%data, to_attr => 'sid', excluding => ['password']); + +Of course, the other way to prevent rendering some of the hash mapping is to not give that element the attr +you plan to use for hash mapping. + + =head3 $elem->replace_content(@new_elem) Replaces all of C<$elem>'s content with C<@new_elem>. @@ -962,7 +1013,11 @@ to give you a taste of how C is used: -=head2 Tree-Building Methods: Unrolling an array via a single sample element (
    container) +=head2 Tree-Building Methods + + + +=head3 Unrolling an array via a single sample element (
      container) This is best described by example. Given this HTML: @@ -993,7 +1048,7 @@ To produce this: -=head2 Tree-Building Methods: Unrolling an array via n sample elements (
      container) +=head3 Unrolling an array via n sample elements (
      container) C was fine for awhile, but some things (e.g. definition lists) need a more general function to make them easy to @@ -1150,7 +1205,9 @@ So now that we have documented the API, let's see the call we need: ); -=head2 Tree-Building Methods: Select Unrolling + + +=head3 Select Unrolling The C method has this API: