123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- from django.conf import settings
- from django.utils.translation import gettext as _
- from .help import actionbar as actionbar_add_help
- import inspect
- import logging
- import os
- from themes import gray_icon_url, color_icon_url
- from users.context import menubar as menubar_user
- from users.context import PROFILE_ENTRY_UID
- import pygal
- from pygal.models import get_item_by_rel_path
-
- logger = logging.getLogger(settings.ROOT_LOGGER_NAME).getChild(__name__)
-
-
- MY_FAVOURITES_ENTRY_UID = 'my_favourites-main'
- HELP_UID = 'help-main'
- NAVIGATION_ENTRY_UID = 'navigation-main-%s'
- HOME_ENTRY_UID = 'home-main'
- SEARCH_ENTRY_UID = 'search-main'
- BACK_ENTRY_UID = 'back-main'
-
-
- def context_adaption(context, request, **kwargs):
- caller_name = inspect.currentframe().f_back.f_code.co_name
- wrapper_instance = kwargs.get("wrapper_instance")
- #
- menubar(context, request, **kwargs)
- navigationbar(context, request, **kwargs)
- if wrapper_instance is None:
- # Pages without direct connection to an item (e.g. Helpview, ...)
- context.set_additional_title(kwargs.get("title", ""))
- #
- actionbar(context, request, caller_name)
- else:
- wrapper_instance.context_adaption(context)
- # HELP
- if pygal.is_helpview(request):
- actionbar_add_help(context, request, current_help_page=kwargs.get("current_help_page"))
- for key in kwargs:
- context[key] = kwargs[key]
- logger.debug("context adapted: %s", repr(context))
-
- def navigationbar(context, request, **kwargs):
- bar = context[context.NAVIGATIONBAR]
- rel_path = kwargs.get("rel_path", '')
- #
- if pygal.is_favouriteview(request):
- if rel_path:
- bar.append_entry(*navigation_entry_parameters(request, rel_path, None))
- anchor = get_item_by_rel_path(rel_path).name
- else:
- anchor = None
- elif pygal.is_searchview(request):
- if rel_path:
- bar.append_entry(*navigation_entry_parameters(request, rel_path, None))
- anchor = get_item_by_rel_path(rel_path).name
- else:
- anchor = None
- else:
- anchor = None
- while len(rel_path) > 0 and rel_path != os.path.sep:
- bar.append_entry(*navigation_entry_parameters(request, rel_path, anchor))
- anchor = get_item_by_rel_path(rel_path).name
- rel_path = os.path.dirname(rel_path)
- bar.append_entry(*home_entry_parameters(request, anchor))
-
-
- def menubar(context, request, **kwargs):
- bar = context[context.MENUBAR]
- rel_path = kwargs.get("rel_path", '')
- #
- bar.append_entry(HELP_UID, _('Help'), color_icon_url(request, 'help.png'), pygal.url_helpview(request, 'main'), True, False)
- menubar_user(bar, request)
- if request.user.is_authenticated:
- bar.append_entry(*my_favourites_entry_parameters(request, rel_path))
- try:
- bar.replace_entry(PROFILE_ENTRY_UID, *profile_entry_parameters(request))
- except ValueError:
- pass # Profile entry does not exist, so exchange is not needed (e.g. no user is logged in)
-
-
- def actionbar(context, request, caller_name, **kwargs):
- bar = context[context.ACTIONBAR]
- bar.append_entry(
- BACK_ENTRY_UID, # uid
- _('Back'), # name
- color_icon_url(request, 'back.png'), # icon
- 'javascript:history.back()', # url
- True, # left
- False # active
- )
-
- def profile_entry_parameters(request):
- return (
- PROFILE_ENTRY_UID, # uid
- request.user.username, # name
- color_icon_url(request, 'user.png'), # icon
- pygal.url_profile(request), # url
- False, # left
- False # active
- )
-
-
- def home_entry_parameters(request, anchor=None):
- if pygal.is_favouriteview(request):
- icon = 'favourite.png'
- elif pygal.is_searchview(request):
- icon = 'search.png'
- else:
- icon = 'home.png'
- return (
- HOME_ENTRY_UID,
- ':',
- gray_icon_url(request, icon),
- pygal.url_userview(request, rel_path='', search=pygal.SEARCH_KEEP) + ('#%s' % anchor if anchor is not None else ''),
- True,
- False
- )
-
-
- def search_entry_parameters(request):
- return (
- SEARCH_ENTRY_UID,
- ':',
- gray_icon_url(request, 'search.png'),
- pygal.url_search(request),
- True,
- False
- )
-
-
- def navigation_entry_parameters(request, path, anchor=None):
- return (
- NAVIGATION_ENTRY_UID % os.path.basename(path), # uid
- '/' + os.path.basename(path), # name
- None, # icon
- pygal.url_userview(request, path, search=pygal.SEARCH_KEEP) + ('#%s' % anchor if anchor is not None else ''), # url
- False, # left
- False # active
- )
-
-
- def my_favourites_entry_parameters(request, rel_path):
- if pygal.is_favouriteview(request) and rel_path != '':
- url_addon = '#%s' % get_item_by_rel_path(rel_path).name
- else:
- url_addon = ''
- return (
- MY_FAVOURITES_ENTRY_UID, # uid
- _('My Favourites'), # name
- color_icon_url(request, 'favourite.png'), # icon
- pygal.url_favouriteview(request) + url_addon, # url
- True, # left
- pygal.is_favouriteview(request) # active
- )
|