views:

33

answers:

1

I am using Groovy's handy MarkupBuilder to build an HTML page from various source data.

One thing I am struggling to do nicely is build an HTML table and apply different style classes to the first and last rows. This is probably best illustrated with an example...

table() {
  thead() {
    tr(){
      th('class':'l name', 'name')
      th('class':'type', 'type')
      th('description')
    }
  }
  tbody() {
    // Add a row to the table for each item in myList
    myList.each {
      tr('class' : '????????') {
        td('class':'l name', it.name)
        td('class':'type', it.type)
        td(it.description)
      }
    }
  }   
}

In the <tbody> section, I would like to set the class of the <tr> element to be something different depending whether the current item in myList is the first or the last item.

Is there a nice Groovy-ified way to do this without resorting to something manual to check item indexes against the list size using something like eachWithIndex{}?

+5  A: 

You could use

if(it == myList.first()) {
   // First element
}

if(it == myList.last()) {
   // Last element
}
sbglasius
Nice tip, didn't know about those methods.
xlson
Useful, thanks. As above, hadn't seen those methods before...
tomtheguvnor
Just remember, that first() and last() only works on List, not Map or Set (as per http://groovy.codehaus.org/groovy-jdk/)
sbglasius