nopaque/web/app/static/js/nopaque.CorpusAnalysisClient.js

206 lines
6.8 KiB
JavaScript
Raw Normal View History

class CorpusAnalysisClient {
constructor(corpusId, socket) {
this.callbacks = {};
this.corpusId = corpusId;
this.displays = {};
this.socket = socket;
2020-04-01 11:44:06 +00:00
2020-04-23 08:37:44 +00:00
// socket on event for corpous analysis initialization
2020-04-06 13:28:58 +00:00
socket.on("corpus_analysis_init", (response) => {
let errorText;
2020-03-29 18:33:00 +00:00
if (response.code === 200) {
2020-04-06 13:28:58 +00:00
console.log(`corpus_analysis_init: ${response.code} - ${response.msg}`);
2020-04-01 11:44:06 +00:00
if (this.callbacks.init != undefined) {
this.callbacks.init(response.payload);
this.callbacks.get_metadata(); // should hold the function getMetaData
2020-04-01 11:44:06 +00:00
}
if (this.displays.init != undefined) {
this.displays.init.setVisibilityByStatus("success");
}
} else {
2020-03-29 18:33:00 +00:00
errorText = `Error ${response.code} - ${response.msg}`;
2020-04-01 11:44:06 +00:00
if (this.displays.init.errorContainer != undefined) {
2020-04-23 08:37:44 +00:00
this.displays.init.errorContainer.innerHTML = `<p class="red-text">` +
`<i class="material-icons tiny">error</i> ${errorText}</p>`;
2020-04-01 11:44:06 +00:00
}
if (this.displays.init != undefined) {
this.displays.init.setVisibilityByStatus("error");
}
2020-04-06 13:28:58 +00:00
console.error(`corpus_analysis_init: ${errorText}`);
}
});
// socket on event for recieving meta
socket.on('corpus_analysis_send_meta_data', (response) => {
let errorText;
if (response.code === 200) {
console.log(`corpus_analysis_send_meta_data: ${response.code} - ${response.msg} - ${response.desc}`);
if (this.callbacks.recv_meta_data != undefined) {
this.callbacks.recv_meta_data(response.payload);
}
} else {
errorText = `Error ${response.code} - ${response.msg}`;
if (this.displays.init.errorContainer != undefined) {
this.displays.init.errorContainer.innerHTML = `<p class="red-text">` +
`<i class="material-icons tiny">error</i> ${errorText}</p>`;
}
if (this.displays.init != undefined) {
this.displays.init.setVisibilityByStatus("error");
}
console.error(`corpus_analysis_send_meta_data: ${errorText}`);
}
});
2020-04-01 11:44:06 +00:00
// socket on event for recieveing query results
2020-04-06 13:28:58 +00:00
socket.on("corpus_analysis_query", (response) => {
let errorText;
2020-03-29 17:40:29 +00:00
if (response.code === 200) {
2020-04-06 13:28:58 +00:00
console.log(`corpus_analysis_query: ${response.code} - ${response.msg}`);
2020-04-01 11:44:06 +00:00
if (this.callbacks.query != undefined) {
this.callbacks.query(response.payload);
}
if (this.displays.query != undefined) {
this.displays.query.setVisibilityByStatus("success");
}
} else {
2020-03-29 17:40:29 +00:00
errorText = `Error ${response.payload.code} - ${response.payload.msg}`;
2020-04-27 13:22:20 +00:00
nopaque.flash(errorText, "error");
2020-04-01 11:44:06 +00:00
if (this.displays.query.errorContainer != undefined) {
2020-04-23 08:37:44 +00:00
this.displays.query.errorContainer.innerHTML = `<p class="red-text">`+
`<i class="material-icons tiny">error</i> ${errorText}</p>`;
2020-04-01 11:44:06 +00:00
}
if (this.displays.query != undefined) {
this.displays.query.setVisibilityByStatus("error");
}
2020-04-06 13:28:58 +00:00
console.error(`corpus_analysis_query: ${errorText}`);
}
});
2020-04-23 08:37:44 +00:00
2020-04-06 13:28:58 +00:00
socket.on("corpus_analysis_query_results", (response) => {
2020-04-23 08:37:44 +00:00
if (this.callbacks.query_results != undefined) {
this.callbacks.query_results(response.payload);
}
});
2020-04-09 08:17:04 +00:00
// inspect callback handeling based on type
2020-04-23 08:37:44 +00:00
socket.on("corpus_analysis_inspect_match", (response) => {
2020-06-25 08:51:51 +00:00
console.log(response);
if (response.type === "inspect") {
if (this.callbacks.query_match_context != undefined) {
this.callbacks.query_match_context(response);
}
} else if (response.type === "sub-results"
|| response.type ==="results"){
2020-06-25 08:51:51 +00:00
if (this.callbacks.save_sub_results_choices != undefined) {
this.callbacks.save_sub_results_choices(response);
}
2020-04-23 08:37:44 +00:00
}
});
}
init() {
2020-04-01 11:44:06 +00:00
if (this.displays.init.errorContainer != undefined) {
this.displays.init.errorContainer.innerHTML == "";
}
if (this.displays.init != undefined) {
this.displays.init.setVisibilityByStatus("waiting");
}
2020-04-06 13:28:58 +00:00
this.socket.emit("corpus_analysis_init", this.corpusId);
}
getMetaData() {
// just emits thos to tell the server to gather all meta data infos and send
// those back
this.socket.emit("corpus_analysis_get_meta_data", this.corpusId);
}
2020-04-02 12:45:02 +00:00
query(queryStr) {
2020-04-01 11:44:06 +00:00
let displayOptionsData;
let resultListOptions;
if (this.displays.query.errorContainer != undefined) {
this.displays.query.errorContainer.innerHTML == "";
}
if (this.displays.query != undefined) {
this.displays.query.setVisibilityByStatus("waiting");
}
2020-04-06 13:28:58 +00:00
nopaque.socket.emit("corpus_analysis_query", queryStr);
2020-03-31 08:17:04 +00:00
}
setCallback(type, callback) {
2020-03-31 08:17:04 +00:00
// saves callback functions into an object. Key is function type, callback
// is the callback function
this.callbacks[type] = callback;
}
setDisplay(type, display) {
this.displays[type] = display;
}
}
class CorpusAnalysisDisplay {
constructor(element) {
this.element = element;
this.errorContainer = element.querySelector(".error-container");
this.showOnError = element.querySelectorAll(".show-on-error");
this.showOnSuccess = element.querySelectorAll(".show-on-success");
this.showWhileWaiting = element.querySelectorAll(".show-while-waiting");
2020-04-01 11:44:06 +00:00
this.hideOnComplete = element.querySelectorAll(".hide-on-complete")
}
setVisibilityByStatus(status) {
switch (status) {
case "error":
2020-04-01 11:44:06 +00:00
for (let element of this.showOnError) {
element.classList.remove("hide");
}
for (let element of this.showOnSuccess) {
element.classList.add("hide");
}
for (let element of this.showWhileWaiting) {
element.classList.add("hide");
}
break;
case "success":
2020-04-01 11:44:06 +00:00
for (let element of this.showOnError) {
element.classList.add("hide");
}
for (let element of this.showOnSuccess) {
element.classList.remove("hide");
}
for (let element of this.showWhileWaiting) {
element.classList.add("hide");
}
break;
case "waiting":
2020-04-01 11:44:06 +00:00
for (let element of this.showOnError) {
element.classList.add("hide");
}
for (let element of this.showOnSuccess) {
element.classList.add("hide");
}
for (let element of this.showWhileWaiting) {
element.classList.remove("hide");
}
break;
default:
// Hide all
2020-04-01 11:44:06 +00:00
for (let element of this.showOnError) {
element.classList.add("hide");
}
for (let element of this.showOnSuccess) {
element.classList.add("hide");
}
for (let element of this.showWhileWaiting) {
element.classList.add("hide");
}
}
}
}