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 |