improve clickable grid url stuff

This commit is contained in:
Lance Edgar 2012-08-10 14:56:06 -07:00
parent f678d10187
commit b6d48d692f
4 changed files with 22 additions and 24 deletions

View file

@ -99,8 +99,8 @@ class AlchemyGrid(Grid):
return field.render_readonly() return field.render_readonly()
return field.render() return field.render()
def _row_attrs(self, row, i): def row_attrs(self, row, i):
attrs = super(AlchemyGrid, self)._row_attrs(row, i) attrs = super(AlchemyGrid, self).row_attrs(row, i)
if hasattr(row, 'uuid'): if hasattr(row, 'uuid'):
attrs['uuid'] = row.uuid attrs['uuid'] = row.uuid
return attrs return attrs

View file

@ -49,7 +49,8 @@ class Grid(edbob.Object):
checkboxes = False checkboxes = False
deletable = False deletable = False
partial_only = False partial_only = False
row_attrs = None row_route_name = None
row_route_kwargs = None
def __init__(self, request, **kwargs): def __init__(self, request, **kwargs):
kwargs.setdefault('fields', OrderedDict()) kwargs.setdefault('fields', OrderedDict())
@ -95,12 +96,18 @@ class Grid(edbob.Object):
def render_field(self, field): def render_field(self, field):
raise NotImplementedError raise NotImplementedError
def _row_attrs(self, row, i): def row_attrs(self, row, i):
attrs = {'class_': 'odd' if i % 2 else 'even'} attrs = {'class_': 'odd' if i % 2 else 'even'}
return attrs return attrs
def get_row_attrs(self, row, i): def get_row_attrs(self, row, i):
attrs = self._row_attrs(row, i) attrs = self.row_attrs(row, i)
if self.row_attrs: if self.row_route_name:
attrs.update(self.row_attrs(row, i)) kwargs = {}
if self.row_route_kwargs:
if callable(self.row_route_kwargs):
kwargs = self.row_route_kwargs(row)
else:
kwargs = self.row_route_kwargs
attrs['url'] = self.request.route_url(self.row_route_name, **kwargs)
return format_attrs(**attrs) return format_attrs(**attrs)

View file

@ -250,22 +250,13 @@ $(function() {
$(this).removeClass('hovering'); $(this).removeClass('hovering');
}); });
$('div.grid.clickable table tbody tr').live('click', function() { $('div.grid.clickable table tbody td').live('click', function() {
var div = $(this).parents('div.grid:first'); if (! $(this).hasClass('noclick')) {
if (div.attr('usedlg') == 'True') { var row = $(this).parents('tr:first');
var dlg = get_dialog('grid-object'); var url = row.attr('url');
var data = { if (url) {
'uuid': get_uuid(this), location.href = url;
'partial': true, }
};
dlg.load(div.attr('objurl'), data, function() {
dlg.dialog({
width: 500,
height: 450,
});
});
} else {
location.href = div.attr('objurl').replace(/%7Buuid%7D/, get_uuid(this));
} }
}); });

View file

@ -26,7 +26,7 @@
<td class="${field.name}">${grid.render_field(field)}</td> <td class="${field.name}">${grid.render_field(field)}</td>
% endfor % endfor
% for col in grid.extra_columns: % for col in grid.extra_columns:
<td class="${col.name}">${col.callback(row)}</td> <td class="noclick ${col.name}">${col.callback(row)}</td>
% endfor % endfor
% if grid.deletable: % if grid.deletable:
<td class="delete">&nbsp;</td> <td class="delete">&nbsp;</td>