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' 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(); // Select a bundle based on browser checks const bundle = await duckdb.selectBundle(JSDELIVR_BUNDLES); const worker_url = URL.createObjectURL( new Blob([`importScripts("${bundle.mainWorker}");`], { type: 'text/javascript' }) ); // Instantiate the asynchronus version of DuckDB-wasm const worker = new Worker(worker_url); const logger = new duckdb.ConsoleLogger(); const db = new duckdb.AsyncDuckDB(logger, worker); await db.instantiate(bundle.mainModule, bundle.pthreadWorker); URL.revokeObjectURL(worker_url); console.log('datamgr init done') //await db.registerFileURL('remote.parquet', 'http://localhost:8000/js/data/riferimenti_3.parquet', DuckDBDataProtocol.HTTP, false); /*const res = await fetch('http://localhost:8000/js/data/riferimenti_3.parquet'); await db.registerFileBuffer('buffer.parquet', new Uint8Array(await res.arrayBuffer()));*/ const conn = await db.connect(); await conn.query(` CREATE TABLE riferimenti AS SELECT * FROM "https://lida.dantenetwork.it/js/data/riferimenti_3.parquet"; `); 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']); //console.log(rif_autori) 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']); 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']); var table1 = await conn.query(` select distinct TiFo from riferimenti order by TiFo COLLATE NOCASE; `); const result4 = table1.toArray().map((row) => row.toJSON()); //console.log(result4) rif_fonti = result4.map((x) => x['TiFo']); //console.log(rif_fonti) await conn.close(); console.log('done') //opzioniRiferimenti() export function getListaRis() { return listaidversi; } export function cleanListaRis() { 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(` 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, RCC as RapportoCommentoCommentatoreText, RSO as RapportoSoggettoOggetto, Aut as NomeAutoreCitazione, TiFo as TitoloFonteCitazione, Verso as VersoCitazione, CA as AreaTematica, TiCi as TipoCitazione, CEP as CitEpisodi, CIM as CitImmagini, CTE as CitTeorie, CMO as CitMotivi, CST as CitStilemi, CTO as CitTopografie, CPER as CitPersonaggi, IdRiferimento as Id 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) { return } console.log(filtro) var contenuti_riferimento = { 'personaggio': " and CPER !='' and CPER !='no'", 'episodio': " and CEP !='' and CEP !='no'", 'motivo': " and CMO !='' and CMO !='no'", 'immagine': " and CIM !='' and CIM !='no'", 'teoria': " and CTE !='' and CTE !='no'", 'stilema': " and CST !='' and CST !='no'", 'topografia': " and CTO !='' and CTO !='no'" } const tconn = await db.connect(); var querytl = 'select IdRiferimento, 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() + "'" 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() + "'" if (filtro.Contenuto_Riferimento != null && filtro.Contenuto_Riferimento != 'all') queryfi += contenuti_riferimento[filtro.Contenuto_Riferimento.trim()] if (filtro.Rapporto_Testo_Fonte != null && filtro.Rapporto_Testo_Fonte != 'all') queryfi += " and UPPER(RSO)=UPPER('" + filtro.Rapporto_Testo_Fonte.trim() + "')" if (filtro.Testo_Fonte != null && filtro.Testo_Fonte.trim() != '') queryfi += " and TF like '%" + filtro.Testo_Fonte.trim() + "%'" if (filtro.Testo_Nota != null && filtro.Testo_Nota.trim() != '') queryfi += " and Ann like '%" + filtro.Testo_Nota.trim() + "%'" if (filtro.contesto != null) { var marray = JSON.parse(filtro.contesto); var infiltro=false var oplog=' and (' var tfi=filtroContesto(marray[0], 'Inferno', oplog) queryfi+=tfi if (tfi.trim()!='') infiltro=true oplog=' or ' tfi='' tfi=filtroContesto(marray[1], 'Purgatorio', oplog) if (tfi!=''){ infiltro=true queryfi += tfi oplog=' or ' } tfi='' tfi=filtroContesto(marray[2], 'Paradiso', oplog) if (tfi!=''){ infiltro=true queryfi += tfi } if (infiltro) queryfi +=")" } 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') console.log(resxcantica[cantica].length) 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')) 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 + '"]')) 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("mark ") } } drawMinimap(cid, true) } /*console.log(resxcantica)*/ return listaidversi } function opzioniRiferimenti() { $.each(rif_commentatori, function(i, p) { if (!!p && p.length > 2) { $('#Commentatore100').append($('') .val(p).html(p)); }; }); $.each(rif_fonti, function(i, p) { if (!!p && p.length > 2) { $('#Fonte100').append($('') .val(p).html(p)); }; }); $.each(rif_autori, function(i, p) { if (!!p && p.length > 2) { $('#Autore_Fonte100').append($('') .val(p).html(p)); }; }); $.each(rif_areetematiche, function(i, p) { if (!!p && p.length > 2) { $('#Area_Tematica100').append($('') .val(p).html(p)); }; }); }; function filtroContesto(marray, cantica, op) { var filtrost = '' if (marray.every((val, i, arr) => val === 1)) { return op+ " Cantica='"+cantica+"'" } if (marray.some((val, i, arr) => val === 1)) { var tearr = marray.reduce(function(tearr, n, i) { if (n === 1) tearr.push(i); return tearr; }, []); for (const ic in tearr) { var canto = (tearr[ic]+1).toString() if ((tearr[ic]+1) < 10) canto = '0' + canto if (ic == 0) filtrost += op+" (Cantica='"+cantica+"' and (Canto='" + canto + "'" else filtrost += " or Canto='" + canto + "'" } if (tearr.length) filtrost += "))" console.log(filtrost) } return filtrost }