save point

This commit is contained in:
Lance Edgar 2012-04-10 22:24:30 -05:00
parent 17f2dfe1d1
commit ce08699104
5 changed files with 47 additions and 30 deletions

View file

@ -44,9 +44,9 @@ from edbob.util import prettify
from edbob.pyramid import Session from edbob.pyramid import Session
__all__ = ['AlchemyGrid', 'ChildGridField', 'EnumFieldRenderer', __all__ = ['AlchemyGrid', 'ChildGridField', 'PropertyField',
'PrettyDateTimeFieldRenderer', 'make_fieldset', 'required', 'EnumFieldRenderer', 'PrettyDateTimeFieldRenderer',
'pretty_datetime'] 'make_fieldset', 'required', 'pretty_datetime']
class TemplateEngine(formalchemy.templates.TemplateEngine): class TemplateEngine(formalchemy.templates.TemplateEngine):
@ -110,8 +110,8 @@ class AlchemyGrid(formalchemy.Grid):
# self.url_kwargs = url_kwargs # self.url_kwargs = url_kwargs
# self.sortable = config.get('sortable', False) # self.sortable = config.get('sortable', False)
def __init__(self, cls, instances, config, url_grid, url_object=None, def __init__(self, cls, instances, config, gridurl=None, objurl=None,
url_delete=None, **kwargs): delurl=None, **kwargs):
""" """
Grid constructor. Grid constructor.
@ -123,9 +123,10 @@ class AlchemyGrid(formalchemy.Grid):
formalchemy.Grid.__init__(self, cls, instances, **kwargs) formalchemy.Grid.__init__(self, cls, instances, **kwargs)
self.config = config self.config = config
self.url_grid = url_grid self.request = config['request']
self.url_object = url_object self.gridurl = gridurl
self.url_delete = url_delete self.objurl = objurl
self.delurl = delurl
self.sortable = config.get('sortable', False) self.sortable = config.get('sortable', False)
self.deletable = config.get('deletable', False) self.deletable = config.get('deletable', False)
self.pager = instances if isinstance(instances, paginate.Page) else None self.pager = instances if isinstance(instances, paginate.Page) else None
@ -149,9 +150,15 @@ class AlchemyGrid(formalchemy.Grid):
return format_attrs(**attrs) return format_attrs(**attrs)
def url_attrs(self): def url_attrs(self):
return format_attrs(url=self.url_grid, attrs = {}
objurl=self.url_object, url = self.request.route_url
delurl=self.url_delete) 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): # def render(self, class_=None, **kwargs):
# """ # """
@ -278,6 +285,20 @@ class ChildGridField(formalchemy.Field):
self.set(readonly=True) 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): def make_fieldset(model, **kwargs):
kwargs.setdefault('session', Session()) kwargs.setdefault('session', Session())
return FieldSet(model, **kwargs) return FieldSet(model, **kwargs)

View file

@ -137,6 +137,7 @@ def get_grid_config(name, request, search=None, url=None, **kwargs):
elif request.session.get(full_key): elif request.session.get(full_key):
value = request.session[full_key] value = request.session[full_key]
config[key] = value config[key] = value
config['request'] = request
config['search'] = search config['search'] = search
config['url'] = url config['url'] = url
return config return config

View file

@ -149,7 +149,7 @@ $(function() {
}); });
$('#add-filter').live('change', 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()); var filter = div.find('#filter-'+$(this).val());
filter.find(':first-child').attr('checked', true); filter.find(':first-child').attr('checked', true);
filter.show(); filter.show();
@ -238,7 +238,7 @@ $(function() {
}); });
}); });
} else { } 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?")) { if (confirm("Do you really wish to delete this object?")) {
var grid = $(this).parents('div.grid:first'); var grid = $(this).parents('div.grid:first');
var url = grid.attr('delurl'); var url = grid.attr('delurl');
// alert(url + '?uuid=' + get_uuid(this) + '&delete=true'); location.href = url.replace(/%7Buuid%7D/, get_uuid(this));
location.href = url + '?uuid=' + get_uuid(this) + '&delete=true';
} }
return false; return false;
}); });

View file

@ -4,7 +4,7 @@
<% visible = [] %> <% visible = [] %>
% for f in search.sorted_filters(): % for f in search.sorted_filters():
<% f = search.filters[f] %> <% f = search.filters[f] %>
<div class="filter" id="filter-${f.name}"${' style="display: none;"' if not search.config.get('include_filter_'+f.name) else ''}> <div class="filter" id="filter-${f.name}"${' style="display: none;"' if not search.config.get('include_filter_'+f.name) else ''|n}>
${search.checkbox('include_filter_'+f.name)} ${search.checkbox('include_filter_'+f.name)}
<label for="${f.name}">${f.label}</label> <label for="${f.name}">${f.label}</label>
${f.types_select()} ${f.types_select()}

View file

@ -114,21 +114,17 @@ def crud(request, cls, fieldset_factory, home=None, delete=None, post_sync=None,
if res: if res:
return res return res
if request.params.get('partial'): if request.params.get('partial'):
# Session.flush() # Session.flush()
# return self.json_success(uuid=fs.model.uuid) # return self.json_success(uuid=fs.model.uuid)
assert False, "need to fix this" assert False, "need to fix this"
# Session.commit() if not home:
if not home: fs.model = Session.merge(fs.model)
# FIXME home = request.current_route_url(uuid=fs.model.uuid)
# home = request.route_url.current() + '?uuid=' + fs.model.uuid request.session.flash("%s \"%s\" has been %s." % (
# home = request.route_url('home') fs.crud_title, fs.get_display_text(),
fs.model = Session.merge(fs.model) 'updated' if fs.edit else 'created'))
home = request.current_route_url() + '?uuid=' + fs.model.uuid
request.session.flash("%s \"%s\" has been %s." % (
fs.crud_title, fs.get_display_text(),
'updated' if fs.edit else 'created'))
return HTTPFound(location=home) return HTTPFound(location=home)
data = {'fieldset': fs, 'crud': True} data = {'fieldset': fs, 'crud': True}