class Results { constructor(data, jsList , metaData) { this.data = data; this.jsList = jsList; this.metaData = metaData this.subResultsData = new Data(); } clearAll() { this.jsList.clear(); this.jsList.update(); this.data.init(); this.metaData.init(); this.subResultsData.init(); } } class Data { // Sets empty object structure. Also usefull to delete old results. // matchCount default is 0 init(matchCount = 0) { 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") } // createSubResultsData from subResultsTmpData createSubResultsData() { let tmp = [...results.jsList.addToSubResultsIdsToShow].sort(function(a, b){return a-b}); let dataIndexes = []; tmp.forEach((index) => dataIndexes.push(index - 1)); console.log(dataIndexes); results.jsList.getMatchWithContext(dataIndexes, "sub-results"); // TODO: save incoming matche infos with saveSubResultsChoices. // TODO: trigger this function on dl btn click and seta flag that it has run to avoid double execution // also set this flag to false if addToSubResultsIdsToShow has been altered } } 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); } }