reinstate dropdown menu
authorThierry Parmentelat <thierry.parmentelat@inria.fr>
Thu, 24 Oct 2013 10:21:53 +0000 (12:21 +0200)
committerThierry Parmentelat <thierry.parmentelat@inria.fr>
Thu, 24 Oct 2013 10:21:53 +0000 (12:21 +0200)
portal/contactview.py
portal/homeview.py
portal/resourceview.py
ui/topmenu.py

index 0f2e401..c07f397 100644 (file)
@@ -40,6 +40,6 @@ class ContactView (View):
     def _display (self, request, form):
         return render(request, 'contact.html', {
                 'form': form,
-                'topmenu_items': topmenu_items('Contact Us', request),
+                'topmenu_items': topmenu_items('Contact', request),
                 'username': the_user (request)
                 })
index b9d039a..0be0105 100644 (file)
@@ -56,7 +56,7 @@ class HomeView (View):
     def get (self, request, state=None):
         env = self.default_env()
         env['username']=the_user(request)
-        env['topmenu_items'] = topmenu_items('', request)
+        env['topmenu_items'] = topmenu_items(None, request)
         if state: env['state'] = state
         elif not env['username']: env['state'] = "Please sign in"
         return render_to_response('home-view.html',env, context_instance=RequestContext(request))
index 0421854..c184636 100644 (file)
@@ -81,7 +81,7 @@ class ResourceView(TemplateView):
         # more general variables expected in the template
         context['title'] = 'Information about a resource'
         # the menu items on the top
-        context['topmenu_items'] = topmenu_items('Dashboard', self.request)
+        context['topmenu_items'] = topmenu_items(None, self.request)
         # so we can sho who is logged
         context['username'] = the_user(self.request)
 
index 72904f9..bdee674 100644 (file)
@@ -7,33 +7,35 @@
 # ### a dropdown
 # { 'label': ..., 'href'=..., 'dropdown':True, 'contents': [ { 'label':.., 'href'} ] }
 # , ..]
+
+# current: the beginning of the label in the menu that you want to outline
 def topmenu_items (current,request=None):
     has_user=request.user.is_authenticated()
     result=[]
     if has_user:
         result.append({'label':'Dashboard', 'href': '/portal/dashboard/'})
         result.append({'label':'Request a slice', 'href': '/portal/slice_request/'})
-        result.append({'label':'My Account', 'href': '/portal/account/'})
-        result.append({'label':'Contact Support', 'href': '/portal/contact/'})
-# Not really useful at this point, is it ?
-# This should probably go into dashboard at some point
-#        result.append({'label':'Platforms', 'href': '/portal/platforms/'})
-# the code for building a dropdown instead - but somehow this is broken
-#        dropdown = [ {'label':'..', 'href': '..'}, ...]
-#        result.append({'label': 'More', 'href':"#", 'dropdown':True, 'contents':dropdown})
+        dropdown = []
+        dropdown.append({'label':'My Account', 'href': '/portal/account/'})
+        dropdown.append({'label':'Contact Support', 'href': '/portal/contact/'})
+        result.append({'label': 'More', 'href':"#", 'dropdown':True, 'contents':dropdown})
     else:
         result.append({'label':'Home', 'href': '/login'})
         # looks like this is accessible to non-logged users
         result.append({'label':'Platforms', 'href': '/portal/platforms/'})
         result.append({'label':'Register', 'href': '/portal/register/'})
         result.append({'label':'Contact Support', 'href': '/portal/contact/'})
-    # mark active
-    for d in result:
-        if 'dropdown' in d:
-            for dd in d['contents']:
-                if dd['label'] == current: dd['is_active']=True
-        else:
-            if d['label'] == current: d['is_active']=True
+    # mark active if the provided 'current', even if shorter, matches the beginning of d['label']
+    
+    if current is not None:
+        current=current.lower()
+        curlen=len(current)
+        def mark_active(d):
+            if d['label'][:curlen].lower() == current: d['is_active']=True
+        for d in result:
+            mark_active(d)
+            if 'dropdown' in d:
+                for dd in d['contents']: mark_active(dd)
     return result
 
 def the_user (request):