Add .show attr to Button; False when dropdown is empty

Fixes #3138
pull/3128/merge
Nick Smith 2016-11-04 15:25:26 +00:00 zatwierdzone przez Matt Westcott
rodzic 46570c9884
commit bfa0341e05
2 zmienionych plików z 14 dodań i 3 usunięć

Wyświetl plik

@ -1,3 +1,5 @@
{% for button in buttons %}
{% if button.show %}
<li>{{ button|safe }}</li>
{% endif %}
{% endfor %}

Wyświetl plik

@ -10,6 +10,7 @@ from django.forms.utils import flatatt
from django.template.loader import render_to_string
from django.utils.encoding import python_2_unicode_compatible
from django.utils.formats import get_format
from django.utils.functional import cached_property
from django.utils.html import format_html
from django.utils.translation import ugettext_lazy as _
from taggit.forms import TagWidget
@ -191,6 +192,8 @@ class AdminPageChooser(AdminChooser):
@python_2_unicode_compatible
@total_ordering
class Button(object):
show = True
def __init__(self, label, url, classes=set(), attrs={}, priority=1000):
self.label = label
self.url = url
@ -234,12 +237,13 @@ class BaseDropdownMenuButton(Button):
def __init__(self, *args, **kwargs):
super(BaseDropdownMenuButton, self).__init__(*args, url=None, **kwargs)
def get_buttons_in_dropdown(self):
@cached_property
def dropdown_buttons(self):
raise NotImplementedError
def render(self):
return render_to_string(self.template_name, {
'buttons': self.get_buttons_in_dropdown(),
'buttons': self.dropdown_buttons,
'label': self.label,
'title': self.attrs.get('title'),
'is_parent': self.is_parent})
@ -256,7 +260,12 @@ class ButtonWithDropdownFromHook(BaseDropdownMenuButton):
super(ButtonWithDropdownFromHook, self).__init__(label, **kwargs)
def get_buttons_in_dropdown(self):
@property
def show(self):
return bool(self.dropdown_buttons)
@cached_property
def dropdown_buttons(self):
button_hooks = hooks.get_hooks(self.hook_name)
return sorted(itertools.chain.from_iterable(
hook(self.page, self.page_perms, self.is_parent)