Source code for swole.widgets.input
from dominate.tags import input_
from swole.widgets.base import WideWidget, labeled
[docs]@labeled
class Input(WideWidget):
""" Widget to create an input. """
def __init__(self, type="number", placeholder=None, wide=True, **kwargs):
"""
Arguments:
type (`str`, optional): Type of the input. Defaults to `number`.
placeholder (`str`, placeholder): Placeholder for the input. If
`None`, no placeholder is used. Defaults to `None`.
"""
super().__init__(wide=wide, **kwargs)
self.type = type
self.placeholder = placeholder
self.value = placeholder
self.jquery_fn = "val"
def html(self):
attributes = {
"id": self.id,
"type": self.type,
}
self.add_css_class(attributes)
if self.placeholder is not None:
attributes["placeholder"] = self.placeholder
return input_(**attributes)
def get(self):
return self.value
def set(self, x):
if self.type == "number" and isinstance(x, str):
try:
# Find if it's an int or a float
number = float(x)
integer = int(number)
# number, integer = float(x), int(x)
self.value = integer if number == integer else number
except ValueError: # Empty input
self.value = 0
else:
self.value = x