Add basic "Buefy" support for grids (master index view)

still pretty experimental at this point, but making progress
This commit is contained in:
Lance Edgar 2019-03-24 17:24:43 -05:00
parent 3cef591719
commit 8d6ecc3ec7
9 changed files with 296 additions and 15 deletions

View file

@ -2,7 +2,7 @@
################################################################################
#
# Rattail -- Retail Software Framework
# Copyright © 2010-2018 Lance Edgar
# Copyright © 2010-2019 Lance Edgar
#
# This file is part of Rattail.
#
@ -44,10 +44,10 @@ class DataSyncChangesView(MasterView):
model_class = model.DataSyncChange
url_prefix = '/datasync/changes'
permission_prefix = 'datasync'
creatable = False
editable = False
bulk_deletable = True
use_buefy = True
grid_columns = [
'source',

View file

@ -52,6 +52,7 @@ class ProfilesView(MasterView):
pageable = False
creatable = False
deletable = False
use_buefy = True
grid_columns = [
'key',

View file

@ -122,6 +122,8 @@ class MasterView(View):
grid_index = None
use_index_links = False
# this should be turned on per-view as progress is made
use_buefy = False
has_versions = False
help_url = None
@ -265,6 +267,7 @@ class MasterView(View):
"""
self.listing = True
grid = self.make_grid()
use_buefy = self.use_buefy and self.rattail_config.getbool('tailbone', 'grids.use_buefy')
# If user just refreshed the page with a reset instruction, issue a
# redirect in order to clear out the query string.
@ -275,16 +278,28 @@ class MasterView(View):
if grid.pageable and hasattr(grid, 'pager'):
self.first_visible_grid_index = grid.pager.first_item
# Return grid only, if partial page was requested.
# return grid only, if partial page was requested
if self.request.params.get('partial'):
if six.PY3:
self.request.response.content_type = 'text/html'
else:
self.request.response.content_type = b'text/html'
self.request.response.text = grid.render_grid()
return self.request.response
if use_buefy:
# render grid data only, as JSON
return render_to_response('json', grid.get_buefy_data(),
request=self.request)
else: # just do traditional thing, render grid HTML
self.request.response.content_type = str('text/html')
self.request.response.text = grid.render_grid()
return self.request.response
return self.render_to_response('index', {'grid': grid})
context = {
'grid': grid,
'use_buefy': use_buefy,
}
if use_buefy:
context['grid_columns'] = grid.get_buefy_columns()
context['grid_data'] = grid.get_buefy_data()
context['static_data'] = grid.has_static_data()
return self.render_to_response('index', context)
def make_grid(self, factory=None, key=None, data=None, columns=None, **kwargs):
"""
@ -2246,9 +2261,11 @@ class MasterView(View):
"""
actions = []
prefix = self.get_permission_prefix()
use_buefy = self.use_buefy and self.rattail_config.getbool('tailbone', 'grids.use_buefy')
if self.viewable and self.request.has_perm('{}.view'.format(prefix)):
url = self.get_view_index_url if self.use_index_links else None
actions.append(self.make_action('view', icon='zoomin', url=url))
icon = 'eye' if use_buefy else 'zoomin'
actions.append(self.make_action('view', icon=icon, url=url))
return actions
def get_view_index_url(self, row, i):
@ -2261,8 +2278,10 @@ class MasterView(View):
"""
actions = []
prefix = self.get_permission_prefix()
use_buefy = self.use_buefy and self.rattail_config.getbool('tailbone', 'grids.use_buefy')
if self.editable and self.request.has_perm('{}.edit'.format(prefix)):
actions.append(self.make_action('edit', icon='pencil', url=self.default_edit_url))
icon = 'edit' if use_buefy else 'pencil'
actions.append(self.make_action('edit', icon=icon, url=self.default_edit_url))
if self.deletable and self.request.has_perm('{}.delete'.format(prefix)):
actions.append(self.make_action('delete', icon='trash', url=self.default_delete_url))
return actions

View file

@ -2,7 +2,7 @@
################################################################################
#
# Rattail -- Retail Software Framework
# Copyright © 2010-2018 Lance Edgar
# Copyright © 2010-2019 Lance Edgar
#
# This file is part of Rattail.
#
@ -42,6 +42,7 @@ class TablesView(MasterView):
viewable = False
filterable = False
pageable = False
use_buefy = True
grid_columns = [
'name',

View file

@ -68,6 +68,7 @@ class UpgradeView(MasterView):
executable = True
execute_progress_template = '/upgrade.mako'
execute_progress_initial_msg = "Upgrading"
use_buefy = True
labels = {
'executed_by': "Executed by",