grid buttons_placement and links_placement , thanks Niphlod
This commit is contained in:
@@ -1 +1 @@
|
|||||||
Version 2.2.1 (2012-11-06 09:46:56) stable
|
Version 2.2.1 (2012-11-06 10:36:39) stable
|
||||||
|
|||||||
+59
-24
@@ -1675,6 +1675,8 @@ class SQLFORM(FORM):
|
|||||||
createargs={},
|
createargs={},
|
||||||
editargs={},
|
editargs={},
|
||||||
viewargs={},
|
viewargs={},
|
||||||
|
buttons_placement = 'right',
|
||||||
|
links_placement = 'right'
|
||||||
):
|
):
|
||||||
|
|
||||||
# jQuery UI ThemeRoller classes (empty if ui is disabled)
|
# jQuery UI ThemeRoller classes (empty if ui is disabled)
|
||||||
@@ -1824,6 +1826,14 @@ class SQLFORM(FORM):
|
|||||||
buttons.append(link(record))
|
buttons.append(link(record))
|
||||||
return buttons
|
return buttons
|
||||||
|
|
||||||
|
def linsert(lst, i, x):
|
||||||
|
"""
|
||||||
|
a = [1,2]
|
||||||
|
linsert(a, 1, [0,3])
|
||||||
|
a = [1, 0, 3, 2]
|
||||||
|
"""
|
||||||
|
lst[i:i] = x
|
||||||
|
|
||||||
formfooter = DIV(
|
formfooter = DIV(
|
||||||
_class='form_footer row_buttons %(header)s %(cornerbottom)s' % ui)
|
_class='form_footer row_buttons %(header)s %(cornerbottom)s' % ui)
|
||||||
|
|
||||||
@@ -1903,7 +1913,13 @@ class SQLFORM(FORM):
|
|||||||
(ExporterTSV, 'TSV (Excel compatible, hidden cols)'),
|
(ExporterTSV, 'TSV (Excel compatible, hidden cols)'),
|
||||||
tsv=(ExporterTSV, 'TSV (Excel compatible)'))
|
tsv=(ExporterTSV, 'TSV (Excel compatible)'))
|
||||||
if not exportclasses is None:
|
if not exportclasses is None:
|
||||||
|
"""
|
||||||
|
allow to set exportclasses=dict(csv=False) to disable the csv format
|
||||||
|
"""
|
||||||
exportManager.update(exportclasses)
|
exportManager.update(exportclasses)
|
||||||
|
for k,v in exportclasses.items():
|
||||||
|
if v is False:
|
||||||
|
del exportManager[k]
|
||||||
|
|
||||||
export_type = request.vars._export_type
|
export_type = request.vars._export_type
|
||||||
if export_type:
|
if export_type:
|
||||||
@@ -1920,7 +1936,8 @@ class SQLFORM(FORM):
|
|||||||
orderby = ~orderby
|
orderby = ~orderby
|
||||||
|
|
||||||
table_fields = [f for f in fields if f._tablename in tablenames]
|
table_fields = [f for f in fields if f._tablename in tablenames]
|
||||||
if export_type in ('csv_with_hidden_cols', 'tsv_with_hidden_cols'):
|
if (export_type in ('csv_with_hidden_cols', 'tsv_with_hidden_cols')
|
||||||
|
and export_type in exportManager):
|
||||||
if request.vars.keywords:
|
if request.vars.keywords:
|
||||||
try:
|
try:
|
||||||
dbset = dbset(SQLFORM.build_query(
|
dbset = dbset(SQLFORM.build_query(
|
||||||
@@ -2017,9 +2034,9 @@ class SQLFORM(FORM):
|
|||||||
else:
|
else:
|
||||||
orderby = (order[:1] == '~' and ~sort_field) or sort_field
|
orderby = (order[:1] == '~' and ~sort_field) or sort_field
|
||||||
|
|
||||||
head = TR(_class=ui.get('header'))
|
headcols = []
|
||||||
if selectable:
|
if selectable:
|
||||||
head.append(TH(_class=ui.get('default')))
|
headcols.append(TH(_class=ui.get('default')))
|
||||||
for field in fields:
|
for field in fields:
|
||||||
if columns and not str(field) in columns:
|
if columns and not str(field) in columns:
|
||||||
continue
|
continue
|
||||||
@@ -2037,19 +2054,29 @@ class SQLFORM(FORM):
|
|||||||
header = A(header, marker, _href=url(vars=dict(
|
header = A(header, marker, _href=url(vars=dict(
|
||||||
keywords=request.vars.keywords or '',
|
keywords=request.vars.keywords or '',
|
||||||
order=key)), _class=trap_class())
|
order=key)), _class=trap_class())
|
||||||
head.append(TH(header, _class=ui.get('default')))
|
headcols.append(TH(header, _class=ui.get('default')))
|
||||||
|
|
||||||
|
toadd = []
|
||||||
if links and links_in_grid:
|
if links and links_in_grid:
|
||||||
for link in links:
|
for link in links:
|
||||||
if isinstance(link, dict):
|
if isinstance(link, dict):
|
||||||
head.append(TH(link['header'], _class=ui.get('default')))
|
toadd.append(TH(link['header'], _class=ui.get('default')))
|
||||||
|
if links_placement in ['right', 'both']:
|
||||||
|
headcols.extend(toadd)
|
||||||
|
if links_placement in ['left', 'both']:
|
||||||
|
linsert(headcols, 0, toadd)
|
||||||
|
|
||||||
# Include extra column for buttons if needed.
|
# Include extra column for buttons if needed.
|
||||||
include_buttons_column = (details or editable or deletable or
|
include_buttons_column = (details or editable or deletable or
|
||||||
(links and links_in_grid and
|
(links and links_in_grid and
|
||||||
not all([isinstance(link, dict) for link in links])))
|
not all([isinstance(link, dict) for link in links])))
|
||||||
if include_buttons_column:
|
if include_buttons_column:
|
||||||
head.append(TH(_class=ui.get('default')))
|
if buttons_placement in ['right', 'both']:
|
||||||
|
headcols.append(TH(_class=ui.get('default','')))
|
||||||
|
if buttons_placement in ['left', 'both']:
|
||||||
|
headcols.insert(0, TH(_class=ui.get('default','')))
|
||||||
|
|
||||||
|
head = TR(*headcols, _class=ui.get('header'))
|
||||||
|
|
||||||
paginator = UL()
|
paginator = UL()
|
||||||
if paginate and paginate < nrows:
|
if paginate and paginate < nrows:
|
||||||
@@ -2105,21 +2132,10 @@ class SQLFORM(FORM):
|
|||||||
tbody = TBODY()
|
tbody = TBODY()
|
||||||
numrec = 0
|
numrec = 0
|
||||||
for row in rows:
|
for row in rows:
|
||||||
if numrec % 2 == 0:
|
trcols = []
|
||||||
classtr = 'even'
|
|
||||||
else:
|
|
||||||
classtr = 'odd'
|
|
||||||
numrec += 1
|
|
||||||
id = row[field_id]
|
id = row[field_id]
|
||||||
if id:
|
|
||||||
rid = id
|
|
||||||
if callable(rid): # can this ever be callable?
|
|
||||||
rid = rid(row)
|
|
||||||
tr = TR(_id=rid, _class='%s %s' % (classtr, 'with_id'))
|
|
||||||
else:
|
|
||||||
tr = TR(_class=classtr)
|
|
||||||
if selectable:
|
if selectable:
|
||||||
tr.append(
|
trcols.append(
|
||||||
INPUT(_type="checkbox", _name="records", _value=id,
|
INPUT(_type="checkbox", _name="records", _value=id,
|
||||||
value=request.vars.records))
|
value=request.vars.records))
|
||||||
for field in fields:
|
for field in fields:
|
||||||
@@ -2157,15 +2173,21 @@ class SQLFORM(FORM):
|
|||||||
value = truncate_string(value, maxlength)
|
value = truncate_string(value, maxlength)
|
||||||
elif not isinstance(value, DIV):
|
elif not isinstance(value, DIV):
|
||||||
value = field.formatter(value)
|
value = field.formatter(value)
|
||||||
tr.append(TD(value))
|
trcols.append(TD(value))
|
||||||
row_buttons = TD(_class='row_buttons')
|
row_buttons = TD(_class='row_buttons')
|
||||||
if links and links_in_grid:
|
if links and links_in_grid:
|
||||||
|
toadd = []
|
||||||
for link in links:
|
for link in links:
|
||||||
if isinstance(link, dict):
|
if isinstance(link, dict):
|
||||||
tr.append(TD(link['body'](row)))
|
toadd.append(TD(link['body'](row)))
|
||||||
else:
|
else:
|
||||||
if link(row):
|
if link(row):
|
||||||
row_buttons.append(link(row))
|
row_buttons.append(link(row))
|
||||||
|
if links_placement in ['right', 'both']:
|
||||||
|
trcols.extend(toadd)
|
||||||
|
if links_placement in ['left', 'both']:
|
||||||
|
linsert(trcols, 0, toadd)
|
||||||
|
|
||||||
if include_buttons_column:
|
if include_buttons_column:
|
||||||
if details and (not callable(details) or details(row)):
|
if details and (not callable(details) or details(row)):
|
||||||
row_buttons.append(gridbutton(
|
row_buttons.append(gridbutton(
|
||||||
@@ -2180,7 +2202,22 @@ class SQLFORM(FORM):
|
|||||||
'buttondelete', 'Delete',
|
'buttondelete', 'Delete',
|
||||||
callback=url(args=['delete', tablename, id]),
|
callback=url(args=['delete', tablename, id]),
|
||||||
delete='tr'))
|
delete='tr'))
|
||||||
tr.append(row_buttons)
|
if buttons_placement in ['right', 'both']:
|
||||||
|
trcols.append(row_buttons)
|
||||||
|
if buttons_placement in ['left', 'both']:
|
||||||
|
trcols.insert(0, row_buttons)
|
||||||
|
if numrec % 2 == 0:
|
||||||
|
classtr = 'even'
|
||||||
|
else:
|
||||||
|
classtr = 'odd'
|
||||||
|
numrec += 1
|
||||||
|
if id:
|
||||||
|
rid = id
|
||||||
|
if callable(rid): # can this ever be callable?
|
||||||
|
rid = rid(row)
|
||||||
|
tr = TR(*trcols, _id=rid, _class='%s %s' % (classtr, 'with_id'))
|
||||||
|
else:
|
||||||
|
tr = TR(*trcols, _class=classtr)
|
||||||
tbody.append(tr)
|
tbody.append(tr)
|
||||||
htmltable.append(tbody)
|
htmltable.append(tbody)
|
||||||
htmltable = DIV(htmltable, _style='width:100%;overflow-x:auto')
|
htmltable = DIV(htmltable, _style='width:100%;overflow-x:auto')
|
||||||
@@ -2311,7 +2348,6 @@ class SQLFORM(FORM):
|
|||||||
name = format % record
|
name = format % record
|
||||||
except TypeError:
|
except TypeError:
|
||||||
name = id
|
name = id
|
||||||
nameLink = 'view'
|
|
||||||
breadcrumbs.append(
|
breadcrumbs.append(
|
||||||
LI(A(T(db[referee]._plural),
|
LI(A(T(db[referee]._plural),
|
||||||
_class=trap_class(),
|
_class=trap_class(),
|
||||||
@@ -2740,7 +2776,6 @@ class ExporterTSV(ExportClass):
|
|||||||
writer = csv.writer(out, delimiter='\t')
|
writer = csv.writer(out, delimiter='\t')
|
||||||
import codecs
|
import codecs
|
||||||
final.write(codecs.BOM_UTF16)
|
final.write(codecs.BOM_UTF16)
|
||||||
colnames = [a.split('.') for a in self.rows.colnames]
|
|
||||||
writer.writerow(
|
writer.writerow(
|
||||||
[unicode(col).encode("utf8") for col in self.rows.colnames])
|
[unicode(col).encode("utf8") for col in self.rows.colnames])
|
||||||
data = out.getvalue().decode("utf8")
|
data = out.getvalue().decode("utf8")
|
||||||
|
|||||||
Reference in New Issue
Block a user