| Total Complexity | 7 |
| Total Lines | 51 |
| Duplicated Lines | 0 % |
| Changes | 0 | ||
| 1 | # -*- coding: utf-8 -*- |
||
| 2 | |||
| 3 | import zope.component |
||
| 4 | import zope.interface |
||
| 5 | import zope.schema |
||
| 6 | import zope.schema.interfaces |
||
| 7 | from senaite.core.interfaces import ISenaiteFormLayer |
||
| 8 | from senaite.core.schema.interfaces import IIntField |
||
| 9 | from senaite.core.z3cform.interfaces import INumberWidget |
||
| 10 | from z3c.form import interfaces |
||
| 11 | from z3c.form.browser import text |
||
| 12 | from z3c.form.browser import widget |
||
| 13 | from z3c.form.interfaces import INPUT_MODE |
||
| 14 | from z3c.form.widget import FieldWidget |
||
| 15 | from zope.component import adapter |
||
| 16 | from zope.interface import implementer_only |
||
| 17 | |||
| 18 | |||
| 19 | @implementer_only(INumberWidget) |
||
| 20 | class NumberWidget(text.TextWidget): |
||
| 21 | """Input type "number" widget implementation. |
||
| 22 | """ |
||
| 23 | klass = u"number-widget" |
||
| 24 | value = u"" |
||
| 25 | |||
| 26 | def update(self): |
||
| 27 | super(NumberWidget, self).update() |
||
| 28 | widget.addFieldClass(self) |
||
| 29 | if self.mode == INPUT_MODE: |
||
| 30 | self.addClass("form-control") |
||
| 31 | |||
| 32 | @property |
||
| 33 | def min(self): |
||
| 34 | if not self.field: |
||
| 35 | return None |
||
| 36 | return self.field.min |
||
| 37 | |||
| 38 | @property |
||
| 39 | def max(self): |
||
| 40 | if not self.field: |
||
| 41 | return None |
||
| 42 | return self.field.max |
||
| 43 | |||
| 44 | |||
| 45 | @adapter(IIntField, ISenaiteFormLayer) |
||
| 46 | @zope.interface.implementer(interfaces.IFieldWidget) |
||
| 47 | def IntFieldWidget(field, request): |
||
| 48 | """IFieldWidget widget factory for NumberWidget. |
||
| 49 | """ |
||
| 50 | return FieldWidget(field, NumberWidget(request)) |
||
| 51 |