From 8ea379bbff29c570b701b98bbaec74cc99d34b64 Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Thu, 30 Jul 2020 16:38:03 -0500 Subject: [PATCH] Add more customization hooks for making grid actions in master view --- tailbone/views/master.py | 45 +++++++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/tailbone/views/master.py b/tailbone/views/master.py index 7f52d9c4..d4850ef4 100644 --- a/tailbone/views/master.py +++ b/tailbone/views/master.py @@ -1139,7 +1139,7 @@ class MasterView(View): self.request.session.flash("{} has been cloned: {}".format( self.get_model_title(), self.get_instance_title(instance))) self.request.session.flash("(NOTE, you are now viewing the clone!)") - return self.redirect(self.get_action_url('view', cloned)) + return self.redirect_after_clone(cloned) return self.render_to_response('clone', { 'instance': instance, 'instance_title': self.get_instance_title(instance), @@ -1167,6 +1167,9 @@ class MasterView(View): self.Session.flush() return cloned + def redirect_after_clone(self, instance, mobile=False): + return self.redirect(self.get_action_url('view', instance, mobile=mobile)) + def touch(self): """ View for "touching" an object so as to trigger datasync logic for it. @@ -2522,13 +2525,16 @@ class MasterView(View): Return a list of 'main' actions for the grid. """ actions = [] - use_buefy = self.get_use_buefy() if self.viewable and self.has_perm('view'): - url = self.get_view_index_url if self.use_index_links else None - icon = 'eye' if use_buefy else 'zoomin' - actions.append(self.make_action('view', icon=icon, url=url)) + actions.append(self.make_grid_action_view()) return actions + def make_grid_action_view(self): + use_buefy = self.get_use_buefy() + url = self.get_view_index_url if self.use_index_links else None + icon = 'eye' if use_buefy else 'zoomin' + return self.make_action('view', icon=icon, url=url) + def get_view_index_url(self, row, i): route = '{}.view_index'.format(self.get_route_prefix()) return '{}?index={}'.format(self.request.route_url(route), self.first_visible_grid_index + i - 1) @@ -2538,27 +2544,42 @@ class MasterView(View): Return a list of 'more' actions for the grid. """ actions = [] - use_buefy = self.get_use_buefy() # Edit if self.editable and self.has_perm('edit'): - icon = 'edit' if use_buefy else 'pencil' - actions.append(self.make_action('edit', icon=icon, url=self.default_edit_url)) + actions.append(self.make_grid_action_edit()) # Delete if self.deletable and self.has_perm('delete'): - kwargs = {} - if use_buefy and self.delete_confirm == 'simple': - kwargs['click_handler'] = 'deleteObject' - actions.append(self.make_action('delete', icon='trash', url=self.default_delete_url, **kwargs)) + actions.append(self.make_grid_action_delete()) return actions + def make_grid_action_edit(self): + use_buefy = self.get_use_buefy() + icon = 'edit' if use_buefy else 'pencil' + return self.make_action('edit', icon=icon, url=self.default_edit_url) + + def make_grid_action_clone(self): + return self.make_action('clone', icon='object-ungroup', + url=self.default_clone_url) + + def make_grid_action_delete(self): + use_buefy = self.get_use_buefy() + kwargs = {} + if use_buefy and self.delete_confirm == 'simple': + kwargs['click_handler'] = 'deleteObject' + return self.make_action('delete', icon='trash', url=self.default_delete_url, **kwargs) + def default_edit_url(self, row, i=None): if self.editable_instance(row): return self.request.route_url('{}.edit'.format(self.get_route_prefix()), **self.get_action_route_kwargs(row)) + def default_clone_url(self, row, i=None): + return self.request.route_url('{}.clone'.format(self.get_route_prefix()), + **self.get_action_route_kwargs(row)) + def default_delete_url(self, row, i=None): if self.deletable_instance(row): return self.request.route_url('{}.delete'.format(self.get_route_prefix()),