From 73a74ad767184a38f7d1cd7381865b5d18e8ba69 Mon Sep 17 00:00:00 2001 From: Julian Rother <julianr@fsmpi.rwth-aachen.de> Date: Thu, 12 Aug 2021 17:15:46 +0200 Subject: [PATCH] Implemented ordering for navbar items Co-authored-by: nd <nd@cccv.de> --- uffd/invite/views.py | 2 +- uffd/mail/views.py | 2 +- uffd/navbar.py | 5 ++++- uffd/role/views.py | 2 +- uffd/rolemod/views.py | 2 +- uffd/selfservice/views.py | 2 +- uffd/services/views.py | 2 +- uffd/user/views_group.py | 2 +- uffd/user/views_user.py | 2 +- 9 files changed, 12 insertions(+), 9 deletions(-) diff --git a/uffd/invite/views.py b/uffd/invite/views.py index 7d1887be..d93dd892 100644 --- a/uffd/invite/views.py +++ b/uffd/invite/views.py @@ -53,7 +53,7 @@ def reset_acl_filter(user): return Invite.creator_dn == user.dn @bp.route('/') -@register_navbar(lazy_gettext('Invites'), icon='link', blueprint=bp, visible=invite_acl) +@register_navbar(14, lazy_gettext('Invites'), icon='link', blueprint=bp, visible=invite_acl) @invite_acl_required def index(): invites = Invite.query.filter(view_acl_filter(request.user)).all() diff --git a/uffd/mail/views.py b/uffd/mail/views.py index 0e5948d6..9cc7e585 100644 --- a/uffd/mail/views.py +++ b/uffd/mail/views.py @@ -20,7 +20,7 @@ def mail_acl_check(): return request.user and request.user.is_in_group(current_app.config['ACL_ADMIN_GROUP']) @bp.route("/") -@register_navbar(lazy_gettext('Forwardings'), icon='envelope', blueprint=bp, visible=mail_acl_check) +@register_navbar(29, lazy_gettext('Forwardings'), icon='envelope', blueprint=bp, visible=mail_acl_check) def index(): return render_template('mail/list.html', mails=Mail.query.all()) diff --git a/uffd/navbar.py b/uffd/navbar.py index e9b1f9eb..e0167597 100644 --- a/uffd/navbar.py +++ b/uffd/navbar.py @@ -7,7 +7,8 @@ def setup_navbar(app): # or 'fa' # ( see: http://fontawesome.io/icons/ ) # visible is a function that returns "True" if this icon should be visible in the calling context -def register_navbar(name, iconlib='fa', icon=None, group=None, endpoint=None, blueprint=None, visible=None): +# pylint: disable=too-many-arguments +def register_navbar(position, name, iconlib='fa', icon=None, group=None, endpoint=None, blueprint=None, visible=None): def wrapper(func): def deferred_call(state): assert blueprint @@ -27,7 +28,9 @@ def register_navbar(name, iconlib='fa', icon=None, group=None, endpoint=None, bl item['name'] = name item['blueprint'] = blueprint item['visible'] = visible or (lambda: True) + item['position'] = position state.app.navbarList.append(item) + state.app.navbarList.sort(key=lambda item: item['position']) blueprint.record_once(deferred_call) return func diff --git a/uffd/role/views.py b/uffd/role/views.py index 2e8f9d9f..4c10a8b5 100644 --- a/uffd/role/views.py +++ b/uffd/role/views.py @@ -48,7 +48,7 @@ def role_acl_check(): return request.user and request.user.is_in_group(current_app.config['ACL_ADMIN_GROUP']) @bp.route("/") -@register_navbar(lazy_gettext('Roles'), icon='key', blueprint=bp, visible=role_acl_check) +@register_navbar(25, lazy_gettext('Roles'), icon='key', blueprint=bp, visible=role_acl_check) def index(): return render_template('role/list.html', roles=Role.query.all()) diff --git a/uffd/rolemod/views.py b/uffd/rolemod/views.py index 8a9c6051..be60ee34 100644 --- a/uffd/rolemod/views.py +++ b/uffd/rolemod/views.py @@ -22,7 +22,7 @@ def acl_check(): #pylint: disable=inconsistent-return-statements return redirect(url_for('index')) @bp.route("/") -@register_navbar(lazy_gettext('Moderation'), icon='user-lock', blueprint=bp, visible=user_is_rolemod) +@register_navbar(12, lazy_gettext('Moderation'), icon='user-lock', blueprint=bp, visible=user_is_rolemod) def index(): roles = Role.query.filter(Role.moderator_group_dn.in_(request.user.group_dns)).all() return render_template('rolemod/list.html', roles=roles) diff --git a/uffd/selfservice/views.py b/uffd/selfservice/views.py index 82d745a4..ca1f0248 100644 --- a/uffd/selfservice/views.py +++ b/uffd/selfservice/views.py @@ -19,7 +19,7 @@ bp = Blueprint("selfservice", __name__, template_folder='templates', url_prefix= reset_ratelimit = Ratelimit('passwordreset', 1*60*60, 3) @bp.route("/") -@register_navbar(lazy_gettext('Selfservice'), icon='portrait', blueprint=bp, visible=lambda: bool(request.user)) +@register_navbar(0, lazy_gettext('Selfservice'), icon='portrait', blueprint=bp, visible=lambda: bool(request.user)) @login_required() def index(): return render_template('selfservice/self.html', user=request.user) diff --git a/uffd/services/views.py b/uffd/services/views.py index 3423eba4..c533cef3 100644 --- a/uffd/services/views.py +++ b/uffd/services/views.py @@ -80,7 +80,7 @@ def services_visible(): return len(get_services(request.user)) > 0 @bp.route("/") -@register_navbar(lazy_gettext('Services'), icon='sitemap', blueprint=bp, visible=services_visible) +@register_navbar(9, lazy_gettext('Services'), icon='sitemap', blueprint=bp, visible=services_visible) def index(): services = get_services(request.user) if not current_app.config['SERVICES']: diff --git a/uffd/user/views_group.py b/uffd/user/views_group.py index c9c80fde..480a7b59 100644 --- a/uffd/user/views_group.py +++ b/uffd/user/views_group.py @@ -18,7 +18,7 @@ def group_acl_check(): return request.user and request.user.is_in_group(current_app.config['ACL_ADMIN_GROUP']) @bp.route("/") -@register_navbar(lazy_gettext('Groups'), icon='layer-group', blueprint=bp, visible=group_acl_check) +@register_navbar(23, lazy_gettext('Groups'), icon='layer-group', blueprint=bp, visible=group_acl_check) def index(): return render_template('group/list.html', groups=Group.query.all()) diff --git a/uffd/user/views_user.py b/uffd/user/views_user.py index db2800a8..80e91b05 100644 --- a/uffd/user/views_user.py +++ b/uffd/user/views_user.py @@ -26,7 +26,7 @@ def user_acl_check(): return request.user and request.user.is_in_group(current_app.config['ACL_ADMIN_GROUP']) @bp.route("/") -@register_navbar(lazy_gettext('Users'), icon='users', blueprint=bp, visible=user_acl_check) +@register_navbar(21, lazy_gettext('Users'), icon='users', blueprint=bp, visible=user_acl_check) def index(): return render_template('user/list.html', users=User.query.all()) -- GitLab