From: Thierry Parmentelat Date: Thu, 24 Oct 2013 10:21:53 +0000 (+0200) Subject: reinstate dropdown menu X-Git-Tag: 0.2-6~9^2~5 X-Git-Url: http://git.onelab.eu/?p=myslice.git;a=commitdiff_plain;h=d4fc2d235475cfd6f536e7cd584aa8524d02b242 reinstate dropdown menu --- diff --git a/portal/contactview.py b/portal/contactview.py index 0f2e4010..c07f3977 100644 --- a/portal/contactview.py +++ b/portal/contactview.py @@ -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) }) diff --git a/portal/homeview.py b/portal/homeview.py index b9d039a5..0be0105c 100644 --- a/portal/homeview.py +++ b/portal/homeview.py @@ -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)) diff --git a/portal/resourceview.py b/portal/resourceview.py index 04218540..c184636e 100644 --- a/portal/resourceview.py +++ b/portal/resourceview.py @@ -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) diff --git a/ui/topmenu.py b/ui/topmenu.py index 72904f9b..bdee674d 100644 --- a/ui/topmenu.py +++ b/ui/topmenu.py @@ -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):