diff --git a/apps/navigation/__init__.py b/apps/navigation/__init__.py index 928ceef82a..5b5faffadc 100644 --- a/apps/navigation/__init__.py +++ b/apps/navigation/__init__.py @@ -1,4 +1,4 @@ -from __future__ import absolute_import +from __future__ import absolute_import from elementtree.ElementTree import Element diff --git a/apps/navigation/api.py b/apps/navigation/api.py index e43df44906..fc36decdc1 100644 --- a/apps/navigation/api.py +++ b/apps/navigation/api.py @@ -1,21 +1,20 @@ -from __future__ import absolute_import +from __future__ import absolute_import import urlparse import urllib import logging import re -from django.template import (TemplateSyntaxError, Library, - VariableDoesNotExist, Node, Variable) -from django.utils.encoding import smart_str, force_unicode, smart_unicode +from django.template import (VariableDoesNotExist, Variable) +from django.utils.encoding import smart_str, smart_unicode from django.core.urlresolvers import reverse, NoReverseMatch from django.utils.http import urlquote from django.utils.http import urlencode -from elementtree.ElementTree import Element, SubElement +from elementtree.ElementTree import SubElement from .utils import (resolve_to_name, resolve_arguments, - resolve_template_variable, get_navigation_objects) + get_navigation_objects) from . import main_menu multi_object_navigation = {} @@ -29,15 +28,15 @@ logger = logging.getLogger(__name__) class ResolvedLink(object): active = False - - + + class Link(object): def __init__(self, text, view, klass=None, args=None, sprite=None, icon=None, permissions=None, condition=None, conditional_disable=None, description=None, dont_mark_active=False, children_view_regex=None, keep_query=False, children_classes=None, children_url_regex=None, children_views=None, conditional_highlight=None): - + self.text = text self.view = view self.args = args or {} @@ -62,12 +61,12 @@ class Link(object): request = Variable('request').resolve(context) current_path = request.META['PATH_INFO'] current_view = resolve_to_name(current_path) - + # Preserve unicode data in URL query previous_path = smart_unicode(urllib.unquote_plus(smart_str(request.get_full_path()) or smart_str(request.META.get('HTTP_REFERER', u'/')))) query_string = urlparse.urlparse(previous_path).query parsed_query_string = urlparse.parse_qs(query_string) - + # Check to see if link has conditional display if self.condition: condition_result = self.condition(context) @@ -80,7 +79,7 @@ class Link(object): resolved_link.sprite = self.sprite resolved_link.icon = self.icon resolved_link.permissions = self.permissions - + try: #args, kwargs = resolve_arguments(context, self.get('args', {})) args, kwargs = resolve_arguments(context, self.args) @@ -98,7 +97,7 @@ class Link(object): else: resolved_link.url = reverse(self.view, args=args) if self.keep_query: - resolved_link.url = u'%s?%s' % (urlquote(resolved_link.url), urlencode(parsed_query_string, doseq=True)) + resolved_link.url = u'%s?%s' % (urlquote(resolved_link.url), urlencode(parsed_query_string, doseq=True)) except NoReverseMatch, exc: resolved_link.url = '#' @@ -106,13 +105,13 @@ class Link(object): elif self.url: if not self.dont_mark_active: resolved_link.url.active = self.url == current_path - + if kwargs: resolved_link.url = self.url % kwargs else: resolved_link.url = self.url % args - if link.keep_query: - resolved_link.url = u'%s?%s' % (urlquote(resolved_link.url), urlencode(parsed_query_string, doseq=True)) + if self.keep_query: + resolved_link.url = u'%s?%s' % (urlquote(resolved_link.url), urlencode(parsed_query_string, doseq=True)) else: resolved_link.active = False @@ -162,13 +161,13 @@ def register_top_menu(name, link, position=None): of the page """ new_menu = SubElement(main_menu, name, link=link, position=position) - + sorted_menus = sorted(main_menu.getchildren(), key=lambda k: (k.get('position') < 0, k.get('position'))) main_menu.clear() for menu in sorted_menus: main_menu.append(menu) - + return new_menu @@ -198,8 +197,9 @@ def register_multi_item_links(sources, links, menu_name=None): multi_object_navigation[menu_name].setdefault(source, {'links': []}) multi_object_navigation[menu_name][source]['links'].extend(links) + #TODO: new name: get_context_navigation_links, get_navigation_links_for_context -def get_context_object_navigation_links(context, menu_name=None, links_dict=link_binding):#, object_variable_name=None): +def get_context_object_navigation_links(context, menu_name=None, links_dict=link_binding): request = Variable('request').resolve(context) current_path = request.META['PATH_INFO'] current_view = resolve_to_name(current_path) @@ -238,8 +238,8 @@ def get_context_object_navigation_links(context, menu_name=None, links_dict=link try: view_links = links_dict[menu_name][current_view]['links'] if view_links: - context_links.setdefault(None, []) - + context_links.setdefault(None, []) + for link in view_links: context_links[None].append(link.resolve(context)) except KeyError: @@ -251,7 +251,7 @@ def get_context_object_navigation_links(context, menu_name=None, links_dict=link object_links = links_dict[menu_name][type(resolved_object_reference)]['links'] if object_links: context_links.setdefault(resolved_object_reference, []) - + for link in object_links: context_links[resolved_object_reference].append(link.resolve(context)) except KeyError: diff --git a/apps/navigation/templatetags/navigation_tags.py b/apps/navigation/templatetags/navigation_tags.py index 0ba20469d7..d09d71350e 100644 --- a/apps/navigation/templatetags/navigation_tags.py +++ b/apps/navigation/templatetags/navigation_tags.py @@ -1,24 +1,18 @@ -from __future__ import absolute_import +from __future__ import absolute_import import copy import re -import urlparse -import urllib import logging -from django.core.urlresolvers import reverse, NoReverseMatch +from django.core.urlresolvers import reverse from django.template import (TemplateSyntaxError, Library, - VariableDoesNotExist, Node, Variable) + Node, Variable) from django.utils.translation import ugettext as _ -from django.utils.encoding import smart_str, force_unicode, smart_unicode - -from common.utils import urlquote from ..api import (link_binding, multi_object_navigation, sidebar_templates, get_context_object_navigation_links) from ..forms import MultiItemForm -from ..utils import (resolve_to_name, resolve_arguments, resolve_template_variable, - get_navigation_objects) +from ..utils import resolve_to_name, resolve_template_variable from .. import main_menu register = Library() @@ -65,15 +59,16 @@ def get_object_navigation_links(parser, token): @register.inclusion_tag('generic_navigation.html', takes_context=True) def object_navigation_template(context): new_context = copy.copy(context) - + for object_reference, object_links in get_context_object_navigation_links(context).items(): new_context.update({ 'horizontal': True, - 'links': object_links + 'links': object_links }) return new_context + @register.tag def get_multi_item_links(parser, token): tag_name, arg = token.contents.split(None, 1) diff --git a/apps/navigation/utils.py b/apps/navigation/utils.py index a720883e03..89cd9ec9a2 100644 --- a/apps/navigation/utils.py +++ b/apps/navigation/utils.py @@ -1,11 +1,10 @@ -from __future__ import absolute_import +from __future__ import absolute_import import logging from django.core.urlresolvers import RegexURLResolver, RegexURLPattern, Resolver404, get_resolver -from django.template import (TemplateSyntaxError, Library, - VariableDoesNotExist, Node, Variable) +from django.template import (VariableDoesNotExist, Variable) from django.utils.text import unescape_string_literal logger = logging.getLogger(__name__) @@ -13,7 +12,7 @@ logger = logging.getLogger(__name__) def get_navigation_objects(context): objects = {} - + try: indirect_reference_list = Variable('navigation_object_list').resolve(context) except VariableDoesNotExist: @@ -38,13 +37,13 @@ def get_navigation_objects(context): try: object_label = Variable('object_name').resolve(context) except VariableDoesNotExist: - object_label = None + object_label = None finally: try: resolved_object = Variable(indirect_reference).resolve(context) except VariableDoesNotExist: resolved_object = None - + objects.setdefault(resolved_object, {}) objects[resolved_object]['label'] = object_label @@ -57,7 +56,7 @@ def get_navigation_objects(context): try: object_label = Variable('object_name').resolve(context) except VariableDoesNotExist: - object_label = None + object_label = None finally: try: resolved_object = Variable(indirect_reference).resolve(context) @@ -94,7 +93,7 @@ def resolve_template_variable(context, name): return str(Variable(name).resolve(context)) except TypeError: return name - + def resolve_arguments(context, src_args): args = [] @@ -152,5 +151,6 @@ def _resolver_resolve_to_name(self, path): RegexURLPattern.resolve_to_name = _pattern_resolve_to_name RegexURLResolver.resolve_to_name = _resolver_resolve_to_name + def resolve_to_name(path, urlconf=None): return get_resolver(urlconf).resolve_to_name(path) diff --git a/apps/navigation/widgets.py b/apps/navigation/widgets.py index 21ead7e606..2370d4681b 100644 --- a/apps/navigation/widgets.py +++ b/apps/navigation/widgets.py @@ -1,19 +1,14 @@ -from __future__ import absolute_import - -import urlparse +from __future__ import absolute_import from django.utils.safestring import mark_safe from django.conf import settings from django.utils.translation import ugettext_lazy as _ -from django.core.urlresolvers import reverse from django.template.defaultfilters import capfirst from django.core.exceptions import PermissionDenied -from django.template import RequestContext, Variable +from django.template import RequestContext from permissions.models import Permission -from .utils import resolve_to_name - def button_navigation_widget(request, link): if link.permissions: