diff --git a/mayan/apps/appearance/templates/appearance/dashboard_widget.html b/mayan/apps/appearance/templates/appearance/dashboard_widget.html index 8e7c1b853c..2010a06197 100644 --- a/mayan/apps/appearance/templates/appearance/dashboard_widget.html +++ b/mayan/apps/appearance/templates/appearance/dashboard_widget.html @@ -22,7 +22,7 @@ {% if widget.link %} diff --git a/mayan/apps/appearance/templates/appearance/home.html b/mayan/apps/appearance/templates/appearance/home.html index 2c6fe6437c..f51286aa98 100644 --- a/mayan/apps/appearance/templates/appearance/home.html +++ b/mayan/apps/appearance/templates/appearance/home.html @@ -6,11 +6,11 @@ {% load common_tags %} {% load navigation_tags %} -{% block title %}{% trans 'Home' %}{% endblock %} +{% block title %}{% trans 'Dashboard' %}{% endblock %} {% block content %}

- {% trans 'Home' %} + {% trans 'Dashboard' %}


@@ -35,47 +35,31 @@ {% endif %} - -
-
- {% get_menu_links 'front page menu' as resolved_links %} - {% with 'navigation/large_button_link.html' as link_template %} - {% with 'col-xs-12 col-sm-6 col-md-4 col-lg-3' as div_class %} - {% for object_navigation_links in resolved_links %} - {% include 'navigation/generic_navigation.html' %} - {% endfor %} - {% endwith %} - {% endwith %} -
-
-
-
-
-
{% trans 'Search' %}
-
+
+
+
+
+
+ + + + {% trans 'Advanced' %} + +
+
+
+
+
+ + + + {% trans 'Advanced' %} + +
+
diff --git a/mayan/apps/appearance/templates/navigation/generic_subnavigation.html b/mayan/apps/appearance/templates/navigation/generic_subnavigation.html index acf06cf0fd..de6b2329aa 100644 --- a/mayan/apps/appearance/templates/navigation/generic_subnavigation.html +++ b/mayan/apps/appearance/templates/navigation/generic_subnavigation.html @@ -1,5 +1,29 @@ +{% load common_tags %} {% load navigation_tags %} +{% if link|get_type == "" %} + +{% else %} + {% if as_li %}
  • {% endif %} @@ -9,3 +33,5 @@ {% if as_li %}
  • {% endif %} + +{% endif %} diff --git a/mayan/apps/checkouts/apps.py b/mayan/apps/checkouts/apps.py index e1f27f0eba..733e3bacf5 100644 --- a/mayan/apps/checkouts/apps.py +++ b/mayan/apps/checkouts/apps.py @@ -100,7 +100,7 @@ class CheckoutsApp(MayanAppConfig): ) menu_facet.bind_links(links=(link_checkout_info,), sources=(Document,)) - menu_main.bind_links(links=(link_checkout_list,)) + menu_main.bind_links(links=(link_checkout_list,), position=98) menu_sidebar.bind_links( links=(link_checkout_document, link_checkin_document), sources=( diff --git a/mayan/apps/common/apps.py b/mayan/apps/common/apps.py index ecbd535d24..9924ee5f2f 100644 --- a/mayan/apps/common/apps.py +++ b/mayan/apps/common/apps.py @@ -22,7 +22,6 @@ from .handlers import ( ) from .links import ( link_about, link_current_user_details, link_current_user_edit, - link_current_user_locale_profile_details, link_current_user_locale_profile_edit, link_filters, link_license, link_packages_licenses, link_setup, link_tools ) diff --git a/mayan/apps/common/menus.py b/mayan/apps/common/menus.py index 382fd7f4d2..3ebeb82b95 100644 --- a/mayan/apps/common/menus.py +++ b/mayan/apps/common/menus.py @@ -3,13 +3,11 @@ from __future__ import unicode_literals from navigation import Menu __all__ = ( - 'menu_facet', 'menu_front_page', 'menu_object', 'menu_main', - 'menu_multi_item', 'menu_secondary', 'menu_setup', 'menu_sidebar', - 'menu_tools', 'menu_user' + 'menu_facet', 'menu_object', 'menu_main', 'menu_multi_item', + 'menu_secondary', 'menu_setup', 'menu_sidebar', 'menu_tools', 'menu_user' ) menu_facet = Menu(name='object facet') -menu_front_page = Menu(name='front page menu') menu_object = Menu(name='object menu') menu_main = Menu(name='main menu') menu_multi_item = Menu(name='multi item menu') diff --git a/mayan/apps/common/templatetags/common_tags.py b/mayan/apps/common/templatetags/common_tags.py index a09b29649b..ba749b036e 100644 --- a/mayan/apps/common/templatetags/common_tags.py +++ b/mayan/apps/common/templatetags/common_tags.py @@ -82,3 +82,8 @@ def build(): return '' else: return '' + + +@register.filter +def get_type(value): + return unicode(type(value)) diff --git a/mayan/apps/document_indexing/apps.py b/mayan/apps/document_indexing/apps.py index 6633c11ee0..6fc92f823c 100644 --- a/mayan/apps/document_indexing/apps.py +++ b/mayan/apps/document_indexing/apps.py @@ -213,7 +213,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. link_template_node_delete ), sources=(IndexTemplateNode,) ) - menu_main.bind_links(links=(link_index_main_menu,)) + menu_main.bind_links(links=(link_index_main_menu,), position=98) menu_secondary.bind_links( links=(link_index_setup_list, link_index_setup_create), sources=( diff --git a/mayan/apps/documents/apps.py b/mayan/apps/documents/apps.py index 188a8395b5..c32668a2c7 100644 --- a/mayan/apps/documents/apps.py +++ b/mayan/apps/documents/apps.py @@ -11,7 +11,7 @@ from acls import ModelPermission from acls.links import link_acl_list from acls.permissions import permission_acl_edit, permission_acl_view from common import ( - MayanAppConfig, MissingItem, menu_facet, menu_front_page, menu_object, + MayanAppConfig, MissingItem, menu_facet, menu_main, menu_object, menu_secondary, menu_setup, menu_sidebar, menu_multi_item, menu_tools ) from common.classes import DashboardWidget, ModelAttribute @@ -59,6 +59,7 @@ from .literals import ( CHECK_DELETE_PERIOD_INTERVAL, CHECK_TRASH_PERIOD_INTERVAL, DELETE_STALE_STUBS_INTERVAL ) +from .menus import menu_documents from .permissions import ( permission_document_create, permission_document_delete, permission_document_download, permission_document_edit, @@ -343,12 +344,15 @@ class DocumentsApp(MayanAppConfig): } ) - menu_front_page.bind_links( + menu_documents.bind_links( links=( link_document_list_recent, link_document_list, link_document_list_deleted ) ) + + menu_main.bind_links(links=(menu_documents,), position=0) + menu_setup.bind_links(links=(link_document_type_setup,)) menu_tools.bind_links(links=(link_clear_image_cache,)) diff --git a/mayan/apps/documents/links.py b/mayan/apps/documents/links.py index 8b1b70f7a8..308d7d99d3 100644 --- a/mayan/apps/documents/links.py +++ b/mayan/apps/documents/links.py @@ -141,7 +141,7 @@ link_document_list_recent = Link( view='documents:document_list_recent' ) link_document_list_deleted = Link( - icon='fa fa-trash', text=_('Trash'), + icon='fa fa-trash', text=_('Trash can'), view='documents:document_list_deleted' ) diff --git a/mayan/apps/documents/menus.py b/mayan/apps/documents/menus.py new file mode 100644 index 0000000000..98fcfcfff5 --- /dev/null +++ b/mayan/apps/documents/menus.py @@ -0,0 +1,9 @@ +from __future__ import absolute_import, unicode_literals + +from django.utils.translation import ugettext_lazy as _ + +from navigation import Menu + +menu_documents = Menu( + icon='fa fa-file', label=_('Documents'), name='documents menu' +) diff --git a/mayan/apps/documents/widgets.py b/mayan/apps/documents/widgets.py index 37d3cdfde0..49fccc9564 100644 --- a/mayan/apps/documents/widgets.py +++ b/mayan/apps/documents/widgets.py @@ -1,7 +1,6 @@ from __future__ import unicode_literals from django import forms -from django.contrib.staticfiles.templatetags.staticfiles import static from django.core.urlresolvers import reverse from django.utils.html import strip_tags from django.utils.http import urlencode diff --git a/mayan/apps/folders/apps.py b/mayan/apps/folders/apps.py index 5e6af46e05..b81df5a013 100644 --- a/mayan/apps/folders/apps.py +++ b/mayan/apps/folders/apps.py @@ -7,8 +7,8 @@ from acls import ModelPermission from acls.links import link_acl_list from acls.permissions import permission_acl_edit, permission_acl_view from common import ( - MayanAppConfig, menu_facet, menu_main, menu_object, menu_secondary, - menu_sidebar, menu_multi_item + MayanAppConfig, menu_facet, menu_main, menu_object, menu_sidebar, + menu_multi_item ) from navigation import SourceColumn from rest_api.classes import APIEndPoint @@ -20,6 +20,7 @@ from .links import ( link_folder_delete, link_folder_document_multiple_remove, link_folder_edit, link_folder_view ) +from .menus import menu_folders from .permissions import ( permission_folder_add_document, permission_folder_delete, permission_folder_edit, permission_folder_remove_document, @@ -77,7 +78,14 @@ class FoldersApp(MayanAppConfig): menu_facet.bind_links( links=(link_document_folder_list,), sources=(Document,) ) - menu_main.bind_links(links=(link_folder_list,)) + + menu_folders.bind_links( + links=( + link_folder_list, link_folder_create + ) + ) + + menu_main.bind_links(links=(menu_folders,), position=98) menu_multi_item.bind_links( links=(link_folder_add_multiple_documents,), sources=(Document,) ) @@ -96,10 +104,6 @@ class FoldersApp(MayanAppConfig): link_folder_delete ), sources=(Folder,) ) - menu_secondary.bind_links( - links=(link_folder_list, link_folder_create), - sources=(Folder, 'folders:folder_list', 'folders:folder_create') - ) menu_sidebar.bind_links( links=(link_folder_add_document,), sources=( diff --git a/mayan/apps/folders/links.py b/mayan/apps/folders/links.py index ce0163cde9..3c3bcfdeb7 100644 --- a/mayan/apps/folders/links.py +++ b/mayan/apps/folders/links.py @@ -24,8 +24,8 @@ link_folder_add_multiple_documents = Link( text=_('Add to folder'), view='folders:folder_add_multiple_documents' ) link_folder_create = Link( - permissions=(permission_folder_create,), text=_('Create folder'), - view='folders:folder_create' + icon='fa fa-plus', permissions=(permission_folder_create,), + text=_('Create folder'), view='folders:folder_create' ) link_folder_delete = Link( permissions=(permission_folder_delete,), tags='dangerous', @@ -41,7 +41,7 @@ link_folder_edit = Link( view='folders:folder_edit', args='object.pk' ) link_folder_list = Link( - icon='fa fa-folder', text=_('Folders'), view='folders:folder_list' + icon='fa fa-folder', text=_('All'), view='folders:folder_list' ) link_folder_view = Link( permissions=(permission_folder_view,), text=_('Documents'), diff --git a/mayan/apps/folders/menus.py b/mayan/apps/folders/menus.py new file mode 100644 index 0000000000..fbe25580b6 --- /dev/null +++ b/mayan/apps/folders/menus.py @@ -0,0 +1,9 @@ +from __future__ import unicode_literals + +from django.utils.translation import ugettext_lazy as _ + +from navigation import Menu + +menu_folders = Menu( + icon='fa fa-folder', label=_('Folders'), name='folders menu' +) diff --git a/mayan/apps/navigation/classes.py b/mayan/apps/navigation/classes.py index 0104ed15c8..f6ef5bad04 100644 --- a/mayan/apps/navigation/classes.py +++ b/mayan/apps/navigation/classes.py @@ -55,11 +55,13 @@ class Menu(object): def get(cls, name): return cls._registry[name] - def __init__(self, name): + def __init__(self, name, icon=None, label=None): if name in self.__class__._registry: raise Exception('A menu with this name already exists') + self.icon = icon self.name = name + self.label = label self.bound_links = {} self.unbound_links = {} self.link_positions = {} @@ -184,7 +186,11 @@ class Menu(object): # Main menu links for link in self.bound_links.get(None, []): - resolved_link = link.resolve(context) + if isinstance(link, Menu): + resolved_link = link + else: + resolved_link = link.resolve(context) + if resolved_link: resolved_links.append(resolved_link) @@ -197,12 +203,16 @@ class Menu(object): unbound_links.extend(self.unbound_links.get(current_view, ())) for resolved_link in result[0]: - if resolved_link.link in unbound_links: - result[0].remove(resolved_link) + try: + if resolved_link.link in unbound_links: + result[0].remove(resolved_link) + except AttributeError: + # It's a menu, ignore + pass # Sort links by position value passed during bind result[0] = sorted( - result[0], key=lambda item: self.link_positions.get(item.link) + result[0], key=lambda item: self.link_positions.get(item.link) if isinstance(item, ResolvedLink) else self.link_positions.get(item) ) return result @@ -363,15 +373,12 @@ class Link(object): class Separator(Link): - def __init__(self, text=None, view=None, args=None, condition=None, - conditional_disable=None, description=None, icon=None, - keep_query=False, kwargs=None, permissions=None, - permissions_related=None, remove_from_query=None, tags=None): + def __init__(self, *args, **kwargs): self.icon = None self.text = None self.view = None - def resolve(self, context, resolved_object=None): + def resolve(self, *args, **kwargs): result = ResolvedLink(current_view=None, link=self) result.separator = True return result diff --git a/mayan/apps/sources/apps.py b/mayan/apps/sources/apps.py index 076e4206b5..7b99b54a53 100644 --- a/mayan/apps/sources/apps.py +++ b/mayan/apps/sources/apps.py @@ -5,11 +5,12 @@ from django.utils.translation import ugettext_lazy as _ from kombu import Exchange, Queue from common import ( - MayanAppConfig, MissingItem, menu_front_page, menu_object, menu_secondary, - menu_sidebar, menu_setup + MayanAppConfig, MissingItem, menu_object, menu_secondary, menu_sidebar, + menu_setup ) from common.signals import post_initial_setup, post_upgrade from converter.links import link_transformation_list +from documents.menus import menu_documents from documents.signals import post_version_upload from mayan.celery import app from navigation import SourceColumn @@ -112,8 +113,8 @@ class SourcesApp(MayanAppConfig): }, } ) + menu_documents.bind_links(links=(link_document_create_multiple,)) - menu_front_page.bind_links(links=(link_document_create_multiple,)) menu_object.bind_links( links=( link_setup_source_edit, link_setup_source_delete, diff --git a/mayan/apps/tags/apps.py b/mayan/apps/tags/apps.py index d7a1b5d1eb..05a2c7fcc4 100644 --- a/mayan/apps/tags/apps.py +++ b/mayan/apps/tags/apps.py @@ -7,8 +7,8 @@ from acls import ModelPermission from acls.links import link_acl_list from acls.permissions import permission_acl_edit, permission_acl_view from common import ( - MayanAppConfig, menu_facet, menu_secondary, menu_object, menu_main, - menu_multi_item, menu_sidebar + MayanAppConfig, menu_facet, menu_object, menu_main, menu_multi_item, + menu_sidebar ) from documents.search import document_page_search, document_search from navigation import SourceColumn @@ -20,6 +20,7 @@ from .links import ( link_tag_delete, link_tag_document_list, link_tag_edit, link_tag_list, link_tag_multiple_delete, link_tag_tagged_item_list ) +from .menus import menu_tags from .permissions import ( permission_tag_attach, permission_tag_delete, permission_tag_edit, permission_tag_remove, permission_tag_view @@ -107,7 +108,15 @@ class TagsApp(MayanAppConfig): menu_facet.bind_links( links=(link_tag_document_list,), sources=(Document,) ) - menu_main.bind_links(links=(link_tag_list,)) + + menu_tags.bind_links( + links=( + link_tag_list, link_tag_create + ) + ) + + menu_main.bind_links(links=(menu_tags,), position=98) + menu_multi_item.bind_links( links=( link_multiple_documents_attach_tag, @@ -129,10 +138,6 @@ class TagsApp(MayanAppConfig): ), sources=(Tag,) ) - menu_secondary.bind_links( - links=(link_tag_list, link_tag_create), - sources=(Tag, 'tags:tag_list', 'tags:tag_create') - ) menu_sidebar.bind_links( links=(link_tag_attach,), sources=( diff --git a/mayan/apps/tags/links.py b/mayan/apps/tags/links.py index 7acd009875..fd4995aaf9 100644 --- a/mayan/apps/tags/links.py +++ b/mayan/apps/tags/links.py @@ -25,8 +25,8 @@ link_tag_attach = Link( view='tags:tag_attach', args='object.pk' ) link_tag_create = Link( - permissions=(permission_tag_create,), text=_('Create new tag'), - view='tags:tag_create' + icon='fa fa-plus', permissions=(permission_tag_create,), + text=_('Create new tag'), view='tags:tag_create' ) link_tag_delete = Link( permissions=(permission_tag_delete,), tags='dangerous', text=_('Delete'), @@ -40,7 +40,7 @@ link_tag_document_list = Link( icon='fa fa-tag', permissions=(permission_tag_view,), text=_('Tags'), view='tags:document_tags', args='resolved_object.pk' ) -link_tag_list = Link(icon='fa fa-tag', text=_('Tags'), view='tags:tag_list') +link_tag_list = Link(icon='fa fa-tag', text=_('All'), view='tags:tag_list') link_tag_multiple_delete = Link( permissions=(permission_tag_delete,), text=_('Delete'), view='tags:tag_multiple_delete' diff --git a/mayan/apps/tags/menus.py b/mayan/apps/tags/menus.py new file mode 100644 index 0000000000..9ab3149490 --- /dev/null +++ b/mayan/apps/tags/menus.py @@ -0,0 +1,9 @@ +from __future__ import unicode_literals + +from django.utils.translation import ugettext_lazy as _ + +from navigation import Menu + +menu_tags = Menu( + icon='fa fa-tag', label=_('Tags'), name='tags menu' +)