diff --git a/edbob/pyramid/forms/formalchemy.py b/edbob/pyramid/forms/formalchemy.py index 49f9a1c..d81c070 100644 --- a/edbob/pyramid/forms/formalchemy.py +++ b/edbob/pyramid/forms/formalchemy.py @@ -44,9 +44,9 @@ from edbob.util import prettify from edbob.pyramid import Session -__all__ = ['AlchemyGrid', 'ChildGridField', 'EnumFieldRenderer', - 'PrettyDateTimeFieldRenderer', 'make_fieldset', 'required', - 'pretty_datetime'] +__all__ = ['AlchemyGrid', 'ChildGridField', 'PropertyField', + 'EnumFieldRenderer', 'PrettyDateTimeFieldRenderer', + 'make_fieldset', 'required', 'pretty_datetime'] class TemplateEngine(formalchemy.templates.TemplateEngine): @@ -110,8 +110,8 @@ class AlchemyGrid(formalchemy.Grid): # self.url_kwargs = url_kwargs # self.sortable = config.get('sortable', False) - def __init__(self, cls, instances, config, url_grid, url_object=None, - url_delete=None, **kwargs): + def __init__(self, cls, instances, config, gridurl=None, objurl=None, + delurl=None, **kwargs): """ Grid constructor. @@ -123,9 +123,10 @@ class AlchemyGrid(formalchemy.Grid): formalchemy.Grid.__init__(self, cls, instances, **kwargs) self.config = config - self.url_grid = url_grid - self.url_object = url_object - self.url_delete = url_delete + self.request = config['request'] + self.gridurl = gridurl + self.objurl = objurl + self.delurl = delurl self.sortable = config.get('sortable', False) self.deletable = config.get('deletable', False) self.pager = instances if isinstance(instances, paginate.Page) else None @@ -149,9 +150,15 @@ class AlchemyGrid(formalchemy.Grid): return format_attrs(**attrs) def url_attrs(self): - return format_attrs(url=self.url_grid, - objurl=self.url_object, - delurl=self.url_delete) + attrs = {} + url = self.request.route_url + if self.gridurl: + attrs['url'] = self.gridurl + if self.objurl: + attrs['objurl'] = url(self.objurl, uuid='{uuid}') + if self.delurl: + attrs['delurl'] = url(self.delurl, uuid='{uuid}') + return format_attrs(**attrs) # def render(self, class_=None, **kwargs): # """ @@ -278,6 +285,20 @@ class ChildGridField(formalchemy.Field): self.set(readonly=True) +class PropertyField(formalchemy.Field): + """ + Convenience class for fields which simply involve a read-only property + value. + """ + + def __init__(self, name, attr=None, *args, **kwargs): + super(PropertyField, self).__init__(name, *args, **kwargs) + if not attr: + attr = name + self.set(value=lambda x: getattr(x, attr)) + self.set(readonly=True) + + def make_fieldset(model, **kwargs): kwargs.setdefault('session', Session()) return FieldSet(model, **kwargs) diff --git a/edbob/pyramid/grids.py b/edbob/pyramid/grids.py index 179b46b..a230739 100644 --- a/edbob/pyramid/grids.py +++ b/edbob/pyramid/grids.py @@ -137,6 +137,7 @@ def get_grid_config(name, request, search=None, url=None, **kwargs): elif request.session.get(full_key): value = request.session[full_key] config[key] = value + config['request'] = request config['search'] = search config['url'] = url return config diff --git a/edbob/pyramid/static/js/edbob.js b/edbob/pyramid/static/js/edbob.js index c0bee70..22f176a 100644 --- a/edbob/pyramid/static/js/edbob.js +++ b/edbob/pyramid/static/js/edbob.js @@ -149,7 +149,7 @@ $(function() { }); $('#add-filter').live('change', function() { - var div = $(this).parents('div.filters:first'); + var div = $(this).parents('div.filterset:first'); var filter = div.find('#filter-'+$(this).val()); filter.find(':first-child').attr('checked', true); filter.show(); @@ -238,7 +238,7 @@ $(function() { }); }); } else { - location.href = div.attr('objurl') + '?uuid=' + get_uuid(this); + location.href = div.attr('objurl').replace(/%7Buuid%7D/, get_uuid(this)); } }); @@ -273,8 +273,7 @@ $(function() { if (confirm("Do you really wish to delete this object?")) { var grid = $(this).parents('div.grid:first'); var url = grid.attr('delurl'); -// alert(url + '?uuid=' + get_uuid(this) + '&delete=true'); - location.href = url + '?uuid=' + get_uuid(this) + '&delete=true'; + location.href = url.replace(/%7Buuid%7D/, get_uuid(this)); } return false; }); diff --git a/edbob/pyramid/templates/forms/filterset.mako b/edbob/pyramid/templates/forms/filterset.mako index e0f0215..31fb9d6 100644 --- a/edbob/pyramid/templates/forms/filterset.mako +++ b/edbob/pyramid/templates/forms/filterset.mako @@ -4,7 +4,7 @@ <% visible = [] %> % for f in search.sorted_filters(): <% f = search.filters[f] %> -