summaryrefslogtreecommitdiff
path: root/Mailman/htmlformat.py
diff options
context:
space:
mode:
Diffstat (limited to 'Mailman/htmlformat.py')
-rw-r--r--Mailman/htmlformat.py62
1 files changed, 46 insertions, 16 deletions
diff --git a/Mailman/htmlformat.py b/Mailman/htmlformat.py
index e732c1a05..65b72df27 100644
--- a/Mailman/htmlformat.py
+++ b/Mailman/htmlformat.py
@@ -473,8 +473,6 @@ class CheckBox(InputObj):
def __init__(self, name, value, checked=0, **kws):
apply(InputObj.__init__, (self, name, "CHECKBOX", value, checked), kws)
-
-
class VerticalSpacer:
def __init__(self, size=10):
self.size = size
@@ -482,29 +480,30 @@ class VerticalSpacer:
output = '<spacer type="vertical" height="%d">' % self.size
return output
-class RadioButtonArray:
- def __init__(self, name, button_names, checked=None, horizontal=1,
- values=None):
- self.button_names = button_names
- self.horizontal = horizontal
+class WidgetArray:
+ Widget = None
+
+ def __init__(self, name, button_names, checked, horizontal, values):
self.name = name
+ self.button_names = button_names
self.checked = checked
self.horizontal = horizontal
- if values is not None:
- assert len(values) == len(button_names)
- self.values = values
- else:
- self.values = range(len(button_names))
+ self.values = values
+ assert len(values) == len(button_names)
+ # Don't assert `checked' because for RadioButtons it is a scalar while
+ # for CheckedBoxes it is a vector. Subclasses will assert length.
+
+ def ischecked(self, i):
+ raise NotImplemented
def Format(self, indent=0):
t = Table(cellspacing=5)
items = []
- for i, name, value in map(None,
- range(len(self.button_names)),
+ for i, name, value in zip(range(len(self.button_names)),
self.button_names,
self.values):
- ischecked = (self.checked == i)
- item = RadioButton(self.name, value, ischecked).Format() + name
+ ischecked = (self.ischecked(i))
+ item = self.Widget(self.name, value, ischecked).Format() + name
items.append(item)
if not self.horizontal:
t.AddRow(items)
@@ -513,6 +512,37 @@ class RadioButtonArray:
t.AddRow(items)
return t.Format(indent)
+class RadioButtonArray(WidgetArray):
+ Widget = RadioButton
+
+ def __init__(self, name, button_names, checked=None, horizontal=1,
+ values=None):
+ if values is None:
+ values = range(len(button_names))
+ # BAW: assert checked is a scalar...
+ WidgetArray.__init__(self, name, button_names, checked, horizontal,
+ values)
+
+ def ischecked(self, i):
+ return self.checked == i
+
+class CheckBoxArray(WidgetArray):
+ Widget = CheckBox
+
+ def __init__(self, name, button_names, checked=None, horizontal=0,
+ values=None):
+ if checked is None:
+ checked = [0] * len(button_names)
+ else:
+ assert len(checked) == len(button_names)
+ if values is None:
+ values = range(len(button_names))
+ WidgetArray.__init__(self, name, button_names, checked, horizontal,
+ values)
+
+ def ischecked(self, i):
+ return self.checked[i]
+
class UnorderedList(Container):
def Format(self, indent=0):
spaces = ' ' * indent