diff --git a/biscuit/core/menus.py b/biscuit/core/menus.py index c85af6bfb840d54ce535f86c403ea361dbd3f005..082e514c2496a57c805aa2e4f8f5cbb7d4a6f17f 100644 --- a/biscuit/core/menus.py +++ b/biscuit/core/menus.py @@ -1,20 +1,24 @@ -from django.urls import reverse -from django.utils.translation import gettext as _ - -from menu import Menu, MenuItem - -Menu.add_item('main', MenuItem('Login', - reverse('login'), - check=lambda request: request.user.is_anonymous)) - -Menu.add_item('main', MenuItem('Logout', - reverse('logout'), - check=lambda request: request.user.is_authenticated)) - -Menu.add_item('main', MenuItem(_('Persons'), - reverse('persons'), - check=lambda request: request.user.is_authenticated)) - -Menu.add_item('main', MenuItem(_('Groups'), - reverse('groups'), - check=lambda request: request.user.is_authenticated)) +MENUS = { + 'NAV_MENU_CORE': [ + { + 'name': 'Login', + 'url': 'login', + 'validators': ['menu_generator.validators.is_anonymous'] + }, + { + 'name': 'Logout', + 'url': 'logout', + 'validators': ['menu_generator.validators.is_authenticated'] + }, + { + 'name': 'Persons', + 'url': 'persons', + 'validators': ['menu_generator.validators.is_authenticated'] + }, + { + 'name': 'Groups', + 'url': 'groups', + 'validators': ['menu_generator.validators.is_authenticated'] + } + ] +} diff --git a/biscuit/core/settings.py b/biscuit/core/settings.py index 6951ab5a8be06372f6afe0318cf8228ce96548c1..289d3dcd0f3b770d5e5cda0ef514531e32bc3d2b 100644 --- a/biscuit/core/settings.py +++ b/biscuit/core/settings.py @@ -31,7 +31,7 @@ INSTALLED_APPS = [ 'fa', 'django_any_js', 'django_tables2', - 'menu', + 'menu_generator', 'phonenumber_field', 'biscuit.core' ] diff --git a/biscuit/core/templates/bootstrap4-navbar-submenu.html b/biscuit/core/templates/bootstrap4-navbar-submenu.html index 417a45e824ce2be22532b72e089680dde6ae4aa3..d6f441ed286481fabaf16c530e8df55eef22f8b4 100644 --- a/biscuit/core/templates/bootstrap4-navbar-submenu.html +++ b/biscuit/core/templates/bootstrap4-navbar-submenu.html @@ -1,14 +1,12 @@ {# -*- engine:django -*- #} <div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown"> {% for item in items %} - {% if item.visible %} - <a class="dropdown-item {% if item.selected %} active{% endif %}{% if item.children %} dropdown-submenu{% endif %}" href="{{ item.url }}">{{ item.title }} - {% if item.children %} - {% with items=item.children template_name='bootstrap-navbar-submenu.html' %} - {% include template_name %} - {% endwith %} - {% endif %} - </a> - {% endif %} + <a class="dropdown-item {% if item.selected %} active{% endif %}{% if item.submenu %} dropdown-submenu{% endif %}" href="{{ item.url }}">{{ item.name }} + {% if item.submenu %} + {% with items=item.submenu template_name='bootstrap4-navbar-submenu.html' %} + {% include template_name %} + {% endwith %} + {% endif %} + </a> {% endfor %} </div> diff --git a/biscuit/core/templates/bootstrap4-navbar.html b/biscuit/core/templates/bootstrap4-navbar.html index 9d0b18ea6956f36566eeb9fc06f14630f62b1cdd..fe49b9b8147b3562b3a3ddea6e7d0220e8835e66 100644 --- a/biscuit/core/templates/bootstrap4-navbar.html +++ b/biscuit/core/templates/bootstrap4-navbar.html @@ -1,23 +1,23 @@ {# -*- engine:django -*- #} -{% for item in menu %} - {% if item.visible %} - {% if item.separator %} - <li class="divider-vertical"></li> - {% endif %} - - <li class="nav-item {% if item.selected %} active{% endif %}{% if item.children %} dropdown{% endif %}" id="top-menu-{{ item.slug }}"> - <a href="{{ item.url }}" {% if not item.children %}class=nav-link {% endif%} {% if item.children %} class="nav-link dropdown-toggle" data-hover="dropdown" data-toggle="dropdown"{% endif %}> - {% if item.icon %} - <i class="icon-{{ item.icon }} icon-white"></i> - {% endif %} - <span>{{ item.title }}</span> - {% if item.children %} - <b class="caret"></b> - {% endif %} - </a> - {% if item.children %} - {% include 'bootstrap4-navbar-submenu.html' with items=item.children %} - {% endif %} - </li> - {% endif %} -{% endfor %} +{% load menu_generator %} + {% get_menu "NAV_MENU_CORE" as core_menu %} + <ul class="nav navbar-nav ml-auto"> + {% for item in core_menu %} + {% if not item.submenu %} + <li class="{% if item.selected %} active {% endif %} nav-item"> + <a href="{{ item.url }}" class="nav-link"> <i class="{{ item.icon_class }}"></i> {{ item.name }}</a> + </li> + {% endif %} + {% if item.submenu %} + <a class="nav-link dropdown-toggle" data-toggle="dropdown" id="navbarDropdown" aria-expanded="false" role="button" aria-haspopup="true" href="#"> + {{ item.name }} + </a> + <div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown"> + {% for menu in item.submenu %} + <a class="dropdown-item" href="{{ menu.url }}"> + {{ menu.name }} + </a> + {% endfor %} + </div> + {% endif %} + {% endfor %} diff --git a/biscuit/core/templates/core/base.html b/biscuit/core/templates/core/base.html index 320c744556f6d6905c85ddfc11dbdceb7916ee41..09124833c5fa5e310c0b32bc7c0b6472acf1ddb1 100644 --- a/biscuit/core/templates/core/base.html +++ b/biscuit/core/templates/core/base.html @@ -1,6 +1,6 @@ {# -*- engine:django -*- #} {% extends "bootstrap4/bootstrap4.html" %} -{% load bootstrap4 menu staticfiles font_awesome any_js %} +{% load bootstrap4 menu_generator staticfiles font_awesome any_js %} {% block bootstrap4_title %}BiscuIT School Information System{% endblock %} @@ -25,15 +25,12 @@ <a class="navbar-brand" href="{% url "index" %}"> <span class="glyphicon glyphicon-briefcase"></span> BiscuIT School Information System </a> - </div> <div class="collapse navbar-collapse" id="navbar-main"> - {% generate_menu %} <ul class="nav navbar-nav ml-auto"> - {% with menu=menus.main %}{% include "bootstrap4-navbar.html" %}{% endwith %} + {% with menu=NAV_MENU_CORE %}{% include "bootstrap4-navbar.html" %}{% endwith %} </ul> </div> - </div> </nav> <div class="container"> diff --git a/poetry.lock b/poetry.lock deleted file mode 100644 index 7fa8fbd2d6ab7ffea15d8df2aa3d256a1738b668..0000000000000000000000000000000000000000 --- a/poetry.lock +++ /dev/null @@ -1,443 +0,0 @@ -[[package]] -category = "dev" -description = "A configurable sidebar-enabled Sphinx theme" -name = "alabaster" -optional = false -python-versions = "*" -version = "0.7.12" - -[[package]] -category = "dev" -description = "Classes Without Boilerplate" -name = "attrs" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "19.1.0" - -[[package]] -category = "main" -description = "Internationalization utilities" -name = "babel" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "2.7.0" - -[package.dependencies] -pytz = ">=2015.7" - -[[package]] -category = "dev" -description = "Python package for providing Mozilla's CA Bundle." -name = "certifi" -optional = false -python-versions = "*" -version = "2019.6.16" - -[[package]] -category = "dev" -description = "Universal encoding detector for Python 2 and 3" -name = "chardet" -optional = false -python-versions = "*" -version = "3.0.4" - -[[package]] -category = "dev" -description = "Cross-platform colored terminal text." -marker = "sys_platform == \"win32\"" -name = "colorama" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.4.1" - -[[package]] -category = "main" -description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design." -name = "django" -optional = false -python-versions = ">=3.5" -version = "2.2.4" - -[package.dependencies] -pytz = "*" -sqlparse = "*" - -[[package]] -category = "main" -description = "Include JavaScript libraries with readable template tags" -name = "django-any-js" -optional = false -python-versions = "*" -version = "1.0.3.post0" - -[package.dependencies] -Django = ">=1.11" - -[[package]] -category = "main" -description = "Bootstrap support for Django projects" -name = "django-bootstrap4" -optional = false -python-versions = "*" -version = "0.0.8" - -[[package]] -category = "main" -description = "Yet another Django audit log app, hopefully the simplest one." -name = "django-easy-audit" -optional = false -python-versions = "*" -version = "1.1" - -[[package]] -category = "main" -description = "Font Awesome for Django" -name = "django-fa" -optional = false -python-versions = "*" -version = "1.0.0" - -[package.dependencies] -Django = ">1.4" - -[[package]] -category = "main" -description = "A system for dealing with local settings in Django projects" -name = "django-local-settings" -optional = false -python-versions = "*" -version = "1.0b10" - -[package.dependencies] -six = "*" - -[[package]] -category = "main" -description = "Django middleware that keep request instance for every thread." -name = "django-middleware-global-request" -optional = false -python-versions = "*" -version = "0.1.2" - -[package.dependencies] -django = "*" - -[[package]] -category = "main" -description = "An international phone number field for django models." -name = "django-phonenumber-field" -optional = false -python-versions = ">=3.5" -version = "3.0.1" - -[package.dependencies] -Django = ">=1.11.3" -babel = "*" -phonenumbers = ">=7.0.2" - -[[package]] -category = "main" -description = "Simple, yet powerful, code-based menus for Django applications" -name = "django-simple-menu" -optional = false -python-versions = "*" -version = "1.2.1" - -[package.dependencies] -Django = "*" -setuptools = "*" - -[[package]] -category = "main" -description = "Table/data-grid framework for Django" -name = "django-tables2" -optional = false -python-versions = "*" -version = "2.1.0" - -[package.dependencies] -Django = ">=1.11" - -[[package]] -category = "dev" -description = "Docutils -- Python Documentation Utilities" -name = "docutils" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -version = "0.15.2" - -[[package]] -category = "dev" -description = "Internationalized Domain Names in Applications (IDNA)" -name = "idna" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "2.8" - -[[package]] -category = "dev" -description = "Getting image size from png/jpeg/jpeg2000/gif file" -name = "imagesize" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "1.1.0" - -[[package]] -category = "dev" -description = "A small but fast and easy to use stand-alone template engine written in pure python." -name = "jinja2" -optional = false -python-versions = "*" -version = "2.10.1" - -[package.dependencies] -MarkupSafe = ">=0.23" - -[[package]] -category = "dev" -description = "Safely add untrusted strings to HTML/XML markup." -name = "markupsafe" -optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" -version = "1.1.1" - -[[package]] -category = "dev" -description = "Core utilities for Python packages" -name = "packaging" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "19.1" - -[package.dependencies] -attrs = "*" -pyparsing = ">=2.0.2" -six = "*" - -[[package]] -category = "main" -description = "Python version of Google's common library for parsing, formatting, storing and validating international phone numbers." -marker = "extra == \"phonenumbers\"" -name = "phonenumbers" -optional = false -python-versions = "*" -version = "8.10.17" - -[[package]] -category = "main" -description = "Python Imaging Library (Fork)" -name = "pillow" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "6.1.0" - -[[package]] -category = "dev" -description = "Pygments is a syntax highlighting package written in Python." -name = "pygments" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "2.4.2" - -[[package]] -category = "dev" -description = "Python parsing module" -name = "pyparsing" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -version = "2.4.2" - -[[package]] -category = "main" -description = "World timezone definitions, modern and historical" -name = "pytz" -optional = false -python-versions = "*" -version = "2019.2" - -[[package]] -category = "dev" -description = "Python HTTP for Humans." -name = "requests" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -version = "2.22.0" - -[package.dependencies] -certifi = ">=2017.4.17" -chardet = ">=3.0.2,<3.1.0" -idna = ">=2.5,<2.9" -urllib3 = ">=1.21.1,<1.25.0 || >1.25.0,<1.25.1 || >1.25.1,<1.26" - -[[package]] -category = "main" -description = "Python 2 and 3 compatibility utilities" -name = "six" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*" -version = "1.12.0" - -[[package]] -category = "dev" -description = "This package provides 23 stemmers for 22 languages generated from Snowball algorithms." -name = "snowballstemmer" -optional = false -python-versions = "*" -version = "1.9.0" - -[[package]] -category = "dev" -description = "Python documentation generator" -name = "sphinx" -optional = false -python-versions = ">=3.5" -version = "2.1.2" - -[package.dependencies] -Jinja2 = ">=2.3" -Pygments = ">=2.0" -alabaster = ">=0.7,<0.8" -babel = ">=1.3,<2.0 || >2.0" -colorama = ">=0.3.5" -docutils = ">=0.12" -imagesize = "*" -packaging = "*" -requests = ">=2.5.0" -setuptools = "*" -snowballstemmer = ">=1.1" -sphinxcontrib-applehelp = "*" -sphinxcontrib-devhelp = "*" -sphinxcontrib-htmlhelp = "*" -sphinxcontrib-jsmath = "*" -sphinxcontrib-qthelp = "*" -sphinxcontrib-serializinghtml = "*" - -[[package]] -category = "dev" -description = "Type hints (PEP 484) support for the Sphinx autodoc extension" -name = "sphinx-autodoc-typehints" -optional = false -python-versions = ">=3.5.2" -version = "1.7.0" - -[package.dependencies] -Sphinx = ">=2.1" - -[[package]] -category = "dev" -description = "" -name = "sphinxcontrib-applehelp" -optional = false -python-versions = "*" -version = "1.0.1" - -[[package]] -category = "dev" -description = "" -name = "sphinxcontrib-devhelp" -optional = false -python-versions = "*" -version = "1.0.1" - -[[package]] -category = "dev" -description = "Improve the Sphinx autodoc for Django classes." -name = "sphinxcontrib-django" -optional = false -python-versions = "*" -version = "0.5" - -[[package]] -category = "dev" -description = "" -name = "sphinxcontrib-htmlhelp" -optional = false -python-versions = "*" -version = "1.0.2" - -[[package]] -category = "dev" -description = "A sphinx extension which renders display math in HTML via JavaScript" -name = "sphinxcontrib-jsmath" -optional = false -python-versions = ">=3.5" -version = "1.0.1" - -[[package]] -category = "dev" -description = "" -name = "sphinxcontrib-qthelp" -optional = false -python-versions = "*" -version = "1.0.2" - -[[package]] -category = "dev" -description = "" -name = "sphinxcontrib-serializinghtml" -optional = false -python-versions = "*" -version = "1.1.3" - -[[package]] -category = "main" -description = "Non-validating SQL parser" -name = "sqlparse" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "0.3.0" - -[[package]] -category = "dev" -description = "HTTP library with thread-safe connection pooling, file post, and more." -name = "urllib3" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4" -version = "1.25.3" - -[metadata] -content-hash = "ae454cbcc16caa45f0824d71441bbe014af300a30ca1fffd0e88cae6dba30e78" -python-versions = "^3.7" - -[metadata.hashes] -alabaster = ["446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359", "a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"] -attrs = ["69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79", "f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399"] -babel = ["af92e6106cb7c55286b25b38ad7695f8b4efb36a90ba483d7f7a6628c46158ab", "e86135ae101e31e2c8ec20a4e0c5220f4eed12487d5cf3f78be7e98d3a57fc28"] -certifi = ["046832c04d4e752f37383b628bc601a7ea7211496b4638f6514d0e5b9acc4939", "945e3ba63a0b9f577b1395204e13c3a231f9bc0223888be653286534e5873695"] -chardet = ["84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", "fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"] -colorama = ["05eed71e2e327246ad6b38c540c4a3117230b19679b875190486ddd2d721422d", "f8ac84de7840f5b9c4e3347b3c1eaa50f7e49c2b07596221daec5edaabbd7c48"] -django = ["16a5d54411599780ac9dfe3b9b38f90f785c51259a584e0b24b6f14a7f69aae8", "9a2f98211ab474c710fcdad29c82f30fc14ce9917c7a70c3682162a624de4035"] -django-any-js = ["1da88b44b861b0f54f6b8ea0eb4c7c4fa1a5772e9a4320532cd4e0871a4e23f7"] -django-bootstrap4 = ["9f115534ae8d052d397201f3d716c10d7c9832b422e44dd7382418c6f274df18"] -django-easy-audit = ["08ad833b209cc3da649016bcbf8c35bb977fa2a8c6b19b1f5758bc226cb1ac6e", "285f6e98c84d63caf1f8e80e39ef6b85da6fe552cbb8ed35b186e8d180e68228"] -django-fa = ["e3ebf97b90e374b5ccb5b8a70e4a932c8787f2ee995c09a97a63bf9a1366c3ff"] -django-local-settings = ["2962ce9bca8d2c6b49e21e99b21195d5b4d4b012acc96208851f505cb1756e08"] -django-middleware-global-request = ["f6490759bc9f7dbde4001709554e29ca715daf847f2222914b4e47117dca9313"] -django-phonenumber-field = ["1ab19f723928582fed412bd9844221fa4ff466276d8526b8b4a9913ee1487c5e", "794ebbc3068a7af75aa72a80cb0cec67e714ff8409a965968040f1fd210b2d97"] -django-simple-menu = ["55358f10cc24cb990411819f43a0ab84007a1ea5b2c8ad22ace51aa88183e579", "9bf5b87d1ead1ac6d4588c623be276fc87a4382424bbe564a574d8959d1f03bd"] -django-tables2 = ["cdecbb14206e7f5edcde73b3796a0eb5c583c63e170b7356aeac14ae9e4a3314", "ef8449a8ff3c3b13cd33c79b74cb2b24428a21e75176aa267a035a9d053abd36"] -docutils = ["6c4f696463b79f1fb8ba0c594b63840ebd41f059e92b31957c46b74a4599b6d0", "9e4d7ecfc600058e07ba661411a2b7de2fd0fafa17d1a7f7361cd47b1175c827", "a2aeea129088da402665e92e0b25b04b073c04b2dce4ab65caaa38b7ce2e1a99"] -idna = ["c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", "ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"] -imagesize = ["3f349de3eb99145973fefb7dbe38554414e5c30abd0c8e4b970a7c9d09f3a1d8", "f3832918bc3c66617f92e35f5d70729187676313caa60c187eb0f28b8fe5e3b5"] -jinja2 = ["065c4f02ebe7f7cf559e49ee5a95fb800a9e4528727aec6f24402a5374c65013", "14dd6caf1527abb21f08f86c784eac40853ba93edb79552aa1e4b8aef1b61c7b"] -markupsafe = ["00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473", "09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161", "09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235", "1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5", "24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff", "29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b", "43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1", "46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e", "500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183", "535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66", "62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1", "6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1", "717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e", "79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b", "7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905", "88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735", "8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d", "98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e", "9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d", "9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c", "ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21", "b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2", "b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5", "b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b", "ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6", "c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f", "cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f", "e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7"] -packaging = ["a7ac867b97fdc07ee80a8058fe4435ccd274ecc3b0ed61d852d7d53055528cf9", "c491ca87294da7cc01902edbe30a5bc6c4c28172b5138ab4e4aa1b9d7bfaeafe"] -phonenumbers = ["b913023be4f99a210038efd3cef5212b3d11fdf7829a0b75a0031cff3eae2d9e", "e9752dda6abb076d528d954d16c8bc7f8682df6f42c837862d0dea88c7667908"] -pillow = ["0804f77cb1e9b6dbd37601cee11283bba39a8d44b9ddb053400c58e0c0d7d9de", "0ab7c5b5d04691bcbd570658667dd1e21ca311c62dcfd315ad2255b1cd37f64f", "0b3e6cf3ea1f8cecd625f1420b931c83ce74f00c29a0ff1ce4385f99900ac7c4", "0c6ce6ae03a50b0306a683696234b8bc88c5b292d4181ae365b89bd90250ab08", "1454ee7297a81c8308ad61d74c849486efa1badc543453c4b90db0bf99decc1c", "23efd7f83f2ad6036e2b9ef27a46df7e333de1ad9087d341d87e12225d0142b2", "365c06a45712cd723ec16fa4ceb32ce46ad201eb7bbf6d3c16b063c72b61a3ed", "38301fbc0af865baa4752ddae1bb3cbb24b3d8f221bf2850aad96b243306fa03", "3aef1af1a91798536bbab35d70d35750bd2884f0832c88aeb2499aa2d1ed4992", "3c86051d41d1c8b28b9dde08ac93e73aa842991995b12771b0af28da49086bbf", "3fe0ab49537d9330c9bba7f16a5f8b02da615b5c809cdf7124f356a0f182eccd", "406c856e0f6fc330322a319457d9ff6162834050cda2cf1eaaaea4b771d01914", "45a619d5c1915957449264c81c008934452e3fd3604e36809212300b2a4dab68", "49f90f147883a0c3778fd29d3eb169d56416f25758d0f66775db9184debc8010", "504f5334bfd974490a86fef3e3b494cd3c332a8a680d2f258ca03388b40ae230", "51fe9cfcd32c849c6f36ca293648f279fc5097ca8dd6e518b10df3a6a9a13431", "571b5a758baf1cb6a04233fb23d6cf1ca60b31f9f641b1700bfaab1194020555", "5ac381e8b1259925287ccc5a87d9cf6322a2dc88ae28a97fe3e196385288413f", "6052a9e9af4a9a2cc01da4bbee81d42d33feca2bde247c4916d8274b12bb31a4", "6153db744a743c0c8c91b8e3b9d40e0b13a5d31dbf8a12748c6d9bfd3ddc01ad", "6fd63afd14a16f5d6b408f623cc2142917a1f92855f0df997e09a49f0341be8a", "70acbcaba2a638923c2d337e0edea210505708d7859b87c2bd81e8f9902ae826", "70b1594d56ed32d56ed21a7fbb2a5c6fd7446cdb7b21e749c9791eac3a64d9e4", "76638865c83b1bb33bcac2a61ce4d13c17dba2204969dedb9ab60ef62bede686", "7b2ec162c87fc496aa568258ac88631a2ce0acfe681a9af40842fc55deaedc99", "7b403ea842b70c4fa0a4969a5d8d86e932c941095b7cda077ea68f7b98ead30b", "7be698a28175eae5354da94f5f3dc787d5efae6aca7ad1f286a781afde6a27dd", "7cee2cef07c8d76894ebefc54e4bb707dfc7f258ad155bd61d87f6cd487a70ff", "7d16d4498f8b374fc625c4037742fbdd7f9ac383fd50b06f4df00c81ef60e829", "82840783842b27933cc6388800cb547f31caf436f7e23384d456bdf5fc8dfe49", "8755e600b33f4e8c76a590b42acc35d24f4dc801a5868519ce569b9462d77598", "9159285ab4030c6f85e001468cb5886de05e6bd9304e9e7d46b983f7d2fad0cc", "b50bc1780681b127e28f0075dfb81d6135c3a293e0c1d0211133c75e2179b6c0", "b5aa19f1da16b4f5e47b6930053f08cba77ceccaed68748061b0ec24860e510c", "bd0582f831ad5bcad6ca001deba4568573a4675437db17c4031939156ff339fa", "cdd53acd3afb9878a2289a1b55807871f9877c81174ae0d3763e52f907131d25", "cfd40d8a4b59f7567620410f966bb1f32dc555b2b19f82a91b147fac296f645c", "e150c5aed6e67321edc6893faa6701581ca2d393472f39142a00e551bcd249a5", "e3ae410089de680e8f84c68b755b42bc42c0ceb8c03dbea88a5099747091d38e", "e403b37c6a253ebca5d0f2e5624643997aaae529dc96299162418ef54e29eb70", "e9046e559c299b395b39ac7dbf16005308821c2f24a63cae2ab173bd6aa11616", "ef6be704ae2bc8ad0ebc5cb850ee9139493b0fc4e81abcc240fb392a63ebc808", "f8dc19d92896558f9c4317ee365729ead9d7bbcf2052a9a19a3ef17abbb8ac5b"] -pygments = ["71e430bc85c88a430f000ac1d9b331d2407f681d6f6aec95e8bcfbc3df5b0127", "881c4c157e45f30af185c1ffe8d549d48ac9127433f2c380c24b84572ad66297"] -pyparsing = ["6f98a7b9397e206d78cc01df10131398f1c8b8510a2f4d97d9abd82e1aacdd80", "d9338df12903bbf5d65a0e4e87c2161968b10d2e489652bb47001d82a9b028b4"] -pytz = ["26c0b32e437e54a18161324a2fca3c4b9846b74a8dccddd843113109e1116b32", "c894d57500a4cd2d5c71114aaab77dbab5eabd9022308ce5ac9bb93a60a6f0c7"] -requests = ["11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4", "9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31"] -six = ["3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", "d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"] -snowballstemmer = ["9f3b9ffe0809d174f7047e121431acf99c89a7040f0ca84f94ba53a498e6d0c9"] -sphinx = ["22538e1bbe62b407cf5a8aabe1bb15848aa66bb79559f42f5202bbce6b757a69", "f9a79e746b87921cabc3baa375199c6076d1270cee53915dbd24fdbeaaacc427"] -sphinx-autodoc-typehints = ["8eb1e2bc248d316a9faeca086c6133623f6d45770e342738158249356989b95c", "cedf37dde99096e3024ffcd498ee917c2ccf667e04e23d868d481eae2cb84910"] -sphinxcontrib-applehelp = ["edaa0ab2b2bc74403149cb0209d6775c96de797dfd5b5e2a71981309efab3897", "fb8dee85af95e5c30c91f10e7eb3c8967308518e0f7488a2828ef7bc191d0d5d"] -sphinxcontrib-devhelp = ["6c64b077937330a9128a4da74586e8c2130262f014689b4b89e2d08ee7294a34", "9512ecb00a2b0821a146736b39f7aeb90759834b07e81e8cc23a9c70bacb9981"] -sphinxcontrib-django = ["95831d5d58f780010b0255f298ea03d6bbf971c0f94f631268abd4320400b7db", "f5bb52d20b64b51087b44247789adaebfc51fa2fad71bfed42c4ca6c05723838"] -sphinxcontrib-htmlhelp = ["4670f99f8951bd78cd4ad2ab962f798f5618b17675c35c5ac3b2132a14ea8422", "d4fd39a65a625c9df86d7fa8a2d9f3cd8299a3a4b15db63b50aac9e161d8eff7"] -sphinxcontrib-jsmath = ["2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", "a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"] -sphinxcontrib-qthelp = ["513049b93031beb1f57d4daea74068a4feb77aa5630f856fcff2e50de14e9a20", "79465ce11ae5694ff165becda529a600c754f4bc459778778c7017374d4d406f"] -sphinxcontrib-serializinghtml = ["c0efb33f8052c04fd7a26c0a07f1678e8512e0faec19f4aa8f2473a8b81d5227", "db6615af393650bf1151a6cd39120c29abaf93cc60db8c48eb2dddbfdc3a9768"] -sqlparse = ["40afe6b8d4b1117e7dff5504d7a8ce07d9a1b15aeeade8a2d10f130a834f8177", "7c3dca29c022744e95b547e867cee89f4fce4373f3549ccd8797d8eb52cdb873"] -urllib3 = ["b246607a25ac80bedac05c6f282e3cdaf3afb65420fd024ac94435cabe6e18d1", "dbe59173209418ae49d485b87d1681aefa36252ee85884c31346debd19463232"] diff --git a/pyproject.toml b/pyproject.toml index 29b2e6acab45a54dc2a884fa46fee03f5e976e65..9205ca115b4d137bb0522f331a40d9b7c1583e9c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,7 +26,7 @@ django-bootstrap4 = "^0.0.8" django-fa = "^1.0" django-easy-audit = "^1.1" django-middleware-global-request = "^0.1.2" -django-simple-menu = "^1.2" +django-menu-generator = "^1.0.4" django-tables2 = "^2.1" Pillow = "^6.1" django-phonenumber-field = {version = "^3.0", extras = ["phonenumbers"]}