bminer / node-blade

Blade - HTML Template Compiler, inspired by Jade & Haml
Other
320 stars 28 forks source link

foreach logic enhancement #178

Closed punund closed 11 years ago

punund commented 11 years ago

I suggest the following feature for foreach: alognside with else block which is rendered when collection is empty, there may be:

All of those are run only if the collection is not empty:

foreach users as user
  tr
    td #{user.firstName} #{user.lastName} (#{user.age})
header
  tr
    th User name and age
trailer
  tr
    td You have #{users.length} users today
enclose
  table
else
  p No users were found

I don't know how hard to implement and/or useful this would be, but almost every collection has a custom rendering depending on whether it's empty or not.

bminer commented 11 years ago

Interesting feature... I will have to think about this... my initial reaction is that it's almost more confusing syntax than simply adding a - if(users.length > 0) .... else .... block.

punund commented 11 years ago

This may be more confusing. On the other hand, writing

- if (users.length > 0)
  table
    foreach users as user
      tr
        td= user.name
- else
  p No users

versus

foreach users as user
  tr
    td= user.name
enclose
  table
else
  p No users

indents two levels deeper, uses visually bad "non-blade" if, and evaluates collection twice, which is not very DRY and may confuse too :scream:

bminer commented 11 years ago

I like your idea... just not the syntax proposed, especially the enclose keyword. My opinion only... I think the extra indenting improves readability even though it is, perhaps, more verbose.

I think I will close this issue for now, but if you have any other ideas, I'd certainly welcome them.