territories-dashboard-lib 0.1.1__py3-none-any.whl → 0.1.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of territories-dashboard-lib might be problematic. Click here for more details.

Files changed (76) hide show
  1. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/css/website.css +956 -0
  2. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/chart.js +13 -0
  3. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/chartjs-plugin-datalabels.js +1 -0
  4. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/html2canvas.js +20 -0
  5. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/comparaison/data.mjs +62 -0
  6. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/comparaison/history.mjs +98 -0
  7. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/comparaison/main-values.mjs +30 -0
  8. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/comparaison/page.mjs +105 -0
  9. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/comparaison/territory-chart.mjs +141 -0
  10. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/details/data.mjs +59 -0
  11. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/details/histogram.mjs +130 -0
  12. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/details/map.mjs +25 -0
  13. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/details/page.mjs +96 -0
  14. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/details/proportions.mjs +77 -0
  15. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/details/sankey.mjs +27 -0
  16. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/details/table.mjs +229 -0
  17. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/details/top10.mjs +76 -0
  18. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/details/utils.mjs +8 -0
  19. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/dom.mjs +92 -0
  20. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/enums.mjs +104 -0
  21. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/export-graph.mjs +15 -0
  22. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/export.mjs +20 -0
  23. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/filters.mjs +159 -0
  24. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/format.mjs +54 -0
  25. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/side_panel.mjs +103 -0
  26. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/theme/history.mjs +89 -0
  27. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/theme/main-value.mjs +22 -0
  28. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/theme/page.mjs +162 -0
  29. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/theme/statistics.mjs +42 -0
  30. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/utils.mjs +93 -0
  31. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/static/page.mjs +35 -0
  32. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/patternomaly.js +1452 -0
  33. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/react18.js +31 -0
  34. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/reactdom18.js +267 -0
  35. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/supersetEmbed.js +355 -0
  36. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/react/indicatorMap.bundle.js +2 -0
  37. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/react/sankeyGraph.bundle.js +2 -0
  38. territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/react/vendors-node_modules_mapbox-gl_dist_mapbox-gl_js.bundle.js +2 -0
  39. territories_dashboard_lib/website_lib/templates/admin/indicators_lib/indicator/change_form.html +8 -0
  40. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/404.html +10 -0
  41. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/500.html +10 -0
  42. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/layout/base.html +42 -0
  43. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/layout/base.js +47 -0
  44. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/layout/footer.html +96 -0
  45. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/layout/header.html +101 -0
  46. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/layout/header.js +102 -0
  47. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/comparaison/[theme]/components/indicateur-card.html +48 -0
  48. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/comparaison/[theme]/page.html +52 -0
  49. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/chart-buttons.html +29 -0
  50. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/geo_params.html +71 -0
  51. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/indicator-card.html +52 -0
  52. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/loader.html +28 -0
  53. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/side_panel.html +27 -0
  54. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/side_panel_geo.html +80 -0
  55. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/side_panel_geo.js +85 -0
  56. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/side_panel_methodo.html +45 -0
  57. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/side_panel_methodo.js +19 -0
  58. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/themes-list.html +9 -0
  59. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/themes-nav.html +33 -0
  60. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/title.html +28 -0
  61. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/details/components/filters-reminder.html +19 -0
  62. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/details/components/table.html +123 -0
  63. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/details/page.html +166 -0
  64. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/themes/components/extremum.html +15 -0
  65. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/themes/components/indicateur-card.html +76 -0
  66. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/themes/page.html +66 -0
  67. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/lexique/page.html +17 -0
  68. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/page.html +14 -0
  69. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/sitemap/page.html +71 -0
  70. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/static/page.html +16 -0
  71. territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/superset/page.html +55 -0
  72. {territories_dashboard_lib-0.1.1.dist-info → territories_dashboard_lib-0.1.2.dist-info}/METADATA +1 -1
  73. territories_dashboard_lib-0.1.2.dist-info/RECORD +138 -0
  74. territories_dashboard_lib-0.1.1.dist-info/RECORD +0 -67
  75. {territories_dashboard_lib-0.1.1.dist-info → territories_dashboard_lib-0.1.2.dist-info}/WHEEL +0 -0
  76. {territories_dashboard_lib-0.1.1.dist-info → territories_dashboard_lib-0.1.2.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,8 @@
1
+ {% extends "admin/change_form.html" %}
2
+
3
+ {% block object-tools-items %}
4
+ {{ block.super }}
5
+ <li>
6
+ <a class="button" href="{{ refresh_url }}">Actualiser les filtres</a>
7
+ </li>
8
+ {% endblock %}
@@ -0,0 +1,10 @@
1
+ {% extends "territories_dashboard_lib/website/layout/base.html" %}
2
+
3
+ {% load static %}
4
+
5
+ {% block main %}
6
+ <div class="fr-container fr-pt-md-8w fr-pb-md-10w fr-pt-4w fr-pb-6w">
7
+ <h1>Page inconnue</h1>
8
+ <p>Erreur <strong>404</strong></p>
9
+ </div>
10
+ {% endblock %}
@@ -0,0 +1,10 @@
1
+ {% extends "territories_dashboard_lib/website/layout/base.html" %}
2
+
3
+ {% load static %}
4
+
5
+ {% block main %}
6
+ <div class="fr-container fr-pt-md-8w fr-pb-md-10w fr-pt-4w fr-pb-6w">
7
+ <h1>Page inconnue</h1>
8
+ <p>Erreur <strong>500</strong></p>
9
+ </div>
10
+ {% endblock %}
@@ -0,0 +1,42 @@
1
+ {% load static %}
2
+
3
+ <!doctype html>
4
+ <html lang="fr" data-fr-scheme="light" data-analytics="{% if ANALYTICS_ID %}{{ ANALYTICS_ID|escape }}{% endif %}">
5
+ <head>
6
+ <meta charset="utf-8">
7
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
8
+ <meta name="format-detection" content="telephone=no,date=no,address=no,email=no,url=no">
9
+
10
+ <meta name="theme-color" content="#000091">
11
+ <link rel="apple-touch-icon" href="/favicon/apple-touch-icon.png">
12
+ <link rel="icon" href="/favicon/favicon.svg" type="image/svg+xml">
13
+ <link rel="shortcut icon" href="/favicon/favicon.ico" type="image/x-icon">
14
+ <link rel="manifest" href="/favicon/manifest.webmanifest" crossorigin="use-credentials">
15
+
16
+ <link rel="stylesheet" href="/dsfr.min.css">
17
+ <link rel="stylesheet" href="/utility/utility.min.css">
18
+ <link rel="stylesheet" href="{% static 'territories_dashboard_lib/website/css/website.css' %}">
19
+
20
+ <!-- Script en version es6 module et nomodule pour les navigateurs le ne supportant pas -->
21
+ <script defer type="module" src="/dsfr.module.min.js"></script>
22
+ <script defer type="text/javascript" nomodule src="/dsfr.nomodule.min.js"></script>
23
+ <script> {% include "./base.js" %}</script>
24
+
25
+ <title>
26
+ {% block page_title %}{% endblock %}
27
+ </title>
28
+
29
+ {% if ENVIRONMENT != "prd" %}
30
+ <meta name="robots" content="noindex, nofollow">
31
+ {% endif %}
32
+
33
+ {% block extra_head %}
34
+ {% endblock %}
35
+ </head>
36
+ <body>
37
+ {% include "./header.html" %}
38
+ {% block main %}
39
+ {% endblock %}
40
+ {% include "./footer.html" %}
41
+ </body>
42
+ </html>
@@ -0,0 +1,47 @@
1
+ function updateParamsUrl() {
2
+ const paramsContainer = document.getElementById("params-js");
3
+ if (paramsContainer) {
4
+ const params = JSON.parse(paramsContainer.textContent);
5
+ const currentUrl = new URL(window.location);
6
+ currentUrl.searchParams.delete("territory");
7
+ currentUrl.searchParams.delete("cmp-territory");
8
+ currentUrl.searchParams.delete("mesh");
9
+
10
+ if (params.url_params) {
11
+ const newParams = new URLSearchParams(params.url_params);
12
+
13
+ for (const [key, value] of newParams.entries()) {
14
+ currentUrl.searchParams.set(key, value);
15
+ }
16
+ }
17
+
18
+ window.history.replaceState({}, "", currentUrl.toString());
19
+ }
20
+ }
21
+
22
+ function callAnalytics() {
23
+ const analyticsId = document.querySelector("html").dataset.analytics;
24
+ if (analyticsId) {
25
+ const analyticsUrl =
26
+ "https://audience-sites.din.developpement-durable.gouv.fr/";
27
+ const _paq = (window._paq = window._paq || []);
28
+ _paq.push(["trackPageView"]);
29
+ _paq.push(["enableLinkTracking"]);
30
+ _paq.push(["setTrackerUrl", analyticsUrl + "piwik.php"]);
31
+ _paq.push(["setSiteId", analyticsId]);
32
+ const g = document.createElement("script");
33
+ const s = document.getElementsByTagName("script")[0];
34
+ g.async = true;
35
+ g.src = analyticsUrl + "piwik.js";
36
+ if (s.parentNode) {
37
+ s.parentNode.insertBefore(g, s);
38
+ }
39
+ }
40
+ }
41
+
42
+ document.addEventListener("DOMContentLoaded", function () {
43
+ setTimeout(() => {
44
+ updateParamsUrl();
45
+ callAnalytics();
46
+ }, 500);
47
+ });
@@ -0,0 +1,96 @@
1
+ <footer role="contentinfo" id="page-footer">
2
+ {% if view_name != "website:superset" %}
3
+ <div class="fr-follow fr-pt-8w">
4
+ <h2 class="fr-sr-only">Contact</h2>
5
+ <div class="fr-container">
6
+ <div class="fr-grid-row">
7
+ <div class="fr-col-12 fr-col-md-6">
8
+ <div class="fr-follow__newsletter">
9
+ <div>
10
+ <h3 class="fr-h5 fr-follow__title">Une question ? Écrivez-nous !</h3>
11
+ <p>Vous avez une question ou vous souhaitez nous faire part de vos retours, écrivez-nous ! L'équipe projet vous répondra dans les meilleurs délais.</p>
12
+ <ul class="fr-btns-group fr-btns-group--equisized fr-btns-group--left fr-btns-group--icon-left">
13
+ <li>
14
+ <a href="mailto:tableau-de-bord-mobilites-durables@developpement-durable.gouv.fr" aria-label="Nous contacter par email - nouvelle fenêtre email" target="_blank" class="fr-btn fr-icon-mail-line fr-btn--icon-left">Nous contacter</a>
15
+ </li>
16
+ </ul>
17
+ </div>
18
+ </div>
19
+ </div>
20
+ <div class="fr-col-12 fr-col-md-6">
21
+ <div class="fr-follow__newsletter">
22
+ <div>
23
+ <h3 class="fr-h5">Restez informé.e de l'actualité du {{ main_conf.title }}</h3>
24
+ <p class="fr-text--sm">Pour recevoir des informations sur les nouveautés et prochains événements du {{ main_conf.title }}, laissez nous vos coordonnées en remplissant le formulaire suivant</p>
25
+ <ul class="fr-btns-group fr-btns-group--equisized fr-btns-group--left fr-btns-group--icon-left">
26
+ <li>
27
+ <a href="https://grist.numerique.gouv.fr/o/pnc-mobilite-durable/forms/c4vDkemSd6x34wEz6M87zx/4" aria-label="Formulaire d'inscription - nouvelle fenêtre" target="_blank" class="fr-btn fr-icon-links-line fr-btn--icon-left">Formulaire d'inscription</a>
28
+ </li>
29
+ </ul>
30
+ </div>
31
+ </div>
32
+ </div>
33
+ </div>
34
+ </div>
35
+ </div>
36
+ {% endif %}
37
+ <div class="fr-footer">
38
+ <div class="fr-container">
39
+ <div class="fr-footer__body">
40
+ <div class="fr-footer__brand fr-enlarge-link">
41
+ <a href="/" title="Accueil - {{ main_conf.title }} du {{ main_conf.entity }}">
42
+ <p class="fr-logo">
43
+ {{ main_conf.entity_breaklines|safe }}
44
+ </p>
45
+ </a>
46
+ </div>
47
+ <div class="fr-footer__content">
48
+ <ul class="fr-footer__content-list">
49
+ <li class="fr-footer__content-item">
50
+ <a class="fr-footer__content-link" target="_blank" rel="noopener external" title="info.gouv.fr - nouvelle fenêtre" href="https://info.gouv.fr">info.gouv.fr</a>
51
+ </li>
52
+ <li class="fr-footer__content-item">
53
+ <a class="fr-footer__content-link" target="_blank" rel="noopener external" title="service-public.fr - nouvelle fenêtre" href="https://service-public.fr">service-public.fr</a>
54
+ </li>
55
+ <li class="fr-footer__content-item">
56
+ <a class="fr-footer__content-link" target="_blank" rel="noopener external" title="legifrance.gouv.fr - nouvelle fenêtre" href="https://legifrance.gouv.fr">legifrance.gouv.fr</a>
57
+ </li>
58
+ <li class="fr-footer__content-item">
59
+ <a class="fr-footer__content-link" target="_blank" rel="noopener external" title="data.gouv.fr - nouvelle fenêtre" href="https://data.gouv.fr">data.gouv.fr</a>
60
+ </li>
61
+ </ul>
62
+ </div>
63
+ </div>
64
+ <div class="fr-footer__bottom">
65
+ <ul class="fr-footer__bottom-list">
66
+ <li class="fr-footer__bottom-item">
67
+ <a href="/journal/" class="fr-footer__bottom-link">
68
+ Version {{ version }}
69
+ </a>
70
+ </li>
71
+ {% for link in main_conf.parsed_footer_navigation %}
72
+ <li class="fr-footer__bottom-item">
73
+ {% if link.is_external %}
74
+ <a href="{{ link.href }}"
75
+ target="_blank"
76
+ rel="noopener noreferrer"
77
+ class="fr-footer__bottom-link"
78
+ title="{{ link.title }} - nouvelle fenêtre">
79
+ {{ link.title }}
80
+ </a>
81
+ {% else %}
82
+ <a href="{{ link.href }}" class="fr-footer__bottom-link">
83
+ {{ link.title }}
84
+ </a>
85
+ {% endif %}
86
+ </li>
87
+ {% endfor %}
88
+ </ul>
89
+ <div class="fr-footer__bottom-copy">
90
+ <p>Sauf mention explicite de propriété intellectuelle détenue par des tiers, les contenus de ce site sont proposés sous <a href="https://github.com/etalab/licence-ouverte/blob/master/LO.md" target="_blank" rel="noopener external" title="Licence etalab - nouvelle fenêtre">licence etalab-2.0</a>
91
+ </p>
92
+ </div>
93
+ </div>
94
+ </div>
95
+ </div>
96
+ </footer>
@@ -0,0 +1,101 @@
1
+ <div class="fr-skiplinks">
2
+ <nav role="navigation" class="fr-container" aria-label="Accès rapide">
3
+ <ul class="fr-skiplinks__list">
4
+ <li>
5
+ <a class="fr-link" href="#contenu">Contenu</a>
6
+ </li>
7
+ <li>
8
+ <a class="fr-link" href="#navigation-tabs">Menu</a>
9
+ </li>
10
+ <li>
11
+ <a class="fr-link" href="#page-footer">Pied de page</a>
12
+ </li>
13
+ </ul>
14
+ </nav>
15
+ </div>
16
+ <header class="fr-header" role="banner">
17
+ <div class="fr-header__body">
18
+ <div class="fr-container">
19
+ <div class="fr-header__body-row">
20
+ <div class="fr-header__brand">
21
+ <div class="fr-header__brand-top">
22
+ <a href="/" class="internal-outline" title="Accueil - {{ main_conf.title }} du {{ main_conf.entity }}">
23
+ <div class="fr-header__logo">
24
+ <p class="fr-logo">
25
+ {{ main_conf.entity_breaklines|safe }}
26
+ </p>
27
+ </div>
28
+ </a>
29
+ <div class="fr-header__navbar">
30
+ <button class="fr-btn--menu fr-btn" data-fr-opened="false" aria-controls="header-navigation" id="button-492" title="Menu">
31
+ Menu
32
+ </button>
33
+ </div>
34
+ </div>
35
+ <div class="fr-header__service">
36
+ <p class="fr-header__service-title">
37
+ {{ main_conf.title }}
38
+ {% if ENVIRONMENT != "prd" %}
39
+ <span class="fr-badge fr-badge--success fr-badge--no-icon" id="fr-badge-:Rj5ikq:">{% if ENVIRONMENT == "ppd" %}PREPROD{% else %}DEV{% endif %}</span>
40
+ {% endif %}
41
+ </p>
42
+ </div>
43
+ </div>
44
+ </div>
45
+ </div>
46
+ </div>
47
+ <div class="fr-header__menu fr-modal" id="header-navigation" aria-labelledby="button-492">
48
+ <div class="fr-container">
49
+ <button class="fr-btn--close fr-btn" aria-controls="header-navigation" title="Fermer">
50
+ Fermer
51
+ </button>
52
+ <div class="fr-header__menu-links">
53
+ </div>
54
+ <nav role="navigation" class="fr-nav" id="navigation-tabs" aria-label="Menu principal">
55
+ <ul class="fr-nav__list">
56
+ {% for item in main_conf.parsed_header_navigation %}
57
+ {% if item.links %}
58
+ <li class="fr-nav__item">
59
+ <button class="fr-nav__btn" aria-expanded="false" aria-controls="menu-{{ forloop.counter }}">
60
+ {{ item.title }}
61
+ </button>
62
+ <div class="fr-collapse fr-menu" id="menu-{{ forloop.counter }}">
63
+ <ul class="fr-menu__list">
64
+ {% for link in item.links %}
65
+ <li>
66
+ <a class="fr-nav__link" href="{{ link.link }}" target="_self">{{ link.title }}</a>
67
+ </li>
68
+ {% endfor %}
69
+ </ul>
70
+ </div>
71
+ </li>
72
+ {% else %}
73
+ <li class="fr-nav__item">
74
+ <a class="fr-nav__link" href="{{ item.link }}" target="_self">{{ item.title }}</a>
75
+ </li>
76
+ {% endif %}
77
+ {% endfor %}
78
+ </ul>
79
+ </nav>
80
+ </div>
81
+ </div>
82
+ {% if notice %}
83
+ <div id="notice" class="fr-notice fr-notice--info" data-show="false" data-id="{{ notice.id }}">
84
+ <div class="fr-container">
85
+ <div class="fr-notice__body">
86
+ <p>
87
+ <span class="fr-notice__title">{{ notice.title }}</span>
88
+ <span class="fr-notice__desc">{{ notice.description }}</span>
89
+ {% if notice.link_href and notice.link_text %}
90
+ <a href="{{ notice.link_href }}" class="fr-notice__link fr-icon-arrow-right-line fr-link--icon-left">{{ notice.link_text }}</a>
91
+ {% endif %}
92
+ </p>
93
+ <button id="close-notice" aria-controls="notice" title="Masquer le message" class="fr-btn--close fr-btn">Masquer le message</button>
94
+ </div>
95
+ </div>
96
+ </div>
97
+ {% endif %}
98
+ </header>
99
+ <script>
100
+ {% include "./header.js" %}
101
+ </script>
@@ -0,0 +1,102 @@
1
+ function addCurrentLink() {
2
+ const hrefs = Array.from(document.querySelectorAll("#navigation-tabs a"))
3
+ .map((el) => new URL(el.href).pathname)
4
+ .sort((a, b) => b.length - a.length);
5
+ const path = window.location.pathname;
6
+ for (let i = 0; i < hrefs.length; i++) {
7
+ const href = hrefs[i];
8
+ if (path.startsWith(href)) {
9
+ const link = document.querySelector(
10
+ `#navigation-tabs a[href="${href}"]`
11
+ );
12
+ if (link) {
13
+ link.setAttribute("aria-current", true);
14
+ return;
15
+ }
16
+ }
17
+ }
18
+ }
19
+
20
+ addCurrentLink();
21
+
22
+ // NOTICE ---------------
23
+
24
+ const NOTICE_COOKIE = "notice";
25
+
26
+ function setCookie(cname, cvalue, exdays) {
27
+ const d = new Date();
28
+ d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000);
29
+ const expires = `expires=${d.toUTCString()}`;
30
+ document.cookie = `${cname}=${cvalue};${expires};path=/`;
31
+ }
32
+
33
+ function getCookie(cname) {
34
+ const name = `${cname}=`;
35
+ const decodedCookie = decodeURIComponent(document.cookie);
36
+ const ca = decodedCookie.split(";");
37
+ for (let i = 0; i < ca.length; i++) {
38
+ let c = ca[i];
39
+ while (c.charAt(0) === " ") {
40
+ c = c.substring(1);
41
+ }
42
+ if (c.indexOf(name) === 0) {
43
+ return c.substring(name.length, c.length);
44
+ }
45
+ }
46
+ return "";
47
+ }
48
+
49
+ function focusAfterHeader() {
50
+ const header = document.querySelector("header");
51
+ const focusableSelectors = [
52
+ "button",
53
+ "[href]",
54
+ "input",
55
+ "select",
56
+ "textarea",
57
+ '[tabindex]:not([tabindex="-1"])',
58
+ ];
59
+ const focusableElements = Array.from(
60
+ document.querySelectorAll(focusableSelectors.join(","))
61
+ );
62
+
63
+ // Find the first focusable element after the header
64
+ for (let el of focusableElements) {
65
+ if (
66
+ !header.contains(el) &&
67
+ header.compareDocumentPosition(el) &
68
+ Node.DOCUMENT_POSITION_FOLLOWING
69
+ ) {
70
+ el.focus();
71
+ return;
72
+ }
73
+ }
74
+ const firstHeaderLink = document.querySelector("#navigation-tabs a");
75
+ firstHeaderLink.focus();
76
+ }
77
+
78
+ const closeNotice = document.getElementById("close-notice");
79
+
80
+ if (closeNotice) {
81
+ closeNotice.addEventListener("click", () => {
82
+ const notice = closeNotice.parentNode.parentNode.parentNode;
83
+ notice.parentNode.removeChild(notice);
84
+ const cookie = getCookie(NOTICE_COOKIE);
85
+ const newValue =
86
+ cookie === ""
87
+ ? notice.dataset.id
88
+ : `${cookie},${notice.dataset.id}`;
89
+ setCookie(NOTICE_COOKIE, newValue, 365);
90
+ focusAfterHeader();
91
+ });
92
+ }
93
+
94
+ const notice = document.querySelector(".fr-notice");
95
+ if (notice) {
96
+ const cookie = getCookie(NOTICE_COOKIE);
97
+ const isRead =
98
+ cookie !== "" && cookie.split(",").includes(notice.dataset.id);
99
+ if (!isRead) {
100
+ notice.dataset.show = true;
101
+ }
102
+ }
@@ -0,0 +1,48 @@
1
+ {% load htmlparams %}
2
+
3
+ {% htmlparams %}
4
+ {% htmlparam body %}
5
+ <div class="fr-mt-3w comparison-main-values">
6
+ <div>Dernier millésime:</div>
7
+ <div class="territory-value fr-text--lg fr-mb-0 delay-spinner">
8
+ <span>{% include "territories_dashboard_lib/website/pages/indicators/components/loader.html" with width=32 %}</span>
9
+ <span class="unite">{{indicator.unite}}</span>
10
+ </div>
11
+ <div class="compared-territory-value fr-text--lg fr-mb-0 delay-spinner">
12
+ <span>{% include "territories_dashboard_lib/website/pages/indicators/components/loader.html" with width=32 %}</span>
13
+ <span class="unite">{{indicator.unite}}</span>
14
+ </div>
15
+ </div>
16
+ <div style="height: 300px;">
17
+ <canvas class="history-chart" aria-describedby="{{indicator.id}}values-export-csv"></canvas>
18
+ </div>
19
+ {% include "territories_dashboard_lib/website/pages/indicators/components/chart-buttons.html" with name="Historique comparaison" route="values" indicator=indicator pattern="show" %}
20
+ {% endhtmlparam %}
21
+
22
+ {% htmlparam footer %}
23
+ <section class="fr-accordion tdbmd-indicator-accordion tdbmd-indicator-accordion-comparison">
24
+ <h3 class="fr-accordion__title">
25
+ <button
26
+ class="fr-accordion__btn border-top"
27
+ aria-expanded="false"
28
+ aria-controls="accordion-{{indicator.id}}"
29
+ aria-label="Répartition des valeurs - {{ indicator.title }}"
30
+ >
31
+ Répartition des valeurs
32
+ </button>
33
+ </h3>
34
+ <div
35
+ class="fr-collapse"
36
+ id="accordion-{{indicator.id}}"
37
+ >
38
+ {% include "territories_dashboard_lib/website/pages/indicators/components/title.html" with title="Répartition des territoires selon les valeurs de l'indicateur (graphique en “miroir”)" key=indicator.name h4=True text="Survolez les barres du graphique pour afficher le nombre de territoires dans chaque classe de valeurs (le nom des territoires s'affiche s'il y a moins de 6 territoires). Le graphique du haut correspond à la répartition pour le territoire 1 sélectionné, alors que le graphique du bas (en “miroir”) correspond à la répartition pour le territoire 2 de comparaison. Précisions : Ce graphique varie selon la maille sélectionnée." %}
39
+ <div style="width: 100%; height: 500px; margin-top: -1rem;">
40
+ <canvas class="comparison-chart" aria-describedby="{{indicator.id}}comparison-histogram-export-csv"></canvas>
41
+ </div>
42
+ {% include "territories_dashboard_lib/website/pages/indicators/components/chart-buttons.html" with name="Comparaison de la répartition" route="comparison-histogram" indicator=indicator pattern="show" %}
43
+ </div>
44
+ </section>
45
+ {% endhtmlparam %}
46
+
47
+ {% include "territories_dashboard_lib/website/pages/indicators/components/indicator-card.html" with indicator=indicator %}
48
+ {% endhtmlparams %}
@@ -0,0 +1,52 @@
1
+ {% extends "territories_dashboard_lib/website/pages/page.html" %}
2
+ {% load static %}
3
+ {% load other_filters %}
4
+
5
+ {% block page_title %}Comparaison - {{theme.title}}{% endblock %}
6
+
7
+ {% block extra_head%}
8
+ <script defer src="https://cdn.jsdelivr.net/npm/chart.js"></script>
9
+ <script defer src="{% static 'territories_dashboard_lib/website/js/chartjs-plugin-datalabels.js' %}"></script>
10
+ <script defer src="{% static 'territories_dashboard_lib/website/js/html2canvas.js' %}"></script>
11
+ <script defer src="{% static 'territories_dashboard_lib/website/js/patternomaly.js' %}"></script>
12
+ {{ params|json_script:"params-js" }}
13
+ {{ sub_themes|json_script:"sub-themes-js" }}
14
+ <script defer type="module" src="{% static 'territories_dashboard_lib/website/js/pages/indicators/comparaison/page.mjs' %}"></script>
15
+ {% endblock %}
16
+
17
+ {% block main %}
18
+
19
+ <div class="tdbmd-thematics">
20
+ <div class="fr-grid-row">
21
+ <aside class="fr-col-md-3 fr-col-12 fr-pt-md-5w fr-pt-0">
22
+ {% include "territories_dashboard_lib/website/pages/indicators/components/themes-nav.html" with comparison=True %}
23
+ </aside>
24
+ <main role="main" class="tdbmd-thematics__content tdbmd-content fr-col-12 fr-col-md-9" id="contenu" tabindex="-1">
25
+ {% include "territories_dashboard_lib/website/pages/indicators/components/geo_params.html" with comparison=True %}
26
+ {% include "territories_dashboard_lib/website/pages/indicators/components/themes-list.html" %}
27
+ <div>
28
+ <div class="fr-pr-md-4w fr-pl-md-4w fr-pr-2w fr-pl-2w fr-mt-4w">
29
+ <h1>Comparaison : {{ theme.title }}</h1>
30
+ </div>
31
+ {% for sub_theme in sub_themes %}
32
+ <div
33
+ id="{{sub_theme.name}}"
34
+ class="subtheme fr-pr-md-4w fr-pl-md-4w fr-pr-2w fr-pl-2w fr-pt-5w fr-pb-5w"
35
+ >
36
+ <h2>{{ sub_theme.title }}</h2>
37
+ {% for indicator in sub_theme.indicators %}
38
+ {% with indicator.id|stringformat:"i"|add:"-api-urls" as script_name %}
39
+ {{ indicator|indicator_api_urls|json_script:script_name }}
40
+ {% endwith %}
41
+ {% include "./components/indicateur-card.html" with indicator=indicator %}
42
+ {% endfor %}
43
+ </div>
44
+ {% endfor %}
45
+ {% include "territories_dashboard_lib/website/pages/indicators/components/side_panel_geo.html" %}
46
+ {% include "territories_dashboard_lib/website/pages/indicators/components/side_panel_methodo.html" %}
47
+ </div>
48
+ </main>
49
+ </div>
50
+ </div>
51
+
52
+ {% endblock %}
@@ -0,0 +1,29 @@
1
+ <div class="chart-buttons" {% if no_pb %}style="padding-bottom: 0px;"{% endif %}>
2
+ <button
3
+ aria-label="Exporter le graphique {{ name }} en png{% if not one_indicator %} - {{ indicator.title }}{% endif %}"
4
+ data-title="{{ name }}"
5
+ data-type="export-png"
6
+ class="fr-btn fr-btn--secondary fr-btn--sm fr-icon-image-line fr-btn--icon-right btn-download">
7
+ Exporter le graphique en png
8
+ </button>
9
+ <button
10
+ aria-label="Exporter le graphique {{ name }} en csv{% if not one_indicator %} - {{ indicator.title }}{% endif %}"
11
+ id="{{indicator.id}}{{ route }}-export-csv"
12
+ data-title="{{ name }}"
13
+ data-route="{{ route }}"
14
+ data-type="export-csv"
15
+ class="fr-btn fr-btn--secondary fr-btn--sm fr-icon-line-chart-line fr-btn--icon-right btn-download">
16
+ Exporter le graphique en csv
17
+ </button>
18
+ {% if pattern %}
19
+ <div class="fr-toggle">
20
+ <input
21
+ type="checkbox"
22
+ class="fr-toggle__input pattern-toggle"
23
+ id="{{ route }}-pattern-toggle"
24
+ aria-label="Ajouter des motifs au graphique {{ name }}{% if not one_indicator %} - {{ indicator.title }}{% endif %}"
25
+ >
26
+ <label class="checkbox-label fr-toggle__label fr-text--sm" for="{{ route }}-pattern-toggle">Ajouter des motifs</label>
27
+ </div>
28
+ {% endif %}
29
+ </div>
@@ -0,0 +1,71 @@
1
+ {% load other_filters %}
2
+
3
+ <div class="tdbmd-thematics__btns">
4
+ <div class="tdbmd-territory">
5
+ <button
6
+ class="fr-btn fr-btn--tertiary fr-icon-pencil-line fr-btn--icon-right tdbmd-territory__btn"
7
+ aria-description="Modifier mon territoire dans la barre latérale"
8
+ aria-controls="slide-panel-geo"
9
+ data-comparison="false"
10
+ >
11
+ <span class="tdbmd-territory__btn-title fr-text--xs">
12
+ Territoire sélectionné
13
+ </span>
14
+ <span class="tdbmd-territory__btn-mesh">
15
+ {{ params.territory_name }}
16
+ </span>
17
+ </button>
18
+ </div>
19
+ {% if comparison %}
20
+ <div class="tdbmd-territory">
21
+ <button
22
+ class="fr-btn fr-btn--tertiary fr-icon-pencil-line fr-btn--icon-right tdbmd-territory__btn"
23
+ aria-description="Modifier mon territoire de comparaison dans la barre latérale"
24
+ aria-controls="slide-panel-geo"
25
+ data-comparison="true"
26
+ >
27
+ <span class="tdbmd-territory__btn-title fr-text--xs">
28
+ Territoire de comparaison
29
+ </span>
30
+ <span class="tdbmd-territory__btn-mesh">
31
+ {{ params.cmp_territory_name }}
32
+ </span>
33
+ </button>
34
+ </div>
35
+ {% endif %}
36
+ <div class="tdbmd-mesh">
37
+ <button
38
+ aria-expanded="false"
39
+ aria-controls="tdbmd-mesh-list"
40
+ class="tdbmd-mesh__btn fr-btn fr-btn--tertiary fr-icon-arrow-down-s-line fr-btn--icon-right tdbmd-mesh__btn"
41
+ aria-description="Modifier la maille"
42
+ >
43
+ <span class="tdbmd-mesh__btn-title fr-text--xs">Maille</span>
44
+ <span class="tdbmd-mesh__btn-mesh">
45
+ {{ params.meshes_titles|get_item:params.mesh }}
46
+ </span>
47
+ </button>
48
+ <ul
49
+ class="fr-collapse tdbmd-mesh__list"
50
+ id="tdbmd-mesh-list"
51
+ >
52
+ {% for m in params.meshes %}
53
+ <li class="tdbmd-mesh__list-item">
54
+ <button
55
+ onClick="
56
+ const urlParams = new URLSearchParams(window.location.search);
57
+ urlParams.set('mesh', '{{ m }}');
58
+ window.location.search = urlParams;
59
+ "
60
+ class="fr-btn fr-btn--tertiary-no-outline tdbmd-mesh__list-btn
61
+ {% if m == params.mesh %}tdbmd-mesh__list-btn--current{% endif %}
62
+ "
63
+ aria-label="Sélectionnez {{ params.meshes_titles|get_item:m }}"
64
+ >
65
+ {{ params.meshes_titles|get_item:m }}
66
+ </button>
67
+ </li>
68
+ {% endfor %}
69
+ </ul>
70
+ </div>
71
+ </div>