Newer
Older
import * as results from "/services/election/calculate-election-generic.js";
export async function mount(where, round) {
const resultComponent = new ResultComponent(round);
await resultComponent.mount(where);
await resultComponent.calculateResults();
}
class ResultComponent {
constructor(round) {
this.round = round;
}
async mount(where) {
const mountpoint = where;
document.getElementById(mountpoint).innerHTML = /* HTML */ `
<div class="tabs is-boxed is-toggle is-fullwidth">
<ul>
<li id="areas" class="is-active">
<a>
<span>Circonscriptions</span>
</a>
</li>
<li id="sections">
<a>
<span>Villes</span>
</a>
</li>
</ul>
</div>
<div class="control filter">
<label class="radio">
<input type="radio" name="filter" value="partial" checked />
Partiel
</label>
<label class="radio">
<input type="radio" name="filter" value="completed" />
Complété
</label>
<label class="radio">
<input type="radio" name="filter" value="validated" />
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
Validé
</label>
</div>
<div class="columns">
<div class="column is-half">
<div id="map-section" class="card-no-hover">
<header class="card-header">
<p class="card-header-title">
Carte
</p>
<button id="zoom-map" class="button is-success">
<span class="icon is-small">
<i class="fas fa-search"></i>
</span>
</button>
</header>
<div class="card-content">
<div id="round-list" class="content">
La carte du tour
</div>
</div>
</div>
</div>
<div class="column">
<div id="news-flow-section" class="card-no-hover">
<header class="card-header">
<p class="card-header-title">
Actualités
</p>
<button id="zoom-news-flow" class="button is-success">
<span class="icon is-small">
<i class="fas fa-search"></i>
</span>
</button>
</header>
<div class="card-content">
<div id="round-list" class="content">
Flux d'actualité
</div>
</div>
</div>
<div id="results-section" class="card-no-hover" ">
<header class="card-header">
<p class="card-header-title">
Résultats
</p>
<button id="zoom-results" class="button is-success">
<span class="icon is-small">
<i class="fas fa-search"></i>
</span>
</button>
</header>
<div class="card-content">
<div id="round-list" class="content">
Résultats détaillés du tour
</div>
</div>
</div>
</div>
`;
this.handleDom();
document.getElementById("areas").click();
this.calculator = await results.mountCalculator(this.round);
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
}
handleDom() {
document.getElementById("areas").addEventListener("click", function () {
document.getElementById("sections").setAttribute("class", "");
document.getElementById("areas").setAttribute("class", "is-active");
});
document.getElementById("sections").addEventListener("click", function () {
document.getElementById("areas").setAttribute("class", "");
document.getElementById("sections").setAttribute("class", "is-active");
});
let resultHandler = this;
document.getElementById("zoom-map").addEventListener("click", function () {
resultHandler.zoomMap();
});
document
.getElementById("zoom-news-flow")
.addEventListener("click", function () {
resultHandler.zoomNewsFlow();
});
document
.getElementById("zoom-results")
.addEventListener("click", function () {
resultHandler.zoomResults();
});
let radioButtons = document.getElementsByName("filter");
for (var i = 0; i < radioButtons.length; i++) {
radioButtons[i].addEventListener("click", (e) => {
this.calculateResults();
});
}
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
}
zoomMap() {
let resultHandler = this;
document.getElementById("map-section").parentElement.className =
"column is-full";
document.getElementById("zoom-map").addEventListener("click", function () {
resultHandler.unZoom();
});
}
zoomNewsFlow() {
let resultHandler = this;
document.getElementById("news-flow-section").parentElement.className =
"column is-full";
document.getElementById("news-flow-section").style.height = "auto";
document.getElementById("map-section").parentElement.className = "column";
document.getElementById("map-section").parentElement.style.display = "none";
document.getElementById("results-section").style.display = "none";
document
.getElementById("zoom-news-flow")
.addEventListener("click", function () {
resultHandler.unZoom();
});
}
zoomResults() {
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
let resultHandler = this;
document.getElementById("results-section").parentElement.className =
"column is-full";
document.getElementById("map-section").parentElement.className = "column";
document.getElementById("map-section").parentElement.style.display = "none";
document.getElementById("news-flow-section").style.display = "none";
document
.getElementById("zoom-results")
.addEventListener("click", function () {
resultHandler.unZoom();
});
}
unZoom() {
document.getElementById("map-section").parentElement.className =
"column is-half";
document.getElementById("news-flow-section").style.height = "45vh";
document.getElementById("news-flow-section").parentElement.className =
"column is-half";
document.getElementById("map-section").parentElement.style.display =
"block";
document.getElementById("results-section").style.display = "block";
document.getElementById("news-flow-section").style.display = "block";
this.handleDom();
}
async calculateResults() {
let filter = document.querySelector('input[name="filter"]:checked').value;
await this.calculator.calculateResults(filter);
}