ricerca.js 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104
  1. // Config data -- could be whatever
  2. // should be moved to a different file if/when there's a lot of it
  3. const flask_be_address = 'http://127.0.0.1:5000'
  4. // Separate function to handle HTTP requests -- could be moved to different file (a service)
  5. function getData(endpoint, queryDTO){
  6. let url = flask_be_address.concat(endpoint);
  7. // This seems to work and it's definitely better than previous version
  8. return $.ajax(
  9. {
  10. url: url,
  11. type: 'POST',
  12. contentType: 'application/json; charset=utf-8',
  13. dataType: 'json',
  14. data: JSON.stringify(queryDTO),
  15. }
  16. );
  17. // // This seems to work too (but it's missing the 'return' statement, I'm not sure what 'fetch' returns)
  18. // fetch(url,
  19. // {
  20. // method: 'POST',
  21. // headers: {
  22. // 'Content-Type': 'application/json'
  23. // },
  24. // body: JSON.stringify(queryDTO)
  25. // }
  26. // );
  27. // // THE OLD, STUPID WAY
  28. // // This is a stupid way of handling the JSON data, but it works;
  29. // // trying to send application/json data causes Flask to complain and I can't understand why!
  30. // return $.post(url, {stringifiedDTO: JSON.stringify(queryDTO)});
  31. }
  32. let arrayResponse = [];
  33. // Separate function to handle response data -- could be moved to different file (a service)
  34. function processData(response){
  35. console.log(response);
  36. $("#loader").css("display", "none");
  37. if(response.length==0){
  38. alert('No results!')
  39. }
  40. else {
  41. arrayResponse = response;
  42. var keys = Object.keys(response[0]);
  43. createFirstRow(keys);
  44. var ll = response.length;
  45. for (var i=0; i<ll; i++) {
  46. let newRow = response[i];
  47. createRow(i, newRow);
  48. }
  49. }
  50. //$("#result").append(response);
  51. }
  52. function processOccData(response){
  53. console.log(response);
  54. $("#loader").css("display", "none");
  55. if(response.length==0){
  56. alert('No results!')
  57. }
  58. else {
  59. arrayResponse = response;
  60. var keys = Object.keys(response[0]);
  61. createFirstRowOcc(keys);
  62. var ll = response.length;
  63. let pags = Math.floor(ll / 10);
  64. let extraP = ll % 10;
  65. if (extraP != 0) {
  66. pags = pags + 1;
  67. }
  68. let pp = 9;
  69. let ref = 1;
  70. createPagination(pags);
  71. for (var j=1; j<pags+1; j++) {
  72. var newDiv = document.createElement('div');
  73. newDiv.id = "pag_" + j;
  74. newDiv.className = "page";
  75. $("#result").append(newDiv)
  76. }
  77. for (var i=0; i<ll; i++) {
  78. if (i >= pp) {
  79. pp = pp + 10;
  80. ref = ref + 1;
  81. } else {
  82. pp = pp;
  83. }
  84. let newRow = response[i];
  85. createOccRow(i, newRow, ref);
  86. }
  87. }
  88. //$("#result").append(response);
  89. }
  90. function createPagination(num) {
  91. $("#navPagination").html("");
  92. var navbar = document.createElement('nav');
  93. var ulNav = document.createElement('ul');
  94. ulNav.className = "pagination";
  95. var liNavP = document.createElement('li');
  96. //liNavP.className = "page-item";
  97. liNavP.id = "prev";
  98. var aPrev = document.createElement('a');
  99. aPrev.className = "page-link";
  100. aPrev.innerHTML = "&laquo;";
  101. liNavP.append(aPrev);
  102. ulNav.append(liNavP);
  103. for (var i=1; i<num+1; i++) {
  104. var liNav = document.createElement('li');
  105. liNav.className = "page-item";
  106. if (i==1) {
  107. liNav.classList.add("active");
  108. }
  109. liNav.id = "getPage_" + i;
  110. var aNum = document.createElement('a');
  111. aNum.className = "page-link";
  112. aNum.innerHTML = i;
  113. liNav.append(aNum)
  114. ulNav.append(liNav);
  115. }
  116. var liNavN = document.createElement('li');
  117. //liNavN.className = "page-item";
  118. liNavN.id = "next";
  119. var aNext = document.createElement('a');
  120. aNext.className = "page-link";
  121. aNext.innerHTML = "&raquo;";
  122. liNavN.append(aNext);
  123. ulNav.append(liNavN);
  124. navbar.append(ulNav);
  125. $("#navPagination").append(navbar);
  126. }
  127. //Funzione per gestire i contesti
  128. function processSingleContext(response){
  129. if(response.length==0){
  130. alert('No results!')
  131. }
  132. else {
  133. console.log(response);
  134. createPage(response[0]);
  135. }
  136. }
  137. let queryDTO = {};
  138. function funzioneRicerca(){
  139. $("#result").html("");
  140. $("#loader").css("display", "block");
  141. let collection_elementoDaRicercare = document.getElementsByClassName("barraDiRicerca");
  142. var collection_types = document.getElementsByClassName("flViewBy");
  143. var collection_lenght = collection_elementoDaRicercare.length;
  144. let distanza = document.getElementById("distanza").value;
  145. let queryList = [];
  146. var periodo = 0;
  147. var ordinate = 0;
  148. var i = 0;
  149. for (i; i < collection_lenght; i++) {
  150. elementoDaRicercare = collection_elementoDaRicercare[i].value;
  151. let word = elementoDaRicercare;
  152. var tipo = "";
  153. var espansa = 0;
  154. var raddoppiata = 0;
  155. var noLemma = 0;
  156. var formeLemmi = 0;
  157. var check_tipo = collection_types[i].value;
  158. //NOLEMMA DEVE ESSERE CONVERTITO IN TIPO (TIPO = 0, 1, 2), TIPO = 2 SE NOLEMMA è SELEZIONATO
  159. if ($('#occ_' + i + ' .ricercaEx').prop("checked"))
  160. {
  161. espansa = 1;
  162. }
  163. if ($('#occ_' + i + ' .raddoppiata').prop("checked"))
  164. {
  165. raddoppiata = 1;
  166. }
  167. if ($('#occ_' + i + ' .showOther').prop("checked"))
  168. {
  169. formeLemmi = 1;
  170. }
  171. if ($('#occ_' + i + ' .lemmatizzata').prop("checked"))
  172. {
  173. noLemma = 1;
  174. }
  175. if ((check_tipo == "forma") && (formeLemmi == 0)) {
  176. tipo = "forma";
  177. }
  178. else if ((check_tipo == "forma") && (formeLemmi == 1)) {
  179. tipo = "formaLemma";
  180. }
  181. else if ((check_tipo == "lemma") && (noLemma == 1)) {
  182. tipo = "soloLemmatizzate";
  183. }
  184. else if ((check_tipo == "lemma") && (formeLemmi == 0)) {
  185. tipo = "lemma";
  186. }
  187. else if ((check_tipo == "lemma") && (formeLemmi == 1)) {
  188. tipo = "lemmaForma";
  189. }
  190. queryList.push( {"stringa": word, "espansa": espansa, "raddoppiata": raddoppiata, "tipo": tipo} );
  191. //$("#params").append("I tuoi parametri: " + word + "; " + tipo + "; " + espansa + "; " + raddoppiata + "; " + formeLemmi);
  192. }
  193. if ($('#periodo').prop("checked"))
  194. {
  195. periodo = 1;
  196. }
  197. if ($('#ordinate').prop("checked"))
  198. {
  199. ordinate = 1;
  200. }
  201. let cooccorrenze = {"distanza": distanza, "stesso_periodo": periodo, "ordinate": ordinate};
  202. let numb = document.getElementById("search_form").childElementCount;
  203. if (numb < 2) {
  204. queryDTO = {
  205. queryList: queryList
  206. }
  207. getData('/simple_get_query', queryDTO)
  208. // After request finishes, process response data
  209. .done(response => processData(response))
  210. .fail(err => {
  211. console.log(err);
  212. $("#loader").css("display", "none");
  213. alert('Something went wrong!');
  214. });
  215. } else {
  216. queryDTO = {
  217. queryList: queryList,
  218. cooccorrenze: cooccorrenze
  219. }
  220. getData('/simple_get_query', queryDTO)
  221. // After request finishes, process response data
  222. .done(response => processOccData(response))
  223. .fail(err => {
  224. console.log(err);
  225. $("#loader").css("display", "none");
  226. alert('Something went wrong!');
  227. });
  228. }
  229. console.log(queryDTO);
  230. $("#lauchSearchContext").css("display", "flex");
  231. }
  232. function checkContext() {
  233. let resulTable = document.getElementById("result");
  234. const checkBoxes = resulTable.querySelectorAll('input[type="checkbox"]');
  235. let arrayContesti = [];
  236. var selected = [];
  237. $('#result input:checked').each(function() {
  238. //selected.push($(this).attr('id'));
  239. var checkNum = $(this).attr('id');
  240. selected.push(checkNum);
  241. });
  242. for (var i=0; i<arrayResponse.length; i++) {
  243. for (var j=0; j<selected.length; j++) {
  244. if (arrayResponse[i]["cod"] == selected[j]) {
  245. arrayResponse[i]["selected"] = true;
  246. arrayContesti.push(arrayResponse[i]);
  247. }
  248. }
  249. }
  250. queryDTO["listResults"] = arrayContesti;
  251. console.log(queryDTO);
  252. $("#result").html("");
  253. $("#loader").css("display", "block");
  254. getData('/get_context', queryDTO)
  255. // After request finishes, process response data
  256. .done(response => processOccData(response))
  257. .fail(err => {
  258. console.log(err);
  259. $("#loader").css("display", "none");
  260. alert('Something went wrong!');
  261. });
  262. // .always(response => console.log(response));
  263. }
  264. $( document ).ready(function() {
  265. $("select").on("change", function(event) {
  266. var e = this.value;
  267. var word = "";
  268. if (e == "forma") {
  269. word = "lemmi";
  270. var parent = this.parentElement.parentElement.parentElement.parentElement.parentElement;
  271. var pp = parent.getElementsByClassName("lemmatizzata");
  272. console.log(pp[0]);
  273. }
  274. else {
  275. word = "forme";
  276. }
  277. $("#mostraFormaLemma").html(word);
  278. });
  279. var occ = 0;
  280. $("#btnGroupAddon").click(function() {
  281. $("#cooccorrenze_options").css("display", "flex");
  282. $("#inner_altro").css("display", "none");
  283. $("#inner_lemmatizzato").css("display", "flex");
  284. if (occ > 8) {
  285. alert("Hai esaurito i parametri a disposizione");
  286. }
  287. else {
  288. occ = occ + 1;
  289. createNewCC(occ);
  290. }
  291. });
  292. $( "#context-title" ).click(function() {
  293. $( "#additional_info" ).toggle( "slow", function() {
  294. // Animation complete.
  295. });
  296. });
  297. });
  298. function createNewCC(occ) {
  299. var new_id = "occ_" + occ;
  300. var new_par = document.createElement('div');
  301. new_par.className = "row height d-flex justify-content-center align-items-center";
  302. new_par.id = new_id;
  303. var search_params = document.createElement('div');
  304. search_params.className = "col search_params";
  305. var choose_param = document.createElement('div');
  306. choose_param.className = "row choose_param";
  307. var col_6 = document.createElement('div');
  308. col_6.className = "col-5";
  309. var input_group = document.createElement('div');
  310. input_group.className = "input-group form-check";
  311. var inputSel = document.createElement('input');
  312. inputSel.className = "barraDiRicerca form-control";
  313. inputSel.type = "text";
  314. //Create and append select list
  315. var selectList = document.createElement("select");
  316. selectList.className = "flViewBy";
  317. //Create and append the options
  318. var optionForma = document.createElement("option");
  319. optionForma.value = "forma";
  320. optionForma.text = "Forma";
  321. optionForma.selected = "selected";
  322. selectList.appendChild(optionForma);
  323. var optionLemma = document.createElement("option");
  324. optionLemma.value = "lemma";
  325. optionLemma.text = "Lemma";
  326. selectList.appendChild(optionLemma);
  327. var col_form = document.createElement("div");
  328. col_form.className = "col-2";
  329. var form_check = document.createElement("div");
  330. form_check.className = "form-check";
  331. var input_ricerca_espansa = document.createElement("input");
  332. input_ricerca_espansa.className = "ricercaEx form-check-input";
  333. input_ricerca_espansa.value = "ricerca_espansa";
  334. input_ricerca_espansa.type = "checkbox";
  335. input_ricerca_espansa.name = "espansa";
  336. var label_ricerca_espansa = document.createElement("label");
  337. label_ricerca_espansa.className = "form-check-label";
  338. label_ricerca_espansa.innerHTML = "Ricerca espansa";
  339. var col_form2 = document.createElement("div");
  340. col_form2.className = "col-2";
  341. var form_check2 = document.createElement("div");
  342. form_check2.className = "form-check";
  343. var input_ricerca_raddoppiata = document.createElement("input");
  344. input_ricerca_raddoppiata.className = "raddoppiata form-check-input";
  345. input_ricerca_raddoppiata.value = "raddoppiata";
  346. input_ricerca_raddoppiata.type = "checkbox";
  347. input_ricerca_raddoppiata.name = "raddoppiata";
  348. var label_ricerca_raddoppiata = document.createElement("label");
  349. label_ricerca_raddoppiata.className = "form-check-label";
  350. label_ricerca_raddoppiata.innerHTML = "Iniziale raddoppiata";
  351. var col_form3 = document.createElement("div");
  352. col_form3.className = "col-2";
  353. var form_check3 = document.createElement("div");
  354. form_check3.className = "form-check";
  355. var input_ricerca_lemmatizzata = document.createElement("input");
  356. input_ricerca_lemmatizzata.className = "lemmatizzata form-check-input";
  357. input_ricerca_lemmatizzata.value = "lemmatizzata";
  358. input_ricerca_lemmatizzata.type = "checkbox";
  359. input_ricerca_lemmatizzata.name = "lemmatizzata";
  360. input_ricerca_lemmatizzata.disabled = "true";
  361. var label_ricerca_lemmatizzata = document.createElement("label");
  362. label_ricerca_lemmatizzata.className = "form-check-label";
  363. label_ricerca_lemmatizzata.innerHTML = "Cerca solo lemmatizzate";
  364. var col_form4 = document.createElement("div");
  365. col_form4.className = "col-1";
  366. var form_check4 = document.createElement("div");
  367. form_check4.className = "form-check deleteCC";
  368. form_check4.id = occ;
  369. var trash_button = document.createElement("button");
  370. trash_button.className = "btn";
  371. var trash_icon = document.createElement("i");
  372. trash_icon.className = "fa fa-trash";
  373. input_group.appendChild(inputSel);
  374. input_group.appendChild(selectList);
  375. col_6.appendChild(input_group);
  376. form_check.appendChild(input_ricerca_espansa);
  377. form_check.appendChild(label_ricerca_espansa);
  378. col_form.appendChild(form_check);
  379. form_check2.appendChild(input_ricerca_raddoppiata);
  380. form_check2.appendChild(label_ricerca_raddoppiata);
  381. col_form2.appendChild(form_check2);
  382. form_check3.appendChild(input_ricerca_lemmatizzata);
  383. form_check3.appendChild(label_ricerca_lemmatizzata);
  384. col_form3.appendChild(form_check3);
  385. trash_button.appendChild(trash_icon);
  386. form_check4.appendChild(trash_button);
  387. col_form4.appendChild(form_check4);
  388. choose_param.appendChild(col_6);
  389. choose_param.appendChild(col_form);
  390. choose_param.appendChild(col_form2);
  391. choose_param.appendChild(col_form3);
  392. choose_param.appendChild(col_form4);
  393. search_params.appendChild(choose_param);
  394. new_par.appendChild(search_params);
  395. $("#search_form").append(new_par);
  396. }
  397. function changeFL(word) {
  398. $("#mostraFormaLemma").html(word);
  399. }
  400. function createFirstRow(param) {
  401. var row = document.createElement('div');
  402. row.className = "row height d-flex justify-content-center align-items-center";
  403. row.id = "first_row";
  404. if (param.includes("forma")) {
  405. var colForma = document.createElement('div');
  406. colForma.className = "col formaCol";
  407. colForma.append("Forma");
  408. row.append(colForma);
  409. }
  410. if (param.includes("lemma")) {
  411. var colLemma = document.createElement('div');
  412. colLemma.className = "col lemmaCol";
  413. colLemma.append("Lemma");
  414. row.append(colLemma);
  415. }
  416. if (param.includes("cat_gr")) {
  417. var categoria = document.createElement('div');
  418. categoria.className = "col cat_gr";
  419. categoria.append("Categoria Grammaticale");
  420. row.append(categoria);
  421. }
  422. if (param.includes("disambiguatore")) {
  423. var colDis = document.createElement('div');
  424. colDis.className = "col disambiguatore";
  425. colDis.append("Disambiguatore");
  426. row.append(colDis);
  427. }
  428. if (param.includes("occ")) {
  429. var colOcc = document.createElement('div');
  430. colOcc.className = "col occorrenze";
  431. colOcc.append("Occorrenze");
  432. row.append(colOcc);
  433. }
  434. var colSel = document.createElement('div');
  435. colSel.className = "col seleziona_elemento";
  436. colSel.append("Seleziona");
  437. row.append(colSel);
  438. $("#result").append(row);
  439. }
  440. //Crea prima riga per contesti multipli
  441. function createFirstRowOcc(param) {
  442. var row = document.createElement('div');
  443. row.className = "row height d-flex justify-content-center align-items-center";
  444. row.id = "first_row";
  445. var colRif = document.createElement('div');
  446. colRif.className = "col-4 rifCol";
  447. colRif.append("Riferimenti");
  448. row.append(colRif);
  449. var colInfoLemma = document.createElement('div');
  450. colInfoLemma.className = "col-2 lemmaCol";
  451. row.append(colInfoLemma);
  452. var colContesto = document.createElement('div');
  453. colContesto.className = "col-6 contestoCol";
  454. colContesto.append("Contesto");
  455. row.append(colContesto);
  456. /*
  457. if (param.includes("Titolo Abbreviato")) {
  458. var colTitolo = document.createElement('div');
  459. colTitolo.className = "col-2 abbrCol";
  460. colTitolo.append("Titolo Abbreviato");
  461. row.append(colTitolo);
  462. }
  463. if (param.includes("Rif_organico")) {
  464. var colRif = document.createElement('div');
  465. colRif.className = "col rifCol";
  466. colRif.append("Rif organico");
  467. row.append(colRif);
  468. }
  469. if (param.includes("pag")) {
  470. var colPag = document.createElement('div');
  471. colPag.className = "col pag";
  472. colPag.append("Pag");
  473. row.append(colPag);
  474. }
  475. if (param.includes("riga")) {
  476. var colRiga = document.createElement('div');
  477. colRiga.className = "col riga";
  478. colRiga.append("Riga");
  479. row.append(colRiga);
  480. }
  481. if (param.includes("stanza")) {
  482. var colStanza = document.createElement('div');
  483. colStanza.className = "col stanza";
  484. colStanza.append("Stanza");
  485. row.append(colStanza);
  486. }
  487. if (param.includes("tipostanza")) {
  488. var colTipoStanza = document.createElement('div');
  489. colTipoStanza.className = "col tipostanza";
  490. colTipoStanza.append("Tipo stanza");
  491. row.append(colTipoStanza);
  492. }
  493. if (param.includes("verso")) {
  494. var colVerso = document.createElement('div');
  495. colVerso.className = "col verso";
  496. colVerso.append("Verso");
  497. row.append(colVerso);
  498. }
  499. if (param.includes("contesto")) {
  500. var colContesto = document.createElement('div');
  501. colContesto.className = "col-4 contesto";
  502. colContesto.append("Contesto");
  503. row.append(colContesto);
  504. }*/
  505. $("#result").append(row);
  506. }
  507. //
  508. function createRow(num, elem) {
  509. var cat_gr = elem["cat_gr"];
  510. var disambiguatore = elem["disambiguatore"];
  511. var forma = elem["forma"];
  512. var lemma = elem["lemma"];
  513. var occ = elem["occ"];
  514. var cod = elem["cod"];
  515. var row = document.createElement('div');
  516. row.className = "row height d-flex justify-content-center align-items-center";
  517. row.id = num;
  518. if (elem.hasOwnProperty('forma')) {
  519. var colForma = document.createElement('div');
  520. colForma.className = "col formaCol";
  521. colForma.append(forma);
  522. row.append(colForma);
  523. }
  524. if (elem.hasOwnProperty('lemma')) {
  525. var colLemma = document.createElement('div');
  526. colLemma.className = "col lemmaCol";
  527. colLemma.append(lemma);
  528. row.append(colLemma);
  529. }
  530. if (elem.hasOwnProperty('cat_gr')) {
  531. var categoria = document.createElement('div');
  532. categoria.className = "col cat_gr";
  533. categoria.append(cat_gr);
  534. row.append(categoria);
  535. }
  536. if (elem.hasOwnProperty('disambiguatore')) {
  537. var colDis = document.createElement('div');
  538. colDis.className = "col disambiguatore";
  539. colDis.append(disambiguatore);
  540. row.append(colDis);
  541. }
  542. if (elem.hasOwnProperty('occ')) {
  543. var colOcc = document.createElement('div');
  544. colOcc.className = "col occorrenze";
  545. colOcc.append(occ);
  546. row.append(colOcc);
  547. }
  548. var colSel = document.createElement('div');
  549. colSel.className = "col seleziona_elemento";
  550. var inputSel = document.createElement('input');
  551. inputSel.className = "form-check-selected";
  552. inputSel.id = cod;
  553. inputSel.type = "checkbox";
  554. colSel.append(inputSel);
  555. row.append(colSel);
  556. $("#result").append(row);
  557. }
  558. //Crea tabella cooccorrenze
  559. function createOccRow(num, elem, pp) {
  560. var titolo_abbreviato = elem["Titolo Abbreviato"];
  561. var contesto = elem["contesto"];
  562. contesto = contesto.replace(/\n/g, "<br />");
  563. let words = elem["highlights_combined"];
  564. var rif_organico = elem["Rif_organico"];
  565. var pag = elem["pag"];
  566. var riga = elem["riga"];
  567. var stanza = elem["stanza"];
  568. var tipostanza = elem["tipostanza"];
  569. var ts = writeStanza(tipostanza);
  570. var verso = elem["verso"];
  571. var lemma = elem["lemma"];
  572. var cat_gr = elem["cat_gr"];
  573. var riferimenti = titolo_abbreviato + ", " + rif_organico + ", " + ts + "." + stanza +
  574. " v. " + verso + ", " + pag + "." + riga;
  575. var info_lemma = lemma + " " + cat_gr;
  576. /*
  577. for (var i=0; i<words.length; i++) {
  578. contesto = contesto.replace(words[i], '<span class="highlight">' + words[i] + '</span>');
  579. }*/
  580. var row = document.createElement('div');
  581. row.className = "row height d-flex justify-content-center align-items-center pag_" + pp;
  582. row.id = num;
  583. var onClickCommand = "goToSingleContext(" + num + ", 31, 0, 0)";
  584. row.setAttribute("onclick", onClickCommand);
  585. var colRiferimenti = document.createElement('div');
  586. colRiferimenti.className = "col-4 rifCol";
  587. colRiferimenti.append(riferimenti);
  588. row.append(colRiferimenti);
  589. var colInfoLemma = document.createElement('div');
  590. colInfoLemma.className = "col-2 lemCol";
  591. colInfoLemma.append(info_lemma);
  592. row.append(colInfoLemma);
  593. var colContesto = document.createElement('div');
  594. colContesto.className = "col-6 contestoCol";
  595. colContesto.innerHTML = contesto;
  596. row.append(colContesto);
  597. /*if (elem.hasOwnProperty('Titolo Abbreviato')) {
  598. var colTitolo = document.createElement('div');
  599. colTitolo.className = "col-2 abbrCol";
  600. colTitolo.append(titolo_abbreviato);
  601. row.append(colTitolo);
  602. }
  603. if (elem.hasOwnProperty('Rif_organico')) {
  604. var colRif = document.createElement('div');
  605. colRif.className = "col rifCol";
  606. colRif.append(rif_organico);
  607. row.append(colRif);
  608. }
  609. if (elem.hasOwnProperty('pag')) {
  610. var colPag = document.createElement('div');
  611. colPag.className = "col pagCol";
  612. colPag.append(pag);
  613. row.append(colPag);
  614. }
  615. if (elem.hasOwnProperty('riga')) {
  616. var colRiga = document.createElement('div');
  617. colRiga.className = "col rigaCol";
  618. colRiga.append(riga);
  619. row.append(colRiga);
  620. }
  621. if (elem.hasOwnProperty('stanza')) {
  622. var colStanza = document.createElement('div');
  623. colStanza.className = "col stanzaCol";
  624. colStanza.append(stanza);
  625. row.append(colStanza);
  626. }
  627. if (elem.hasOwnProperty('tipostanza')) {
  628. var colTipoStanza = document.createElement('div');
  629. colTipoStanza.className = "col tipostanzaCol";
  630. colTipoStanza.append(tipostanza);
  631. row.append(colTipoStanza);
  632. }
  633. if (elem.hasOwnProperty('verso')) {
  634. var colVerso = document.createElement('div');
  635. colVerso.className = "col versoCol";
  636. colVerso.append(verso);
  637. row.append(colVerso);
  638. }
  639. if (elem.hasOwnProperty('contesto')) {
  640. var colContesto = document.createElement('div');
  641. colContesto.className = "col-4 contestoCol";
  642. colContesto.innerHTML = contesto;
  643. row.append(colContesto);
  644. }*/
  645. $("#pag_" + pp).append(row);
  646. }
  647. //
  648. //WRITE TIPOSTANZA
  649. function writeStanza(stanza) {
  650. var tipo_stanza = "";
  651. if (stanza = 0) {
  652. tipo_stanza = "prosa";
  653. } else if (stanza = 1) {
  654. tipo_stanza = "verso";
  655. } else if (stanza = 2) {
  656. tipo_stanza = "distico";
  657. } else if (stanza = 4) {
  658. tipo_stanza = "terzina";
  659. } else if (stanza = 8) {
  660. tipo_stanza = "quartina";
  661. } else if (stanza = 16) {
  662. tipo_stanza = "sestina";
  663. } else if (stanza = 32) {
  664. tipo_stanza = "ottava";
  665. } else if (stanza = 64) {
  666. tipo_stanza = "sonetto";
  667. } else if (stanza = 99) {
  668. tipo_stanza = "stanza";
  669. } else {
  670. tipo_stanza = stanza;
  671. }
  672. return tipo_stanza;
  673. }
  674. //
  675. //START GET SINGLE CONTEXT
  676. function goToSingleContext(num, parole, periodi, brani) {
  677. let params = {"indice": num, "parole": parole, "periodi": periodi, "brani": brani};
  678. let queryGSC = {
  679. elem: arrayResponse[num],
  680. params: params
  681. }
  682. getData('/get_single_context', queryGSC)
  683. // After request finishes, process response data
  684. .done(response => processSingleContext(response))
  685. .fail(err => {
  686. console.log(err);
  687. $("#loader").css("display", "none");
  688. alert('Something went wrong!');
  689. });
  690. }
  691. //CREATE NEW PAGE FOR SINGLE CONTEXT
  692. function createPage(elem) {
  693. $("#single-context-box").css("display", "block");
  694. var contesto = elem["contesto"];
  695. var titolo_abbreviato = "";
  696. var rif_organico = "";
  697. var tipo_stanza = "";
  698. var stanza = "";
  699. var verso = "";
  700. var pag = "";
  701. var riga = "";
  702. var autore = "";
  703. var titolo = "";
  704. var data_descr = "";
  705. var area_gen = "";
  706. var area_spec = "";
  707. var genere = "";
  708. var curatore = "";
  709. var sigla = "";
  710. var note = "";
  711. var testo_associato = "";
  712. console.log(elem);
  713. if (elem.hasOwnProperty('Titolo Abbreviato')) {
  714. titolo_abbreviato = elem["Titolo Abbreviato"];
  715. }
  716. if (elem.hasOwnProperty('Rif_organico')) {
  717. rif_organico = elem["Rif_organico"];
  718. }
  719. if (elem.hasOwnProperty('tipostanza')) {
  720. var ts = elem["tipostanza"];
  721. tipo_stanza = writeStanza(ts);
  722. }
  723. if (elem.hasOwnProperty('stanza')) {
  724. stanza = elem["stanza"];
  725. }
  726. if (elem.hasOwnProperty('verso')) {
  727. verso = elem["verso"];
  728. }
  729. if (elem.hasOwnProperty('pag')) {
  730. pag = elem["pag"];
  731. }
  732. if (elem.hasOwnProperty('riga')) {
  733. riga = elem["riga"];
  734. }
  735. if (elem.hasOwnProperty('Autore')) {
  736. autore = elem["Autore"];
  737. }
  738. if (elem.hasOwnProperty("Area generica")) {
  739. area_gen = elem["Area generica"];
  740. }
  741. if (elem.hasOwnProperty("Area specifica")) {
  742. area_spec = elem["Area specifica"];
  743. }
  744. if (elem.hasOwnProperty("Data descrittiva")) {
  745. data_descr = elem["Data descrittiva"];
  746. }
  747. if (elem.hasOwnProperty("Genere")) {
  748. genere = elem["Genere"];
  749. }
  750. if (elem.hasOwnProperty("sigla")) {
  751. sigla = elem["sigla"];
  752. }
  753. if (elem.hasOwnProperty('Curatore')) {
  754. curatore = "a cura di " + elem["Curatore"];
  755. }
  756. if (elem.hasOwnProperty('Titolo')) {
  757. titolo = elem["Titolo"];
  758. }
  759. if (elem.hasOwnProperty('nota')) {
  760. note = elem["nota"];
  761. $("#notes_box").css("display", "block");
  762. } else {
  763. $("#notes_box").css("display", "none");
  764. }
  765. if (elem.hasOwnProperty('testo associato')) {
  766. testo_associato = elem["testo associato"];
  767. $("#associated-text-box").css("display", "block");
  768. } else {
  769. $("#associated-text-box").css("display", "none");
  770. }
  771. var title_box = "<p>" + titolo_abbreviato + ", " + rif_organico + ", " + tipo_stanza +
  772. "." + stanza + ", v." + verso + ", " + pag + "." + riga + "</p>";
  773. var add_info = "<p>" + "Autore: " + autore + "<br />" +
  774. "Titolo: " + titolo + "<br />" +
  775. "Titolo abbreviato: " + titolo_abbreviato + "<br />" +
  776. "Riferimenti cronologici: " + data_descr + "<br />" +
  777. "Area generica: " + area_gen + "<br />" +
  778. "Area specifica: " + area_spec + "<br />" +
  779. "Genere: " + genere + "<br />" +
  780. "Curatore: " + curatore + "<br />" +
  781. "Sigla: " + sigla + "<br />" +
  782. "</p>";
  783. var container_div = document.getElementsByClassName('search_params');
  784. var count = container_div.length;
  785. console.log(count);
  786. let highlights = elem['highlights_combined'];
  787. let firstNum = highlights[0];
  788. let ind = parseInt(firstNum);
  789. let arrayStrings = [];
  790. console.log(highlights);
  791. let split_index = [ind];
  792. if (count>0) {
  793. for (var i=1; i<count; i++) {
  794. var hh = highlights[i][0];
  795. var ii = parseInt(hh);
  796. split_index.push(ii);
  797. }
  798. }
  799. split_index.sort(function(a, b){return a-b});
  800. var ll = split_index.length;
  801. var tmp = 0;
  802. for (var j=0; j<split_index.length; j++) {
  803. var num = split_index[j];
  804. var snip = contesto.substring(tmp, num);
  805. tmp = num;
  806. arrayStrings.push(snip);
  807. }
  808. var lastSnip = contesto.substring(split_index[ll-1]);
  809. arrayStrings.push(lastSnip);
  810. console.log(arrayStrings);
  811. var la = arrayStrings.length;
  812. var newString = arrayStrings[0] + "<span class='highlight'>";
  813. for (var x=1; x<arrayStrings.length; x++) {
  814. var stringToAdd = arrayStrings[x].replace(" ", "</span> ");
  815. newString = newString + stringToAdd + "<span class='highlight'>";
  816. }
  817. newString = newString.replace(/\n/g, "<br />");
  818. document.getElementById("context-text").innerHTML = newString;
  819. document.getElementById("context-title").innerHTML = title_box;
  820. document.getElementById("additional_info").innerHTML = add_info;
  821. document.getElementById("notes-text").innerHTML = note;
  822. document.getElementById("associated-text").innerHTML = testo_associato;
  823. }
  824. $(document).on("click", ".deleteCC", function (ev) {
  825. var deleteID = "occ_" + this.id;
  826. const element = document.getElementById(deleteID);
  827. element.remove();
  828. let numb = document.getElementById("search_form").childElementCount;
  829. if (numb < 2) {
  830. $("#cooccorrenze_options").css("display", "none");
  831. $("#inner_altro").css("display", "flex");
  832. $("#inner_lemmatizzato").css("display", "none");
  833. }
  834. });
  835. $(document).on("change", ".flViewBy", function (ev) {
  836. var check_tipo = this.value;
  837. var parent = this.parentElement.parentElement.parentElement.parentElement.parentElement;
  838. var cc = parent.getElementsByClassName("lemmatizzata");
  839. if (check_tipo == "forma") {
  840. cc[0].disabled = true;
  841. cc[0].checked = false;
  842. }
  843. else if (check_tipo == "lemma"){
  844. cc[0].disabled = false;
  845. }
  846. });
  847. $( "#context-title" ).on( "click", function() {
  848. $( "#additional_info" ).toggle( "slow", function() {
  849. // Animation complete.
  850. });
  851. });
  852. $(document).on("click", ".page-item", function (ev) {
  853. $(".page-item").removeClass("active");
  854. var name = this.id;
  855. this.className = "page-item active";
  856. var num = name.replace("getPage_", "");
  857. var page = "pag_" + num;
  858. $("#" + page).css("display", "block");
  859. $(".page:not(#" + page +")").css("display", "none");
  860. });
  861. $(document).on("click", "#prev", function (ev) {
  862. var el = document.getElementsByClassName("page-item active")[0];
  863. var name = el.id;
  864. var n = name.replace("getPage_", "");
  865. var num = parseInt(n) - 1;
  866. if (num < 0) {
  867. alert("No pages found");
  868. } else {
  869. var page = "pag_" + num;
  870. var getPage = "getPage_" + num;
  871. var elPage = document.getElementById(getPage);
  872. if (elPage !== null) {
  873. $(".page-item").removeClass("active");
  874. elPage.classList.add("active");
  875. $("#" + page).css("display", "block");
  876. $(".page:not(#" + page +")").css("display", "none");
  877. }
  878. }
  879. });
  880. $(document).on("click", "#next", function (ev) {
  881. var el = document.getElementsByClassName("page-item active")[0];
  882. var name = el.id;
  883. var n = name.replace("getPage_", "");
  884. var num = parseInt(n) + 1;
  885. if (num < 0) {
  886. alert("No pages found");
  887. } else {
  888. var page = "pag_" + num;
  889. var getPage = "getPage_" + num;
  890. var elPage = document.getElementById(getPage);
  891. if (elPage !== null) {
  892. $(".page-item").removeClass("active");
  893. elPage.classList.add("active");
  894. $("#" + page).css("display", "block");
  895. $(".page:not(#" + page +")").css("display", "none");
  896. }
  897. }
  898. });