forked from s434596/CatOrNot
125 lines
2.4 KiB
Python
125 lines
2.4 KiB
Python
"""
|
|
Widgets for various HTML5 input types.
|
|
"""
|
|
|
|
from .core import Input
|
|
|
|
__all__ = (
|
|
'ColorInput', 'DateInput', 'DateTimeInput', 'DateTimeLocalInput',
|
|
'EmailInput', 'MonthInput', 'NumberInput', 'RangeInput', 'SearchInput',
|
|
'TelInput', 'TimeInput', 'URLInput', 'WeekInput',
|
|
)
|
|
|
|
|
|
class SearchInput(Input):
|
|
"""
|
|
Renders an input with type "search".
|
|
"""
|
|
input_type = 'search'
|
|
|
|
|
|
class TelInput(Input):
|
|
"""
|
|
Renders an input with type "tel".
|
|
"""
|
|
input_type = 'tel'
|
|
|
|
|
|
class URLInput(Input):
|
|
"""
|
|
Renders an input with type "url".
|
|
"""
|
|
input_type = 'url'
|
|
|
|
|
|
class EmailInput(Input):
|
|
"""
|
|
Renders an input with type "email".
|
|
"""
|
|
input_type = 'email'
|
|
|
|
|
|
class DateTimeInput(Input):
|
|
"""
|
|
Renders an input with type "datetime".
|
|
"""
|
|
input_type = 'datetime'
|
|
|
|
|
|
class DateInput(Input):
|
|
"""
|
|
Renders an input with type "date".
|
|
"""
|
|
input_type = 'date'
|
|
|
|
|
|
class MonthInput(Input):
|
|
"""
|
|
Renders an input with type "month".
|
|
"""
|
|
input_type = 'month'
|
|
|
|
|
|
class WeekInput(Input):
|
|
"""
|
|
Renders an input with type "week".
|
|
"""
|
|
input_type = 'week'
|
|
|
|
|
|
class TimeInput(Input):
|
|
"""
|
|
Renders an input with type "time".
|
|
"""
|
|
input_type = 'time'
|
|
|
|
|
|
class DateTimeLocalInput(Input):
|
|
"""
|
|
Renders an input with type "datetime-local".
|
|
"""
|
|
input_type = 'datetime-local'
|
|
|
|
|
|
class NumberInput(Input):
|
|
"""
|
|
Renders an input with type "number".
|
|
"""
|
|
input_type = 'number'
|
|
|
|
def __init__(self, step=None, min=None, max=None):
|
|
self.step = step
|
|
self.min = min
|
|
self.max = max
|
|
|
|
def __call__(self, field, **kwargs):
|
|
if self.step is not None:
|
|
kwargs.setdefault('step', self.step)
|
|
if self.min is not None:
|
|
kwargs.setdefault('min', self.min)
|
|
if self.max is not None:
|
|
kwargs.setdefault('max', self.max)
|
|
return super(NumberInput, self).__call__(field, **kwargs)
|
|
|
|
|
|
class RangeInput(Input):
|
|
"""
|
|
Renders an input with type "range".
|
|
"""
|
|
input_type = 'range'
|
|
|
|
def __init__(self, step=None):
|
|
self.step = step
|
|
|
|
def __call__(self, field, **kwargs):
|
|
if self.step is not None:
|
|
kwargs.setdefault('step', self.step)
|
|
return super(RangeInput, self).__call__(field, **kwargs)
|
|
|
|
|
|
class ColorInput(Input):
|
|
"""
|
|
Renders an input with type "color".
|
|
"""
|
|
input_type = 'color'
|