Index: roundup/cgi/templating.py =================================================================== RCS file: /cvsroot/roundup/roundup/roundup/cgi/templating.py,v retrieving revision 1.112 diff -u -r1.112 templating.py --- roundup/cgi/templating.py 24 Oct 2003 09:32:19 -0000 1.112 +++ roundup/cgi/templating.py 2 Nov 2003 16:44:20 -0000 @@ -1,4 +1,4 @@ -import sys, cgi, urllib, os, re, os.path, time, errno, mimetypes +import sys, cgi, urllib, os, re, os.path, time, errno, mimetypes, string from roundup import hyperdb, date, rcsv from roundup.i18n import _ @@ -22,6 +22,14 @@ from roundup.cgi.TAL.TALInterpreter import TALInterpreter from roundup.cgi import ZTUtils +def input_html4(**attrs): + """Generate an 'input' (html4) element with given attributes""" + return ''%string.join(map(lambda item:'%s="%s"'%item, attrs.items())) + +def input_xhtml(**attrs): + """Generate an 'input' (xhtml) element with given attributes""" + return ''%string.join(map(lambda item:'%s="%s"'%item, attrs.items())) + class NoTemplate(Exception): pass @@ -293,6 +301,14 @@ self._klass = self._db.getclass(self.classname) self._props = self._klass.getprops() + html_version = 'html4' + if hasattr(self._client.instance.config, 'HTML_VERSION'): + html_version = self._client.instance.config.HTML_VERSION + if html_version == 'xhtml': + self.input = input_xhtml + else: + self.input = input_html4 + def __repr__(self): return ''%(id(self), self.classname) @@ -476,8 +492,8 @@ def submit(self, label="Submit New Entry"): ''' Generate a submit button (and action hidden element) ''' - return ' \n'\ - ' '%label + return ' ' + self.input(type="hidden",name=":action",value="new") + '\n' +\ + ' ' + self.input(type="submit",name="submit",value=label) def history(self): return 'New node - no history' @@ -554,8 +570,8 @@ def submit(self, label="Submit Changes"): ''' Generate a submit button (and action hidden element) ''' - return ' \n'\ - ' '%label + return ' ' + self.input(type="hidden",name=":action",value="edit") + '\n' +\ + ' ' + self.input(type="submit",name="submit",value=label) def journal(self, direction='descending'): ''' Return a list of HTMLJournalEntry instances. @@ -842,6 +858,15 @@ self._formname = '%s%s@%s'%(classname, nodeid, name) else: self._formname = name + + html_version = 'html4' + if hasattr(self._client.instance.config, 'HTML_VERSION'): + html_version = self._client.instance.config.HTML_VERSION + if html_version == 'xhtml': + self.input = input_xhtml + else: + self.input = input_html4 + def __repr__(self): return ''%(id(self), self._formname, self._prop, self._value) @@ -916,7 +941,7 @@ else: value = cgi.escape(str(self._value)) value = '"'.join(value.split('"')) - return ''%(self._formname, value, size) + return self.input(name=self._formname,value=value,size=size) def multiline(self, escape=0, rows=5, cols=40): ''' Render a multiline form edit field for the property @@ -956,15 +981,14 @@ def field(self, size = 30): ''' Render a form edit field for the property. ''' - return ''%(self._formname, size) + return self.input(type="password",name=self._formname,size=size) def confirm(self, size = 30): ''' Render a second form edit field for the property, used for confirmation that the user typed the password correctly. Generates a field with name ":confirm:name". ''' - return ''%( - self._formname, size) + return self.input(type="password",name=":confirm:%s"%self._formname,size=size) class NumberHTMLProperty(HTMLProperty): def plain(self): @@ -980,7 +1004,7 @@ else: value = cgi.escape(str(self._value)) value = '"'.join(value.split('"')) - return ''%(self._formname, value, size) + return self.input(name=self._formname,value=value,size=size) def __int__(self): ''' Return an int of me @@ -1005,14 +1029,16 @@ ''' Render a form edit field for the property ''' checked = self._value and "checked" or "" - s = 'Yes'%(self._formname, - checked) - if checked: - checked = "" - else: - checked = "checked" - s += 'No'%(self._formname, - checked) + if self._value: + s = self.input(type="radio",name=self._formname,value="yes",checked="checked") + s += 'Yes' + s +=self.input(type="radio",name=self._formname,value="no") + s += 'No' + else: + s = self.input(type="radio",name=self._formname,value="yes") + s += 'Yes' + s +=self.input(type="radio",name=self._formname,value="no",checked="checked") + s += 'No' return s class DateHTMLProperty(HTMLProperty): @@ -1040,7 +1066,7 @@ else: value = cgi.escape(str(self._value.local(self._db.getUserTimezone()))) value = '"'.join(value.split('"')) - return ''%(self._formname, value, size) + return self.input(name=self._formname,value=value,size=size) def reldate(self, pretty=1): ''' Render the interval between the date and now. @@ -1097,7 +1123,7 @@ else: value = cgi.escape(str(self._value)) value = '"'.join(value.split('"')) - return ''%(self._formname, value, size) + return self.input(name=self._formname,value=value,size=size) class LinkHTMLProperty(HTMLProperty): ''' Link HTMLProperty @@ -1153,7 +1179,7 @@ l = [''%(self._formname, size, value) + return self.input(name=self._formname,size=size,value=value) def menu(self, size=None, height=None, showid=0, additional=[], **conditions): @@ -1347,7 +1373,7 @@ # figure if this option is selected s = '' if optionid in value or option in value: - s = 'selected ' + s = 'selected="selected" ' # figure the label if showid: @@ -1453,6 +1479,14 @@ # the special char to use for special vars self.special_char = '@' + html_version = 'html4' + if hasattr(self.client.instance.config, 'HTML_VERSION'): + html_version = self.client.instance.config.HTML_VERSION + if html_version == 'xhtml': + self.input = input_xhtml + else: + self.input = input_html4 + self._post_init() def _post_init(self): @@ -1605,7 +1639,7 @@ ''' return the current index args as form elements ''' l = [] sc = self.special_char - s = '' + s = self.input(type="hidden",name="%s",value="%s") if columns and self.columns: l.append(s%(sc+'columns', ','.join(self.columns))) if sort and self.sort[1] is not None: