// This callback is called on a socket.on "corpus_analysis_send_meta_data". // Handels incoming corpus metadata function recvMetaData(payload) { results.metaData.init(payload) console.log("Metada recieved:", results.metaData); } // This callback is called in socket.on "corpus_analysis_get_match_with_full_context" but // only if the response.type is "sub-results". // Saves the incoming inspect match results into results.subResultsData. function saveSubResultsChoices(response) { console.log("Recieving results for export."); if (response.type === "sub-results") { results.subResultsData.init(); results.subResultsData.matches.push(...response.payload.matches); results.subResultsData.addData(response.payload.cpos_lookup, "cpos_lookup"); results.subResultsData.addData(response.payload.text_lookup, "text_lookup"); results.subResultsData.addData(results.metaData); results.subResultsData.query = results.data.query; results.subResultsData.corpus_type = response.type; results.subResultsData.match_count = [...response.payload.matches].length; results.subResultsData.cpos_ranges = response.payload.cpos_ranges; // hides create element after all results are revieved subResultsCreateElement.classList.add("hide"); // shows export element after create element hs been hidden subResultsExportElement.classList.remove("hide", "btn-flat"); subResultsExportElement.classList.add("pulse", "btn-small"); setTimeout(() => { subResultsExportElement.classList.remove("pulse", "btn-small"); subResultsExportElement.classList.add("btn-flat"); clearTimeout(); }, 3000) // Resets the subResultsCreateElement (removing spinner with setting innerText) subResultsCreateElement.innerText = "Create Sub-Results"; subResultsCreateElement.insertAdjacentHTML("beforeend", `build`); // reactivate resultsCreateElement resultsCreateElement.classList.remove("disabled"); } else if (response.type === "results") { results.resultsData.init(); results.resultsData.matches.push(...response.payload.matches); results.resultsData.addData(response.payload.cpos_lookup, "cpos_lookup"); results.resultsData.addData(response.payload.text_lookup, "text_lookup"); results.resultsData.addData(results.metaData); results.resultsData.query = results.data.query; results.resultsData.corpus_type = response.type; results.resultsData.match_count = [...response.payload.matches].length; results.resultsData.cpos_ranges = response.payload.cpos_ranges; // hides create element after all results are revieved resultsCreateElement.classList.add("hide"); // shows export element after create element hs been hidden resultsExportElement.classList.remove("hide", "btn-flat"); resultsExportElement.classList.add("pulse", "btn-small"); setTimeout(() => { resultsExportElement.classList.remove("pulse", "btn-small"); resultsExportElement.classList.add("btn-flat"); clearTimeout(); }, 3000) // Resets the resultsCreateElement (removing spinner with setting innerText) resultsCreateElement.innerText = "Create Results"; resultsCreateElement.insertAdjacentHTML("beforeend", `build`); // reactivate subResultsCreateElement subResultsCreateElement.classList.remove("disabled"); } // reactivate inspect results.jsList.activateInspect(); activateInspectInteraction.setCallback("noCheck", results.jsList.activateInspect, results.jsList); // set resultCreationRunning to flase resultCreationRunning = false; } // This callback is called on socket.on "query". // Does some hiding, showing disabling etc. function querySetup(payload) { // some hiding and resetting let textarea = subResultsIdListElement.getElementsByTagName("textarea")[0]; textarea.innerText = ""; M.textareaAutoResize(textarea); nrMarkedMatches.innerText = 0; results.jsList.addToSubResultsStatus = {}; results.jsList.addToSubResultsIdsToShow = new Set(); resultsExportElement.classList.add("disabled"); addToSubResultsElement.setAttribute("disabled", ""); queryResultsDeterminateElement.style.width = "0%"; queryResultsProgressElement.classList.remove("hide"); queryResultsUserFeedbackElement.classList.remove("hide"); resultsCreateElement.classList.add("disabled"); resultsCreateElement.classList.remove("hide"); resultsExportElement.classList.add("hide"); // some initial values receivedMatchCountElement.innerText = "0"; textLookupCountElement.innerText = "0"; matchCountElement.innerText = payload.match_count; textTitlesElement.innterText = ""; // always re initializes results to delete old results from it // this has to be done here again because the last chunk from old results was still being recieved results.clearAll() // Get query string again results.data.getQueryStr(queryFormElement); results.data.match_count = payload.match_count; } // This callback is called on socket.on "query_results" // this handels the incoming result chunks function queryRenderResults(payload, imported=false) { let resultItems; // array of built html result items row element // This is called when results are transmitted and being recieved console.log("Current recieved chunk:", payload.chunk); if (payload.chunk.cpos_ranges == true) { results.data["cpos_ranges"] = true; } else { results.data["cpos_ranges"] = false; } // building the result list js list from incoming chunk resultItems = []; // list for holding every row item // get infos for full match row for (let [index, match] of payload.chunk.matches.entries()) { resultItems.push({...match, ...{"index": index + results.data.matches.length}}); } if (!imported) { // update progress bar queryResultsDeterminateElement.style.width = `${payload.progress}%`; results.jsList.add(resultItems, (items) => { for (let item of items) { item.elm = results.jsList.createResultRowElement(item, payload.chunk); } helperQueryRenderResults(payload); if (progress === 100) { resultsCreateElement.classList.remove("disabled"); queryResultsProgressElement.classList.add("hide"); queryResultsUserFeedbackElement.classList.add("hide"); resultsExportElement.classList.remove("disabled"); addToSubResultsElement.removeAttribute("disabled"); // inital expert mode check and sub results activation results.jsList.activateInspect(); if (addToSubResultsElement.checked) { results.jsList.activateAddToSubResults(); } if (expertModeSwitchElement.checked) { results.jsList.expertModeOn("query-display"); } } }); } else if (imported) { results.jsList.add(resultItems, (items) => { for (let item of items) { item.elm = results.jsList.createResultRowElement(item, payload.chunk, true); } helperQueryRenderResults(payload); progress = 100; results.jsList.activateInspect(); if (expertModeSwitchElement.checked) { results.jsList.expertModeOn("query-display"); } }); } } function helperQueryRenderResults (payload) { // updating table on finished item creation callback via createResultRowElement results.jsList.update(); results.jsList.changeContext(); // sets lr context on first result load // incorporating new chunk results into full results results.data.matches.push(...payload.chunk.matches); results.data.addData(payload.chunk.cpos_lookup, "cpos_lookup"); results.data.addData(payload.chunk.text_lookup, "text_lookup"); // complete metaData // results.metaData.add(); // show user current and total match count receivedMatchCountElement.innerText = `${results.data.matches.length}`; textLookupCountElement.innerText = `${Object.keys(results.data.text_lookup).length}`; let titles = new Array(); for (let [key, value] of Object.entries(results.data.text_lookup)) { titles.push(`${value.title} (${value.publishing_year})`); }; textTitlesElement.innerText = `${titles.join(", ")}`; console.log("Results recieved:", results.data); // upate progress status progress = payload.progress; // global declaration }