templates/Services/js/college.js line 1

Open in your IDE?
  1. let currentFocus = -1;
  2. let fetchTrigger = 0;
  3. document.getElementById('btnResetCollegeSearch').addEventListener('click', function(event) {
  4.   init(event);
  5. });
  6. document.getElementById('btnResetCollegeSearch').addEventListener('keyup', function(event) {
  7.   if (event.key === 'Enter') {
  8.     init(event);
  9.   }
  10. });
  11. function httpRequest(url, callback) {
  12.   let xhr = new XMLHttpRequest();
  13.   xhr.onreadystatechange = function () {
  14.     if (xhr.readyState === 4 && xhr.status === 200) {
  15.       callback(JSON.parse(xhr.responseText));
  16.     }
  17.   };
  18.   xhr.open('GET', url, true);
  19.   xhr.send();
  20. }
  21. function init(e) {
  22.   e.preventDefault();
  23.   document.getElementById('rueInputLoader').style.display = 'none';
  24.   document.getElementById("rueInput").focus();
  25.   document.getElementById('rueInput').value = "";
  26.   document.getElementById('inputAddress').value = "";
  27.   afficheResultat(false);
  28.   let datalist = document.getElementById('rueOptions');
  29.   datalist.innerHTML = '';
  30.   document.getElementById('lien_reinitialisation').style.display = "none";
  31.   document.getElementById('btn_reinitialisation').style.display = "none";
  32.   document.getElementById('rueInput').disabled = false;
  33.   document.getElementById('rueInput').focus();
  34.   document.getElementById('libelle_multiple').style.display = "none";
  35.   document.getElementById('results').innerHTML = '';
  36. }
  37. function afficheResultat(bool) {
  38.   document.getElementById('leCollege').style.display = "none";
  39.   document.getElementById('lesImages').style.display = "none";
  40.   if (bool) {
  41.     document.getElementById('leCollege').style.display = "";
  42.     document.getElementById('lesImages').style.display = "";
  43.     document.getElementById('lien_reinitialisation').style.display = "";
  44.     document.getElementById('btn_reinitialisation').style.display = "";
  45.     document.getElementById('rueInput').disabled = true;
  46.   }
  47. }
  48. function filterByNord(results) {
  49.   return results.filter(function (result) {
  50.     return result.properties.postcode && result.properties.postcode.startsWith('59');
  51.   });
  52. }
  53. function getInfoCollege(numetab) {
  54.   let url = "/ajax/get_info_colleges?id=" + numetab;
  55.   httpRequest(url, function (response) {
  56.     if (response.features.length > 0) {
  57.       let attributes = response.features[0].attributes;
  58.       
  59.       document.getElementById('college_rne').innerHTML = "";
  60.       document.getElementById('college_nb_eleve').innerHTML = "";
  61.       document.getElementById('college_image').innerHTML = "";
  62.       document.getElementById('college_nom').innerHTML = attributes["type_"] + " " + attributes["Denomination"];
  63.       document.getElementById('college_adresse').innerHTML = attributes["adresse1"] + " " + attributes["adresse2"] + " " + attributes["codepostal"] + " " + attributes["Ville"];
  64.       document.getElementById('college_telephone').innerHTML = attributes["Tél"].replaceAll(".", " ").replace("03", "+33 3");
  65.       document.getElementById('college_telephone_lien').href = attributes["Tél"].replace("03", "tel:+333").replaceAll(".", "");
  66.       
  67.       const googleMapsStaticApiKey = 'AIzaSyCmvIOcgfl_y9l40sGBnqOo-6KypVacBP8';
  68.       const address = attributes["adresse1"] + " " + attributes["adresse2"] + " " + attributes["codepostal"] + " " + attributes["Ville"];
  69.       const staticMapUrl = `https://maps.googleapis.com/maps/api/staticmap?center=${encodeURIComponent(address)}&zoom=16&size=600x400&maptype=roadmap&key=${googleMapsStaticApiKey}`;
  70.       const googleMapsLink = `https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(address)}`;
  71.       document.getElementById('college_map').innerHTML = `<a target="_blank" href="${googleMapsLink}" title="Itinéraire vers ${attributes["type_"] + " " + attributes["Denomination"]}" style="position:relative;">
  72.                                                       <img src="${staticMapUrl}" alt="Itinéraire vers ${attributes["type_"] + " " + attributes["Denomination"]}" style="width:100%;height:100%;position:absolute;left:0;top:0;object-fit:cover;border:0">
  73.                                                     </a>`;
  74.       document.getElementById('college_site_ent').href = attributes["URL_ENT"];
  75.       document.getElementById('college_site_ent').title = "Site internet du collège " + attributes["Denomination"] + " " + attributes["Ville"];
  76.       document.getElementById('college_menu_link').href = "https://nord.webgerest.fr/?RNE=" + attributes["NUMETAB"];
  77.       document.getElementById('college_mail').innerHTML = "ce." + attributes["NUMETAB"].toLowerCase() + "@ac-lille.fr";
  78.       document.getElementById('college_mail_href').href = "mailto:ce." + attributes["NUMETAB"].toLowerCase() + "@ac-lille.fr";
  79.       if (attributes["NUMETAB"]) {
  80.         document.getElementById('college_rne').innerHTML = "<span class='font-weight-bold'>Code UAI, RNE :</span> " + attributes["NUMETAB"] + "<br />";
  81.       }
  82.       if (attributes["nb_eleve"]) {
  83.         document.getElementById('college_nb_eleve').innerHTML = "<b>Nombre d'élèves :</b> " + attributes["nb_eleve"] + "<br />";
  84.       }
  85.       if (attributes["Lien_Photo"]) {
  86.         document.querySelector('#lesImages .flex-item-right').classList.remove("no-first-image");
  87.         document.getElementById('college_image').classList.add("flex-item-left");
  88.         let college_image = document.createElement("img");
  89.         college_image.setAttribute("src", attributes["Lien_Photo"]);
  90.         college_image.setAttribute("alt", "");
  91.         document.getElementById("college_image").appendChild(college_image);
  92.       } else {
  93.         let flexItemRight = document.querySelector('#lesImages .flex-item-right');
  94.         flexItemRight.classList.add('no-first-image');
  95.         document.getElementById('college_image').classList.remove("flex-item-left");
  96.       }
  97.       if (attributes["mail_college"]) {
  98.         document.getElementById('college_mail').innerHTML = attributes["mail_college"];
  99.         document.getElementById('bloc_mail').style.display = "";
  100.       }
  101.       afficheResultat(true);
  102.       document.getElementById('btn_reinitialisation').focus();
  103.       document.getElementById('rueInputLoader').style.display = 'none';
  104.       let leCollegeElement = document.getElementById('leCollege');
  105.       let lesImagesElement = document.getElementById('lesImages');
  106.       let leCollegeCopy = leCollegeElement.cloneNode(true);
  107.       leCollegeCopy.setAttribute('id', 'leCollege' + numetab);
  108.       leCollegeElement.style.display = 'none';
  109.       let lesImagesCopy = lesImagesElement.cloneNode(true);
  110.       lesImagesCopy.setAttribute('id', 'lesImages' + numetab);
  111.       lesImagesElement.style.display = 'none';
  112.       let resultsContainer = document.getElementById('results');
  113.       resultsContainer.appendChild(leCollegeCopy);
  114.       resultsContainer.appendChild(lesImagesCopy);
  115.     } else {
  116.       afficheResultat(false);
  117.     }
  118.   });
  119. }
  120. function getCollegeProximite(geometry) {
  121.   document.getElementById('results').innerHTML = '';
  122.   let url = '/ajax/get_college_proximite?lat=' + geometry.coordinates[0] + '&lng=' + geometry.coordinates[1];
  123.   httpRequest(url, function (response) {
  124.     if (response.features.length > 0) {
  125.       if (response.features.length > 1) {
  126.         document.getElementById('libelle_multiple').style.display = "";
  127.       } else {
  128.         document.getElementById('libelle_multiple').style.display = "none";
  129.       }
  130.       let responses = response.features;
  131.       responses.forEach(function (item) {
  132.         const attributes = item.attributes;
  133.         getInfoCollege(attributes["numetab"]);
  134.       });
  135.     } else {
  136.       afficheResultat(false);
  137.     }
  138.   });
  139. }
  140. function getInfoRue(rue) {
  141.   if (rue.length > 2) {
  142.     let url = 'https://api-adresse.data.gouv.fr/search/?q=' + encodeURIComponent(rue); // + "&limit=150";
  143.     httpRequest(url, function (response) {
  144.       if (response.features.length > 0) {
  145.         let geometry = response.features[0].geometry;
  146.         getCollegeProximite(geometry);
  147.       } else {
  148.         afficheResultat(false);
  149.         document.getElementById('rueInputLoader').style.display = 'none';
  150.       }
  151.     });
  152.   }
  153. }
  154. function onRueSelection(inputValue) {
  155.   if (inputValue.length > 2) {
  156.     document.getElementById('rueInputLoader').style.display = 'block';
  157.     setTimeout(getInfoRue(inputValue), 200);
  158.   }
  159. }
  160. function setActive() {
  161.   let nbVal = $("div.address-feedback a").length;
  162.   if (!nbVal)
  163.     return false;
  164.   $('div.address-feedback a').removeClass("active");
  165.   currentFocus = ((currentFocus + nbVal - 1) % nbVal) + 1;
  166.   $('div.address-feedback a:nth-child(' + currentFocus + ')').addClass("active");
  167. }
  168. function handlerOnKeyUp(ev) {
  169.   event.preventDefault();
  170.   event.stopPropagation();
  171.   if (event.keyCode === 38) {
  172.     currentFocus--;
  173.     setActive();
  174.     return false;
  175.   } else if (event.keyCode === 40) {
  176.     currentFocus++;
  177.     setActive();
  178.     return false;
  179.   } else if (event.keyCode === 13) {
  180.     if (currentFocus > 0) {
  181.       if ($("div.address-feedback a:nth-child(" + currentFocus + ")").attr("data-name")) {
  182.         $("#rueInput").val($("div.address-feedback a:nth-child(" + currentFocus + ")").attr("data-name") + ' ' + $("div.address-feedback a:nth-child(" + currentFocus + ")").attr("data-postcode") + ' ' + $("div.address-feedback a:nth-child(" + currentFocus + ")").attr("data-city"));
  183.       } else {
  184.         $("#rueInput").val('');
  185.       }
  186.       $('.address-feedback').empty();
  187.       onRueSelection($("#rueInput").val());
  188.     }
  189.     return false;
  190.   }
  191.   $('div.address-feedback a').removeClass("active");
  192.   currentFocus = 0;
  193.   clearTimeout(fetchTrigger);
  194.   let rue = $("#rueInput").val();
  195.   
  196.   if (rue.length === 0) {
  197.     $('.address-feedback').empty();
  198.     ev.target.setAttribute('aria-expanded', 'false');
  199.     return false;
  200.   }
  201.   document.getElementById('libelle_multiple').style.display = "none";
  202.   
  203.   if (rue.length > 2) {
  204.     document.getElementById('rueInputLoader').style.display = 'block';
  205.     fetchTrigger = setTimeout(function () {
  206.       $.get('https://api-adresse.data.gouv.fr/search/', {
  207.         q: rue,
  208.         limit: 4,
  209.         autocomplete: 1
  210.       }, function (data, status, xhr) {
  211.         let liste = "";
  212.         let suggestions = filterByNord(data.features);
  213.         if (suggestions.length > 0) {
  214.           ev.target.setAttribute('aria-expanded', 'true');
  215.         }
  216.         $.each(suggestions, function (i, obj) {
  217.           let cooladdress = obj.properties.name + " " + obj.properties.postcode + " <strong>" + obj.properties.city + "</strong>";
  218.           liste += '<li><a class="list-group-item list-group-item-action py-1" href="javascript:void(0)" name="' + obj.properties.label + '" data-name="' + obj.properties.name + '" data-postcode="' + obj.properties.postcode + '" data-city="' + obj.properties.city + '">' + cooladdress + '</a></li>';
  219.         });
  220.         $('.address-feedback').html(liste);
  221.         const elems = document.querySelectorAll('.list-group-item');
  222.         for (let i = 0; i < elems.length; i++) {
  223.           elems[i].addEventListener('mousedown', function (event) {
  224.             handlerOnMouseDown(event, i, elems[i]);
  225.           });
  226.         }
  227.         document.getElementById('rueInputLoader').style.display = 'none';
  228.       }, 'json');
  229.     }, 500);
  230.   }
  231. }
  232. function handlerOnKeyDown(e) {
  233.   if ($("div.address-feedback a").length > 0 && (e.keyCode === 38 || e.keyCode === 40 || e.keyCode === 13)) {
  234.     e.preventDefault();
  235.   }
  236. }
  237. function handlerOnFocusOut(ev) {
  238.   $('.address-feedback').empty();
  239.   ev.target.setAttribute('aria-expanded', 'false');
  240. }
  241. function handlerOnMouseDown(event, index, element) {
  242.   event.preventDefault();
  243.   event.stopPropagation();
  244.   $("#rueInput").val($(element).attr("data-name") + ' ' + $(element).attr("data-postcode") + ' ' + $(element).attr("data-city"));
  245.   $('.address-feedback').empty();
  246.   onRueSelection($("#rueInput").val());
  247. }