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.
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/css/website.css +956 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/chart.js +13 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/chartjs-plugin-datalabels.js +1 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/html2canvas.js +20 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/comparaison/data.mjs +62 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/comparaison/history.mjs +98 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/comparaison/main-values.mjs +30 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/comparaison/page.mjs +105 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/comparaison/territory-chart.mjs +141 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/details/data.mjs +59 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/details/histogram.mjs +130 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/details/map.mjs +25 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/details/page.mjs +96 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/details/proportions.mjs +77 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/details/sankey.mjs +27 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/details/table.mjs +229 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/details/top10.mjs +76 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/details/utils.mjs +8 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/dom.mjs +92 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/enums.mjs +104 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/export-graph.mjs +15 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/export.mjs +20 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/filters.mjs +159 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/format.mjs +54 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/side_panel.mjs +103 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/theme/history.mjs +89 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/theme/main-value.mjs +22 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/theme/page.mjs +162 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/theme/statistics.mjs +42 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/utils.mjs +93 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/static/page.mjs +35 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/patternomaly.js +1452 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/react18.js +31 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/reactdom18.js +267 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/supersetEmbed.js +355 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/react/indicatorMap.bundle.js +2 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/react/sankeyGraph.bundle.js +2 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/react/vendors-node_modules_mapbox-gl_dist_mapbox-gl_js.bundle.js +2 -0
- territories_dashboard_lib/website_lib/templates/admin/indicators_lib/indicator/change_form.html +8 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/404.html +10 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/500.html +10 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/layout/base.html +42 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/layout/base.js +47 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/layout/footer.html +96 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/layout/header.html +101 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/layout/header.js +102 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/comparaison/[theme]/components/indicateur-card.html +48 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/comparaison/[theme]/page.html +52 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/chart-buttons.html +29 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/geo_params.html +71 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/indicator-card.html +52 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/loader.html +28 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/side_panel.html +27 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/side_panel_geo.html +80 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/side_panel_geo.js +85 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/side_panel_methodo.html +45 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/side_panel_methodo.js +19 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/themes-list.html +9 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/themes-nav.html +33 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/title.html +28 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/details/components/filters-reminder.html +19 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/details/components/table.html +123 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/details/page.html +166 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/themes/components/extremum.html +15 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/themes/components/indicateur-card.html +76 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/themes/page.html +66 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/lexique/page.html +17 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/page.html +14 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/sitemap/page.html +71 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/static/page.html +16 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/superset/page.html +55 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/svg/delete-back.svg +1 -0
- {territories_dashboard_lib-0.1.1.dist-info → territories_dashboard_lib-0.1.3.dist-info}/METADATA +1 -1
- territories_dashboard_lib-0.1.3.dist-info/RECORD +139 -0
- territories_dashboard_lib-0.1.1.dist-info/RECORD +0 -67
- {territories_dashboard_lib-0.1.1.dist-info → territories_dashboard_lib-0.1.3.dist-info}/WHEEL +0 -0
- {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>
|