1244 lines
52 KiB
JavaScript
1244 lines
52 KiB
JavaScript
/**
|
|
*
|
|
*/
|
|
|
|
/* necessari per il bundle:
|
|
import "./jquery-global.js";
|
|
require("../node_modules/jquery-ui-dist/jquery-ui.js");
|
|
require("../node_modules/bootstrap/dist/js/bootstrap.bundle.min.js");
|
|
*/
|
|
|
|
$(document).ready(function() {
|
|
|
|
|
|
//$('#multidraggable1').multidraggable();
|
|
$("#dropAdvanced").on('click', function () {
|
|
queryJson.QueryAvanzata = "1";
|
|
$("#simpleSearchDiv").removeClass( "d-flex" )
|
|
$("#simpleSearchDiv").attr('style', "display: none;");
|
|
$("#collapseOptions").collapse('hide');
|
|
$("#collapseAdvanced").collapse('show');
|
|
$("#advancedSearchDiv").addClass( "d-flex" )
|
|
$("#advancedSearchDiv").attr('style', "display: flex;");
|
|
//$("#tipoRicerca").html("Ricerca Avanzata");
|
|
});
|
|
|
|
$("#dropSimple").on('click', function () {
|
|
queryJson.QueryAvanzata = "0";
|
|
$("#advancedSearchDiv").removeClass( "d-flex" )
|
|
$("#advancedSearchDiv").attr('style', "display: none;");
|
|
$("#simpleSearchDiv").addClass( "d-flex" )
|
|
$("#simpleSearchDiv").attr('style', "display: flex;");
|
|
$("#collapseAdvanced").collapse('hide');
|
|
//$("#tipoRicerca").html("Ricerca Semplice");
|
|
});
|
|
|
|
$("#copiaTesto").prop("disabled", true);
|
|
|
|
// Evento: click sul bottone di copia dei risultati testuali
|
|
$("#copiaTesto").on("click", function(){
|
|
$("#risultatitesto").copy2clipboard();
|
|
});
|
|
|
|
$("#copiaQuery").prop("disabled", true);
|
|
|
|
// Inizializza sortable
|
|
$( "#sortable0" ).sortable({
|
|
items: "> li",
|
|
handle: ".handle"
|
|
});
|
|
|
|
// Inizializza selectable0 e definisce le funzioni
|
|
$("#selectableS").selectable({
|
|
filter: "td",
|
|
//appendTo: "#someElem",
|
|
selected: function(event, ui) {
|
|
contextS[ui.selected.id.substring(0,1)][ui.selected.id.substring(2)] = 1;
|
|
//console.log(ui.selected.id.substring(0,1) + " + " + ui.selected.id.substring(2));
|
|
},
|
|
unselected: function(event, ui) {
|
|
contextS[ui.unselected.id.substring(0,1)][ui.unselected.id.substring(2)] = 0;
|
|
//console.log(ui.unselected.id.substring(0,1) + " - " + ui.unselected.id.substring(2));
|
|
},
|
|
stop: function(event, ui) {
|
|
//console.log(context0);
|
|
parseContext(contextS);
|
|
//$("#risultatitesto").val(parseContext(context0));
|
|
}
|
|
});
|
|
|
|
// Inizializza selectable e definisce le funzioni
|
|
$("#selectable0").selectable({
|
|
filter: "td",
|
|
//appendTo: "#someElem",
|
|
selected: function(event, ui) {
|
|
context0[ui.selected.id.substring(0,1)][ui.selected.id.substring(2)] = 1;
|
|
//console.log(ui.selected.id.substring(0,1) + " + " + ui.selected.id.substring(2));
|
|
},
|
|
unselected: function(event, ui) {
|
|
context0[ui.unselected.id.substring(0,1)][ui.unselected.id.substring(2)] = 0;
|
|
//console.log(ui.unselected.id.substring(0,1) + " - " + ui.unselected.id.substring(2));
|
|
},
|
|
stop: function(event, ui) {
|
|
//console.log(context0);
|
|
parseContext(context0);
|
|
//$("#risultatitesto").val(parseContext(context0));
|
|
}
|
|
});
|
|
|
|
// Evento: click sul bottone di copia della query
|
|
$("#copiaQuery").on("click", function(){
|
|
$('#sparqlquery').copy2clipboard();
|
|
});
|
|
|
|
// Evento: click sull'area di navigazione delle tab delle clausole
|
|
$('#tab-list').on('click', function() {
|
|
refreshClaList();
|
|
refreshSortables();
|
|
});
|
|
|
|
$("form #lemma_forma").on('change', function() {
|
|
refreshClaList();
|
|
});
|
|
|
|
$("form #queryText").on('change', function() {
|
|
refreshClaList();
|
|
});
|
|
|
|
// Evento: click sull'icona check dentro il tab della clausola
|
|
$('#cla-TabContent').on('click', '.return2Query', function() {
|
|
var tabFirst = $('#tab-list a:first');
|
|
refreshClaList();
|
|
tabFirst.tab('show');
|
|
});
|
|
|
|
// Evento: click sull'icona rimuovi clausola dentro il tab della clausola
|
|
$('#cla-TabContent').on('click', '.removeClaInTab', function() {
|
|
var tabPanelId = "#" + $(this).parent('div').parent().attr('id');
|
|
var claListItemID = "H-" + $(this).parent('div').parent().attr('id');
|
|
var tabLiId = tabPanelId + "-tab";
|
|
claListLen--;
|
|
$(tabLiId).parent().remove();
|
|
$(tabPanelId).remove();
|
|
if ($("#" + claListItemID)[0]){
|
|
$("#" + claListItemID)[0].remove();
|
|
};
|
|
var tabFirst = $('#tab-list a:first');
|
|
refreshTabList();
|
|
refreshClaList();
|
|
refreshSortables();
|
|
tabFirst.tab('show');
|
|
});
|
|
|
|
// Evento: click sull'icona rimuovi clausola dentro la lista delle clausole
|
|
$('#cla-TabContent').on('click', '.removeClaInList', function() {
|
|
var claListItemID = $(this).closest('li').attr('id');
|
|
var tabPanelId = "#" + claListItemID.substring(2);
|
|
var tabLiId = tabPanelId + "-tab";
|
|
claListLen--;
|
|
$(tabLiId).parent().remove();
|
|
$(tabPanelId).remove();
|
|
$("#" + claListItemID)[0].remove();
|
|
var tabFirst = $('#tab-list a:first');
|
|
refreshTabList();
|
|
refreshClaList();
|
|
refreshSortables();
|
|
tabFirst.tab('show');
|
|
});
|
|
|
|
// Evento: click sull'icona rimuovi condizione dentro la lista delle clausole
|
|
$('#sortable0').on('click', '.removeCond', function() {
|
|
$(this).closest('ul').parent().remove();
|
|
condListLen--;
|
|
refreshSortables();
|
|
refreshConnectWith();
|
|
if (claListLen == 0 && condListLen == 0) {
|
|
$('#sortable0').html(emptyClaList);
|
|
}
|
|
});
|
|
|
|
// Evento: click sull'icona modifica dentro la lista delle clausole
|
|
$('#cla-TabContent').on('click', '.editCla', function() {
|
|
var claListItemID = $(this).closest('li').attr('id');
|
|
var tabLiId = "#" + claListItemID.substring(2) + "-tab";
|
|
var tabTarget = $('#tab-list ' + tabLiId);
|
|
tabTarget.tab('show');
|
|
});
|
|
|
|
// Evento: click sulla lista di clausole nel dropbox "Aggiungi clausola di tipo:" o "aggiungi condizione logica:"
|
|
$('.btn-group a').on('click', function() {
|
|
var addClaN = $(this).attr('id');
|
|
switch (addClaN) {
|
|
case "Grammaticale":
|
|
addGramCla(1);
|
|
$('#cla' + tabID + '-tab').tab('show');
|
|
break;
|
|
case "Sintattico":
|
|
addSyntCla(1);
|
|
$('#cla' + tabID + '-tab').tab('show');
|
|
break;
|
|
case "Metafore":
|
|
addMetaCla(0);
|
|
$('#cla' + tabID + '-tab').tab('show');
|
|
break;
|
|
case "Dialoghi":
|
|
addDialCla(0);
|
|
$('#cla' + tabID + '-tab').tab('show');
|
|
break;
|
|
case "Struttura":
|
|
addStruCla(0);
|
|
$('#cla' + tabID + '-tab').tab('show');
|
|
break;
|
|
case "andCond":
|
|
addLogicCond("AND","#sortable0");
|
|
refreshClaList();
|
|
$('#cla0-tab').tab('show');
|
|
break;
|
|
case "orCond":
|
|
addLogicCond("OR","#sortable0");
|
|
refreshClaList();
|
|
$('#cla0-tab').tab('show');
|
|
break;
|
|
default:
|
|
};
|
|
});
|
|
|
|
// Evento: clausola spostata nella lista principale
|
|
$('#sortable0').sortable({
|
|
opacity: 0.6,
|
|
cursor: 'move',
|
|
update: function() {
|
|
refreshSortables();
|
|
}
|
|
});
|
|
|
|
// Evento: click sul checkbox di attivazione delle clausole
|
|
$('#cla-TabContent').on('click', '.claAct', function() {
|
|
var claListItemID = $(this).closest('li').attr('id');
|
|
var tabPanelId = "#" + claListItemID.substring(2);
|
|
if ($(this).prop('checked')) {
|
|
$(tabPanelId).attr("data-claActive", 1);
|
|
$(this).closest('li').find('.clatext').fadeTo( "slow", 1 );
|
|
} else {
|
|
$(tabPanelId).attr("data-claActive", 0);
|
|
$(this).closest('li').find('.clatext').fadeTo( "slow", 0.6 );
|
|
}
|
|
refreshSortables();
|
|
});
|
|
|
|
// Evento: click sull'icona di refresh dei radio button
|
|
$('#cla-TabContent').on('click', '.radioReset', function() {
|
|
fSet = $(this).siblings('fieldset');
|
|
if (fSet.find(":checked").length) {
|
|
radioChecked = fSet.find(":checked")[0];
|
|
radioChecked.checked = false;
|
|
};
|
|
});
|
|
|
|
// Evento: click sull'icona di save local
|
|
$('#cla-TabContent').on('click', 'ion-icon[name="save-outline"]', function() {
|
|
var fileA = document.createElement("a");
|
|
fileA.href = window.URL.createObjectURL(new Blob([JSON.stringify(queryJson)], {type: "text/plain;charset=utf-8"}));
|
|
fileA.download = "LiDaQuery.txt";
|
|
fileA.click();
|
|
fileA.remove();
|
|
});
|
|
|
|
// Evento: click sull'icona di load local
|
|
$('#cla-TabContent').on('click', 'ion-icon[name="folder-open-outline"]', function() {
|
|
$('#apriFile').click();
|
|
});
|
|
|
|
$("#apriFile").on('change', function() {
|
|
var file = $(this).prop('files')[0];
|
|
var reader = new FileReader();
|
|
reader.onload = function(data){
|
|
queryJson = JSON.parse(data.target.result)
|
|
//$("#sparqlquery").val(data.target.result);
|
|
makeUpGui(queryJson);
|
|
};
|
|
if (file) {reader.readAsText(file);}
|
|
});
|
|
|
|
// Evento: SCELTA CATEGORIA GRAMMATICALE
|
|
$('#cla-TabContent').on('change', 'select.catgram', function(e) {
|
|
e.preventDefault();
|
|
var tabPaneId = ($(this).closest('.tab-pane').attr("id"));
|
|
var selectedValue = $(this).val();
|
|
addCatgramSubcla(tabPaneId,selectedValue);
|
|
});
|
|
|
|
// Evento: Submit form
|
|
$("form").submit(function(e){
|
|
e.preventDefault();
|
|
var qText = $("form #queryText")[0].value;
|
|
if (qText == "" && logicExprString == "") {
|
|
alert("Inserire un termine di ricerca od una clausola attiva!");
|
|
return false;
|
|
}
|
|
const sparqlGenerator = sparqljs.Generator;
|
|
jsonQuery = buildSQ(queryJson);
|
|
queryFields = [];
|
|
for (var i in jsonQuery.variables) {
|
|
queryFields.push(jsonQuery.variables[i].variable.value);
|
|
}
|
|
execQuery = new sparqlGenerator().stringify(jsonQuery);
|
|
executeQuery();
|
|
return false;
|
|
});
|
|
|
|
// Evento: click sul checkbox di Ricerca avanzata
|
|
$('#cla-TabContent').on('click', '#advanSW', function() {
|
|
if ($(this).prop('checked')) {
|
|
$("#cla-Advanced").attr('style', "display: block;");
|
|
queryJson.QueryAvanzata = "1";
|
|
} else {
|
|
$("#cla-Advanced").attr('style', "display: none;");
|
|
queryJson.QueryAvanzata = "0";
|
|
//resetAdvGui();
|
|
}
|
|
});
|
|
|
|
// Evento: click sul checkbox di Definisci contesto
|
|
$('#cla-TabContent').on('click', '#contextSW', function() {
|
|
if ($(this).prop('checked')) {
|
|
$("#contextTableDiv0").attr('style', "display: flex;");
|
|
//queryJson.QueryAvanzata = "1";
|
|
} else {
|
|
$("#contextTableDiv0").attr('style', "display: none;");
|
|
//queryJson.QueryAvanzata = "0";
|
|
}
|
|
});
|
|
|
|
|
|
// Variabili JSON per i filtri
|
|
|
|
var verboJson = {
|
|
"filtriverbo": {
|
|
"Diatesi": ["Attivo", "Passivo"],
|
|
"Transitivita": ["Transitivo", "Intransitivo"],
|
|
"Genere": ["Femminile", "Maschile"],
|
|
"Numero": ["Singolare", "Plurale"],
|
|
"Pers": ["Impersonale"],
|
|
"Rifl": ["Riflessivo"],
|
|
"Coniugazione": ["Qualsiasi coniugazione", "Prima coniugazione", "Seconda coniugazione", "Terza coniugazione", "Essere coniugazione", "Avere coniugazione"],
|
|
"Tempi": ["Qualsiasi tempo verbale", "Indicativo presente", "Indicativo passato prossimo", "Indicativo imperfetto", "Indicativo passato remoto",
|
|
"Indicativo trapassato prossimo", "Indicativo trapassato remoto", "Indicativo futuro semplice", "Indicativo futuro anteriore", "Congiuntivo presente",
|
|
"Congiuntivo imperfetto", "Congiuntivo passato", "Congiuntivo trapassato", "Condizionale presente", "Condizionale passato", "Imperativo presente",
|
|
"Infinito presente", "Infinito passato", "Participio presente", "Participio passato", "Gerundio presente", "Gerundio passato"],
|
|
"Persona" : ["Qualsiasi persona", "1ª persona singolare", "2ª persona singolare", "3ª persona singolare", "1ª persona plurale", "2ª persona plurale", "3ª persona plurale"],
|
|
"Funzione": ["Tutte le funzioni", "Aggettivo", "Sostantivo maschile", "Sostantivo femminile"],
|
|
"Declinazione": ["Tutte le declinazioni", "Prima declinazione", "Seconda declinazione", "Terza declinazione"],
|
|
}
|
|
}
|
|
|
|
var sostantivoJson = {
|
|
"filtrisostantivo": {
|
|
"Numero": ["Singolare", "Plurale"],
|
|
"Genere_lemma": ["Lemma femminile", "Lemma maschile"],
|
|
"Genere_forma": ["Forma femminile", "Forma maschile"],
|
|
"riflpers": ["In locuzione"],
|
|
"Declinazione_sostantivo": ["Tutte le declinazioni", "Prima declinazione", "Seconda declinazione", "Terza declinazione"],
|
|
}
|
|
}
|
|
|
|
var aggettivoJson = {
|
|
"filtriaggettivo": {
|
|
"Classe": ["1ª", "2ª"],
|
|
"Genere": ["Femminile", "Maschile"],
|
|
"Numero": ["Singolare", "Plurale"],
|
|
"Con_oggetto_indiretto": ["Con oggetto indiretto"],
|
|
"Tipo_aggettivo": ["Qualsiasi tipo aggettivo", "Qualificativo", "Indefinito", "Interrogativo", "Esclamativo", "Numerale", "Dimostrativo", "Relativo", "Possessivo", "In locuzione"],
|
|
"Grado": ["Qualsiasi grado", "Comparativo di maggioranza", "Comparativo di minoranza", "Comparativo di uguaglianza", "Superlativo relativo", "Superlativo assoluto"],
|
|
"Tipo_di_Complemento": ["Qualsiasi tipo di Complemento", "Introdotto da A", "Introdotto da CON", "Introdotto da CONTRO", "Introdotto da DA", "Introdotto da DI", "Introdotto da IN",
|
|
"Introdotto da PER", "Introdotto da SU", "Introdotto da TRA", "Introdotto da VERSO", "Introdotto da SOPRA",
|
|
"Introdotto da SOTTO", "Introdotto da DINANZI", "Introdotto da prep.", "Oggetto ind.", "Ogg. indi. + compl. con DI", "Ogg. ind. pronom."],
|
|
"Tipo_di_frase": ["Qualsiasi tipo di frase", "Con infinito retto da A", "Con infinito retto da DA", "Con infinito retto da DI", "Con infinito retto da PER",
|
|
"Con infinito retto da SE", "Con subordinata all'indic.", "Con subordinata al cong.", "In locuzione imp.+infinito",
|
|
"In locuzione imp.+che+indic.", "In locuzione imp.+che+cong.", "In locuzione imp.+se+indic.", "In locuzione imp.+se+cong.",
|
|
"In locuzione imp.+come+indic.", "In locuzione imp.+quando+indic.", "In locuzione imp.+perché+cong.", "In locuzione imp.+a+infinito"]
|
|
}
|
|
}
|
|
|
|
var pronomeJson = {
|
|
"filtripronome": {
|
|
"Genere": ["Femminile", "Maschile"],
|
|
"Numero": ["Singolare", "Plurale"],
|
|
"Classe_Persona": ["Qualsiasi Classe Persona", "1ª", "2ª", "3ª"],
|
|
"Tipo": ["Qualsiasi tipo", "Personale", "Riflessivo", "Interrogativo", "Esclamativo", "Dimostrativo", "Relativo", "Possessivo"],
|
|
"Forma_Personali_Riflessivi": ["Qualsiasi forma (Personali-Riflessivi)", "Libero", "Libero in Composizione", "Proclitico", "Enclitico"],
|
|
"Funzione_Personali": ["Qualsiasi funzione (Personali)", "Libero - soggetto", "Libero - soggetto impersonale", "Libero - complemento", "Libero - rafforzativo",
|
|
"Clitico - accusativo", "Clitico - dativo", "Clitico - partitivo"],
|
|
"Tipo_Riflessivi": ["Qualsiasi tipo (Riflessivi)", "Proprio", "Lessicalizzato", "Impersonale", "Passivo", "Reciproco"]
|
|
}
|
|
}
|
|
|
|
var articoloJson = {
|
|
"filtriarticolo": {
|
|
"Genere": ["Femminile", "Maschile"],
|
|
"Numero": ["Singolare", "Plurale"],
|
|
"Tipo": ["Determinativo", "Indeterminativo"]
|
|
}
|
|
}
|
|
|
|
var avverbioJson = {
|
|
"filtriavverbio": {
|
|
"Tipo": ["Qualsiasi tipo", "Al comparativo di maggioranza", "Al comparativo di minoranza",
|
|
"Al superlativo assoluto", "Al superlativo relativo",
|
|
"In Locuzione", "In Locuzione separato", "Proclitico", "Enclitico"]
|
|
}
|
|
}
|
|
|
|
var preposizioneJson = {
|
|
"filtripreposizione": {
|
|
"Tipo_I": ["Propria", "Impropria"],
|
|
"Tipo_preposizione": ["Qualsiasi tipo preposizione", "Semplice", "Articolata", "In locuzione", "In locuzione separata"],
|
|
"Sintassi": ["Qualsiasi sintassi", "Soggettiva", "Oggettiva", "Dichiarativa", "Completiva obliqua", "Finale",
|
|
"Causale", "Concessiva", "Consecutiva", "Temporale", "Modale", "Eccettuativa", "Esclusiva",
|
|
"Limitativa", "Comparativa", "Avversativa"],
|
|
"Complemento_(I)": ["Qualsiasi complemento (I)", "Di stato in luogo", "Di moto a luogo", "Di moto da luogo", "Di moto per luogo",
|
|
"Di luogo", "Predicativo del soggetto", "Predicativo dell'oggetto", "Di distanza",
|
|
"Di tempo determinato", "Di tempo continuato", "Di tempo", "Di termine", "Di vantaggio",
|
|
"Di svantaggio", "Di specificazione", "Di modo", "Di mezzo", "Di compagnia",
|
|
"Di unione", "Di allontanamento-separazione", "Di materia"],
|
|
"Complemento_(II)": ["Qualsiasi complemento (II)", "Di limitazione", "Di qualità", "Di causa", "Di agente", "Di causa efficiente", "Di fine o scopo",
|
|
"Di paragone", "Di argomento", "Distributivo", "Di sostituzione", "Di estensione", "Di rapporto",
|
|
"Di esclusione", "Di peso", "Di quantità", "Di colpa", "Di denominazione", "partitivo",
|
|
"Di abbondanza-privazione", "Di origine-provenienza", "Concessivo", "Di effetto", "Di pena",
|
|
"Simmetrico", "Indiretto esperiente", "Indiretto dativo", "Indiretto oggetto", "Indiretto possessore",
|
|
"Indiretto benefattivo"]
|
|
}
|
|
}
|
|
|
|
var congiunzioneJson = {
|
|
"filtricongiunzione": {
|
|
"Coo_sub": ["Coordinativa", "Subordinativa"],
|
|
"Tipo": ["Qualsiasi tipo", "Semplice", "Composta", "Locuzione", "Locuzione separata"],
|
|
"Coord_tipo": ["Qualsiasi coord. tipo", "Copulativa", "Disgiuntiva", "Avversativa", "Esplicativa", "Conclusiva", "Correlativa"],
|
|
"Subord_tipo": ["Qualsiasi subord. tipo", "Soggettiva", "Oggettiva", "Dichiarativa", "Completiva obliqua", "Interrogativa",
|
|
"Finali", "Causali", "Concessiva", "Consecutiva", "Temporale", "Modale",
|
|
"Eccettuativa", "Comparativa", "Condizionale", "Esclusiva", "Limitativa"]
|
|
}
|
|
}
|
|
|
|
var onomasticacitazioneJson = {
|
|
"filtrionomastica": {
|
|
"Tipo": ["Qualsiasi tipo", "Nome proprio", "Nome proprio separato", "Titolo"]
|
|
},
|
|
|
|
"filtricitazione": {
|
|
"Tipo": ["Qualsiasi tipo", "Latina", "Provenzale", "Francese", "Spagnola", "Ebraica", "Greca"]
|
|
}
|
|
}
|
|
|
|
var categorie = {
|
|
"verbovolgare": "filtriverbo",
|
|
"sostantivovolgare": "filtrisostantivo",
|
|
"pronomevolgare": "filtripronome",
|
|
"aggettivovolgare": "filtriaggettivo",
|
|
"articolovolgare": "filtriarticolo",
|
|
"avverbiovolgare": "filtriavverbio",
|
|
"preposizionevolgare": "filtripreposizione",
|
|
"congiunzionevolgare": "filtricongiunzione",
|
|
"onomasticavolgare": "filtrionomastica",
|
|
"citazionevolgare": "filtricitazione"
|
|
}
|
|
|
|
var catGrammsenzaspec = ['all', 'interiezionevolgare']
|
|
|
|
var subordinazioneJson = {
|
|
"subordinazione": {
|
|
"livello": ["Qualsiasi livello di subordinazione", "principale", "coordinata a una principale", "subordinata di I grado",
|
|
"subordinata di II grado", "subordinata di III grado", "subordinata di IV grado", "subordinata di V grado",
|
|
"subordinata di VI grado", "subordinata di VII grado", "coordinata a una subordinata di I grado",
|
|
"coordinata a una subordinata di II grado", "coordinata a una subordinata di III grado",
|
|
"coordinata a una subordinata di IV grado", "coordinata a una subordinata di V grado", "pseudo-coordinata",
|
|
"parentetica", "coordinata a una parentetica"]
|
|
}
|
|
}
|
|
|
|
var categorieJson = $.extend({}, verboJson, sostantivoJson, pronomeJson, aggettivoJson, articoloJson, avverbioJson, preposizioneJson, congiunzioneJson, onomasticacitazioneJson);
|
|
|
|
|
|
// Variabili testuali per compattezza
|
|
var iconEdit = '<ion-icon name="pencil"></ion-icon>';
|
|
var iconClose = '<ion-icon name="close-circle"></ion-icon>';
|
|
var iconCheck = '<ion-icon name="checkmark-circle"></ion-icon>';
|
|
var iconFilter = '<ion-icon name="filter-circle"></ion-icon>';
|
|
var iconReset = '<div class="text-right text-primary radioReset"><ion-icon name="refresh-circle"></ion-icon></div>';
|
|
var iconCloseCond = '<div class="p-0 mr-3 mt-1 text-right text-primary"><span class="iconClClass removeCond">' + iconClose + '</span></div>';
|
|
var iconCheckAndClose = '<div class="p-0 m-1 text-right text-primary"><span class="return2Query">' + iconCheck + '</span> <span class="removeClaInTab">' + iconClose + '</span></div>';
|
|
var emptyClaList = '<li id="H-cla0" class="list-group-item align-items-center mb-1 ui-state-default ui-state-disabled border text-muted bg-white ui-state-disabled-opacity-06 small">Nessuna clausola aggiunta.</li>';
|
|
|
|
var claLIpart1 = '<li id="'
|
|
var claLIpart2 = '" class="claLI mx-0 my-1 p-1 list-group-item align-items-center border text-muted bg-white"> \
|
|
<div class="handle container-fluid p-0"><div class="row no-gutters flex-nowrap align-items-start"><div class="col-md-auto pl-0 pr-1 align-self-start"> \
|
|
<span class="ui-icon ui-icon-arrowthick-2-n-s"></span></div><div class="col-md-auto pl-0 pr-2 flex-grow-1 align-self-start"><span class="small pl-1 clatext">';
|
|
var claLIpart3 = '</span></div><div class="col-md-auto px-0 align-self-start justify-content-end"><div class="row no-gutters justify-content-end"> \
|
|
<div class="col-auto pb-0 pl-2 pr-1 pt-1 align-top flex-grow-1 align-self-end justify-content-end text-right bd-highlight text-primary editCla">' + iconEdit + '</div> \
|
|
<div class="col-auto pb-0 pl-1 pr-2 pt-1 align-top align-self-end justify-content-end text-right bd-highlight text-primary removeClaInList">' + iconClose + '</div></div> \
|
|
<div class="row no-gutters align-items-end"><div class="col align-self-end p-0"><div class="custom-control custom-control-sm custom-switch p-0 align-self-end text-right"> \
|
|
<input type="checkbox" class="custom-control-input claAct" name="cla-attiva" aria-label="attiva" id="actiClaSW';
|
|
var claLIpart4 = '><label class="custom-control-label form-control-sm p-0" for="actiClaSW';
|
|
var claLIpart5 = '"></label></div></div></div></div></div></div></li>';
|
|
|
|
var condLIplaceholderText1 = 'Trascina qui almeno 1 clausola o condizione';
|
|
var condLIplaceholderText2 = 'Trascina qui almeno 2 clausole o condizioni';
|
|
var condLIplaceholderText1d = 'Trascina qui almeno 1 clausola o condizione, oppure attiva le clausole inattive';
|
|
var condLIplaceholderText2d = 'Trascina qui almeno 2 clausole o condizioni, oppure attiva le clausole inattive';
|
|
var condLIplaceholderPart1 = '<li id="placeholderSort';
|
|
var condLIplaceholderPart2 = '" class="mx-0 my-1 p-1 pl-3 list-group-item align-items-center border text-muted small bg-light ui-state-disabled ui-state-disabled-opacity-06">';
|
|
var condLIpart1 = '<li id="cond';
|
|
var condLIpart2and = '" class="condLIand mx-0 my-1 p-1 list-group-item align-items-center border text-muted bg-lida10"><ul id="sortable';
|
|
var condLIpart3and = '" class="handle list-group ui-sortable"><div class="row ml-1 pr-2 justify-content-between"><div class=" pb-1 small font-weight-bold text-muted">AND</div>' + iconCloseCond + '</div>' + condLIplaceholderPart1;
|
|
var condLIpart2or = '" class="condLIor mx-0 my-1 p-1 list-group-item align-items-center border text-muted bg-lida11"><ul id="sortable';
|
|
var condLIpart3or = '" class="handle list-group ui-sortable"><div class="row ml-1 pr-2 justify-content-between"><div class=" pb-1 small font-weight-bold text-muted">OR</div>' + iconCloseCond + '</div>' + condLIplaceholderPart1;
|
|
var condLIpart4 = condLIplaceholderPart2 + condLIplaceholderText2 + '</li></ul></li>';
|
|
|
|
|
|
// Variabili funzionali
|
|
var tabID = 0;
|
|
var claListLen = 0;
|
|
var condListLen = 0;
|
|
var logicExprString = ``;
|
|
var guiLogicString = ``;
|
|
var execQuery = ``;
|
|
var queryFields = []; // Contiene le intestazioni di colonna della tabella dei risultati
|
|
var contextS = [[],[],[]];
|
|
var context0 = [[],[],[]];
|
|
var canticheList = ["Inferno","Purgatorio","Paradiso"];
|
|
var queryJson = JSON.parse('{"EsprLogica":"", "LogicaGui":"", "QueryAvanzata": "0"}');
|
|
queryJson.LiDaVersion = "1.0";
|
|
queryJson.Clausola0 = JSON.parse('{"queryText": "", "lemma_forma": "lemma", "opzioni_testo": "parola", "TipoClausola": "0", "Attiva": "0"}');
|
|
|
|
const myEngine = new Comunica.QueryEngine();
|
|
const sparqlEndpoint = "https://hdnlab1.isti.cnr.it/fuseki/commediaontosintgra/query";
|
|
|
|
// Fine variabili
|
|
|
|
|
|
async function executeQuery(){
|
|
$("#loader").show();
|
|
bindingsStream = await myEngine.queryBindings(execQuery, { sources: [ { type: 'sparql', value: sparqlEndpoint }, ], });
|
|
$("#sparqlquery").val(execQuery);
|
|
$("#copiaQuery").prop("disabled", false);
|
|
var resultTablePart1 = '<table id="resultTable" class="table table-striped table-bordered"><thead><tr>';
|
|
var resultTablePart2 = '<th scope="col">#</th>';
|
|
var resultTablePart3 = '</tr></thead><tbody>';
|
|
var resultTablePart4 = '';
|
|
var resultTablePart5 = '</tbody></table>';
|
|
var resultTable = '';
|
|
var latestVerso = '';
|
|
var latestResult = '';
|
|
var rowNum = 1;
|
|
for (var i = 0; i < queryFields.length; i++) {
|
|
resultTablePart2 = resultTablePart2 + '<th scope="col">' + queryFields[i] + '</th>';
|
|
};
|
|
var resultTable = resultTablePart1 + resultTablePart2 + resultTablePart3;
|
|
$('#resultsId1').empty();
|
|
$('#resultsId1').addClass("small pb-2")
|
|
$("#risultatitesto").empty();
|
|
try {
|
|
bindingsStream.on('data', (binding) => {
|
|
//console.log(binding.toString()); // Quick way to print bindings for testing
|
|
//console.log(binding.has('sub')); // Will be true
|
|
latestVerso = binding.get('Verso').value
|
|
latestResult = rowNum + '. "' + latestVerso.replace(binding.get('Forma').value, '*' + binding.get('Forma').value + '*') + '" (' + binding.get('Cantica').value + ', ' + binding.get('Canto').value + ', Verso ' + binding.get('NumeroVerso').value + ')\n';
|
|
$("#risultatitesto").append(latestResult);
|
|
resultTablePart4 = '<tr><th scope="row" class="text-muted">' + rowNum++ + '</th>';
|
|
for (var i = 0; i < queryFields.length; i++) {
|
|
if ( binding.get(queryFields[i]) != null){
|
|
val = binding.get(queryFields[i]).value
|
|
} else {
|
|
val = "na"
|
|
}
|
|
resultTablePart4 = resultTablePart4 + '<td class="text-muted">' + val + "</td>";
|
|
};
|
|
resultTable = resultTable + resultTablePart4 + '</tr>';
|
|
$("#loader").hide();
|
|
});
|
|
bindingsStream.on('end', () => {
|
|
$("#loader").hide();
|
|
resultTable = resultTable + resultTablePart5;
|
|
$("#resultsId1").append(resultTable);
|
|
$("#copiaTesto").prop("disabled", false);
|
|
$('#resultTable').DataTable( {
|
|
colReorder: true,
|
|
language: {
|
|
url: 'dataTables.it-IT.json'
|
|
},
|
|
//dom: 'Blfrtip',
|
|
dom: "<'row'<'col-sm-12 col-md-6'l><'col-sm-6 col-md-3'f><'col-sm-6 col-md-3 text-right'B>>" + "<'row'<'col-sm-12'tr>>" + "<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
|
|
buttons: [ 'copy', 'excel', 'print' ]
|
|
});
|
|
setTimeout(function(){
|
|
buttonDiv = $("#resultsId1").find(".buttons-copy");
|
|
$('<label class="input-group-text"><ion-icon name="copy"></ion-icon></label>').insertBefore(buttonDiv);
|
|
},300);
|
|
});
|
|
}
|
|
catch(err) {
|
|
console.log(err.message);
|
|
$("#loader").hide();
|
|
};
|
|
};
|
|
|
|
// Funzione di creazione del tab delle clausole grammaticali
|
|
function addGramCla(active){
|
|
tabID++;
|
|
var clone = document.getElementById("tipogrammaticaleN").cloneNode(true);
|
|
clone.setAttribute("id","cla" + tabID);
|
|
clone.setAttribute("data-claActive",active);
|
|
clone.setAttribute("aria-labelledby","cla" + tabID + "-tab");
|
|
clone.removeAttribute("style");
|
|
$('#cla-TabContent').append(clone);
|
|
// se non cambio l'id della select react non rileva l'evento onchange:
|
|
$('#cla' + tabID + " #grammtypes").attr("id","grammtypes" + tabID);
|
|
$('#cla' + tabID + " #lemma_formaN").attr("id","lemma_forma" + tabID);
|
|
$('#cla' + tabID + " #queryTextN").attr("id","queryText" + tabID);
|
|
$('#cla' + tabID + " #opzioni_testoN").attr("id","opzioni_testo" + tabID);
|
|
claListLen++;
|
|
$('#tab-list').append($('<li class="nav-item" role="presentation"><a class="nav-link" id="cla' + tabID + '-tab" data-toggle="tab" href="#cla' + tabID + '" role="tab" aria-controls="cla' + tabID + '" aria-selected="false" data-claType="Grammaticale"><span class="small font-weight-bold text-lida9">' + iconFilter + ' ' + claListLen + '. Grammaticale</span></a></li>'));
|
|
}
|
|
|
|
// Funzione di creazione delle subclausole grammaticali basate sul valore scelto
|
|
function addCatgramSubcla(tabPaneId,selectedValue){
|
|
var dettagliBox = $("#" + tabPaneId + " .dettaglifiltri");
|
|
dettagliBox.html("");
|
|
if (Object.keys(categorie).includes(selectedValue)) {
|
|
var filtro = categorie[selectedValue]
|
|
var keys = Object.keys(categorieJson[filtro])
|
|
for (var key in keys) {
|
|
var vals = categorieJson[filtro][keys[key]]
|
|
switch (vals.length) {
|
|
case 2:
|
|
var element = $('<div />');
|
|
element.attr('class', ' d-flex flex-nowrap pr-2 py-1 mb-1 form-group form-control justify-content-between');
|
|
var rbfieldset = $('<fieldset />');
|
|
var flexdiv1 = $('<div />');
|
|
var flexdiv2 = $('<div />');
|
|
var input1 = $('<input />');
|
|
var input2 = $('<input />');
|
|
var label1 = $('<label />');
|
|
var label2 = $('<label />');
|
|
|
|
rbfieldset.attr('id', tabPaneId + keys[key].replace(/\s/g, ''));
|
|
rbfieldset.attr('class', 'custom-control-inline');
|
|
flexdiv1.attr('class', 'custom-control custom-radio custom-control-inline m-0 pb-0');
|
|
flexdiv2.attr('class', 'custom-control custom-radio custom-control-inline m-0 pb-0');
|
|
input1.attr('class', 'custom-control-input');
|
|
input2.attr('class', 'custom-control-input');
|
|
input1.attr('type', 'radio');
|
|
input2.attr('type', 'radio');
|
|
input1.attr('id', tabPaneId + vals[0].replace(/\s/g, ''));
|
|
input2.attr('id', tabPaneId + vals[1].replace(/\s/g, ''));
|
|
input1.attr('value', vals[0]);
|
|
input2.attr('value', vals[1]);
|
|
input1.attr('name', tabPaneId + keys[key]);
|
|
input2.attr('name', tabPaneId + keys[key]);
|
|
label1.attr('class', 'custom-control-label form-control-sm custom-control-inline m-0 pl-1');
|
|
label2.attr('class', 'custom-control-label form-control-sm custom-control-inline m-0 pl-1');
|
|
label1.attr('for', tabPaneId + vals[0].replace(/\s/g, ''));
|
|
label2.attr('for', tabPaneId + vals[1].replace(/\s/g, ''));
|
|
label1.append(vals[0]);
|
|
label2.append(vals[1]);
|
|
|
|
input1.appendTo(flexdiv1);
|
|
input2.appendTo(flexdiv2);
|
|
label1.appendTo(flexdiv1);
|
|
label2.appendTo(flexdiv2);
|
|
flexdiv1.appendTo(rbfieldset);
|
|
flexdiv2.appendTo(rbfieldset);
|
|
rbfieldset.appendTo(element);
|
|
var iconR = $(iconReset);
|
|
iconR.appendTo(element);
|
|
//element.attr('style', 'display:block');
|
|
element.appendTo(dettagliBox);
|
|
break;
|
|
case 1:
|
|
var element = $('<div />');
|
|
element.attr('class', ' d-flex flex-nowrap pr-2 py-1 mb-1 form-group form-control');
|
|
var rbfieldset = $('<fieldset />');
|
|
flexdiv1 = $('<div />');
|
|
input1 = $('<input />');
|
|
label1 = $('<label />');
|
|
rbfieldset.attr('id', tabPaneId + keys[key].replace(/\s/g, ''));
|
|
rbfieldset.attr('class', 'custom-control-inline');
|
|
flexdiv1.attr('class', 'custom-control custom-checkbox custom-control-inline');
|
|
input1.attr('class', 'custom-control-input');
|
|
input1.attr('type', 'checkbox');
|
|
input1.attr('id', tabPaneId + vals[0].replace(/\s/g, ''));
|
|
input1.attr('value', vals[0]);
|
|
input1.attr('name', keys[key]);
|
|
label1.attr('class', 'custom-control-label form-control-sm custom-control-inline m-0 pl-1');
|
|
label1.attr('for', tabPaneId + vals[0].replace(/\s/g, ''));
|
|
label1.append(vals[0]);
|
|
|
|
input1.appendTo(flexdiv1);
|
|
label1.appendTo(flexdiv1);
|
|
flexdiv1.appendTo(rbfieldset);
|
|
rbfieldset.appendTo(element);
|
|
//element.attr('style', 'display:block');
|
|
element.appendTo(dettagliBox);
|
|
break;
|
|
default:
|
|
var element = $('<div />');
|
|
element.attr('class', ' form-group px-0 pb-1 m-0');
|
|
var select = $('<select class="form-control custom-select-sm"/>');
|
|
select.attr('id', tabPaneId + keys[key].replace(/\s/g, ''));
|
|
select.attr('title', keys[key]);
|
|
select.attr('name', keys[key]);
|
|
for (var val in vals) {
|
|
var seloption = $('<option />');
|
|
seloption.attr('value', vals[val]);
|
|
seloption.append(vals[val]);
|
|
seloption.appendTo(select);
|
|
}
|
|
select.appendTo(element);
|
|
//element.attr('style', 'display:block');
|
|
element.appendTo(dettagliBox);
|
|
}
|
|
}
|
|
}
|
|
if (element) {
|
|
element.attr('style', "display: block;");
|
|
element.appendTo(dettagliBox);
|
|
};
|
|
}
|
|
|
|
// Funzione di creazione del tab delle clausole sintattiche
|
|
function addSyntCla(active){
|
|
tabID++;
|
|
var clone = document.getElementById("tiposintatticoN").cloneNode(true);
|
|
clone.setAttribute("id","cla" + tabID);
|
|
clone.setAttribute("data-claActive",active);
|
|
clone.setAttribute("aria-labelledby","cla" + tabID + "-tab");
|
|
clone.removeAttribute("style");
|
|
$('#cla-TabContent').append(clone);
|
|
$('#cla' + tabID + " #lemma_formaN").attr("id","lemma_forma" + tabID);
|
|
$('#cla' + tabID + " #queryTextN").attr("id","queryText" + tabID);
|
|
$('#cla' + tabID + " #opzioni_testoN").attr("id","opzioni_testo" + tabID);
|
|
var l_f = $("form #lemma_forma")[0].options[$("form #lemma_forma")[0].selectedIndex].value;
|
|
var qText = $("form #queryText")[0].value;
|
|
claListLen++;
|
|
$('#tab-list').append($('<li class="nav-item" role="presentation"><a class="nav-link" id="cla' + tabID + '-tab" data-toggle="tab" href="#cla' + tabID + '" role="tab" aria-controls="cla' + tabID + '" aria-selected="false" data-claType="Sintattico"><span class="small font-weight-bold text-lida3">' + iconFilter + ' ' + claListLen + '. Sintattico</span></a></li>'));
|
|
}
|
|
|
|
// Funzione di creazione del tab delle clausole metafore
|
|
function addMetaCla(active){
|
|
tabID++;
|
|
$('#cla-TabContent').append($('<div class="tab-pane fade p-2 bg-white" data-claActive="' + active + '" id="cla' + tabID + '" role="tabpanel" aria-labelledby="cla' + tabID + '-tab" data-claType="Metafore">' + iconCheckAndClose + '<div class="text-muted form-group px-1 pb-1">Clausola <span class="text-lida5">Metafore</span> - non ancora implementata</div></div>'));
|
|
claListLen++;
|
|
$('#tab-list').append($('<li class="nav-item" role="presentation"><a class="nav-link" id="cla' + tabID + '-tab" data-toggle="tab" href="#cla' + tabID + '" role="tab" aria-controls="cla' + tabID + '" aria-selected="false" data-claType="Metafore"><span class="small font-weight-bold text-lida5">' + iconFilter + ' ' + claListLen + '. Metafore</span></a></li>'));
|
|
}
|
|
|
|
// Funzione di creazione del tab delle clausole dialoghi
|
|
function addDialCla(active){
|
|
tabID++;
|
|
$('#cla-TabContent').append($('<div class="tab-pane fade p-2 bg-white" data-claActive="' + active + '" id="cla' + tabID + '" role="tabpanel" aria-labelledby="cla' + tabID + '-tab" data-claType="Dialoghi">' + iconCheckAndClose + '<div class="text-muted form-group px-1 pb-1">Clausola <span class="text-lida4">Dialoghi</span> - non ancora implementata</div></div>'));
|
|
claListLen++;
|
|
$('#tab-list').append($('<li class="nav-item" role="presentation"><a class="nav-link" id="cla' + tabID + '-tab" data-toggle="tab" href="#cla' + tabID + '" role="tab" aria-controls="cla' + tabID + '" aria-selected="false" data-claType="Dialoghi"><span class="small font-weight-bold text-lida4">' + iconFilter + ' ' + claListLen + '. Dialoghi</span></a></li>'));
|
|
}
|
|
|
|
// Funzione di creazione del tab delle clausole struttura
|
|
function addStruCla(active){
|
|
tabID++;
|
|
$('#cla-TabContent').append($('<div class="tab-pane fade p-2 bg-white" data-claActive="' + active + '" id="cla' + tabID + '" role="tabpanel" aria-labelledby="cla' + tabID + '-tab" data-claType="Struttura">' + iconCheckAndClose + '<div class="text-muted form-group px-1 pb-1">Clausola <span class="text-lida5">Struttura testo</span> - non ancora implementata</div></div>'));
|
|
claListLen++;
|
|
$('#tab-list').append($('<li class="nav-item" role="presentation"><a class="nav-link" id="cla' + tabID + '-tab" data-toggle="tab" href="#cla' + tabID + '" role="tab" aria-controls="cla' + tabID + '" aria-selected="false" data-claType="Struttura"><span class="small font-weight-bold text-lida5">' + iconFilter + ' ' + claListLen + '. Struttura</span></a></li>'));
|
|
}
|
|
|
|
// Funzione di creazione del LI delle condizioni logiche
|
|
function addLogicCond(condtype,sortableNum){
|
|
condListLen++;
|
|
if (condtype == "AND") {
|
|
var LItext = condLIpart1 + condListLen + condLIpart2and + condListLen + condLIpart3and + condListLen + condLIpart4;
|
|
} else {
|
|
var LItext = condLIpart1 + condListLen + condLIpart2or + condListLen + condLIpart3or + condListLen + condLIpart4;
|
|
}
|
|
if ($("#H-cla0")[0]) {
|
|
$("#H-cla0")[0].remove();
|
|
};
|
|
$(sortableNum).append(LItext);
|
|
$("#sortable" + condListLen).sortable();
|
|
$("#sortable" + condListLen).sortable( "option", "appendTo", document.body );
|
|
$("#sortable" + condListLen).sortable({
|
|
items: "> li",
|
|
handle: ".handle",
|
|
opacity: 0.6,
|
|
cursor: 'move',
|
|
update: function() {refreshSortables();}
|
|
});
|
|
refreshConnectWith();
|
|
}
|
|
|
|
// Funzione di refresh della lista delle tab delle clausole
|
|
function refreshTabList(){
|
|
var tabs=$("#tab-list li:not(:first)");
|
|
var len=0;
|
|
var textClassType = "";
|
|
$(tabs).each(function(){
|
|
len++;
|
|
var claType = $(this).find('a').attr("data-claType");
|
|
switch (claType) {
|
|
case "Grammaticale":
|
|
textClassType = "text-lida9";
|
|
break;
|
|
case "Sintattico":
|
|
textClassType = "text-lida3";
|
|
break;
|
|
case "Metafore":
|
|
textClassType = "text-lida5";
|
|
break;
|
|
case "Dialoghi":
|
|
textClassType = "text-lida4";
|
|
break;
|
|
case "Struttura":
|
|
textClassType = "text-lida5";
|
|
break;
|
|
default:
|
|
textClassType = "text-lida8";
|
|
};
|
|
$(this).find('a').html('<span class="small font-weight-bold ' + textClassType + '" >' + iconFilter + ' ' + len + ': ' + claType + ' </span>');
|
|
$(this).find('a').attr("data-claType", claType)
|
|
});
|
|
}
|
|
|
|
// Funzione di refresh della lista clausole nella tab principale e del json della query
|
|
function refreshClaList(){
|
|
var l_f = $("form #lemma_forma")[0].options[$("form #lemma_forma")[0].selectedIndex].value;
|
|
var qText = $("form #queryText")[0].value;
|
|
var optText = $("form #opzioni_testo")[0].value;
|
|
if (qText == "") { //disattivo clausola 0 se il testo e' vuoto
|
|
var claActive = 0
|
|
} else {
|
|
var claActive = 1
|
|
};
|
|
queryJson.Clausola0 = JSON.parse('{"queryText": "' + qText + '", "lemma_forma": "' + l_f + '", "opzioni_testo": "' + optText + '", "TipoClausola": "0", "Attiva": "' + claActive + '"}');
|
|
var tabsContent=$("#cla-TabContent").find(".tab-pane:not(:first)");
|
|
var len=0;
|
|
if ($(tabsContent).length) {
|
|
if ($("#H-cla0")[0]) {
|
|
$("#H-cla0")[0].remove();
|
|
};
|
|
$(tabsContent).each(function(){
|
|
len++;
|
|
var claId = $(this).attr('id');
|
|
createClaListItem(len, claId, "#sortable0");
|
|
});
|
|
if (queryJson["Clausola" + (len + 1)]) //se vengo dalla rimozione di una clausola
|
|
delete queryJson["Clausola" + (len + 1)];
|
|
} else {
|
|
if (claListLen == 0 && condListLen == 0) {
|
|
$('#sortable0').html(emptyClaList);
|
|
queryJson.EsprLogica = "";
|
|
queryJson.LogicaGui = "";
|
|
}
|
|
tabID = 0;
|
|
};
|
|
console.log(queryJson);
|
|
}
|
|
|
|
// Funzione di creazione del LI nella lista delle clausole nel tab principale, aggiunta della clausola nel JSON
|
|
function createClaListItem(len, claId, sortableNum){
|
|
var claText = '';
|
|
var termText = '';
|
|
var checkInsert = '"';
|
|
var claListItemID = "H-" + claId;
|
|
var Id = claId.substr(3);
|
|
var claType = $("#" + claId).attr('data-claType');
|
|
var claActive = $("#" + claId).attr('data-claActive');
|
|
if (claActive > 0) {
|
|
checkInsert = '" checked="checked"';
|
|
};
|
|
var l_f = $("form #lemma_forma" + Id)[0].options[$("form #lemma_forma" + Id)[0].selectedIndex].value;
|
|
var l_f_t = $("form #lemma_forma" + Id)[0].options[$("form #lemma_forma" + Id)[0].selectedIndex].text;
|
|
var qText = $("form #queryText" + Id)[0].value;
|
|
var optText = $("form #opzioni_testo" + Id)[0].value;
|
|
var optText_t = $("form #opzioni_testo" + Id)[0].options[$("form #opzioni_testo" + Id)[0].selectedIndex].text;
|
|
if (qText != "") {
|
|
termText = l_f_t + ' <span class="text-dark font-weight-bold">' + qText + '</span> ' + optText_t + '.<br>';
|
|
};
|
|
var jsonTextToParse = '{"queryText": "' + qText + '", "lemma_forma": "' + l_f + '", "opzioni_testo": "' + optText + '", "TipoClausola": "' + claType + '", "Attiva": "' + claActive + '"';
|
|
switch (claType) {
|
|
case "Grammaticale":
|
|
var gramSelect = $("#" + claId).find(".catgram");
|
|
//claText = '<span class="small">' + len + ". Categoria grammaticale: " + gramSelect[0].options[gramSelect[0].selectedIndex].text + '<br>';
|
|
claText = len + ". " + termText + "Categoria grammaticale: " + gramSelect[0].options[gramSelect[0].selectedIndex].text + ';<br>';
|
|
jsonTextToParse = jsonTextToParse + ', "' + gramSelect.attr('name') + '": "' + gramSelect[0].options[gramSelect[0].selectedIndex].value + '"';
|
|
var claSubParList = $("#" + claId).children(".dettaglifiltri").find("select, fieldset");
|
|
claSubParList.each(function(){
|
|
var claSubParType = $(this)[0].type;
|
|
if (claSubParType == "fieldset" && $(this).find(":checked").length) {
|
|
var claSubParName = $(this).find(":checked")[0].name;
|
|
if (claSubParName.startsWith(claId)) {
|
|
claSubParName = claSubParName.replace(claId,'');
|
|
}
|
|
claText = claText + $(this).find("[for='" + $(this).find(":checked")[0].id + "']")[0].innerText + "; ";
|
|
jsonTextToParse = jsonTextToParse + ', "' + claSubParName + '": "' + $(this).find(":checked")[0].value + '"';
|
|
};
|
|
if (claSubParType == "select-one" && $(this)[0].selectedIndex != 0) {
|
|
claText = claText + $(this)[0].options[$(this)[0].selectedIndex].text + "; ";
|
|
jsonTextToParse = jsonTextToParse + ', "' + $(this)[0].name + '": "' + $(this)[0].options[$(this)[0].selectedIndex].value + '"';
|
|
};
|
|
});
|
|
break;
|
|
case "Sintattico":
|
|
var syntSelect = $("#" + claId).find("#synttypes");
|
|
var funcSelect = $("#" + claId).find("#syntfunc");
|
|
//claText = '<span class="small mx-1">' + len + ". Tipo sintattico: " + syntSelect[0].options[syntSelect[0].selectedIndex].text + ';<br>Livello di subordinazione: ' + funcSelect[0].options[funcSelect[0].selectedIndex].text;
|
|
claText = len + ". " + termText + "Tipo sintattico: " + syntSelect[0].options[syntSelect[0].selectedIndex].text + ';<div class="col-md-12"></div>Livello di subordinazione: ' + funcSelect[0].options[funcSelect[0].selectedIndex].text;
|
|
jsonTextToParse = jsonTextToParse + ', "' + syntSelect.attr('name') + '": "' + syntSelect[0].options[syntSelect[0].selectedIndex].value + '", "' + funcSelect.attr('name') + '": "' + funcSelect[0].options[funcSelect[0].selectedIndex].value + '"';
|
|
break;
|
|
default:
|
|
claText = len + ". " + $("#" + claId).text();
|
|
checkInsert = '" disabled';
|
|
};
|
|
var LItext = claLIpart1 + claListItemID + claLIpart2 + claText + claLIpart3 + len + checkInsert + claLIpart4 + len + claLIpart5;
|
|
if ($("#" + claListItemID)[0]) {
|
|
$("#" + claListItemID).replaceWith(LItext);
|
|
} else {
|
|
$(sortableNum).append(LItext);
|
|
};
|
|
queryJson["Clausola" + len] = JSON.parse(jsonTextToParse + '}');
|
|
};
|
|
|
|
// Funzione di refresh dei placeholders e attivazione/disattivazione bottoni nelle liste sortable
|
|
function refreshSortables(){
|
|
$("#sortable0").children(".claLI").each(function() {
|
|
if ($(this).find("input")[0].checked){
|
|
$(this).find('.clatext').css({ opacity: 1 });
|
|
};
|
|
if ($(this).find("input")[0].checked == false){
|
|
$(this).find('.clatext').css({ opacity: 0.6 });
|
|
};
|
|
});
|
|
$(".ui-sortable:not(:first)").each(function() {
|
|
var sortableID = $(this)[0].id;
|
|
var placeholderID = "#placeholderSort" + sortableID.slice(-1);
|
|
var iconSpan = $(this).find(".iconClClass")[0];
|
|
var iconDiv = $(iconSpan).parent()[0];
|
|
var activeUL = $(this).children("li").children("ul").length;
|
|
var activeLI = 0;
|
|
var inactiveLI = 0;
|
|
var condLIplaceholder = "";
|
|
$(this).children("li .claLI").each(function() {
|
|
if ($(this).find("input")[0].checked){
|
|
activeLI++;
|
|
$(this).find('.clatext').css({ opacity: 1 });
|
|
};
|
|
if ($(this).find("input")[0].checked == false){
|
|
inactiveLI++;
|
|
$(this).find('.clatext').css({ opacity: 0.6 });
|
|
};
|
|
});
|
|
switch (activeLI + activeUL) {
|
|
case 0:
|
|
if ($(placeholderID).length) {
|
|
if (inactiveLI > 0){
|
|
$(placeholderID).text(condLIplaceholderText2d);
|
|
} else {
|
|
$(placeholderID).text(condLIplaceholderText2);
|
|
};
|
|
} else {
|
|
if (inactiveLI > 0){
|
|
condLIplaceholder = condLIplaceholderPart1 + sortableID.slice(-1) + condLIplaceholderPart2 + condLIplaceholderText2d + '</li>';
|
|
} else {
|
|
condLIplaceholder = condLIplaceholderPart1 + sortableID.slice(-1) + condLIplaceholderPart2 + condLIplaceholderText2 + '</li>';
|
|
}
|
|
$("#" + sortableID).append(condLIplaceholder);
|
|
};
|
|
if (inactiveLI == 0){
|
|
$(iconSpan).attr("class","iconClClass removeCond");
|
|
$(iconDiv).attr("class","p-0 mr-3 mt-1 text-right text-primary");
|
|
};
|
|
break;
|
|
case 1:
|
|
if ($(placeholderID).length) {
|
|
if (inactiveLI > 0){
|
|
$(placeholderID).text(condLIplaceholderText1d);
|
|
} else {
|
|
$(placeholderID).text(condLIplaceholderText1);
|
|
};
|
|
} else {
|
|
if (inactiveLI > 0){
|
|
condLIplaceholder = condLIplaceholderPart1 + sortableID.slice(-1) + condLIplaceholderPart2 + condLIplaceholderText1d + '</li>';
|
|
} else {
|
|
condLIplaceholder = condLIplaceholderPart1 + sortableID.slice(-1) + condLIplaceholderPart2 + condLIplaceholderText1 + '</li>';
|
|
}
|
|
$("#" + sortableID).append(condLIplaceholder);
|
|
};
|
|
$(iconSpan).attr("class","iconClClass NOremoveCond");
|
|
$(iconDiv).attr("class","p-0 mr-3 mt-1 text-right text-muted");
|
|
break;
|
|
case 2:
|
|
if ($(placeholderID).length) {
|
|
$(placeholderID).remove();
|
|
};
|
|
break;
|
|
default:
|
|
if ($(placeholderID).length) {
|
|
$(placeholderID).remove();
|
|
};
|
|
};
|
|
});
|
|
logicExprString = parseCond("#sortable0", "AND", 0);
|
|
guiLogicString = parseCond("#sortable0", "AND", 1);
|
|
//$("#sparqlquery").val(logicExprString);
|
|
queryJson.EsprLogica = logicExprString.split(' ');
|
|
queryJson.LogicaGui = guiLogicString.split(' ');
|
|
};
|
|
|
|
// Funzione di refresh dei collegamenti tra elementi sortable
|
|
function refreshConnectWith(){
|
|
for (var i=0; i <= condListLen; i++) {
|
|
var cw = "";
|
|
for (var j=0; j <= condListLen; j++) {
|
|
if (i != j) {
|
|
cw = cw + "#sortable" + j + ", ";
|
|
};
|
|
$( "#sortable" + i ).sortable( "option", "connectWith", cw.slice(0, -2) );
|
|
};
|
|
};
|
|
};
|
|
|
|
// Funzione di parsing delle clausole e delle condizioni logiche
|
|
function parseCond(sortableList, condType, forGui){
|
|
var condText = "";
|
|
var items = $(sortableList).children("li");
|
|
var itemsText = [];
|
|
$(items).each(function() {
|
|
if ($(this).hasClass("condLIand")) {
|
|
var andID = "#" + $(this).children("ul").attr("id");
|
|
var andText = parseCond(andID, "AND", forGui);
|
|
if (andText.length){
|
|
itemsText.push(andText);
|
|
};
|
|
};
|
|
if ($(this).hasClass("condLIor")) {
|
|
var orID = "#" + $(this).children("ul").attr("id");
|
|
var orText = parseCond(orID, "OR", forGui);
|
|
if (orText.length){
|
|
itemsText.push(orText);
|
|
};
|
|
};
|
|
if ($(this).hasClass("claLI")) {
|
|
var claText = $(this).find(".clatext").text();
|
|
var claNum = "Clausola" + claText.substr(0,claText.indexOf('.'));
|
|
if (forGui || ($(this).find("input")[0].checked == true)){
|
|
itemsText.push(claNum);
|
|
};
|
|
};
|
|
});
|
|
var len = itemsText.length;
|
|
switch (len) {
|
|
case 0:
|
|
break;
|
|
case 1:
|
|
if (forGui) {
|
|
condText = "( " + condType + " " + itemsText[0] + " )";
|
|
} else {
|
|
condText += itemsText[0];
|
|
}
|
|
break;
|
|
default:
|
|
condText = "( " + condType + " ";
|
|
for (let i = 0; i < len; i++) {
|
|
condText += itemsText[i] + " ";
|
|
}
|
|
condText += ")";
|
|
};
|
|
return condText;
|
|
};
|
|
|
|
$.fn.copy2clipboard = function() {
|
|
$('div[id^="msgCopiati"]').remove();
|
|
this.select();
|
|
$(this).focus();
|
|
document.execCommand("copy");
|
|
document.getSelection().removeAllRanges();
|
|
$(this).after('<div class="mt-2 text-lida3" id="msgCopiati">Copiati nella clipboard</div>');
|
|
};
|
|
|
|
function makeUpGui(queryJson) {
|
|
//$("#risultatitesto").val(queryJson["LogicaGui"]);
|
|
// 1. verifica json legit --> TO DO
|
|
// -------------------
|
|
// Pulizia ricerca avanzata:
|
|
resetAdvGui();
|
|
// Imposta checkbox:
|
|
if (queryJson["QueryAvanzata"] == 1) {
|
|
$("#cla-Advanced").attr('style', "display: block;");
|
|
$("#advanSW").prop("checked", true);
|
|
} else {
|
|
$("#cla-Advanced").attr('style', "display: none;");
|
|
$("#advanSW").prop("checked", false);
|
|
};
|
|
// Rigenerazione Clausola0:
|
|
if (queryJson["Clausola0"].Attiva) {
|
|
$("#cla0 #lemma_forma").val(queryJson["Clausola0"].lemma_forma);
|
|
$("#cla0 #queryText").val(queryJson["Clausola0"].queryText);
|
|
$("#cla0 #opzioni_testo").val(queryJson["Clausola0"].opzioni_testo);
|
|
};
|
|
// Generazione lista clausole e condizioni con elementi padre:
|
|
guiLogicString = queryJson.LogicaGui;
|
|
var clau2Make = "";
|
|
var claParent = []; // array di coppie [elemento, elemento padre]
|
|
var treeLevel = []; // pila di elementi padre
|
|
var condNum = 0;
|
|
for (var i=0; i < guiLogicString.length; i++) {
|
|
switch (guiLogicString[i]) {
|
|
case "(":
|
|
break;
|
|
case ")":
|
|
treeLevel.pop();
|
|
break;
|
|
case "OR":
|
|
claParent.push([guiLogicString[i], treeLevel[treeLevel.length - 1]]);
|
|
treeLevel.push("#sortable" + ++condNum);
|
|
break;
|
|
case "AND":
|
|
if (i > 1) {
|
|
claParent.push([guiLogicString[i], treeLevel[treeLevel.length - 1]]);
|
|
treeLevel.push("#sortable" + ++condNum);
|
|
} else {
|
|
treeLevel.push("#sortable0");
|
|
};
|
|
break;
|
|
default:
|
|
claParent.push([guiLogicString[i].replace("Clausola", ""), treeLevel[treeLevel.length - 1]]);
|
|
};
|
|
};
|
|
$(claParent).each(function(){ // rigenero le clausole nei tab PRIMA, per poter POI ricostruire la lista nel tab principale
|
|
var itm = $(this)[0]
|
|
if (itm != "OR" && itm != "AND") {
|
|
clau2Make = queryJson["Clausola" + itm].TipoClausola;
|
|
active = queryJson["Clausola" + itm].Attiva
|
|
switch (clau2Make) {
|
|
case "Grammaticale":
|
|
selectedValue = queryJson["Clausola" + itm].typeGramm0;
|
|
addGramCla(active);
|
|
if (selectedValue != "all") {
|
|
$("#cla" + tabID + " .catgram").val(selectedValue);
|
|
addCatgramSubcla("cla" + tabID, selectedValue);
|
|
var ks = Object.keys(queryJson["Clausola" + itm]);
|
|
for (var j = 5; j < ks.length; j++) {
|
|
var melID = "cla" + tabID + ks[j];
|
|
var melement = document.getElementById(melID);
|
|
switch (melement.type) {
|
|
case "fieldset":
|
|
var sval = queryJson["Clausola" + itm][ks[j]]
|
|
$("#cla" + tabID + sval.replace(/\s/g, '')).attr("checked", true);
|
|
break;
|
|
case "select-one":
|
|
melement.value = ([queryJson["Clausola" + itm][ks[j]]])
|
|
break;
|
|
default:
|
|
};
|
|
};
|
|
};
|
|
break;
|
|
case "Sintattico":
|
|
addSyntCla(active);
|
|
if (queryJson["Clausola" + itm].typeSyntax0 != ".+") {
|
|
$("#cla" + tabID + " #synttypes").val(queryJson["Clausola" + itm].typeSyntax0);
|
|
}
|
|
if (queryJson["Clausola" + itm].functionSyntax != ".+") {
|
|
$("#cla" + tabID + " #syntfunc").val(queryJson["Clausola" + itm].functionSyntax);
|
|
}
|
|
break;
|
|
case "Metafore":
|
|
addMetaCla(active);
|
|
break;
|
|
case "Dialoghi":
|
|
addDialCla(active);
|
|
break;
|
|
case "Struttura":
|
|
addStruCla(active);
|
|
break;
|
|
default:
|
|
};
|
|
};
|
|
});
|
|
$(claParent).each(function(){ // rigenero le liste di clausole e condizioni logiche nel tab principale
|
|
if ($(this)[0] == "OR" || $(this)[0] == "AND") {
|
|
addLogicCond($(this)[0],$(this)[1]);
|
|
} else {
|
|
createClaListItem($(this)[0], "cla" + $(this)[0], $(this)[1]);
|
|
refreshSortables();
|
|
};
|
|
});
|
|
};
|
|
|
|
function resetAdvGui() {
|
|
var tabsContent=$("#cla-TabContent").find(".tab-pane:not(:first)");
|
|
var tabs=$("#tab-list li:not(:first)");
|
|
if ($(tabsContent).length) {
|
|
$(tabsContent).each(function(){
|
|
$(this).remove();
|
|
});
|
|
$(tabs).each(function(){
|
|
$(this).remove();
|
|
});
|
|
};
|
|
claListLen = 0;
|
|
condListLen = 0;
|
|
tabID = 0;
|
|
$('#sortable0').html(emptyClaList);
|
|
};
|
|
|
|
function parseContext(context) {
|
|
var contextStringParts = ["","",""];
|
|
var contextString = [];
|
|
var rangeHolderS = 0;
|
|
var rangeHolderE = -1;
|
|
var lastElem = "";
|
|
for (var i=0; i < 3; i++) {
|
|
for (var j=0; j <= context[i].length; j++) {
|
|
if (context[i][j] == 1) {
|
|
if (j == (rangeHolderE+1)) {
|
|
rangeHolderE++;
|
|
} else {
|
|
rangeHolderS = j;
|
|
rangeHolderE = j;
|
|
};
|
|
} else {
|
|
if (rangeHolderE > 0) {
|
|
if ( rangeHolderS == rangeHolderE) {
|
|
lastElem = (rangeHolderE+1);
|
|
} else {
|
|
lastElem = (rangeHolderS+1) + "-" + (rangeHolderE+1);
|
|
};
|
|
rangeHolderE = 0;
|
|
};
|
|
};
|
|
if (lastElem != "") {
|
|
if (contextStringParts[i] == "") {
|
|
contextStringParts[i] = " " + canticheList[i] + " [" + lastElem;
|
|
} else {
|
|
contextStringParts[i] = contextStringParts[i] + "," + lastElem;
|
|
};
|
|
lastElem = "";
|
|
};
|
|
};
|
|
rangeHolderS = 0;
|
|
rangeHolderE = 0;
|
|
if (contextStringParts[i] != "") {
|
|
contextStringParts[i] = contextStringParts[i] + "]"
|
|
contextString.push(contextStringParts[i]);
|
|
}
|
|
if (contextString.toString() != "") {
|
|
$("#contextText").html(contextString.toString());
|
|
} else {
|
|
$("#contextText").html("tutta l'opera");
|
|
}
|
|
//console.log(contextString.toString());
|
|
//return contextString.toString();
|
|
};
|
|
|
|
};
|
|
|
|
});
|
|
|
|
|