Implement menu link ordering.
This commit is contained in:
@@ -21,8 +21,7 @@ class AuthenticationApp(MayanAppConfig):
|
||||
menu_secondary.bind_links(
|
||||
links=(
|
||||
link_password_change, link_logout
|
||||
),
|
||||
sources=(
|
||||
), position=99, sources=(
|
||||
'common:current_user_details', 'common:current_user_edit',
|
||||
'common:current_user_locale_profile_details',
|
||||
'common:current_user_locale_profile_edit',
|
||||
|
||||
@@ -1051,7 +1051,6 @@ THE SOFTWARE.
|
||||
'common:tools_list'
|
||||
)
|
||||
)
|
||||
menu_main.bind_links(links=(link_about,), position=-1)
|
||||
menu_facet.bind_links(
|
||||
links=(link_about, link_license, link_packages_licenses),
|
||||
sources=(
|
||||
@@ -1059,6 +1058,7 @@ THE SOFTWARE.
|
||||
'common:packages_licenses_view'
|
||||
)
|
||||
)
|
||||
menu_main.bind_links(links=(link_about,), position=99)
|
||||
menu_secondary.bind_links(
|
||||
links=(
|
||||
link_current_user_edit, link_current_user_locale_profile_edit
|
||||
|
||||
@@ -64,6 +64,7 @@ class Menu(object):
|
||||
self.name = name
|
||||
self.bound_links = {}
|
||||
self.unbound_links = {}
|
||||
self.link_positions = {}
|
||||
self.__class__._registry[name] = self
|
||||
|
||||
def _map_links_to_source(self, links, source, map_variable='bound_links', position=None):
|
||||
@@ -71,18 +72,23 @@ class Menu(object):
|
||||
|
||||
for link in links:
|
||||
source_links.append(link)
|
||||
self.link_positions[link] = position
|
||||
|
||||
def bind_links(self, links, sources=None, position=None):
|
||||
"""
|
||||
Associate a link to a model, a view inside this menu
|
||||
"""
|
||||
|
||||
if sources:
|
||||
try:
|
||||
for source in sources:
|
||||
self._map_links_to_source(links=links, source=source)
|
||||
else:
|
||||
self._map_links_to_source(
|
||||
links=links, position=position, source=source
|
||||
)
|
||||
except TypeError:
|
||||
# Unsourced links display always
|
||||
self._map_links_to_source(links=links, source=None)
|
||||
self._map_links_to_source(
|
||||
links=links, position=position, source=sources
|
||||
)
|
||||
|
||||
def resolve(self, context, source=None):
|
||||
request = Variable('request').resolve(context)
|
||||
@@ -162,6 +168,11 @@ class Menu(object):
|
||||
if resolved_link.link in unbound_links:
|
||||
result[0].remove(resolved_link)
|
||||
|
||||
# Sort links by position value passed during bind
|
||||
result[0] = sorted(
|
||||
result[0], key=lambda item: self.link_positions[item.link]
|
||||
)
|
||||
|
||||
return result
|
||||
|
||||
def unbind_links(self, links, sources=None):
|
||||
@@ -170,15 +181,15 @@ class Menu(object):
|
||||
change the link binding of core apps
|
||||
"""
|
||||
|
||||
if sources:
|
||||
try:
|
||||
for source in sources:
|
||||
self._map_links_to_source(
|
||||
links=links, source=source, map_variable='unbound_links'
|
||||
)
|
||||
else:
|
||||
except TypeError:
|
||||
# Unsourced links display always
|
||||
self._map_links_to_source(
|
||||
links=links, source=None, map_variable='unbound_links'
|
||||
links=links, source=sources, map_variable='unbound_links'
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user