Add new list templates toolbar
Add the new generic list and generic list items toolbar which allow switching the list display mode. This toolbar also includes a stylized button to select and deselect all items emulating the check-all checkbox. Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
This commit is contained in:
@@ -495,34 +495,46 @@ class SourceColumn(object):
|
||||
return sorted(columns, key=lambda x: x.order)
|
||||
|
||||
@classmethod
|
||||
def get_for_source(cls, source):
|
||||
def get_for_source(cls, source, exclude_identifier=False, only_identifier=False):
|
||||
try:
|
||||
return SourceColumn.sort(columns=cls._registry[source])
|
||||
result = SourceColumn.sort(columns=cls._registry[source])
|
||||
except KeyError:
|
||||
try:
|
||||
# Try it as a queryset
|
||||
return SourceColumn.sort(columns=cls._registry[source.model])
|
||||
result = SourceColumn.sort(columns=cls._registry[source.model])
|
||||
except AttributeError:
|
||||
try:
|
||||
# It seems to be an instance, try its class
|
||||
return SourceColumn.sort(columns=cls._registry[source.__class__])
|
||||
result = SourceColumn.sort(columns=cls._registry[source.__class__])
|
||||
except KeyError:
|
||||
try:
|
||||
# Special case for queryset items produced from
|
||||
# .defer() or .only() optimizations
|
||||
return SourceColumn.sort(columns=cls._registry[list(source._meta.parents.items())[0][0]])
|
||||
result = SourceColumn.sort(columns=cls._registry[list(source._meta.parents.items())[0][0]])
|
||||
except (AttributeError, KeyError, IndexError):
|
||||
return ()
|
||||
result = ()
|
||||
except TypeError:
|
||||
# unhashable type: list
|
||||
return ()
|
||||
result = ()
|
||||
|
||||
def __init__(self, source, label=None, attribute=None, func=None, order=None):
|
||||
if exclude_identifier:
|
||||
return [item for item in result if not item.is_identifier]
|
||||
else:
|
||||
if only_identifier:
|
||||
for item in result:
|
||||
if item.is_identifier:
|
||||
return item
|
||||
else:
|
||||
return result
|
||||
|
||||
def __init__(self, source, label=None, attribute=None, func=None, kwargs=None, order=None, is_identifier=False):
|
||||
self.source = source
|
||||
self._label = label
|
||||
self.attribute = attribute
|
||||
self.func = func
|
||||
self.kwargs = kwargs or {}
|
||||
self.order = order or 0
|
||||
self.is_identifier = is_identifier
|
||||
self.__class__._registry.setdefault(source, [])
|
||||
self.__class__._registry[source].append(self)
|
||||
|
||||
@@ -543,9 +555,12 @@ class SourceColumn(object):
|
||||
|
||||
def resolve(self, context):
|
||||
if self.attribute:
|
||||
result = resolve_attribute(context['object'], self.attribute)
|
||||
result = resolve_attribute(
|
||||
obj=context['object'], attribute=self.attribute,
|
||||
kwargs=self.kwargs
|
||||
)
|
||||
elif self.func:
|
||||
result = self.func(context=context)
|
||||
result = self.func(context=context, **self.kwargs)
|
||||
|
||||
return result
|
||||
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
TEXT_ONLY_IDENTIFIER = 'only_identifier'
|
||||
TEXT_EXCLUDE_IDENTIFIER = 'exclude_identifier'
|
||||
@@ -4,6 +4,7 @@ from django.template import Library
|
||||
|
||||
from ..classes import Link, Menu, SourceColumn
|
||||
from ..forms import MultiItemForm
|
||||
from ..literals import TEXT_EXCLUDE_IDENTIFIER, TEXT_ONLY_IDENTIFIER
|
||||
|
||||
register = Library()
|
||||
|
||||
@@ -48,7 +49,15 @@ def get_multi_item_links_form(context, object_list):
|
||||
|
||||
|
||||
@register.filter
|
||||
def get_source_columns(source):
|
||||
def get_source_columns(source, args=None):
|
||||
exclude_identifier = False
|
||||
only_identifier = False
|
||||
|
||||
if args == TEXT_EXCLUDE_IDENTIFIER:
|
||||
exclude_identifier = True
|
||||
elif args == TEXT_ONLY_IDENTIFIER:
|
||||
only_identifier = True
|
||||
|
||||
try:
|
||||
# Is it a query set?
|
||||
source = source.model
|
||||
@@ -67,7 +76,10 @@ def get_source_columns(source):
|
||||
# It a list and it's empty
|
||||
pass
|
||||
|
||||
return SourceColumn.get_for_source(source)
|
||||
return SourceColumn.get_for_source(
|
||||
source=source, exclude_identifier=exclude_identifier,
|
||||
only_identifier=only_identifier
|
||||
)
|
||||
|
||||
|
||||
@register.simple_tag(takes_context=True)
|
||||
@@ -78,5 +90,8 @@ def resolve_link(context, link):
|
||||
|
||||
@register.simple_tag(takes_context=True)
|
||||
def source_column_resolve(context, column):
|
||||
context['column_result'] = column.resolve(context=context)
|
||||
return ''
|
||||
if column:
|
||||
result = column.resolve(context=context)
|
||||
return result
|
||||
else:
|
||||
return ''
|
||||
|
||||
Reference in New Issue
Block a user