diff --git a/.env.example b/.env.example index 77940f9a..41110c15 100644 --- a/.env.example +++ b/.env.example @@ -10,6 +10,8 @@ MEDIA_ROOT=medias # USE_DOCKER: Set 1 to use Docker USE_DOCKER=0 +# Set 1 to use Poetry +USE_POETRY=0 DATABASE_NAME=djdb DATABASE_USER=dju diff --git a/.env.test b/.env.test index ba5499a3..c8288f2f 100644 --- a/.env.test +++ b/.env.test @@ -4,5 +4,6 @@ DATABASE_USER=dju DATABASE_PASSWORD=djpwd DATABASE_HOST=127.0.0.1 DATABASE_PORT=5432 -DEBUG=True +DEBUG=False DATABASE_URL=postgres://${DATABASE_USER}:${DATABASE_PASSWORD}@${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_NAME} +USE_POETRY=1 diff --git a/.github/workflows/ci-main.yml b/.github/workflows/ci-main.yml index dd1f1261..67fbc2ca 100644 --- a/.github/workflows/ci-main.yml +++ b/.github/workflows/ci-main.yml @@ -31,7 +31,7 @@ jobs: python -m pip install --upgrade pip pip install poetry pip install ruff - poetry install --no-root + poetry install --no-root --with dev - name: 📄 Copy empty .env.test to .env run: | cp .env.test .env diff --git a/Dockerfile b/Dockerfile index d96a6644..8cc7e2f9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.10 +FROM python:3.13 EXPOSE ${CONTAINER_PORT} @@ -8,7 +8,7 @@ ENV GECKODRIVER_URL=https://github.com/mozilla/geckodriver/releases/download/v0. ENV APP_DIR="/app" # Configure Poetry -ENV POETRY_VERSION=1.8.2 +ENV POETRY_VERSION=2.0.1 ENV POETRY_HOME=/opt/poetry ENV POETRY_VENV=/opt/poetry-venv ENV POETRY_CACHE_DIR=/opt/.cache @@ -32,7 +32,7 @@ ENV PATH="${PATH}:${POETRY_VENV}/bin" WORKDIR $APP_DIR COPY pyproject.toml poetry.lock ./ -RUN poetry install +RUN poetry install --no-root COPY --chown=app:app . . diff --git a/Makefile b/Makefile index ef2fad72..d56d53b1 100644 --- a/Makefile +++ b/Makefile @@ -10,80 +10,88 @@ else EXEC_CMD := endif +ifeq ($(USE_POETRY),1) + POETRY_CMD := poetry run +else + POETRY_CMD := +endif + .PHONY: web-prompt web-prompt: $(EXEC_CMD) bash .PHONY: collectstatic collectstatic: - $(EXEC_CMD) poetry run python manage.py collectstatic --noinput --ignore=*.sass - + $(EXEC_CMD) $(POETRY_CMD) python manage.py collectstatic --noinput --ignore=*.sass .PHONY: messages messages: - $(EXEC_CMD) poetry run django-admin makemessages -l fr --ignore=manage.py --ignore=config --ignore=medias --ignore=__init__.py --ignore=setup.py --ignore=staticfiles + $(EXEC_CMD) $(POETRY_CMD) django-admin makemessages -l fr --ignore=manage.py --ignore=config --ignore=medias --ignore=__init__.py --ignore=setup.py --ignore=staticfiles .PHONY: sass sass: - $(EXEC_CMD) poetry run python manage.py compilescss + $(EXEC_CMD) $(POETRY_CMD) python manage.py compilescss make collectstatic .PHONY: quality quality: $(EXEC_CMD) ruff check . - $(EXEC_CMD) poetry run black --check --exclude=venv . + $(EXEC_CMD) $(POETRY_CMD) black --check --exclude=venv . .PHONY: fix fix: $(EXEC_CMD) ruff check . --fix - $(EXEC_CMD) poetry run black --exclude=venv . + $(EXEC_CMD) $(POETRY_CMD) black --exclude=venv . .PHONY: index index: - $(EXEC_CMD) poetry run python manage.py update_index + $(EXEC_CMD) $(POETRY_CMD) python manage.py update_index .PHONY: init init: - $(EXEC_CMD) poetry install --without dev - $(EXEC_CMD) poetry run python manage.py migrate + $(EXEC_CMD) poetry install --no-root --without dev + $(EXEC_CMD) $(POETRY_CMD) python manage.py migrate make collectstatic - $(EXEC_CMD) poetry run python manage.py set_config - $(EXEC_CMD) poetry run python manage.py import_dsfr_pictograms - $(EXEC_CMD) poetry run python manage.py create_starter_pages - $(EXEC_CMD) poetry run python manage.py import_page_templates + $(EXEC_CMD) $(POETRY_CMD) python manage.py set_config + $(EXEC_CMD) $(POETRY_CMD) python manage.py import_dsfr_pictograms + $(EXEC_CMD) $(POETRY_CMD) python manage.py create_starter_pages + $(EXEC_CMD) $(POETRY_CMD) python manage.py import_page_templates make index .PHONY: init-dev init-dev: make init - $(EXEC_CMD) poetry install - $(EXEC_CMD) poetry run pre-commit install + $(EXEC_CMD) poetry install --no-root + $(EXEC_CMD) $(POETRY_CMD) pre-commit install .PHONY: update update: - $(EXEC_CMD) poetry install --without dev - $(EXEC_CMD) poetry run python manage.py migrate + $(EXEC_CMD) poetry install --no-root --without dev + $(EXEC_CMD) $(POETRY_CMD) python manage.py migrate make collectstatic - $(EXEC_CMD) poetry run python manage.py import_dsfr_pictograms - $(EXEC_CMD) poetry run python manage.py import_page_templates + $(EXEC_CMD) $(POETRY_CMD) python manage.py import_dsfr_pictograms + $(EXEC_CMD) $(POETRY_CMD) python manage.py import_page_templates make index - .PHONY: demo demo: make init - $(EXEC_CMD) poetry run python manage.py create_demo_pages + $(EXEC_CMD) $(POETRY_CMD) python manage.py create_demo_pages .PHONY: runserver runserver: - $(EXEC_CMD) poetry run python manage.py runserver $(HOST_URL):$(HOST_PORT) + $(EXEC_CMD) $(POETRY_CMD) python manage.py runserver $(HOST_URL):$(HOST_PORT) + +.PHONY: shell +shell: + $(EXEC_CMD) $(POETRY_CMD) python manage.py shell_plus .PHONY: test test: - $(EXEC_CMD) poetry run python manage.py test --buffer --parallel + $(EXEC_CMD) $(POETRY_CMD) python manage.py test --buffer --parallel .PHONY: test-unit test-unit: - $(EXEC_CMD) poetry run python manage.py test --settings config.settings_test + $(EXEC_CMD) $(POETRY_CMD) python manage.py test --settings config.settings_test diff --git a/README.md b/README.md index dae4af92..24fd6c54 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,8 @@ python -c "from django.core.management.utils import get_random_secret_key; print ### En local #### Installer poetry s’il ne l’est pas -Cf. la [documentation de poetry](https://python-poetry.org/docs/#installation) +- Cf. la [documentation de poetry](https://python-poetry.org/docs/#installation) +- mettre la variable d’environnement `USE_POETRY` à `1` dans le fichier `.env` #### Installer le projet diff --git a/blog/locale/fr/LC_MESSAGES/django.po b/blog/locale/fr/LC_MESSAGES/django.po index 7c79d6a9..f54abfca 100644 --- a/blog/locale/fr/LC_MESSAGES/django.po +++ b/blog/locale/fr/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-10 14:32+0100\n" +"POT-Creation-Date: 2025-01-17 18:35+0100\n" "PO-Revision-Date: 2024-12-10 14:33+0100\n" "Last-Translator: \n" "Language-Team: \n" @@ -18,19 +18,19 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Poedit 3.4.2\n" -#: blog/blocks.py:9 blog/models.py:39 blog/models.py:67 +#: blog/blocks.py:9 blog/models.py:41 blog/models.py:69 msgid "Name" msgstr "Nom" -#: blog/blocks.py:10 blog/models.py:68 +#: blog/blocks.py:10 blog/models.py:70 msgid "Role" msgstr "Fonction" -#: blog/blocks.py:11 blog/models.py:56 +#: blog/blocks.py:11 blog/models.py:58 msgid "Organization" msgstr "Organisation" -#: blog/blocks.py:12 blog/models.py:70 +#: blog/blocks.py:12 blog/models.py:72 msgid "Contact info" msgstr "Informations de contact" @@ -42,124 +42,125 @@ msgstr "Texte riche" msgid "Contact card" msgstr "Carte contact" -#: blog/models.py:95 +#: blog/models.py:97 msgid "Person" msgstr "Personne" -#: blog/models.py:107 +#: blog/models.py:109 msgid "Category name" msgstr "Nom de la catégorie" -#: blog/models.py:114 +#: blog/models.py:116 msgid "Parent category" msgstr "Catégorie parente" -#: blog/models.py:121 +#: blog/models.py:123 msgid "Description" msgstr "Description" -#: blog/models.py:122 +#: blog/models.py:124 msgid "Displayed on the top of the category page" msgstr "Affiché en haut de la page de la catégorie" -#: blog/models.py:128 +#: blog/models.py:130 msgid "Text displayed at the end of every page in the category" msgstr "Texte affiché à la fin de chaque page de la catégorie" -#: blog/models.py:155 +#: blog/models.py:157 msgid "Parent category cannot be self." msgstr "La catégorie ne peut être sa propre parente." -#: blog/models.py:157 +#: blog/models.py:159 msgid "Cannot have circular Parents." msgstr "Il est impossible d’avoir des parents circulaires." -#: blog/models.py:166 blog/models.py:185 +#: blog/models.py:168 blog/models.py:187 msgid "Category" msgstr "Catégorie" -#: blog/models.py:167 blog/models.py:279 blog/models.py:461 blog/models.py:468 -#: blog/models.py:519 +#: blog/models.py:169 blog/models.py:287 blog/models.py:469 blog/models.py:476 +#: blog/models.py:527 msgid "Categories" msgstr "Catégories" -#: blog/models.py:201 +#: blog/models.py:203 msgid "Posts per page" msgstr "Articles par page" -#: blog/models.py:207 +#: blog/models.py:209 msgid "Post limit in the RSS/Atom feeds" msgstr "Nombre d’articles dans les flux RSS/Atom" -#: blog/models.py:211 blog/templates/blog/blog_index_page.html:85 +#: blog/models.py:213 blog/templates/blog/blog_index_page.html:85 msgid "Filter by category" msgstr "Filtrer par catégorie" -#: blog/models.py:212 blog/templates/blog/blog_index_page.html:102 +#: blog/models.py:214 blog/templates/blog/blog_index_page.html:102 msgid "Filter by tag" msgstr "Filtrer par étiquette" -#: blog/models.py:213 blog/templates/blog/blog_index_page.html:119 +#: blog/models.py:215 blog/templates/blog/blog_index_page.html:119 msgid "Filter by author" msgstr "Filtrer par auteur" -#: blog/models.py:215 blog/templates/blog/blog_index_page.html:134 +#: blog/models.py:217 blog/templates/blog/blog_index_page.html:134 msgid "Filter by source" msgstr "Filtrer par source" -#: blog/models.py:215 +#: blog/models.py:217 msgid "The source is the organization of the post author" -msgstr "La source est l’organisation à laquelle appartient l’auteur de l’article" +msgstr "" +"La source est l’organisation à laquelle appartient l’auteur de l’article" -#: blog/models.py:228 +#: blog/models.py:230 msgid "Show filters" msgstr "Afficher les filtres" -#: blog/models.py:235 +#: blog/models.py:243 msgid "Blog index" msgstr "Index de blog" -#: blog/models.py:262 blog/models.py:484 blog/models.py:498 +#: blog/models.py:270 blog/models.py:492 blog/models.py:506 #: blog/templates/blog/tags_list_page.html:20 msgid "Tags" msgstr "Étiquettes" -#: blog/models.py:267 +#: blog/models.py:275 #, python-format msgid "Posts tagged with %(tag)s" msgstr "Articles avec l’étiquette %(tag)s" -#: blog/models.py:284 +#: blog/models.py:292 #, python-format msgid "Posts in category %(category)s" msgstr "Articles dans la catégorie %(category)s" -#: blog/models.py:294 blog/models.py:296 blog/models.py:306 blog/models.py:309 +#: blog/models.py:302 blog/models.py:304 blog/models.py:314 blog/models.py:317 msgid "Posts written by" msgstr "Articles écrits par" -#: blog/models.py:314 +#: blog/models.py:322 #, python-format msgid "Posts published in %(year)s" msgstr "Articles publiés en %(year)s" -#: blog/models.py:521 +#: blog/models.py:529 msgid "Post date" msgstr "Date de publication" -#: blog/models.py:523 +#: blog/models.py:531 msgid "Author entries can be created in Snippets > Persons" msgstr "Les auteurs peuvent être créés via Fragments > Personnes" -#: blog/models.py:542 +#: blog/models.py:550 msgid "Scheduled publishing" msgstr "Publication planifiée" -#: blog/models.py:550 +#: blog/models.py:558 msgid "Tags and Categories" msgstr "Étiquettes et Catégories" -#: blog/models.py:566 +#: blog/models.py:585 msgid "Blog page" msgstr "Page de blog" @@ -183,7 +184,7 @@ msgstr "Flux RSS pour la catégorie" msgid "RSS feed" msgstr "Flux RSS" -#: blog/templates/blog/blog_entry_page.html:79 +#: blog/templates/blog/blog_entry_page.html:80 msgid "Posted by:" msgstr "Écrit par :" diff --git a/blog/migrations/0055_merge_20250117_1145.py b/blog/migrations/0055_merge_20250117_1145.py new file mode 100644 index 00000000..d9f5072d --- /dev/null +++ b/blog/migrations/0055_merge_20250117_1145.py @@ -0,0 +1,13 @@ +# Generated by Django 5.0.9 on 2025-01-17 10:45 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("blog", "0041_alter_blogentrypage_body_alter_blogindexpage_body_and_more"), + ("blog", "0054_alter_blogentrypage_body"), + ] + + operations = [] diff --git a/blog/migrations/0056_alter_blogentrypage_body.py b/blog/migrations/0056_alter_blogentrypage_body.py new file mode 100644 index 00000000..bc6bea80 --- /dev/null +++ b/blog/migrations/0056_alter_blogentrypage_body.py @@ -0,0 +1,1996 @@ +# Generated by Django 5.0.9 on 2025-01-17 10:45 + +import wagtail.fields +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("blog", "0055_merge_20250117_1145"), + ] + + operations = [ + migrations.AlterField( + model_name="blogentrypage", + name="body", + field=wagtail.fields.StreamField( + [ + ("paragraph", 0), + ("image", 9), + ("imageandtext", 23), + ("alert", 28), + ("text_cta", 38), + ("video", 45), + ("transcription", 46), + ("badges_list", 51), + ("tags_list", 57), + ("link", 58), + ("accordions", 61), + ("callout", 65), + ("highlight", 68), + ("quote", 73), + ("stepper", 79), + ("card", 99), + ("tile", 109), + ("tabs", 143), + ("markdown", 122), + ("iframe", 127), + ("html", 128), + ("separator", 131), + ("multicolumns", 169), + ("item_grid", 171), + ("fullwidthbackground", 184), + ("fullwidthbackgroundwithsidemenu", 191), + ("subpageslist", 192), + ("blog_recent_entries", 175), + ("events_recent_entries", 194), + ("three_cards", 212), + ("numeric_direction_card", 213), + ("spacer", 178), + ("stylized_column", 167), + ("highlight_cards", 217), + ("vertical_highlight_cards", 219), + ("slider", 182), + ], + blank=True, + block_lookup={ + 0: ("wagtail.blocks.RichTextBlock", (), {"label": "Rich text"}), + 1: ("wagtail.blocks.CharBlock", (), {"label": "Title", "required": False}), + 2: ( + "wagtail.blocks.ChoiceBlock", + [], + { + "choices": [ + ("h2", "Heading 2"), + ("h3", "Heading 3"), + ("h4", "Heading 4"), + ("h5", "Heading 5"), + ("h6", "Heading 6"), + ("p", "Paragraph"), + ], + "help_text": "Adapt to the page layout. Defaults to heading 3.", + "label": "Heading level", + "required": False, + }, + ), + 3: ("wagtail.images.blocks.ImageChooserBlock", (), {"label": "Image"}), + 4: ( + "wagtail.blocks.CharBlock", + (), + {"label": "Alternative text (textual description of the image)", "required": False}, + ), + 5: ( + "wagtail.blocks.ChoiceBlock", + [], + { + "choices": [ + ("fr-content-media--sm", "Small"), + ("", "Medium"), + ("fr-content-media--lg", "Large"), + ], + "label": "Witdh", + "required": False, + }, + ), + 6: ( + "wagtail.blocks.ChoiceBlock", + [], + { + "choices": [ + ("fr-ratio-32x9", "32x9"), + ("fr-ratio-16x9", "16x9"), + ("fr-ratio-3x2", "3x2"), + ("fr-ratio-4x3", "4x3"), + ("fr-ratio-1x1", "1x1"), + ("fr-ratio-3x4", "3x4"), + ("fr-ratio-2x3", "2x3"), + ], + "label": "Image ratio", + "required": False, + }, + ), + 7: ("wagtail.blocks.CharBlock", (), {"label": "Caption", "required": False}), + 8: ("wagtail.blocks.URLBlock", (), {"label": "Link", "required": False}), + 9: ( + "wagtail.blocks.StructBlock", + [ + [ + ("title", 1), + ("heading_tag", 2), + ("image", 3), + ("alt", 4), + ("width", 5), + ("image_ratio", 6), + ("caption", 7), + ("url", 8), + ] + ], + {}, + ), + 10: ("wagtail.images.blocks.ImageBlock", [], {"label": "Image"}), + 11: ( + "wagtail.blocks.ChoiceBlock", + [], + { + "choices": [("left", "Left"), ("right", "Right")], + "label": "Side where the image is displayed", + }, + ), + 12: ( + "wagtail.blocks.ChoiceBlock", + [], + {"choices": [("3", "3/12"), ("5", "5/12"), ("6", "6/12")], "label": "Image width"}, + ), + 13: ( + "wagtail.blocks.PageChooserBlock", + (), + { + "help_text": "Link to a page of this site. Use either this, the document, or the external URL parameter.", + "label": "Page", + "required": False, + }, + ), + 14: ( + "wagtail.documents.blocks.DocumentChooserBlock", + (), + { + "help_text": "Use either this, the external URL or the page parameter.", + "label": "Document", + "required": False, + }, + ), + 15: ( + "wagtail.blocks.URLBlock", + (), + { + "help_text": "Use either this, the document or the page parameter.", + "label": "External URL", + "required": False, + }, + ), + 16: ("wagtail.blocks.CharBlock", (), {"label": "Link label", "required": False}), + 17: ( + "wagtail.blocks.ChoiceBlock", + [], + { + "choices": [ + ("", "No icon"), + ("fr-icon-arrow-right-line fr-link--icon-right", "Icon on the right side"), + ("fr-icon-arrow-right-line fr-link--icon-left", "Icon on the left side"), + ], + "help_text": "Only used for internal links.", + "label": "Icon", + "required": False, + }, + ), + 18: ( + "wagtail.blocks.ChoiceBlock", + [], + { + "choices": [("fr-link--sm", "Small"), ("", "Medium"), ("fr-link--lg", "Large")], + "label": "Size", + "required": False, + }, + ), + 19: ( + "wagtail.blocks.StructBlock", + [ + [ + ("page", 13), + ("document", 14), + ("external_url", 15), + ("text", 16), + ("icon", 17), + ("size", 18), + ] + ], + { + "help_text": "The link is shown at the bottom of the text block, with an arrow", + "label": "Link", + "required": False, + }, + ), + 20: ( + "wagtail.blocks.CharBlock", + (), + { + "group": "obsolete", + "help_text": "This field is obsolete and will be removed in the near future. Please replace with the Link field above.", + "label": "Link label (obsolete)", + "required": False, + }, + ), + 21: ( + "wagtail.blocks.PageChooserBlock", + (), + { + "group": "obsolete", + "help_text": "This field is obsolete and will be removed in the near future. Please replace with the Link field above.", + "label": "Internal link (obsolete)", + "required": False, + }, + ), + 22: ( + "wagtail.blocks.URLBlock", + (), + { + "group": "obsolete", + "help_text": "This field is obsolete and will be removed in the near future. Please replace with the Link field above.", + "label": "Link URL (obsolete)", + "required": False, + }, + ), + 23: ( + "wagtail.blocks.StructBlock", + [ + [ + ("image", 10), + ("image_side", 11), + ("image_ratio", 12), + ("text", 0), + ("link", 19), + ("link_label", 20), + ("page", 21), + ("link_url", 22), + ] + ], + {"label": "Image and text"}, + ), + 24: ("wagtail.blocks.CharBlock", (), {"label": "Message title", "required": False}), + 25: ("wagtail.blocks.TextBlock", (), {"label": "Message text", "required": False}), + 26: ( + "wagtail.blocks.ChoiceBlock", + [], + { + "choices": [ + ("error", "Error"), + ("success", "Success"), + ("info", "Information"), + ("warning", "Warning"), + ], + "label": "Message type", + }, + ), + 27: ( + "wagtail.blocks.ChoiceBlock", + [], + { + "choices": [ + ("h2", "Heading 2"), + ("h3", "Heading 3"), + ("h4", "Heading 4"), + ("h5", "Heading 5"), + ("h6", "Heading 6"), + ("p", "Paragraph"), + ], + "help_text": "Adapt to the page layout. Defaults to heading 3.", + "label": "Heading level", + }, + ), + 28: ( + "wagtail.blocks.StructBlock", + [[("title", 24), ("description", 25), ("level", 26), ("heading_tag", 27)]], + {"label": "Alert message"}, + ), + 29: ("wagtail.blocks.RichTextBlock", (), {"label": "Rich text", "required": False}), + 30: ( + "wagtail.blocks.ChoiceBlock", + [], + { + "choices": [ + ("fr-btn", "Primary"), + ("fr-btn fr-btn--secondary", "Secundary"), + ("fr-btn fr-btn--tertiary", "Tertiary"), + ("fr-btn fr-btn--tertiary-no-outline", "Tertiary without border"), + ], + "label": "Button type", + "required": False, + }, + ), + 31: ("content_manager.blocks.IconPickerBlock", (), {"label": "Icon", "required": False}), + 32: ( + "wagtail.blocks.ChoiceBlock", + [], + { + "choices": [("fr-btn--icon-left", "Left"), ("fr-btn--icon-right", "Right")], + "label": "Icon side", + "required": False, + }, + ), + 33: ( + "wagtail.blocks.StructBlock", + [ + [ + ("page", 13), + ("document", 14), + ("external_url", 15), + ("text", 16), + ("button_type", 30), + ("icon_class", 31), + ("icon_side", 32), + ] + ], + {"label": "Button"}, + ), + 34: ( + "wagtail.blocks.StreamBlock", + [[("button", 33)]], + { + "help_text": "Please use only one primary button.\n If you use icons, use them on all buttons and align them on the same side.", + "label": "Buttons", + }, + ), + 35: ( + "wagtail.blocks.StreamBlock", + [[("buttons", 34)]], + {"label": "Call-to-action buttons", "max_num": 1, "required": False}, + ), + 36: ( + "wagtail.blocks.CharBlock", + (), + { + "help_text": "This field is obsolete and will be removed in the near future. Please replace with the CTA buttons above.", + "label": "Call to action label (obsolete)", + "required": False, + }, + ), + 37: ( + "wagtail.blocks.CharBlock", + (), + { + "help_text": "This field is obsolete and will be removed in the near future. Please replace with the CTA buttons above.", + "label": "Link (obsolete)", + "required": False, + }, + ), + 38: ( + "wagtail.blocks.StructBlock", + [[("text", 29), ("cta_buttons", 35), ("cta_label", 36), ("cta_url", 37)]], + {"label": "Text and call to action"}, + ), + 39: ("wagtail.blocks.CharBlock", (), {"label": "Video title", "required": False}), + 40: ( + "wagtail.blocks.URLBlock", + (), + { + "help_text": "Use embed format, with a version that doesn't require a consent banner if available. (e.g. : https://www.youtube-nocookie.com/embed/gLzXOViPX-0) For Youtube, use Embed video and check Enable privacy-enhanced mode.", + "label": "Video URL", + }, + ), + 41: ( + "wagtail.blocks.ChoiceBlock", + [], + { + "choices": [("fr-ratio-16x9", "16x9"), ("fr-ratio-4x3", "4x3"), ("fr-ratio-1x1", "1x1")], + "label": "Video ratio", + "required": False, + }, + ), + 42: ( + "wagtail.blocks.CharBlock", + (), + {"default": "Transcription", "label": "Title", "required": False}, + ), + 43: ("wagtail.blocks.RichTextBlock", (), {"label": "Transcription content", "required": False}), + 44: ( + "wagtail.blocks.StructBlock", + [[("title", 42), ("content", 43)]], + {"label": "Transcription", "required": False}, + ), + 45: ( + "wagtail.blocks.StructBlock", + [ + [ + ("title", 39), + ("caption", 7), + ("url", 40), + ("width", 5), + ("video_ratio", 41), + ("transcription", 44), + ] + ], + {"label": "Video"}, + ), + 46: ("wagtail.blocks.StructBlock", [[("title", 42), ("content", 43)]], {"label": "Transcription"}), + 47: ("wagtail.blocks.CharBlock", (), {"label": "Badge label", "required": False}), + 48: ( + "wagtail.blocks.ChoiceBlock", + [], + { + "choices": [ + ("", [("new", "New"), ("grey", "Grey")]), + ( + "System colors", + [ + ("info", "Info"), + ("success", "Success"), + ("warning", "Warning"), + ("error", "Error"), + ], + ), + ( + "Illustration colors", + [ + ("green-tilleul-verveine", "Tilleul verveine"), + ("green-bourgeon", "Bourgeon"), + ("green-emeraude", "Émeraude"), + ("green-menthe", "Menthe"), + ("green-archipel", "Archipel"), + ("blue-ecume", "Écume"), + ("blue-cumulus", "Cumulus"), + ("purple-glycine", "Glycine"), + ("pink-macaron", "Macaron"), + ("pink-tuile", "Tuile"), + ("yellow-tournesol", "Tournesol"), + ("yellow-moutarde", "Moutarde"), + ("orange-terre-battue", "Terre battue"), + ("brown-cafe-creme", "Café crème"), + ("brown-caramel", "Caramel"), + ("brown-opera", "Opéra"), + ("beige-gris-galet", "Gris galet"), + ], + ), + ], + "label": "Badge color", + "required": False, + }, + ), + 49: ("wagtail.blocks.BooleanBlock", (), {"label": "Hide badge icon", "required": False}), + 50: ( + "wagtail.blocks.StructBlock", + [[("text", 47), ("color", 48), ("hide_icon", 49)]], + {"label": "Badge"}, + ), + 51: ("wagtail.blocks.StreamBlock", [[("badge", 50)]], {"label": "Badge list"}), + 52: ("wagtail.blocks.CharBlock", (), {"label": "Title"}), + 53: ("wagtail.blocks.BooleanBlock", (), {"label": "Small tag", "required": False}), + 54: ( + "wagtail.blocks.ChoiceBlock", + [], + { + "choices": [ + ("green-tilleul-verveine", "Tilleul verveine"), + ("green-bourgeon", "Bourgeon"), + ("green-emeraude", "Émeraude"), + ("green-menthe", "Menthe"), + ("green-archipel", "Archipel"), + ("blue-ecume", "Écume"), + ("blue-cumulus", "Cumulus"), + ("purple-glycine", "Glycine"), + ("pink-macaron", "Macaron"), + ("pink-tuile", "Tuile"), + ("yellow-tournesol", "Tournesol"), + ("yellow-moutarde", "Moutarde"), + ("orange-terre-battue", "Terre battue"), + ("brown-cafe-creme", "Café crème"), + ("brown-caramel", "Caramel"), + ("brown-opera", "Opéra"), + ("beige-gris-galet", "Gris galet"), + ], + "help_text": "Only for clickable tags", + "label": "Tag color", + "required": False, + }, + ), + 55: ( + "wagtail.blocks.StructBlock", + [[("page", 13), ("document", 14), ("external_url", 15)]], + {"required": False}, + ), + 56: ( + "wagtail.blocks.StructBlock", + [[("label", 52), ("is_small", 53), ("color", 54), ("icon_class", 31), ("link", 55)]], + {"label": "Tag"}, + ), + 57: ("wagtail.blocks.StreamBlock", [[("tag", 56)]], {"label": "Tag list"}), + 58: ( + "wagtail.blocks.StructBlock", + [ + [ + ("page", 13), + ("document", 14), + ("external_url", 15), + ("text", 16), + ("icon", 17), + ("size", 18), + ] + ], + {"label": "Single link"}, + ), + 59: ("wagtail.blocks.RichTextBlock", (), {"label": "Content"}), + 60: ( + "wagtail.blocks.StructBlock", + [[("title", 52), ("content", 59)]], + {"label": "Accordion", "max_num": 15, "min_num": 1}, + ), + 61: ( + "wagtail.blocks.StreamBlock", + [[("title", 52), ("accordion", 60)]], + {"group": "DSFR components", "label": "Accordions"}, + ), + 62: ( + "wagtail.blocks.RichTextBlock", + (), + { + "features": [ + "bold", + "italic", + "link", + "document-link", + "superscript", + "subscript", + "strikethrough", + ], + "label": "Content", + "required": False, + }, + ), + 63: ( + "wagtail.blocks.StructBlock", + [ + [ + ("page", 13), + ("document", 14), + ("external_url", 15), + ("text", 16), + ("button_type", 30), + ("icon_class", 31), + ("icon_side", 32), + ] + ], + {"label": "Button", "required": False}, + ), + 64: ( + "wagtail.blocks.ChoiceBlock", + [], + { + "choices": [ + ("green-tilleul-verveine", "Tilleul verveine"), + ("green-bourgeon", "Bourgeon"), + ("green-emeraude", "Émeraude"), + ("green-menthe", "Menthe"), + ("green-archipel", "Archipel"), + ("blue-ecume", "Écume"), + ("blue-cumulus", "Cumulus"), + ("purple-glycine", "Glycine"), + ("pink-macaron", "Macaron"), + ("pink-tuile", "Tuile"), + ("yellow-tournesol", "Tournesol"), + ("yellow-moutarde", "Moutarde"), + ("orange-terre-battue", "Terre battue"), + ("brown-cafe-creme", "Café crème"), + ("brown-caramel", "Caramel"), + ("brown-opera", "Opéra"), + ("beige-gris-galet", "Gris galet"), + ], + "label": "Color", + "required": False, + }, + ), + 65: ( + "wagtail.blocks.StructBlock", + [ + [ + ("title", 1), + ("heading_tag", 27), + ("icon_class", 31), + ("text", 62), + ("button", 63), + ("color", 64), + ] + ], + {"group": "DSFR components", "label": "Callout"}, + ), + 66: ( + "wagtail.blocks.RichTextBlock", + (), + { + "features": [ + "bold", + "italic", + "link", + "document-link", + "superscript", + "subscript", + "strikethrough", + ], + "label": "Content", + }, + ), + 67: ( + "wagtail.blocks.ChoiceBlock", + [], + { + "choices": [("fr-text--sm", "Small"), ("", "Medium"), ("fr-text--lg", "Large")], + "label": "Size", + "required": False, + }, + ), + 68: ( + "wagtail.blocks.StructBlock", + [[("text", 66), ("color", 64), ("size", 67)]], + {"group": "DSFR components", "label": "Highlight"}, + ), + 69: ("wagtail.images.blocks.ImageChooserBlock", (), {"label": "Image", "required": False}), + 70: ("wagtail.blocks.CharBlock", (), {"label": "Quote"}), + 71: ("wagtail.blocks.CharBlock", (), {"label": "Author name", "required": False}), + 72: ("wagtail.blocks.CharBlock", (), {"label": "Author title", "required": False}), + 73: ( + "wagtail.blocks.StructBlock", + [[("image", 69), ("quote", 70), ("author_name", 71), ("author_title", 72), ("color", 64)]], + {"group": "DSFR components", "label": "Quote"}, + ), + 74: ( + "wagtail.blocks.IntegerBlock", + (), + {"label": "Number of steps", "max_value": 8, "min_value": 1}, + ), + 75: ("wagtail.blocks.IntegerBlock", (), {"label": "Current step", "max_value": 8, "min_value": 1}), + 76: ("wagtail.blocks.TextBlock", (), {"label": "Detail", "required": False}), + 77: ("wagtail.blocks.StructBlock", [[("title", 52), ("detail", 76)]], {"label": "Step"}), + 78: ("wagtail.blocks.StreamBlock", [[("step", 77)]], {"label": "Steps"}), + 79: ( + "wagtail.blocks.StructBlock", + [[("title", 52), ("total", 74), ("current", 75), ("steps", 78)]], + {"group": "DSFR components", "label": "Stepper"}, + ), + 80: ( + "wagtail.blocks.ChoiceBlock", + [], + { + "choices": [("fr-card--horizontal-tier", "1/3"), ("fr-card--horizontal-half", "50/50")], + "label": "Image ratio", + "required": False, + }, + ), + 81: ( + "wagtail.blocks.StreamBlock", + [[("badge", 50)]], + { + "help_text": "Only used if the card has an image.", + "label": "Image area badge", + "max_num": 1, + "required": False, + }, + ), + 82: ( + "wagtail.blocks.StructBlock", + [[("page", 13), ("document", 14), ("external_url", 15)]], + {"label": "Link", "required": False}, + ), + 83: ( + "wagtail.blocks.URLBlock", + (), + { + "group": "target", + "help_text": "This field is obsolete and will be removed in the near future. Please replace with the Link field above.", + "label": "Link (obsolete)", + "required": False, + }, + ), + 84: ( + "wagtail.documents.blocks.DocumentChooserBlock", + (), + { + "group": "target", + "help_text": "This field is obsolete and will be removed in the near future. Please replace with the Link field above.", + "label": "or Document (obsolete)", + "required": False, + }, + ), + 85: ("wagtail.blocks.CharBlock", (), {"label": "Top detail: text", "required": False}), + 86: ( + "content_manager.blocks.IconPickerBlock", + (), + {"label": "Top detail: icon", "required": False}, + ), + 87: ("wagtail.blocks.StreamBlock", [[("badge", 50)]], {}), + 88: ("wagtail.blocks.StreamBlock", [[("tag", 56)]], {}), + 89: ( + "wagtail.blocks.StreamBlock", + [[("badges", 87), ("tags", 88)]], + {"label": "Top detail: badges or tags", "max_num": 1, "required": False}, + ), + 90: ( + "wagtail.blocks.CharBlock", + (), + { + "help_text": "Incompatible with the bottom call-to-action. If the card links to a downloadable document, the values are pre-filled.", + "label": "Bottom detail: text", + "required": False, + }, + ), + 91: ( + "content_manager.blocks.IconPickerBlock", + (), + {"label": "Bottom detail: icon", "required": False}, + ), + 92: ( + "wagtail.blocks.StructBlock", + [[("page", 13), ("document", 14), ("external_url", 15), ("text", 16)]], + {"label": "Link"}, + ), + 93: ("wagtail.blocks.StreamBlock", [[("link", 92)]], {}), + 94: ( + "wagtail.blocks.StreamBlock", + [[("links", 93), ("buttons", 34)]], + { + "help_text": "Incompatible with the bottom detail text.", + "label": "Bottom call-to-action: links or buttons", + "max_num": 1, + "required": False, + }, + ), + 95: ("wagtail.blocks.BooleanBlock", (), {"label": "Card with grey background", "required": False}), + 96: ("wagtail.blocks.BooleanBlock", (), {"label": "Card without background", "required": False}), + 97: ("wagtail.blocks.BooleanBlock", (), {"label": "Card without border", "required": False}), + 98: ("wagtail.blocks.BooleanBlock", (), {"label": "Card with a shadow", "required": False}), + 99: ( + "wagtail.blocks.StructBlock", + [ + [ + ("title", 52), + ("heading_tag", 27), + ("description", 62), + ("image", 69), + ("image_ratio", 80), + ("image_badge", 81), + ("link", 82), + ("url", 83), + ("document", 84), + ("top_detail_text", 85), + ("top_detail_icon", 86), + ("top_detail_badges_tags", 89), + ("bottom_detail_text", 90), + ("bottom_detail_icon", 91), + ("call_to_action", 94), + ("grey_background", 95), + ("no_background", 96), + ("no_border", 97), + ("shadow", 98), + ] + ], + {"group": "DSFR components", "label": "Horizontal card"}, + ), + 100: ( + "wagtail.blocks.RichTextBlock", + (), + { + "features": ["bold", "italic", "superscript", "subscript", "strikethrough"], + "label": "Content", + "required": False, + }, + ), + 101: ( + "wagtail.images.blocks.ImageChooserBlock", + (), + {"help_text": "Prefer SVG files.", "label": "Image", "required": False}, + ), + 102: ( + "wagtail.blocks.CharBlock", + (), + { + "help_text": "If the tile links to a downloadable document, the values are pre-filled.", + "label": "Detail text", + "required": False, + }, + ), + 103: ("wagtail.blocks.BooleanBlock", (), {"label": "Small tile", "required": False}), + 104: ( + "wagtail.blocks.BooleanBlock", + (), + {"label": "Tile with grey background", "required": False}, + ), + 105: ("wagtail.blocks.BooleanBlock", (), {"label": "Tile without background", "required": False}), + 106: ("wagtail.blocks.BooleanBlock", (), {"label": "Tile without border", "required": False}), + 107: ("wagtail.blocks.BooleanBlock", (), {"label": "Tile with a shadow", "required": False}), + 108: ("wagtail.blocks.BooleanBlock", (), {"label": "Horizontal tile", "required": False}), + 109: ( + "wagtail.blocks.StructBlock", + [ + [ + ("title", 52), + ("heading_tag", 27), + ("description", 100), + ("image", 101), + ("link", 82), + ("top_detail_badges_tags", 89), + ("detail_text", 102), + ("is_small", 103), + ("grey_background", 104), + ("no_background", 105), + ("no_border", 106), + ("shadow", 107), + ("is_horizontal", 108), + ] + ], + {"group": "DSFR components", "label": "Tile"}, + ), + 110: ( + "wagtail.blocks.StructBlock", + [ + [ + ("title", 1), + ("heading_tag", 2), + ("image", 3), + ("alt", 4), + ("width", 5), + ("image_ratio", 6), + ("caption", 7), + ("url", 8), + ] + ], + {"label": "Image"}, + ), + 111: ( + "wagtail.blocks.ChoiceBlock", + [], + { + "choices": [ + ("h2", "Heading 2"), + ("h3", "Heading 3"), + ("h4", "Heading 4"), + ("h5", "Heading 5"), + ], + "help_text": "Adapt to the page layout. Defaults to heading 2.", + "label": "Heading level", + "required": False, + }, + ), + 112: ( + "wagtail.blocks.PageChooserBlock", + (), + {"label": "Blog", "page_type": ["blog.BlogIndexPage"]}, + ), + 113: ( + "wagtail.blocks.IntegerBlock", + (), + { + "default": 3, + "label": "Number of entries", + "max_value": 8, + "min_value": 1, + "required": False, + }, + ), + 114: ( + "wagtail.snippets.blocks.SnippetChooserBlock", + ("blog.Category",), + {"label": "Filter by category", "required": False}, + ), + 115: ( + "wagtail.snippets.blocks.SnippetChooserBlock", + ("content_manager.Tag",), + {"label": "Filter by tag", "required": False}, + ), + 116: ( + "wagtail.snippets.blocks.SnippetChooserBlock", + ("blog.Person",), + {"label": "Filter by author", "required": False}, + ), + 117: ( + "wagtail.snippets.blocks.SnippetChooserBlock", + ("blog.Organization",), + { + "help_text": "The source is the organization of the post author", + "label": "Filter by source", + "required": False, + }, + ), + 118: ( + "wagtail.blocks.BooleanBlock", + (), + {"default": False, "label": "Show filters", "required": False}, + ), + 119: ( + "wagtail.blocks.StructBlock", + [ + [ + ("title", 1), + ("heading_tag", 111), + ("blog", 112), + ("entries_count", 113), + ("category_filter", 114), + ("tag_filter", 115), + ("author_filter", 116), + ("source_filter", 117), + ("show_filters", 118), + ] + ], + {"group": "Website structure", "label": "Blog recent entries"}, + ), + 120: ( + "wagtail.blocks.PageChooserBlock", + (), + {"label": "Event calendar", "page_type": ["events.EventsIndexPage"]}, + ), + 121: ( + "wagtail.blocks.StructBlock", + [ + [ + ("title", 1), + ("heading_tag", 111), + ("index_page", 120), + ("entries_count", 113), + ("category_filter", 114), + ("tag_filter", 115), + ("author_filter", 116), + ("source_filter", 117), + ("show_filters", 118), + ] + ], + {"group": "Website structure", "label": "Event calendar recent entries"}, + ), + 122: ("wagtailmarkdown.blocks.MarkdownBlock", (), {"group": "Expert syntax", "label": "Markdown"}), + 123: ( + "wagtail.blocks.CharBlock", + (), + { + "help_text": "Accessibility: The title should describe, in a clear and concise manner, the embedded content.", + "label": "Title", + }, + ), + 124: ( + "wagtail.blocks.URLBlock", + (), + { + "help_text": "Example for Tally: https://tally.so/embed/w2jMRa", + "label": "URL of the iframe", + }, + ), + 125: ("wagtail.blocks.IntegerBlock", (), {"label": "Height (in pixels)"}), + 126: ( + "wagtail.blocks.CharBlock", + (), + { + "help_text": "For example: \"allow='geolocation'\".", + "label": "Parameters", + "required": False, + }, + ), + 127: ( + "wagtail.blocks.StructBlock", + [[("title", 123), ("url", 124), ("height", 125), ("parameters", 126)]], + {"group": "Expert syntax", "label": "Iframe"}, + ), + 128: ( + "wagtail.blocks.RawHTMLBlock", + (), + { + "group": "Expert syntax", + "help_text": "Warning: Use HTML block with caution. Malicious code can compromise the security of the site.", + "readonly": True, + }, + ), + 129: ( + "wagtail.blocks.IntegerBlock", + (), + {"default": 3, "label": "Top margin", "max_value": 15, "min_value": 0}, + ), + 130: ( + "wagtail.blocks.IntegerBlock", + (), + {"default": 3, "label": "Bottom margin", "max_value": 15, "min_value": 0}, + ), + 131: ( + "wagtail.blocks.StructBlock", + [[("top_margin", 129), ("bottom_margin", 130)]], + {"group": "Page structure", "label": "Separator"}, + ), + 132: ( + "wagtail.blocks.CharBlock", + (), + { + "help_text": "Incompatible with the bottom call-to-action.", + "label": "Bottom detail: text", + "required": False, + }, + ), + 133: ( + "wagtail.blocks.StructBlock", + [ + [ + ("title", 52), + ("heading_tag", 27), + ("description", 62), + ("image", 69), + ("image_ratio", 6), + ("image_badge", 81), + ("link", 82), + ("url", 83), + ("document", 84), + ("top_detail_text", 85), + ("top_detail_icon", 86), + ("top_detail_badges_tags", 89), + ("bottom_detail_text", 132), + ("bottom_detail_icon", 91), + ("call_to_action", 94), + ("grey_background", 95), + ("no_background", 96), + ("no_border", 97), + ("shadow", 98), + ] + ], + {"group": "DSFR components", "label": "Vertical card"}, + ), + 134: ( + "wagtail.snippets.blocks.SnippetChooserBlock", + ("blog.Person",), + { + "help_text": "Optional, all values can be manually specified or overriden below", + "label": "Person", + "required": False, + }, + ), + 135: ("wagtail.blocks.CharBlock", (), {"label": "Name", "max_length": 255, "required": False}), + 136: ("wagtail.blocks.CharBlock", (), {"label": "Role", "max_length": 255, "required": False}), + 137: ( + "wagtail.blocks.CharBlock", + (), + {"label": "Organization", "max_length": 255, "required": False}, + ), + 138: ( + "wagtail.blocks.CharBlock", + (), + {"label": "Contact info", "max_length": 500, "required": False}, + ), + 139: ("wagtail.blocks.StreamBlock", [[("tag", 56)]], {"label": "Tags", "required": False}), + 140: ( + "wagtail.blocks.StructBlock", + [ + [ + ("contact", 134), + ("link", 82), + ("heading_tag", 2), + ("name", 135), + ("role", 136), + ("organization", 137), + ("contact_info", 138), + ("image", 69), + ("tags", 139), + ] + ], + {"group": "Extra components", "label": "Contact card"}, + ), + 141: ( + "wagtail.blocks.StreamBlock", + [ + [ + ("text", 0), + ("image", 110), + ("imageandtext", 23), + ("alert", 28), + ("text_cta", 38), + ("video", 45), + ("transcription", 46), + ("badges_list", 51), + ("tags_list", 57), + ("accordions", 61), + ("callout", 65), + ("highlight", 68), + ("quote", 73), + ("link", 58), + ("tile", 109), + ("blog_recent_entries", 119), + ("events_recent_entries", 121), + ("stepper", 79), + ("markdown", 122), + ("iframe", 127), + ("html", 128), + ("separator", 131), + ("card", 133), + ("contact_card", 140), + ] + ], + {"label": "Content"}, + ), + 142: ( + "wagtail.blocks.StructBlock", + [[("title", 52), ("content", 141)]], + {"label": "Tab", "max_num": 15, "min_num": 1}, + ), + 143: ( + "wagtail.blocks.StreamBlock", + [[("tabs", 142)]], + {"group": "DSFR components", "label": "Tabs"}, + ), + 144: ( + "wagtail.images.blocks.ImageChooserBlock", + (), + {"label": "Background image", "required": False}, + ), + 145: ( + "wagtail.blocks.ChoiceBlock", + [], + { + "choices": [ + ("Primary colors", [("blue-france", "Blue France"), ("red-marianne", "Red Marianne")]), + ("Neutral colors", [("grey", "Grey")]), + ( + "Illustration colors", + [ + ("green-tilleul-verveine", "Tilleul verveine"), + ("green-bourgeon", "Bourgeon"), + ("green-emeraude", "Émeraude"), + ("green-menthe", "Menthe"), + ("green-archipel", "Archipel"), + ("blue-ecume", "Écume"), + ("blue-cumulus", "Cumulus"), + ("purple-glycine", "Glycine"), + ("pink-macaron", "Macaron"), + ("pink-tuile", "Tuile"), + ("yellow-tournesol", "Tournesol"), + ("yellow-moutarde", "Moutarde"), + ("orange-terre-battue", "Terre battue"), + ("brown-cafe-creme", "Café crème"), + ("brown-caramel", "Caramel"), + ("brown-opera", "Opéra"), + ("beige-gris-galet", "Gris galet"), + ], + ), + ], + "help_text": "Uses the French Design System colors", + "label": "Background color", + "required": False, + }, + ), + 146: ( + "wagtail.blocks.RegexBlock", + (), + { + "error_messages": {"invalid": "Incorrect color format, must be #fff or #f5f5f5"}, + "help_text": "This field is obsolete and will be removed in the near future. Replace it with the background color.", + "label": "Background color, hexadecimal format (obsolete)", + "regex": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$", + "required": False, + }, + ), + 147: ( + "wagtail.blocks.ChoiceBlock", + [], + { + "choices": [ + ("h2", "Heading 2"), + ("h3", "Heading 3"), + ("h4", "Heading 4"), + ("h5", "Heading 5"), + ("h6", "Heading 6"), + ("p", "Paragraph"), + ], + "help_text": "Adapt to the page layout. Defaults to heading 2.", + "label": "Heading level", + "required": False, + }, + ), + 148: ( + "wagtail.blocks.RawHTMLBlock", + (), + { + "group": "Expert syntax", + "help_text": "Warning: Use HTML block with caution. Malicious code can compromise the security of the site.", + "required": False, + }, + ), + 149: ( + "wagtail.blocks.ChoiceBlock", + [], + { + "choices": [ + ("3", "3/12"), + ("4", "4/12"), + ("5", "5/12"), + ("6", "6/12"), + ("7", "7/12"), + ("8", "8/12"), + ("9", "9/12"), + ], + "help_text": "The total width of all columns should be 12.", + "label": "Column width", + "required": False, + }, + ), + 150: ( + "wagtail.blocks.ChoiceBlock", + [], + { + "choices": [ + ("h1", "Heading 1"), + ("h2", "Heading 2"), + ("h3", "Heading 3"), + ("h4", "Heading 4"), + ("h5", "Heading 5"), + ("h6", "Heading 6"), + ], + "help_text": "Defaults to heading 3.", + "label": "Heading size level", + "required": False, + }, + ), + 151: ( + "wagtail.blocks.ChoiceBlock", + [], + { + "choices": [ + ("Primary colors", [("blue-france", "Blue France"), ("red-marianne", "Red Marianne")]), + ("Neutral colors", [("grey", "Grey")]), + ( + "Illustration colors", + [ + ("green-tilleul-verveine", "Tilleul verveine"), + ("green-bourgeon", "Bourgeon"), + ("green-emeraude", "Émeraude"), + ("green-menthe", "Menthe"), + ("green-archipel", "Archipel"), + ("blue-ecume", "Écume"), + ("blue-cumulus", "Cumulus"), + ("purple-glycine", "Glycine"), + ("pink-macaron", "Macaron"), + ("pink-tuile", "Tuile"), + ("yellow-tournesol", "Tournesol"), + ("yellow-moutarde", "Moutarde"), + ("orange-terre-battue", "Terre battue"), + ("brown-cafe-creme", "Café crème"), + ("brown-caramel", "Caramel"), + ("brown-opera", "Opéra"), + ("beige-gris-galet", "Gris galet"), + ], + ), + ], + "help_text": "Uses the French Design System colors", + "label": "Title color", + "required": False, + }, + ), + 152: ( + "wagtail.blocks.StructBlock", + [[("title", 1), ("heading_tag", 2), ("heading_size", 150), ("title_color_class", 151)]], + {"group": "Numerique components", "label": "Title"}, + ), + 153: ("wagtail.images.blocks.ImageChooserBlock", (), {"label": "Image", "required": True}), + 154: ("wagtail.blocks.CharBlock", (), {"label": "Alt text", "required": True}), + 155: ("wagtail.blocks.RichTextBlock", (), {"label": "Text", "required": True}), + 156: ("wagtail.blocks.PageChooserBlock", (), {"label": "Main link", "required": True}), + 157: ( + "wagtail.blocks.URLBlock", + (), + {"help_text": "Link to an external URL", "label": "Secondary link", "required": False}, + ), + 158: ( + "wagtail.blocks.StructBlock", + [[("image", 153), ("alt", 154), ("text", 155), ("main_link", 156), ("secondary_link", 157)]], + {"group": "Numerique components", "label": "Numeric direction card", "required": False}, + ), + 159: ( + "wagtail.blocks.ChoiceBlock", + [], + {"choices": [("3", "3/12"), ("4", "4/12"), ("6", "6/12")], "label": "Column width"}, + ), + 160: ( + "wagtail.blocks.StreamBlock", + [ + [ + ("text", 0), + ("image", 110), + ("imageandtext", 23), + ("alert", 28), + ("text_cta", 38), + ("video", 45), + ("transcription", 46), + ("badges_list", 51), + ("tags_list", 57), + ("accordions", 61), + ("callout", 65), + ("highlight", 68), + ("quote", 73), + ("link", 58), + ("tile", 109), + ("blog_recent_entries", 119), + ("events_recent_entries", 121), + ("stepper", 79), + ("markdown", 122), + ("iframe", 127), + ("html", 128), + ("separator", 131), + ("card", 133), + ("contact_card", 140), + ] + ], + {"label": "Items"}, + ), + 161: ( + "wagtail.blocks.StructBlock", + [[("column_width", 159), ("items", 160)]], + {"group": "Page structure", "label": "Item grid"}, + ), + 162: ( + "wagtail.blocks.StreamBlock", + [ + [ + ("text", 0), + ("image", 110), + ("imageandtext", 23), + ("alert", 28), + ("text_cta", 38), + ("video", 45), + ("transcription", 46), + ("badges_list", 51), + ("tags_list", 57), + ("accordions", 61), + ("callout", 65), + ("highlight", 68), + ("quote", 73), + ("link", 58), + ("tile", 109), + ("blog_recent_entries", 119), + ("events_recent_entries", 121), + ("stepper", 79), + ("markdown", 122), + ("iframe", 127), + ("html", 148), + ("separator", 131), + ("card", 133), + ("contact_card", 140), + ("title", 152), + ("numeric_direction_card", 158), + ("horizontal_card", 99), + ("item_grid", 161), + ] + ], + {"label": "Column content"}, + ), + 163: ( + "wagtail.blocks.StructBlock", + [[("width", 149), ("content", 162)]], + {"group": "Page structure", "label": "Custom adjustable column", "required": False}, + ), + 164: ("wagtail.blocks.BooleanBlock", (), {"label": "Border", "required": False}), + 165: ("wagtail.blocks.BooleanBlock", (), {"label": "Center content", "required": False}), + 166: ( + "wagtail.blocks.StreamBlock", + [ + [ + ("text", 0), + ("image", 110), + ("imageandtext", 23), + ("alert", 28), + ("text_cta", 38), + ("video", 45), + ("transcription", 46), + ("badges_list", 51), + ("tags_list", 57), + ("accordions", 61), + ("callout", 65), + ("highlight", 68), + ("quote", 73), + ("link", 58), + ("tile", 109), + ("blog_recent_entries", 119), + ("events_recent_entries", 121), + ("stepper", 79), + ("markdown", 122), + ("iframe", 127), + ("html", 148), + ("separator", 131), + ("card", 133), + ("contact_card", 140), + ("title", 152), + ("numeric_direction_card", 158), + ("horizontal_card", 99), + ("item_grid", 161), + ] + ], + {"label": "Content"}, + ), + 167: ( + "wagtail.blocks.StructBlock", + [[("bg_color_class", 145), ("border", 164), ("center_content", 165), ("content", 166)]], + {"group": "Numerique components", "label": "Stylized column"}, + ), + 168: ( + "wagtail.blocks.StreamBlock", + [ + [ + ("text", 0), + ("image", 110), + ("imageandtext", 23), + ("alert", 28), + ("text_cta", 38), + ("video", 45), + ("transcription", 46), + ("badges_list", 51), + ("tags_list", 57), + ("accordions", 61), + ("callout", 65), + ("highlight", 68), + ("quote", 73), + ("link", 58), + ("tile", 109), + ("blog_recent_entries", 119), + ("events_recent_entries", 121), + ("stepper", 79), + ("markdown", 122), + ("iframe", 127), + ("html", 148), + ("separator", 131), + ("card", 133), + ("column", 163), + ("numeric_direction_card", 158), + ("horizontal_card", 99), + ("stylized_column", 167), + ] + ], + {"group": "Page structure", "label": "Columns"}, + ), + 169: ( + "wagtail.blocks.StructBlock", + [ + [ + ("bg_image", 144), + ("bg_color_class", 145), + ("bg_color", 146), + ("title", 1), + ("heading_tag", 147), + ("columns", 168), + ] + ], + {"group": "Page structure", "label": "Multi columns"}, + ), + 170: ( + "wagtail.blocks.StreamBlock", + [ + [ + ("text", 0), + ("image", 110), + ("imageandtext", 23), + ("alert", 28), + ("text_cta", 38), + ("video", 45), + ("transcription", 46), + ("badges_list", 51), + ("tags_list", 57), + ("accordions", 61), + ("callout", 65), + ("highlight", 68), + ("quote", 73), + ("link", 58), + ("tile", 109), + ("blog_recent_entries", 119), + ("events_recent_entries", 121), + ("stepper", 79), + ("markdown", 122), + ("iframe", 127), + ("html", 148), + ("separator", 131), + ("card", 133), + ("contact_card", 140), + ("title", 152), + ("numeric_direction_card", 158), + ("horizontal_card", 99), + ("item_grid", 161), + ] + ], + {"label": "Items"}, + ), + 171: ( + "wagtail.blocks.StructBlock", + [[("column_width", 159), ("items", 170)]], + {"group": "Page structure", "label": "Item grid"}, + ), + 172: ( + "wagtail.blocks.PageChooserBlock", + (), + {"label": "Blog", "page_type": ["numerique_gouv.NumeriqueBlogIndexPage"]}, + ), + 173: ( + "wagtail.blocks.IntegerBlock", + (), + { + "default": 3, + "label": "Number of entries", + "max_value": 12, + "min_value": 1, + "required": False, + }, + ), + 174: ( + "wagtail.snippets.blocks.SnippetChooserBlock", + ("numerique_gouv.PageTag",), + {"label": "Filter by tag", "required": False}, + ), + 175: ( + "wagtail.blocks.StructBlock", + [ + [ + ("title", 1), + ("heading_tag", 111), + ("blog", 172), + ("entries_count", 173), + ("category_filter", 114), + ("tag_filter", 115), + ("author_filter", 116), + ("source_filter", 117), + ("show_filters", 118), + ("page_tag_filter", 174), + ] + ], + {"group": "Website structure", "label": "Blog recent entries"}, + ), + 176: ( + "wagtail.blocks.StructBlock", + [ + [ + ("bg_image", 144), + ("bg_color_class", 145), + ("bg_color", 146), + ("title", 1), + ("heading_tag", 147), + ("columns", 168), + ] + ], + {"group": "Page structure", "label": "Multi columns", "required": False}, + ), + 177: ( + "wagtail.blocks.DecimalBlock", + (), + {"help_text": "In rem", "label": "Margin", "required": False}, + ), + 178: ( + "wagtail.blocks.StructBlock", + [[("marginTop", 177)]], + {"group": "Page structure", "label": "Spacer"}, + ), + 179: ( + "wagtail.blocks.ChoiceBlock", + [], + { + "choices": [ + ("h2", "Heading 2"), + ("h3", "Heading 3"), + ("h4", "Heading 4"), + ("h5", "Heading 5"), + ("h6", "Heading 6"), + ("p", "Paragraph"), + ], + "help_text": "Adapt to the page layout. Defaults to heading 2.", + "label": "Title heading level", + "required": False, + }, + ), + 180: ( + "wagtail.blocks.ChoiceBlock", + [], + { + "choices": [ + ("h1", "Heading 1"), + ("h2", "Heading 2"), + ("h3", "Heading 3"), + ("h4", "Heading 4"), + ("h5", "Heading 5"), + ("h6", "Heading 6"), + ], + "help_text": "Defaults to heading 2.", + "label": "Title heading size level", + "required": False, + }, + ), + 181: ( + "wagtail.blocks.StreamBlock", + [ + [ + ("text", 0), + ("image", 110), + ("imageandtext", 23), + ("alert", 28), + ("text_cta", 38), + ("video", 45), + ("transcription", 46), + ("badges_list", 51), + ("tags_list", 57), + ("accordions", 61), + ("callout", 65), + ("highlight", 68), + ("quote", 73), + ("link", 58), + ("tile", 109), + ("blog_recent_entries", 119), + ("events_recent_entries", 121), + ("stepper", 79), + ("markdown", 122), + ("iframe", 127), + ("html", 148), + ("separator", 131), + ("card", 133), + ("contact_card", 140), + ("title", 152), + ("numeric_direction_card", 158), + ("horizontal_card", 99), + ("item_grid", 161), + ] + ], + {"label": "Slider blocks"}, + ), + 182: ( + "wagtail.blocks.StructBlock", + [[("title", 1), ("title_heading_tag", 179), ("title_heading_size", 180), ("blocks", 181)]], + {"group": "Numerique components", "label": "Slider"}, + ), + 183: ( + "wagtail.blocks.StreamBlock", + [ + [ + ("text", 0), + ("image", 110), + ("imageandtext", 23), + ("alert", 28), + ("text_cta", 38), + ("video", 45), + ("transcription", 46), + ("badges_list", 51), + ("tags_list", 57), + ("accordions", 61), + ("callout", 65), + ("highlight", 68), + ("quote", 73), + ("link", 58), + ("tile", 109), + ("blog_recent_entries", 175), + ("events_recent_entries", 121), + ("stepper", 79), + ("markdown", 122), + ("iframe", 127), + ("html", 148), + ("separator", 131), + ("image_and_text", 23), + ("card", 99), + ("tabs", 143), + ("item_grid", 161), + ("numeric_direction_card", 158), + ("custom_ajustable_column", 163), + ("horizontal_card", 99), + ("multicolumns", 176), + ("stylized_column", 167), + ("spacer", 178), + ("custom_item_grid", 171), + ("slider", 182), + ] + ], + {"label": "Content"}, + ), + 184: ( + "wagtail.blocks.StructBlock", + [[("bg_image", 144), ("bg_color_class", 145), ("content", 183)]], + {"group": "Page structure", "label": "Full width background"}, + ), + 185: ( + "wagtail.blocks.StreamBlock", + [ + [ + ("text", 0), + ("image", 110), + ("imageandtext", 23), + ("alert", 28), + ("text_cta", 38), + ("video", 45), + ("transcription", 46), + ("badges_list", 51), + ("tags_list", 57), + ("accordions", 61), + ("callout", 65), + ("highlight", 68), + ("quote", 73), + ("link", 58), + ("tile", 109), + ("blog_recent_entries", 119), + ("events_recent_entries", 121), + ("stepper", 79), + ("markdown", 122), + ("iframe", 127), + ("html", 128), + ("separator", 131), + ("image_and_text", 23), + ("card", 99), + ("tabs", 143), + ("item_grid", 161), + ] + ], + {"label": "Main content"}, + ), + 186: ("wagtail.blocks.CharBlock", (), {"label": "Side menu title", "required": False}), + 187: ( + "wagtail.blocks.RawHTMLBlock", + (), + { + "help_text": "Warning: Use HTML block with caution. Malicious code can compromise the security of the site.", + "label": "HTML", + }, + ), + 188: ("wagtail.blocks.PageChooserBlock", (), {"label": "Parent page"}), + 189: ("wagtail.blocks.StructBlock", [[("page", 188)]], {"label": "Page tree"}), + 190: ( + "wagtail.blocks.StreamBlock", + [[("html", 187), ("pagetree", 189)]], + {"label": "Side menu content"}, + ), + 191: ( + "wagtail.blocks.StructBlock", + [ + [ + ("bg_image", 144), + ("bg_color_class", 145), + ("main_content", 185), + ("sidemenu_title", 186), + ("sidemenu_content", 190), + ] + ], + {"group": "Page structure", "label": "Full width background with side menu"}, + ), + 192: ( + "wagtail.blocks.static_block.StaticBlock", + (), + { + "admin_text": "A simple, alphabetical list of the subpages of the current page.", + "group": "Website structure", + "label": "Subpages list", + "template": "content_manager/blocks/subpages_list.html", + }, + ), + 193: ( + "wagtail.blocks.PageChooserBlock", + (), + {"label": "Event calendar", "page_type": ["numerique_gouv.NumeriqueEventsIndexPage"]}, + ), + 194: ( + "wagtail.blocks.StructBlock", + [ + [ + ("title", 1), + ("heading_tag", 111), + ("index_page", 193), + ("entries_count", 113), + ("category_filter", 114), + ("tag_filter", 115), + ("author_filter", 116), + ("source_filter", 117), + ("show_filters", 118), + ] + ], + {"group": "Website structure", "label": "custom Events recent entries"}, + ), + 195: ( + "wagtail.images.blocks.ImageChooserBlock", + (), + {"label": "Main card image", "required": True}, + ), + 196: ("wagtail.blocks.TextBlock", (), {"label": "Main card title", "required": True}), + 197: ("wagtail.blocks.RichTextBlock", (), {"label": "Main card text", "required": True}), + 198: ( + "wagtail.blocks.PageChooserBlock", + (), + {"help_text": "Link to a page", "label": "Main card page link", "required": False}, + ), + 199: ( + "wagtail.blocks.URLBlock", + (), + {"help_text": "Link to an external URL", "label": "Main card URL link", "required": False}, + ), + 200: ( + "wagtail.images.blocks.ImageChooserBlock", + (), + {"label": "Top right card image", "required": False}, + ), + 201: ("wagtail.blocks.TextBlock", (), {"label": "Top right card title", "required": False}), + 202: ("wagtail.blocks.RichTextBlock", (), {"label": "Top right card text", "required": True}), + 203: ("wagtail.blocks.TextBlock", (), {"label": "Top right card button label", "required": False}), + 204: ( + "wagtail.blocks.PageChooserBlock", + (), + {"help_text": "Link to a page", "label": "Top right card page link", "required": False}, + ), + 205: ( + "wagtail.blocks.URLBlock", + (), + { + "help_text": "Link to an external URL", + "label": "Top right card URL link", + "required": False, + }, + ), + 206: ( + "wagtail.images.blocks.ImageChooserBlock", + (), + {"label": "Bottom right card image", "required": False}, + ), + 207: ("wagtail.blocks.TextBlock", (), {"label": "Bottom right card title", "required": False}), + 208: ("wagtail.blocks.RichTextBlock", (), {"label": "Bottom right card text", "required": True}), + 209: ( + "wagtail.blocks.TextBlock", + (), + {"label": "Bottom right card button label", "required": False}, + ), + 210: ( + "wagtail.blocks.PageChooserBlock", + (), + {"help_text": "Link to a page", "label": "Bottom right card page link", "required": False}, + ), + 211: ( + "wagtail.blocks.URLBlock", + (), + { + "help_text": "Link to an external URL", + "label": "Bottom right card URL link", + "required": False, + }, + ), + 212: ( + "wagtail.blocks.StructBlock", + [ + [ + ("main_image", 195), + ("main_title", 196), + ("main_text", 197), + ("main_page_link", 198), + ("main_url_link", 199), + ("top_right_image", 200), + ("top_right_title", 201), + ("top_right_text", 202), + ("top_right_button_label", 203), + ("top_right_page_link", 204), + ("top_right_url_link", 205), + ("bottom_right_image", 206), + ("bottom_right_title", 207), + ("bottom_right_text", 208), + ("bottom_right_button_label", 209), + ("bottom_right_page_link", 210), + ("bottom_right_url_link", 211), + ] + ], + {"group": "Numerique components", "label": "Headline cards"}, + ), + 213: ( + "wagtail.blocks.StructBlock", + [[("image", 153), ("alt", 154), ("text", 155), ("main_link", 156), ("secondary_link", 157)]], + {"group": "Numerique components", "label": "Numeric direction card"}, + ), + 214: ( + "wagtail.blocks.StructBlock", + [ + [ + ("title", 52), + ("heading_tag", 27), + ("description", 62), + ("image", 69), + ("image_ratio", 80), + ("image_badge", 81), + ("link", 82), + ("url", 83), + ("document", 84), + ("top_detail_text", 85), + ("top_detail_icon", 86), + ("top_detail_badges_tags", 89), + ("bottom_detail_text", 90), + ("bottom_detail_icon", 91), + ("call_to_action", 94), + ("grey_background", 95), + ("no_background", 96), + ("no_border", 97), + ("shadow", 98), + ] + ], + {"abel": "Main card", "group": "DSFR components", "lrequired": True}, + ), + 215: ( + "wagtail.blocks.StructBlock", + [ + [ + ("title", 52), + ("heading_tag", 27), + ("description", 62), + ("image", 69), + ("image_ratio", 6), + ("image_badge", 81), + ("link", 82), + ("url", 83), + ("document", 84), + ("top_detail_text", 85), + ("top_detail_icon", 86), + ("top_detail_badges_tags", 89), + ("bottom_detail_text", 132), + ("bottom_detail_icon", 91), + ("call_to_action", 94), + ("grey_background", 95), + ("no_background", 96), + ("no_border", 97), + ("shadow", 98), + ] + ], + {"abel": "Secondary card", "group": "DSFR components", "lrequired": True}, + ), + 216: ( + "wagtail.blocks.StructBlock", + [ + [ + ("title", 52), + ("heading_tag", 27), + ("description", 62), + ("image", 69), + ("image_ratio", 6), + ("image_badge", 81), + ("link", 82), + ("url", 83), + ("document", 84), + ("top_detail_text", 85), + ("top_detail_icon", 86), + ("top_detail_badges_tags", 89), + ("bottom_detail_text", 132), + ("bottom_detail_icon", 91), + ("call_to_action", 94), + ("grey_background", 95), + ("no_background", 96), + ("no_border", 97), + ("shadow", 98), + ] + ], + {"group": "DSFR components", "label": "Tertiary card", "required": True}, + ), + 217: ( + "wagtail.blocks.StructBlock", + [[("main_card", 214), ("secondary_card", 215), ("tertiary_card", 216)]], + {"group": "Numerique components", "label": "Highlight cards"}, + ), + 218: ( + "wagtail.blocks.StructBlock", + [ + [ + ("title", 52), + ("heading_tag", 27), + ("description", 62), + ("image", 69), + ("image_ratio", 6), + ("image_badge", 81), + ("link", 82), + ("url", 83), + ("document", 84), + ("top_detail_text", 85), + ("top_detail_icon", 86), + ("top_detail_badges_tags", 89), + ("bottom_detail_text", 132), + ("bottom_detail_icon", 91), + ("call_to_action", 94), + ("grey_background", 95), + ("no_background", 96), + ("no_border", 97), + ("shadow", 98), + ] + ], + {"abel": "Main card", "group": "DSFR components", "lrequired": True}, + ), + 219: ( + "wagtail.blocks.StructBlock", + [[("main_card", 218), ("secondary_card", 215), ("tertiary_card", 216)]], + {"group": "Numerique components", "label": "Vertical Highlight cards"}, + ), + }, + ), + ), + ] diff --git a/blog/migrations/0058_merge_20250124_1118.py b/blog/migrations/0058_merge_20250124_1118.py new file mode 100644 index 00000000..ff9d1843 --- /dev/null +++ b/blog/migrations/0058_merge_20250124_1118.py @@ -0,0 +1,13 @@ +# Generated by Django 5.0.9 on 2025-01-24 10:18 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("blog", "0056_alter_blogentrypage_body"), + ("blog", "0057_alter_blogentrypage_body_alter_blogindexpage_body"), + ] + + operations = [] diff --git a/blog/tests/test_views.py b/blog/tests/test_views.py index 4be9d8d9..bf626b5b 100644 --- a/blog/tests/test_views.py +++ b/blog/tests/test_views.py @@ -107,6 +107,4 @@ def test_deep_blog_works(self): self.assertPageIsRenderable(new_blog_post) response = self.client.get(deep_blog_index_page.url + "rss/") - print(deep_blog_index_page.url + "rss/") - print(response) self.assertEqual(response.status_code, 200) diff --git a/content_manager/blocks.py b/content_manager/blocks.py index 9c5f7159..6038de1e 100644 --- a/content_manager/blocks.py +++ b/content_manager/blocks.py @@ -757,8 +757,6 @@ def enlarge_link(self): if len(call_to_action): enlarge = False elif len(tags): - print(tags) - print(tags.raw_data) tags_list = tags.raw_data for tag in tags_list: if ( diff --git a/content_manager/locale/fr/LC_MESSAGES/django.po b/content_manager/locale/fr/LC_MESSAGES/django.po index 5f89f9a7..01f8287e 100644 --- a/content_manager/locale/fr/LC_MESSAGES/django.po +++ b/content_manager/locale/fr/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-12 12:25+0100\n" +"POT-Creation-Date: 2025-01-24 14:07+0100\n" "PO-Revision-Date: 2024-12-19 11:43+0100\n" "Last-Translator: \n" "Language-Team: \n" @@ -26,13 +26,13 @@ msgstr "Afficher le titre sur l’image d’en-tête ?" msgid "Header image" msgstr "Image d’en-tête" -#: content_manager/abstract.py:39 content_manager/blocks.py:1026 -#: content_manager/blocks.py:1067 content_manager/blocks.py:1100 +#: content_manager/abstract.py:39 content_manager/blocks.py:1036 +#: content_manager/blocks.py:1077 content_manager/blocks.py:1110 msgid "Background color" msgstr "Couleur de fond" -#: content_manager/abstract.py:43 content_manager/blocks.py:1028 -#: content_manager/blocks.py:1069 content_manager/blocks.py:1102 +#: content_manager/abstract.py:43 content_manager/blocks.py:1038 +#: content_manager/blocks.py:1079 content_manager/blocks.py:1112 msgid "Uses the French Design System colors" msgstr "Utilise les couleurs du système de design de l'État" @@ -147,7 +147,7 @@ msgstr "Libellé du lien" #: content_manager/blocks.py:107 content_manager/blocks.py:282 #: content_manager/blocks.py:390 content_manager/blocks.py:533 -#: content_manager/blocks.py:594 content_manager/blocks.py:782 +#: content_manager/blocks.py:594 content_manager/blocks.py:780 msgid "Link" msgstr "Lien" @@ -214,9 +214,9 @@ msgstr "Badge" #: content_manager/blocks.py:427 content_manager/blocks.py:451 #: content_manager/blocks.py:493 content_manager/blocks.py:568 #: content_manager/blocks.py:623 content_manager/blocks.py:632 -#: content_manager/blocks.py:681 content_manager/blocks.py:880 -#: content_manager/blocks.py:910 content_manager/blocks.py:983 -#: content_manager/blocks.py:1039 content_manager/models.py:517 +#: content_manager/blocks.py:681 content_manager/blocks.py:878 +#: content_manager/blocks.py:908 content_manager/blocks.py:993 +#: content_manager/blocks.py:1049 content_manager/models.py:517 msgid "Title" msgstr "Titre" @@ -239,28 +239,28 @@ msgstr "Tag" #: content_manager/blocks.py:265 content_manager/blocks.py:380 #: content_manager/blocks.py:439 content_manager/blocks.py:453 -#: content_manager/blocks.py:570 content_manager/blocks.py:786 -#: content_manager/blocks.py:882 content_manager/blocks.py:912 -#: content_manager/blocks.py:1041 +#: content_manager/blocks.py:570 content_manager/blocks.py:784 +#: content_manager/blocks.py:880 content_manager/blocks.py:910 +#: content_manager/blocks.py:1051 msgid "Heading level" msgstr "Niveau de titre" #: content_manager/blocks.py:268 content_manager/blocks.py:383 #: content_manager/blocks.py:442 content_manager/blocks.py:456 -#: content_manager/blocks.py:574 content_manager/blocks.py:790 +#: content_manager/blocks.py:574 content_manager/blocks.py:788 msgid "Adapt to the page layout. Defaults to heading 3." msgstr "À adapter à la structure de la page. Par défaut en-tête 3." #: content_manager/blocks.py:270 content_manager/blocks.py:386 #: content_manager/blocks.py:423 content_manager/blocks.py:460 -#: content_manager/blocks.py:474 content_manager/blocks.py:984 -#: content_manager/blocks.py:1071 +#: content_manager/blocks.py:474 content_manager/blocks.py:994 +#: content_manager/blocks.py:1081 msgid "Content" msgstr "Contenu" #: content_manager/blocks.py:271 content_manager/blocks.py:388 #: content_manager/blocks.py:513 content_manager/blocks.py:576 -#: content_manager/blocks.py:602 content_manager/blocks.py:942 +#: content_manager/blocks.py:602 content_manager/blocks.py:940 msgid "Image" msgstr "Image" @@ -456,7 +456,7 @@ msgid "Image width" msgstr "Largeur de l’image" #: content_manager/blocks.py:531 content_manager/blocks.py:642 -#: content_manager/blocks.py:941 content_manager/blocks.py:1114 +#: content_manager/blocks.py:939 content_manager/blocks.py:1124 msgid "Rich text" msgstr "Texte avec mise en forme" @@ -488,8 +488,8 @@ msgstr "Largeur" msgid "Caption" msgstr "Légende" -#: content_manager/blocks.py:603 content_manager/blocks.py:948 -#: content_manager/blocks.py:1122 +#: content_manager/blocks.py:603 content_manager/blocks.py:951 +#: content_manager/blocks.py:1137 msgid "Quote" msgstr "Citation" @@ -560,66 +560,66 @@ msgstr "" msgid "Video ratio" msgstr "Ratio de la vidéo" -#: content_manager/blocks.py:713 content_manager/blocks.py:944 -#: content_manager/blocks.py:1124 +#: content_manager/blocks.py:713 content_manager/blocks.py:945 +#: content_manager/blocks.py:1130 msgid "Transcription" msgstr "Transcription" -#: content_manager/blocks.py:777 +#: content_manager/blocks.py:775 msgid "Person" msgstr "Personne" -#: content_manager/blocks.py:778 +#: content_manager/blocks.py:776 msgid "Optional, all values can be manually specified or overriden below" msgstr "" "Optionnel, toutes les valeurs peuvent être spécifiées ou surchargées ci-" "dessous" -#: content_manager/blocks.py:792 content_manager/models.py:549 +#: content_manager/blocks.py:790 content_manager/models.py:549 msgid "Name" msgstr "Nom" -#: content_manager/blocks.py:793 +#: content_manager/blocks.py:791 msgid "Role" msgstr "Fonction" -#: content_manager/blocks.py:794 +#: content_manager/blocks.py:792 msgid "Organization" msgstr "Organisation" -#: content_manager/blocks.py:795 +#: content_manager/blocks.py:793 msgid "Contact info" msgstr "Informations de contact" -#: content_manager/blocks.py:797 content_manager/models.py:94 +#: content_manager/blocks.py:795 content_manager/models.py:94 #: content_manager/models.py:136 content_manager/models.py:150 #: content_manager/models.py:156 #: content_manager/templates/content_manager/tags_list_page.html:49 -#: content_manager/views.py:46 content_manager/views.py:77 +#: content_manager/views.py:77 content_manager/views.py:108 msgid "Tags" msgstr "Étiquettes" -#: content_manager/blocks.py:886 content_manager/blocks.py:916 -#: content_manager/blocks.py:1045 +#: content_manager/blocks.py:884 content_manager/blocks.py:914 +#: content_manager/blocks.py:1055 msgid "Adapt to the page layout. Defaults to heading 2." msgstr "À adapter à la structure de la page. Par défaut en-tête 2." -#: content_manager/blocks.py:888 +#: content_manager/blocks.py:886 msgid "Blog" msgstr "Blog" -#: content_manager/blocks.py:890 content_manager/blocks.py:920 +#: content_manager/blocks.py:888 content_manager/blocks.py:918 msgid "Number of entries" msgstr "Nombre d’articles" -#: content_manager/blocks.py:892 content_manager/blocks.py:922 +#: content_manager/blocks.py:890 content_manager/blocks.py:920 #: content_manager/templates/content_manager/blocks/blog_recent_entries.html:11 #: content_manager/templates/content_manager/blocks/events_recent_entries.html:11 #: content_manager/templates/content_manager/catalog_index_page.html:77 msgid "Filter by category" msgstr "Filtrer par catégorie" -#: content_manager/blocks.py:893 content_manager/blocks.py:923 +#: content_manager/blocks.py:891 content_manager/blocks.py:921 #: content_manager/models.py:56 #: content_manager/templates/content_manager/blocks/blog_recent_entries.html:28 #: content_manager/templates/content_manager/blocks/events_recent_entries.html:28 @@ -627,151 +627,192 @@ msgstr "Filtrer par catégorie" msgid "Filter by tag" msgstr "Filtrer par étiquette" -#: content_manager/blocks.py:894 content_manager/blocks.py:924 +#: content_manager/blocks.py:892 content_manager/blocks.py:922 #: content_manager/templates/content_manager/blocks/blog_recent_entries.html:45 #: content_manager/templates/content_manager/blocks/events_recent_entries.html:45 #: content_manager/templates/content_manager/catalog_index_page.html:111 msgid "Filter by author" msgstr "Filtrer par auteur" -#: content_manager/blocks.py:897 content_manager/blocks.py:927 +#: content_manager/blocks.py:895 content_manager/blocks.py:925 #: content_manager/templates/content_manager/blocks/blog_recent_entries.html:60 #: content_manager/templates/content_manager/blocks/events_recent_entries.html:60 #: content_manager/templates/content_manager/catalog_index_page.html:126 msgid "Filter by source" msgstr "Filtrer par source" -#: content_manager/blocks.py:898 content_manager/blocks.py:928 +#: content_manager/blocks.py:896 content_manager/blocks.py:926 msgid "The source is the organization of the post author" msgstr "" "La source est l’organisation à laquelle appartient l’auteur de l’article" -#: content_manager/blocks.py:901 content_manager/blocks.py:931 +#: content_manager/blocks.py:899 content_manager/blocks.py:929 #: content_manager/models.py:64 msgid "Show filters" msgstr "Afficher les filtres" -#: content_manager/blocks.py:918 +#: content_manager/blocks.py:916 msgid "Event calendar" msgstr "Agenda" -#: content_manager/blocks.py:943 content_manager/blocks.py:1123 +#: content_manager/blocks.py:941 content_manager/blocks.py:1065 +#: content_manager/blocks.py:1126 +msgid "Image and text" +msgstr "Image et texte" + +#: content_manager/blocks.py:942 content_manager/blocks.py:1127 +msgid "Alert message" +msgstr "Message d’alerte" + +#: content_manager/blocks.py:943 content_manager/blocks.py:1128 +msgid "Text and call to action" +msgstr "Texte et appel à action" + +#: content_manager/blocks.py:944 content_manager/blocks.py:1129 msgid "Video" msgstr "Vidéo" -#: content_manager/blocks.py:945 content_manager/blocks.py:1118 +#: content_manager/blocks.py:946 content_manager/blocks.py:1131 +msgid "Badge list" +msgstr "Liste de badges" + +#: content_manager/blocks.py:947 content_manager/blocks.py:1132 +msgid "Tag list" +msgstr "Liste de tags" + +#: content_manager/blocks.py:948 content_manager/blocks.py:1134 msgid "Accordions" msgstr "Accordéons" -#: content_manager/blocks.py:945 content_manager/blocks.py:946 -#: content_manager/blocks.py:947 content_manager/blocks.py:948 -#: content_manager/blocks.py:949 content_manager/blocks.py:952 -#: content_manager/blocks.py:953 content_manager/blocks.py:958 -#: content_manager/blocks.py:965 content_manager/blocks.py:1016 -#: content_manager/blocks.py:1056 content_manager/blocks.py:1057 -#: content_manager/blocks.py:1118 content_manager/blocks.py:1119 -#: content_manager/blocks.py:1121 content_manager/blocks.py:1122 -#: content_manager/blocks.py:1128 content_manager/blocks.py:1129 -#: content_manager/blocks.py:1130 content_manager/blocks.py:1131 +#: content_manager/blocks.py:948 content_manager/blocks.py:949 +#: content_manager/blocks.py:950 content_manager/blocks.py:951 +#: content_manager/blocks.py:952 content_manager/blocks.py:954 +#: content_manager/blocks.py:955 content_manager/blocks.py:960 +#: content_manager/blocks.py:975 content_manager/blocks.py:1026 +#: content_manager/blocks.py:1066 content_manager/blocks.py:1067 +#: content_manager/blocks.py:1134 content_manager/blocks.py:1135 +#: content_manager/blocks.py:1136 content_manager/blocks.py:1137 +#: content_manager/blocks.py:1138 content_manager/blocks.py:1139 +#: content_manager/blocks.py:1140 content_manager/blocks.py:1141 msgid "DSFR components" msgstr "Composants du DSFR" -#: content_manager/blocks.py:946 content_manager/blocks.py:1119 +#: content_manager/blocks.py:949 content_manager/blocks.py:1135 msgid "Callout" msgstr "Mise en avant" -#: content_manager/blocks.py:947 content_manager/blocks.py:1121 +#: content_manager/blocks.py:950 content_manager/blocks.py:1136 msgid "Highlight" msgstr "Mise en exergue" -#: content_manager/blocks.py:949 content_manager/blocks.py:958 -#: content_manager/blocks.py:1128 +#: content_manager/blocks.py:952 content_manager/blocks.py:960 +#: content_manager/blocks.py:1138 msgid "Stepper" msgstr "Indicateur d’étapes" -#: content_manager/blocks.py:950 content_manager/blocks.py:1120 -msgid "Text and call to action" -msgstr "Texte et appel à action" - -#: content_manager/blocks.py:951 content_manager/blocks.py:1127 +#: content_manager/blocks.py:953 content_manager/blocks.py:1133 msgid "Single link" msgstr "Lien isolé" -#: content_manager/blocks.py:952 content_manager/blocks.py:1133 +#: content_manager/blocks.py:954 content_manager/blocks.py:962 +#: content_manager/blocks.py:1143 msgid "Iframe" msgstr "Iframe" -#: content_manager/blocks.py:953 content_manager/blocks.py:1130 +#: content_manager/blocks.py:955 content_manager/blocks.py:1140 msgid "Tile" msgstr "Tuile" -#: content_manager/blocks.py:954 content_manager/blocks.py:1155 +#: content_manager/blocks.py:956 content_manager/blocks.py:1175 msgid "Blog recent entries" msgstr "Articles récents du blog" -#: content_manager/blocks.py:954 content_manager/blocks.py:956 -#: content_manager/blocks.py:1150 content_manager/blocks.py:1155 -#: content_manager/blocks.py:1159 +#: content_manager/blocks.py:956 content_manager/blocks.py:958 +#: content_manager/blocks.py:1170 content_manager/blocks.py:1175 +#: content_manager/blocks.py:1179 msgid "Website structure" msgstr "Structure du site" -#: content_manager/blocks.py:956 content_manager/blocks.py:1159 +#: content_manager/blocks.py:958 content_manager/blocks.py:1179 msgid "Event calendar recent entries" msgstr "Articles récents de l’agenda" -#: content_manager/blocks.py:965 content_manager/blocks.py:1016 +#: content_manager/blocks.py:961 content_manager/blocks.py:1142 +msgid "Markdown" +msgstr "Markdown" + +#: content_manager/blocks.py:961 content_manager/blocks.py:962 +#: content_manager/blocks.py:966 content_manager/blocks.py:1142 +#: content_manager/blocks.py:1143 content_manager/blocks.py:1151 +msgid "Expert syntax" +msgstr "Syntaxe experte" + +#: content_manager/blocks.py:965 content_manager/blocks.py:1099 +#: content_manager/blocks.py:1149 +msgid "" +"Warning: Use HTML block with caution. Malicious code can compromise the " +"security of the site." +msgstr "" +"Avertissement : Utilisez le bloc HTML avec précaution. Un code malveillant " +"peut compromettre la sécurité du site." + +#: content_manager/blocks.py:968 content_manager/blocks.py:1154 +msgid "Separator" +msgstr "Séparateur" + +#: content_manager/blocks.py:968 content_manager/blocks.py:1027 +#: content_manager/blocks.py:1068 content_manager/blocks.py:1154 +#: content_manager/blocks.py:1155 content_manager/blocks.py:1156 +#: content_manager/blocks.py:1157 content_manager/blocks.py:1161 +msgid "Page structure" +msgstr "Structure de la page" + +#: content_manager/blocks.py:975 content_manager/blocks.py:1026 msgid "Vertical card" msgstr "Carte verticale" -#: content_manager/blocks.py:966 +#: content_manager/blocks.py:976 msgid "Contact card" msgstr "Carte contact" -#: content_manager/blocks.py:966 +#: content_manager/blocks.py:976 msgid "Extra components" msgstr "Composants supplémentaires" -#: content_manager/blocks.py:971 content_manager/blocks.py:996 +#: content_manager/blocks.py:981 content_manager/blocks.py:1006 msgid "Column width" msgstr "Largeur de colonne" -#: content_manager/blocks.py:975 +#: content_manager/blocks.py:985 msgid "Items" msgstr "Éléments" -#: content_manager/blocks.py:988 +#: content_manager/blocks.py:998 msgid "Tab" msgstr "Onglet" -#: content_manager/blocks.py:1006 +#: content_manager/blocks.py:1016 msgid "The total width of all columns should be 12." msgstr "La largeur totale de toutes les colonnes doit être 12." -#: content_manager/blocks.py:1009 +#: content_manager/blocks.py:1019 msgid "Column content" msgstr "Contenu de la colonnne" -#: content_manager/blocks.py:1017 +#: content_manager/blocks.py:1027 msgid "Adjustable column" msgstr "Colonne ajustable" -#: content_manager/blocks.py:1017 content_manager/blocks.py:1058 -#: content_manager/blocks.py:1134 content_manager/blocks.py:1135 -#: content_manager/blocks.py:1136 content_manager/blocks.py:1137 -#: content_manager/blocks.py:1141 -msgid "Page structure" -msgstr "Structure de la page" - -#: content_manager/blocks.py:1024 content_manager/blocks.py:1065 -#: content_manager/blocks.py:1098 +#: content_manager/blocks.py:1034 content_manager/blocks.py:1075 +#: content_manager/blocks.py:1108 msgid "Background image" msgstr "Image de fond" -#: content_manager/blocks.py:1031 +#: content_manager/blocks.py:1041 msgid "Background color, hexadecimal format (obsolete)" msgstr "Couleur de fond, format hexadécimal (obsolète)" -#: content_manager/blocks.py:1034 +#: content_manager/blocks.py:1044 msgid "" "This field is obsolete and will be removed in the near future. Replace it " "with the background color." @@ -779,100 +820,63 @@ msgstr "" "Ce champ est obsolète et sera prochainement supprimé. Merci de le remplacer " "avec la couleur de fond." -#: content_manager/blocks.py:1036 +#: content_manager/blocks.py:1046 msgid "Incorrect color format, must be #fff or #f5f5f5" msgstr "Format de couleur incorrect, doit être #fff ou #f5f5f5" -#: content_manager/blocks.py:1047 +#: content_manager/blocks.py:1057 msgid "Columns" msgstr "Colonnes" -#: content_manager/blocks.py:1055 content_manager/blocks.py:1116 -msgid "Image and text" -msgstr "Image et texte" - -#: content_manager/blocks.py:1056 content_manager/blocks.py:1129 +#: content_manager/blocks.py:1066 content_manager/blocks.py:1139 msgid "Horizontal card" msgstr "Carte horizontale" -#: content_manager/blocks.py:1057 content_manager/blocks.py:1131 +#: content_manager/blocks.py:1067 content_manager/blocks.py:1141 msgid "Tabs" msgstr "Onglets" -#: content_manager/blocks.py:1058 content_manager/blocks.py:1136 +#: content_manager/blocks.py:1068 content_manager/blocks.py:1156 msgid "Item grid" msgstr "Grille d’éléments" -#: content_manager/blocks.py:1079 +#: content_manager/blocks.py:1089 msgid "Parent page" msgstr "Page parente" -#: content_manager/blocks.py:1089 content_manager/blocks.py:1172 -msgid "" -"Warning: Use HTML block with caution. Malicious code can compromise the " -"security of the site." -msgstr "" -"Avertissement : Utilisez le bloc HTML avec précaution. Un code malveillant " -"peut compromettre la sécurité du site." - -#: content_manager/blocks.py:1091 +#: content_manager/blocks.py:1101 msgid "Page tree" msgstr "Arborescence de pages" -#: content_manager/blocks.py:1104 +#: content_manager/blocks.py:1114 msgid "Main content" msgstr "Contenu principal" -#: content_manager/blocks.py:1105 +#: content_manager/blocks.py:1115 msgid "Side menu title" msgstr "Titre du menu latéral" -#: content_manager/blocks.py:1106 +#: content_manager/blocks.py:1116 msgid "Side menu content" msgstr "Contenu du menu latéral" -#: content_manager/blocks.py:1117 -msgid "Alert message" -msgstr "Message d’alerte" - -#: content_manager/blocks.py:1125 -msgid "Badge list" -msgstr "Liste de badges" - -#: content_manager/blocks.py:1126 -msgid "Tag list" -msgstr "Liste de tags" - -#: content_manager/blocks.py:1132 -msgid "Markdown" -msgstr "Markdown" - -#: content_manager/blocks.py:1132 content_manager/blocks.py:1133 -#: content_manager/blocks.py:1174 -msgid "Expert syntax" -msgstr "Syntaxe experte" - -#: content_manager/blocks.py:1134 -msgid "Separator" -msgstr "Séparateur" - -#: content_manager/blocks.py:1135 +#: content_manager/blocks.py:1155 msgid "Multiple columns" msgstr "Multi-colonnes" -#: content_manager/blocks.py:1137 +#: content_manager/blocks.py:1157 msgid "Full width background" msgstr "Fond pleine largeur" -#: content_manager/blocks.py:1141 +#: content_manager/blocks.py:1161 msgid "Full width background with side menu" msgstr "Fond pleine largeur avec menu latéral" -#: content_manager/blocks.py:1147 +#: content_manager/blocks.py:1167 msgid "Subpages list" msgstr "Liste des sous-pages" -#: content_manager/blocks.py:1148 +#: content_manager/blocks.py:1168 msgid "A simple, alphabetical list of the subpages of the current page." msgstr "" "Une liste alphabétique toute simple des sous-pages de la page actuelle." @@ -1042,8 +1046,8 @@ msgid "" "Institution brand as defined on official page." msgstr "" -"Nom de l’institution tel que défini sur la page officielle." +"Nom de l’institution tel que défini sur la page officielle." #: content_manager/models.py:253 msgid "Institution with line break (header)" @@ -1091,8 +1095,8 @@ msgid "" "design.gouv.fr/composants-et-modeles/composants/bandeau-d-information-" "importante/\">documentation." msgstr "" -"L’usage de ce bandeau est strictement encadré, voir la documentation." #: content_manager/models.py:315 @@ -1394,11 +1398,6 @@ msgstr "Afficher" msgid "Continue" msgstr "Continuer" -#: content_manager/templates/content_manager/tags_list_page.html:31 -#: content_manager/views.py:77 content_manager/views.py:108 -msgid "Tags" -msgstr "Étiquettes" - #: content_manager/templates/content_manager/widgets/dsfr-icon-picker-widget.html:9 msgid "Select icon" msgstr "Sélectionner une icône" diff --git a/content_manager/management/commands/import_dsfr_pictograms.py b/content_manager/management/commands/import_dsfr_pictograms.py index 2ca51fb3..658d3f80 100644 --- a/content_manager/management/commands/import_dsfr_pictograms.py +++ b/content_manager/management/commands/import_dsfr_pictograms.py @@ -33,7 +33,9 @@ def handle(self, *args, **kwargs): image_exists = Image.objects.filter(title=full_image_title).first() if image_exists: file_hash = image_exists.get_file_hash() - print(f"A file named {full_image_title} already exists, skipping (file_hash: {file_hash})") + self.stdout.write( + f"A file named {full_image_title} already exists, skipping (file_hash: {file_hash})" + ) else: image = import_image( full_path=os.path.join(folder_path, filename), @@ -49,4 +51,4 @@ def handle(self, *args, **kwargs): image.tags.add("DSFR") image.tags.add("Pictogrammes") image.tags.add(folder_title) - print(f"File {full_image_title} imported") + self.stdout.write(f"File {full_image_title} imported") diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index c6431b69..cd14fa6b 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-09-13 14:06+0200\n" +"POT-Creation-Date: 2025-01-17 18:35+0100\n" "PO-Revision-Date: 2024-09-04 17:00+0200\n" "Last-Translator: \n" "Language-Team: \n" @@ -331,6 +331,10 @@ msgstr "" msgid "Could not open file {filename!r}: {message}" msgstr "" +#: venv/lib/python3.12/site-packages/click/formatting.py:156 +msgid "Usage:" +msgstr "" + #: venv/lib/python3.12/site-packages/click/parser.py:231 msgid "Argument {name!r} takes {nargs} values." msgstr "" @@ -726,8 +730,8 @@ msgstr "" #: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:1550 #, python-format msgid "" -"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." -"uuuuuu]][TZ] format." +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD " +"HH:MM[:ss[.uuuuuu]][TZ] format." msgstr "" #: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:1558 @@ -753,8 +757,8 @@ msgstr "" #: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:1853 #, python-format msgid "" -"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." -"uuuuuu] format." +"“%(value)s” value has an invalid format. It must be in [DD] " +"[[HH:]MM:]ss[.uuuuuu] format." msgstr "" #: venv/lib/python3.12/site-packages/django/db/models/fields/__init__.py:1857 @@ -1592,8 +1596,8 @@ msgstr "" #: venv/lib/python3.12/site-packages/django/views/generic/dates.py:652 #, python-format msgid "" -"Future %(verbose_name_plural)s not available because %(class_name)s." -"allow_future is False." +"Future %(verbose_name_plural)s not available because " +"%(class_name)s.allow_future is False." msgstr "" #: venv/lib/python3.12/site-packages/django/views/generic/dates.py:692 diff --git a/numerique_gouv/locale/fr/LC_MESSAGES/django.mo b/numerique_gouv/locale/fr/LC_MESSAGES/django.mo index f9a9e7ea..177907ca 100644 Binary files a/numerique_gouv/locale/fr/LC_MESSAGES/django.mo and b/numerique_gouv/locale/fr/LC_MESSAGES/django.mo differ diff --git a/numerique_gouv/locale/fr/LC_MESSAGES/django.po b/numerique_gouv/locale/fr/LC_MESSAGES/django.po index d2be8f1b..5a31cf94 100644 --- a/numerique_gouv/locale/fr/LC_MESSAGES/django.po +++ b/numerique_gouv/locale/fr/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-12-13 09:49+0100\n" -"PO-Revision-Date: 2024-11-30 20:14+0100\n" +"POT-Creation-Date: 2025-01-24 14:13+0100\n" +"PO-Revision-Date: 2025-01-24 14:16+0100\n" "Last-Translator: \n" "Language-Team: \n" "Language: fr\n" @@ -125,7 +125,7 @@ msgstr "Image" msgid "Alt text" msgstr "Texte alternatif" -#: numerique_gouv/blocks.py:90 numerique_gouv/models.py:196 +#: numerique_gouv/blocks.py:90 numerique_gouv/models.py:199 msgid "Text" msgstr "Texte" @@ -231,7 +231,7 @@ msgid "Center content" msgstr "Centrer le contenu" #: numerique_gouv/blocks.py:157 numerique_gouv/blocks.py:297 -#: numerique_gouv/models.py:291 numerique_gouv/models.py:607 +#: numerique_gouv/models.py:294 numerique_gouv/models.py:624 msgid "Content" msgstr "Contenu de la colonne" @@ -368,288 +368,288 @@ msgstr "En-tête 5" msgid "Heading 6" msgstr "En-tête 6" -#: numerique_gouv/models.py:32 +#: numerique_gouv/models.py:34 msgid "Numerique page" msgstr "Page Numérique.gouv.fr" -#: numerique_gouv/models.py:39 +#: numerique_gouv/models.py:41 msgid "Offers index" msgstr "Index offres de la DINUM" -#: numerique_gouv/models.py:184 +#: numerique_gouv/models.py:187 msgid "Type" msgstr "Type d’offre" -#: numerique_gouv/models.py:186 numerique_gouv/models.py:310 -#: numerique_gouv/models.py:420 numerique_gouv/models.py:555 -#: numerique_gouv/models.py:568 numerique_gouv/models.py:654 +#: numerique_gouv/models.py:189 numerique_gouv/models.py:313 +#: numerique_gouv/models.py:423 numerique_gouv/models.py:572 +#: numerique_gouv/models.py:585 numerique_gouv/models.py:671 msgid "Page tags" msgstr "Thématique numérique" -#: numerique_gouv/models.py:188 numerique_gouv/models.py:562 -#: numerique_gouv/models.py:789 +#: numerique_gouv/models.py:191 numerique_gouv/models.py:579 +#: numerique_gouv/models.py:806 msgid "Target Audience" msgstr "Public cible" -#: numerique_gouv/models.py:190 numerique_gouv/models.py:312 -#: numerique_gouv/models.py:419 numerique_gouv/models.py:567 -#: numerique_gouv/models.py:653 +#: numerique_gouv/models.py:193 numerique_gouv/models.py:315 +#: numerique_gouv/models.py:422 numerique_gouv/models.py:584 +#: numerique_gouv/models.py:670 msgid "Organizations" msgstr "Émetteur" -#: numerique_gouv/models.py:191 numerique_gouv/models.py:311 +#: numerique_gouv/models.py:194 numerique_gouv/models.py:314 msgid "Major areas" msgstr "Grands domaines d’action" -#: numerique_gouv/models.py:192 +#: numerique_gouv/models.py:195 msgid "Buttons" msgstr "Boutons" -#: numerique_gouv/models.py:193 +#: numerique_gouv/models.py:196 msgid "Text and cta" msgstr "Texte et appel à action" -#: numerique_gouv/models.py:195 +#: numerique_gouv/models.py:198 msgid "Description" msgstr "Description" -#: numerique_gouv/models.py:203 numerique_gouv/models.py:322 +#: numerique_gouv/models.py:206 numerique_gouv/models.py:325 msgid "Card image" msgstr "Image de la carte principale" -#: numerique_gouv/models.py:205 numerique_gouv/models.py:324 +#: numerique_gouv/models.py:208 numerique_gouv/models.py:327 msgid "Image alt" msgstr "Alt de l’image" -#: numerique_gouv/models.py:207 +#: numerique_gouv/models.py:210 msgid "External link" -msgstr "" +msgstr "Lien externe" -#: numerique_gouv/models.py:210 +#: numerique_gouv/models.py:213 msgid "Organization title" msgstr "Titre" -#: numerique_gouv/models.py:211 +#: numerique_gouv/models.py:214 msgid "Block one title" msgstr "Titre" -#: numerique_gouv/models.py:212 +#: numerique_gouv/models.py:215 msgid "Block one column one" msgstr "Colonne 1" -#: numerique_gouv/models.py:213 +#: numerique_gouv/models.py:216 msgid "Block one column two" msgstr "Colonne 2" -#: numerique_gouv/models.py:214 +#: numerique_gouv/models.py:217 msgid "Block one column three" msgstr "Colonne 3" -#: numerique_gouv/models.py:215 +#: numerique_gouv/models.py:218 msgid "Block two title" msgstr "Titre" -#: numerique_gouv/models.py:216 +#: numerique_gouv/models.py:219 msgid "Block two column one" msgstr "Colonne 1" -#: numerique_gouv/models.py:217 +#: numerique_gouv/models.py:220 msgid "Block two column two" msgstr "Colonne 2" -#: numerique_gouv/models.py:218 +#: numerique_gouv/models.py:221 msgid "Block two column three" msgstr "Colonne 3" -#: numerique_gouv/models.py:219 +#: numerique_gouv/models.py:222 msgid "Block three title" msgstr "Titre" -#: numerique_gouv/models.py:220 +#: numerique_gouv/models.py:223 msgid "Block three subtitle" msgstr "Sous-titre" -#: numerique_gouv/models.py:221 +#: numerique_gouv/models.py:224 msgid "Block three column one" msgstr "Colonne 1" -#: numerique_gouv/models.py:222 +#: numerique_gouv/models.py:225 msgid "Block three column two" msgstr "Colonne 2" -#: numerique_gouv/models.py:223 +#: numerique_gouv/models.py:226 msgid "Block three column three" msgstr "Colonne 3" -#: numerique_gouv/models.py:231 +#: numerique_gouv/models.py:234 msgid "Offer type" msgstr "Type" -#: numerique_gouv/models.py:242 numerique_gouv/models.py:292 +#: numerique_gouv/models.py:245 numerique_gouv/models.py:295 msgid "Header" msgstr "Unes" -#: numerique_gouv/models.py:249 +#: numerique_gouv/models.py:252 msgid "title" msgstr "titre" -#: numerique_gouv/models.py:258 +#: numerique_gouv/models.py:261 msgid "Block one" msgstr "Bloc 1" -#: numerique_gouv/models.py:267 +#: numerique_gouv/models.py:270 msgid "Block two" msgstr "Bloc 2" -#: numerique_gouv/models.py:277 +#: numerique_gouv/models.py:280 msgid "Block three" msgstr "Bloc 3" -#: numerique_gouv/models.py:282 +#: numerique_gouv/models.py:285 msgid "This is the card that will be displayed on the offer index page." msgstr "" "Ce sont les informations qui seront affichés sur la carte de la page sur " "l’index des offres." -#: numerique_gouv/models.py:293 numerique_gouv/models.py:548 +#: numerique_gouv/models.py:296 numerique_gouv/models.py:565 msgid "Organization" msgstr "Émetteur" -#: numerique_gouv/models.py:294 +#: numerique_gouv/models.py:297 msgid "Card" msgstr "Carte" -#: numerique_gouv/models.py:295 numerique_gouv/models.py:609 +#: numerique_gouv/models.py:298 numerique_gouv/models.py:626 msgid "Promote" msgstr "Promotion" -#: numerique_gouv/models.py:303 +#: numerique_gouv/models.py:306 msgid "Offer page" msgstr "Page d’offre" -#: numerique_gouv/models.py:308 numerique_gouv/models.py:422 -#: numerique_gouv/models.py:569 numerique_gouv/models.py:656 +#: numerique_gouv/models.py:311 numerique_gouv/models.py:425 +#: numerique_gouv/models.py:586 numerique_gouv/models.py:673 msgid "Target Audiences" msgstr "Publics cibles" -#: numerique_gouv/models.py:313 +#: numerique_gouv/models.py:316 msgid "Product URL" msgstr "Url du produit" -#: numerique_gouv/models.py:314 +#: numerique_gouv/models.py:317 msgid "The service" msgstr "Le service" -#: numerique_gouv/models.py:315 +#: numerique_gouv/models.py:318 msgid "The problem" msgstr "Le problème" -#: numerique_gouv/models.py:348 +#: numerique_gouv/models.py:351 msgid "Product page" msgstr "Page produit" -#: numerique_gouv/models.py:355 +#: numerique_gouv/models.py:358 msgid "Products index" msgstr "Index produits à impact" -#: numerique_gouv/models.py:417 numerique_gouv/models.py:566 -#: numerique_gouv/models.py:651 +#: numerique_gouv/models.py:420 numerique_gouv/models.py:583 +#: numerique_gouv/models.py:668 msgid "Major Areas of Actions" msgstr "Grands domaines d’action" -#: numerique_gouv/models.py:441 numerique_gouv/models.py:690 +#: numerique_gouv/models.py:444 numerique_gouv/models.py:707 msgid "Scheduled publishing" msgstr "Publication programmée" -#: numerique_gouv/models.py:451 numerique_gouv/models.py:701 +#: numerique_gouv/models.py:454 numerique_gouv/models.py:718 msgid "Tags and Categories" msgstr "Tags et Catégories" -#: numerique_gouv/models.py:457 +#: numerique_gouv/models.py:460 msgid "Numerique blog entry page" msgstr "Page actualité" -#: numerique_gouv/models.py:466 +#: numerique_gouv/models.py:469 msgid "Numerique blog index page" msgstr "Page index des actualités" -#: numerique_gouv/models.py:531 +#: numerique_gouv/models.py:548 msgid "Display actualites" msgstr "Afficher les actualités" -#: numerique_gouv/models.py:532 +#: numerique_gouv/models.py:549 msgid "Display events" msgstr "Afficher les événements" -#: numerique_gouv/models.py:533 +#: numerique_gouv/models.py:550 msgid "Display products" msgstr "Afficher les produits" -#: numerique_gouv/models.py:534 +#: numerique_gouv/models.py:551 msgid "Display offers" msgstr "Afficher les offres" -#: numerique_gouv/models.py:541 +#: numerique_gouv/models.py:558 msgid "Major Area of Actions" msgstr "Grands domaines d’action" -#: numerique_gouv/models.py:571 +#: numerique_gouv/models.py:588 msgid "Content Source" msgstr "Source du contenu" -#: numerique_gouv/models.py:572 +#: numerique_gouv/models.py:589 msgid "Introduction text" msgstr "Index produits à impact" -#: numerique_gouv/models.py:584 +#: numerique_gouv/models.py:601 msgid "Hub page" msgstr "Page carrefour" -#: numerique_gouv/models.py:608 +#: numerique_gouv/models.py:625 msgid "Configuration" msgstr "Configuration" -#: numerique_gouv/models.py:646 +#: numerique_gouv/models.py:663 msgid "Numerique events index page" msgstr "Page index des événements" -#: numerique_gouv/models.py:678 +#: numerique_gouv/models.py:695 msgid "Event date and place" msgstr "Date et lieu de l’événement" -#: numerique_gouv/models.py:706 +#: numerique_gouv/models.py:723 msgid "Numerique event page" msgstr "Page évènement" -#: numerique_gouv/models.py:710 +#: numerique_gouv/models.py:727 msgid "Category name" msgstr "Nom" -#: numerique_gouv/models.py:712 +#: numerique_gouv/models.py:729 msgid "Color" msgstr "Couleur" -#: numerique_gouv/models.py:758 +#: numerique_gouv/models.py:775 msgid "Sitemap" msgstr "Plan du site" -#: numerique_gouv/models.py:764 +#: numerique_gouv/models.py:781 msgid "Page tag" msgstr "Thématique numérique" -#: numerique_gouv/models.py:771 +#: numerique_gouv/models.py:788 msgid "Offer Target Audience ( a supprimer )" msgstr "Offres - Publics cible ( a supprimer )" -#: numerique_gouv/models.py:777 +#: numerique_gouv/models.py:794 msgid "Major Area of Action" msgstr "Grands domaines d’action" -#: numerique_gouv/models.py:783 +#: numerique_gouv/models.py:800 msgid "Offer Type" msgstr "Offres - Type" -#: numerique_gouv/models.py:795 +#: numerique_gouv/models.py:812 msgid "Dinum Tag ( a supprimer )" msgstr "Offres - Tags dinum ( a supprimer )" @@ -668,7 +668,16 @@ msgstr "Filtrer par source" msgid "No article found." msgstr "Pas d’actualité trouvée." -#: numerique_gouv/templates/numerique_gouv/blocks/custom_blog_recent_entries.html:69 +#: numerique_gouv/templates/numerique_gouv/blocks/custom_blog_recent_entries.html:71 +#: numerique_gouv/templates/numerique_gouv/hub_pages.html:31 +msgid "See all news" +msgstr "Voir toutes les actualités" + +#: numerique_gouv/templates/numerique_gouv/blocks/custom_blog_recent_entries.html:73 +msgid "See all communiques" +msgstr "Voir tous les communiqués" + +#: numerique_gouv/templates/numerique_gouv/blocks/custom_blog_recent_entries.html:75 msgid "See all posts" msgstr "Voir toutes les actualités" @@ -688,6 +697,10 @@ msgstr "La feuille de route" msgid "Discover service" msgstr "Découvrir le service" +#: numerique_gouv/templates/numerique_gouv/blocks/product_card.html:30 +msgid "Open a new window" +msgstr "Ouvre une nouvel fenêtre" + #: numerique_gouv/templates/numerique_gouv/blocks/slider.html:25 msgid "View previous slide" msgstr "Voir la diapositive précédente" @@ -712,28 +725,28 @@ msgstr "Diapositive suivante" msgid "next" msgstr "Suivant" -#: numerique_gouv/templates/numerique_gouv/blog_entry_page.html:40 +#: numerique_gouv/templates/numerique_gouv/blog_entry_page.html:51 msgid "Themes :" msgstr "Thématiques :" -#: numerique_gouv/templates/numerique_gouv/blog_entry_page.html:52 +#: numerique_gouv/templates/numerique_gouv/blog_entry_page.html:63 msgid "Categories :" msgstr "Catégories :" -#: numerique_gouv/templates/numerique_gouv/blog_index_page.html:33 -#: numerique_gouv/templates/numerique_gouv/blog_index_page.html:35 +#: numerique_gouv/templates/numerique_gouv/blog_index_page.html:32 +#: numerique_gouv/templates/numerique_gouv/blog_index_page.html:34 msgid "Filters" msgstr "Filtres" -#: numerique_gouv/templates/numerique_gouv/blog_index_page.html:38 +#: numerique_gouv/templates/numerique_gouv/blog_index_page.html:37 msgid "Filter by major area" msgstr "Filtrer par domaine d’action" -#: numerique_gouv/templates/numerique_gouv/blog_index_page.html:54 +#: numerique_gouv/templates/numerique_gouv/blog_index_page.html:53 msgid "Filter by page tag" msgstr "Filtrer par thématique numérique" -#: numerique_gouv/templates/numerique_gouv/blog_index_page.html:70 +#: numerique_gouv/templates/numerique_gouv/blog_index_page.html:69 msgid "Filter organization" msgstr "Filtrer par émetteur" @@ -769,10 +782,6 @@ msgstr "Actualités" msgid "See more news" msgstr "Voir plus d’actualités" -#: numerique_gouv/templates/numerique_gouv/hub_pages.html:31 -msgid "See all news" -msgstr "Voir toutes les actualités" - #: numerique_gouv/templates/numerique_gouv/hub_pages.html:40 msgid "Offers" msgstr "Offres" @@ -852,6 +861,11 @@ msgstr "Autres services en accélération et Startups d’État" msgid "Discover" msgstr "Découvrir" +#, fuzzy +#~| msgid "See all posts" +#~ msgid "See all actus" +#~ msgstr "Voir toutes les actualités" + #~ msgid "Categories" #~ msgstr "Catégories" @@ -914,9 +928,6 @@ msgstr "Découvrir" #~ msgid "Observe the quality of digital" #~ msgstr "Observer la qualité du numérique" -#~ msgid "Opens a new window" -#~ msgstr "Ouvre une nouvel fenêtre" - #~ msgid "Settings" #~ msgstr "Configurations" diff --git a/numerique_gouv/migrations/0088_alter_numeriquebasepage_body.py b/numerique_gouv/migrations/0088_alter_numeriquebasepage_body.py index 1cbc9ed4..670c23e5 100644 --- a/numerique_gouv/migrations/0088_alter_numeriquebasepage_body.py +++ b/numerique_gouv/migrations/0088_alter_numeriquebasepage_body.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.9 on 2024-12-20 14:49 +# Generated by Django 5.0.9 on 2025-01-17 10:45 import wagtail.fields from django.db import migrations diff --git a/numerique_gouv/templates/numerique_gouv/blocks/card_vertical.html b/numerique_gouv/templates/numerique_gouv/blocks/card_vertical.html index f32f34a4..7300bb92 100644 --- a/numerique_gouv/templates/numerique_gouv/blocks/card_vertical.html +++ b/numerique_gouv/templates/numerique_gouv/blocks/card_vertical.html @@ -9,9 +9,9 @@