diff --git a/mo/web/table.py b/mo/web/table.py
index 50a2b0d220af9a1920ef5d6ec2985b18e616bc6a..fc26e2b2c9019e2d19dd4b1a59333eec87f1b02c 100644
--- a/mo/web/table.py
+++ b/mo/web/table.py
@@ -71,22 +71,35 @@ class CellLink(Cell):
return a + '>' + escape(self.text) + '</a>' + str(self.html_suffix)
-class CellCheckbox(Cell):
+class CellInput(Cell):
name: str
value: str
- checked: bool
+ type: str
+ attrs: Dict[str, Optional[str]]
- def __init__(self, name: str, value: str, checked: bool = False):
+ def __init__(self, name: str, value: str, type: str = "text", attrs: Dict[str, Optional[str]] = {}):
Cell.__init__(self, "")
self.name = name
self.value = value
- self.checked = checked
+ self.type = type
+ self.attrs = attrs
def to_html(self) -> str:
- ch = f'<td><input type="checkbox" name="{self.name}" value="{self.value}"'
- if self.checked:
- ch += ' checked'
- return ch + '>'
+ out = f'<td><input type="{self.type}" name="{self.name}" value="{self.value}"'
+ for (attr, value) in self.attrs.items():
+ out += f' {attr}'
+ if value is not None:
+ out += f'="{value}"'
+ return out + '>'
+
+
+class CellCheckbox(CellInput):
+ def __init__(self, name: str, value: str, checked: bool = False):
+ attrs = {}
+ if checked:
+ attrs['checked'] = None
+ CellInput.__init__(self, name, value, "checkbox", attrs)
+
class CellMarkup(Cell):
text: str