| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- # coding=utf-8
- from django.template import loader
- from django.utils.translation import ugettext_lazy as _
- from xadmin.plugins.utils import get_context_dict
- from xadmin.sites import site
- from xadmin.views import BaseAdminPlugin, ListAdminView
- from xadmin.util import label_for_field
- LAYOUT_VAR = '_layout'
- DEFAULT_LAYOUTS = {
- 'table': {
- 'key': 'table',
- 'icon': 'fa fa-table',
- 'name': _(u'Table'),
- 'template': 'views/model_list.html',
- },
- 'thumbnails': {
- 'key': 'thumbnails',
- 'icon': 'fa fa-th-large',
- 'name': _(u'Thumbnails'),
- 'template': 'grids/thumbnails.html',
- },
- }
- class GridLayoutPlugin(BaseAdminPlugin):
- grid_layouts = []
- _active_layouts = []
- _current_layout = None
- _current_icon = 'table'
- def get_layout(self, l):
- item = (type(l) is dict) and l or DEFAULT_LAYOUTS[l]
- return dict({'url': self.admin_view.get_query_string({LAYOUT_VAR: item['key']}), 'selected': False}, **item)
- def init_request(self, *args, **kwargs):
- active = bool(self.request.method == 'GET' and self.grid_layouts)
- if active:
- layouts = (type(self.grid_layouts) in (list, tuple)) and self.grid_layouts or (self.grid_layouts,)
- self._active_layouts = [self.get_layout(l) for l in layouts]
- self._current_layout = self.request.GET.get(LAYOUT_VAR, self._active_layouts[0]['key'])
- for layout in self._active_layouts:
- if self._current_layout == layout['key']:
- self._current_icon = layout['icon']
- layout['selected'] = True
- self.admin_view.object_list_template = self.admin_view.get_template_list(layout['template'])
- return active
- def result_item(self, item, obj, field_name, row):
- if self._current_layout == 'thumbnails':
- if getattr(item.attr, 'is_column', True):
- item.field_label = label_for_field(
- field_name, self.model,
- model_admin=self.admin_view,
- return_attr=False
- )
- if getattr(item.attr, 'thumbnail_img', False):
- setattr(item, 'thumbnail_hidden', True)
- row['thumbnail_img'] = item
- elif item.is_display_link:
- setattr(item, 'thumbnail_hidden', True)
- row['thumbnail_label'] = item
- return item
- # Block Views
- def block_top_toolbar(self, context, nodes):
- if len(self._active_layouts) > 1:
- context.update({
- 'layouts': self._active_layouts,
- 'current_icon': self._current_icon,
- })
- nodes.append(loader.render_to_string('xadmin/blocks/model_list.top_toolbar.layouts.html',
- context=get_context_dict(context)))
- site.register_plugin(GridLayoutPlugin, ListAdminView)
|