r""" HTML form. >>> f = Form(Textbox("x")) >>> f.render() u' \n x \n ' >>> f.fill(x="42") True >>> f.render() u' \n <labe
| 28 | |
| 29 | |
| 30 | class Form: |
| 31 | r""" |
| 32 | HTML form. |
| 33 | |
| 34 | >>> f = Form(Textbox("x")) |
| 35 | >>> f.render() |
| 36 | u'<table>\n <tr><th><label for="x">x</label></th><td><input id="x" name="x" type="text"/></td></tr>\n</table>' |
| 37 | >>> f.fill(x="42") |
| 38 | True |
| 39 | >>> f.render() |
| 40 | u'<table>\n <tr><th><label for="x">x</label></th><td><input id="x" name="x" type="text" value="42"/></td></tr>\n</table>' |
| 41 | """ |
| 42 | |
| 43 | def __init__(self, *inputs, **kw): |
| 44 | self.inputs = inputs |
| 45 | self.valid = True |
| 46 | self.note = None |
| 47 | self.validators = kw.pop("validators", []) |
| 48 | |
| 49 | def __call__(self, x=None): |
| 50 | o = copy.deepcopy(self) |
| 51 | if x: |
| 52 | o.validates(x) |
| 53 | return o |
| 54 | |
| 55 | def render(self): |
| 56 | out = "" |
| 57 | out += self.rendernote(self.note) |
| 58 | out += "<table>\n" |
| 59 | |
| 60 | for i in self.inputs: |
| 61 | html = ( |
| 62 | utils.safeunicode(i.pre) |
| 63 | + i.render() |
| 64 | + self.rendernote(i.note) |
| 65 | + utils.safeunicode(i.post) |
| 66 | ) |
| 67 | if i.is_hidden(): |
| 68 | out += ' <tr style="display: none;"><th></th><td>%s</td></tr>\n' % ( |
| 69 | html |
| 70 | ) |
| 71 | else: |
| 72 | out += f' <tr><th><label for="{net.websafe(i.id)}">{net.websafe(i.description)}</label></th><td>{html}</td></tr>\n' |
| 73 | out += "</table>" |
| 74 | return out |
| 75 | |
| 76 | def render_css(self): |
| 77 | out = [] |
| 78 | out.append(self.rendernote(self.note)) |
| 79 | for i in self.inputs: |
| 80 | if not i.is_hidden(): |
| 81 | out.append( |
| 82 | f'<label for="{net.websafe(i.id)}">{net.websafe(i.description)}</label>' |
| 83 | ) |
| 84 | out.append(i.pre) |
| 85 | out.append(i.render()) |
| 86 | out.append(self.rendernote(i.note)) |
| 87 | out.append(i.post) |
no outgoing calls