From c11d3ba1151e7a5fd77f3c8334bc4fb7ff551339 Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Mon, 16 Dec 2013 13:15:23 +0100 Subject: [PATCH] integrated helper function toplevel_menu_live that returns a menu + creates related plugin this requires a Page instance though, not just a request for now it is used only in sliceview and topmenuvalidationview --- portal/sliceview.py | 23 ++-------------------- sample/topmenuvalidationview.py | 24 ++-------------------- ui/topmenu.py | 35 +++++++++++++++++++++++++++++++-- 3 files changed, 37 insertions(+), 45 deletions(-) diff --git a/portal/sliceview.py b/portal/sliceview.py index 315658c3..318ee347 100644 --- a/portal/sliceview.py +++ b/portal/sliceview.py @@ -8,9 +8,8 @@ from unfold.page import Page from manifold.core.query import Query, AnalyzedQuery from manifold.manifoldapi import execute_query -from ui.topmenu import topmenu_items, the_user +from ui.topmenu import topmenu_items_live, the_user -from plugins.topmenuvalidation import TopmenuValidation from plugins.raw import Raw from plugins.stack import Stack from plugins.tabs import Tabs @@ -421,24 +420,6 @@ class SliceView (LoginRequiredAutoLogoutView): outline_complete = True, )) -# topmenu animation -# xxx all this should go into a plugin if its own with the topmenu and all... - query_pi_auths = Query.get('ple:user').filter_by('user_hrn', '==', '$user_hrn' ).select('pi_authorities') - page.enqueue_query(query_pi_auths) - # even though this plugin does not have any html materialization, the corresponding domid - # must exist because it is searched at init-time to create the JS plugin - # so we simply piggy-back the target button here - topmenuvalidation = TopmenuValidation ( - page=page, - # see above - domid='topmenu-validation', - query=query_pi_auths, - # this one is the target for a $.show() when the query comes back - button_domid="topmenu-validation") - # although the result does not matter, rendering is required for the JS init code to make it in the page - topmenuvalidation.render(request) -# end topmenu addition - # variables that will get passed to the view-unfold1.html template template_env = {} @@ -448,7 +429,7 @@ class SliceView (LoginRequiredAutoLogoutView): # more general variables expected in the template template_env [ 'title' ] = '%(slicename)s'%locals() # the menu items on the top - template_env [ 'topmenu_items' ] = topmenu_items('Slice', request) + template_env [ 'topmenu_items' ] = topmenu_items_live('Slice', page) # so we can sho who is logged template_env [ 'username' ] = the_user (request) diff --git a/sample/topmenuvalidationview.py b/sample/topmenuvalidationview.py index 4f33dda1..27b420e9 100644 --- a/sample/topmenuvalidationview.py +++ b/sample/topmenuvalidationview.py @@ -7,9 +7,7 @@ from manifold.core.query import Query, AnalyzedQuery from unfold.page import Page -from ui.topmenu import topmenu_items, the_user - -from plugins.topmenuvalidation import TopmenuValidation +from ui.topmenu import topmenu_items_live, the_user class TopmenuValidationView (TemplateView): @@ -20,24 +18,6 @@ class TopmenuValidationView (TemplateView): page=Page(request) - query_pi_auths = Query.get('ple:user').filter_by('user_hrn', '==', username ).select('pi_authorities') - page.enqueue_query(query_pi_auths) - - # even though this plugin does not have any html materialization, the corresponding domid - # must exist because it is searched at init-time to create the JS plugin - # so we simply piggy-back the target button here - topmenuvalidation = TopmenuValidation ( - page=page, - # see above - domid='topmenu-validation', - query=query_pi_auths, - # this one is the target for enabling when the query comes back - button_domid="topmenu-validation") - # there is a need to call render() for exposing the query and creating the js plugin - # even though this returns an empty string - topmenuvalidation.render(request) - - # variables that will get passed to the view-unfold1.html template template_env = {} @@ -47,7 +27,7 @@ class TopmenuValidationView (TemplateView): # more general variables expected in the template template_env [ 'title' ] = 'simple topmenuvalidation %(username)s'%locals() # the menu items on the top - template_env [ 'topmenu_items' ] = topmenu_items('Slice', request) + template_env [ 'topmenu_items' ] = topmenu_items_live('Slice', page) # so we can see who is logged template_env [ 'username' ] = the_user (request) diff --git a/ui/topmenu.py b/ui/topmenu.py index 4680c21a..6b152c8b 100644 --- a/ui/topmenu.py +++ b/ui/topmenu.py @@ -19,7 +19,7 @@ def the_user (request): # and plugins/topmenuvalidation for how this hident button is turned on when necessary # current: the beginning of the label in the menu that you want to outline -def topmenu_items (current,request=None): +def topmenu_items_static (current, request): has_user=request.user.is_authenticated() result=[] print request.user @@ -40,8 +40,8 @@ def topmenu_items (current,request=None): result.append({'label':'Platforms', 'href': '/portal/platforms/'}) result.append({'label':'Register', 'href': '/portal/register/'}) result.append({'label':'Contact Support', 'href': '/portal/contact/'}) + # 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) @@ -55,3 +55,34 @@ def topmenu_items (current,request=None): for dd in d['contents']: mark_active(dd,d) return result +# tmp - transition phase +def topmenu_items (current, request): + print "WARNING -- please now use topmenu_items_live (label, page) toplevel_items is deprecated -- WARNING" + return topmenu_items_static (current, request) + +# integrated helper function for an animated menu +from unfold.page import Page +from manifold.core.query import Query +from plugins.topmenuvalidation import TopmenuValidation + +### this is now the 'live' version, that has plugins +# for asynchronous management of topmenu +def topmenu_items_live (current, page): + request=page.request + query_pi_auths = Query.get('ple:user').filter_by('user_hrn', '==', '$user_hrn' ).select('pi_authorities') + page.enqueue_query(query_pi_auths) +# # even though this plugin does not have any html materialization, the corresponding domid +# # must exist because it is searched at init-time to create the JS plugin +# # so we simply piggy-back the target button created in the topmenu + topmenuvalidation = TopmenuValidation ( + page=page, + # see above + domid='topmenu-validation', + query=query_pi_auths, + # this one is the target for a $.show() when the query comes back + button_domid="topmenu-validation") + # although the result does not matter, rendering is required for the JS init code to make it in the page + topmenuvalidation.render(request) + + return topmenu_items_static (current, request) + -- 2.43.0