From abb74e65a03c27271a0e3edaeb19a553e8a58659 Mon Sep 17 00:00:00 2001 From: cesare Date: Fri, 31 Jan 2025 14:22:31 +0100 Subject: [PATCH 1/3] query sui riferimenti in progress --- js/browseMgr_5.0.js | 44 +++++++++++--------------------------------- js/dataMgr.js | 35 ++++++++++++++++++++++++++++++++--- js/syntgraph_5.0.js | 2 +- 3 files changed, 44 insertions(+), 37 deletions(-) diff --git a/js/browseMgr_5.0.js b/js/browseMgr_5.0.js index 56c1be6..2d2c257 100644 --- a/js/browseMgr_5.0.js +++ b/js/browseMgr_5.0.js @@ -1,9 +1,10 @@ /** * */ +import { getVersiConCitazioni, queryRiferimenti} from './dataMgr.js'; import { getJsonQuery, emptyStructCard } from './script_5.0.js'; import {resetGraphStr} from './syntgraph_5.0.js' -import { getVersiConCitazioni, queryRiferimenti} from './dataMgr.js'; + export var resetResult; export var lsentid; @@ -15,6 +16,8 @@ var vistaRiferimenti = true export var listaPeriodiRisultato; export var listaClausoleRisultato; export var numeroContesti; +export var cantoDisplayed; +const cantobadgeclass = 'badge badge-outline-warning badge-pill' const hdnNamespace = 'http://dantenetwork.it/data/commedia/' const syntitNamespace = 'https://dantenetwork.it/ontology/syntit/current/' @@ -31,7 +34,7 @@ $(document).ready(function() { } const dialogaltri = 'diaAltri' var listaClausoleRisultatoContesti = [] - const cantobadgeclass = 'badge badge-outline-warning badge-pill' + const sparqlGenerator = sparqljs.Generator; const myEngine = new Comunica.QueryEngine(); @@ -52,7 +55,7 @@ $(document).ready(function() { const openSTag = "{" const closeSTag = "}" - var cantoDisplayed = "#InfernoCanto_1"; + cantoDisplayed = "#InfernoCanto_1"; var prevCantoDisplayed = "#InfernoCanto_1"; var contextLength = 3; @@ -656,6 +659,8 @@ $(document).ready(function() { return (cantica + '_' + mcanto.split('_')[1]) } + + function loadPeriodo(idperiodo) { @@ -694,24 +699,6 @@ $(document).ready(function() { return false } - /*function loadFrase(idperiodo, funzionefrase) { - - if (!isPeriodoInCanto(idperiodo, cantoDisplayed)) - return - - $(cantoDisplayed).find(' .' + idperiodo).each(function() { - var pstp = $(this).attr('class').split(" ")[1] - - if (pstp.trim() == funzionefrase) - $(this).css('color', colorssp(mapsynttypestopalette[pstp])); - }) - - minim.contents().find(' .' + idperiodo).each(function() { - var mpstp = $(this).attr('class').split(" ")[1] - if (mpstp.trim() == funzionefrase) - $(this).css('color', colorssp(mapsynttypestopalette[mpstp])); - }) - }*/ function loadClausola(idperiodo, funzionefrase, fromn, ton) { @@ -897,6 +884,8 @@ $(document).ready(function() { if (canto.length == 1) canto = '0' + canto //commentsJson = getVersiConCitazioniJson(cantica, canto) + + var mresult =await getVersiConCitazioni(cantica, canto) commentsSQL= Object.groupBy(mresult, ({ VersoCitazione }) => VersoCitazione); @@ -1526,7 +1515,7 @@ $(document).ready(function() { else unitaRicerca = jsonQuery['unitaRicerca'] if (unitaRicerca=='riferimenti'){ - queryRiferimenti(jsonQuery.Riferimento100) + var mres=queryRiferimenti(jsonQuery.Riferimento100, cantoDisplayed) return } console.log("got json query, unita ricerca: " + unitaRicerca) @@ -1632,17 +1621,6 @@ $(document).ready(function() { - //manage sentence and clauses - - /* function showSentenceStructure(sentence) { - - sid = '.' + sentence.toString() - //console.log(sid) - $(sid).addClass('text-info font-italic') - - } - */ - function resetSentenceStructure(sentence) { $(" ." + sentence).removeClass('text-info font-italic') diff --git a/js/dataMgr.js b/js/dataMgr.js index bc5266c..fd8becd 100644 --- a/js/dataMgr.js +++ b/js/dataMgr.js @@ -1,4 +1,6 @@ import * as duckdb from 'https://cdn.jsdelivr.net/npm/@duckdb/duckdb-wasm@1.29.0/+esm'; + + //import * as arrow from 'https://cdn.skypack.dev/apache-arrow@9' @@ -6,7 +8,7 @@ var rif_commentatori=[]; var rif_autori=[]; var rif_areetematiche=[]; var rif_fonti=[]; - +const cantobadgeclassBis = 'badge badge-outline-warning badge-pill' const JSDELIVR_BUNDLES = duckdb.getJsDelivrBundles(); @@ -128,7 +130,7 @@ export async function getVersiConCitazioni(canticapar = '', cantopar = '') { return result4 } -export async function queryRiferimenti(filtro){ +export async function queryRiferimenti(filtro, cid){ if(filtro==null){ return } @@ -148,7 +150,11 @@ export async function queryRiferimenti(filtro){ await tconn.close(); var resxcantica= Object.groupBy(result4, ({ Cantica }) => Cantica); + + + var numcid=cid.split('_')[1] for (var cantica in resxcantica){ + var $nctags = $(' .navig-canto') console.log(resxcantica[cantica].length) var i=1; if (cantica=='Purgatorio') @@ -160,9 +166,32 @@ export async function queryRiferimenti(filtro){ spanbadgecantica.append(resxcantica[cantica].length) spanbadgecantica.appendTo($('#cantica' + i + '-badge')) console.log(spanbadgecantica) + var tmp=resxcantica[cantica] + var resxcanto= Object.groupBy(tmp, ({ Canto }) => Canto); + for (var canto in resxcanto){ + var tmpv=resxcanto[canto] + var spanbadge = $(''); + spanbadge.attr('class', cantobadgeclassBis); + spanbadge.append(resxcanto[canto].length) + if (canto.startsWith('0')){ + canto= canto.replace('0', '') + } + spanbadge.appendTo($nctags.filter('[name="' + cantica + 'Canto ' + canto + '"]')) + if (cid.includes(cantica) && numcid==canto){ + + + for (const tmpvi of tmpv){ + let myveid='#'+cantica+'_Canto_'+canto+'_'+tmpvi.Verso.split('-')[0] + console.log(myveid) + $(myveid).addClass("font-weight-bold mark ") + } + + } + } + drawMinimap(cid, true) } /*console.log(resxcantica)*/ - return + return resxcantica } diff --git a/js/syntgraph_5.0.js b/js/syntgraph_5.0.js index bd2e5e7..327d463 100644 --- a/js/syntgraph_5.0.js +++ b/js/syntgraph_5.0.js @@ -5,7 +5,7 @@ import commarc from "https://hdnlab1.isti.cnr.it/d3search/node_modules/commarcdiag/index.js";*/ import {Runtime, Library, Inspector} from "https://lida.dantenetwork.it/node_modules/commarcdiag/runtime.js"; import commarc from "https://lida.dantenetwork.it/node_modules/commarcdiag/index.js"; -import {formaClass, lisid, lsentid, vistaPeriodi, listaPeriodiRisultato, listaClausoleRisultato} from "./browseMgr_5.0.js" +import {formaClass, lisid, lsentid, vistaPeriodi, listaPeriodiRisultato, listaClausoleRisultato, cantoDisplayed} from "./browseMgr_5.0.js" import { fillStructCard, emptyStructCard } from "./script_5.0.js"; const iframe = document.getElementsByClassName("minimap__content"); From 49fe4d93eb7cdd07aefebbea85c52d7ecb0ab36a Mon Sep 17 00:00:00 2001 From: cesare Date: Fri, 31 Jan 2025 14:58:34 +0100 Subject: [PATCH 2/3] rif in progress --- js/browseMgr_5.0.js | 8 ++- js/dataMgr.js | 134 ++++++++++++++++++++++---------------------- 2 files changed, 75 insertions(+), 67 deletions(-) diff --git a/js/browseMgr_5.0.js b/js/browseMgr_5.0.js index 2d2c257..725a2a7 100644 --- a/js/browseMgr_5.0.js +++ b/js/browseMgr_5.0.js @@ -1,7 +1,7 @@ /** * */ -import { getVersiConCitazioni, queryRiferimenti} from './dataMgr.js'; +import { getVersiConCitazioni, queryRiferimenti, getListaRis} from './dataMgr.js'; import { getJsonQuery, emptyStructCard } from './script_5.0.js'; import {resetGraphStr} from './syntgraph_5.0.js' @@ -1489,6 +1489,12 @@ $(document).ready(function() { //manageMM (cantoDisplayed) //var currPage = 0; //var latestPhraseId = ""; + var telive=getListaRis() + for (var ve of telive) { + let idve = ve + $(ve).removeClass("font-weight-bold mark ") + minim.contents().find(ve).removeClass("font-weight-bold mark ") + } drawMinimap(cantoDisplayed, true) } diff --git a/js/dataMgr.js b/js/dataMgr.js index fd8becd..365e6f1 100644 --- a/js/dataMgr.js +++ b/js/dataMgr.js @@ -4,10 +4,11 @@ import * as duckdb from 'https://cdn.jsdelivr.net/npm/@duckdb/duckdb-wasm@1.29.0 //import * as arrow from 'https://cdn.skypack.dev/apache-arrow@9' -var rif_commentatori=[]; -var rif_autori=[]; -var rif_areetematiche=[]; -var rif_fonti=[]; +var rif_commentatori = []; +var rif_autori = []; +var rif_areetematiche = []; +var rif_fonti = []; +var listaidversi = [] const cantobadgeclassBis = 'badge badge-outline-warning badge-pill' const JSDELIVR_BUNDLES = duckdb.getJsDelivrBundles(); @@ -16,7 +17,7 @@ const JSDELIVR_BUNDLES = duckdb.getJsDelivrBundles(); const bundle = await duckdb.selectBundle(JSDELIVR_BUNDLES); const worker_url = URL.createObjectURL( - new Blob([`importScripts("${bundle.mainWorker}");`], {type: 'text/javascript'}) + new Blob([`importScripts("${bundle.mainWorker}");`], { type: 'text/javascript' }) ); // Instantiate the asynchronus version of DuckDB-wasm @@ -26,7 +27,7 @@ const db = new duckdb.AsyncDuckDB(logger, worker); await db.instantiate(bundle.mainModule, bundle.pthreadWorker); URL.revokeObjectURL(worker_url); -console.log ('datamgr init done') +console.log('datamgr init done') //await db.registerFileURL('remote.parquet', 'http://localhost:8000/js/data/riferimenti_3.parquet', DuckDBDataProtocol.HTTP, false); @@ -42,19 +43,19 @@ await conn.query(` SELECT * FROM "https://lida.dantenetwork.it/js/data/riferimenti_3.parquet"; `); -var table=await conn.query(` +var table = await conn.query(` select distinct Aut from riferimenti order by Aut COLLATE NOCASE; `); const result = table.toArray().map((row) => row.toJSON()); -rif_autori=result.map((x) => x['Aut']); +rif_autori = result.map((x) => x['Aut']); //console.log(rif_autori) -var table=await conn.query(` +var table = await conn.query(` select distinct Com from riferimenti; `); const result2 = table.toArray().map((row) => row.toJSON()); -rif_commentatori=result2.map((x) => x['Com']); +rif_commentatori = result2.map((x) => x['Com']); @@ -66,52 +67,55 @@ rif_commentatori=result2.map((x) => x['Com']); //console.log(rif_commentatori) -var table=await conn.query(` +var table = await conn.query(` select distinct CA from riferimenti order by CA; `); const result3 = table.toArray().map((row) => row.toJSON()); -rif_areetematiche= result3.map((x) => x['CA']); +rif_areetematiche = result3.map((x) => x['CA']); -var table1=await conn.query(` +var table1 = await conn.query(` select distinct TiFo from riferimenti; `); const result4 = table1.toArray().map((row) => row.toJSON()); -rif_fonti=result4.map((x) => x['TiFo']); +rif_fonti = result4.map((x) => x['TiFo']); //console.log(rif_fonti) await conn.close(); console.log('done') +export function getListaRis(){ + return listaidversi; +} export function getFontiS() { - + return rif_fonti } export function getAreeTematicheS() { - + return rif_areetematiche } export function getAutoriFontiCitazioniS() { - + return rif_autori } export function getCommentatoriS() { - + return rif_commentatori } export async function getVersiConCitazioni(canticapar = '', cantopar = '') { - + //let citcantiche = ['Inferno', 'Purgatorio', 'Paradiso'] if (canticapar == '') { return } - const tconn = await db.connect(); - var table=await tconn.query(` + const tconn = await db.connect(); + var table = await tconn.query(` select Ann as Annotazione, Com as Commentario, FrN as frammentoNota, AC as AutoreCitazione, F as FonteCitazione, LF as LuogoFonteCitazione, NF as NotaFonteCitazione, TF as TestoFonteCitazione, UF as URLFonteCitazione, NaRi as NaturaRiferimento, @@ -122,76 +126,74 @@ export async function getVersiConCitazioni(canticapar = '', cantopar = '') { from riferimenti where Cantica='${canticapar}' and Canto='${cantopar}' order by verso; `); - + var result4 = table.toArray().map((row) => row.toJSON()); - - + + await tconn.close(); return result4 - + } -export async function queryRiferimenti(filtro, cid){ - if(filtro==null){ +export async function queryRiferimenti(filtro, cid) { + if (filtro == null) { return } console.log(filtro) - const tconn= await db.connect(); - var querytl='select Cantica, Canto, Verso from riferimenti' - var queryfi=' where ' - if (filtro.Commentatore!=null && filtro.Commentatore.trim()!='all') - queryfi+="Com='"+filtro.Commentatore.trim()+"'" + const tconn = await db.connect(); + var querytl = 'select Cantica, Canto, Verso from riferimenti' + var queryfi = ' where ' + if (filtro.Commentatore != null && filtro.Commentatore.trim() != 'all') + queryfi += "Com='" + filtro.Commentatore.trim() + "'" else - queryfi+="Com like '%'" - if (filtro.Autore_Fonte!=null && filtro.Autore_Fonte.trim()!='all') - queryfi+=" and Aut='"+filtro.Autore_Fonte.trim()+"'" - - var rs= await tconn.query(querytl+queryfi) - var result4 = rs.toArray().map((row) => row.toJSON()); - - await tconn.close(); - var resxcantica= Object.groupBy(result4, ({ Cantica }) => Cantica); - + queryfi += "Com like '%'" + if (filtro.Autore_Fonte != null && filtro.Autore_Fonte.trim() != 'all') + queryfi += " and Aut='" + filtro.Autore_Fonte.trim() + "'" - var numcid=cid.split('_')[1] - for (var cantica in resxcantica){ + var rs = await tconn.query(querytl + queryfi) + var result4 = rs.toArray().map((row) => row.toJSON()); + + await tconn.close(); + var resxcantica = Object.groupBy(result4, ({ Cantica }) => Cantica); + + + var numcid = cid.split('_')[1] + for (var cantica in resxcantica) { var $nctags = $(' .navig-canto') console.log(resxcantica[cantica].length) - var i=1; - if (cantica=='Purgatorio') - i=2 - if (cantica=='Paradiso') - i=3 + var i = 1; + if (cantica == 'Purgatorio') + i = 2 + if (cantica == 'Paradiso') + i = 3 var spanbadgecantica = $(''); spanbadgecantica.attr('class', 'badge badge-warning badge-pill mx-2'); spanbadgecantica.append(resxcantica[cantica].length) spanbadgecantica.appendTo($('#cantica' + i + '-badge')) console.log(spanbadgecantica) - var tmp=resxcantica[cantica] - var resxcanto= Object.groupBy(tmp, ({ Canto }) => Canto); - for (var canto in resxcanto){ - var tmpv=resxcanto[canto] + var tmp = resxcantica[cantica] + var resxcanto = Object.groupBy(tmp, ({ Canto }) => Canto); + for (var canto in resxcanto) { + var tmpv = resxcanto[canto] var spanbadge = $(''); spanbadge.attr('class', cantobadgeclassBis); spanbadge.append(resxcanto[canto].length) - if (canto.startsWith('0')){ - canto= canto.replace('0', '') + if (canto.startsWith('0')) { + canto = canto.replace('0', '') } spanbadge.appendTo($nctags.filter('[name="' + cantica + 'Canto ' + canto + '"]')) - if (cid.includes(cantica) && numcid==canto){ - - - for (const tmpvi of tmpv){ - let myveid='#'+cantica+'_Canto_'+canto+'_'+tmpvi.Verso.split('-')[0] - console.log(myveid) + for (const tmpvi of tmpv) { + let myveid = '#' + cantica + '_Canto_' + canto + '_' + tmpvi.Verso.split('-')[0] + console.log(myveid) + listaidversi.push(myveid) + if (cid.includes(cantica) && numcid == canto) $(myveid).addClass("font-weight-bold mark ") - } - } + } drawMinimap(cid, true) - + } /*console.log(resxcantica)*/ - return resxcantica - + return listaidversi + } From fe9322e23cd113ef3362d132d8117901ca402683 Mon Sep 17 00:00:00 2001 From: cesare Date: Fri, 31 Jan 2025 17:01:27 +0100 Subject: [PATCH 3/3] rif, in progress --- js/browseMgr_5.0.js | 19 ++++++++++++++----- js/dataMgr.js | 29 ++++++++++++++++------------- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/js/browseMgr_5.0.js b/js/browseMgr_5.0.js index 725a2a7..058b5fd 100644 --- a/js/browseMgr_5.0.js +++ b/js/browseMgr_5.0.js @@ -1,7 +1,7 @@ /** * */ -import { getVersiConCitazioni, queryRiferimenti, getListaRis} from './dataMgr.js'; +import { getVersiConCitazioni, queryRiferimenti, getListaRis, cleanListaRis} from './dataMgr.js'; import { getJsonQuery, emptyStructCard } from './script_5.0.js'; import {resetGraphStr} from './syntgraph_5.0.js' @@ -554,7 +554,10 @@ $(document).ready(function() { //$("#" + $(this).attr('name').replace(" ", "_")).css("display", "block"); $("#" + $(this).attr('name').replace(" ", "_")).attr('style', 'display: d-flex;') - + var telive=getListaRis() + for (var tel of telive){ + $(tel).addClass("mark ") + } drawMinimap("#" + $(this).attr('name').replace(" ", "_"), false) @@ -908,7 +911,7 @@ $(document).ready(function() { } drawMinimap("#" + idminimap, false) - console.log (commentsSQL) + //console.log (commentsSQL) } @@ -1492,10 +1495,12 @@ $(document).ready(function() { var telive=getListaRis() for (var ve of telive) { let idve = ve - $(ve).removeClass("font-weight-bold mark ") - minim.contents().find(ve).removeClass("font-weight-bold mark ") + $(ve).removeClass("mark ") + minim.contents().find(ve).removeClass("mark ") } + cleanListaRis() drawMinimap(cantoDisplayed, true) + } /*function manageMM(name) { @@ -1719,6 +1724,10 @@ $(document).ready(function() { } } + /*var telive=getListaRis() + for (var tel of telive){ + $(tel).addClass("mark ") + }*/ } diff --git a/js/dataMgr.js b/js/dataMgr.js index 365e6f1..985a0d6 100644 --- a/js/dataMgr.js +++ b/js/dataMgr.js @@ -59,14 +59,6 @@ rif_commentatori = result2.map((x) => x['Com']); -/*rif_commentatori.sort((a, b) => { - var sre= (a.replace(/^\D+/g, '')-b.replace(/^\D+/g, '')) - console.log(sre) - return sre -})*/ -//console.log(rif_commentatori) - - var table = await conn.query(` select distinct CA from riferimenti order by CA; `); @@ -76,7 +68,7 @@ rif_areetematiche = result3.map((x) => x['CA']); var table1 = await conn.query(` - select distinct TiFo from riferimenti; + select distinct TiFo from riferimenti order by TiFo COLLATE NOCASE; `); const result4 = table1.toArray().map((row) => row.toJSON()); rif_fonti = result4.map((x) => x['TiFo']); @@ -88,6 +80,9 @@ console.log('done') export function getListaRis(){ return listaidversi; } +export function cleanListaRis(){ + listaidversi=[]; +} export function getFontiS() { return rif_fonti @@ -148,14 +143,22 @@ export async function queryRiferimenti(filtro, cid) { queryfi += "Com like '%'" if (filtro.Autore_Fonte != null && filtro.Autore_Fonte.trim() != 'all') queryfi += " and Aut='" + filtro.Autore_Fonte.trim() + "'" - + if (filtro.Fonte != null && filtro.Fonte.trim() != 'all') + queryfi += " and TiFo='" + filtro.Fonte.trim() + "'" + + if (filtro.Area_Tematica != null && filtro.Area_Tematica.trim() != 'all') + queryfi += " and CA='" + filtro.Area_Tematica.trim() + "'" + + if (filtro.Tipo_Riferimento != null && filtro.Tipo_Riferimento.trim() != 'all') + queryfi += " and NaRi='" + filtro.Tipo_Riferimento.trim().toUpperCase() + "'" + var rs = await tconn.query(querytl + queryfi) var result4 = rs.toArray().map((row) => row.toJSON()); await tconn.close(); var resxcantica = Object.groupBy(result4, ({ Cantica }) => Cantica); - + listaidversi=[] var numcid = cid.split('_')[1] for (var cantica in resxcantica) { var $nctags = $(' .navig-canto') @@ -183,10 +186,10 @@ export async function queryRiferimenti(filtro, cid) { spanbadge.appendTo($nctags.filter('[name="' + cantica + 'Canto ' + canto + '"]')) for (const tmpvi of tmpv) { let myveid = '#' + cantica + '_Canto_' + canto + '_' + tmpvi.Verso.split('-')[0] - console.log(myveid) + //console.log(myveid) listaidversi.push(myveid) if (cid.includes(cantica) && numcid == canto) - $(myveid).addClass("font-weight-bold mark ") + $(myveid).addClass("mark ") } }