PageSourceSearch

https://observatoiredestunnels.fr/js/init_gui.js?v=10062024

js observatoiredestunnels.fr collected 2026-10-08 11:37:31 UTC 17,768 bytes, 602 lines download raw bytes

1//Département sélectionné
2var idDepTunnel = '';
3var idDepCanaux = '';
4var idDepFerro = '';
5//Longueur min et max sélectionnées
6var minLongTunnel = 0;
7var minLongCanaux = 0;
8var minLongFerro = 0;
9var maxLongTunnel = 10000;
10var maxLongCanaux = 10000;
11var maxLongFerro = 10000;
12var resultFilterTunnel = [];
13var resultFilterCanaux = [];
14var resultFilterFerro = [];
15var tableTunnel = undefined;
16var tableCanaux = undefined;
17var tableFerro = undefined;
18
19
20var rechercheParNom = 1;
21var filterSelected = 'none';
22
23
24var minLongAllTunnel,minLongAllCanaux,minLongAllFerro;
25var maxLongAllTunnel,maxLongAllCanaux,maxLongAllFerro;
26
27
28//Génère un text :
29// <li><a class="dropdown-item" href="#">Action</a></li>
30
31function generateListElementTab(id, element) {
32  return "<li><a id='" + id + "' class='dropdown-item' href='#' >" + element + "</a></li>";
33}
34
35
36function generateListRecherche(id, text) {
37  return '<option value="' + id + '">' + text + '</option>';
38}
39
40
41function updateVentilation(data, dataInitTunnels, idDepTunnel) {
42
43  //On filtre les gestionnaires uniques
44  let list_ventilation;
45
46
47  if (idDepTunnel == '' || idDepTunnel == -1) {
48    list_ventilation = dataInitTunnels.map(x => x['tunnel_ventile']).filter(onlyUnique).filter(x => (x != 'Naturel')).sort();
49  } else {
50    list_ventilation = dataInitTunnels.filter(
51      function(elem) {
52        return filterDepartement(elem, idDepTunnel);
53      }).map(x => x['tunnel_ventile']).filter(onlyUnique).filter(x => (x != 'Naturel')).sort();
54
55  }
56
57  //On les ajoute à la liste du drop down
58  var list = list_ventilation.map(x => generateListElementTab(list_ventilation.indexOf(x), x)).join('');
59
60
61  $('#dropDownListVentilation').html("Choix d'un mode de ventil.");
62
63  $('#dd_list_ventilation').empty();
64  $('#dd_list_ventilation').append(list);
65
66  //Lorsqu'on change le menu déroulant du gestionnaire
67  $('#dd_list_ventilation a').click(function() {
68    //On change le nom du bouton
69    $('#dropDownListVentilation').html($(this).html());
70    //On applique le filtre
71    filterTunnel();
72  });
73}
74
75
76function updateGestionnaire(data, dataInit, idDep, type) {
77  switch (type){
78    case 'tunnel':
79      $('#ddgestionnaireTunnel').unbind("keypress");
80      break;
81    case 'canaux':
82      $('#ddgestionnaireCanaux').unbind("keypress");
83      break;
84    case 'ferro':
85      $('#ddgestionnaireFerro').unbind("keypress");
86      break;
87  }
88
89  //On filtre les gestionnaires uniques
90  let list_gestionnaires;
91  if (idDep == '') {
92    list_gestionnaires = dataInit.map(x => x['gestionnaire']).filter(x => (x != '')).filter(onlyUnique).sort();
93  } else {
94    list_gestionnaires = dataInit.filter(
95      function(elem) {
96        return filterDepartement(elem, idDep);
97      }).map(x => x['gestionnaire']).filter(x => (x != '')).filter(onlyUnique).sort();
98
99  }
100  list_gestionnaires.unshift("<li><a id='-1' class='dropdown-item' href='#'>Choix d'un gestionnaire</a></li>");
101
102  //console.log("Filtre");
103  //console.log(list_gestionnaires);
104
105  //On les ajoute à la liste du drop down
106  var list = list_gestionnaires.map(x => generateListElementTab(list_gestionnaires.indexOf(x), x, x)).join('');
107
108
109  switch (type){
110    case 'tunnel':
111      $('#dropDownListGestionnaireTunnel').html("Choix d'un gestionnaire");
112      $('#dd_list_gestionnaires_tunnel').empty();
113      $('#dd_list_gestionnaires_tunnel').append(list);
114
115      //Lorsqu'on change le menu déroulant du gestionnaire
116      $('#dd_list_gestionnaires_tunnel a').click(function() {
117        //On change le nom du bouton
118        $('#dropDownListGestionnaireTunnel').html($(this).html());
119        //On applique le filtre
120        filterTunnel();
121      });
122
123      $("#ddgestionnaireTunnel").keypress(dropdownKeyDown);
124      break;
125    case 'canaux':
126      $('#dropDownListGestionnaireCanaux').html("Choix d'un gestionnaire");
127      $('#dd_list_gestionnaires_canaux').empty();
128      $('#dd_list_gestionnaires_canaux').append(list);
129
130      //Lorsqu'on change le menu déroulant du gestionnaire
131      $('#dd_list_gestionnaires_canaux a').click(function() {
132        //On change le nom du bouton
133        $('#dropDownListGestionnaireCanaux').html($(this).html());
134        //On applique le filtre
135        filterCanaux();
136      });
137
138      $("#ddgestionnaireCanaux").keypress(dropdownKeyDown);
139      break;
140    case 'ferro':
141      $('#dropDownListGestionnaireFerro').html("Choix d'un gestionnaire");
142      $('#dd_list_gestionnaires_ferro').empty();
143      $('#dd_list_gestionnaires_ferro').append(list);
144            
145      //Lorsqu'on change le menu déroulant du gestionnaire
146      $('#dd_list_gestionnaires_ferro a').click(function() {
147        //On change le nom du bouton
148        $('#dropDownListGestionnaireFerro').html($(this).html());
149        //On applique le filtre
150        filterFerro();
151      });
152
153      $("#ddgestionnaireFerro").keypress(dropdownKeyDown);
154      break;
155  }
156
157}
158
159
160function setNumberOfTunnels(number) {
161  $('#counttunnels').html('Nombre de tunnels affichés : <b> ' + number + '</b>');
162}
163
164function setNumberOfCanaux(number) {
165  $('#countcanaux').html('Nombre de tunnels canaux affichés : <b> ' + number + '</b>');
166}
167
168function setNumberOfFerro(number) {
169  $('#countferro').html('Nombre de tunnels ferroviaires affichés : <b> ' + number + '</b>');
170}
171
172//On change les borne du double slider
173function updateRange(min, max, type) {
174
175  switch (type){
176    case 'tunnel':
177      $('#slider-range-tunnel').slider("option", "min", min);
178      $('#slider-range-tunnel').slider("option", "max", max);
179      $("#slider-range-tunnel").slider('values', 0, min);
180      $("#slider-range-tunnel").slider('values', 1, max);
181
182      updateRangeInputText(min, max, 'tunnel');
183      break;
184    case 'canaux':
185      $('#slider-range-canaux').slider("option", "min", min);
186      $('#slider-range-canaux').slider("option", "max", max);
187      $("#slider-range-canaux").slider('values', 0, min);
188      $("#slider-range-canaux").slider('values', 1, max);
189
190      updateRangeInputText(min, max, 'canaux');      
191      break;
192    case 'ferro':
193      $('#slider-range-ferro').slider("option", "min", min);
194      $('#slider-range-ferro').slider("option", "max", max);
195      $("#slider-range-ferro").slider('values', 0, min);
196      $("#slider-range-ferro").slider('values', 1, max);
197
198      updateRangeInputText(min, max, 'ferro');
199      break;
200  }
201
202}
203
204function updateMinFocusOutTunnel(){
205  updateMinTunnel(false);
206}
207
208function updateMinFocusOutCanaux(){
209  updateMinCanaux(false);
210}
211
212function updateMinFocusOutFerro(){
213  updateMinFerro(false);
214}
215
216
217function updateMaxFocusOutTunnel(){
218  updateMaxTunnel(false);
219}
220
221function updateMaxFocusOutCanaux(){
222  updateMaxCanaux(false);
223}
224
225function updateMaxFocusOutFerro(){
226  updateMaxFerro(false);
227}
228
229//Quand on modifie la valeur minimale
230function updateMinTunnel(fromkeyboard) {
231
232  //On récupère la valeur de texte
233  let valInput = $("#minValueInputTunnel").val();
234  //On garde la valeur max entre ce qui est saisie et la valeur minimale
235  //On ne peut descendre en dessous de la borne théorique du slider
236  valInput = Math.max(valInput, $("#slider-range-tunnel").slider("option", "min"));
237
238  if(! fromkeyboard){
239    //On garde la valeur minimale entre ce qui est saisie et le max
240    valInput = Math.min(valInput, $("#slider-range-tunnel").slider('values', 1));
241  }
242
243  //On met à jour le slider
244  $("#slider-range-tunnel").slider("values", 0, valInput);
245  //On met à jour la valeur qui apparaît dans le texte
246  $("#minValueInputTunnel").val(valInput)
247  //On met à jour la valeur minimale
248  minLongTunnel = valInput;
249  filterTunnel();
250
251}
252
253function updateMinCanaux(fromkeyboard) {
254
255  //On récupère la valeur de texte
256  let valInput = $("#minValueInputCanaux").val();
257  //On garde la valeur max entre ce qui est saisie et la valeur minimale
258  //On ne peut descendre en dessous de la borne théorique du slider
259  valInput = Math.max(valInput, $("#slider-range-canaux").slider("option", "min"));
260
261  if(! fromkeyboard){
262    //On garde la valeur minimale entre ce qui est saisie et le max
263    valInput = Math.min(valInput, $("#slider-range-canaux").slider('values', 1));
264  }
265
266  //On met à jour le slider
267  $("#slider-range-canaux").slider("values", 0, valInput);
268  //On met à jour la valeur qui apparaît dans le texte
269  $("#minValueInputCanaux").val(valInput)
270  //On met à jour la valeur minimale
271  minLongCanaux = valInput;
272  filterCanaux();
273
274}
275
276function updateMinFerro(fromkeyboard) {
277
278  //On récupère la valeur de texte
279  let valInput = $("#minValueInputFerro").val();
280  //On garde la valeur max entre ce qui est saisie et la valeur minimale
281  //On ne peut descendre en dessous de la borne théorique du slider
282  valInput = Math.max(valInput, $("#slider-range-ferro").slider("option", "min"));
283
284  if(! fromkeyboard){
285    //On garde la valeur minimale entre ce qui est saisie et le max
286    valInput = Math.min(valInput, $("#slider-range-ferro").slider('values', 1));
287  }
288
289  //On met à jour le slider
290  $("#slider-range-ferro").slider("values", 0, valInput);
291  //On met à jour la valeur qui apparaît dans le texte
292  $("#minValueInputFerro").val(valInput)
293  //On met à jour la valeur minimale
294  minLongFerro = valInput;
295  filterFerro();
296
297}
298
299function updateMaxTunnel(fromkeyboard) {
300  //On récupère la valeur de texte
301  let valInput = $("#maxValueInputTunnel").val();
302  //On garde la valeur min entre ce qui est saisie et la valeur minimale
303  //On ne peut descendre en dessous de la borne théorique du slider
304  valInput = Math.min(valInput, $("#slider-range-tunnel").slider("option", "max"));
305  if(!fromkeyboard ){
306    //On garde la valeur mamximale entre ce qui est saisie et le max
307    valInput = Math.max(valInput, $("#slider-range-tunnel").slider('values', 0));
308
309  }
310
311  //On met à jour le slider
312  $("#slider-range-tunnel").slider("values", 1, valInput);
313  //On met à jour la valeur qui apparaît dans le texte
314  $("#maxValueInputTunnel").val(valInput)
315  //On met à jour la valeur minimale
316  maxLongTunnel = valInput;
317  filterTunnel();
318}
319
320function updateMaxCanaux(fromkeyboard) {
321  //On récupère la valeur de texte
322  let valInput = $("#maxValueInputCanaux").val();
323  //On garde la valeur min entre ce qui est saisie et la valeur minimale
324  //On ne peut descendre en dessous de la borne théorique du slider
325  valInput = Math.min(valInput, $("#slider-range-canaux").slider("option", "max"));
326  if(!fromkeyboard ){
327    //On garde la valeur mamximale entre ce qui est saisie et le max
328    valInput = Math.max(valInput, $("#slider-range-canaux").slider('values', 0));
329
330  }
331
332  //On met à jour le slider
333  $("#slider-range-canaux").slider("values", 1, valInput);
334  //On met à jour la valeur qui apparaît dans le texte
335  $("#maxValueInputCanaux").val(valInput)
336  //On met à jour la valeur minimale
337  maxLongCanaux = valInput;
338  filterCanaux();
339}
340
341function updateMaxFerro(fromkeyboard) {
342  //On récupère la valeur de texte
343  let valInput = $("#maxValueInputFerro").val();
344  //On garde la valeur min entre ce qui est saisie et la valeur minimale
345  //On ne peut descendre en dessous de la borne théorique du slider
346  valInput = Math.min(valInput, $("#slider-range-ferro").slider("option", "max"));
347  if(!fromkeyboard ){
348    //On garde la valeur mamximale entre ce qui est saisie et le max
349    valInput = Math.max(valInput, $("#slider-range-ferro").slider('values', 0));
350
351  }
352
353  //On met à jour le slider
354  $("#slider-range-ferro").slider("values", 1, valInput);
355  //On met à jour la valeur qui apparaît dans le texte
356  $("#maxValueInputFerro").val(valInput)
357  //On met à jour la valeur minimale
358  maxLongFerro = valInput;
359  filterFerro();
360}
361
362
363function updateRangeInputText(minValue, maxValue,type) {
364
365  switch (type){
366    case 'tunnel':
367      $("#minValueInputTunnel").val(minValue);
368      $("#maxValueInputTunnel").val(maxValue);
369      break;
370    case 'canaux':
371      $("#minValueInputCanaux").val(minValue);
372      $("#maxValueInputCanaux").val(maxValue);
373      break;
374    case 'ferro':
375      $("#minValueInputFerro").val(minValue);
376      $("#maxValueInputFerro").val(maxValue);
377      break;
378  }
379}
380
381function activateDropDownVentilation(){
382  $("#dropDownListVentilation").removeClass("disabledropdown");
383  $("#dropDownListVentilation").addClass("btn-secondary");
384
385$("#dropDownListVentilation").attr("data-bs-toggle", "dropdown");
386$("#dropDownListVentilation").prop('disabled', false);
387
388}
389
390
391function desactivateDropDownVentilation(){
392  $("#dropDownListVentilation").addClass("disabledropdown");
393
394  $("#dropDownListVentilation").removeClass("btn-secondary");
395
396
397
398
399
400  $("#dropDownListVentilation").attr("data-bs-toggle", " ");
401  $("#dropDownListVentilation").prop('disabled', true);
402
403
404
405}
405
406
407
408//Retourne les valeurs unique d'un tableau
409function onlyUnique(value, index, self) {
410  return self.indexOf(value) === index;
411}
412
413
414//Active la recherche simple et désactive les filtres
415function activeRechercheSimple() {
416
417  rechercheParNom = 1;
418
419  $("#rechercheParNom").show();
420  $("#rechercheFiltre").hide();
421
422  $('#btn_tunnel,#btn_canal,#btn_ferro').show();
423
424  if (!map.hasLayer(markersTunnels)) {
425    map.removeLayer(markersTunnels);
426    $('#btn_tunnel').addClass('btn_clicked_couche');
427    $('#btn_tunnel').removeClass('btn_couche');
428  }
429  if (!map.hasLayer(markersCanaux)) {
430    map.addLayer(markersCanaux);
431    $('#btn_canal').addClass('btn_clicked_couche');
432    $('#btn_canal').removeClass('btn_couche');
433  }
434  if (!map.hasLayer(markersFerro)) {
435    map.addLayer(markersFerro);
436    $('#btn_ferro').addClass('btn_clicked_couche');
437    $('#btn_ferro').removeClass('btn_couche');
438  }
439
440  
441
442  removeFilterTunnel(true);
443  removeFilterCanaux(true);
444  removeFilterFerro(true);
445
446}
447
448//Désactive la recherche simple et active les filtres
449function activeRechercheFiltre() {
450  rechercheParNom = 0;
451  $("#rechercheParNom").hide();
452  $("#rechercheFiltre").show();
453  if (map.hasLayer(markersTunnels)) {
454    map.removeLayer(markersTunnels);
455  }
456  if (map.hasLayer(markersCanaux)) {
457    map.removeLayer(markersCanaux);
458  }
459  if (map.hasLayer(markersFerro)) {
460    map.removeLayer(markersFerro);
461  }
462  $('#btn_tunnel,#btn_canal,#btn_ferro').hide();
463  $('#btn_tunnel_filtre,#btn_canal_filtre,#btn_ferro_filtre').removeClass('btn_clicked_couche');
464  $('#btn_tunnel_filtre,#btn_canal_filtre,#btn_ferro_filtre').addClass('btn_couche');
465  
466  removeFilterTunnel(true);
467  removeFilterCanaux(true);
468  removeFilterFerro(true);
469
470  $("#filtreCanaux, #filtreFerro, #filtreTunnel").hide();
471}
472
473
474//Action lorsque l'on appuie sur les touches d'un menu déroulan
475function dropdownKeyDown(event) {
476
477  console.log(event.keyCode);
478  //console.log("Dropdown");
479  if (event.keyCode != 13) {
480    if ($(this).find('button').attr('aria-expanded') == 'false') {
481      $(this).find('.dropdown-toggle').dropdown('toggle');
482    }
483  }
484
485
486  var keyChar = String.fromCharCode(event.keyCode).toLowerCase();
487  var selectedItems = $(this).find('a').filter(function() {
488    //console.log($(this).text());
489    //console.log(keyChar);
490
491    return $(this).text().toLowerCase().indexOf(keyChar) === 0;
492  });
493
494  //  console.log($(this).find('a').map(x => $(this).find('a')[x]));
495
496
497  var f = $(selectedItems).is(':focus');
498  if (f) {
499    selectedItems = $('a:focus').parent().nextAll().find('a').filter(function() {
500      return $(this).text().toLowerCase().indexOf(keyChar) === 0;
501    }).first();
502    if (selectedItems.length == 0) {
503      selectedItems = $(this).find('a').filter(function() {
504        return $(this).text().toLowerCase().indexOf(keyChar) === 0;
505      });
506    }
507  }
508  selectedItems.first().focus();
509}
510
511
512
513function updateModificationDate(){
514
515
516  $.get( "./includes/lastModificationDate.php", function( data ) {
517    $( "#modif_time" ).html( data );
518  });
519
520
521}
522
523
524
525//Chargement de l'interface
526function init_gui() {
527
528  //On cache par défaut les filtres et on affiche la recherche par nmo
529  $("#rechercheParNom").show();
530  $("#rechercheFiltre").hide(); //Les différents menus et interacteurs
531
532
533  //On ajoute la date de modification des données
534  updateModificationDate();
535
536  //Activation du fait que l'on mette à jour les valeurs min/max du slider lorsque l'on clique ailleurs
537  $("#minValueInputTunnel").change(updateMinFocusOutTunnel);
538  $("#maxValueInputTunnel").change(updateMaxFocusOutTunnel);
539  $("#minValueInputCanaux").change(updateMinFocusOutCanaux);
540  $("#maxValueInputCanaux").change(updateMaxFocusOutCanaux);
541  $("#minValueInputFerro").change(updateMinFocusOutFerro);
542  $("#maxValueInputFerro").change(updateMaxFocusOutFerro);
543
544  $('#ventilation_oui').on('click', function(e){
545    if ($("#ventilation_oui").is(':checked')) {
546          activateDropDownVentilation();
547    }else{
548      desactivateDropDownVentilation();
549    }
550  });
551
552
553  //Lorsque l'on valide les longueurs min et max du tunnel avec entrée
554  $('#minValueInputTunnel').on('keyup', function(e) {
555    if (e.which === 13) {
556      updateMinTunnel(true);
557    }
558  });
559  $('#maxValueInputTunnel').on('keyup', function(e) {
560    if (e.which === 13) {
561      updateMaxTunnel(true);
562    }
563  });
564    $('#minValueInputCanaux').on('keyup', function(e) {
565    if (e.which === 13) {
566      updateMinCanaux(true);
567    }
568  });
569  $('#maxValueInputCanaux').on('keyup', function(e) {
570    if (e.which === 13) {
571      updateMaxCanaux(true);
572    }
573  });
574    $('#minValueInputFerro').on('keyup', function(e) {
575    if (e.which === 13) {
576      updateMinFerro(true);
577    }
578  });
579  $('#maxValueInputFerro').on('keyup', function(e) {
580    if (e.which === 13) {
581      updateMaxFerro(true);
582    }
583  });
584
585  //Lorsque l'on valide avec entée le mot de passe
586  $('#passwordForm').on('keypress', function(e) {
587    if (e.which === 13) {
588      connexion();
589
590    }
591  });
592
593
594  //Si on click en dehors de la fenêtre de connexion on la ferme
595  $("#connexionWindows").click(function(ev) {
596    if (ev.target != this) return;
597    $('#connexionWindows').modal('hide');
598  });
599
600
601
602}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.