Skip to content

Commit 38554c8

Browse files
committed
navbar: add cog menu
* closes zenodo/rdm-project#262
1 parent f91379e commit 38554c8

File tree

2 files changed

+81
-1
lines changed

2 files changed

+81
-1
lines changed

invenio_app_rdm/theme/templates/semantic-ui/invenio_app_rdm/header.html

+37
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,43 @@
102102

103103
{%- block navbar_right %}
104104
<div class="right menu item">
105+
{%- set cog_menu_items = current_menu.submenu('cog').children %}
106+
{%- set cog_menu = namespace(display=false) -%}
107+
{%- for item in cog_menu_items if item.visible %}
108+
{%- set cog_menu.display = true -%}
109+
{%- endfor %}
110+
{%- if cog_menu.display %}
111+
<div class="ui dropdown floating pr-5 computer only">
112+
<a
113+
id="quick-create-dropdown-btn"
114+
role="button"
115+
aria-controls="quick-create-menu"
116+
aria-label="{{ _('Quick create') }}"
117+
aria-expanded="false"
118+
aria-haspopup="menu"
119+
>
120+
<i class="fitted cog icon inverted" aria-hidden="true"></i>
121+
<i class="fitted dropdown icon inverted" aria-hidden="true"></i>
122+
</a>
123+
<div role="menu" aria-labelledby="quick-create-dropdown-btn" id="quick-create-menu" class="menu">
124+
{%- for item in cog_menu_items if item.visible %}
125+
<a role="menuitem" class="item" href="{{ item.url }}">{{ item.text|safe }}</a>
126+
{%- endfor %}
127+
</div>
128+
</div>
129+
{# Mobile/Tablet Quick create ("plus") menu #}
130+
<div class="sub-menu mobile tablet only">
131+
<h2 class="ui small header">{{ _("Manage") }}</h2>
132+
<div role="menu">
133+
{%- for item in cog_menu_items if item.visible %}
134+
<a role="menuitem" class="item" href="{{ item.url }}">
135+
<i class="cog icon"></i>
136+
{{ item.text|safe }}
137+
</a>
138+
{%- endfor %}
139+
</div>
140+
</div>
141+
{% endif %}
105142
{%- if config.ACCOUNTS and current_user.is_authenticated %}
106143
{% for item in current_menu.submenu('notifications').children|sort(attribute='order') if item.visible recursive %}
107144
<div class="{{'item active' if item.active else 'item' }} inbox">

invenio_app_rdm/theme/views.py

+44-1
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@
1010

1111
"""Routes for general pages provided by Invenio-App-RDM."""
1212

13-
from flask import Blueprint, current_app, flash, render_template, request
13+
from flask import Blueprint, current_app, flash, g, render_template, request
1414
from flask_login import current_user
1515
from flask_menu import current_menu
16+
from invenio_administration.permissions import administration_permission
1617
from invenio_db import db
1718
from invenio_i18n import get_locale
1819
from invenio_i18n import lazy_gettext as _
@@ -29,6 +30,20 @@ def create_url_rule(rule, default_view_func):
2930
return {"rule": rule, "view_func": default_view_func}
3031

3132

33+
def _can_manage_community():
34+
"""Function used to check if a user has permissions to manage a community."""
35+
return administration_permission.can() and request.url_rule.rule.startswith(
36+
"/communities/"
37+
)
38+
39+
40+
def _can_manage_record():
41+
"""Function used to check if a user has permissions to manage a record."""
42+
return administration_permission.can() and request.url_rule.rule.startswith(
43+
"/records/"
44+
)
45+
46+
3247
#
3348
# Registration
3449
#
@@ -75,6 +90,34 @@ def init_menu():
7590
order=1,
7691
)
7792

93+
current_menu.submenu("cog.record").register(
94+
"administration.Records",
95+
_("Manage record"),
96+
order=1,
97+
endpoint_arguments_constructor=lambda: {
98+
"q": f"id:{request.view_args.get('pid_value')}"
99+
},
100+
visible_when=_can_manage_record,
101+
)
102+
103+
current_menu.submenu("cog.user").register(
104+
"administration.users",
105+
_("Manage user"),
106+
order=2,
107+
endpoint_arguments_constructor=lambda: {"q": f"id:{current_user.id}"},
108+
visible_when=_can_manage_record,
109+
)
110+
111+
current_menu.submenu("cog.community").register(
112+
"administration.communities",
113+
_("Manage community"),
114+
order=3,
115+
endpoint_arguments_constructor=lambda: {
116+
"q": f"slug:{request.view_args.get('pid_value')}"
117+
},
118+
visible_when=_can_manage_community,
119+
)
120+
78121
return blueprint
79122

80123

0 commit comments

Comments
 (0)