form: add effective use of <label> in more places
This commit is contained in:
parent
a7b4f461b6
commit
9a3a679048
|
@ -84,6 +84,16 @@ def is_prefilled(self):
|
|||
else:
|
||||
return False
|
||||
|
||||
def render_title(self, title):
|
||||
if title:
|
||||
if self.required:
|
||||
title += htmltext('<span class="required">*</span>')
|
||||
return htmltext('<div class="title"><label for="form_%s">%s</label></div>') % (
|
||||
self.name, title)
|
||||
else:
|
||||
return ''
|
||||
|
||||
|
||||
def render(self):
|
||||
# quixote/form/widget.py, Widget::render
|
||||
r = TemplateIO(html=True)
|
||||
|
@ -121,8 +131,65 @@ Widget.cleanup = None
|
|||
Widget.set_message = set_message
|
||||
Widget.get_message = get_message
|
||||
Widget.render_message = render_message
|
||||
Widget.render_title = render_title
|
||||
Widget.is_prefilled = is_prefilled
|
||||
|
||||
def string_render_content(self):
|
||||
attrs = {'id': 'form_' + self.name}
|
||||
if self.attrs:
|
||||
attrs.update(self.attrs)
|
||||
return htmltag("input", xml_end=True, type=self.HTML_TYPE, name=self.name,
|
||||
value=self.value, **attrs)
|
||||
StringWidget.render_content = string_render_content
|
||||
|
||||
|
||||
def file_render_content(self):
|
||||
attrs = {'id': 'form_' + self.name.split('$')[0]}
|
||||
if self.attrs:
|
||||
attrs.update(self.attrs)
|
||||
return htmltag("input", xml_end=True, type=self.HTML_TYPE, name=self.name,
|
||||
value=self.value, **attrs)
|
||||
FileWidget.render_content = file_render_content
|
||||
|
||||
|
||||
def text_render_content(self):
|
||||
attrs = {'id': 'form_' + self.name}
|
||||
if self.attrs:
|
||||
attrs.update(self.attrs)
|
||||
return (htmltag("textarea", name=self.name, **attrs) +
|
||||
htmlescape(self.value or "") + htmltext("</textarea>"))
|
||||
TextWidget.render_content = text_render_content
|
||||
|
||||
|
||||
def checkbox_render_content(self):
|
||||
attrs = {'id': 'form_' + self.name}
|
||||
if self.attrs:
|
||||
attrs.update(self.attrs)
|
||||
return htmltag("input", xml_end=True, type="checkbox", name=self.name,
|
||||
value="yes", checked=self.value and "checked" or None,
|
||||
**attrs)
|
||||
CheckboxWidget.render_content = checkbox_render_content
|
||||
|
||||
|
||||
def select_render_content(self):
|
||||
attrs = {'id': 'form_' + self.name}
|
||||
if self.attrs:
|
||||
attrs.update(self.attrs)
|
||||
tags = [htmltag("select", name=self.name, **attrs)]
|
||||
for object, description, key in self.options:
|
||||
if self.is_selected(object):
|
||||
selected = 'selected'
|
||||
else:
|
||||
selected = None
|
||||
if description is None:
|
||||
description = ""
|
||||
r = htmltag("option", value=key, selected=selected)
|
||||
tags.append(r + htmlescape(description) + htmltext('</option>'))
|
||||
tags.append(htmltext("</select>"))
|
||||
return htmltext("\n").join(tags)
|
||||
SelectWidget.render_content = select_render_content
|
||||
|
||||
|
||||
class Form(QuixoteForm):
|
||||
TOKEN_NOTICE = N_(
|
||||
"The form you have submitted is invalid. Most "
|
||||
|
@ -683,7 +750,7 @@ $.dpText = {
|
|||
prepare_javascript = classmethod(prepare_javascript)
|
||||
|
||||
def render_content(self):
|
||||
self.attrs['id'] = 'id_%s' % self.name
|
||||
self.attrs['id'] = 'form_%s' % self.name
|
||||
self.attrs['class'] = 'date-pick'
|
||||
|
||||
if self.attrs.get('readonly') or not self.jquery:
|
||||
|
@ -1167,9 +1234,12 @@ class SingleSelectHintWidget(SingleSelectWidget):
|
|||
return (self.hint and len(self.hint) > 80)
|
||||
|
||||
def render_content(self):
|
||||
attrs = {'id': 'form_' + self.name}
|
||||
if self.attrs:
|
||||
attrs.update(self.attrs)
|
||||
if self.separate_hint():
|
||||
return SingleSelectWidget.render_content(self)
|
||||
tags = [htmltag('select', name=self.name, **self.attrs)]
|
||||
tags = [htmltag('select', name=self.name, **attrs)]
|
||||
if self.hint:
|
||||
r = htmltag('option', value='', selected=None)
|
||||
tags.append(r + htmlescape(self.hint) + htmltext('</option>'))
|
||||
|
|
Loading…
Reference in New Issue