buildings.html 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609
  1. <!DOCTYPE html>
  2. <html lang="it">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Mappa con Bootstrap Italia e Overlay Edifici</title>
  7. <link href="https://cdn.jsdelivr.net/npm/bootstrap-italia@2.13.4/dist/css/bootstrap-italia.min.css" rel="stylesheet">
  8. <link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" />
  9. <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet.draw/1.0.4/leaflet.draw.css"/>
  10. <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" rel="stylesheet">
  11. <style>
  12. /* Stile per i label "Tipo Edificio" e "Data di Predisposizione" */
  13. label[for="buildingType"], label[for="preparationDate"] {
  14. font-weight: bold; /* Grassetto */
  15. font-family: inherit; /* Stesso font di "Codice Catastale Particella" */
  16. }
  17. /* Stile per i link con sottolineatura solo al passaggio del mouse */
  18. .link-underline-hover {
  19. text-decoration: none; /* Rimuove la sottolineatura di base */
  20. }
  21. .link-underline-hover:hover {
  22. text-decoration: underline; /* Aggiunge la sottolineatura solo al passaggio del mouse */
  23. }
  24. #buildingType {
  25. color: hsl(210, 17%, 44%); /* Colore del testo del select */
  26. }
  27. #buildingType option {
  28. color: hsl(210, 17%, 44%); /* Colore del testo delle opzioni */
  29. }
  30. #div-select {
  31. border-bottom: 1px solid hsl(210, 17%, 44%);
  32. margin-bottom: 5px;
  33. }
  34. /* Stile per la riga blu scuro */
  35. .top-bar {
  36. background-color: #004080; /* Blu scuro */
  37. color: white;
  38. padding: 0.5rem 0;
  39. text-align: left; /* Allineamento a sinistra */
  40. font-size: 0.9rem;
  41. }
  42. /* Stile per l'header */
  43. .header {
  44. background-color: #0066CC; /* Blu chiaro */
  45. color: white;
  46. padding: 1rem 0;
  47. }
  48. /* Stile per il logo "PW" dentro un cerchio */
  49. .logo {
  50. font-family: 'Georgia', serif;
  51. font-size: 1.5rem;
  52. width: 50px; height: 50px;
  53. background-color: white;
  54. color: #0066CC;
  55. border-radius: 50%;
  56. margin-right: 10px;
  57. display: inline-flex;
  58. align-items: center;
  59. justify-content: center;
  60. }
  61. /* Stile per il titolo "Mappa" */
  62. .header-title {
  63. color: white;
  64. font-size: 1.5rem; /* Stessa grandezza di "Segnalazioni e Supporto Tecnico" */
  65. font-weight: bold;
  66. display: inline-block;
  67. vertical-align: middle;
  68. }
  69. .main-content {
  70. background-color: #f8f9fa; /* Grigio chiaro */
  71. padding: 2rem 0;
  72. }
  73. .table-responsive {
  74. overflow-x: auto;
  75. /* Aggiungi scroll orizzontale se la tabella è troppo larga */
  76. }
  77. .header, .footer {
  78. background-color: #0066CC; /* Blu istituzionale */
  79. color: white;
  80. padding: 1rem 0;
  81. }
  82. .main-content {
  83. background-color: #f8f9fa; /* Grigio chiaro */
  84. padding: 2rem 0;
  85. }
  86. #map {
  87. height: 500px;
  88. width: 100%;
  89. }
  90. #coordinate-inputs {
  91. margin-top: 10px;
  92. width: 50%;
  93. }
  94. </style>
  95. </head>
  96. <body>
  97. <!-- Riga blu scuro con scritto "Project Work" allineata a sinistra -->
  98. <div class="top-bar">
  99. <div class="container">
  100. Project Work
  101. </div>
  102. </div>
  103. <!-- Header -->
  104. <header class="header">
  105. <div class="container">
  106. <div class="row align-items-center">
  107. <div class="col d-flex">
  108. <!-- Logo "PW" dentro un cerchio, ora cliccabile -->
  109. <a href="./mappa_logout.html" class="logo-link">
  110. <div class="logo">PW</div>
  111. </a>
  112. <h1 class="header-title">Registrazione degli Edifici</h1>
  113. </div>
  114. <div class="col-auto d-flex align-items-center">
  115. <a href="./ADMIN.html" class="text-white me-3 link-underline-hover">Gestione Dati Immobiliari</a>
  116. <a href="./TFO.html" class="text-white me-3 link-underline-hover">TFO</a>
  117. <a href="./buildings.html" class="text-white me-3 link-underline-hover">Registrazione degli Edifici</a>
  118. <a href="./mappa_login.html" class="btn btn-light">Logout</a>
  119. </div>
  120. </div>
  121. </div>
  122. </header>
  123. <!-- Contenuto principale -->
  124. <div class="container mt-4">
  125. <h1 style="font-size: 1.5rem;">Registrazione degli edifici predisposti alla banda ultralarga</h1>
  126. <p>Compila il modulo sottostante per registrare un edificio predisposto alla banda ultralarga:</p>
  127. <form id="buildingForm">
  128. <div class="form-row">
  129. <div class="form-group col-md-6">
  130. <label for="address" style="font-weight: bold; color: black;">Indirizzo</label>
  131. <br>
  132. <br>
  133. <input type="text" class="form-control" id="address" placeholder="Via, n. civico, comune">
  134. </div>
  135. <div class="form-group col-md-6">
  136. <button type="button" class="btn btn-primary" id="search">Cerca</button>
  137. </div>
  138. </div>
  139. <div class="form-row">
  140. <div id="map"></div>
  141. </div>
  142. <div class="form-row">
  143. <div class="form-group col-md-3">
  144. <label for="latitude" style="font-weight: bold; color: black;">Latitudine</label>
  145. <br>
  146. <br>
  147. <input type="text" class="form-control" id="latitude" placeholder="Latitudine">
  148. </div>
  149. <div class="form-group col-md-3">
  150. <label for="latitude" style="font-weight: bold; color: black;">Longitudine</label>
  151. <br>
  152. <br>
  153. <input type="text" class="form-control" id="longitude" placeholder="Longitudine">
  154. </div>
  155. </div>
  156. <div class="form-row">
  157. <div class="form-group col-md-3">
  158. <label for="latitude" style="font-weight: bold; color: black;">Codice Comune</label>
  159. <br>
  160. <br>
  161. <input type="text" class="form-control" id="commonCode" placeholder="Codice comune" required>
  162. </div>
  163. </div>
  164. <div class="form-row">
  165. <div class="form-group col-md-3">
  166. <label for="latitude" style="font-weight: bold; color: black;">Codice Catastale Particella</label>
  167. <br>
  168. <br>
  169. <input type="text" class="form-control" id="cadastralCode" placeholder="Codice catastale" required>
  170. </div>
  171. </div>
  172. <label for="buildingType">Tipo Edificio</label>
  173. <br>
  174. <br>
  175. <div class="form-group col-md-3" id="div-select">
  176. <select class="form-control" id="buildingType">
  177. <option>Seleziona tipo di edificio</option>
  178. <option>Residenziale</option>
  179. <option>Commerciale</option>
  180. <option>Industriale</option>
  181. </select>
  182. </div>
  183. <br>
  184. <label for="preparationDate">Data di Predisposizione</label>
  185. <br>
  186. <br>
  187. <div class="form-group col-md-3">
  188. <input type="date" class="form-control" id="preparationDate" required>
  189. </div>
  190. <button type="button" class="btn btn-primary" id="add">Aggiungi</button>
  191. <button type="button" class="btn btn-secondary" id="cancellaRiga">Annulla</button>
  192. </form>
  193. <div class="data-table d-flex flex-column">
  194. <table class="table mt-4">
  195. <thead>
  196. <tr>
  197. <th>Indirizzo</th>
  198. <th>Latitudine</th>
  199. <th>Longitudine</th>
  200. <th>Comune</th>
  201. <th>Codice Catastale</th>
  202. <th>Tipo Edificio</th>
  203. <th>Data Predisposizione</th>
  204. <th>Azione</th>
  205. </tr>
  206. </thead>
  207. <tbody id="buildingTableBody">
  208. </tbody>
  209. </table>
  210. </div>
  211. <div class="d-flex justify-content-end mt-3">
  212. <button type="button" class="btn btn-success" id="submitButton">Invia</button>
  213. </div>
  214. </div>
  215. <!-- Script per la mappa e funzionalità -->
  216. <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
  217. <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.3/dist/umd/popper.min.js"></script>
  218. <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
  219. <script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>
  220. <script>
  221. // Inizializzazione Mappa
  222. const map = L.map('map').setView([41.9028, 12.4964], 13);
  223. L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(map);
  224. // Layer edifici colorati
  225. const edificiLayer = L.layerGroup().addTo(map);
  226. let currentMarker = null;
  227. // Funzione principale per caricare gli edifici
  228. async function caricaEdifici() {
  229. if (map.getZoom() >= 16) {
  230. const bounds = map.getBounds();
  231. const bbox = `${bounds.getSouthWest().lat},${bounds.getSouthWest().lng},${bounds.getNorthEast().lat},${bounds.getNorthEast().lng}`;
  232. const query = `[out:json];
  233. (
  234. way["building"](${bbox});
  235. relation["building"](${bbox});
  236. );
  237. out geom;
  238. out tags;`;
  239. try {
  240. const response = await fetch(`https://overpass-api.de/api/interpreter?data=${encodeURIComponent(query)}`);
  241. const data = await response.json();
  242. edificiLayer.clearLayers();
  243. data.elements.forEach(element => {
  244. if (element.type === 'way' && element.geometry) {
  245. const latlngs = element.geometry.map(coord => [coord.lat, coord.lon]);
  246. var statoEdificio = false;
  247. let colorePoligono ;
  248. if (statoEdificio) colorePoligono = 'yellow';
  249. else colorePoligono = 'green';
  250. // const colori = ['#FF0000', '#00FF00'];
  251. const polygon = L.polygon(latlngs, {
  252. fillColor: colorePoligono,
  253. color: colorePoligono,
  254. fillOpacity: 0.5
  255. }).addTo(edificiLayer);
  256. polygon.on('click', async function() {
  257. var buildingType = element.tags && element.tags.building ? element.tags.building : 'Sconosciuto';
  258. try {
  259. await getAddress(latlngs[0][0], latlngs[0][1]);
  260. var popupContent = `
  261. <b>Coordinate:</b> ${latlngs[0][0]}, ${latlngs[0][1]}<br>
  262. <b>Tipo edificio:</b> ${buildingType}<br>
  263. <b>Indirizzo:</b> ${document.getElementById('addressInput').value}<br>
  264. <b>Stato:</b> ${statoEdificio}<br>
  265. <b>Codice Catastale:</b> nessuno
  266. `;
  267. polygon.bindPopup(popupContent).openPopup();
  268. } catch (error) {
  269. console.error("Errore nel recupero dell'indirizzo:", error);
  270. var popupContent = `
  271. <b>Coordinate:</b> ${latlngs[0][0]}, ${latlngs[0][1]}<br>
  272. <b>Tipo edificio:</b> ${buildingType}<br>
  273. <b>Indirizzo:</b> Indirizzo non disponibile<br>
  274. <b>Stato:</b> ${statoEdificio}<br>
  275. <b>Codice Catastale:</b> nessuno
  276. `;
  277. polygon.bindPopup(popupContent).openPopup();
  278. }
  279. });
  280. }
  281. });
  282. } catch (error) {
  283. console.error("Errore nel caricamento edifici:", error);
  284. }
  285. } else {
  286. edificiLayer.clearLayers();
  287. }
  288. }
  289. // Carica gli edifici quando la mappa viene spostata o zoomata
  290. map.on('moveend', caricaEdifici);
  291. map.on('zoomend', caricaEdifici);
  292. // Carica gli edifici all'avvio
  293. caricaEdifici();
  294. // Listener per il click sulla mappa
  295. map.on('click', function(e) {
  296. const lat = e.latlng.lat; // Latitudine del punto cliccato
  297. const lng = e.latlng.lng; // Longitudine del punto cliccato
  298. // Aggiorna i campi del form
  299. document.getElementById('latitude').value = lat;
  300. document.getElementById('longitude').value = lng;
  301. // Ottieni l'indirizzo dalle coordinate
  302. getAddress(lat, lng);
  303. // Rimuovi il marker precedente (se esiste)
  304. if (currentMarker) {
  305. map.removeLayer(currentMarker);
  306. }
  307. // Aggiungi un nuovo marker sulla mappa
  308. currentMarker = L.marker([lat, lng]).addTo(map)
  309. .bindPopup(`Coordinate: ${lat}, ${lng}`)
  310. .openPopup();
  311. });
  312. // Funzione per ottenere l'indirizzo dalle coordinate
  313. async function getAddress(lat, lng) {
  314. try {
  315. const response = await fetch(`https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=${lat}&lon=${lng}`);
  316. const data = await response.json();
  317. if (data.address) {
  318. document.getElementById('address').value = data.display_name;
  319. } else {
  320. document.getElementById('address').value = "Indirizzo non trovato";
  321. }
  322. } catch (error) {
  323. console.error("Errore nel geocoding inverso:", error);
  324. document.getElementById('address').value = "Errore nel geocoding inverso";
  325. }
  326. }
  327. // Funzione per ottenere l'indirizzo dalle coordinate
  328. async function getAddress(lat, lng) {
  329. try {
  330. const response = await fetch(`https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=${lat}&lon=${lng}`);
  331. const data = await response.json();
  332. if (data.address) {
  333. document.getElementById('address').value = data.display_name;
  334. } else {
  335. document.getElementById('address').value = "Indirizzo non trovato";
  336. }
  337. } catch (error) {
  338. console.error("Errore nel geocoding inverso:", error);
  339. document.getElementById('address').value = "Errore nel geocoding inverso";
  340. }
  341. }
  342. // Variabile per memorizzare il marker corrente
  343. var marker;
  344. // Gestione della ricerca dell'indirizzo
  345. document.getElementById('search').addEventListener('click', function() {
  346. var address = document.getElementById('address').value;
  347. if (address) {
  348. // Effettua una richiesta all'API di Nominatim per geocodificare l'indirizzo
  349. fetch(`https://nominatim.openstreetmap.org/search?q=${encodeURIComponent(address)}&format=json`)
  350. .then(response => response.json())
  351. .then(data => {
  352. if (data && data.length > 0) {
  353. var lat = parseFloat(data[0].lat); // Latitudine
  354. var lon = parseFloat(data[0].lon); // Longitudine
  355. // Rimuovi il marker precedente (se esiste)
  356. if (marker) {
  357. map.removeLayer(marker);
  358. }
  359. // Aggiungi un nuovo marker sulla mappa
  360. marker = L.marker([lat, lon]).addTo(map)
  361. .bindPopup(`Indirizzo: ${data[0].display_name}`)
  362. .openPopup();
  363. // Centra la mappa sulla nuova posizione
  364. map.setView([lat, lon], 16);
  365. // Riempie i campi di input per latitudine e longitudine
  366. document.getElementById('latitude').value = lat;
  367. document.getElementById('longitude').value = lon;
  368. } else {
  369. alert('Indirizzo non trovato.');
  370. }
  371. })
  372. .catch(error => {
  373. console.error('Errore durante la geocodifica:', error);
  374. alert('Si è verificato un errore durante la ricerca dell\'indirizzo.');
  375. });
  376. } else {
  377. alert('Inserisci un indirizzo.');
  378. }
  379. });
  380. // Funzione per aggiungere una riga alla tabella con controllo dei campi
  381. function aggiungiRiga() {
  382. // Recupera i valori dai campi di input
  383. const indirizzo = document.getElementById("address").value.trim();
  384. const latitudine = document.getElementById("latitude").value.trim();
  385. const longitudine = document.getElementById("longitude").value.trim();
  386. const codiceComune = document.getElementById("commonCode").value.trim();
  387. const codiceCatastale = document.getElementById("cadastralCode").value.trim();
  388. const tipodiedificio = document.getElementById("buildingType").value.trim();
  389. const datadipredisposizione = document.getElementById("preparationDate").value.trim();
  390. // Controllo se tutti i campi sono compilati
  391. if (!indirizzo || !latitudine || !longitudine || !codiceComune ||
  392. !codiceCatastale || !tipodiedificio || !datadipredisposizione) {
  393. alert("Compila tutti i campi prima di aggiungere l'edificio!");
  394. return; // Blocca l'inserimento
  395. }
  396. // Crea una nuova riga nella tabella
  397. const tabella = document.querySelector("#buildingTableBody");
  398. const nuovaRiga = tabella.insertRow();
  399. // Crea le celle della riga e inserisci i valori
  400. const celle = [];
  401. for (let i = 0; i < 7; i++) {
  402. celle.push(nuovaRiga.insertCell());
  403. }
  404. celle[0].textContent = indirizzo;
  405. celle[1].textContent = latitudine;
  406. celle[2].textContent = longitudine;
  407. celle[3].textContent = codiceComune;
  408. celle[4].textContent = codiceCatastale;
  409. celle[5].textContent = tipodiedificio;
  410. celle[6].textContent = datadipredisposizione;
  411. // Aggiungi i pulsanti di modifica e cancellazione
  412. const azioniCell = nuovaRiga.insertCell();
  413. azioniCell.innerHTML = `
  414. <button class="btn btn-sm btn-primary" onclick="modificaRiga(this)"><i class="fas fa-edit"></i></button>
  415. <button class="btn btn-sm btn-danger" onclick="cancellaRiga(this)"><i class="fas fa-trash"></i></button>
  416. `;
  417. // Resetta i campi del form dopo l'inserimento
  418. document.getElementById("buildingForm").reset();
  419. }
  420. // Collega la funzione aggiungiRiga() al pulsante "Aggiungi"
  421. document.getElementById('add').addEventListener('click', function() {
  422. aggiungiRiga();
  423. });
  424. // Funzione per modificare una riga
  425. function modificaRiga(button) {
  426. const riga = button.parentNode.parentNode;
  427. const celle = riga.cells;
  428. // Popola i campi del form con i dati della riga
  429. document.getElementById("address").value = celle[0].textContent;
  430. document.getElementById("latitude").value = celle[1].textContent;
  431. document.getElementById("longitude").value = celle[2].textContent;
  432. document.getElementById("commonCode").value = celle[3].textContent;
  433. document.getElementById("cadastralCode").value = celle[4].textContent;
  434. document.getElementById("buildingType").value = celle[5].textContent;
  435. document.getElementById("preparationDate").value = celle[6].textContent;
  436. // Rimuovi la riga dalla tabella
  437. riga.remove();
  438. }
  439. // Funzione per cancellare una riga con conferma
  440. function cancellaRiga(button) {
  441. // Mostra un alert di conferma
  442. const isConfirmed = confirm("Sei sicuro di voler eliminare questa riga?");
  443. // Se l'utente conferma, elimina la riga
  444. if (isConfirmed) {
  445. const riga = button.parentNode.parentNode;
  446. riga.remove();
  447. }
  448. }
  449. // Gestione dell'invio dei dati
  450. document.getElementById('submitButton').addEventListener('click', function() {
  451. alert('Dati inviati!');
  452. });
  453. // Funzione per cancellare tutti i campi del modulo
  454. function resetForm() {
  455. document.getElementById("buildingForm").reset();
  456. }
  457. // Aggiungi evento al pulsante "Annulla"
  458. document.getElementById('cancellaRiga').addEventListener('click', function() {
  459. resetForm();
  460. });
  461. </script>
  462. <script src="https://elevenlabs.io/convai-widget/index.js" async type="text/javascript"></script>
  463. <div id="ai-widget-container" style="position: fixed; bottom: 20px; right: 20px;">
  464. <elevenlabs-convai agent-id="2MJWbkNuIGTHNI71hKfL"></elevenlabs-convai>
  465. </div>
  466. <!-- Footer -->
  467. <footer id="footer" class="it-footer bg-black mt-5" role="contentinfo"></footer>
  468. <footer id="footer" class="it-footer bg-black" role="contentinfo">
  469. <div class="it-footer-main py-3">
  470. <div class="container">
  471. <section class="py-4">
  472. <div class="row">
  473. <div class="col-lg-3 col-md-3 col-sm-6 pb-2">
  474. <div class="link-list-wrapper">
  475. <h2 class="h5">Esplora SINFI</h2>
  476. <ul id="footer-menu-col-1" class="link-list">
  477. <li id="menu-item-sinfi-1" class="menu-item">
  478. <a class="list-item" href="https://sinfi.it/portal/sinfi-menu/che-cose/">Cos'è SINFI</a>
  479. </li>
  480. <li id="menu-item-sinfi-2" class="menu-item">
  481. <a class="list-item" href="https://sinfi.it/realms/master/protocol/openid-connect/auth?client_id=sinfi_user_service&response_type=code&redirect_uri=https://sinfi.it/sinfi_gateway/labs_keycloak/post_login/&scope=email&state=">Infrastrutture Registrate</a>
  482. </li>
  483. <li id="menu-item-sinfi-3" class="menu-item">
  484. <a class="list-item" href="https://sinfi.it/portal/sinfi-menu/riferimenti-normativi/">Normative di Riferimento</a>
  485. </li>
  486. <li id="menu-item-sinfi-4" class="menu-item">
  487. <a class="list-item" href="https://sinfi.it/realms/master/protocol/openid-connect/auth?client_id=sinfi_user_service&response_type=code&redirect_uri=https://sinfi.it/sinfi_gateway/labs_keycloak/post_login/&scope=email&state=">Open Data SINFI</a>
  488. </li>
  489. </ul>
  490. </div>
  491. </div>
  492. <div class="col-lg-3 col-md-3 col-sm-6 pb-2">
  493. <div class="link-list-wrapper">
  494. <h2 class="h5">Aiuto e Supporto</h2>
  495. <ul id="footer-menu-col-2" class="link-list">
  496. <li id="menu-item-aiuto-1" class="menu-item">
  497. <a class="list-item" href="./instructions.html">Istruzioni</a>
  498. </li>
  499. <li id="menu-item-aiuto-2" class="menu-item">
  500. <a class="list-item" href="./faq.html">FAQ - Domande Frequenti</a>
  501. </li>
  502. <li id="menu-item-aiuto-3" class="menu-item">
  503. <a class="list-item" href="./techsup.html">Segnalazioni e Supporto Tecnico</a>
  504. </li>
  505. </ul>
  506. </div>
  507. </div>
  508. <!-- Colonna "Community" con i loghi dei social -->
  509. <div class="col-lg-3 col-md-3 col-sm-6 pb-2">
  510. <div class="link-list-wrapper">
  511. <h2 class="h5">Community</h2>
  512. <div class="social-icons">
  513. <a href="https://www.linkedin.com" target="_blank" class="me-3"><i class="fab fa-linkedin"></i></a>
  514. <a href="https://www.youtube.com" target="_blank" class="me-3"><i class="fab fa-youtube"></i></a>
  515. <a href="https://www.facebook.com" target="_blank" class="me-3"><i class="fab fa-facebook"></i></a>
  516. <a href="https://www.instagram.com" target="_blank" class="me-3"><i class="fab fa-instagram"></i></a>
  517. </div>
  518. </div>
  519. </div>
  520. <div class="col-lg-3 col-md-3 col-sm-6 pb-2">
  521. <div class="link-list-wrapper">
  522. <h2 class="h5">SINFI</h2>
  523. <ul id="footer-menu-col-4" class="link-list">
  524. <li id="menu-item-377" class="menu-item">
  525. <a target="_blank" href="https://sinfi.it/portal/">Vai al sito ufficiale SINFI</a>
  526. </li>
  527. </ul>
  528. </div>
  529. </div>
  530. </div>
  531. </section>
  532. </div>
  533. </div>
  534. <div class="it-footer-small-prints clearfix">
  535. <div class="container">
  536. <nav class="menu-footer-menu-ita-container" aria-label="link utili">
  537. <ul id="menu-footer-menu-ita" class="it-footer-small-prints-list list-inline mb-0 d-flex flex-column flex-md-row">
  538. <li id="menu-item-413" class="menu-item list-inline-item"><a href="/media-policy/">Media Policy</a></li>
  539. <li id="menu-item-453" class="menu-item list-inline-item"><a href="/note-legali/">Privacy Policy &amp; Note Legali</a></li>
  540. <li id="menu-item-1310" class="menu-item list-inline-item"><a target="_blank" href="https://form.agid.gov.it/view/9df3de50-7a42-11ef-8989-9dcab5eaa914">Dichiarazione di accessibilità</a></li>
  541. <li id="menu-item-411" class="menu-item list-inline-item"><a href="/mappa-del-sito/">Mappa del sito</a></li>
  542. <li id="menu-item-1277" class="menu-item list-inline-item"><a href="/open-data-spid/">Open Data SPID</a></li>
  543. </ul>
  544. </nav>
  545. </div>
  546. </div>
  547. </footer>
  548. </body>
  549. </html>