mirror of
				https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
				synced 2025-11-03 20:02:47 +00:00 
			
		
		
		
	Update
This commit is contained in:
		@@ -4,24 +4,6 @@ class CorpusAnalysisClient {
 | 
			
		||||
    this.corpusId = corpusId;
 | 
			
		||||
    this.displays = {};
 | 
			
		||||
    this.socket = socket;
 | 
			
		||||
    this.resultList = {}; // why do you save it here? we have a global variable results
 | 
			
		||||
 | 
			
		||||
    // js list options and intialization
 | 
			
		||||
    let displayOptionsData = this.getDisplayOptions(displayOptionsFormElement);
 | 
			
		||||
    let resultListOptions = {page: displayOptionsData["resultsPerPage"],
 | 
			
		||||
      pagination: [{
 | 
			
		||||
        name: "paginationTop",
 | 
			
		||||
        paginationClass: "paginationTop",
 | 
			
		||||
        innerWindow: 8,
 | 
			
		||||
        outerWindow: 1
 | 
			
		||||
      }, {
 | 
			
		||||
        paginationClass: "paginationBottom",
 | 
			
		||||
        innerWindow: 8,
 | 
			
		||||
        outerWindow: 1
 | 
			
		||||
      }],
 | 
			
		||||
      valueNames: ["titles", "lc", "c", "rc", {data: ["index"]}],
 | 
			
		||||
      item: `<span></span>`};
 | 
			
		||||
      this.resultList = new ResultList("result-list", resultListOptions);
 | 
			
		||||
 | 
			
		||||
    // socket on event fpr corpous analysis initialization
 | 
			
		||||
    socket.on("pj_corpus_analysis_init", (response) => {
 | 
			
		||||
@@ -97,31 +79,9 @@ class CorpusAnalysisClient {
 | 
			
		||||
    if (this.displays.query != undefined)  {
 | 
			
		||||
      this.displays.query.setVisibilityByStatus("waiting");
 | 
			
		||||
    }
 | 
			
		||||
    this.resultList.clear(); // empty list for new query
 | 
			
		||||
    nopaque.socket.emit("pj_corpus_analysis_query", queryStr);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  getQueryStr(queryFormElement) {
 | 
			
		||||
    // gets query
 | 
			
		||||
    let queryFormData;
 | 
			
		||||
    let queryStr;
 | 
			
		||||
    queryFormData = new FormData(queryFormElement);
 | 
			
		||||
    queryStr = queryFormData.get("query-form-query");
 | 
			
		||||
    return queryStr
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  getDisplayOptions(displayOptionsFormElement) {
 | 
			
		||||
    // gets display options parameters
 | 
			
		||||
    let displayOptionsFormData
 | 
			
		||||
    let displayOptionsData;
 | 
			
		||||
    displayOptionsFormData = new FormData(displayOptionsFormElement);
 | 
			
		||||
    displayOptionsData = {"resultsPerPage": displayOptionsFormData.get("display-options-form-results_per_page"),
 | 
			
		||||
                          "resultsContex": displayOptionsFormData.get("display-options-form-result_context"),
 | 
			
		||||
                          "expertMode": displayOptionsFormData.get("display-options-form-expert_mode")};
 | 
			
		||||
    console.log(displayOptionsData);
 | 
			
		||||
    return displayOptionsData
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  setCallback(type, callback) {
 | 
			
		||||
    // saves callback functions into an object. Key is function type, callback
 | 
			
		||||
    // is the callback function
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								app/static/js/nopaque.Results.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								app/static/js/nopaque.Results.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
class Results {
 | 
			
		||||
  constructor(results, resultsList) {
 | 
			
		||||
  this.resultsJSON = results;
 | 
			
		||||
  this.resultsList = resultsList;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -102,7 +102,7 @@ function helperSendQuery(queryData) {
 | 
			
		||||
    }],
 | 
			
		||||
    valueNames: ["titles", "lc", "c", "rc", {data: ["index"]}],
 | 
			
		||||
    item: `<span></span>`};
 | 
			
		||||
    resultList = new ResultList('result-list', resultListOptions);
 | 
			
		||||
    resultList = new ResultsList('result-list', resultListOptions);
 | 
			
		||||
    resultList.clear(); // empty list for new query
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -11,12 +11,11 @@ function querySetup(payload) {
 | 
			
		||||
  textLookupCountElement.innerText = "0";
 | 
			
		||||
  matchCountElement.innerText = payload.match_count;
 | 
			
		||||
  // always re initializes results to delete old results from it
 | 
			
		||||
  results = {};
 | 
			
		||||
  results["matches"] = [];  // list of all c with lc and rc
 | 
			
		||||
  results["cpos_lookup"] = {};  // object contains all cpos as key value pair
 | 
			
		||||
  results["text_lookup"] = {};  // same as above for all text ids
 | 
			
		||||
  results["match_count"] = payload.match_count;
 | 
			
		||||
  results["query"] = client.getQueryStr(queryFormElement);
 | 
			
		||||
  results.resultsJSON["matches"] = [];  // list of all c with lc and rc
 | 
			
		||||
  results.resultsJSON["cpos_lookup"] = {};  // object contains all cpos as key value pair
 | 
			
		||||
  results.resultsJSON["text_lookup"] = {};  // same as above for all text ids
 | 
			
		||||
  results.resultsJSON["match_count"] = payload.match_count;
 | 
			
		||||
  results.resultsJSON["query"] = getQueryStr(queryFormElement);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function queryRenderResults(payload) {
 | 
			
		||||
@@ -29,27 +28,32 @@ function queryRenderResults(payload) {
 | 
			
		||||
    queryResultsExportElement.classList.remove("disabled");
 | 
			
		||||
    activateInspect();
 | 
			
		||||
  }
 | 
			
		||||
  if (payload.chunk.cpos_ranges == true) {
 | 
			
		||||
    results.resultsJSON["cpos_ranges"] = true;
 | 
			
		||||
  } else {
 | 
			
		||||
    results.resultsJSON["cpos_ranges"] = false;
 | 
			
		||||
  }
 | 
			
		||||
  // update progress bar
 | 
			
		||||
  queryResultsDeterminateElement.style.width = `${payload.progress}%`;
 | 
			
		||||
  // 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.matches.length}});
 | 
			
		||||
    resultItems.push({...match, ...{"index": index + results.resultsJSON.matches.length}});
 | 
			
		||||
  }
 | 
			
		||||
  client.resultList.add(resultItems, (items) => {
 | 
			
		||||
  resultsList.add(resultItems, (items) => {
 | 
			
		||||
    for (let item of items) {
 | 
			
		||||
      item.elm = client.resultList.createResultRowElement(item, payload.chunk);
 | 
			
		||||
      item.elm = resultsList.createResultRowElement(item, payload.chunk);
 | 
			
		||||
    }
 | 
			
		||||
    client.resultList.update();
 | 
			
		||||
    resultsList.update();
 | 
			
		||||
    changeContext(); // sets lr context on first result load
 | 
			
		||||
  });
 | 
			
		||||
  // incorporating new chunk results into full results
 | 
			
		||||
  results.matches.push(...payload.chunk.matches);
 | 
			
		||||
  Object.assign(results.cpos_lookup, payload.chunk.cpos_lookup);
 | 
			
		||||
  Object.assign(results.text_lookup, payload.chunk.text_lookup);
 | 
			
		||||
  results.resultsJSON.matches.push(...payload.chunk.matches);
 | 
			
		||||
  Object.assign(results.resultsJSON.cpos_lookup, payload.chunk.cpos_lookup);
 | 
			
		||||
  Object.assign(results.resultsJSON.text_lookup, payload.chunk.text_lookup);
 | 
			
		||||
  // show user current and total match count
 | 
			
		||||
  receivedMatchCountElement.innerText = `${results.matches.length}`;
 | 
			
		||||
  textLookupCountElement.innerText = `${Object.keys(results.text_lookup).length}`;
 | 
			
		||||
  console.log("Results recieved:", results);
 | 
			
		||||
  receivedMatchCountElement.innerText = `${results.resultsJSON.matches.length}`;
 | 
			
		||||
  textLookupCountElement.innerText = `${Object.keys(results.resultsJSON.text_lookup).length}`;
 | 
			
		||||
  console.log("Results recieved:", results.resultsJSON);
 | 
			
		||||
}
 | 
			
		||||
@@ -118,7 +118,7 @@ RessourceList.options = {
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ResultList extends List {
 | 
			
		||||
class ResultsList extends List {
 | 
			
		||||
 | 
			
		||||
  createResultRowElement(item, chunk) {
 | 
			
		||||
    let values, cpos, token, matchRowElement, lcCellElement, hitCellElement, rcCellElement, textTitlesCellElement, matchNrElement, lc, c, rc;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,28 @@
 | 
			
		||||
// ###### Helper functions ######
 | 
			
		||||
 | 
			
		||||
// get query as string from form Element
 | 
			
		||||
function getQueryStr(queryFormElement) {
 | 
			
		||||
  // gets query
 | 
			
		||||
  let queryFormData;
 | 
			
		||||
  let queryStr;
 | 
			
		||||
  queryFormData = new FormData(queryFormElement);
 | 
			
		||||
  queryStr = queryFormData.get("query-form-query");
 | 
			
		||||
  return queryStr
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// get display options from display options form element
 | 
			
		||||
function getDisplayOptions(displayOptionsFormElement) {
 | 
			
		||||
  // gets display options parameters
 | 
			
		||||
  let displayOptionsFormData
 | 
			
		||||
  let displayOptionsData;
 | 
			
		||||
  displayOptionsFormData = new FormData(displayOptionsFormElement);
 | 
			
		||||
  displayOptionsData = {"resultsPerPage": displayOptionsFormData.get("display-options-form-results_per_page"),
 | 
			
		||||
                        "resultsContex": displayOptionsFormData.get("display-options-form-result_context"),
 | 
			
		||||
                        "expertMode": displayOptionsFormData.get("display-options-form-expert_mode")};
 | 
			
		||||
  console.log(displayOptionsData);
 | 
			
		||||
  return displayOptionsData
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ###### Download results functions ######
 | 
			
		||||
// TODO: Maybe write these as class functions? For this maybe create a result class
 | 
			
		||||
 | 
			
		||||
@@ -13,7 +38,7 @@ function createDownloadFilename() {
 | 
			
		||||
  today = new Date();
 | 
			
		||||
  currentDate = today.getUTCFullYear() + '-' + (today.getUTCMonth() +1) + '-' + today.getUTCDate();
 | 
			
		||||
  currentTime = today.getUTCHours() + ":" + today.getUTCMinutes() + ":" + today.getUTCSeconds();
 | 
			
		||||
  safeFilename = results["query"].replace(/[^a-z0-9_-]/gi, "_");
 | 
			
		||||
  safeFilename = results.resultsJSON["query"].replace(/[^a-z0-9_-]/gi, "_");
 | 
			
		||||
  resultFilename = "UTC-" + currentDate + "_" + currentTime + "_" + safeFilename;
 | 
			
		||||
  return resultFilename
 | 
			
		||||
}
 | 
			
		||||
@@ -23,7 +48,7 @@ function downloadJSONRessource(resultFilename) {
 | 
			
		||||
  let dataStr;
 | 
			
		||||
  let downloadElement;
 | 
			
		||||
  // stringify JSON object for json download
 | 
			
		||||
  dataStr = JSON.stringify(results, undefined, "\t"); // use tabs to save some space
 | 
			
		||||
  dataStr = JSON.stringify(results.resultsJSON, undefined, "\t"); // use tabs to save some space
 | 
			
		||||
  // get downloadResultsElement
 | 
			
		||||
  downloadElement = document.getElementById("download-results-json");
 | 
			
		||||
  // start actual download
 | 
			
		||||
@@ -57,32 +82,33 @@ function activateInspect(progress) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//gets result cpos infos for one dataIndex to send back to the server
 | 
			
		||||
function inspect(dataIndex) {
 | 
			
		||||
function inspect(dataIndex, socket) {
 | 
			
		||||
  console.log("Inspect!");
 | 
			
		||||
  console.log(result["matches"][dataIndex]["c"]);
 | 
			
		||||
  console.log(results.resultsJSON.matches[dataIndex].c);
 | 
			
		||||
  contextModal.open();
 | 
			
		||||
  nopaque.socket.emit("inspect_match", {"cpos": result["matches"][dataIndex]["c"]});
 | 
			
		||||
  socket.emit("pj_inspect_match",
 | 
			
		||||
                      {"payload": {"cpos": results.resultsJSON.matches[dataIndex].c} });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function showMatchContext(message) {
 | 
			
		||||
function showMatchContext(payload) {
 | 
			
		||||
  let contextResultsElement;
 | 
			
		||||
  let sentenceElement
 | 
			
		||||
  let token;
 | 
			
		||||
  let tokenElement;
 | 
			
		||||
  console.log("###### match_context ######");
 | 
			
		||||
  console.log("Incoming data:", message);
 | 
			
		||||
  console.log("Incoming data:", payload);
 | 
			
		||||
  contextResultsElement = document.getElementById("context-results");
 | 
			
		||||
  contextResultsElement.innerHTML = "<p> </p>";
 | 
			
		||||
  document.getElementById("context-modal-loading").classList.add("hide");
 | 
			
		||||
  document.getElementById("context-modal-ready").classList.remove("hide");
 | 
			
		||||
 | 
			
		||||
  for (let [key, value] of Object.entries(message['context_s_cpos'])) {
 | 
			
		||||
  for (let [key, value] of Object.entries(payload['context_s_cpos'])) {
 | 
			
		||||
    sentenceElement = document.createElement("p");
 | 
			
		||||
    for (let cpos of value) {
 | 
			
		||||
      token = message["cpos_lookup"][cpos];
 | 
			
		||||
      token = payload["cpos_lookup"][cpos];
 | 
			
		||||
      tokenElement = document.createElement("span");
 | 
			
		||||
      tokenElement.classList.add("token");
 | 
			
		||||
      if (message["match_cpos_list"].includes(cpos)) {
 | 
			
		||||
      if (payload["match_cpos_list"].includes(cpos)) {
 | 
			
		||||
        tokenElement.classList.add("bold");
 | 
			
		||||
        tokenElement.classList.add("light-green");
 | 
			
		||||
      }
 | 
			
		||||
@@ -90,7 +116,7 @@ function showMatchContext(message) {
 | 
			
		||||
      tokenElement.innerText = token["word"];
 | 
			
		||||
      var expertModeSwitchElement = document.getElementById("expert-mode-switch");
 | 
			
		||||
      if (expertModeSwitchElement.checked) {
 | 
			
		||||
        expertModeOn([tokenElement], message);
 | 
			
		||||
        expertModeOn([tokenElement], payload);
 | 
			
		||||
      }
 | 
			
		||||
      sentenceElement.append(tokenElement);
 | 
			
		||||
      sentenceElement.append(document.createTextNode(" "));
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user