mirror of
				https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
				synced 2025-11-04 04:12:45 +00:00 
			
		
		
		
	Enhance pj_analyse
This commit is contained in:
		@@ -47,13 +47,24 @@ class CorpusAnalysisClient {
 | 
				
			|||||||
    this.socket.emit("pj_corpus_analysis_init", this.corpusId);
 | 
					    this.socket.emit("pj_corpus_analysis_init", this.corpusId);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  query(query) {
 | 
					  query(queryStr) {
 | 
				
			||||||
    if (this.displays.query.errorContainer != undefined) {this.displays.query.errorContainer.innerHTML == "";}
 | 
					    if (this.displays.query.errorContainer != undefined) {this.displays.query.errorContainer.innerHTML == "";}
 | 
				
			||||||
    if (this.displays.query != undefined) {this.displays.query.setVisibilityByStatus("waiting");}
 | 
					    if (this.displays.query != undefined) {this.displays.query.setVisibilityByStatus("waiting");}
 | 
				
			||||||
    nopaque.socket.emit("pj_corpus_analysis_query", 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
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  setCallback(type, callback) {
 | 
					  setCallback(type, callback) {
 | 
				
			||||||
 | 
					    // saves callback functions into an object. Key is function type, callback
 | 
				
			||||||
 | 
					    // is the callback function
 | 
				
			||||||
    this.callbacks[type] = callback;
 | 
					    this.callbacks[type] = callback;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										31
									
								
								app/static/js/nopaque.callbacks.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								app/static/js/nopaque.callbacks.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					function querySetup(payload) {
 | 
				
			||||||
 | 
					  // This is called when a query was successfull
 | 
				
			||||||
 | 
					  console.log("Query setup.");
 | 
				
			||||||
 | 
					  console.log(payload);
 | 
				
			||||||
 | 
					  queryResultsDeterminateElement.style.width = "0%";
 | 
				
			||||||
 | 
					  receivedMatchNumElement.innerText = "0";
 | 
				
			||||||
 | 
					  textLookupNumElement.innerText = "0";
 | 
				
			||||||
 | 
					  matchNumElement.innerText = payload.num_matches;
 | 
				
			||||||
 | 
					  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[]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function queryRenderResults(payload) {
 | 
				
			||||||
 | 
					  // This is called when results are transmitted.
 | 
				
			||||||
 | 
					  console.log("CHUNK:", payload.chunk);
 | 
				
			||||||
 | 
					  console.log("RESULTS:", results);
 | 
				
			||||||
 | 
					  if (payload.progress === 100) {
 | 
				
			||||||
 | 
					    queryResultsProgressElement.classList.add("hide");
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  queryResultsDeterminateElement.style.width = `${payload.progress}%`;
 | 
				
			||||||
 | 
					  results.matches.push(...payload.chunk.matches);
 | 
				
			||||||
 | 
					  receivedMatchNumElement.innerText = `${results.matches.length}`;
 | 
				
			||||||
 | 
					  // incorporating new chunk results into full results
 | 
				
			||||||
 | 
					  Object.assign(results.cpos_lookup, payload.chunk.cpos_lookup);
 | 
				
			||||||
 | 
					  Object.assign(results.text_lookup, payload.chunk.text_lookup);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  textLookupNumElement.innerText = `${Object.keys(results.text_lookup).length}`;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -247,7 +247,7 @@ server side -->
 | 
				
			|||||||
  var queryResultsDeterminateElement; // progress bar for recieved query status
 | 
					  var queryResultsDeterminateElement; // progress bar for recieved query status
 | 
				
			||||||
  var queryResultsTableElement;  // table element displaying the query results
 | 
					  var queryResultsTableElement;  // table element displaying the query results
 | 
				
			||||||
  var queryLoadingElement;  // shows progress bar until first results are in
 | 
					  var queryLoadingElement;  // shows progress bar until first results are in
 | 
				
			||||||
  var queryFormElement;  // the quer form
 | 
					  var queryFormElement;  // the query form
 | 
				
			||||||
  var hitsPerPageInputElement;  // value of hits per page (part of query form)
 | 
					  var hitsPerPageInputElement;  // value of hits per page (part of query form)
 | 
				
			||||||
  var contextPerItemElement;  // value of contex per match (part of query form)
 | 
					  var contextPerItemElement;  // value of contex per match (part of query form)
 | 
				
			||||||
  var paginationElements;  // top and button pagination elements
 | 
					  var paginationElements;  // top and button pagination elements
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,11 +5,17 @@
 | 
				
			|||||||
{% block page_content %}
 | 
					{% block page_content %}
 | 
				
			||||||
<div class="col s12">
 | 
					<div class="col s12">
 | 
				
			||||||
  <ul class="collapsible expandable">
 | 
					  <ul class="collapsible expandable">
 | 
				
			||||||
    <li class="active hoverable">
 | 
					    <li class="active">
 | 
				
			||||||
      <div class="collapsible-header">
 | 
					      <!-- <div class="collapsible-header">
 | 
				
			||||||
        <i class="material-icons">search</i>Query
 | 
					        <i class="material-icons">search</i>CQP Query
 | 
				
			||||||
      </div>
 | 
					      </div> -->
 | 
				
			||||||
      <div class="collapsible-body">
 | 
					      <!-- Div element above is part of valid materialize collapsible.
 | 
				
			||||||
 | 
					      Commented out to prevent the user from collapsing it and also to save
 | 
				
			||||||
 | 
					      space -->
 | 
				
			||||||
 | 
					      <div class="collapsible-body" style="padding-top: 10px;
 | 
				
			||||||
 | 
					                                           padding-right: 2rem;
 | 
				
			||||||
 | 
					                                           padding-bottom: 0px;
 | 
				
			||||||
 | 
					                                           padding-left: 2rem;">
 | 
				
			||||||
        <!-- Query form -->
 | 
					        <!-- Query form -->
 | 
				
			||||||
        <form id="query-form">
 | 
					        <form id="query-form">
 | 
				
			||||||
          <div class="row">
 | 
					          <div class="row">
 | 
				
			||||||
@@ -104,8 +110,24 @@
 | 
				
			|||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<script src="{{ url_for('static', filename='js/nopaque.CorpusAnalysisClient.js') }}"></script>
 | 
					<script src="{{ url_for('static', filename='js/nopaque.CorpusAnalysisClient.js') }}">
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					<script src="{{ url_for('static', filename='js/nopaque.callbacks.js') }}">
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
<script>
 | 
					<script>
 | 
				
			||||||
 | 
					  // ###### Defining global variables used in other functions ######
 | 
				
			||||||
 | 
					  var results;  // full JSON object holding match results
 | 
				
			||||||
 | 
					  var queryFormElement;  // the query form
 | 
				
			||||||
 | 
					  var collapsibleElements;  // all collapsibles on site
 | 
				
			||||||
 | 
					  var queryResultsProgressElement;  // Div element holding the progress bar
 | 
				
			||||||
 | 
					  var queryResultsDeterminateElement;  // The progress bar for recieved results
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // ###### Initialize variables ######
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // get collapsibles to alter options of those
 | 
				
			||||||
 | 
					  var collapsibleElements = document.querySelector('.collapsible.expandable');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  var client = undefined;
 | 
					  var client = undefined;
 | 
				
			||||||
  var initDisplay = undefined;
 | 
					  var initDisplay = undefined;
 | 
				
			||||||
  var queryDisplay = undefined;
 | 
					  var queryDisplay = undefined;
 | 
				
			||||||
@@ -115,53 +137,43 @@
 | 
				
			|||||||
  var queryFormElement = document.getElementById("query-form");
 | 
					  var queryFormElement = document.getElementById("query-form");
 | 
				
			||||||
  var queryResultsDeterminateElement = document.getElementById("query-results-determinate");
 | 
					  var queryResultsDeterminateElement = document.getElementById("query-results-determinate");
 | 
				
			||||||
  var queryResultsProgressElement = document.getElementById("query-results-progress");
 | 
					  var queryResultsProgressElement = document.getElementById("query-results-progress");
 | 
				
			||||||
  var receivedMatchNumElement = document.getElementById("received-match-num");
 | 
					  receivedMatchNumElement = document.getElementById("received-match-num");
 | 
				
			||||||
  var matchNumElement = document.getElementById("match-num");
 | 
					  matchNumElement = document.getElementById("match-num");
 | 
				
			||||||
  var textLookupNumElement = document.getElementById("text-lookup-num");
 | 
					  textLookupNumElement = document.getElementById("text-lookup-num");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  var results = undefined;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  document.addEventListener("DOMContentLoaded", () => {
 | 
					  document.addEventListener("DOMContentLoaded", () => {
 | 
				
			||||||
 | 
					    //set accordion of collapsibles to false
 | 
				
			||||||
 | 
					    M.Collapsible.init(collapsibleElements, {accordion: false});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var initModal = M.Modal.init(initDisplayElement, {dismissible: false});
 | 
					    var initModal = M.Modal.init(initDisplayElement, {dismissible: false});
 | 
				
			||||||
    // Init corpus analysis components
 | 
					    // Init corpus analysis components
 | 
				
			||||||
    initDisplay = new CorpusAnalysisDisplay(initDisplayElement);
 | 
					    initDisplay = new CorpusAnalysisDisplay(initDisplayElement);
 | 
				
			||||||
    queryDisplay = new CorpusAnalysisDisplay(queryDisplayElement);
 | 
					    queryDisplay = new CorpusAnalysisDisplay(queryDisplayElement);
 | 
				
			||||||
    client = new CorpusAnalysisClient({{ corpus_id }}, nopaque.socket);
 | 
					    client = new CorpusAnalysisClient({{ corpus_id }}, nopaque.socket);
 | 
				
			||||||
    initModal.open();
 | 
					    initModal.open();
 | 
				
			||||||
 | 
					    // set displays visibilitys and Callback functions
 | 
				
			||||||
    client.setDisplay("init", initDisplay);
 | 
					    client.setDisplay("init", initDisplay);
 | 
				
			||||||
    client.setCallback("init", () => {initModal.close();});
 | 
					    client.setCallback("init", () => {
 | 
				
			||||||
 | 
					      initModal.close();
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
    client.setDisplay("query", queryDisplay);
 | 
					    client.setDisplay("query", queryDisplay);
 | 
				
			||||||
    client.setCallback("query", (payload) => {
 | 
					    client.setCallback("query", (payload) => {
 | 
				
			||||||
      // This is called when a query was successfull
 | 
					      querySetup(payload);
 | 
				
			||||||
      results = {matches: [], cpos_lookup: {}, text_lookup: {}};
 | 
					 | 
				
			||||||
      queryResultsDeterminateElement.style.width = "0%";
 | 
					 | 
				
			||||||
      receivedMatchNumElement.innerText = "0";
 | 
					 | 
				
			||||||
      textLookupNumElement.innerText = "0";
 | 
					 | 
				
			||||||
      matchNumElement.innerText = payload.num_matches;
 | 
					 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    client.setCallback("query_results", (payload) => {
 | 
					    client.setCallback("query_results", (payload) => {
 | 
				
			||||||
      // This is called when results are transmitted.
 | 
					      queryRenderResults(payload);
 | 
				
			||||||
      if (payload.progress === 100) {
 | 
					 | 
				
			||||||
        queryResultsProgressElement.classList.add("hide");
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      queryResultsDeterminateElement.style.width = `${payload.progress}%`;
 | 
					 | 
				
			||||||
      results.matches.push(...payload.chunk.matches);
 | 
					 | 
				
			||||||
      receivedMatchNumElement.innerText = `${results.matches.length}`;
 | 
					 | 
				
			||||||
      Object.assign(results.cpos_lookup, payload.chunk.cpos_lookup);
 | 
					 | 
				
			||||||
      Object.assign(results.text_lookup, payload.chunk.text_lookup);
 | 
					 | 
				
			||||||
      textLookupNumElement.innerText = `${Object.keys(results.text_lookup).length}`;
 | 
					 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Trigger corpus analysis initialization on server side
 | 
					    // Trigger corpus analysis initialization on server side
 | 
				
			||||||
    client.init();
 | 
					    client.init();
 | 
				
			||||||
    queryFormElement.addEventListener("submit", (e) => {
 | 
					    // start a query request on submit
 | 
				
			||||||
 | 
					    queryFormElement.addEventListener("submit", (event) => {
 | 
				
			||||||
      // Prevent page from reloading on submit
 | 
					      // Prevent page from reloading on submit
 | 
				
			||||||
      e.preventDefault();
 | 
					      event.preventDefault();
 | 
				
			||||||
      // Gather query data
 | 
					      // Get query string and send query to server
 | 
				
			||||||
      var queryFormData = new FormData(queryFormElement);
 | 
					      let queryStr = client.getQueryStr(queryFormElement);
 | 
				
			||||||
      var query = queryFormData.get("query-form-query");
 | 
					      client.query(queryStr);
 | 
				
			||||||
      // Send query to server
 | 
					 | 
				
			||||||
      client.query(query);
 | 
					 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
  });
 | 
					  });
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user