Add switch to download full context results or not.

This commit is contained in:
Stephan Porada 2020-09-15 17:18:22 +02:00
parent 27f40b98a3
commit c0472eb6c5
5 changed files with 123 additions and 8 deletions

View File

@ -114,6 +114,8 @@ class Client {
* Requests results data either for, 'full-results', 'sub-results' or
* 'inspect-results' (resultsType).
* Gets full results for evere provided dataIndex (one match).
* Full results means with full context. So the Client has to request all
* matches from the server again!
**/
getResultsData(resultsType, dataIndexes, results) {
let tmp_first_cpos = [];
@ -129,6 +131,65 @@ class Client {
last_cpos: tmp_last_cpos,});
}
//
getResultsDataWithoutContext(resultsType, dataIndexes, results, resultsList) {
let objectKey = '';
if (resultsType === 'full-results') {
console.info('Saving full-results data without full context.');
objectKey = 'fullResultsData';
} else if (resultsType === 'sub-results') {
console.info('Saving sub-results data without full context.');
objectKey = 'subResultsData';
}
// Get matches from results.data.
let matches = [];
let cpos = [];
let match;
for (let index of dataIndexes) {
match = results.data.matches[index]
matches.push(match)
// Get cpos from match.
let {lc, c, rc} = resultsList.helperCreateCpos(results.data.cpos_ranges,
match);
cpos.push(...lc);
cpos.push(...c);
cpos.push(...rc);
}
// Get cpos_lookups from cposes.
let cpos_lookup = {};
let single_lookup = {};
let textIds = new Set;
for (let single_cpos of cpos) {
single_lookup[single_cpos] = results.data.cpos_lookup[single_cpos];
textIds.add(single_lookup[single_cpos].text);
Object.assign(cpos_lookup, single_lookup);
}
let text = {};
let text_lookup = {};
for (let id of textIds) {
text[id] = results.data.text_lookup[id];
Object.assign(text_lookup, text);
}
/**
* Save the data from results.dat either in results.fullResultsData or
* results.subResultsData.
*/
results[objectKey].init();
results[objectKey].matches.push(...matches);
results[objectKey].addData(cpos_lookup, "cpos_lookup");
results[objectKey].addData(text_lookup, "text_lookup");
results[objectKey].addData(results.metaData);
results[objectKey].query = results.data.query;
results[objectKey].corpus_type = resultsType;
results[objectKey].match_count = matches.length;
results[objectKey].cpos_ranges = results.data.cpos_ranges;
results[objectKey].fullContext = false;
console.info('Results data without context has been saved.', results);
this.isBusy = false;
this.notifyView('results-data-recieved', {type: resultsType,
results: results});
}
}

View File

@ -71,10 +71,16 @@ function saveQueryData() {
}
function getResultsData() {
let [resultsType, dataIndexes, client, results, rest] = arguments;
let [resultsType, dataIndexes, resultsList, client, results, rest] = arguments;
client.isBusy = true;
client.notifyView('results-data-recieving');
client.getResultsData(resultsType, dataIndexes, results);
if (resultsList.exportFullInspectContext.checked) {
console.log('Get with full context');
client.getResultsData(resultsType, dataIndexes, results);
} else {
client.getResultsDataWithoutContext(resultsType, dataIndexes, results,
resultsList);
}
}
function saveResultsData() {
@ -100,6 +106,7 @@ function saveResultsData() {
results[objectKey].corpus_type = type;
results[objectKey].match_count = [...payload.matches].length;
results[objectKey].cpos_ranges = payload.cpos_ranges;
results[objectKey].fullContext = true;
console.info('Results data has been saved.', results);
client.isBusy = false;
client.notifyView('results-data-recieved', {type: type,

View File

@ -179,7 +179,8 @@ function recieveViewNotification(type, client) {
console.info('Client getting full results for export.');
// execute callback or functions
client.eventListeners[type].executeCallback([event.detail.resultsType,
event.detail.dataIndexes],
event.detail.dataIndexes,
event.detail.resultsList],
caseIdentifier);
break
default:

View File

@ -245,6 +245,7 @@ document.addEventListener("DOMContentLoaded", () => {
'#show-meta-data',
'#sub-results-create',
'#sub-results-export',
'#export-full-inspect-context',
]);
/**
@ -322,6 +323,19 @@ document.addEventListener("DOMContentLoaded", () => {
}
};
/**
* Checks if resultsList.exportFullInspectContext switch is changed.#
* If it has been changed reset all Download buttons.
*/
resultsList.exportFullInspectContext.onchange = (event) => {
// Hide all download buttons.
resultsList.fullResultsExport.classList.toggle('hide', true);
resultsList.subResultsExport.classList.toggle('hide', true);
// Show result create buttons.
resultsList.fullResultsCreate.classList.toggle('hide', false);
resultsList.subResultsCreate.classList.toggle('hide', false);
}
/**
* The following event listeners are handeling the data export.
* 1. Create full-results
@ -338,7 +352,9 @@ document.addEventListener("DOMContentLoaded", () => {
loadingSpinnerHTML);
let dataIndexes = [...Array(results.data.match_count).keys()];
resultsList.notifyClient('get-results', { resultsType: 'full-results',
dataIndexes: dataIndexes});
dataIndexes: dataIndexes,
resultsList: resultsList,
});
}
// 2. Add events for sub-results create
resultsList.subResultsCreate.onclick = (event) => {
@ -351,14 +367,20 @@ document.addEventListener("DOMContentLoaded", () => {
resultsList.subResultsCreate.insertAdjacentHTML('afterbegin',
loadingSpinnerHTML);
resultsList.notifyClient('get-results', { resultsType: 'sub-results',
dataIndexes: dataIndexes});
dataIndexes: dataIndexes,
resultsList: resultsList,
});
}
// 3. Open download modal when full results export button is pressed
resultsList.fullResultsExport.onclick = (event) => {
resultsList.queryResultsDownloadModal.open();
// add onclick to download JSON button and download the file
resultsList.downloadResultsJson.onclick = (event) => {
let filename = results.fullResultsData.createDownloadFilename('full-results');
let suffix = 'full-results'
if (resultsList.exportFullInspectContext.checked) {
suffix += '_full-context';
}
let filename = results.fullResultsData.createDownloadFilename(suffix);
results.fullResultsData.addData(results.metaData);
results.fullResultsData.downloadJSONRessource(filename,
results.fullResultsData,
@ -369,7 +391,11 @@ document.addEventListener("DOMContentLoaded", () => {
resultsList.queryResultsDownloadModal.open();
// add onclick to download JSON button and download the file
resultsList.downloadResultsJson.onclick = (event) => {
let filename = results.subResultsData.createDownloadFilename('sub-results');
let suffix = 'sub-results'
if (resultsList.exportFullInspectContext.checked) {
suffix += '_full-context';
}
let filename = results.subResultsData.createDownloadFilename(suffix);
results.subResultsData.addData(results.metaData);
results.subResultsData.downloadJSONRessource(filename,
results.subResultsData,
@ -380,7 +406,7 @@ document.addEventListener("DOMContentLoaded", () => {
resultsList.queryResultsDownloadModal.open();
// add onclick to download JSON button and download the file
resultsList.downloadResultsJson.onclick = (event) => {
let filename = results.subResultsData.createDownloadFilename('inspect-results');
let filename = results.subResultsData.createDownloadFilename('inspect-results_full-context');
results.subResultsData.addData(results.metaData);
results.subResultsData.downloadJSONRessource(filename,
results.inspectResultsData,

View File

@ -5,6 +5,26 @@ the selected sub results.-->
<h6 style="margin-top: 0px;">Export</h6>
<div class="divider" style="margin-bottom: 10px;"></div>
<div class="row">
<div class="col s12" style="line-height: 38px;">
<div class="col s8">
Full context
<a class="tooltipped black-text" data-tooltip="Check this switch to
create results for the download with full context. Creating
results like this will take much longer but you will be able to
inspect your matches in detail when you import them into the query
results viewer.">
<i class="material-icons tiny">info_outline</i>
</a>
</div>
<div class="class col s4">
<div class="switch">
<label style="margin-left: -20px;">
<input type="checkbox" id="export-full-inspect-context">
<span class="lever"></span>
</label>
</div>
</div>
</div>
<div class="col s12">
<button class="waves-effect
waves-light