fixed issue 928, thanks dulakian and Anthony

This commit is contained in:
mdipierro
2012-08-15 14:23:44 -05:00
parent e51c78763e
commit 562f6dd2b2
2 changed files with 89 additions and 41 deletions
+1 -1
View File
@@ -1 +1 @@
Version 2.00.0 (2012-08-15 09:12:50) dev
Version 2.00.0 (2012-08-15 14:23:38) dev
+88 -40
View File
@@ -22,7 +22,7 @@ from http import HTTP
from html import XML, SPAN, TAG, A, DIV, CAT, UL, LI, TEXTAREA, BR, IMG, SCRIPT
from html import FORM, INPUT, LABEL, OPTION, SELECT, BUTTON
from html import TABLE, THEAD, TBODY, TR, TD, TH, STYLE
from html import URL, truncate_string
from html import URL, truncate_string, FIELDSET
from dal import DAL, Field, Table, Row, CALLABLETYPES, smart_query, \
bar_encode, regex_table_field, Reference
from storage import Storage
@@ -35,6 +35,7 @@ import urllib
import re
import cStringIO
from gluon import current, redirect, A, URL, DIV, H3, UL, LI, SPAN, INPUT
import inspect
table_field = re.compile('[\w_]+\.[\w_]+')
widget_class = re.compile('^\w*')
@@ -642,6 +643,62 @@ class AutocompleteWidget(object):
attr['_onfocus'] = attr['_onkeyup']
return TAG[''](INPUT(**attr),DIV(_id=div_id,_style='position:absolute;'))
def formstyle_table3cols(form, fields):
''' 3 column table - default '''
table = TABLE()
for id, label, controls, help in fields:
_help = TD(help, _class='w2p_fc')
_controls = TD(controls, _class='w2p_fw')
_label = TD(label, _class='w2p_fl')
table.append(TR(_label, _controls, _help, _id=id))
return table
def formstyle_table2cols(form, fields):
''' 2 column table '''
table = TABLE()
for id, label, controls, help in fields:
_help = TD(help, _class='w2p_fc', _width='50%')
_controls = TD(controls, _class='w2p_fw', _colspan='2')
_label = TD(label, _class='w2p_fl', _width='50%')
table.append(TR(_label, _help, _id=id+'1', _class='even'))
table.append(TR(_controls, _id=id+'2', _class='odd'))
return table
def formstyle_divs(form, fields):
''' divs only '''
table = TAG['']()
for id, label, controls, help in fields:
_help = DIV(help, _class='w2p_fc')
_controls = DIV(controls, _class='w2p_fw')
_label = DIV(label, _class='w2p_fl')
table.append(DIV(_label, _controls, _help, _id=id))
return table
def formstyle_ul(form, fields):
''' unordered list '''
table = UL()
for id, label, controls, help in fields:
_help = DIV(help, _class='w2p_fc')
_controls = DIV(controls, _class='w2p_fw')
_label = DIV(label, _class='w2p_fl')
table.append(LI(_label, _controls, _help, _id=id))
return table
def formstyle_bootstrap(form, fields):
''' bootstrap format form layout '''
form['_class'] = 'form-horizontal'
table = FIELDSET()
for id, label, controls, help in fields:
if isinstance(controls, (INPUT, SELECT, TEXTAREA)):
controls['_class'] = 'input-xlarge'
if isinstance(label, LABEL):
label['_class'] = 'control-label'
# styles
_help = DIV(help, _class='help-block')
# embed _help into _controls don't wrap label
_controls = DIV(controls, _help, _class='controls')
table.append(DIV(label, _controls, _class='control-group'))
return table
class SQLFORM(FORM):
@@ -713,6 +770,15 @@ class SQLFORM(FORM):
list = ListWidget,
))
formstyles = Storage(dict(
table3cols = formstyle_table3cols,
table2cols = formstyle_table2cols,
divs = formstyle_divs,
ul = formstyle_ul,
bootstrap = formstyle_bootstrap,
))
FIELDNAME_REQUEST_DELETE = 'delete_this_record'
FIELDKEY_DELETE_RECORD = 'delete_record'
ID_LABEL_SUFFIX = '__label'
@@ -1012,49 +1078,31 @@ class SQLFORM(FORM):
self.components = [table]
def createform(self, xfields):
if self.formstyle == 'table3cols':
table = TABLE()
for id,a,b,c in xfields:
td_b = self.field_parent[id] = TD(b,_class='w2p_fw')
table.append(TR(TD(a,_class='w2p_fl'),
td_b,
TD(c,_class='w2p_fc'),_id=id))
elif self.formstyle == 'table2cols':
table = TABLE()
for id,a,b,c in xfields:
td_b = self.field_parent[id] = TD(b,_class='w2p_fw',_colspan="2")
table.append(TR(TD(a,_class='w2p_fl'),
TD(c,_class='w2p_fc'),_id=id
+'1',_class='even'))
table.append(TR(td_b,_id=id+'2',_class='odd'))
elif self.formstyle == 'divs':
table = TAG['']()
for id,a,b,c in xfields:
div_b = self.field_parent[id] = DIV(b,_class='w2p_fw')
table.append(DIV(DIV(a,_class='w2p_fl'),
div_b,
DIV(c,_class='w2p_fc'),_id=id))
elif self.formstyle == 'ul':
table = UL()
for id,a,b,c in xfields:
div_b = self.field_parent[id] = DIV(b,_class='w2p_fw')
table.append(LI(DIV(a,_class='w2p_fl'),
div_b,
DIV(c,_class='w2p_fc'),_id=id))
elif callable(self.formstyle):
table = TABLE()
for id,a,b,c in xfields:
raw_b = self.field_parent[id] = b
newrows = self.formstyle(id,a,raw_b,c)
if type(newrows).__name__ != "tuple":
newrows = [newrows]
for newrow in newrows:
table.append(newrow)
if isinstance(self.formstyle, basestring):
if self.formstyle in self.formstyles:
self.formstyle = self.formstyles[self.formstyle]
else:
raise RuntimeError, 'formstyle not found'
if callable(self.formstyle):
# backward compatibility, 4 argument function is the old style
if len(inspect.getargspec(self.formstyle)[0]) == 4:
table = TABLE()
for id,a,b,c in xfields:
raw_b = self.field_parent[id] = b
newrows = self.formstyle(id,a,raw_b,c)
if type(newrows).__name__ != "tuple":
newrows = [newrows]
for newrow in newrows:
table.append(newrow)
else:
for id,a,b,c in xfields:
self.field_parent[id] = b
table = self.formstyle(self, xfields)
else:
raise RuntimeError, 'formstyle not supported'
return table
def accepts(
self,
request_vars,