Compare commits

...

29 commits

Author SHA1 Message Date
Yohan Boniface
5ca7e1538f
Merge 8129c06152 into 6945a5e867 2025-04-16 13:00:58 +02:00
Yohan Boniface
6945a5e867
feat: pass CSRF_TRUSTED_ORIGINS env to settings (#2656)
Some checks are pending
Release Charts / release (push) Waiting to run
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
Allow to manage djangos CSRF_TRUSTED_ORIGINS by environment variables.

Closes #2655
2025-04-16 12:34:49 +02:00
Oliver Lippert
2ed890202e
code formatting 2025-04-16 12:25:17 +02:00
Oliver Lippert
cc7685ca3f
pass CSRF_TRUSTED_ORIGINS env to settings
fixes https://github.com/umap-project/umap/issues/2655
2025-04-16 12:23:09 +02:00
David Larlet
23688b6444
feat: implement a design system for UI consistency (#2654)
Some checks are pending
Release Charts / release (push) Waiting to run
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
2025-04-15 08:19:31 -04:00
David Larlet
d3c0947fa5
feat: implement a design system for UI consistency 2025-04-14 23:20:55 -04:00
Yohan Boniface
a135e5c3e1
chore: bump pytest-django from 4.10.0 to 4.11.1 (#2653)
Some checks are pending
Release Charts / release (push) Waiting to run
Test & Docs / tests (postgresql, 3.10) (push) Waiting to run
Test & Docs / tests (postgresql, 3.12) (push) Waiting to run
Test & Docs / lint (push) Waiting to run
2025-04-14 19:50:30 +02:00
Yohan Boniface
2ad46046f8
chore: bump uvicorn from 0.34.0 to 0.34.1 (#2651) 2025-04-14 19:50:14 +02:00
Yohan Boniface
5271d7c19d
chore: bump pydantic from 2.11.2 to 2.11.3 (#2652) 2025-04-14 19:36:42 +02:00
Yohan Boniface
a535c86f6b
chore: bump mkdocs-material from 9.6.10 to 9.6.11 (#2649) 2025-04-14 19:36:16 +02:00
Yohan Boniface
9aa1f58dc8
chore: bump pillow from 11.1.0 to 11.2.1 (#2650)
Bumps [pillow](https://github.com/python-pillow/Pillow) from 11.1.0 to
11.2.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/python-pillow/Pillow/releases">pillow's
releases</a>.</em></p>
<blockquote>
<h2>11.2.1</h2>
<p><a
href="https://pillow.readthedocs.io/en/stable/releasenotes/11.2.1.html">https://pillow.readthedocs.io/en/stable/releasenotes/11.2.1.html</a></p>
<h2>Deprecations</h2>
<ul>
<li>Moved get_child_images() to ImageFile <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8689">#8689</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
</ul>
<h2>Documentation</h2>
<ul>
<li>Add 11.2.1 release notes <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8885">#8885</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Added avif to config settings <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8875">#8875</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Added release notes for <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8330">#8330</a>
<a
href="https://redirect.github.com/python-pillow/Pillow/issues/8853">#8853</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Added release notes for <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8781">#8781</a>
and <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8837">#8837</a>
<a
href="https://redirect.github.com/python-pillow/Pillow/issues/8843">#8843</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Added media_white_point to ImageCms documentation <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8829">#8829</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Removed FIXME <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8825">#8825</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Updated comment <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8822">#8822</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Added release notes for <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8807">#8807</a>
<a
href="https://redirect.github.com/python-pillow/Pillow/issues/8824">#8824</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>DXT3 images are read in RGBA mode <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8817">#8817</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>JPEG comments are from the COM marker <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8788">#8788</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Update Sphinx to 8.2 to remove nitpick ignore <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8763">#8763</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Updated AffineTransform docstring to mention it uses the inverse
matrix <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8735">#8735</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Added MozJPEG documentation <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8699">#8699</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Added Sphinx configuration key <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8691">#8691</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Updated macOS tested Pillow versions <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8654">#8654</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
</ul>
<h2>Dependencies</h2>
<ul>
<li>Updated xz to 5.8.1 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8868">#8868</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Updated harfbuzz to 11.0.1 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8870">#8870</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Update scientific-python/upload-nightly-action action to v0.6.2 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8865">#8865</a>
[@<a href="https://github.com/apps/renovate">renovate[bot]</a>]</li>
<li>Updated xz to 5.8.0 in macOS and Linux wheels, but not on
manylinux2014 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8836">#8836</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Update dependency cibuildwheel to v2.23.2 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8832">#8832</a>
[@<a href="https://github.com/apps/renovate">renovate[bot]</a>]</li>
<li>Updated harfbuzz to 11.0.0 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8830">#8830</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Update dependency cibuildwheel to v2.23.1 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8818">#8818</a>
[@<a href="https://github.com/apps/renovate">renovate[bot]</a>]</li>
<li>Updated Ghostscript to 10.5.0 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8814">#8814</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Updated libtiff to 4.7.0 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8812">#8812</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>[pre-commit.ci] pre-commit autoupdate <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8795">#8795</a>
[@<a
href="https://github.com/apps/pre-commit-ci">pre-commit-ci[bot]</a>]</li>
<li>Updated harfbuzz to 10.4.0 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8770">#8770</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Update dependency mypy to v1.15.0 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8791">#8791</a>
[@<a href="https://github.com/apps/renovate">renovate[bot]</a>]</li>
<li>Updated libpng to 1.6.47 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8764">#8764</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Updated lcms2 to 2.17 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8742">#8742</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Update dependency cibuildwheel to v2.23.0 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8785">#8785</a>
[@<a href="https://github.com/apps/renovate">renovate[bot]</a>]</li>
<li>Updated zlib-ng to 2.2.4 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8745">#8745</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Updated libimagequant to 4.3.4 on Windows <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8744">#8744</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>[pre-commit.ci] pre-commit autoupdate <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8729">#8729</a>
[@<a
href="https://github.com/apps/pre-commit-ci">pre-commit-ci[bot]</a>]</li>
<li>Updated harfbuzz to 10.2.0 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8688">#8688</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Updated xz to 5.6.4 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8711">#8711</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Updated libpng to 1.6.46 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8712">#8712</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Updated libimagequant to 4.3.4 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8710">#8710</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
<li>Updated libpng to 1.6.45 <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8670">#8670</a>
[<a
href="https://github.com/radarhere"><code>@​radarhere</code></a>]</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst">pillow's
changelog</a>.</em></p>
<blockquote>
<h1>Changelog (Pillow)</h1>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="339bc5db93"><code>339bc5d</code></a>
11.2.1 version bump</li>
<li><a
href="857b8846ea"><code>857b884</code></a>
Merge pull request <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8885">#8885</a>
from radarhere/releasenotes</li>
<li><a
href="7a0092f207"><code>7a0092f</code></a>
Remove incomplete 11.2.0 release, bill as 11.2.1 instead</li>
<li><a
href="d52c2db317"><code>d52c2db</code></a>
Do not include libavif in wheels</li>
<li><a
href="8dafc38371"><code>8dafc38</code></a>
Added 11.2.1 release notes</li>
<li><a
href="07d7800248"><code>07d7800</code></a>
Removed release notes update</li>
<li><a
href="04909483a7"><code>0490948</code></a>
Remove GPL v2 license (<a
href="https://redirect.github.com/python-pillow/Pillow/issues/8884">#8884</a>)</li>
<li><a
href="774d0aedce"><code>774d0ae</code></a>
Merge pull request <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8868">#8868</a>
from radarhere/xz_upgrade</li>
<li><a
href="d1e27fc86c"><code>d1e27fc</code></a>
Merge pull request <a
href="https://redirect.github.com/python-pillow/Pillow/issues/8870">#8870</a>
from radarhere/harfbuzz_upgrade</li>
<li><a
href="c8d98d56a0"><code>c8d98d5</code></a>
Added avif to config settings (<a
href="https://redirect.github.com/python-pillow/Pillow/issues/8875">#8875</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/python-pillow/Pillow/compare/11.1.0...11.2.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=pillow&package-manager=pip&previous-version=11.1.0&new-version=11.2.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>
2025-04-14 19:36:00 +02:00
dependabot[bot]
102104f818
chore: bump pytest-django from 4.10.0 to 4.11.1
Bumps [pytest-django](https://github.com/pytest-dev/pytest-django) from 4.10.0 to 4.11.1.
- [Release notes](https://github.com/pytest-dev/pytest-django/releases)
- [Changelog](https://github.com/pytest-dev/pytest-django/blob/main/docs/changelog.rst)
- [Commits](https://github.com/pytest-dev/pytest-django/compare/v4.10.0...v4.11.1)

---
updated-dependencies:
- dependency-name: pytest-django
  dependency-version: 4.11.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-14 17:30:01 +00:00
dependabot[bot]
35e5a4bda6
chore: bump pydantic from 2.11.2 to 2.11.3
Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.11.2 to 2.11.3.
- [Release notes](https://github.com/pydantic/pydantic/releases)
- [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md)
- [Commits](https://github.com/pydantic/pydantic/compare/v2.11.2...v2.11.3)

---
updated-dependencies:
- dependency-name: pydantic
  dependency-version: 2.11.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-14 17:29:38 +00:00
dependabot[bot]
6bae315efe
chore: bump uvicorn from 0.34.0 to 0.34.1
Bumps [uvicorn](https://github.com/encode/uvicorn) from 0.34.0 to 0.34.1.
- [Release notes](https://github.com/encode/uvicorn/releases)
- [Changelog](https://github.com/encode/uvicorn/blob/master/docs/release-notes.md)
- [Commits](https://github.com/encode/uvicorn/compare/0.34.0...0.34.1)

---
updated-dependencies:
- dependency-name: uvicorn
  dependency-version: 0.34.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-14 17:29:19 +00:00
dependabot[bot]
93120d91d6
chore: bump pillow from 11.1.0 to 11.2.1
Bumps [pillow](https://github.com/python-pillow/Pillow) from 11.1.0 to 11.2.1.
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst)
- [Commits](https://github.com/python-pillow/Pillow/compare/11.1.0...11.2.1)

---
updated-dependencies:
- dependency-name: pillow
  dependency-version: 11.2.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-14 17:29:05 +00:00
dependabot[bot]
f037973a03
chore: bump mkdocs-material from 9.6.10 to 9.6.11
Bumps [mkdocs-material](https://github.com/squidfunk/mkdocs-material) from 9.6.10 to 9.6.11.
- [Release notes](https://github.com/squidfunk/mkdocs-material/releases)
- [Changelog](https://github.com/squidfunk/mkdocs-material/blob/master/CHANGELOG)
- [Commits](https://github.com/squidfunk/mkdocs-material/compare/9.6.10...9.6.11)

---
updated-dependencies:
- dependency-name: mkdocs-material
  dependency-version: 9.6.11
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-14 17:28:43 +00:00
Yohan Boniface
c4614354ae 3.0.4 2025-04-14 17:57:12 +02:00
Yohan Boniface
9ed466ea9b
chore: update colors (#2647) 2025-04-14 17:55:19 +02:00
Yohan Boniface
168cc0c996 i18n 2025-04-14 17:49:09 +02:00
Yohan Boniface
ae4e7eb3e2 chore: update colors
Co-authored-by: David Larlet <david@larlet.fr>
2025-04-14 17:45:11 +02:00
Yohan Boniface
3670b7dca6
Adapt chart to match La Suite's expectations (#2646)
- env vars and config files can be loaded from existing secrets
- chart is deployed on a helm repository

to make the helm repository work with github pages, create an empty
orphaned branch called gh-pages, and under settings>pages>source select
deploy from branch and use gh-pages
2025-04-14 17:36:31 +02:00
David Larlet
1c3cf9a7c5
chore: switch helm chart job to master branch 2025-04-14 11:31:06 -04:00
Yohan Boniface
ada44fc0fc
fix: remove "hide home button" shown twice in map settings (#2645) 2025-04-14 17:30:52 +02:00
Yohan Boniface
ac6964c9f4 fix: remove "hide home button" shown twice in map settings
Co-authored-by: David Larlet <david@larlet.fr>
2025-04-14 16:30:38 +02:00
David Larlet
82dcd90405
fix: do not show "back to home" button in iframes (#2644) 2025-04-14 10:21:21 -04:00
Yohan Boniface
d9e983aed4 fix: do not show "back to home" button in iframes
Co-authored-by: David Larlet <david@larlet.fr>
2025-04-14 16:12:35 +02:00
Oscar Hemelaar
8f3f67588a
chore: deploy charts to repository under github pages 2025-01-29 16:22:25 +01:00
Oscar Hemelaar
e97b619da8
feat: allow configuring env and conf using existing secret
useful for when the secret is created out of band using a vault api for
example
2025-01-29 15:49:05 +01:00
Yohan Boniface
8129c06152 wip: use CircleMarker instead of Circle icon
This needs more work, but would allow:
- better performance:
    - one svg for all features instead of one HTML per feature
    - as it inherits from path, only visible feature are added to DOM
- controling the circle radius, which is something requested from time
  to time

To move forward, we need:

- [ ] to have default per UI class (instead of in the SCHEMA), as
 for example we do not want the same default weight for a line or
 for the CircleMarker
- [ ] maybe to have some static properties, so to keep the circle
  border color always white, as now (but can be discussed)
- [ ] when editing a feature, to show properties according to the
  current selected UI class, so user can define the radius when
  "Circle" is selected, but also other path related properties
  (fillColor, opacity…)
2024-08-15 12:06:11 +02:00
23 changed files with 313 additions and 70 deletions

26
.github/workflows/release-helm.yml vendored Normal file
View file

@ -0,0 +1,26 @@
name: Release Charts
on:
push:
branches:
- master
jobs:
release:
# depending on default permission settings for your org (contents being read-only or read-write for workloads), you will have to add permissions
# see: https://docs.github.com/en/actions/security-guides/automatic-token-authentication#modifying-the-permissions-for-the-github_token
permissions:
contents: write
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Publish Helm charts
uses: stefanprodan/helm-gh-pages@v1.7.0
with:
charts_dir: charts
linting: off
token: ${{ secrets.GITHUB_TOKEN }}

View file

@ -66,7 +66,11 @@ spec:
{{- end }}
envFrom:
- secretRef:
{{- if .Values.umap.envFromSecret }}
name: {{ .Values.umap.envFromSecret }}
{{- else }}
name: {{ include "umap.fullname" . }}-env
{{- end }}
volumeMounts:
- name: config
mountPath: /etc/umap/
@ -80,7 +84,11 @@ spec:
volumes:
- name: config
secret:
{{- if .Values.umap.configFromSecret }}
secretName: {{ .Values.umap.configFromSecret }}
{{- else }}
secretName: {{ include "umap.fullname" . }}-config
{{- end }}
- name: statics
emptyDir: {}
{{- if .Values.persistence.enabled }}

View file

@ -1,3 +1,4 @@
{{ if not .Values.umap.configFromSecret }}
apiVersion: v1
kind: Secret
metadata:
@ -6,4 +7,5 @@ metadata:
{{- include "umap.labels" . | nindent 4 }}
type: Opaque
data:
umap.conf: {{ .Values.umap.config | b64enc }}
umap.conf: {{ .Values.umap.config | b64enc }}
{{- end }}

View file

@ -1,3 +1,4 @@
{{ if not .Values.umap.envFromSecret }}
apiVersion: v1
kind: Secret
metadata:
@ -8,4 +9,5 @@ type: Opaque
data:
{{- range $key, $value := .Values.umap.environment }}
{{ $key }}: "{{ $value | b64enc }}"
{{- end }}
{{- end }}
{{- end }}

View file

@ -77,11 +77,18 @@ umap:
SECRET_KEY: CHANGE_ME
STATIC_ROOT: /srv/umap/static
MEDIA_ROOT: /srv/umap/uploads
# Configure environment variables using an existing secret in the same namespace.
# In this case the values above are not used
envFromSecret: null
# You can also provide umap.conf content here:
config: |
from umap.settings.base import *
# See: https://github.com/umap-project/umap/blob/master/umap/settings/local.py.sample
# Configure config file using an existing secret in the same namespace.
# In this case the values above are not used
configFromSecret: null
persistence:
enabled: true

View file

@ -1,5 +1,5 @@
# Force rtfd to use a recent version of mkdocs
mkdocs==1.6.1
pymdown-extensions==10.14.3
mkdocs-material==9.6.10
mkdocs-material==9.6.11
mkdocs-static-i18n==1.3.0

View file

@ -1,5 +1,13 @@
# Changelog
## 3.0.4 - 2025-04-14
* do not show "back to home" button in iframes by @yohanboniface in #2644
* remove "hide home button" shown twice in map settings by @yohanboniface in #2645
* adapt Helm chart to match La Suite's expectations by @ohemelaar in #2646
* update colors by @yohanboniface in #2647
## 3.0.3 - 2025-04-11
* do not try to remove a feature not yet added by @yohanboniface in #2637

View file

@ -1,5 +1,5 @@
# Force rtfd to use a recent version of mkdocs
mkdocs==1.6.1
pymdown-extensions==10.14.3
mkdocs-material==9.6.10
mkdocs-material==9.6.11
mkdocs-static-i18n==1.3.0

View file

@ -32,7 +32,7 @@ dependencies = [
"django-agnocomplete==2.2.0",
"django-environ==0.12.0",
"django-probes==1.7.0",
"Pillow==11.1.0",
"Pillow==11.2.1",
"psycopg==3.2.6",
"requests==2.32.3",
"rcssmin==1.2.1",
@ -47,7 +47,7 @@ dev = [
"ruff==0.11.4",
"djlint==1.36.4",
"mkdocs==1.6.1",
"mkdocs-material==9.6.10",
"mkdocs-material==9.6.11",
"mkdocs-static-i18n==1.3.0",
"vermin==1.6.0",
"pymdown-extensions==10.14.3",
@ -58,20 +58,20 @@ test = [
"factory-boy==3.3.3",
"playwright>=1.39",
"pytest==8.3.5",
"pytest-django==4.10.0",
"pytest-django==4.11.1",
"pytest-playwright==0.7.0",
"pytest-rerunfailures==15.0",
"pytest-xdist>=3.5.0,<4",
"moto[s3]==5.1.3"
]
docker = [
"uvicorn==0.34.0",
"uvicorn==0.34.1",
]
s3 = [
"django-storages[s3]==1.14.6",
]
sync = [
"pydantic==2.11.2",
"pydantic==2.11.3",
"redis==5.2.1",
"websockets==15.0.1",
]

View file

@ -1 +1 @@
VERSION = "3.0.3"
VERSION = "3.0.4"

View file

@ -19,6 +19,7 @@ env = environ.Env()
INTERNAL_IPS = env.list("INTERNAL_IPS", default=["127.0.0.1"])
ALLOWED_HOSTS = env.list("ALLOWED_HOSTS", default=["*"])
CSRF_TRUSTED_ORIGINS = env.list("CSRF_TRUSTED_ORIGINS", default=[])
ADMINS = tuple(parseaddr(email) for email in env.list("ADMINS", default=[]))
ASGI_APPLICATION = "umap.asgi.application"

View file

@ -6,7 +6,7 @@ input[type="text"], input[type="password"], input[type="date"],
input[type="datetime-local"], input[type="email"], input[type="number"],
input[type="search"], input[type="tel"], input[type="time"], input[type="file"],
input[type="url"], textarea {
background-color: white;
background-color: var(--color-light);
border: 2px solid var(--color-darkBlue);
color: var(--text-color);
display: block;
@ -47,7 +47,7 @@ input[type=checkbox]:checked:after {
}
input[data-modified=true] {
background-color: var(--color-lightCyan);
border: 1px solid var(--color-darkGray);
border: 1px solid var(--color-veryDarkGray);
}
input + select,
select + input,
@ -71,7 +71,7 @@ select {
.dark select {
color: var(--text-color);
background-color: var(--color-darkGray);
border-color: var(--color-dark);
border-color: var(--color-veryDarkGray);
border-width: 1px;
}
select[multiple="multiple"] {
@ -89,7 +89,7 @@ input[type="submit"] {
text-decoration: none;
justify-content: center;
background-color: var(--color-darkBlue);
color: white;
color: var(--color-light);
font-weight: normal;
min-height: 40px;
}
@ -97,21 +97,21 @@ input[type="submit"] {
.dark [type="button"] {
background-color: var(--color-darkerGray);
color: var(--text-color);
border: 1px solid #1b1f20;
border: 1px solid var(--color-veryDarkGray);
}
.button.primary {
font-weight: bold;
}
.dark .button.primary:not([disabled]),
.dark [type="button"].primary:not([disabled]) {
background-color: var(--color-brightCyan);
background-color: var(--color-verySoftCyan);
color: var(--color-dark);
border: 1px solid #1b1f20;
border: 1px solid var(--color-veryDarkGray);
}
.dark .button:hover,
.dark [type="button"]:hover,
.dark input[type="submit"]:hover {
background-color: #2e3436;
background-color: var(--color-darkerGray);
}
.dark a {
color: var(--text-color);
@ -151,14 +151,14 @@ button.round.small {
display: block;
padding: 7px 7px;
margin-bottom: 14px;
background: #393F3F;
background: var(--color-mediumGray);
color: var(--color-lightGray);
font-size: 10px;
border-radius: 0 2px;
}
.content .helptext {
background-color: #eee;
color: #000;
background-color: var(--color-lightGray);
color: var(--color-dark);
}
input + .help-text {
margin-top: -14px;
@ -205,8 +205,8 @@ input + .error {
margin-top: -14px;
margin-bottom: 14px;
background: var(--color-lightGray);
color: #fff;
background-color: #cc0000;
color: var(--color-light);
background-color: var(--color-red);
font-size: 11px;
border-radius: 0 2px;
}
@ -214,14 +214,14 @@ input[type="file"] + .error {
margin-top: 0;
}
input[value]:invalid {
border-color: red;
background-color: darkred;
border-color: var(--color-red);
background-color: var(--color-darkRed);
}
.dark input, .dark textarea {
background-color: var(--color-darkerGray);
border-color: var(--color-dark);
border-color: var(--color-veryDarkGray);
border-width: 1px;
color: #efefef;
color: var(--color-lightGray);
}
details {
margin-bottom: 5px;
@ -229,7 +229,7 @@ details {
border-start-end-radius: 4px;
}
.dark details {
border: 1px solid #222;
border: 1px solid var(--color-veryDarkGray);
}
details fieldset {
overflow: hidden;
@ -245,8 +245,8 @@ details summary {
padding: 0 5px;
}
.dark details summary {
background-color: #232729;
color: #fff;
background-color: var(--color-darkerGray);
color: var(--color-light);
}
.dark details fieldset {
border: 1px solid var(--color-darkGray);
@ -311,33 +311,34 @@ input.switch:empty ~ label:after {
width: 6em;
-webkit-transition: all 100ms ease-in;
transition: all 100ms ease-in;
color: #c9c9c7;
color: var(--color-mediumGray);
font-weight: bold;
background-color: #ededed;
background-color: var(--color-lighterGray);
}
.dark input.switch:empty ~ label:before,
.dark input.switch:empty ~ label:after {
background-color: #272c2e;
background-color: var(--color-darkerGray);
}
input.switch:empty ~ label:after {
width: 3em;
margin-inline-start: 0.1em;
background-color: #ededed;
background-color: var(--color-lightGray);
content: "OFF";
text-indent: 3.5em;
border: 1px solid #374E75;
border: 1px solid var(--color-darkerGray);
font-weight: bold;
}
.dark input.switch:empty ~ label:after {
border: 1px solid #202425;
background-color: #2c3233;
border: 1px solid var(--color-veryDarkGray);
background-color: var(--color-darkerGray);
color: var(--color-lightGray);
}
input.switch:checked:empty ~ label:after {
content: ' ';
}
.dark input.switch:checked ~ label:before,
input.switch:checked ~ label:before {
background-color: var(--color-lightCyan);
background-color: var(--color-verySoftCyan);
border: 1px solid var(--color-lightGray);
color: var(--color-darkGray);
content: "ON";
@ -347,7 +348,7 @@ input.switch:checked ~ label:before {
}
.dark input.switch:checked ~ label:before {
border: none;
background-color: var(--color-accent);
background-color: var(--color-verySoftCyan);
}
input.switch:checked ~ label:after {
margin-inline-start: 3em;
@ -387,9 +388,9 @@ input.switch:checked ~ label:after {
display: none;
}
.umap-multiplechoice label {
border: 1px solid #374E75;
border: 1px solid var(--color-veryDarkGray);
cursor: pointer;
background-color: #c9c9c7;
background-color: var(--color-lightGray);
min-height: 30px;
line-height: 30px;
text-align: center;
@ -397,12 +398,11 @@ input.switch:checked ~ label:after {
display: inline-block;
}
.dark .umap-multiplechoice label {
border: 1px solid black;
background-color: #2c3233;
border: 1px solid var(--color-veryDarkGray);
background-color: var(--color-darkGray);
}
.umap-multiplechoice input[type='radio']:checked + label {
background-color: var(--color-accent);
box-shadow: inset 0 0 6px 0px #2c3233;
background-color: var(--color-verySoftCyan);
color: var(--color-darkGray);
}
.inheritable .header .buttons {
@ -420,7 +420,7 @@ input.switch:checked ~ label:after {
width: initial;
}
.inheritable + .inheritable {
border-top: 1px solid #222;
border-top: 1px solid var(--color-darkerGray);
padding-top: 5px;
margin-top: 5px;
}
@ -504,7 +504,7 @@ i.info {
justify-content: space-around;
font-size: 1.2em;
margin-bottom: 20px;
border-bottom: 1px solid #bebebe;
border-bottom: 1px solid var(--color-lighterGray);
}
.flat-tabs button {
padding: 10px;
@ -515,14 +515,14 @@ i.info {
.flat-tabs button:hover,
.flat-tabs .on {
font-weight: bold;
border-bottom: 1px solid #444;
border-bottom: 1px solid var(--color-mediumGray);
}
.dark .flat-tabs button {
color: #fff;
color: var(--color-light);
}
.dark .flat-tabs button:hover,
.dark .flat-tabs .on {
border-bottom: 1px solid #fff;
border-bottom: 1px solid var(--color-light);
}
.umap-pictogram-category h6 {
font-size: 1.3em;
@ -538,11 +538,11 @@ i.info {
height: 30px;
line-height: 30px;
cursor: pointer;
background-color: #999;
background-color: var(--color-lightGray);
text-align: center;
margin-bottom: 5px;
display: inline-block;
color: black;
color: var(--color-dark);
font-weight: bold;
overflow: hidden;
}
@ -552,10 +552,10 @@ i.info {
}
.umap-pictogram-choice:hover,
.umap-color-picker span:hover {
background-color: #bebebe;
background-color: var(--color-lighterGray);
}
.umap-pictogram-choice.selected {
box-shadow: inset 0 0 0 1px #e9e9e9;
box-shadow: inset 0 0 0 1px var(--color-lighterGray);
}
.umap-pictogram-choice .leaflet-marker-icon {

View file

@ -14,6 +14,7 @@ import {
LeafletPolygon,
LeafletPolyline,
MaskPolygon,
CircleMarker,
} from '../rendering/ui.js'
import { SCHEMA } from '../schema.js'
import * as Utils from '../utils.js'
@ -714,6 +715,7 @@ export class Point extends Feature {
}
getUIClass() {
if (this.getOption('iconClass') === 'Circle') return CircleMarker
return super.getUIClass() || LeafletMarker
}

View file

@ -436,6 +436,13 @@ export const SCHEMA = {
],
default: 'Default',
},
radius: {
type: Number,
default: 4,
impacts: ['data'],
label: translate('Radius in px'),
inheritable: true,
},
remoteData: {
type: Object,
impacts: ['remote-data'],

View file

@ -108,7 +108,7 @@ export default class Umap {
// Do not display in an iframe.
if (window.self !== window.top) {
geojson.properties.homeControl = false
this.properties.homeControl = false
}
this._leafletMap.setup()
@ -833,7 +833,6 @@ export default class Umap {
UIFields.push(`properties.${name}Control`)
}
UIFields = UIFields.concat([
'properties.homeControl',
'properties.moreControl',
'properties.scrollWheelZoom',
'properties.miniMap',

View file

@ -457,7 +457,6 @@ const locale = {
"Choose this dataset": "Choose this dataset",
"GeoDataMine: thematic data from OpenStreetMap": "GeoDataMine: thematic data from OpenStreetMap",
"Choose a theme": "Choose a theme",
"Symplify all geometries to points": "Symplify all geometries to points",
"Choose this data": "Choose this data",
"Search admin boundary": "Search admin boundary",
"Please choose a theme and a boundary first.": "Please choose a theme and a boundary first.",
@ -522,10 +521,10 @@ const locale = {
"Anonymous": "Anonymous",
"created at {date}": "created at {date}",
"modified at {date}": "modified at {date}",
"Default zoom": "Default zoom",
"Default latitude": "Default latitude",
"Default longitude": "Default longitude",
"Edit map default view": "Edit map default view",
"Default zoom": "Zoom predeterminat",
"Default latitude": "Latitud predeterminada",
"Default longitude": "Longitud predeterminada",
"Edit map default view": "Edita la visualització predeterminada del mapa",
"Use current center and zoom": "Use current center and zoom",
"Layer permalink": "Layer permalink",
"Back to home": "Back to home",
@ -538,7 +537,10 @@ const locale = {
"Images": "Images",
"Iframes": "Iframes",
"Tags": "Tags",
"Geocode": "Geocode"
"Geocode": "Geocode",
"Display the back to home icon": "Display the back to home icon",
"Do you want to display layer switcher in caption bar?": "Do you want to display layer switcher in caption bar?",
"Simplify all geometries to points": "Simplify all geometries to points"
}
L.registerLocale("ca", locale)
L.setLocale("ca")

View file

@ -457,7 +457,6 @@
"Choose this dataset": "Choose this dataset",
"GeoDataMine: thematic data from OpenStreetMap": "GeoDataMine: thematic data from OpenStreetMap",
"Choose a theme": "Choose a theme",
"Symplify all geometries to points": "Symplify all geometries to points",
"Choose this data": "Choose this data",
"Search admin boundary": "Search admin boundary",
"Please choose a theme and a boundary first.": "Please choose a theme and a boundary first.",
@ -522,10 +521,10 @@
"Anonymous": "Anonymous",
"created at {date}": "created at {date}",
"modified at {date}": "modified at {date}",
"Default zoom": "Default zoom",
"Default latitude": "Default latitude",
"Default longitude": "Default longitude",
"Edit map default view": "Edit map default view",
"Default zoom": "Zoom predeterminat",
"Default latitude": "Latitud predeterminada",
"Default longitude": "Longitud predeterminada",
"Edit map default view": "Edita la visualització predeterminada del mapa",
"Use current center and zoom": "Use current center and zoom",
"Layer permalink": "Layer permalink",
"Back to home": "Back to home",
@ -538,5 +537,8 @@
"Images": "Images",
"Iframes": "Iframes",
"Tags": "Tags",
"Geocode": "Geocode"
"Geocode": "Geocode",
"Display the back to home icon": "Display the back to home icon",
"Do you want to display layer switcher in caption bar?": "Do you want to display layer switcher in caption bar?",
"Simplify all geometries to points": "Simplify all geometries to points"
}

View file

@ -990,9 +990,9 @@ a.umap-control-caption,
height: var(--control-size);
line-height: var(--control-size);
}
/* Links are blue by default */
/* Links are dark cyan by default */
.leaflet-container a {
color: #0078a8;
color: var(--color-veryDarkCyan);
}
/* But not in controls */
.leaflet-bar a {

View file

@ -6,12 +6,15 @@
--color-mediumGray: #3e4444;
--color-darkGray: #323737;
--color-darkerGray: #2a2e30;
--color-veryDarkGray: #1e2121;
--color-light: white;
--color-dark: black;
--color-limeGreen: #b9f5d2;
--color-verySoftCyan: #a1eeeb;
--color-brightCyan: #46ece6;
--color-lightCyan: #d4fbf9;
--color-darkCyan: #009099;
--color-veryDarkCyan: #046460;
--color-red: #c60f13;
--color-darkRed: #5b2a2a;
@ -64,6 +67,7 @@
.dark {
--background-color: var(--color-darkGray);
--text-color: #efefef;
--color-verySoftCyan: #8cdcd9;
}
@media only screen and (max-width:770px) {

View file

@ -0,0 +1,140 @@
{% extends "umap/content.html" %}
{% load umap_tags i18n %}
{% block messages %}
{# We don't want to display errors (yet?). #}
{% endblock messages %}
{% block extra_head %}
{{ block.super }}
<style type="text/css">
h3, h4 {
margin-top: 2rem;
}
.colors-container {
display: flex;
flex-wrap: wrap;
}
.colors-container * {
width: 20%;
margin: 1rem;
border-style: solid;
border-width: 2rem 1px 1px 1px;
padding: 4px;
}
.panel {
position: initial;
padding: 0 1rem 1rem;
}
</style>
{% endblock extra_head %}
{% block maincontent %}
<div class="wrapper">
<h2 class="section">uMap Design System</h2>
<div class="row">
<h3>Forms</h3>
<h4>Copiable link</h4>
<div class="copiable-input">
<label>Lien vers la carte<input type="text" readonly value="http://example.org"></label><button class="icon icon-24 icon-copy" title="copier" type="button"></button>
</div>
<h4>Toggle</h4>
<div class="formbox">
<input type="checkbox" class="switch" id="inBbox"><label for="inBbox">Lister seulement les éléments visibles</label>
</div>
<h4>Multiple choice</h4>
<div class="formbox">
<label title="Afficher les boutons de zoom">Afficher les boutons de zoom</label>
<div class="umap-multiplechoice by3">
<input type="radio" name="zoomControl" id="zoomControl.0" value="true" checked><label for="zoomControl.0">toujours</label>
<input type="radio" name="zoomControl" id="zoomControl.1" value="false"><label for="zoomControl.1">jamais</label>
<input type="radio" name="zoomControl" id="zoomControl.2" value="null"><label for="zoomControl.2">caché</label>
</div>
</div>
<h4>Select</h4>
<div class="formbox">
<label>Voulez-vous afficher un panneau latéral au chargement ?</label>
<select name="onLoadPanel">
<option value="none">Aucun</option>
<option value="caption">Légende</option>
<option value="databrowser">Explorateur : données</option>
</select>
</div>
<h4>You want it darker…</h4>
<div class="panel dark full on">
<h3><i class="icon icon-16 icon-settings" title=""></i><span>Titre avec icône</span></h3>
<details open="">
<summary><span>Options d'interface</span></summary>
<fieldset>
<form>
<div class="formbox">
<input type="checkbox" name="homeControl" data-ref="input" class="switch" id="homeControl">
<label title="Afficher le bouton de retour à l'accueil" for="homeControl">Afficher le bouton de retour à l'accueil</label>
</div>
<div class="formbox">
<label title="Afficher les boutons de zoom">Afficher les boutons de zoom</label>
<div class="umap-multiplechoice by3" data-ref="wrapper">
<input type="radio" name="zoomControl" id="zoomControl.0" value="true"><label for="zoomControl.0">toujours</label>
<input type="radio" name="zoomControl" id="zoomControl.1" value="false" checked><label for="zoomControl.1">jamais</label>
<input type="radio" name="zoomControl" id="zoomControl.2" value="null"><label for="zoomControl.2">caché</label>
</div>
</div>
<div class="formbox">
<label title="Voulez-vous afficher un panneau latéral au chargement ?">Voulez-vous afficher un panneau latéral au chargement ?</label>
<select name="onLoadPanel">
<option value="none">Aucun</option>
<option value="caption">Légende</option>
<option value="databrowser">Explorateur : données</option>
</select>
</div>
</form>
</fieldset>
</details>
<details open="">
<summary><span>Actions avancées</span></summary>
<fieldset>
<div class="button-bar half">
<button class="button" type="button">
<i class="icon icon-24 icon-delete"></i>Supprimer
</button>
<button class="button" type="button">
<i class="icon icon-24 icon-empty"></i>Effacer les données
</button>
<button class="button" type="button">
<i class="icon icon-24 icon-empty"></i>Supprimer les calques
</button>
<button class="button" type="button">
<i class="icon icon-24 icon-clone"></i>Cloner cette carte
</button>
<button class="button" type="button">
<i class="icon icon-24 icon-download"></i>Ouvrir le panneau de partage
</button>
</div>
</fieldset>
</details>
</div>
<h3>Colors</h3>
<div class="grid-container row colors-container"></div>
</div>
</div>
{% endblock maincontent %}
{% block bottom_js %}
{{ block.super }}
<script type="text/javascript">
const colorsContainer = document.querySelector('.colors-container')
const styles = getComputedStyle(document.querySelector('html'))
let html = ""
for (const style of styles) {
if (style.startsWith("--") && style.includes("color")) {
const value = styles.getPropertyValue(style)
html += `<div style="border-color: ${value};">${style}</div>`
}
}
const template = document.createElement('template')
template.innerHTML = html
colorsContainer.appendChild(template.content)
</script>
{% endblock bottom_js %}

View file

@ -0,0 +1,25 @@
from playwright.sync_api import expect
def test_home_control_is_hidden(live_server, map, tilelayer, page):
body = f"""
<html>
<head></head>
<body>
<iframe width="100%" height="300px" frameborder="0" allowfullscreen allow="geolocation"
src="{map.get_absolute_url()}?scaleControl=false&miniMap=false&scrollWheelZoom=false&zoomControl=true&editMode=disabled&moreControl=true&searchControl=null&tilelayersControl=null&embedControl=null&datalayersControl=true&onLoadPanel=caption&captionBar=false&captionMenus=true"></iframe>
</body>
</html>
"""
def handle(route):
route.fulfill(body=body)
url = f"{live_server.url}/test-iframe"
# Intercept the route
page.route(url, handle)
page.goto(url)
expect(
page.locator("iframe").content_frame.get_by_role("link", name="Home logo")
).to_be_hidden()

View file

@ -205,6 +205,7 @@ urlpatterns += i18n_patterns(
)
urlpatterns += (
path("stats/", cache_page(60 * 60)(views.stats), name="stats"),
path("design_system/", views.design_system, name="design_system"),
path(
"favicon.ico",
cache_control(max_age=60 * 60 * 24, immutable=True, public=True)(

View file

@ -1410,6 +1410,13 @@ def stats(request):
)
class DesignSystem(TemplateView):
template_name = "umap/design_system.html"
design_system = DesignSystem.as_view()
@require_GET
@cache_control(max_age=60 * 60 * 24, immutable=True, public=True) # One day.
def webmanifest(request):