1 | # Copyright (c) 2003-2007 Ralph Meijer |
---|
2 | # See LICENSE for details. |
---|
3 | |
---|
4 | from twisted.words.xish import domish |
---|
5 | |
---|
6 | NS_X_DATA = 'jabber:x:data' |
---|
7 | |
---|
8 | class Field(domish.Element): |
---|
9 | def __init__(self, type='text-single', var=None, label=None, |
---|
10 | value=None, values=[], options={}): |
---|
11 | domish.Element.__init__(self, (NS_X_DATA, 'field')) |
---|
12 | self['type'] = type |
---|
13 | if var is not None: |
---|
14 | self['var'] = var |
---|
15 | if label is not None: |
---|
16 | self['label'] = label |
---|
17 | if value is not None: |
---|
18 | self.set_value(value) |
---|
19 | else: |
---|
20 | self.set_values(values) |
---|
21 | if type in ['list-single', 'list-multi']: |
---|
22 | for value, label in options.iteritems(): |
---|
23 | self.addChild(Option(value, label)) |
---|
24 | |
---|
25 | def set_value(self, value): |
---|
26 | if self['type'] == 'boolean': |
---|
27 | value = str(int(bool(value))) |
---|
28 | else: |
---|
29 | value = str(value) |
---|
30 | |
---|
31 | value_element = self.value or self.addElement('value') |
---|
32 | value_element.children = [] |
---|
33 | value_element.addContent(value) |
---|
34 | |
---|
35 | def set_values(self, values): |
---|
36 | for value in values: |
---|
37 | value = str(value) |
---|
38 | self.addElement('value', content=value) |
---|
39 | |
---|
40 | class Option(domish.Element): |
---|
41 | def __init__(self, value, label=None): |
---|
42 | domish.Element.__init__(self, (NS_X_DATA, 'option')) |
---|
43 | if label is not None: |
---|
44 | self['label'] = label |
---|
45 | self.addElement('value', content=value) |
---|
46 | |
---|
47 | class Form(domish.Element): |
---|
48 | def __init__(self, type, form_type): |
---|
49 | domish.Element.__init__(self, (NS_X_DATA, 'x'), |
---|
50 | attribs={'type': type}) |
---|
51 | self.add_field(type='hidden', var='FORM_TYPE', values=[form_type]) |
---|
52 | |
---|
53 | def add_field(self, type='text-single', var=None, label=None, |
---|
54 | value=None, values=[], options={}): |
---|
55 | self.addChild(Field(type, var, label, value, values, options)) |
---|