territories-dashboard-lib 0.1.1__py3-none-any.whl → 0.1.3__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 (77) 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/website_lib/templates/territories_dashboard_lib/website/svg/delete-back.svg +1 -0
  73. {territories_dashboard_lib-0.1.1.dist-info → territories_dashboard_lib-0.1.3.dist-info}/METADATA +1 -1
  74. territories_dashboard_lib-0.1.3.dist-info/RECORD +139 -0
  75. territories_dashboard_lib-0.1.1.dist-info/RECORD +0 -67
  76. {territories_dashboard_lib-0.1.1.dist-info → territories_dashboard_lib-0.1.3.dist-info}/WHEEL +0 -0
  77. {territories_dashboard_lib-0.1.1.dist-info → territories_dashboard_lib-0.1.3.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,52 @@
1
+ <section
2
+ id="card-{{ indicator.id }}"
3
+ class="indicator-card fr-grid-row fr-grid-row-md--gutters"
4
+ data-indicator="{{ indicator.id }}"
5
+ >
6
+ {{ indicator|json_script:indicator.id }}
7
+ <div class="fr-col-12">
8
+ <div class="tdbmd-indicator-card fr-p-3w fr-mt-md-5w fr-mt-3w">
9
+ <h3 class="fr-h6">{{indicator.title}}</h3>
10
+ <p>{{indicator.description}}</p>
11
+ {% if indicator.source %}
12
+ <p class="tdbmd-indicator-source">
13
+ <span class="tdbmd-indicator-source__title">Source</span>
14
+ <span>:</span>
15
+ {{indicator.source}}
16
+ </p>
17
+ {% endif %}
18
+ <button
19
+ class="fr-btn fr-btn--secondary fr-btn--sm fr-icon-file-line fr-btn--icon-right"
20
+ aria-label="Fiche méthodologique - {{ indicator.title }}"
21
+ aria-controls="slide-panel-methodo"
22
+ >
23
+ Fiche méthodologique
24
+ </button>
25
+ <div class="fr-tag-list fr-mt-4w" role="group" aria-label="Filtres disponibles">
26
+ {% for dimension_filters in indicator.filters %}
27
+ <div class="filters-dimension">
28
+ {% if indicator.filters|length > 1 %}
29
+ <label>{{ dimension_filters.0.title }}</label>
30
+ {% endif %}
31
+ <div>
32
+ {% for filter in dimension_filters.1 %}
33
+ <button
34
+ class="fr-tag filter-tag"
35
+ aria-label="{{ filter.db_name }} - {{indicator.title}}"
36
+ data-indicator="{{ indicator.id }}"
37
+ data-dimension="{{ dimension_filters.0.db_name }}"
38
+ data-filter="{{ filter.db_name|escape }}"
39
+ data-default="{{ filter.default|yesno:'true,false' }}"
40
+ >
41
+ {{filter.db_name}}
42
+ </button>
43
+ {% endfor %}
44
+ </div>
45
+ </div>
46
+ {% endfor %}
47
+ </div>
48
+ {{ body }}
49
+ </div>
50
+ {{ footer }}
51
+ </div>
52
+ </section>
@@ -0,0 +1,28 @@
1
+ <span style="display: inline-block; width: {{width}}px;">
2
+ <svg
3
+ xmlns="http://www.w3.org/2000/svg"
4
+ xmlnsXlink="http://www.w3.org/1999/xlink"
5
+ viewBox="0 0 100 100"
6
+ preserveAspectRatio="xMidYMid"
7
+ >
8
+ <circle
9
+ cx="50"
10
+ cy="50"
11
+ r="35"
12
+ stroke-width="10"
13
+ stroke="#6a6af4"
14
+ stroke-dasharray="180"
15
+ fill="none"
16
+ stroke-linecap="round"
17
+ >
18
+ <animateTransform
19
+ attributeName="transform"
20
+ type="rotate"
21
+ repeatCount="indefinite"
22
+ dur="1.1764705882352942s"
23
+ keyTimes="0;1"
24
+ values="0 50 50;360 50 50"
25
+ ></animateTransform>
26
+ </circle>
27
+ </svg>
28
+ </span>
@@ -0,0 +1,27 @@
1
+ <aside id="slide-panel-{% block "type" %}{% endblock %}" role="dialog" aria-modal="true" aria-label="{% block "aria-label" %}{% endblock %}" class="tdbmd-slide-panel">
2
+ <button
3
+ class="tdbmd-slide-panel__btn fr-btn fr-btn--tertiary"
4
+ data-side-panel-close="true"
5
+ >
6
+ <span
7
+ className="tdbmd-slide-panel__icon"
8
+ aria-hidden="true"
9
+ >
10
+ <div style="width: 24px; transform: rotate(180deg);">
11
+ {% include "territories_dashboard_lib/website/svg/delete-back.svg" %}
12
+ </div>
13
+ </span>
14
+ <span class="fr-sr-only">Fermer</span>
15
+ </button>
16
+ <div class="tdbmd-slide-panel__content">
17
+ <button
18
+ class="fr-btn fr-btn--tertiary tdbmd-slide-panel__btn--mobile fr-mb-2w fr-mt-3w fr-ml-4w"
19
+ data-side-panel-close="true"
20
+ >
21
+ Fermer
22
+ </button>
23
+ <div id="slide-panel-content">
24
+ {% block "content" %}{% endblock %}
25
+ </div>
26
+ </div>
27
+ </aside>
@@ -0,0 +1,80 @@
1
+ {% extends "./side_panel.html" %}
2
+
3
+ {% load other_filters %}
4
+
5
+ {% block "type" %}geo{% endblock %}
6
+
7
+ {% block "aria-label" %}Menu pour le choix du territoire{% endblock %}
8
+
9
+ {% block "content" %}
10
+ <h1 class="fr-sr-only">Choix du territoire</h1>
11
+ <div id="geo_side_panel" class="tdbmd-territory-tabs" style="margin-top: 32px;">
12
+ <div class="fr-tabs fr-transition-none">
13
+ <ul class="fr-tabs__list" role="tablist">
14
+ {% for m in params.all_meshes %}
15
+ <li role="presentation">
16
+ <button
17
+ id="tabpanel-{{ m }}"
18
+ class="fr-tabs__tab fr-tabs__tab--icon-left"
19
+ {% if m == params.territory_mesh %}
20
+ tabindex="0"
21
+ aria-selected="true"
22
+ {% else %}
23
+ tabindex="-1"
24
+ aria-selected="false"
25
+ {% endif %}
26
+ role="tab"
27
+ aria-controls="tabpanel-{{ m }}-panel">
28
+ {{ params.meshes_titles|get_item:m }}
29
+ </button>
30
+ </li>
31
+ {% endfor %}
32
+ </ul>
33
+ {% for m in params.all_meshes %}
34
+ <div id="tabpanel-{{ m }}-panel" class="fr-tabs__panel tdbmbd-tabpanel-panel {% if m == params.territory_mesh %}fr-tabs__panel--selected{% endif %}" role="tabpanel" aria-labelledby="tabpanel-{{ m }}" tabindex="0" style="transition: none;">
35
+ <h2>
36
+ {{ params.meshes_titles|get_item:m }}
37
+ </h2>
38
+ <div class="fr-input-group autocomplete-input">
39
+ <label id="territories-label-{{ m }}" class="fr-label" for="search-territories-{{ m }}">Sélectionner un territoire</label>
40
+ <div class="fr-input-wrap fr-input-wrap--addon">
41
+ <input
42
+ data-mesh="{{ m }}"
43
+ id="search-territories-{{ m }}" class="fr-input search-territory-input" aria-autocomplete="list" aria-controls="territories-menu-{{ m }}" aria-expanded="false" aria-labelledby="territories-label-{{ m }}" autocomplete="off" role="combobox" type="text"
44
+ ></input>
45
+ <button class="fr-btn fr-icon-arrow-down-s-line autocomplete-btn" aria-controls="territories-menu-{{ m }}" aria-expanded="false" tabindex="-1" title="Sélectionner un territoire">
46
+ </button>
47
+ </div>
48
+ </div>
49
+ <ul id="territories-menu-{{ m }}" data-mesh="{{ m }}" class="tdbmd-combobox-suggestions" role="listbox">
50
+ <li data-type="load"><button onclick="loadMoreTerritories(this)" data-mesh="{{ m }}" class="fr-btn fr-btn--secondary fr-btn--sm">Charger plus de résultats</button></li>
51
+ </ul>
52
+ <input id="selected-territory-id-{{ m }}" type="hidden">
53
+ <input id="selected-territory-mesh-{{ m }}" type="hidden">
54
+ <input id="selected-territory-raw-name-{{ m }}" type="hidden">
55
+ <button
56
+ id="selected-territory-validate-{{ m }}"
57
+ data-mesh="{{ m }}"
58
+ disabled
59
+ class="fr-btn validate-territory-btn"
60
+ onclick="validateTerritory(this)"
61
+ >
62
+ Valider
63
+ </button>
64
+ <em id="selected-territory-name-{{ m }}"></em>
65
+ </div>
66
+ {% endfor %}
67
+ </div>
68
+ <div class="side-panel-last-close-button-container">
69
+ <button
70
+ class="fr-btn fr-btn--tertiary-no-outline fr-btn--sm"
71
+ data-side-panel-close="true"
72
+ >
73
+ Fermer la sélection du territoire
74
+ </button>
75
+ </div>
76
+ <script>
77
+ {% include "./side_panel_geo.js" %}
78
+ </script>
79
+ </div>
80
+ {% endblock %}
@@ -0,0 +1,85 @@
1
+ async function fetchTerritories(search, mesh, offset = 0, append = false) {
2
+ const searchParams = new URLSearchParams(
3
+ `mesh=${mesh}&search=${search}&offset=${offset}`
4
+ ).toString();
5
+ const resp = await fetch(`/api/geo/search-territories/?${searchParams}`);
6
+ if (resp.ok) {
7
+ const lis = await resp.text();
8
+ const list = document.getElementById(`territories-menu-${mesh}`);
9
+ if (append) {
10
+ list.querySelector('li[data-type="load"]').remove();
11
+ list.innerHTML += lis;
12
+ } else {
13
+ list.innerHTML = lis;
14
+ }
15
+ }
16
+ }
17
+
18
+ // eslint-disable-next-line no-unused-vars
19
+ function loadMoreTerritories(button) {
20
+ const mesh = button.dataset.mesh;
21
+ const offset = button.dataset.offset;
22
+ const input = document.getElementById(`search-territories-${mesh}`);
23
+ fetchTerritories(input.value, button.dataset.mesh, offset, true);
24
+ }
25
+
26
+ // eslint-disable-next-line no-unused-vars
27
+ function chooseTerritory(li) {
28
+ const name = li.dataset.name;
29
+ const code = li.dataset.code;
30
+ const nameAndCode = li.textContent;
31
+ const mesh = li.parentNode.dataset.mesh;
32
+ document.getElementById(`search-territories-${mesh}`).value = nameAndCode;
33
+ document.getElementById(`selected-territory-id-${mesh}`).value = code;
34
+ document.getElementById(`selected-territory-mesh-${mesh}`).value = mesh;
35
+ document.getElementById(`selected-territory-raw-name-${mesh}`).value = name;
36
+ document.getElementById(
37
+ `selected-territory-name-${mesh}`
38
+ ).innerText = `(${name})`;
39
+ document
40
+ .getElementById(`selected-territory-validate-${mesh}`)
41
+ .removeAttribute("disabled");
42
+ }
43
+
44
+ // eslint-disable-next-line no-unused-vars
45
+ function validateTerritory(button) {
46
+ const mesh = button.dataset.mesh;
47
+ const territoryID = document.getElementById(
48
+ `selected-territory-id-${mesh}`
49
+ ).value;
50
+ const territoryMesh = document.getElementById(
51
+ `selected-territory-mesh-${mesh}`
52
+ ).value;
53
+ const urlParams = new URLSearchParams(window.location.search);
54
+ const comparison = button.dataset.comparison == "true" ? "cmp-" : "";
55
+ const currentTerritory = urlParams.get(comparison + "territory");
56
+ const currentTerritoryMesh = currentTerritory
57
+ ? currentTerritory.split("-")[1]
58
+ : null;
59
+ if (territoryMesh !== currentTerritoryMesh) {
60
+ urlParams.delete("mesh");
61
+ }
62
+ urlParams.set(comparison + "territory", `${territoryID}-${territoryMesh}`);
63
+ window.location.search = urlParams;
64
+ }
65
+
66
+ function debounce(func, delay) {
67
+ let timeoutId;
68
+ return function (...args) {
69
+ if (timeoutId) clearTimeout(timeoutId);
70
+ timeoutId = setTimeout(() => func.apply(this, args), delay);
71
+ };
72
+ }
73
+
74
+ const debouncedSearch = debounce(fetchTerritories, 400);
75
+
76
+ const inputs = document.querySelectorAll(".search-territory-input");
77
+
78
+ inputs.forEach((input) => {
79
+ const mesh = input.dataset.mesh;
80
+ input.addEventListener("input", () => {
81
+ const searchValue = input.value;
82
+ debouncedSearch(searchValue, mesh);
83
+ });
84
+ fetchTerritories("", mesh);
85
+ });
@@ -0,0 +1,45 @@
1
+ {% extends "./side_panel.html" %}
2
+
3
+ {% block "type" %}methodo{% endblock %}
4
+
5
+ {% block "aria-label" %}Menu de la fiche méthodologique{% endblock %}
6
+
7
+ {% block "content" %}
8
+ <div id="slide-panel-content-methodo" class="tdbmd-slide-panel-fiche-methodo">
9
+ <div class="fr-header">
10
+ <div class="fr-header__body">
11
+ <div class="fr-container">
12
+ <div class="fr-header__body-row">
13
+ <div class="fr-header__brand">
14
+ <div class="fr-header__brand-top">
15
+ <div class="fr-header__logo">
16
+ <p class="fr-logo">
17
+ Ministères <br />
18
+ aménagement <br />
19
+ du territoire <br />
20
+ transition <br/>
21
+ écologique
22
+ </p>
23
+ </div>
24
+ </div>
25
+ <div class="fr-header__service">
26
+ <p class="fr-header__service-title">
27
+ Tableau de bord des mobilités durables
28
+ </p>
29
+ <p class="fr-header__service-tagline">Fiche méthodologique</p>
30
+ </div>
31
+ </div>
32
+ </div>
33
+ </div>
34
+ </div>
35
+ </div>
36
+ <h1 class="fr-sr-only">Fiche méthodologique</h1>
37
+ <h2 id="slide-panel-methodo-indicator-title" class="tdbmd-slide-panel__subtitle"></h2>
38
+ <p class="tdbmd-slide-panel__thematic fr-pl-md-4w">Thématique : <span id="slide-panel-methodo-theme-title"></span></p>
39
+ <div id="slide-panel-content-methodo-markdown" class="fr-pl-md-4w tdbmd-markdown"></div>
40
+ <button id="methodo-export-button" class="fr-btn fr-btn--secondary fr-btn--sm fr-icon-file-pdf-line fr-btn--icon-right fr-mx-4w fr-mt-2w fr-mb-4w">Exporter la fiche méthodologique</button>
41
+ <script>
42
+ {% include "./side_panel_methodo.js" %}
43
+ </script>
44
+ </div>
45
+ {% endblock %}
@@ -0,0 +1,19 @@
1
+ const button = document.getElementById("methodo-export-button");
2
+ button.addEventListener("click", async () => {
3
+ const indicatorName = button.dataset.indicatorName;
4
+ const indicatorTitle = button.dataset.indicatorTitle;
5
+ const response = await fetch(`/api/indicators/${indicatorName}/methodo/`);
6
+
7
+ if (!response.ok) {
8
+ throw new Error("Failed to fetch the PDF file.");
9
+ }
10
+
11
+ // Create a download link
12
+ const blob = await response.blob();
13
+ const url = window.URL.createObjectURL(blob);
14
+ const a = document.createElement("a");
15
+ a.href = url;
16
+ a.download = `${indicatorTitle}.pdf`;
17
+ a.click();
18
+ window.URL.revokeObjectURL(url);
19
+ });
@@ -0,0 +1,9 @@
1
+ <ul id="thematics-links">
2
+ {% for theme in themes %}
3
+ <li>
4
+ <a href="{% if comparison %}{% url 'website:comparison' theme_name=theme.name %}{% else %}{% url 'website:theme' theme_name=theme.name %}{% endif %}">
5
+ {{ theme.title }}
6
+ </a>
7
+ </li>
8
+ {% endfor %}
9
+ </ul>
@@ -0,0 +1,33 @@
1
+ <nav role="navigation" class="fr-sidemenu" aria-label="Navigation entre les thèmes">
2
+ <div class="fr-sidemenu__inner">
3
+ <div class="fr-collapse" id="fr-sidemenu-wrapper">
4
+ <ul class="fr-sidemenu__list">
5
+ {% for th in themes %}
6
+ {% if th == theme %}
7
+ <li class="fr-sidemenu__item">
8
+ <button aria-expanded="true" aria-controls="current-theme-menu" aria-current="true" class="fr-sidemenu__btn">
9
+ {{ theme.title }}
10
+ </button>
11
+ <div class="fr-collapse fr-collapse--expanded" id="current-theme-menu">
12
+ <ul class="fr-sidemenu__list">
13
+ {% for sub_theme in sub_themes %}
14
+ <li class="fr-sidemenu__item">
15
+ <a class="fr-sidemenu__link" href="{% if comparison %}{% url 'website:comparison' theme_name=th.name %}{% else %}{% url 'website:theme' theme_name=th.name %}{% endif %}#{{sub_theme.name}}">
16
+ {{ sub_theme.title }}
17
+ </a>
18
+ </li>
19
+ {% endfor %}
20
+ </ul>
21
+ </div>
22
+ </li>
23
+ {% else %}
24
+ <li class="fr-sidemenu__item">
25
+ <a class="fr-sidemenu__link" href="{% if comparison %}{% url 'website:comparison' theme_name=th.name %}{% else %}{% url 'website:theme' theme_name=th.name %}{% endif %}"
26
+ target="_self">{{th.title}}</a>
27
+ </li>
28
+ {% endif %}
29
+ {% endfor %}
30
+ </ul>
31
+ </div>
32
+ </div>
33
+ </nav>
@@ -0,0 +1,28 @@
1
+ <div class="title-tooltip">
2
+ {% if h4 %}
3
+ <h4 class="fr-mt-4w">{{ title }}</h4>
4
+ {% else %}
5
+ <h3 class="fr-mt-4w">{{ title }}</h3>
6
+ {% endif %}
7
+ <div aria-describedby="tooltip-{{ key }}">
8
+ <svg
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ viewBox="0 0 24 24"
11
+ width="20"
12
+ height="20"
13
+ >
14
+ <path
15
+ fill="#000091"
16
+ d="M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10-4.477 10-10 10Zm0-2a8 8 0 1 0 0-16 8 8 0 0 0 0 16Zm-1-5h2v2h-2v-2Zm2-1.645V14h-2v-1.5a1 1 0 0 1 1-1 1.5 1.5 0 1 0-1.471-1.794l-1.962-.393A3.501 3.501 0 1 1 13 13.355Z"
17
+ />
18
+ </svg>
19
+ </div>
20
+ </div>
21
+ <span
22
+ class="fr-tooltip fr-placement"
23
+ id="tooltip-{{ key }}"
24
+ role="tooltip"
25
+ aria-hidden="true"
26
+ >
27
+ {{ text }}
28
+ </span>
@@ -0,0 +1,19 @@
1
+ {% if filters|length > 1 %}
2
+ <div class="filters-reminder">
3
+ {% for dimension_filters in filters %}
4
+ {% if not dimension_filters.0.is_breakdown %}
5
+ <div>
6
+ <label>{{ dimension_filters.0.title }} : </label>
7
+ <span class="filters-reminder-dimension" data-dimension="{{ dimension_filters.0.db_name }}">
8
+ {% for filter in dimension_filters.1 %}
9
+ {% if filter.current %}
10
+ <p class="fr-tag">{{filter.db_name}}</p>
11
+ {% endif %}
12
+ {% endfor %}
13
+ </span>
14
+ <a class="fr-link fr-icon-arrow-up-line fr-link--icon-right fr-link--sm" href="#filtres">Modifier les filtres</a>
15
+ </div>
16
+ {% endif %}
17
+ {% endfor %}
18
+ </div>
19
+ {% endif %}
@@ -0,0 +1,123 @@
1
+ <div class="tdbmd-table-container">
2
+ <div class="tdbmd-table-header">
3
+ <div>
4
+ <label
5
+ class="fr-label fr-mb-1w"
6
+ for="data-table-search-input{%if props.flows %}-flows{% endif %}"
7
+ >
8
+ Filtrer par année, lieu ou dimension
9
+ </label>
10
+ <div
11
+ class="fr-search-bar"
12
+ id="header-search"
13
+ >
14
+ <input
15
+ id="data-table-search-input{%if props.flows %}-flows{% endif %}"
16
+ class="table-search fr-input"
17
+ placeholder="Rechercher"
18
+ type="search"
19
+ value="{{ props.search|default_if_none:'' }}"
20
+ ></input>
21
+ <button class="fr-btn" title="Rechercher">
22
+ Rechercher
23
+ </button>
24
+ </div>
25
+ </div>
26
+ </div>
27
+ <div style="overflow-x: auto;">
28
+ <table class="tdbmd-table" data-sort="{{ props.column_order|default_if_none:'' }}" data-orderflow="{{ props.column_order_flow|default_if_none:'' }}" data-limit="{{props.limit}}" data-page="{{ pages.current }}" data-search="{{ props.search|default_if_none:'' }}" data-linefocus="{{ line_focus|default_if_none:'' }}">
29
+ <thead>
30
+ <tr>
31
+ {% for key in keys %}
32
+ <th class="orderableTh" data-orderflow="{% if props.column_order_flow == "DESC"%}DESC{% else%}ASC{% endif %}" data-name="{{ key.db }}" scope="col">
33
+ <div>
34
+ <span>{{ key.label }}</span>
35
+ <button
36
+ type="button"
37
+ aria-label="Trier la colonne {{key.label}} par ordre {% if props.column_order == key.db %}{% if props.column_order_flow == "ASC" %}décroissant{% elif props.column_order_flow == "DESC" %}croissant{% endif %}{% else %}croissant{% endif %}"
38
+ class="orderArrow {% if props.column_order == key.db %}{% if props.column_order_flow == "ASC" %}orderArrowUp{% elif props.column_order_flow == "DESC" %}orderArrowDown{% endif %}{% else %}orderArrowBoth{% endif %}"
39
+ >
40
+ {% if props.column_order == key.db %}{% if props.column_order_flow == "ASC" %}↑{% elif props.column_order_flow == "DESC" %}↓{% endif %}{% else %}↕{% endif %}
41
+ </button>
42
+ </div>
43
+ </th>
44
+ {% endfor %}
45
+ </tr>
46
+ </thead>
47
+ <tbody>
48
+ {% for row in rows %}
49
+ <tr tabindex="-1">
50
+ {% for value in row.values %}
51
+ <td>{{ value }}</td>
52
+ {% endfor %}
53
+ </tr>
54
+ {% endfor %}
55
+ </tbody>
56
+ </table>
57
+ </div>
58
+ {% if not rows %}
59
+ Pas de donnée disponible.
60
+ {% endif %}
61
+ <div class="fr-table__footer">
62
+ <div class='fr-table__footer--start'>
63
+ <p class='fr-table__detail' style="margin: 0px;">{{ result_count }} lignes</p>
64
+ <div class='fr-select-group'>
65
+ <label class='fr-sr-only fr-label' for='table-footer-select-7847'> Lignes par page </label>
66
+ <select class='select-table-limit fr-select' aria-describedby='table-footer-select-7847-messages' id='table-footer-select-7847' name='table-footer-select-7847' style="width: 11rem;">
67
+ <option value='' selected disabled hidden>Lignes par page</option>
68
+ <option value='20'>20 lignes par page</option>
69
+ <option value='50'>50 lignes par page</option>
70
+ <option value='100'>100 lignes par page</option>
71
+ </select>
72
+ <div class='fr-messages-group' id='table-footer-select-7847-messages' aria-live='polite'>
73
+ </div>
74
+ </div>
75
+ </div>
76
+ {% if not pages.only_one_page %}
77
+ <div class='fr-table__footer--middle'>
78
+ <nav role='navigation' class='fr-pagination' aria-label='Pagination'>
79
+ <ul class='fr-pagination__list'>
80
+ {% if pages.first != None %}
81
+ <li>
82
+ <button class='fr-pagination__link fr-pagination__link--first fr-pagination__link-override' data-page="{{ pages.first }}" aria-label="Afficher la première page"> Première page </button>
83
+ </li>
84
+ {% endif %}
85
+ {% if pages.before != None %}
86
+ <li>
87
+ <button class='fr-pagination__link fr-pagination__link--prev fr-pagination__link--lg-label fr-pagination__link-override' data-page="{{ pages.before }}" aria-label="Afficher la page précédente"> Précédente </button>
88
+ </li>
89
+ {% endif %}
90
+ <li>
91
+ <button class='fr-pagination__link fr-pagination__link-override' data-page="{{ pages.current }}" aria-label="Afficher la page {{ pages.current }}"> <b>{{ pages.current }}</b></button>
92
+ </li>
93
+ {% if pages.after != None %}
94
+ <li>
95
+ <button class='fr-pagination__link fr-pagination__link--next fr-pagination__link--lg-label fr-pagination__link-override' data-page="{{ pages.after }}" aria-label="Afficher la page suivante"> Suivante </button>
96
+ </li>
97
+ {% endif %}
98
+ {% if pages.last != None %}
99
+ <li>
100
+ <button class='fr-pagination__link fr-pagination__link--last fr-pagination__link-override' data-page="{{ pages.last }}" aria-label="Afficher la dernière page"> Dernière page </button>
101
+ </li>
102
+ {% endif %}
103
+ </ul>
104
+ </nav>
105
+ </div>
106
+ {% endif %}
107
+ </div>
108
+ <div class="data-table-export-buttons">
109
+ {% if last_year %}
110
+ <button
111
+ data-year="{{ last_year }}"
112
+ class="table-export fr-btn fr-btn--secondary fr-btn--sm fr-icon-file-download-line fr-btn--icon-right"
113
+ >
114
+ Export des données de {{ last_year }}
115
+ </button>
116
+ {% endif %}
117
+ <button
118
+ class="table-export fr-btn fr-btn--secondary fr-btn--sm fr-icon-file-download-line fr-btn--icon-right"
119
+ >
120
+ Exporter les données (toutes années)
121
+ </button>
122
+ </div>
123
+ </div>