Jump to menu and information about this site.

Wednesday·01·February·2006

HTML::Seamstress::new_from_file() now reblesses the whole tree

To date, Seamstress has supported tree-based rewriting of HTML trees by blessing the $tree into a class which has these superclasses - HTML::Seamstress, HTML::Element::Library, HTML::Element, and any local Element library. That way, you can rewrite the $tree by going:

$tree->this;
$tree->that;
Well, that was all good and fine until today when I tried to call this and that on a subtree of $tree:
my $div = $tree->look_down('_tag' => 'div');
$div->this;
$div->that;
and it did not work because $div was blessed into HTML::Element instead of a class which inherited from the above-mentioned superclasses.

So, the solution was to simply bless all nodes of $tree into the same class. A test case 02.treebless.t shows the new functionality:


package tree::bless;

use Test::More qw(no_plan);
use TestUtils;

use base qw(HTML::Seamstress) ;

my $root = 't/html/treebless';

my $tree = __PACKAGE__->new_from_file("$root.html");

my $li = $tree->look_down(class => 'greg');

is (ref $li, 'tree::bless', 'blessed into proper class');



Wednesday·25·January·2006

When writing Seamstress pages, componentize your tree transforms

Working with our Mason codebase today showed me something that would have been a lot harder in Seamstress. Basically, I was told to add a vonage advertisement in another table cell everywhere that we displayed a vbase_banner.

Up to this point, all pages using the vbase_banner looked something like this:

<& 'comp/related_topics_lander_2', aconf => $aconf, query => $query &>

<& 'comp/vbase_banner', aconf => $aconf, query => $query, align => 'left' &>

% if ($query->{'brand'} eq 'tbar') {
  <& 'comp/tbar_foot', aconf => $aconf, query => $query &>
% } else {
  <& 'comp/quickfoot', aconf => $aconf, query => $query, align => 'center' &>
% }

<& 'comp/footer', aconf => $aconf, query => $query &>


So all I had to do was toss a bit of logic in vbase_banner for the vonage_ad and I was done:

<tr> <td align='<% $align %>'><iframe width=468 height=60 noresize scrolling=no \frameborder=0 marginheight=0 marginwidth=0 src='http://t.trafficmp.com/b.t/<% $\id %>/<% $rn %>/'></iframe> </td> <td> % if ($query->{pagetype} ne &#8216;KEY&#8217;) { <& vonage_ad &> % } </td> </tr>

With Seamstress, one could componentize a page by creating subroutines for processing each part, but one does not have to. This is a downfall in Seamstress in a sense. But nevertheless, with Params::Validate and HTML::Tree, one can still do the trick, but one must be disciplined about placing each tree transformation into a separate subroutine instead of having a subroutine with a series of

The end result of disciplined Seamstress usage is that you can refine subroutines and make wholesale changes across several webpages if they all point to the same place


CatalystAdvent example converted from tt to Seamstress

You can view the source here and download via

svn co http://dev.catalyst.perl.org/repos/Catalyst/trunk/examples/CatalystAdvent-Seamstress

My first Seamstress user!

I was elated to have a user of my module HTML::Seamstress. here is the bug he filed against Seamstress - and complete with a patch!

I am glad to have co-developer.

BookDB for Catalyst is done in HTML::Seamstress

I got HTML::Seamstress up and running the bookdb example. Thanks to Andy Grundman, I can commit to the examples directory on the Catalyst svn site so BookDB-Seamstress is available right here.

Converting it from tt to Seamstress led to a few improvements in HTML::Element::Library , namely the addition of iter2(), a more flexible routine for turning arrays of data into HTML list data, such as dl, ol, or ul.

I learned a lot about Class::DBI::AsForm in the process. That is a very slick module that is underdocumented and highly magical. I have pretty much decided to stick with DBIx::Simple for all of my database processing needs.

Perl Software Design Blog

About...

This is the weblog of the Perl Software Design Group.

Who We Are

Terrence Brannon
Matthew Sisk
Brock Wilcox
Gary Aston-Jones


Calendar

← 2025 →
Months
Jun
Jul Aug Sep Oct Nov Dec
← June →
Mo Tu We Th Fr Sa Su
           
26 27 28 29
30            

Search


Advanced Search


Categories

Blogroll

People I know personally




Blogging Software Blogs