Skip to content

Commit

Permalink
menu_handler feature added and SuitConfig is now current_app aware
Browse files Browse the repository at this point in the history
  • Loading branch information
darklow committed Oct 24, 2016
1 parent 55aa22e commit ee2164d
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 22 deletions.
3 changes: 3 additions & 0 deletions suit/apps.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ class DjangoSuitConfig(AppConfig):
# Automatically add home link
menu_show_home = True

# Define callback / handler to change menu before it is getting rendered
menu_handler = None

# Enables two column layout for change forms with submit row on the right
form_submit_on_right = True

Expand Down
16 changes: 12 additions & 4 deletions suit/config.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,22 @@
from django.apps import apps
from suit.apps import DjangoSuitConfig

#: :type: DjangoSuitConfig
suit_config = apps.get_app_config('suit')

def get_config_instance(app_name=None):
"""
:rtype: DjangoSuitConfig()
"""
try:
return apps.get_app_config(app_name or 'suit')
except LookupError:
return apps.get_app_config('suit')


#: :type: DjangoSuitConfig()
suit_config_cls = DjangoSuitConfig


def get_config(param=None):
def get_config(param=None, app_name=None):
suit_config = get_config_instance(app_name)
if param:
value = getattr(suit_config, param, None)
if value is None:
Expand Down
14 changes: 10 additions & 4 deletions suit/menu.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ def _key(self):

class MenuManager(object):
def __init__(self, available_apps, context, request):
from .config import suit_config
from .config import get_config_instance

super(MenuManager, self).__init__()

Expand All @@ -47,11 +47,11 @@ def __init__(self, available_apps, context, request):

self.context = context
self.request = request
self.user_menu = suit_config.menu
self.suit_config = get_config_instance(request.current_app)
self.user_menu = self.suit_config.menu
self.menu_items = None
self.aligned_right_menu_items = []
self.active_parent_item = None
self.suit_config = suit_config
self._available_apps = {'apps': {}, 'models': {}}

def __iter__(self):
Expand All @@ -61,6 +61,12 @@ def __iter__(self):
def get_menu_items(self):
if self.menu_items is None:
self.menu_items = self.build_menu()
if self.suit_config.menu_handler:
if not callable(self.suit_config.menu_handler):
raise TypeError('Django Suit "menu_handler" must callable')
self.menu_items = self.suit_config.menu_handler(
self.menu_items, self.request, self.context)

return self.menu_items

def build_menu(self):
Expand Down Expand Up @@ -207,7 +213,7 @@ def handle_user_url(self, menu_item):
return menu_item.url
from django.core.urlresolvers import reverse, NoReverseMatch
try:
menu_item.url = reverse(menu_item.url)
menu_item.url = reverse(menu_item.url, current_app=self.request.current_app)
menu_item._url_name = menu_item.url
except NoReverseMatch:
menu_item.url = '#no-reverse-match'
Expand Down
8 changes: 4 additions & 4 deletions suit/templates/suit/admin/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ <h1 id="site-name">
{% with site_header|default:_('Django administration') as admin_name %}
{{ admin_name }}
{% if admin_name == 'Django Suit' %}
v{{ 'version'|suit_conf }}
v{{ 'version'|suit_conf:request.current_app }}
{% endif %}
{% endwith %}
{% endblock %}
Expand All @@ -69,7 +69,7 @@ <h1 id="site-name">

{{ block.super }}
<script src="{% static "suit/js/suit.js" %}"></script>
{% if cl.formset or action_form and 'toggle_changelist_top_actions'|suit_conf %}
{% if cl.formset or action_form and 'toggle_changelist_top_actions'|suit_conf:request.current_app %}
<script type="text/javascript">
Suit.ListActionsToggle.init();
</script>
Expand All @@ -78,7 +78,7 @@ <h1 id="site-name">

Suit.$("#{{ opts.model_name }}_form").suitFormDebounce();

{% if 'form_submit_on_right'|suit_conf %}
{% if 'form_submit_on_right'|suit_conf:request.current_app %}
Suit.FixedBar.init();
{% endif %}

Expand All @@ -91,4 +91,4 @@ <h1 id="site-name">
{% endif %}
{% endblock %}

{% block bodyclass %}{{ block.super|suit_body_class }}{% endblock %}
{% block bodyclass %}{{ block.super|suit_body_class:request.current_app }}{% endblock %}
14 changes: 4 additions & 10 deletions suit/templatetags/suit_tags.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,21 @@


@register.filter(name='suit_conf')
def suit_conf(name):
value = config.get_config(name)
def suit_conf(name, current_app):
value = config.get_config(name, current_app)
return mark_safe(value) if isinstance(value, str) else value


@register.filter(name='suit_body_class')
def suit_body_class(value):
def suit_body_class(value, current_app):
css_classes = []
config_vars_to_add = ['toggle_changelist_top_actions', 'form_submit_on_right']
for each in config_vars_to_add:
if getattr(config.suit_config, each):
if getattr(config.get_config(None, current_app), each):
css_classes.append('suit_%s' % each)
return ' '.join(css_classes)


@register.filter(name='suit_conf')
def suit_conf(name):
value = config.get_config(name)
return mark_safe(value) if isinstance(value, str) else value


@register.assignment_tag
def suit_conf_value(name, model_admin=None):
if model_admin:
Expand Down

0 comments on commit ee2164d

Please sign in to comment.