Mercurial > p > roundup > code
diff roundup/htmltemplate.py @ 872:bd6211d39328
Saving, running & editing queries.
| author | Gordon B. McMillan <gmcm@users.sourceforge.net> |
|---|---|
| date | Wed, 17 Jul 2002 12:39:11 +0000 |
| parents | 255bdcf39e8c |
| children | 8828f0f2e825 |
line wrap: on
line diff
--- a/roundup/htmltemplate.py Mon Jul 15 22:05:17 2002 +0000 +++ b/roundup/htmltemplate.py Wed Jul 17 12:39:11 2002 +0000 @@ -15,7 +15,7 @@ # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. # -# $Id: htmltemplate.py,v 1.98 2002-07-10 00:17:46 richard Exp $ +# $Id: htmltemplate.py,v 1.99 2002-07-17 12:39:10 gmcm Exp $ __doc__ = """ Template engine. @@ -182,7 +182,6 @@ ''' if not self.nodeid and self.form is None and self.filterspec is None: return _('[Field: not called from item]') - if size is None: size = 30 @@ -190,7 +189,6 @@ # get the value value = self.determine_value(property) - # now display if (isinstance(propclass, hyperdb.String) or isinstance(propclass, hyperdb.Date) or @@ -796,6 +794,32 @@ value = cgi.escape(value) return value + def do_filterspec(self, classprop, urlprop): + cl = self.db.getclass(self.classname) + qs = cl.get(self.nodeid, urlprop) + classname = cl.get(self.nodeid, classprop) + all_columns = self.db.getclass(classname).getprops().keys() + filterspec = {} + query = cgi.parse_qs(qs) + for k,v in query.items(): + query[k] = v[0].split(',') + pagesize = query.get(':pagesize',['25'])[0] + for k,v in query.items(): + if k[0] != ':': + filterspec[k] = v + ixtmplt = IndexTemplate(self.client, self.templates, classname) + qform = '<form onSubmit="return submit_once()" action="%s%s">\n'%(self.classname,self.nodeid) + qform += ixtmplt.filter_form(query.get('search_text', ''), + query.get(':filter', []), + query.get(':columns', []), + query.get(':group', []), + all_columns, + query.get(':sort',[]), + filterspec, + pagesize) + ixtmplt.clear() + return qform + '</table>\n' + # # INDEX TEMPLATES @@ -965,7 +989,7 @@ l.append(value) w('<tr class="section-bar">' '<td align=middle colspan=%s>' - '<strong>%s</strong></td></tr>'%( + '<strong>%s</strong></td></tr>\n'%( len(columns), ', '.join(l))) old_group = this_group @@ -977,7 +1001,7 @@ self.node_matches(matches[nodeid], len(columns)) self.nodeid = None - w('</table>') + w('</table>\n') # the previous and next links if nodeids: baseurl = self.buildurl(filterspec, search_text, filter, columns, sort, group, pagesize) @@ -991,7 +1015,7 @@ else: nexturl = "" if prevurl or nexturl: - w('<table width="100%%"><tr><td width="50%%" align="center">%s</td><td width="50%%" align="center">%s</td></tr></table>' % (prevurl, nexturl)) + w('<table width="100%%"><tr><td width="50%%" align="center">%s</td><td width="50%%" align="center">%s</td></tr></table>\n' % (prevurl, nexturl)) # display the filter section if (show_display_form and hasattr(self.instance, 'FILTER_POSITION') and @@ -1018,7 +1042,7 @@ message_links.append('<a href="%(msgpath)s">%(lab)s</a>' %locals()) w(_('<tr class="row-hilite"><td colspan="%s">' - ' Matched messages: %s</td></tr>')%( + ' Matched messages: %s</td></tr>\n')%( colspan, ', '.join(message_links))) if match.has_key('files'): @@ -1028,12 +1052,11 @@ file_links.append('<a href="%(filepath)s">%(filename)s</a>' %locals()) w(_('<tr class="row-hilite"><td colspan="%s">' - ' Matched files: %s</td></tr>')%( + ' Matched files: %s</td></tr>\n')%( colspan, ', '.join(file_links))) - - def filter_section(self, search_text, filter, columns, group, all_columns, sort, filterspec, - pagesize, startwith): + def filter_form(self, search_text, filter, columns, group, all_columns, sort, filterspec, + pagesize): sortspec = {} for i in range(len(sort)): @@ -1045,57 +1068,57 @@ sortspec[colnm] = '%d%s' % (i+1, mod) startwith = 0 - w = self.client.write + rslt = [] + w = rslt.append # display the filter section - w( '<br>\n') - w( '<table border=0 cellspacing=0 cellpadding=0>\n') - w( '<tr class="list-header">\n') - w(_(' <th align="left" colspan="7">Filter specification...</th>\n')) - w( '</tr>\n') + w( '<br>') + w( '<table border=0 cellspacing=0 cellpadding=1>') + w( '<tr class="list-header">') + w(_(' <th align="left" colspan="7">Filter specification...</th>')) + w( '</tr>') # see if we have any indexed properties if self.classname in self.db.config.HEADER_SEARCH_LINKS: #if self.properties.has_key('messages') or self.properties.has_key('files'): - w( '<tr class="location-bar">\n') - w( ' <td align="right" class="form-label"><b>Search Terms</b></td>\n') - w( ' <td> </td>\n') - w( ' <td colspan=5 class="form-text"><input type="text" name="search_text" value="%s" size="50"></td>\n' % search_text) - w( '</tr>\n') - w( '<tr class="location-bar">\n') - w( ' <th align="center" width="20%"> </th>\n') - w(_(' <th align="center" width="10%">Show</th>\n')) - w(_(' <th align="center" width="10%">Group</th>\n')) - w(_(' <th align="center" width="10%">Sort</th>\n')) - w(_(' <th colspan="3" align="center">Condition</th>\n')) - w( '</tr>\n') + w( '<tr class="location-bar">') + w( ' <td align="right" class="form-label"><b>Search Terms</b></td>') + w( ' <td colspan=6 class="form-text"> <input type="text" name="search_text" value="%s" size="50"></td>' % search_text) + w( '</tr>') + w( '<tr class="location-bar">') + w( ' <th align="center" width="20%"> </th>') + w(_(' <th align="center" width="10%">Show</th>')) + w(_(' <th align="center" width="10%">Group</th>')) + w(_(' <th align="center" width="10%">Sort</th>')) + w(_(' <th colspan="3" align="center">Condition</th>')) + w( '</tr>') for nm in all_columns: propdescr = self.properties.get(nm, None) if not propdescr: print "hey sysadmin - %s is not a property of %r" % (nm, self.classname) continue - w( '<tr class="location-bar">\n') - w(_(' <td align="right" class="form-label"><b>%s</b></td>\n' % nm.capitalize())) + w( '<tr class="location-bar">') + w(_(' <td align="right" class="form-label"><b>%s</b></td>' % nm.capitalize())) # show column - can't show multilinks if isinstance(propdescr, hyperdb.Multilink): - w(' <td></td>\n') + w(' <td></td>') else: checked = columns and nm in columns or 0 checked = ('', 'checked')[checked] - w(' <td align="center" class="form-text"><input type="checkbox" name=":columns" value="%s" %s></td>\n' % (nm, checked) ) + w(' <td align="center" class="form-text"><input type="checkbox" name=":columns" value="%s" %s></td>' % (nm, checked) ) # can only group on Link if isinstance(propdescr, hyperdb.Link): checked = group and nm in group or 0 checked = ('', 'checked')[checked] - w(' <td align="center" class="form-text"><input type="checkbox" name=":group" value="%s" %s></td>\n' % (nm, checked) ) + w(' <td align="center" class="form-text"><input type="checkbox" name=":group" value="%s" %s></td>' % (nm, checked) ) else: - w(' <td></td>\n') + w(' <td></td>') # sort - no sort on Multilinks if isinstance(propdescr, hyperdb.Multilink): - w('<td></td>\n') + w('<td></td>') else: val = sortspec.get(nm, '') - w('<td align="center" class="form-text"><input type="text" name=":%s_ss" size="3" value="%s"></td>\n' % (nm,val)) + w('<td align="center" class="form-text"><input type="text" name=":%s_ss" size="3" value="%s"></td>' % (nm,val)) # condition val = '' if isinstance(propdescr, hyperdb.Link): @@ -1113,27 +1136,55 @@ xtra = "" val = filterspec.get(nm, '') else: - w('<td></td><td></td><td></td></tr>\n') + w('<td></td><td></td><td></td></tr>') continue checked = filter and nm in filter or 0 checked = ('', 'checked')[checked] - w( ' <td class="form-text"><input type="checkbox" name=":filter" value="%s" %s></td>\n' % (nm, checked)) - w(_(' <td class="form-label" nowrap>%s</td><td class="form-text" nowrap><input type="text" name=":%s_fs" value="%s" size=50>%s</td>\n' % (op, nm, val, xtra))) - w( '</tr>\n') - w('<tr class="location-bar">\n') - w(' <td colspan=7><hr></td>\n') - w('</tr>\n') - w('<tr class="location-bar">\n') - w(_(' <td align="right" class="form-label">Pagesize</td>\n')) - w(' <td colspan=2 align="center" class="form-text"><input type="text" name=":pagesize" size="3" value="%s"></td>\n' % pagesize) - w(' <td colspan=4></td>\n') - w('</tr>\n') - w('<tr class="location-bar">\n') - w(_(' <td align="right" class="form-label">Start With</td>\n')) - w(' <td colspan=2 align="center" class="form-text"><input type="text" name=":startwith" size="3" value="%s"></td>\n' % startwith) - w(' <td colspan=3 align="center" valign="center"><input type="submit" name="Query" value="Redisplay"></td>\n') - w(' <td></td>\n') - w('</tr>\n') + w( ' <td class="form-text"><input type="checkbox" name=":filter" value="%s" %s></td>' % (nm, checked)) + w(_(' <td class="form-label" nowrap>%s</td><td class="form-text" nowrap><input type="text" name=":%s_fs" value="%s" size=50>%s</td>' % (op, nm, val, xtra))) + w( '</tr>') + w('<tr class="location-bar">') + w(' <td colspan=7><hr></td>') + w('</tr>') + w('<tr class="location-bar">') + w(_(' <td align="right" class="form-label">Pagesize</td>')) + w(' <td colspan=2 align="center" class="form-text"><input type="text" name=":pagesize" size="3" value="%s"></td>' % pagesize) + w(' <td colspan=4></td>') + w('</tr>') + w('<tr class="location-bar">') + w(_(' <td align="right" class="form-label">Start With</td>')) + w(' <td colspan=2 align="center" class="form-text"><input type="text" name=":startwith" size="3" value="%s"></td>' % startwith) + w(' <td colspan=3></td>') + w(' <td></td>') + w('</tr>') + + return '\n'.join(rslt) + + def filter_section(self, search_text, filter, columns, group, all_columns, sort, filterspec, + pagesize, startwith): + + w = self.client.write + w(self.filter_form(search_text, filter, columns, group, all_columns, + sort, filterspec, pagesize)) + w(' <tr class="location-bar">\n') + w(' <td colspan=7><hr></td>\n') + w(' </tr>\n') + w(' <tr class="location-bar">\n') + w(' <td> </td>\n') + w(' <td colspan=6><input type="submit" name="Query" value="Redisplay"></td>\n') + w(' </tr>\n') + if self.db.getclass('user').getprops().has_key('queries'): + w(' <tr class="location-bar">\n') + w(' <td colspan=7><hr></td>\n') + w(' </tr>\n') + w(' <tr class="location-bar">\n') + w(' <td align=right class="form-label">Name</td>\n') + w(' <td colspan=6><input type="text" name=":name" value=""></td>\n') + w(' </tr>\n') + w(' <tr class="location-bar">\n') + w(' <td> </td><input type="hidden" name=":classname" value="%s">\n' % self.classname) + w(' <td colspan=6><input type="submit" name="Query" value="Save"></td>\n') + w(' </tr>\n') w('</table>\n') def sortby(self, sort_name, filterspec, columns, filter, group, sort, pagesize, startwith): @@ -1229,7 +1280,7 @@ def render(self, nodeid): self.nodeid = nodeid - + if (self.properties.has_key('type') and self.properties.has_key('content')): pass @@ -1290,6 +1341,9 @@ # # $Log: not supported by cvs2svn $ +# Revision 1.98 2002/07/10 00:17:46 richard +# . added sorting of checklist HTML display +# # Revision 1.97 2002/07/09 05:20:09 richard # . added email display function - mangles email addrs so they're not so easily # scraped from the web
