Alessia Spadi 1 jaar geleden
bovenliggende
commit
0a616c5f1c
4 gewijzigde bestanden met toevoegingen van 550 en 3 verwijderingen
  1. 2 3
      js/people.js
  2. 291 0
      js/results.js
  3. 85 0
      js/results_query.js
  4. 172 0
      results.html

+ 2 - 3
js/people.js

@@ -566,7 +566,6 @@ function handle_data(json) {
         }
         
         var dataset = get_dataset_name(graph);
-        patronymic = patronymic.replace("di ", "");
         var second_name = patronymic;
         if (relative2 != "") {
           second_name = second_name + " " + relative2;
@@ -580,7 +579,7 @@ function handle_data(json) {
 
         var first_name = "";
 
-        if ((givenName != "") || (second_name != "  ") || (provenence != "")) {
+        if ((givenName != "") || (second_name != "") || (provenence != "")) {
           first_name = givenName + " " + second_name + " " + provenence;
         } else {
           first_name = name;
@@ -619,7 +618,7 @@ function handle_data(json) {
         document.getElementById("genere").innerHTML = gender;
         document.getElementById("nome_proprio").innerHTML = givenName;
         document.getElementById("nome_famiglia").innerHTML = familyName;
-        document.getElementById("patronimico").innerHTML = second_name;
+        document.getElementById("patronimico").innerHTML = second_name.replace("di ", "");
         document.getElementById("provenienza").innerHTML = provenence;
         document.getElementById("identifier").innerHTML = id_snippet;
         document.getElementById("alias").innerHTML = alias;

+ 291 - 0
js/results.js

@@ -0,0 +1,291 @@
+
+// Oggetto che raccoglie le info necessarie per la pagina
+pageInfo = {};
+
+// Inizializzazione della pagina
+initPage();
+
+
+// Def. funzione di inizializzazione
+async function initPage(){
+	pageInfo = await getPageInfo();
+	updatePage();
+}
+
+// Esegue le queries, restituisce un oggetto con tutte le info per completare la pagina
+async function getPageInfo(){
+	var out = {};
+
+	try{
+		out.query = await doJsonQuery(queryLettere, true);
+		
+	} catch(err){
+		console.log(err);
+	}
+
+	console.log('out', out)
+	return out;
+}
+
+
+// Aggiorna la pagina usando l'oggetto-info passato come parametro
+function updatePage(){
+	if(pageInfo.query) {
+		for (var i=0; i<pageInfo.query.length; i++) {
+			if(pageInfo.query[i].hasOwnProperty('uri_document')) {
+				alert("Here");
+				uri_document = pageInfo.query.uri_document.value;
+			}
+			var l = pageInfo.query[i].uri_document.value;
+		}
+        var uri_document = "";
+        var doc = "";
+        var time_span_from = "";
+        var time_span_to = "";
+        var uri_place_from = "";
+        var place_from = "";
+        var uri_place_to = "";
+        var place_to = "";
+        var EventsTable = "";
+
+		
+        if(pageInfo.query.hasOwnProperty('document')) {
+            doc = pageInfo.query.document.value;
+        }
+        if(pageInfo.query.hasOwnProperty('time_span_from')) {
+            time_span_from = pageInfo.query.time_span_from.value;
+        }
+        if(pageInfo.query.hasOwnProperty('time_span_to')) {
+            time_span_to = pageInfo.query.time_span_to.value;
+        }
+        if(pageInfo.query.hasOwnProperty('uri_place_from')) {
+            uri_place_from = pageInfo.query.uri_place_from.value;
+        }
+        if(pageInfo.query.hasOwnProperty('place_from')) {
+            place_from = pageInfo.query.place_from.value;
+        }
+        if(pageInfo.query.hasOwnProperty('uri_place_to')) {
+            uri_place_to = pageInfo.query.uri_place_to.value;
+        }
+        if(pageInfo.query.hasOwnProperty('place_to')) {
+            place_to = pageInfo.query.place_to.value;
+        }
+
+        EventsTable += '<div class="row">' +
+    '<div class="col-2">' + doc + '</div>' +
+    '<div class="col-2">' + time_span_from + '</div>' +
+    '<div class="col-2">' + time_span_to + '</div>' +
+    '<div class="col-2">' + place_from + '</div>' +
+    '<div class="col-4">' + place_to + '</div>' +
+    '</div>';
+		
+
+		document.getElementById("results_table").innerHTML = EventsTable;
+	}
+	
+
+	/*if(pageInfo.query1){
+		document.getElementById("mittente_id").innerHTML = pageInfo.query1.mittente.value;
+		//document.getElementById("mittente_btn").innerHTML = createButton("fa fa-user", "Scheda persona", "schedaPersona('PERS')".replace("PERS", pageInfo.query1.mittente.value));
+	}
+	if(pageInfo.query1){
+		document.getElementById("destinatario_id").innerHTML = pageInfo.query1.destinatario.value;
+		//document.getElementById("destinatario_btn").innerHTML = createButton("fa fa-user", "Scheda persona", "schedaPersona('PERS')".replace("PERS", pageInfo.query1.destinatario.value));
+	}
+	if(pageInfo.query1){
+		document.getElementById("imageASPO").innerHTML = createEmbed(pageInfo.query1.subject.value);
+	}
+	if(pageInfo.query1){
+		document.getElementById("luogo_partenza_id").innerHTML = pageInfo.query1.luogo_partenza.value;
+		document.getElementById("luogo_partenza_btn").innerHTML = createButton("fa fa-map", "Vedi mappa", "schedaMappa('LUOGO')".replace("LUOGO", pageInfo.query1.uriLuogoPartenza.value));
+	}
+	if(pageInfo.query1){
+		document.getElementById("luogo_arrivo_id").innerHTML = pageInfo.query1.luogo_arrivo.value;
+		document.getElementById("luogo_arrivo_btn").innerHTML = createButton("fa fa-map", "Vedi mappa", "schedaMappa('LUOGO')".replace("LUOGO", pageInfo.query1.uriLuogoArrivo.value));
+	}
+	if(pageInfo.query1) document.getElementById("data_partenza_id").innerHTML = pageInfo.query1.data_partenza.value;
+	if(pageInfo.query1) document.getElementById("data_arrivo_id").innerHTML = pageInfo.query1.data_arrivo.value;
+	if(pageInfo.descrizione) document.getElementById("descrizione_id").innerHTML = pageInfo.descrizione.descrizione.value;
+	if(pageInfo.areaLinguistica) document.getElementById("lingua_id").innerHTML = pageInfo.areaLinguistica.lingua.value;
+	if(pageInfo.areaLinguistica) document.getElementById("area_linguistica_id").innerHTML = pageInfo.areaLinguistica.area_linguistica.value;
+	if(pageInfo.sigla) document.getElementById("sigla_OVI").innerHTML = pageInfo.sigla.sigla_OVI.value;
+	if(pageInfo.segnatura){
+		document.getElementById("segnatura_id").innerHTML = pageInfo.segnatura.segnatura_OVI.value;
+		document.getElementById("segnatura_btn").innerHTML = createButton("fa fa-link", "Link ASPO", "schedaASPO('SEGN')".replace("SEGN", thisUrlParams.link));
+	}
+	if(pageInfo.edizione){
+		document.getElementById("edizione_id").innerHTML = pageInfo.edizione.edizione.value;
+		document.getElementById("edizione_btn").innerHTML = createButton("fa fa-comments", "Cita Edizione", "schedaEdizione('EDIZ')".replace("EDIZ", pageInfo.edizione.edizione.value));
+	}
+	if(pageInfo.testo) document.getElementById("trascrizione_id").innerHTML = pageInfo.testo.testo_lemmatizzato.value;
+	//
+	if(pageInfo.antroponimi && pageInfo.antroponimi.length){
+		const listaAntroponimi = pageInfo.antroponimi.map(elem => elem.antroponimo.value);
+		document.getElementById("antroponimi").innerHTML = formatListAsLi(listaAntroponimi);
+	}
+	if(pageInfo.toponimi && pageInfo.toponimi.length){
+		const listaToponimi = pageInfo.toponimi.map(elem => elem.toponimo.value);
+		document.getElementById("toponimi").innerHTML = formatListAsLi(listaToponimi);
+	}
+
+	if(pageInfo.query2) {
+		if(pageInfo.query2.hasOwnProperty('mittente')) document.getElementById("mittente_id_ASPO").innerHTML = pageInfo.query2.mittente.value;
+		if(pageInfo.query2.hasOwnProperty('uriSender')) document.getElementById("mittente_btn_ASPO").innerHTML = createButton("fa fa-user", "Scheda persona", "schedaPersona('PERS')".replace("PERS", pageInfo.query2.uriSender.value));
+		if(pageInfo.query2.hasOwnProperty('destinatario')) document.getElementById("destinatario_id_ASPO").innerHTML = pageInfo.query2.destinatario.value;
+		if(pageInfo.query2.hasOwnProperty('uriReceiver')) document.getElementById("destinatario_btn_ASPO").innerHTML = createButton("fa fa-user", "Scheda persona", "schedaPersona('PERS')".replace("PERS", pageInfo.query2.uriReceiver.value));
+		if(pageInfo.query2.hasOwnProperty('placeSend')) document.getElementById("luogo_partenza_id_ASPO").innerHTML = pageInfo.query2.placeSend.value;
+		if(pageInfo.query2.hasOwnProperty('placeReceive')) document.getElementById("luogo_arrivo_id_ASPO").innerHTML = pageInfo.query2.placeReceive.value;
+		if(pageInfo.query2.hasOwnProperty('timeSpanSend')) document.getElementById("data_partenza_id_ASPO").innerHTML = pageInfo.query2.timeSpanSend.value;
+		if(pageInfo.query2.hasOwnProperty('timeSpanReceive')) document.getElementById("data_arrivo_id_ASPO").innerHTML = pageInfo.query2.timeSpanReceive.value;
+		if(pageInfo.query2.hasOwnProperty('material')) document.getElementById("consistenzaASPO").innerHTML = pageInfo.query2.material.value;
+		if(pageInfo.query2.hasOwnProperty('dimension')) document.getElementById("dimensioneASPO").innerHTML = pageInfo.query2.dimension.value;
+		if(pageInfo.query2.hasOwnProperty('identifier')) document.getElementById("segnatura_id_ASPO").innerHTML = pageInfo.query2.identifier.value;
+		if(pageInfo.query2.hasOwnProperty('currentLocation')) document.getElementById("ownerASPO").innerHTML = pageInfo.query2.currentLocation.value;
+		
+	}
+
+	
+	if(pageInfo.sigla){
+		document.getElementById("evt_button").innerHTML = createButtonEVT(pageInfo.sigla.sigla_OVI.value);
+	}*/
+}
+
+// Mini-utility per formattare liste
+function formatListAsLi(thisList){
+	toRet = "";
+	thisList.forEach(value => toRet += "<li>" + value + "</li>");
+	return toRet;
+}
+
+// Buttons
+function createButton(buttonClass, text, onClickFunction){
+	htmlCode = '\
+		<button class="btn btn-default" type="button" onclick="<FUNCTION>">\
+		<i class="<CLASS>" aria-hidden="true">\
+			<p class="btn-text"><TEXT></p>\
+		</i>\
+		</button>\
+		'.replace("<CLASS>", buttonClass).replace("<TEXT>", text).replace("<FUNCTION>", onClickFunction);
+	return htmlCode;
+}
+
+function createButtonEVT(sigla){
+	htmlCode = '\
+		<button type="button" class="btn btn-secondary" onclick="loadPageEVT(\'<SIGLA>\')">\
+		Button EVT</button>\
+		'.replace("<SIGLA>", sigla);
+	return htmlCode;
+}
+//<button type="button" class="btn btn-secondary" onclick="loadPageLOD()">Button LOD</button> 
+
+function loadPageEVT(sigla)
+{
+     window.location="http://restore.ovi.cnr.it/mockup/evt/#/imageText?p=" + sigla + "_01&el=diplomatic";
+}  		 
+
+function createEmbed(link) {
+	image = link.replace("scheda", "imageView") + "/#main";
+	htmlCode = '\
+		<embed id="imageEmb" src="<LINK>"> \
+		'.replace("<LINK", image);
+	return htmlCode;
+}
+
+function schedaPersona(info){
+	window.open("Persona.html?link="+info);
+}
+
+function schedaMappa(info){
+	window.open("Luogo.html?link="+info);
+}
+
+function schedaASPO(info){
+	window.open(info);
+}
+
+function schedaEdizione(info){
+	$("#myModal").empty();
+	$("#myModal").css("display", "block");
+	$('#myModal').append("<div class='modal-content'><div class='modal-close'><span class='close'>&times;</span></div><div id='myInput'>" + 
+		info + "</div><button id='copy_btn' class='btn btn-theme-primary btn-md' onclick='myFunction()'>Copia</button>");
+
+		
+}
+
+function show_OVI(){
+	document.getElementById("OVI_info").style.display = "block";
+  document.getElementById("ASPO_info").style.display = "none";
+}
+
+function show_ASPO(){
+	document.getElementById("OVI_info").style.display = "none";
+  document.getElementById("ASPO_info").style.display = "block";
+}
+
+$(document).on("click", ".close", function (ev) {
+
+		var link = this.id;
+		//alert(nome_autore);
+		//$('#myModal').text("");
+		$("#myModal").css("display", "none");
+
+	});
+
+$(document).on("click", ".hyp", function (ev) {
+
+	var baseurl = window.location.origin+window.location.pathname;
+	let slash = baseurl.lastIndexOf("/");
+	var type = $(this).val() + '.html';
+	var link = this.id;
+	var url = baseurl.substr(0, slash+1) + type + "?link="+link;
+	var link = this.id;
+	$("#myModal").empty();
+	$("#myModal").css("display", "block");
+	$('#myModal').append("<div class='modal-content'><div class='modal-close'><span class='close'>&times;</span></div><div id='myInput'>" +
+		url + "</div><button id='copy_btn' class='btn btn-theme-primary btn-md' onclick='myFunction()'>Copia</button>");
+	
+	});
+
+$(document).on("click", ".cit", function (ev) {
+
+	var author ="RESTORE. smart access to digital heritage and memory"
+	
+	var year = new Date().getFullYear()
+	
+	var today = new Date();
+	var dd = String(today.getDate()).padStart(2, '0');
+	var mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!
+	var yyyy = today.getFullYear();
+	
+	today = dd + '/' + mm + '/' + yyyy;
+	
+	var baseurl = window.location.origin+window.location.pathname;
+	let slash = baseurl.lastIndexOf("/");
+	var type = $(this).val() + '.html';
+	var link = this.id;
+	var url = baseurl.substr(0, slash+1) + type + "?link="+link;
+	//alert(nome_autore);
+	//$('#myModal').text("");
+	$("#myModal").empty();
+	$("#myModal").css("display", "block");
+	$('#myModal').append("<div class='modal-content'><div class='modal-close'><span class='close'>&times;</span></div><div id='myInput'>" + 
+		author + " " + year + ", accesso effettuato: " + today + ", &lt;" + url + "&gt;</div><button id='copy_btn' class='btn btn-theme-primary btn-md' onclick='myFunction()'>Copia</button>");
+	
+	});
+
+function copyToClipboard(text) {
+    var sampleTextarea = document.createElement("textarea");
+    document.body.appendChild(sampleTextarea);
+    sampleTextarea.value = text; //save main text in it
+    sampleTextarea.select(); //select textarea contenrs
+    document.execCommand("copy");
+    document.body.removeChild(sampleTextarea);
+}
+
+function myFunction(){
+    var copy = document.getElementById("myInput");
+    copyText = copy.textContent;
+    copyToClipboard(copyText);
+
+    //copyToClipboard(copyText.value);
+}

+ 85 - 0
js/results_query.js

@@ -0,0 +1,85 @@
+
+// Recupero i parametri dall'URL -- mi aspetto un parametro di nome 'link'!
+thisUrlParams = {};
+window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
+    thisUrlParams[key] = value;
+});
+console.log('URL get params: ', thisUrlParams);
+
+
+// Funzioni per eseguire le queries
+
+function prepareQueryURL(query){
+    sparqlEndpoint = 'http://dev.restore.ovi.cnr.it:8890/sparql/';
+    sparqlUrlParams = '?default-graph-uri=&query=' + encodeURIComponent(query) + '&output=json&callback=?';
+    return sparqlEndpoint + sparqlUrlParams;
+}
+
+// Esegue una query sull'endpoint SPARQL il cui testo completo deve essere fornito nel parametro-stringa 'query'
+// Restituisce una lista di oggetti json nel formato di Virtuoso
+// Il parametro opzionale 'isUnique', se messo a 'true' controlla che ci sia un unico risultato (un array di
+// lunghezza 1) e se non è così restituisce un errore.
+
+async function doJsonQuery(query){
+
+    queryURL = prepareQueryURL(query);
+
+    response = await $.ajax({//OGGETTO
+
+        url: queryURL,
+        dataType: "json",
+        success: function (data){},
+        error: function (e) {
+            console.log("Exception in query:", e);
+        }
+    });
+
+    let out = [];
+    let bin = response['results']['bindings'];
+    for (var i=0; i<bin.length; i++) {
+        out.push(bin[i]);
+    }
+    return out;
+
+}
+
+////////////////////
+// TESTI DELLE QUERY
+////////////////////
+
+prefixes = "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> \
+PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> \
+PREFIX crm: <http://www.cidoc-crm.org/cidoc-crm/> \
+PREFIX dat: <http://datini.archiviodistato.prato.it/la-ricerca/scheda/> \
+PREFIX mpp: <http://palazzopretorio.comune.prato.it/it/le-opere/alcuni-capolavori/> \
+PREFIX aut: <http://palazzopretorio.comune.prato.it/it/opere/autori/>"
+
+queryLettere = prefixes + " SELECT DISTINCT ?uri_document ?document ?time_span_from ?time_span_to ?uri_place_from ?place_from ?uri_place_to ?place_to \
+{ \
+?event_from rdfs:subClassOf ?event ; \
+rdf:type crm:EL2_Send_Letter . \
+?event_to rdfs:subClassOf ?event ; \
+rdf:type crm:EL3_Receive_Letter . \
+\
+?event_from crm:P01_has_domain ?pc_from . \
+?pc_from crm:P02_has_range <http://www.archiviodistato.prato.it/accedi-e-consulta/aspoMV001/scheda/IT-ASPO-AU00003-0000806> . \
+OPTIONAL {?event_from crm:P4_has_time-span ?uri_time_span_from . \
+?uri_time_span_from rdfs:label ?time_span_from} \
+OPTIONAL {?event_from crm:P27_moved_from ?aspo_place_from . \
+?aspo_place_from owl:sameAs ?uri_place_from . \
+?uri_place_from rdfs:label ?place_from ; \
+crm:P168_place_is_defined_by ?coords_from} \
+\
+?event_to crm:P01_has_domain ?pc_to . \
+?pc_to crm:P02_has_range <http://www.archiviodistato.prato.it/accedi-e-consulta/aspoMV001/scheda/IT-ASPO-AU00003-0001817> . \
+OPTIONAL {?event_to crm:P4_has_time-span ?uri_time_span_to . \
+?uri_time_span_to rdfs:label ?time_span_to} \
+OPTIONAL {?event_to crm:P26_moved_to ?aspo_place_to . \
+?aspo_place_to owl:sameAs ?uri_place_to . \
+?uri_place_to rdfs:label ?place_to ; \
+crm:P168_place_is_defined_by ?coords_to} \
+\
+?uri_document crm:P25i_moved_by ?event ; \
+rdfs:label ?document . \
+}"
+

+ 172 - 0
results.html

@@ -0,0 +1,172 @@
+<!doctype html>
+<html>
+
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    <meta name="description" content="">
+    <meta name="author" content="">
+
+    <title>Restore - Standard</title>
+
+    <link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">
+    <link href="vendor/fontawesome-free/css/all.min.css" rel="stylesheet">
+    <link href="vendor/simple-line-icons/css/simple-line-icons.css" rel="stylesheet" type="text/css">
+
+    <link href="css/pages.css" rel="stylesheet">
+
+    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
+    <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.min.js"></script>
+    <script src="https://cdn.jsdelivr.net/gh/google/code-prettify@master/loader/run_prettify.js?lang=css&amp;skin=default"></script>
+
+    <link href="css/styles.min.css" rel="stylesheet">
+</head>
+
+<body>
+    <header class="sticky-top">
+        <nav class="navbar navbar-expand-lg navbar-light bg-white">
+            <div class="container-fluid">
+                <div class="navbar-brand">
+                    <img src="img/Logo.png" width="100" alt="Restore" />
+                </div>
+                <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
+                    <span class="navbar-toggler-icon"></span>
+                </button>
+                <div class="collapse navbar-collapse justify-content-end" id="navbarNavDropdown">
+                    <ul class="navbar-nav">
+                        <li class="nav-item">
+                            <a class="nav-link" href="index.html">Home</a>
+                        </li>
+                        <li class="nav-item">
+                            <a class="nav-link" href="http://restore.ovi.cnr.it/">Progetto</a>
+                        </li>
+                        <li class="nav-item">
+                            <a class="nav-link" href="ricerca.html">Ricerca</a>
+                        </li>
+                        <!--<li class="nav-item">
+                            <a class="nav-link" href="#">Indici</a>
+                        </li>
+                        <li class="nav-item">
+                            <a class="nav-link" href="#">Percorsi</a>
+                        </li>-->
+                        <li class="nav-item active">
+                            <a class="nav-link" href="standard.html">Standard</a>
+                        </li>
+                        <li class="nav-item dropdown">
+                            <a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Sparql</a>
+                            <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
+                                <a class="dropdown-item" href="http://dev.restore.ovi.cnr.it:8890/sparql/">Endpoint Sparql</a>
+                                <a class="dropdown-item" href="sparql.html">Query</a>
+                            </div>
+                        </li>
+                        <!--<li class="nav-item">
+                            <a class="nav-link" href="download.html">Download</a>
+                        </li>-->
+                        <li class="nav-item dropdown">
+                            <a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink1" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Collegamenti esterni</a>
+                            <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink1">
+                                <a class="dropdown-item" href="http://ckan.restore.ovi.cnr.it/" target="_blank">CKAN</a>
+                                <a class="dropdown-item" href="http://dev.restore.ovi.cnr.it/lodlive/" target="_blank">LOD</a>
+                            </div>
+                        </li>
+                    </ul>
+                </div>
+            </div>
+        </nav>
+    </header>
+
+    <main>
+        <section>
+            <div class="w-content section-small">
+                <div class="container-fluid">
+                    <div class="col box-info">
+                        <div class="container-fluid">
+                            <div class="row box-info-title" id="head_standard">
+                                <div class="col">
+                                    <h1 id="results_title" class="box-info-main-title">Title</h1>
+                                </div>
+                            </div>
+                            <div class="row box-info-container" id="res_container">
+                                <div class="col" id="results_table">
+                                   
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+                           
+        </section>
+    </main>
+
+    <footer id="footer" class="footer">
+        <div class="container">
+            <div class="row">
+                <div class="col-lg-7 h-100 text-center text-lg-left my-auto">
+                    <ul class="list-inline mb-2">
+                        <li class="list-inline-item">
+                            <a href="#">About</a>
+                        </li>
+                        <li class="list-inline-item">&sdot;</li>
+                        <li class="list-inline-item">
+                            <a href="#">Contact</a>
+                        </li>
+                        <li class="list-inline-item">&sdot;</li>
+                        <li class="list-inline-item">
+                            <a href="#">Terms of Use</a>
+                        </li>
+                        <li class="list-inline-item">&sdot;</li>
+                        <li class="list-inline-item">
+                            <a href="#">Privacy Policy</a>
+                        </li>
+                    </ul>
+                    <p class="small mb-4 mb-lg-0">&copy; RESTORE 2021. All Rights Reserved.</p>
+                </div>
+                <div class="col-lg-5 h-100 text-center my-auto">
+                    <ul class="partner-list list-inline mb-0">
+                        <li class="list-inline-item mr-3">
+                            <a href="#">
+                                <img class="img-logo" src="img/CNR.png" />
+                            </a>
+                        </li>
+                        <li class="list-inline-item mr-3">
+                            <a href="#">
+                                <img class="img-logo" src="img/RegioneToscana.jpg" />
+                            </a>
+                        </li>
+                        <li class="list-inline-item mr-3">
+                            <a href="#">
+                                <img class="img-logo" src="img/European-Union.png" />
+                            </a>
+                        </li>
+                        <li class="list-inline-item mr-3">
+                            <a href="#">
+                                <img class="img-logo" src="img/RepubblicaItaliana.png" />
+                            </a>
+                        </li>
+                        <li class="list-inline-item mr-3">
+                            <a href="#">
+                                <img class="img-logo" src="img/POR-FSE-Regione-Toscana.png" />
+                            </a>
+                        </li>
+                        <li class="list-inline-item">
+                            <a href="#">
+                                <img class="img-logo" src="img/GiovaniSi.png" />
+                            </a>
+                        </li>
+                    </ul>
+                </div>
+            </div>
+        </div>
+    </footer>
+
+    <script src="js\results_query.js"></script>
+    <script src="js\results.js"></script>
+
+    <!-- Bootstrap core JavaScript -->
+    <script src="vendor/jquery/jquery.min.js"></script>
+    <script src="vendor/bootstrap/js/bootstrap.bundle.min.js"></script>
+</body>
+
+</html>