class Results { constructor(data, jsList , metaData) { this.data = data; this.jsList = jsList; this.metaData = metaData this.resultsData = new Data(); this.subResultsData = new Data(); } clearAll() { this.jsList.clear(); this.jsList.update(); this.data.init(); this.metaData.init(); this.resultsData.init() this.subResultsData.init(); } } class Data { // Sets empty object structure. Also usefull to delete old results. // matchCount default is 0 init(matchCount = 0, type = "results") { this.matches = []; // list of all c with lc and rc this.cpos_lookup = {}; // object contains all this key value pair this.text_lookup = {}; // same as above for all text ids this.match_count = matchCount; this.corpus_type = 'results'; this.query = ''; } addData(jsonData, key=null) { if (key !== null) { Object.assign(this[key], jsonData); } else if (key === null) { Object.assign(this, jsonData) } } // get query as string from form Element getQueryStr(queryFormElement) { // gets query let queryFormData; let queryStr; queryFormData = new FormData(queryFormElement); queryStr = queryFormData.get('query-form-query'); this["query"] = queryStr; } // function creates a unique and safe filename for the download createDownloadFilename(suffix) { let today; let currentDate; let currentTime; let safeFilename; let resultFilename; // get and create metadata today = new Date(); currentDate = `${today.getUTCFullYear()}` + `-${(today.getUTCMonth() + 1)}` + `-${today.getUTCDate()}`; currentTime = `${today.getUTCHours()}h` + `${today.getUTCMinutes()}m` + `${today.getUTCSeconds()}s`; safeFilename = this.query.replace(/[^a-z0-9_-]/gi, "_"); resultFilename = `UTC-${currentDate}_${currentTime}_${safeFilename}_${suffix}`; return resultFilename } // Function to download data as Blob created from string // should be private but that is not yet a feature of javascript 08.04.2020 download(downloadElement, dataStr, filename, type, filenameSlug) { console.log('Start Download!'); let file; filename += filenameSlug; file = new Blob([dataStr], {type: type}); var url = URL.createObjectURL(file); downloadElement.href = url; downloadElement.download = filename; } // function to download the results as JSON downloadJSONRessource(resultFilename, downloadData, downloadElement) { let dataStr; // stringify JSON object for json download // use tabs to save some space dataStr = JSON.stringify(downloadData, undefined, "\t"); // start actual download this.download(downloadElement, dataStr, resultFilename, "text/json", ".json") } // create results data either from all results or from al lmarked sub results createResultsData(type) { // deactivate inspect, because cqp server cannot handle multiple requests results.jsList.deactivateInspect(); activateInspectInteraction.setCallback("noCheck", results.jsList.deactivateInspect, results.jsList); // set flag that results are being created to avoid reactivation of // sub results creation if marked matches are changed resultCreationRunning = true; console.log(resultCreationRunning); if (type === "sub-results") { resultsCreateElement.classList.add("disabled"); // cqp server cannot handle more than one request at a time. Thus we deactivate the resultsCreateElement let tmp = [...results.jsList.addToSubResultsIdsToShow].sort(function(a, b){return a-b}); let dataIndexes = []; tmp.forEach((index) => dataIndexes.push(index - 1)); results.jsList.getMatchWithContext(dataIndexes, "sub-results"); } else if (type === "results") { subResultsCreateElement.classList.add("disabled"); // cqp server cannot handle more than one request at a time. Thus we deactivate the subResultsCreateElement let dataIndexes = [...Array(results.data.match_count).keys()]; results.jsList.getMatchWithContext(dataIndexes, "results"); } } } class MetaData { // Sets empty object structure when no input is given. // if json object like input is given class fields are created from this init(json = {}) { Object.assign(this, json); } } export {Results, Data, MetaData};