added possibility to limit display to fields from a single page

This commit is contained in:
Frédéric Péters 2009-03-25 14:30:24 +00:00
parent 6576927daf
commit 51bd030283
1 changed files with 54 additions and 6 deletions

View File

@ -183,15 +183,32 @@ class FieldsDirectory(Directory):
get_response().add_javascript(['jquery.js', 'interface.js', 'biglist.js'])
'<h2>%s</h2>' % self.objectdef.name
get_session().display_message()
try:
page_no = int(get_request().form.get('page'))
except (ValueError, TypeError):
page_no = None
if not self.objectdef.fields:
'<p>%s</p>' % _('There are not yet any fields for this form.')
else:
'<p>'
_('Use drag and drop to reorder fields.')
'</p>'
if page_no is not None:
'<p>'
'<a href="./">%s</a>' % _('Display all pages')
'</p>'
'<ul id="fields-list" class="biglist sortable">'
current_page_no = 0
for i, field in enumerate(self.objectdef.fields):
'<li class="biglistitem" id="itemId_%s">' % field.id
if field.type == 'page':
current_page_no += 1
hidden = ''
if page_no is not None and current_page_no != page_no:
hidden = 'style="display:none;'
'<li class="biglistitem" id="itemId_%s" %s>' % (field.id, hidden)
try:
type = [x[1] for x in get_field_types() if x[0] == field.type][0]
except IndexError:
@ -221,6 +238,9 @@ class FieldsDirectory(Directory):
'<span class="optional">%s</span>' % required
'</p>'
'<p class="commands">'
if field.type == 'page' and page_no is None:
command_icon('?page=%s' % current_page_no, 'view',
label = _('Limit display to this page'))
command_icon('%s/' % field.id, 'edit')
command_icon('%s/delete' % field.id, 'remove', popup = True)
@ -229,8 +249,11 @@ class FieldsDirectory(Directory):
'<div id="new-field">'
'<h3>%s</h3>' % _('New Field')
get_request().form = None # ignore the eventual ?page=x
form = Form(enctype='multipart/form-data', action = 'new')
form.widgets.append(HtmlWidget('<table><tr><td>'))
if page_no:
form.add_hidden('page_no', str(page_no))
form.add(StringWidget, 'label', title = _('Label'),
required = True, size = 50)
form.widgets.append(HtmlWidget('</td><td>'))
@ -242,6 +265,8 @@ class FieldsDirectory(Directory):
form.render()
if self.support_import:
form = Form(enctype='multipart/form-data', action = 'new')
if page_no:
form.add_hidden('page_no', str(page_no))
form.add(SingleSelectWidget, 'form', title = _('Or import fields from:'), required = True,
options = [(None, '----')] + [
(x.id, x.name) for x in FormDef.select(order_by = 'name')])
@ -264,6 +289,7 @@ class FieldsDirectory(Directory):
def new(self):
form = Form(enctype='multipart/form-data', action = 'new')
form.add(StringWidget, 'page_no')
form.add(StringWidget, 'label', title = _('Label'), size = 50)
form.add(SingleSelectWidget, 'type', title = _('Type'),
options = [(x, _(y)) for x,y in get_field_types()])
@ -281,29 +307,51 @@ class FieldsDirectory(Directory):
except (ValueError, TypeError):
return -1
try:
page_no = int(form.get_widget('page_no').parse())
except (TypeError, ValueError):
page_no = None
print 'page no:', page_no
redirect_url = '.'
if page_no is not None:
redirect_url = './?page=%s' % page_no
current_page_no = 0
for i, field in enumerate(self.objectdef.fields):
if field.type == 'page':
current_page_no += 1
if current_page_no > page_no:
break
else:
i += 1
insertion_point = i
else:
insertion_point = len(self.objectdef.fields)
if form.get_widget('label').parse() and form.get_widget('type').parse():
if self.objectdef.fields:
id = str(max([lax_int(x.id) for x in self.objectdef.fields]) + 1)
else:
id = '1'
self.objectdef.fields.append(
self.objectdef.fields.insert(insertion_point,
fields.get_field_class_by_type(form.get_widget('type').parse())(
label = form.get_widget('label').parse(),
type = form.get_widget('type').parse(),
id = id))
elif form.get_widget('form').parse():
formdef = FormDef.get(form.get_widget('form').parse())
for field in formdef.fields:
for j, field in enumerate(formdef.fields):
if self.objectdef.fields:
field.id = str(max([lax_int(x.id) for x in self.objectdef.fields]) + 1)
else:
field.id = '1'
self.objectdef.fields.append(field)
self.objectdef.fields.insert(insertion_point+j, field)
else:
get_session().message = ('error', _('Submitted form was not filled properly.'))
return redirect('.')
return redirect(redirect_url)
self.objectdef.store()
return redirect('.')
return redirect(redirect_url)