Skip to content

Commit

Permalink
user interface: menus structure
Browse files Browse the repository at this point in the history
* NEW Adds a configuration for menu categories icons.
* BETTER Attributes categories to organize submenus.
* BETTER Adds filter to remove special caracters in categories name.

Signed-off-by: Igor Milhit <[email protected]>
  • Loading branch information
Igor Milhit committed Mar 21, 2019
1 parent 089911c commit 08ec1d1
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 22 deletions.
5 changes: 5 additions & 0 deletions rero_ils/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -825,6 +825,11 @@ def _(x):

ADMIN_PERMISSION_FACTORY = 'rero_ils.permissions.admin_permission_factory'
ADMIN_BASE_TEMPLATE = BASE_TEMPLATE
RERO_ILS_ADMIN_CATEGORY_ICONS = {
"Admin & Monitoring": "fa fa-cogs",
"Catalogue": "fa fa-file-o",
"User Services": "fa fa-users"
}

#: Invenio circulation configuration.
CIRCULATION_ITEM_EXISTS = Item.get_record_by_pid
Expand Down
6 changes: 6 additions & 0 deletions rero_ils/filter.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
"""Jinja filters."""

import json
import re

import babel
import dateparser
Expand Down Expand Up @@ -89,3 +90,8 @@ def get_admin_view(record_type, menus):
def admin_menu_is_visible(admin_menu):
"""Evaluate if the menu is visible for a user."""
return any(m.is_accessible() for m in admin_menu)


def text_to_id(text):
"""."""
return re.sub(r'\W', '', text)
37 changes: 20 additions & 17 deletions rero_ils/modules/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ class ILSManager(BaseView):
@expose('/')
@expose('/<path:path>')
def index(self, path=None):
"""Angular Circulation view."""
"""Angular professional view."""
return self.render('rero_ils/page_admin.html')

def is_accessible(self):
Expand Down Expand Up @@ -66,15 +66,17 @@ def is_accessible(self):
circulation = {
'view_class': ILSManager,
'kwargs': dict(name='Circulation',
category='User Services',
endpoint='circulation',
menu_icon_type='fa',
menu_icon_value='fa-barcode')
menu_icon_value='fa-exchange')
}

my_library = {
'view_class': ILSManager,
'kwargs': dict(
name='My Library',
category='Admin & Monitoring',
endpoint='mylibrary',
menu_icon_type='fa',
menu_icon_value='fa-university'
Expand All @@ -85,64 +87,65 @@ def is_accessible(self):
'view_class': LibraryManager,
'kwargs': dict(
name='Libraries',
category='Admin & Monitoring',
endpoint='libraries',
menu_icon_type='fa',
menu_icon_value='fa-barcode'
menu_icon_value='fa-university'
)
}

item_types = {
'view_class': ILSManager,
'kwargs': dict(
name='Item Types',
category='Resources',
category='Admin & Monitoring',
endpoint='records/item_types',
menu_icon_type='fa',
menu_icon_value='fa-barcode'
menu_icon_value='fa-file-o'
)
}

patron_types = {
'view_class': ILSManager,
'kwargs': dict(
name='Patron Types',
category='Resources',
category='Admin & Monitoring',
endpoint='records/patron_types',
menu_icon_type='fa',
menu_icon_value='fa-barcode'
menu_icon_value='fa-users'
)
}

circ_policies = {
'view_class': ILSManager,
'kwargs': dict(
name='Circulation Policies',
category='Resources',
category='Admin & Monitoring',
endpoint='records/circ_policies',
menu_icon_type='fa',
menu_icon_value='fa-barcode'
menu_icon_value='fa-exchange'
)
}

patrons = {
'view_class': ILSManager,
'kwargs': dict(
name='Patrons',
category='Resources',
category='User Services',
endpoint='records/patrons',
menu_icon_type='fa',
menu_icon_value='fa-barcode'
menu_icon_value='fa-users'
)
}

persons = {
'view_class': ILSManager,
'kwargs': dict(
name='Persons',
category='Resources',
category='Catalogue',
endpoint='records/persons',
menu_icon_type='fa',
menu_icon_value='fa-barcode'
menu_icon_value='fa-user'
)
}

Expand All @@ -161,21 +164,21 @@ def is_accessible(self):
'view_class': ILSManager,
'kwargs': dict(
name='Libraries',
category='Resources',
category='Admin & Monitoring',
endpoint='records/libraries',
menu_icon_type='fa',
menu_icon_value='fa-barcode'
menu_icon_value='fa-university'
)
}

documents = {
'view_class': ILSManager,
'kwargs': dict(
name='Documents',
category='Resources',
category='Catalogue',
endpoint='records/documents',
menu_icon_type='fa',
menu_icon_value='fa-barcode'
menu_icon_value='fa-file-o'
)
}

Expand Down
3 changes: 2 additions & 1 deletion rero_ils/modules/ext.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
from .mef_persons.receivers import publish_api_harvested_records
from .patrons.listener import listener_item_at_desk
from ..filter import admin_menu_is_visible, format_date_filter, jsondumps, \
resource_can_create, to_pretty_json
resource_can_create, text_to_id, to_pretty_json
from ..permissions import can_edit


Expand All @@ -55,6 +55,7 @@ def __init__(self, app=None):
app.add_template_filter(format_date_filter, name='format_date')
app.add_template_filter(to_pretty_json, name='tojson_pretty')
app.add_template_filter(can_edit, name='can_edit')
app.add_template_filter(text_to_id, name='text_to_id')
app.add_template_filter(jsondumps, name='jsondumps')
app.add_template_filter(
resource_can_create,
Expand Down
5 changes: 4 additions & 1 deletion rero_ils/permissions.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,9 @@ def can(self):
'Circulation Settings',
'Libraries',
'My Library'] \
or admin_view.category in ['Resources']:
or admin_view.category in [
'Catalogue',
'User Services',
'Admin & Monitoring']:
return FreeAccess()
return default_admin_permission_factory(admin_view)
10 changes: 7 additions & 3 deletions rero_ils/templates/rero_ils/macros/header_menus.html
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,17 @@
{%- if children %}
{% set class_name = item.get_class_name() %}
<li class="nav-item {{ class_name if class_name }}">
{% set item_id = item.name.replace(' ', '-').lower() %}
{% set item_id = item.name | text_to_id %}
{% set icon_class = config.get('RERO_ILS_ADMIN_CATEGORY_ICONS', {}).get(item.name) %}
<a data-toggle="collapse"
class="nav-link collapsed"
href="#{{ item_id }}"
role="button"
aria-controls="collapseExample"
aria-expanded="false">
{% if icon_class %}
<i class="{{ icon_class }}" aria-hidden="true"></i>
{% endif %}
{{ menu_icon(item) }} {{ _(item.name) }}
<i class="fa fa-caret-down" aria-hidden="true"></i>
</a>
Expand Down Expand Up @@ -58,7 +62,7 @@
{%- if item.is_category() -%}
{% set children = item.get_children() %}
{%- if children %}
{% set item_id = item.name.replace(' ', '-').lower() %}
{% set item_id = item.name | text_to_id %}
<div class="rero-ils-admin-submenu collapse flex-grow-1 w-100" id="{{ item_id }}" data-parent="#navbarHide">
<ul class="navbar-nav">
{%- for child in children -%}
Expand Down Expand Up @@ -92,7 +96,7 @@
{%- if children -%}
{% set class_name = item.get_class_name() %}
<li class="nav-item{{ ' active' if item.active else ''}} w-100 list-group-item bg-light">
{% set item_id = item.name.replace(' ', '-').lower() %}
{% set item_id = item.name | text_to_id %}
<a data-toggle="collapse" class="nav-link collapsed" role="button" href="#{{ item_id }}" aria-controls="collapseExample" aria-expanded="false">{{ _(item.name) }} <i class="fa fa-caret-down float-right" aria-hidden="true"></i></a>
<ul class="nav collapse pl-2" data-parent="#mobileHide" id="{{ item_id }}">
{%- for child in children -%}
Expand Down

0 comments on commit 08ec1d1

Please sign in to comment.