Start top menu refactor, added elementtree to requirements

This commit is contained in:
Roberto Rosario
2012-03-16 21:07:53 -04:00
parent 7ccab82fd4
commit dcf568ead5
20 changed files with 113 additions and 85 deletions

View File

@@ -7,11 +7,15 @@ import logging
from django.template import (TemplateSyntaxError, Library,
VariableDoesNotExist, Node, Variable)
from django.utils.encoding import smart_str, force_unicode, smart_unicode
from django.core.urlresolvers import reverse, NoReverseMatch
from elementtree.ElementTree import Element, SubElement
#from common.utils import urlquote
from .utils import (resolve_to_name, resolve_arguments,
resolve_template_variable, get_navigation_objects)
from . import main_menu
object_navigation = {}
multi_object_navigation = {}
@@ -26,6 +30,7 @@ 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):
@@ -43,6 +48,11 @@ class Link(object):
self.children_view_regex = children_view_regex
self.klass = klass
self.keep_query = keep_query
#
self.conditional_highlight = None
self.children_views = []
self.children_classes = []
def resolve(self, context):
request = Variable('request').resolve(context)
@@ -63,6 +73,8 @@ class Link(object):
if condition_result:
#new_link = {}#copy.copy(link)
resolved_link = ResolvedLink()
resolved_link.text = self.text
resolved_link.sprite = self.sprite
try:
#args, kwargs = resolve_arguments(context, self.get('args', {}))
args, kwargs = resolve_arguments(context, self.args)
@@ -171,37 +183,36 @@ def register_multi_item_links(src, links, menu_name=None):
multi_object_navigation[menu_name][src]['links'].extend(links)
def register_top_menu(name, link, children_views=None,
children_path_regex=None, children_view_regex=None,
position=None):
def register_top_menu(name, link, children_views=None, children_path_regex=None, children_view_regex=None, position=None):
"""
Register a new menu entry for the main menu displayed at the top
of the page
"""
menu = SubElement(main_menu, name, link=link)
#entry = {'link': link, 'name': name}
#if children_views:
# entry['children_views'] = children_views
#if children_path_regex:
# entry['children_path_regex'] = children_path_regex
#if children_view_regex:
# entry['children_view_regex'] = children_view_regex
#if position is not None:
# entry['position'] = position
# top_menu_entries.insert(position, entry)
#else:
# length = len(top_menu_entries)
# entry['position'] = length
# top_menu_entries.append(entry)
entry = {'link': link, 'name': name}
if children_views:
entry['children_views'] = children_views
if children_path_regex:
entry['children_path_regex'] = children_path_regex
if children_view_regex:
entry['children_view_regex'] = children_view_regex
if position is not None:
entry['position'] = position
top_menu_entries.insert(position, entry)
else:
length = len(top_menu_entries)
entry['position'] = length
top_menu_entries.append(entry)
sort_menu_entries()
return entry
#sort_menu_entries()
#
#return entry
return menu
def sort_menu_entries():
global top_menu_entries
top_menu_entries = sorted(top_menu_entries, key=lambda k: (k['position'] < 0, k['position']))
#def sort_menu_entries():
# global top_menu_entries
# top_menu_entries = sorted(top_menu_entries, key=lambda k: (k['position'] < 0, k['position']))
def register_model_list_columns(model, columns):