diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f3eca2be..baa6cc698 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ - Fix display temporal coverage on dataset page [#261](https://github.com/etalab/udata-front/pull/261) - Fix tooltip accessibility [#259](https://github.com/etalab/udata-front/pull/259) - Fix [dependabot/17](https://github.com/etalab/udata-front/security/dependabot/17) and [dependabot/18](https://github.com/etalab/udata-front/security/dependabot/18) [#264](https://github.com/etalab/udata-front/pull/264). These aren't udata-front vulnerabilities but only impact vite dev server (unused in `gouvfr` theme). +- Update DSFR to 1.9 [#249](https://github.com/etalab/udata-front/pull/249) ## 3.2.3 (2023-05-16) diff --git a/package-lock.json b/package-lock.json index dd9526a86..e286d4799 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@conciergerie.dev/select-a11y": "^3.1.0", "@conciergerie.dev/vue-toaster": "^2.4.0", "@etalab/udata-front-plugins-helper": "1.1.0", - "@gouvfr/dsfr": "^1.5.1", + "@gouvfr/dsfr": "^1.9.2", "@intlify/unplugin-vue-i18n": "^0.8.0", "@lhci/cli": "^0.10.0", "@sentry/tracing": "^6.10.0", @@ -2196,9 +2196,9 @@ "dev": true }, "node_modules/@gouvfr/dsfr": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@gouvfr/dsfr/-/dsfr-1.5.1.tgz", - "integrity": "sha512-z0o1zD3zAzF3CTGWev2tSLHPv8yk52xq6QOuEuGulGfIze5N/Y3W+ScT+dKyZG8y/aOyX9T+O9wYnNH5XIGb0g==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@gouvfr/dsfr/-/dsfr-1.9.2.tgz", + "integrity": "sha512-uVo+z3xo2FFANa/cYdP2z21ieEXAeABKKrTE2FdKE8HXjhyh9tIcfsju8ux6nFA+pfBeOeUCwBXfOjPQD0eT5w==", "dev": true, "engines": { "node": ">=14.18.0" @@ -10368,9 +10368,9 @@ "dev": true }, "@gouvfr/dsfr": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@gouvfr/dsfr/-/dsfr-1.5.1.tgz", - "integrity": "sha512-z0o1zD3zAzF3CTGWev2tSLHPv8yk52xq6QOuEuGulGfIze5N/Y3W+ScT+dKyZG8y/aOyX9T+O9wYnNH5XIGb0g==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@gouvfr/dsfr/-/dsfr-1.9.2.tgz", + "integrity": "sha512-uVo+z3xo2FFANa/cYdP2z21ieEXAeABKKrTE2FdKE8HXjhyh9tIcfsju8ux6nFA+pfBeOeUCwBXfOjPQD0eT5w==", "dev": true }, "@hapi/hoek": { diff --git a/package.json b/package.json index c234a698e..e43702377 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "@conciergerie.dev/select-a11y": "^3.1.0", "@conciergerie.dev/vue-toaster": "^2.4.0", "@etalab/udata-front-plugins-helper": "1.1.0", - "@gouvfr/dsfr": "^1.5.1", + "@gouvfr/dsfr": "^1.9.2", "@intlify/unplugin-vue-i18n": "^0.8.0", "@lhci/cli": "^0.10.0", "@sentry/tracing": "^6.10.0", diff --git a/udata_front/frontend/helpers.py b/udata_front/frontend/helpers.py index feb192eaa..31125cb18 100644 --- a/udata_front/frontend/helpers.py +++ b/udata_front/frontend/helpers.py @@ -17,7 +17,7 @@ from udata.core.dataset.apiv2 import dataset_fields from udata.core.dataset.models import Dataset from udata.models import db -from udata.i18n import format_date, format_timedelta, _, pgettext +from udata.i18n import get_locale, format_date, format_timedelta, _, pgettext from udata.search.result import SearchResult from udata.utils import camel_to_lodash from udata_front.theme import theme_static_with_version @@ -364,14 +364,9 @@ def i18n_alternate_links(): LINK_PATTERN = ( '') links = [] - params = {} - if request.args: - params.update(request.args) - if request.view_args: - params.update(request.view_args) for lang in current_app.config['LANGUAGES']: - url = url_for(request.endpoint, lang_code=lang, **params, _external=True) + url = language_url(lang) links.append(LINK_PATTERN.format(url=url, lang=lang)) return Markup(''.join(links)) except Exception: @@ -445,3 +440,32 @@ def visibles(value): @front.app_template_global() def selected(current_value, value): return 'selected' if current_value == value else '' + + +@front.app_template_global() +def current_language_name(): + '''Get the name of the current locale.''' + locale = get_locale() + for code, name in current_app.config['LANGUAGES'].items(): + if locale == code: + return name + + +@front.app_template_global() +def language_url(lang_code): + '''Create an URL for the current endpoint and the given language code''' + params = {} + endpoint = request.endpoint + if request.args: + params.update(request.args) + if request.view_args: + params.update(request.view_args) + if (not request.endpoint or + not current_app.url_map.is_endpoint_expecting(request.endpoint, + 'lang_code')): + endpoint = "site.home" + try: + return url_for(endpoint, lang_code=lang_code, **params, _external=True) + except Exception: + # Never fails + return url_for("site.home", lang_code=lang_code, **params, _external=True) diff --git a/udata_front/theme/gouvfr/assets/js/components/search/search.vue b/udata_front/theme/gouvfr/assets/js/components/search/search.vue index fc9436682..81a5d9f8d 100644 --- a/udata_front/theme/gouvfr/assets/js/components/search/search.vue +++ b/udata_front/theme/gouvfr/assets/js/components/search/search.vue @@ -9,11 +9,11 @@
-