]> iEval git - html-element-library.git/blobdiff - lib/HTML/Element/Library.pm
fillinform tests
[html-element-library.git] / lib / HTML / Element / Library.pm
index 6b9e27ad1ecb9bde186630b767efa82e0316843e..bc85c9dca1598691f6d5ec2b9ec6f125fcdeb1ea 100644 (file)
@@ -28,8 +28,22 @@ our @EXPORT      = qw();
 our $VERSION = '3.53';
 
 
+
 # Preloaded methods go here.
 
+# https://rt.cpan.org/Ticket/Display.html?id=44105
+sub HTML::Element::fillinform {
+
+    my ($tree, $hashref)=@_;
+
+    (ref $hashref) eq 'HASH' or die 'hashref not supplied as argument' ;
+
+    use HTML::FillInForm;
+    my $html = $tree->as_HTML;
+    my $new_html = HTML::FillInForm->fill(\$html, $hashref);
+
+}
+
 sub HTML::Element::siblings {
   my $element = shift;
   my $p = $element->parent;
@@ -97,12 +111,12 @@ sub HTML::Element::hashmap {
 
 
 sub HTML::Element::passover {
-  my ($tree, $child_id) = @_;
+  my ($tree, @to_preserve) = @_;
   
-  warn "ARGS:   my ($tree, $child_id)" if $DEBUG;
+  warn "ARGS:   my ($tree, @to_preserve)" if $DEBUG;
   warn $tree->as_HTML(undef, ' ') if $DEBUG;
 
-  my $exodus = $tree->look_down(id => $child_id);
+  my $exodus = $tree->look_down(id => $to_preserve[0]);
 
   warn "E: $exodus" if $DEBUG;
 
@@ -110,7 +124,7 @@ sub HTML::Element::passover {
 
   for my $s (@s) {
     next unless ref $s;
-    if ($s->attr('id') eq $child_id) {
+    if (first { $s->attr('id') eq $_ } @to_preserve) {
       ;
     } else {
       $s->delete;
@@ -797,6 +811,27 @@ One of these days, I'll around to writing a nice C<EXPORT> section.
 
 =head2 Tree Rewriting Methods
 
+=head3 Simplifying calls to HTML::FillInForm
+
+Since HTML::FillInForm gets and returns strings, using HTML::Element instances 
+becomes tedious:
+
+   1. Seamstress has an HTML tree that it wants the form filled in on
+   2. Seamstress converts this tree to a string
+   3. FillInForm parses the string into an HTML tree and then fills in the form
+   4. FillInForm converts the HTML tree to a string
+   5. Seamstress re-parses the HTML for additional processing 
+
+I've filed a bug about this:
+L<https://rt.cpan.org/Ticket/Display.html?id=44105>
+
+This function, fillinform, 
+allows you to pass a tree to fillinform (along with your data structure) and
+get back a tree:
+
+   my $new_tree = $html_tree->fillinform($data_structure);
+  
+
 =head3 Mapping a hashref to HTML elements
 
 It is very common to get a hashref of data from some external source - flat file, database, XML, etc.
@@ -886,7 +921,7 @@ In the table above, there are several attributes named C<< smap >>. If we have a
 
 Then a single API call allows us to populate the HTML while excluding those ones we dont:
 
-  $tree->hashmap('sid' => \%data, ['password']);
+  $tree->hashmap(smap => \%data, ['password']);
 
 
 Note: the other way to prevent rendering some of the hash mapping is to not give that element the attr
@@ -994,14 +1029,16 @@ id C<under10> remains. For age less than 18, the node with id C<under18>
 remains.
 Otherwise our "else" condition fires and the child with id C<welcome> remains.
 
-=head3 $tree->passover($id_of_element)
+=head3 $tree->passover(@id_of_element)
 
-In some cases, you know exactly which element should survive. In this case,
-you can simply call C<passover> to remove it's siblings. For the HTML
+In some cases, you know exactly which element(s) should survive. In this case,
+you can simply call C<passover> to remove it's (their) siblings. For the HTML
 above, you could delete C<under10> and C<welcome> by simply calling:
 
   $tree->passover('under18');
 
+Because passover takes an array, you can specify several children to preserve.
+
 =head3 $tree->highlander2($tree, $conditionals, @conditionals_args)
 
 Right around the same time that C<table2()> came into being, Seamstress
This page took 0.027247 seconds and 4 git commands to generate.