source: wokkel/data_form.py @ 1:677f7d3cca75

Last change on this file since 1:677f7d3cca75 was 1:677f7d3cca75, checked in by Ralph Meijer <ralphm@…>, 14 years ago

Initial, heavily worked around code drop from the idavoll and mimir projects.

File size: 1.9 KB
Line 
1# Copyright (c) 2003-2007 Ralph Meijer
2# See LICENSE for details.
3
4from twisted.words.xish import domish
5
6NS_X_DATA = 'jabber:x:data'
7
8class 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
40class 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
47class 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))
Note: See TracBrowser for help on using the repository browser.