added possibility to limit display to fields from a single page
This commit is contained in:
parent
6576927daf
commit
51bd030283
|
@ -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)
|
||||
|
||||
|
|
Loading…
Reference in New Issue