diff roundup/cgi/templating.py @ 8285:2bf0c4e7795e

fix: issue2551390 - Replace text input/calendar popup with native date input Docs, code and test changes for the changeover to a native date element. See issue for details.
author John Rouillard <rouilj@ieee.org>
date Sat, 18 Jan 2025 12:23:23 -0500
parents 669dfccca898
children 6445e63bb423
line wrap: on
line diff
--- a/roundup/cgi/templating.py	Sat Jan 18 11:20:20 2025 -0500
+++ b/roundup/cgi/templating.py	Sat Jan 18 12:23:23 2025 -0500
@@ -2252,7 +2252,16 @@
         return DateHTMLProperty(self._client, self._classname, self._nodeid,
                                 self._prop, self._formname, ret)
 
-    def field(self, size=30, default=None, format=_marker, popcal=True,
+
+    def field_time(self, size=30, default=None, format=_marker, popcal=None,
+                   **kwargs):
+
+        kwargs.setdefault("type", "datetime-local")
+        field = self.field(size=size, default=default, format=format,
+                           popcal=popcal, **kwargs)
+        return field
+
+    def field(self, size=30, default=None, format=_marker, popcal=None,
               **kwargs):
         """Render a form edit field for the property
 
@@ -2269,6 +2278,47 @@
             else:
                 return self.pretty(format)
 
+        kwargs.setdefault("type", "date")
+
+        if kwargs["type"] in ["date", "datetime-local"]:
+            acceptable_formats = {
+                "date": "%Y-%m-%d",
+                "datetime-local": "%Y-%m-%dT%H:%M:%S"
+            }
+
+            if format is not self._marker:  # user set format
+                if format != acceptable_formats[kwargs["type"]]:
+                    # format is incompatible with date type
+                    kwargs['type'] = "text"
+                    if popcal is not False:
+                        popcal = True
+                    logger.warning(self._(
+                        "Format '%(format)s' prevents use of modern "
+                        "date input. Remove format from field() call in "
+                        "template %(class)s.%(template)s. "
+                        "Using text input.") % {
+                            "format": format,
+                            "class": self._client.classname,
+                            "template": self._client.template
+                        })
+
+                    """
+                    raise ValueError(self._(
+                        "When using input type of '%(field_type)s', the "
+                        "format must not be set, or must be "
+                        "'%(format_string)s' to match RFC3339 date "
+                        "or date-time. Current format is '%(format)s'.") % {
+                            "field_type": kwargs["type"],
+                            "format_string":
+                            acceptable_formats[kwargs["type"]],
+                            "format": format,
+                      })"""
+            else:
+                # https://developer.mozilla.org/en-US/docs/Web/HTML/Date_and_time_formats#local_date_and_time_strings
+                # match date-time format in
+                # https://www.rfc-editor.org/rfc/rfc3339
+                format = acceptable_formats[kwargs['type']]
+
         value = self._value
 
         if value is None:

Roundup Issue Tracker: http://roundup-tracker.org/