[Catalyst] HTML::Widget and output into a html table

Zbigniew Lukasiak zzbbyy at gmail.com
Thu Apr 13 13:07:22 CEST 2006


I would rather make this transformation with Perl and one of the XPath
libraries: XML::XPath
http://search.cpan.org/~msergeant/XML-XPath-1.13/XPath.pm or
Template::Plugin::XML::XPath -
http://search.cpan.org/~abw/Template-Toolkit-2.14/lib/Template/Plugin/XML/XPath.pm.

-- Zbyszek

On 4/13/06, John Beppu <john.beppu at gmail.com> wrote:
> DISCLAIMER:  I'm an XSLT n00b.
>
> With that out of the way, I came up with the following .xsl stylesheet to
> take HTML::Widget's output and turn it into tables.  It's a work in
> progress, but I think some people might appreciate this.
>
>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
>
>   <xsl:output method="xml" indent="yes" />
>   <xsl:output omit-xml-declaration="yes" />
>
>   <xsl:key name="span" match="span" use="@id" />
>
>   <xsl:template match="form">
>     <form class="{@class}" id="{@id}" action="{@action}" method="{@method}">
>       <table width="100%">
>     <colgroup span="1" width="15%" />
>     <colgroup span="1" width="35%" />
>     <colgroup span="1" width="50%" />
>
>     <tbody>
>       <xsl:apply-templates />
>     </tbody>
>
>       </table>
>     </form>
>   </xsl:template>
>
>   <xsl:template match="legend">
>     <!-- omit -->
>   </xsl:template>
>
>   <xsl:template match="label">
>     <tr>
>       <td class="label"><xsl:apply-templates/></td>
>       <td class="value">
>     <xsl:copy-of select="input" />
>     <xsl:copy-of select="textarea" />
>     <xsl:copy-of select="select" />
>     <xsl:variable name="description_span_id" select="concat(@for,
> '_descriptions')" />
>     <xsl:copy-of select="key('span', $description_span_id)" />
>       </td>
>       <td>
>     <xsl:variable name="error_span_id" select="concat(@for, '_errors')" />
>     <xsl:copy-of select="key('span', $error_span_id)" />
>       </td>
>     </tr>
>   </xsl:template>
>
>   <xsl:template match="input[@type='hidden']">
>     <xsl:copy-of select="." />
>   </xsl:template>
>
>   <xsl:template match="input[@type='submit']">
>     <tr>
>       <td class="label"></td>
>       <td class="value" colspan="2">
>     <xsl:copy-of select="." />
>       </td>
>     </tr>
>   </xsl:template>
>
>   <!--
>   I use span elements with class span_label and span_value to
>   represent values that I only want to display (and not edit).
>   -->
>   <xsl:template match="//span[@class='span_label']">
>     <tr>
>       <td class="label">
>     <xsl:apply-templates/>
>       </td>
>       <td class="value" colspan="2">
>     <xsl:variable name="value_id" select="concat(@id, '_value')" />
>     <xsl:value-of select="key('span', $value_id)" />
>       </td>
>     </tr>
>   </xsl:template>
>
>   <xsl:template match="//span[@class='span_value']">
>     <!-- omit -->
>   </xsl:template>
>
> </xsl:stylesheet>
>
>
>
>
> On 2/9/06, John Lifsey - Contractor - <john.lifsey at nrl.navy.mil> wrote:
> > Seeing those two lines of code is about the best thing thats happened to
> > my life with Catalyst since HTML::Widget.
> > ++
> >
> > Matt S Trout wrote:
> > > On Thu, Feb 09, 2006 at 11:56:59AM -0800, John Wang wrote:
> > >
> > >> On 2/9/06, Pfister Andreas <Pfister_Andreas at hispeed.ch> wrote:
> > >>
> > >>> I like to create html form <form> dynamicly with HTML::Widget and to
> have
> > >>> a output like
> > >>> <table>
> > >>> <form xxxxx>
> > >>> *<tr><td>*INPUT 1*</td><td>*<input type="text">*<td></tr>*
> > >>> <tr><td>INPUT 1<........................
> > >>>
> > >>> Any hints how to get this output ? I tested the css example but I was
> not
> > >>> so happy with output.
> > >>>
> > >> Are you not happy with the default CSS or the DOM structure? If the
> default
> > >> CSS is bothering you, learning CSS layout would be the way to go. If
> the DOM
> > >> structure doesn't let you do what you want with CSS, perhaps the DOM
> > >> structure can be modified.
> > >>
> > >> I don't think H::W supports tables so if you want to use tables for
> layout,
> > >> you may need to do form generation outside of H::W but you can still
> use it
> > >> for validation.
> > >>
> > >
> > > [% USE widget_stylesheet = XSLT('stylesheet.xsl');
> > >    widget.as_xml | $widget_stylesheet %]
> > >
> > >
> >
> > _______________________________________________
> > Catalyst mailing list
> > Catalyst at lists.rawmode.org
> > http://lists.rawmode.org/mailman/listinfo/catalyst
> >
>
>
> _______________________________________________
> Catalyst mailing list
> Catalyst at lists.rawmode.org
> http://lists.rawmode.org/mailman/listinfo/catalyst
>
>
>


More information about the Catalyst mailing list