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

John Beppu john.beppu at gmail.com
Thu Apr 13 12:49:11 CEST 2006


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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.rawmode.org/pipermail/catalyst/attachments/20060413/bb9eaa4a/attachment-0001.htm 


More information about the Catalyst mailing list