Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Loading…

foreach logic enhancement #178

Closed
punund opened this Issue · 3 comments

2 participants

@punund

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

  • header block, which is executed before iterating over collection
  • trailer block, which is executed after iterating over collection
  • enclose block, rendering around

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
Owner

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

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
Owner

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.

@bminer bminer closed this
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.