yafowil.widget.datetime 2.0.2__tar.gz → 2.0.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/.gitignore +0 -1
  2. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/CHANGES.rst +109 -0
  3. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/PKG-INFO +2 -1
  4. yafowil_widget_datetime-2.0.3/biome.json +31 -0
  5. yafowil_widget_datetime-2.0.3/include.mk +16 -0
  6. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/pyproject.toml +24 -1
  7. yafowil_widget_datetime-2.0.3/src/yafowil/widget/datetime/__init__.py +201 -0
  8. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/example.py +54 -49
  9. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/locales/de/LC_MESSAGES/yafowil.widget.datetime.mo +0 -0
  10. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/locales/de/LC_MESSAGES/yafowil.widget.datetime.po +9 -13
  11. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/locales/en/LC_MESSAGES/yafowil.widget.datetime.po +8 -12
  12. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/locales/yafowil.widget.datetime.pot +11 -10
  13. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/bootstrap5/widget.js +93 -92
  14. yafowil_widget_datetime-2.0.3/src/yafowil/widget/datetime/resources/bootstrap5/widget.min.js +1 -0
  15. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/default/widget.js +92 -94
  16. yafowil_widget_datetime-2.0.3/src/yafowil/widget/datetime/resources/default/widget.min.js +1 -0
  17. yafowil_widget_datetime-2.0.3/src/yafowil/widget/datetime/tests/test_widget.py +1008 -0
  18. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/widget.py +222 -95
  19. yafowil_widget_datetime-2.0.2/src/yafowil/widget/datetime/__init__.py +0 -192
  20. yafowil_widget_datetime-2.0.2/src/yafowil/widget/datetime/resources/bootstrap5/widget.min.js +0 -1
  21. yafowil_widget_datetime-2.0.2/src/yafowil/widget/datetime/resources/default/widget.min.js +0 -1
  22. yafowil_widget_datetime-2.0.2/src/yafowil/widget/datetime/tests/test_widget.py +0 -782
  23. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/LICENSE.rst +0 -0
  24. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/README.rst +0 -0
  25. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/locales/en/LC_MESSAGES/yafowil.widget.datetime.mo +0 -0
  26. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/bootstrap5/datepicker.min.css +0 -0
  27. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/bootstrap5/timepicker.min.css +0 -0
  28. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/default/datepicker.min.css +0 -0
  29. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/default/timepicker.min.css +0 -0
  30. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/ar-tn.js +0 -0
  31. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/ar.js +0 -0
  32. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/az.js +0 -0
  33. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/bg.js +0 -0
  34. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/bm.js +0 -0
  35. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/bn.js +0 -0
  36. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/br.js +0 -0
  37. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/bs.js +0 -0
  38. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/ca.js +0 -0
  39. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/cs.js +0 -0
  40. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/cy.js +0 -0
  41. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/da.js +0 -0
  42. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/de.js +0 -0
  43. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/el.js +0 -0
  44. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/en-AU.js +0 -0
  45. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/en-CA.js +0 -0
  46. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/en-GB.js +0 -0
  47. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/en-IE.js +0 -0
  48. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/en-NZ.js +0 -0
  49. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/en-ZA.js +0 -0
  50. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/eo.js +0 -0
  51. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/es.js +0 -0
  52. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/et.js +0 -0
  53. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/eu.js +0 -0
  54. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/fa.js +0 -0
  55. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/fi.js +0 -0
  56. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/fo.js +0 -0
  57. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/fr-CH.js +0 -0
  58. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/fr.js +0 -0
  59. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/gl.js +0 -0
  60. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/he.js +0 -0
  61. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/hi.js +0 -0
  62. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/hr.js +0 -0
  63. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/hu.js +0 -0
  64. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/hy.js +0 -0
  65. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/id.js +0 -0
  66. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/is.js +0 -0
  67. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/it-CH.js +0 -0
  68. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/it.js +0 -0
  69. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/ja.js +0 -0
  70. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/ka.js +0 -0
  71. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/kk.js +0 -0
  72. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/km.js +0 -0
  73. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/ko.js +0 -0
  74. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/lt.js +0 -0
  75. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/lv.js +0 -0
  76. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/me.js +0 -0
  77. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/mk.js +0 -0
  78. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/mn.js +0 -0
  79. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/mr.js +0 -0
  80. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/ms.js +0 -0
  81. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/nl-BE.js +0 -0
  82. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/nl.js +0 -0
  83. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/no.js +0 -0
  84. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/oc.js +0 -0
  85. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/pl.js +0 -0
  86. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/pt-BR.js +0 -0
  87. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/pt.js +0 -0
  88. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/ro.js +0 -0
  89. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/ru.js +0 -0
  90. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/si.js +0 -0
  91. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/sk.js +0 -0
  92. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/sl.js +0 -0
  93. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/sq.js +0 -0
  94. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/sr-latn.js +0 -0
  95. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/sr.js +0 -0
  96. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/sv.js +0 -0
  97. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/sw.js +0 -0
  98. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/ta.js +0 -0
  99. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/tg.js +0 -0
  100. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/th.js +0 -0
  101. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/tk.js +0 -0
  102. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/tr.js +0 -0
  103. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/uk.js +0 -0
  104. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/uz-cyrl.js +0 -0
  105. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/uz-latn.js +0 -0
  106. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/vi.js +0 -0
  107. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/zh-CN.js +0 -0
  108. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/locales/zh-TW.js +0 -0
  109. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/vanillajs-datepicker/datepicker.js +0 -0
  110. {yafowil_widget_datetime-2.0.2 → yafowil_widget_datetime-2.0.3}/src/yafowil/widget/datetime/resources/vanillajs-datepicker/datepicker.min.js +0 -0
@@ -11,7 +11,6 @@
11
11
  /js/karma/
12
12
  /node_modules/
13
13
  /package-lock.json
14
- /pnpm-lock.yaml
15
14
  /py2/
16
15
  /py3/
17
16
  /pypy3/
@@ -1,6 +1,115 @@
1
1
  Changes
2
2
  =======
3
3
 
4
+ 2.0.3 (2026-10-31)
5
+ ------------------
6
+
7
+ - Fix the ``datetime`` and ``time`` widgets rendering the preset value after
8
+ the extraction of an empty, not required input. An empty input is rendered
9
+ empty now.
10
+ [rnix]
11
+
12
+ - Fix ``placeholder`` of the ``datetime`` widget being rendered on the time
13
+ input instead of the date input. ``placeholder`` is rendered on the date
14
+ input now, the new ``time_placeholder`` property on the time input. Both
15
+ default to no placeholder.
16
+ [rnix]
17
+
18
+ - Fix the time input of the ``time`` and ``datetime`` widgets with
19
+ ``clock='12'`` being too small for the 12-hour clock value like ``03:15PM``.
20
+ The default placeholder of the ``time`` widget is ``hh:mmAM`` with the
21
+ 12-hour clock instead of ``hh:mm``, a given ``placeholder`` is kept.
22
+ [rnix]
23
+
24
+ - Fix re-rendering a form after a failed extraction. The ``time`` widget with
25
+ ``format='number'`` raised a ``ValueError``/``TypeError``, and the
26
+ ``datetime`` widget with a preset value rendered the preset value instead of
27
+ the input. Both render the input as entered now.
28
+ [rnix]
29
+
30
+ - Fix the German translation of ``invalid_minutes_range``, the range is
31
+ ``0..59``, not ``0..23``.
32
+ [rnix]
33
+
34
+ - Fix ``clock='12'`` in the ``time`` and ``datetime`` widgets. Values written
35
+ by the 12-hour timepicker like ``03:15PM`` were rejected by the ``time``
36
+ widget, and the ``datetime`` widget silently dropped ``PM``. Both accept the
37
+ picker format and 12 o'clock typed by hand (``12:30am``) now, case
38
+ insensitive, and extract the same value as with the 24-hour clock. The time
39
+ input renders the value in the format of the 12-hour timepicker, e.g.
40
+ ``00:30PM`` for half past noon. ``clock`` may be given as string or integer.
41
+ Display mode is unchanged.
42
+ [rnix]
43
+
44
+ - Fix the timepicker ``destroy`` leaving the trigger button, the ``focus``,
45
+ ``keypress`` and ``keyup`` handlers on the input and the
46
+ ``yafowil-timepicker`` data. The server rendered input is kept.
47
+ [rnix]
48
+
49
+ - Fix the default datepicker ``destroy`` keeping the ``yafowil-datepicker``
50
+ data, ``initialize`` skipped the input afterwards. The datepicker
51
+ ``destroy`` no longer removes foreign event handlers and data from the
52
+ input, only its own.
53
+ [rnix]
54
+
55
+ - Fix spellchecking not being disabled on the timepicker input. With jQuery 4
56
+ ``.attr('spellcheck', false)`` removes the attribute instead of setting
57
+ ``spellcheck="false"``.
58
+ [rnix]
59
+
60
+ - Fix typing a 12 o'clock time into a 12-hour timepicker. ``12:30pm`` raised a
61
+ ``TypeError`` on keyup, ``12:30am`` selected the P.M. hour and rewrote the
62
+ input to ``00:30PM``. 12 o'clock selects the ``00`` hour of its period now.
63
+ [rnix]
64
+
65
+ - Fix the default timepicker ``destroy`` leaving its window resize handler
66
+ bound.
67
+ [rnix]
68
+
69
+ - Fix the datepicker ``destroy`` leaving its trigger button in the DOM. The
70
+ bootstrap5 datepicker no longer removes the server rendered input on
71
+ ``destroy``.
72
+ [rnix]
73
+
74
+ - Add ``@popperjs/core`` as dev dependency for testing the bootstrap5 widget.
75
+ [rnix]
76
+
77
+ - Extend the JS tests to 100 % coverage, all modules including bundles are
78
+ loaded by the tests now.
79
+ [rnix]
80
+
81
+ - Lint and format the JS code with biome. ``make check`` runs ``biome check``,
82
+ ``make format`` runs ``biome check --write`` (see ``include.mk``). Behavior
83
+ unchanged.
84
+ [rnix]
85
+
86
+ - JS tooling: Commit ``pnpm-lock.yaml``. Upgrade ``@web/test-runner`` to 1.0
87
+ and run the JS tests headless in Chromium via Playwright, installed in the JS
88
+ CI workflow. Drop the accidental ``install`` dev dependency. Pin patched
89
+ versions of vulnerable transitive dependencies via ``pnpm.overrides``.
90
+ [rnix]
91
+
92
+ - Modernise the code ruff flags as outdated: ``u''`` prefixes and ``.format()``
93
+ over f-strings. Behaviour unchanged. ``super(Class, self)`` is kept, see
94
+ ``cone.app``.
95
+ [rnix]
96
+
97
+ - Sort the imports with ruff (one per line, ``from`` imports first, no
98
+ sections) and format the code with ``ruff format`` (90 characters per line,
99
+ single quotes).
100
+ [rnix]
101
+
102
+ - Add ``qa.ruff`` domain to Makefile and pin the ruff configuration in
103
+ ``pyproject.toml``, ``make check`` runs ``ruff check``.
104
+ [rnix]
105
+
106
+ - Drop the Python 2 remnants: ``yafowil.compat`` usage and ``IS_PY2`` branches.
107
+ [rnix]
108
+
109
+ - Declare ``requires-python = ">=3.10"``.
110
+ [rnix]
111
+
112
+
4
113
  2.0.2 (2026-10-24)
5
114
  ------------------
6
115
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: yafowil.widget.datetime
3
- Version: 2.0.2
3
+ Version: 2.0.3
4
4
  Summary: Datetime Widget for YAFOWIL
5
5
  Author-email: Yafowil Contributors <dev@conestack.org>
6
6
  License: Simplified BSD
@@ -15,6 +15,7 @@ Classifier: Programming Language :: Python :: 3.12
15
15
  Classifier: Programming Language :: Python :: 3.13
16
16
  Classifier: Programming Language :: Python :: 3.14
17
17
  Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
18
+ Requires-Python: >=3.10
18
19
  Requires-Dist: bda-intellidatetime>1.2.99
19
20
  Requires-Dist: yafowil>3.99
20
21
  Provides-Extra: test
@@ -0,0 +1,31 @@
1
+ {
2
+ "$schema": "https://biomejs.dev/schemas/2.6.3/schema.json",
3
+ "files": {
4
+ "includes": ["js/src/**/*.js", "js/tests/**/*.js"]
5
+ },
6
+ "formatter": {
7
+ "enabled": true,
8
+ "indentStyle": "space",
9
+ "indentWidth": 4,
10
+ "lineWidth": 100
11
+ },
12
+ "linter": {
13
+ "enabled": true,
14
+ "rules": {
15
+ "preset": "recommended",
16
+ "correctness": {
17
+ "noUnusedVariables": "warn"
18
+ },
19
+ "complexity": {
20
+ "noStaticOnlyClass": "off",
21
+ "noThisInStatic": "off"
22
+ }
23
+ }
24
+ },
25
+ "javascript": {
26
+ "formatter": {
27
+ "quoteStyle": "single",
28
+ "semicolons": "always"
29
+ }
30
+ }
31
+ }
@@ -0,0 +1,16 @@
1
+ ##############################################################################
2
+ # biome (JS linting and formatting)
3
+ ##############################################################################
4
+
5
+ .PHONY: biome-check
6
+ biome-check: $(NODEJS_TARGET)
7
+ @echo "Run biome check"
8
+ @biome check
9
+
10
+ .PHONY: biome-format
11
+ biome-format: $(NODEJS_TARGET)
12
+ @echo "Run biome format"
13
+ @biome check --write
14
+
15
+ CHECK_TARGETS+=biome-check
16
+ FORMAT_TARGETS+=biome-format
@@ -4,9 +4,10 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "yafowil.widget.datetime"
7
- version = "2.0.2"
7
+ version = "2.0.3"
8
8
  description = "Datetime Widget for YAFOWIL"
9
9
  readme = "README.rst"
10
+ requires-python = ">=3.10"
10
11
  license = {text = "Simplified BSD"}
11
12
  authors = [{name = "Yafowil Contributors", email = "dev@conestack.org"}]
12
13
  classifiers = [
@@ -66,5 +67,27 @@ consider_namespace_packages = true
66
67
  addopts = ["--import-mode=importlib"]
67
68
  pythonpath = "src"
68
69
 
70
+ [tool.coverage.run]
71
+ omit = ["*/example.py"]
72
+
73
+ [tool.ruff]
74
+ line-length = 90
75
+
76
+ [tool.ruff.lint]
77
+ select = ["E4", "E7", "E9", "F", "I", "UP"]
78
+ # UP008: zero-argument ``super()`` breaks on ``@plumbing`` decorated classes.
79
+ # UP031: ``%`` formatting is kept.
80
+ ignore = ["UP008", "UP031"]
81
+
82
+ [tool.ruff.lint.isort]
83
+ force-single-line = true
84
+ from-first = true
85
+ no-sections = true
86
+ lines-after-imports = 2
87
+ order-by-type = false
88
+
89
+ [tool.ruff.format]
90
+ quote-style = "single"
91
+
69
92
  [tool.zest-releaser]
70
93
  create-wheel = true
@@ -0,0 +1,201 @@
1
+ from yafowil.base import factory
2
+ from yafowil.utils import entry_point
3
+ import os
4
+ import webresource as wr
5
+
6
+
7
+ resources_dir = os.path.join(os.path.dirname(__file__), 'resources')
8
+
9
+
10
+ ##############################################################################
11
+ # vanillajs-datepicker
12
+ ##############################################################################
13
+
14
+ # webresource ################################################################
15
+
16
+ vanillajs_datepicker_js = wr.ScriptResource(
17
+ name='datepicker-js',
18
+ directory=os.path.join(resources_dir, 'vanillajs-datepicker'),
19
+ path='yafowil-datetime/vanillajs-datepicker',
20
+ resource='datepicker.js',
21
+ compressed='datepicker.min.js',
22
+ )
23
+
24
+
25
+ ##############################################################################
26
+ # locale
27
+ ##############################################################################
28
+
29
+ # webresource ################################################################
30
+
31
+ locale_de = wr.ScriptResource(
32
+ name='datepicker-de-js',
33
+ depends='datepicker-js',
34
+ directory=os.path.join(resources_dir, 'locales'),
35
+ path='yafowil-datetime/locales',
36
+ resource='de.js',
37
+ )
38
+
39
+
40
+ ##############################################################################
41
+ # Default
42
+ ##############################################################################
43
+
44
+ # webresource ################################################################
45
+
46
+ resources = wr.ResourceGroup(
47
+ name='yafowil.widget.datetime', directory=resources_dir, path='yafowil-datetime'
48
+ )
49
+ resources.add(vanillajs_datepicker_js)
50
+ resources.add(locale_de)
51
+ resources.add(
52
+ wr.ScriptResource(
53
+ name='yafowil-datetime-js',
54
+ directory=os.path.join(resources_dir, 'default'),
55
+ path='yafowil-datetime/default',
56
+ depends=['jquery-js', 'datepicker-js'],
57
+ resource='widget.js',
58
+ compressed='widget.min.js',
59
+ )
60
+ )
61
+ resources.add(
62
+ wr.StyleResource(
63
+ name='yafowil-datepicker-css',
64
+ directory=os.path.join(resources_dir, 'default'),
65
+ path='yafowil-datetime/default',
66
+ resource='datepicker.min.css',
67
+ )
68
+ )
69
+ resources.add(
70
+ wr.StyleResource(
71
+ name='yafowil-timepicker-css',
72
+ directory=os.path.join(resources_dir, 'default'),
73
+ path='yafowil-datetime/default',
74
+ resource='timepicker.min.css',
75
+ )
76
+ )
77
+
78
+ # B/C resources ##############################################################
79
+
80
+ js = [
81
+ {
82
+ 'group': 'yafowil.widget.datetime.common',
83
+ 'resource': 'vanillajs-datepicker/datepicker.js',
84
+ 'order': 20,
85
+ },
86
+ {
87
+ 'group': 'yafowil.widget.datetime.common',
88
+ 'resource': 'locales/de.js',
89
+ 'order': 20,
90
+ },
91
+ {
92
+ 'group': 'yafowil.widget.datetime.common',
93
+ 'resource': 'default/widget.js',
94
+ 'order': 20,
95
+ },
96
+ ]
97
+ css = [
98
+ {
99
+ 'group': 'yafowil.widget.datetime.common',
100
+ 'resource': 'default/datepicker.min.css',
101
+ 'order': 20,
102
+ },
103
+ {
104
+ 'group': 'yafowil.widget.datetime.common',
105
+ 'resource': 'default/timepicker.min.css',
106
+ 'order': 20,
107
+ },
108
+ ]
109
+
110
+
111
+ ##############################################################################
112
+ # Bootstrap 5
113
+ ##############################################################################
114
+
115
+ # webresource ################################################################
116
+
117
+ bootstrap5_resources = wr.ResourceGroup(
118
+ name='yafowil.widget.datetime', directory=resources_dir, path='yafowil-datetime'
119
+ )
120
+ bootstrap5_resources.add(vanillajs_datepicker_js)
121
+ bootstrap5_resources.add(locale_de)
122
+ bootstrap5_resources.add(
123
+ wr.ScriptResource(
124
+ name='yafowil-datetime-js',
125
+ directory=os.path.join(resources_dir, 'bootstrap5'),
126
+ path='yafowil-datetime/bootstrap5',
127
+ depends=['jquery-js', 'datepicker-js'],
128
+ resource='widget.js',
129
+ compressed='widget.min.js',
130
+ )
131
+ )
132
+ bootstrap5_resources.add(
133
+ wr.StyleResource(
134
+ name='yafowil-datepicker-css',
135
+ directory=os.path.join(resources_dir, 'bootstrap5'),
136
+ path='yafowil-datetime/bootstrap5',
137
+ resource='datepicker.min.css',
138
+ )
139
+ )
140
+ bootstrap5_resources.add(
141
+ wr.StyleResource(
142
+ name='yafowil-timepicker-css',
143
+ directory=os.path.join(resources_dir, 'bootstrap5'),
144
+ path='yafowil-datetime/bootstrap5',
145
+ resource='timepicker.min.css',
146
+ )
147
+ )
148
+ # B/C resources ##############################################################
149
+
150
+ bootstrap5_js = [
151
+ {
152
+ 'group': 'yafowil.widget.datetime.common',
153
+ 'resource': 'vanillajs-datepicker/datepicker.js',
154
+ 'order': 20,
155
+ },
156
+ {
157
+ 'group': 'yafowil.widget.datetime.common',
158
+ 'resource': 'locales/de.js',
159
+ 'order': 20,
160
+ },
161
+ {
162
+ 'group': 'yafowil.widget.datetime.common',
163
+ 'resource': 'bootstrap5/widget.js',
164
+ 'order': 20,
165
+ },
166
+ ]
167
+ bootstrap5_css = [
168
+ {
169
+ 'group': 'yafowil.widget.datetime.common',
170
+ 'resource': 'bootstrap5/datepicker.min.css',
171
+ 'order': 20,
172
+ },
173
+ {
174
+ 'group': 'yafowil.widget.datetime.common',
175
+ 'resource': 'bootstrap5/timepicker.min.css',
176
+ 'order': 20,
177
+ },
178
+ ]
179
+
180
+
181
+ ##############################################################################
182
+ # Registration
183
+ ##############################################################################
184
+
185
+
186
+ @entry_point(order=10)
187
+ def register():
188
+ from yafowil.widget.datetime import widget # noqa
189
+
190
+ widget_name = 'yafowil.widget.datetime'
191
+
192
+ # Default
193
+ factory.register_theme('default', widget_name, resources_dir, js=js, css=css)
194
+ factory.register_resources('default', widget_name, resources)
195
+
196
+ # Bootstrap 5
197
+ factory.register_theme(
198
+ ['bootstrap5'], widget_name, resources_dir, js=bootstrap5_js, css=bootstrap5_css
199
+ )
200
+
201
+ factory.register_resources(['bootstrap5'], widget_name, bootstrap5_resources)
@@ -20,11 +20,14 @@ Date input.
20
20
 
21
21
  def date_example():
22
22
  form = factory('fieldset', name='yafowil.widget.datetime.date')
23
- form['date'] = factory('#field:datetime', props={
24
- 'label': 'Enter date or use date picker',
25
- 'required': 'Date Field is required',
26
- 'datepicker': True,
27
- })
23
+ form['date'] = factory(
24
+ '#field:datetime',
25
+ props={
26
+ 'label': 'Enter date or use date picker',
27
+ 'required': 'Date Field is required',
28
+ 'datepicker': True,
29
+ },
30
+ )
28
31
  return {
29
32
  'widget': form,
30
33
  'doc': DOC_DATE,
@@ -53,12 +56,15 @@ Set the 'clock' property to either 12 or 24 hours format (defaults to 24).
53
56
 
54
57
  def time_example():
55
58
  form = factory('fieldset', name='yafowil.widget.datetime.time')
56
- form['time'] = factory('#field:time', props={
57
- 'label': 'Select time',
58
- 'required': 'Time Field is required',
59
- 'timepicker': True,
60
- 'clock': '12'
61
- })
59
+ form['time'] = factory(
60
+ '#field:time',
61
+ props={
62
+ 'label': 'Select time',
63
+ 'required': 'Time Field is required',
64
+ 'timepicker': True,
65
+ 'clock': '12',
66
+ },
67
+ )
62
68
  return {
63
69
  'widget': form,
64
70
  'doc': DOC_TIME,
@@ -88,18 +94,17 @@ Set the 'minutes_step' property to a number between 1 and 60 (defaults to 5).
88
94
 
89
95
  def minutes_example():
90
96
  form = factory('fieldset', name='yafowil.widget.datetime.minutes_step')
91
- form['time'] = factory('#field:time', props={
92
- 'label': 'Select time',
93
- 'required': 'Time Field is required',
94
- 'timepicker': True,
95
- 'clock': '24',
96
- 'minutes_step': '15'
97
- })
98
- return {
99
- 'widget': form,
100
- 'doc': DOC_MINUTES,
101
- 'title': 'Minutes'
102
- }
97
+ form['time'] = factory(
98
+ '#field:time',
99
+ props={
100
+ 'label': 'Select time',
101
+ 'required': 'Time Field is required',
102
+ 'timepicker': True,
103
+ 'clock': '24',
104
+ 'minutes_step': '15',
105
+ },
106
+ )
107
+ return {'widget': form, 'doc': DOC_MINUTES, 'title': 'Minutes'}
103
108
 
104
109
 
105
110
  DOC_DATETIME = """
@@ -123,19 +128,18 @@ Date and time input.
123
128
 
124
129
  def datetime_example():
125
130
  form = factory('fieldset', name='yafowil.widget.datetime.datetime')
126
- form['datetime'] = factory('#field:datetime', props={
127
- 'label': 'Enter date and time',
128
- 'required': 'Datetime Field is required',
129
- 'locale': 'de',
130
- 'datepicker': True,
131
- 'time': True,
132
- 'timepicker': True
133
- })
134
- return {
135
- 'widget': form,
136
- 'doc': DOC_DATETIME,
137
- 'title': 'Datetime'
138
- }
131
+ form['datetime'] = factory(
132
+ '#field:datetime',
133
+ props={
134
+ 'label': 'Enter date and time',
135
+ 'required': 'Datetime Field is required',
136
+ 'locale': 'de',
137
+ 'datepicker': True,
138
+ 'time': True,
139
+ 'timepicker': True,
140
+ },
141
+ )
142
+ return {'widget': form, 'doc': DOC_DATETIME, 'title': 'Datetime'}
139
143
 
140
144
 
141
145
  DOC_DISPLAY = """
@@ -165,18 +169,19 @@ widget attribute.
165
169
  def display_example():
166
170
  value = datetime.datetime.now()
167
171
  form = factory('fieldset', name='yafowil.widget.datetime.display')
168
- form['datetime'] = factory('#field:datetime', value=value, mode='display', props={
169
- 'label': 'Datetime Picker in Display Mode',
170
- 'locale': 'de',
171
- 'datepicker': True,
172
- 'time': True,
173
- 'timepicker': True
174
- })
175
- return {
176
- 'widget': form,
177
- 'doc': DOC_DISPLAY,
178
- 'title': 'Display Mode'
179
- }
172
+ form['datetime'] = factory(
173
+ '#field:datetime',
174
+ value=value,
175
+ mode='display',
176
+ props={
177
+ 'label': 'Datetime Picker in Display Mode',
178
+ 'locale': 'de',
179
+ 'datepicker': True,
180
+ 'time': True,
181
+ 'timepicker': True,
182
+ },
183
+ )
184
+ return {'widget': form, 'doc': DOC_DISPLAY, 'title': 'Display Mode'}
180
185
 
181
186
 
182
187
  def get_example():
@@ -185,5 +190,5 @@ def get_example():
185
190
  time_example(),
186
191
  minutes_example(),
187
192
  datetime_example(),
188
- display_example()
193
+ display_example(),
189
194
  ]
@@ -9,7 +9,7 @@ msgid ""
9
9
  msgstr ""
10
10
  "Project-Id-Version: yafowil.widget.datetime 1.5.2\n"
11
11
  "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
12
- "POT-Creation-Date: 2025-10-28 10:11+0100\n"
12
+ "POT-Creation-Date: 2026-10-24 23:18+0200\n"
13
13
  "PO-Revision-Date: 2014-04-30 18:38+0200\n"
14
14
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
15
15
  "Language-Team: de <LL@li.org>\n"
@@ -21,17 +21,18 @@ msgstr ""
21
21
  "Generated-By: Babel 1.3\n"
22
22
 
23
23
  #. Default: Not a valid time input.
24
- #: src/yafowil/widget/datetime/widget.py:41
24
+ #: src/yafowil/widget/datetime/widget.py:47
25
+ #: src/yafowil/widget/datetime/widget.py:94
25
26
  msgid "input_not_valid_time"
26
27
  msgstr "Eingabe ist keine gültige Zeit"
27
28
 
28
29
  #. Default: Failed to parse time input.
29
- #: src/yafowil/widget/datetime/widget.py:52
30
+ #: src/yafowil/widget/datetime/widget.py:58
30
31
  msgid "failed_to_parse_time"
31
32
  msgstr "Eingabe konnte nicht als Zeiteingabe identifiziert werden"
32
33
 
33
34
  #. Default: Hours not a number.
34
- #: src/yafowil/widget/datetime/widget.py:61
35
+ #: src/yafowil/widget/datetime/widget.py:64
35
36
  msgid "hours_not_a_number"
36
37
  msgstr "Stundeneingabe ist keie Zahl"
37
38
 
@@ -41,21 +42,16 @@ msgid "minutes_not_a_number"
41
42
  msgstr "Minuteneingabe ist keine Zahl"
42
43
 
43
44
  #. Default: Hours must be in range 0..23.
44
- #: src/yafowil/widget/datetime/widget.py:78
45
+ #: src/yafowil/widget/datetime/widget.py:136
45
46
  msgid "invalid_hours_range"
46
47
  msgstr "Stundeneingabe nicht im gültigen Bereich 0..23"
47
48
 
48
49
  #. Default: Minutes must be in range 0..59.
49
- #: src/yafowil/widget/datetime/widget.py:84
50
+ #: src/yafowil/widget/datetime/widget.py:139
50
51
  msgid "invalid_minutes_range"
51
- msgstr "Minuteneingabe nicht im gültigen Bereich 0..23"
52
+ msgstr "Minuteneingabe nicht im gültigen Bereich 0..59"
52
53
 
53
54
  #. Default: Not a valid date input.
54
- #: src/yafowil/widget/datetime/widget.py:285
55
+ #: src/yafowil/widget/datetime/widget.py:373
55
56
  msgid "input_not_valid_date"
56
57
  msgstr "Eingabe ist kein gültiges Datum"
57
-
58
- #. Default: hh:mm
59
- #: src/yafowil/widget/datetime/widget.py
60
- msgid "time_format_placeholder"
61
- msgstr "hh:mm"