Following the sage advice of Jakob Nielsen, I wanted a way to turn off links that point to the current page within the menu (see #10 here: http://www.useit.com/alertbox/20031110.html). At the bottom of this e-mail, I'm including a proposed patch that would make this easier.
I've added two optional parameters to the MENU helper: no_link_url and active_url. To illustrate how this works, I'll give three examples of what you would see for the Index link in the welcome scaffolding app by altering the MENU line from layout.html. 1. Current behavior {{=MENU(response.menu,_class='sf-menu')}} <li><a href="/welcome/default/index">Index</a></li> 2. Removing the link for the current page {{=MENU(response.menu,_class='sf-menu',no_link_url=request.url)}} <li><div>Index</div></li> 3. Adding the class 'active' to the list item of the link to the current page {{=MENU(response.menu,_class='sf-menu',active_url=request.url, li_active='active')}} <li class="active"><a href="/welcome/default/index">Index</a></li> And here's the patch. Please let me know if I've missed something. diff -r 6608e0e6b4f3 -r badb5215df3f applications/welcome/static/base.css --- a/applications/welcome/static/base.css Fri Oct 15 07:17:35 2010 -0500 +++ b/applications/welcome/static/base.css Fri Oct 22 15:11:06 2010 -0400 @@ -216,9 +216,12 @@ .sf-menu { float: left; } -.sf-menu a { +.sf-menu a, .sf-menu div { padding: 5px 15px; } +.sf-menu div { + color: white; +} .sf-menu li { background: #333333; } diff -r 6608e0e6b4f3 -r badb5215df3f gluon/html.py --- a/gluon/html.py Fri Oct 15 07:17:35 2010 -0500 +++ b/gluon/html.py Fri Oct 22 15:11:06 2010 -0400 @@ -1699,14 +1699,16 @@ ul = UL(_class=self['ul_class']) for item in data: (name, active, link) = item[:3] - if link: + if 'no_link_url' in self.attributes and self['no_link_url']==link: + li = LI(DIV(name)) + elif link: li = LI(A(name, _href=link)) else: li = LI(A(name, _href='#null')) if len(item) > 3 and item[3]: li['_class'] = self['li_class'] li.append(self.serialize(item[3], level+1)) - if active: + if active or 'active_url' in self.attributes and self['active_url']==link: if li['_class']: li['_class'] = li['_class']+' '+self['li_active'] else: