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:

Reply via email to