prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Faciliter la programmation des Unes en modifiant le type de la date de publication.
  À ce jour, quand on créer une Unes il faut remplir le champ "Date de publication" avec un format texte de style "2023/08/21 10:00". C'est assez désagréable à remplir. 
  
  ![image](https://github.com/zestedesavoir/zds-site/assets/8135797/c256ac28-bd4b-4c04-a701-5c4455f742f1)
  Les propositions sont des Unes que j'ai déjà faite.
  
  En ajoutant le type "datetime-local" à cette input on pourrait accèder aux interfaces natives des navigateurs/OS pour ce genre d'input.
  ![Exemple avec Firefox](https://github.com/zestedesavoir/zds-site/assets/8135797/f6516bdc-1416-44fc-8150-f94885ad4b28)
  
  
  </issue>
  <code>
  [start of zds/featured/forms.py]
  1 from crispy_forms.bootstrap import StrictButton
  2 from crispy_forms.helper import FormHelper
  3 from crispy_forms.layout import Layout, Field, ButtonHolder
  4 from django import forms
  5 from django.urls import reverse
  6 from django.utils.translation import gettext_lazy as _
  7 
  8 from zds.featured.models import FeaturedResource, FeaturedMessage
  9 
  10 
  11 class FeaturedResourceForm(forms.ModelForm):
  12     class Meta:
  13         model = FeaturedResource
  14 
  15         fields = ["title", "type", "authors", "image_url", "url"]
  16 
  17         widgets = {
  18             "title": forms.TextInput(attrs={"placeholder": _("Titre de la Une")}),
  19             "type": forms.TextInput(attrs={"placeholder": _("ex: Un projet, Un article, Un tutoriel...")}),
  20             "authors": forms.TextInput(attrs={"placeholder": _("Des auteurs (ou pas) ?")}),
  21             "image_url": forms.URLInput(
  22                 attrs={"placeholder": _("Lien vers l'image de la Une (dimensions: 228x228px).")}
  23             ),
  24             "url": forms.URLInput(attrs={"placeholder": _("Lien vers la ressource.")}),
  25         }
  26 
  27     major_update = forms.BooleanField(
  28         label=_("Mise à jour majeure (fera passer la Une en première position lors d'un changement)"),
  29         initial=False,
  30         required=False,
  31     )
  32 
  33     pubdate = forms.DateTimeField(
  34         label=_("Date de publication (exemple: 25/12/2015 15:00 ou 2015-12-25T15:00)"),
  35         input_formats=[
  36             "%d/%m/%Y %H:%M:%S",
  37             "%Y-%m-%d %H:%M:%S",  # full format with second
  38             "%Y-%m-%dT%H:%M",  # datetime field format
  39             "%Y-%m-%d %H:%M",
  40             "%d/%m/%Y %H:%M",  # without second
  41             "%Y-%m-%d",
  42             "%d/%m/%Y",  # day only
  43         ],
  44         widget=forms.DateTimeInput(
  45             attrs={"placeholder": _("Exemple : 25/12/2016 10:00"), "type": "text"},
  46             format="%d/%m/%Y %H:%M",  # datetime field format
  47         ),
  48     )
  49 
  50     request = forms.IntegerField(widget=forms.HiddenInput(), required=False)
  51 
  52     def __init__(self, *args, **kwargs):
  53         hide_major_update_field = kwargs.pop("hide_major_update_field", False)
  54 
  55         super().__init__(*args, **kwargs)
  56         self.helper = FormHelper()
  57         self.helper.form_class = "content-wrapper"
  58         self.helper.form_method = "post"
  59         self.helper.form_action = reverse("featured:resource-create")
  60 
  61         fields = [Field("request"), Field("title"), Field("type"), Field("authors"), Field("image_url"), Field("url")]
  62 
  63         if not hide_major_update_field:
  64             fields.append(Field("major_update"))
  65 
  66         fields.extend(
  67             [
  68                 Field("pubdate"),
  69                 ButtonHolder(
  70                     StrictButton(_("Enregistrer"), type="submit"),
  71                 ),
  72             ]
  73         )
  74 
  75         self.helper.layout = Layout(*fields)
  76 
  77 
  78 class FeaturedMessageForm(forms.ModelForm):
  79     class Meta:
  80         model = FeaturedMessage
  81 
  82         fields = ["hook", "message", "url"]
  83 
  84         widgets = {
  85             "hook": forms.TextInput(attrs={"placeholder": _('Mot d\'accroche court ("Nouveau !")')}),
  86             "message": forms.TextInput(attrs={"placeholder": _("Message à afficher")}),
  87             "url": forms.URLInput(attrs={"placeholder": _("Lien vers la description de la ressource")}),
  88         }
  89 
  90     def __init__(self, *args, **kwargs):
  91         super().__init__(*args, **kwargs)
  92         self.helper = FormHelper()
  93         self.helper.form_class = "content-wrapper"
  94         self.helper.form_method = "post"
  95         self.helper.form_action = reverse("featured:message-create")
  96 
  97         self.helper.layout = Layout(
  98             Field("hook"),
  99             Field("message"),
  100             Field("url"),
  101             ButtonHolder(
  102                 StrictButton(_("Enregistrer"), type="submit"),
  103             ),
  104         )
  105
  [end of zds/featured/forms.py]
  </code>
  
  I need you to solve this issue by generating a single patch file that I can apply directly to this repository using git apply. Please respond with a single patch file in the following format.
  <patch>
  diff --git a/file.py b/file.py
  --- a/file.py
  +++ b/file.py
  @@ -1,27 +1,35 @@
   def euclidean(a, b):
  -    while b:
  -        a, b = b, a % b
  -    return a
  +    if b == 0:
  +        return a
  +    return euclidean(b, a % b)
   
   
   def bresenham(x0, y0, x1, y1):
       points = []
       dx = abs(x1 - x0)
       dy = abs(y1 - y0)
  -    sx = 1 if x0 < x1 else -1
  -    sy = 1 if y0 < y1 else -1
  -    err = dx - dy
  +    x, y = x0, y0
  +    sx = -1 if x0 > x1 else 1
  +    sy = -1 if y0 > y1 else 1
   
  -    while True:
  -        points.append((x0, y0))
  -        if x0 == x1 and y0 == y1:
  -            break
  -        e2 = 2 * err
  -        if e2 > -dy:
  -            err -= dy
  -            x0 += sx
  -        if e2 < dx:
  -            err += dx
  -            y0 += sy
  +    if dx > dy:
  +        err = dx / 2.0
  +        while x != x1:
  +            points.append((x, y))
  +            err -= dy
  +            if err < 0:
  +                y += sy
  +                err += dx
  +            x += sx
  +    else:
  +        err = dy / 2.0
  +        while y != y1:
  +            points.append((x, y))
  +            err -= dx
  +            if err < 0:
  +                x += sx
  +                err += dy
  +            y += sy
  +
  +    points.append((x, y))
       return points
  
  </patch>
golden_diff: diff --git a/zds/featured/forms.py b/zds/featured/forms.py
  --- a/zds/featured/forms.py
  +++ b/zds/featured/forms.py
  @@ -31,20 +31,8 @@
       )
   
       pubdate = forms.DateTimeField(
  -        label=_("Date de publication (exemple: 25/12/2015 15:00 ou 2015-12-25T15:00)"),
  -        input_formats=[
  -            "%d/%m/%Y %H:%M:%S",
  -            "%Y-%m-%d %H:%M:%S",  # full format with second
  -            "%Y-%m-%dT%H:%M",  # datetime field format
  -            "%Y-%m-%d %H:%M",
  -            "%d/%m/%Y %H:%M",  # without second
  -            "%Y-%m-%d",
  -            "%d/%m/%Y",  # day only
  -        ],
  -        widget=forms.DateTimeInput(
  -            attrs={"placeholder": _("Exemple : 25/12/2016 10:00"), "type": "text"},
  -            format="%d/%m/%Y %H:%M",  # datetime field format
  -        ),
  +        label=_("Date de publication (exemple: 25/12/2015 15:00)"),
  +        widget=forms.DateTimeInput(attrs={"type": "datetime-local"}),
       )
   
       request = forms.IntegerField(widget=forms.HiddenInput(), required=False)
  
verification_info: {"golden_diff": "diff --git a/zds/featured/forms.py b/zds/featured/forms.py\n--- a/zds/featured/forms.py\n+++ b/zds/featured/forms.py\n@@ -31,20 +31,8 @@\n     )\n \n     pubdate = forms.DateTimeField(\n-        label=_(\"Date de publication (exemple: 25/12/2015 15:00 ou 2015-12-25T15:00)\"),\n-        input_formats=[\n-            \"%d/%m/%Y %H:%M:%S\",\n-            \"%Y-%m-%d %H:%M:%S\",  # full format with second\n-            \"%Y-%m-%dT%H:%M\",  # datetime field format\n-            \"%Y-%m-%d %H:%M\",\n-            \"%d/%m/%Y %H:%M\",  # without second\n-            \"%Y-%m-%d\",\n-            \"%d/%m/%Y\",  # day only\n-        ],\n-        widget=forms.DateTimeInput(\n-            attrs={\"placeholder\": _(\"Exemple : 25/12/2016 10:00\"), \"type\": \"text\"},\n-            format=\"%d/%m/%Y %H:%M\",  # datetime field format\n-        ),\n+        label=_(\"Date de publication (exemple: 25/12/2015 15:00)\"),\n+        widget=forms.DateTimeInput(attrs={\"type\": \"datetime-local\"}),\n     )\n \n     request = forms.IntegerField(widget=forms.HiddenInput(), required=False)\n", "issue": "Faciliter la programmation des Unes en modifiant le type de la date de publication.\n\u00c0 ce jour, quand on cr\u00e9er une Unes il faut remplir le champ \"Date de publication\" avec un format texte de style \"2023/08/21 10:00\". C'est assez d\u00e9sagr\u00e9able \u00e0 remplir. \r\n\r\n![image](https://github.com/zestedesavoir/zds-site/assets/8135797/c256ac28-bd4b-4c04-a701-5c4455f742f1)\r\nLes propositions sont des Unes que j'ai d\u00e9j\u00e0 faite.\r\n\r\nEn ajoutant le type \"datetime-local\" \u00e0 cette input on pourrait acc\u00e8der aux interfaces natives des navigateurs/OS pour ce genre d'input.\r\n![Exemple avec Firefox](https://github.com/zestedesavoir/zds-site/assets/8135797/f6516bdc-1416-44fc-8150-f94885ad4b28)\r\n\n", "before_files": [{"content": "from crispy_forms.bootstrap import StrictButton\nfrom crispy_forms.helper import FormHelper\nfrom crispy_forms.layout import Layout, Field, ButtonHolder\nfrom django import forms\nfrom django.urls import reverse\nfrom django.utils.translation import gettext_lazy as _\n\nfrom zds.featured.models import FeaturedResource, FeaturedMessage\n\n\nclass FeaturedResourceForm(forms.ModelForm):\n    class Meta:\n        model = FeaturedResource\n\n        fields = [\"title\", \"type\", \"authors\", \"image_url\", \"url\"]\n\n        widgets = {\n            \"title\": forms.TextInput(attrs={\"placeholder\": _(\"Titre de la Une\")}),\n            \"type\": forms.TextInput(attrs={\"placeholder\": _(\"ex: Un projet, Un article, Un tutoriel...\")}),\n            \"authors\": forms.TextInput(attrs={\"placeholder\": _(\"Des auteurs (ou pas)\u00a0?\")}),\n            \"image_url\": forms.URLInput(\n                attrs={\"placeholder\": _(\"Lien vers l'image de la Une (dimensions: 228x228px).\")}\n            ),\n            \"url\": forms.URLInput(attrs={\"placeholder\": _(\"Lien vers la ressource.\")}),\n        }\n\n    major_update = forms.BooleanField(\n        label=_(\"Mise \u00e0 jour majeure (fera passer la Une en premi\u00e8re position lors d'un changement)\"),\n        initial=False,\n        required=False,\n    )\n\n    pubdate = forms.DateTimeField(\n        label=_(\"Date de publication (exemple: 25/12/2015 15:00 ou 2015-12-25T15:00)\"),\n        input_formats=[\n            \"%d/%m/%Y %H:%M:%S\",\n            \"%Y-%m-%d %H:%M:%S\",  # full format with second\n            \"%Y-%m-%dT%H:%M\",  # datetime field format\n            \"%Y-%m-%d %H:%M\",\n            \"%d/%m/%Y %H:%M\",  # without second\n            \"%Y-%m-%d\",\n            \"%d/%m/%Y\",  # day only\n        ],\n        widget=forms.DateTimeInput(\n            attrs={\"placeholder\": _(\"Exemple : 25/12/2016 10:00\"), \"type\": \"text\"},\n            format=\"%d/%m/%Y %H:%M\",  # datetime field format\n        ),\n    )\n\n    request = forms.IntegerField(widget=forms.HiddenInput(), required=False)\n\n    def __init__(self, *args, **kwargs):\n        hide_major_update_field = kwargs.pop(\"hide_major_update_field\", False)\n\n        super().__init__(*args, **kwargs)\n        self.helper = FormHelper()\n        self.helper.form_class = \"content-wrapper\"\n        self.helper.form_method = \"post\"\n        self.helper.form_action = reverse(\"featured:resource-create\")\n\n        fields = [Field(\"request\"), Field(\"title\"), Field(\"type\"), Field(\"authors\"), Field(\"image_url\"), Field(\"url\")]\n\n        if not hide_major_update_field:\n            fields.append(Field(\"major_update\"))\n\n        fields.extend(\n            [\n                Field(\"pubdate\"),\n                ButtonHolder(\n                    StrictButton(_(\"Enregistrer\"), type=\"submit\"),\n                ),\n            ]\n        )\n\n        self.helper.layout = Layout(*fields)\n\n\nclass FeaturedMessageForm(forms.ModelForm):\n    class Meta:\n        model = FeaturedMessage\n\n        fields = [\"hook\", \"message\", \"url\"]\n\n        widgets = {\n            \"hook\": forms.TextInput(attrs={\"placeholder\": _('Mot d\\'accroche court (\"Nouveau\u00a0!\")')}),\n            \"message\": forms.TextInput(attrs={\"placeholder\": _(\"Message \u00e0 afficher\")}),\n            \"url\": forms.URLInput(attrs={\"placeholder\": _(\"Lien vers la description de la ressource\")}),\n        }\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.helper = FormHelper()\n        self.helper.form_class = \"content-wrapper\"\n        self.helper.form_method = \"post\"\n        self.helper.form_action = reverse(\"featured:message-create\")\n\n        self.helper.layout = Layout(\n            Field(\"hook\"),\n            Field(\"message\"),\n            Field(\"url\"),\n            ButtonHolder(\n                StrictButton(_(\"Enregistrer\"), type=\"submit\"),\n            ),\n        )\n", "path": "zds/featured/forms.py"}]}