Merge branch 'development' of gitlab.ub.uni-bielefeld.de:sfb1288inf/opaque into development

This commit is contained in:
Patrick Jentsch 2020-02-03 13:38:13 +01:00
commit 5db94f2192
5 changed files with 94 additions and 96 deletions

View File

@ -287,12 +287,14 @@ class CQiWrapper(CQiClient):
first_cpos, last_cpos = match_cpos_list[0], match_cpos_list[-1] first_cpos, last_cpos = match_cpos_list[0], match_cpos_list[-1]
context_sentences = {} context_sentences = {}
s_ids = self.cl_cpos2struc(key, [first_cpos, last_cpos]) s_ids = self.cl_cpos2struc(key, [first_cpos, last_cpos])
logger.warning('s id match: {}'.format(s_ids))
for s_id in s_ids: for s_id in s_ids:
s_start, s_end = self.cl_struc2cpos(key, s_id) s_start, s_end = self.cl_struc2cpos(key, s_id)
s_cpos = list(range(s_start, s_end + 1)) s_cpos = list(range(s_start, s_end + 1))
context_sentences[s_id] = s_cpos context_sentences[s_id] = s_cpos
if get_surrounding_s: if get_surrounding_s:
max_s_id = self.cl_attribute_size(key) max_s_id = self.cl_attribute_size(key) - 1
logger.warning('max sid: {}'.format(max_s_id))
additional_s_ids = [] additional_s_ids = []
additional_s = list(range(max(s_ids[0] additional_s = list(range(max(s_ids[0]
- l_r_s_context_additional_len, - l_r_s_context_additional_len,
@ -302,6 +304,7 @@ class CQiWrapper(CQiClient):
max_s_id) + 1)) max_s_id) + 1))
additional_s_ids.extend(additional_s) additional_s_ids.extend(additional_s)
for s_id in additional_s_ids: for s_id in additional_s_ids:
logger.warning('s id additional: {}'.format(s_id))
s_start, s_end = self.cl_struc2cpos(key, s_id) s_start, s_end = self.cl_struc2cpos(key, s_id)
s_cpos = list(range(s_start, s_end + 1)) s_cpos = list(range(s_start, s_end + 1))
context_sentences[s_id] = s_cpos context_sentences[s_id] = s_cpos

View File

@ -38,6 +38,11 @@ main {
} }
/* ### End sidenav-fixed offset ### */ /* ### End sidenav-fixed offset ### */
/* add custom bold class */
.bold {
font-weight: bold;
}
/* CSS for clickable th elements in tables. Needed for sortable table data with /* CSS for clickable th elements in tables. Needed for sortable table data with
list js. On click on th header elements will be sorted accordingly. Also a caret list js. On click on th header elements will be sorted accordingly. Also a caret
indicator will show up how the column is sorted right now.; */ indicator will show up how the column is sorted right now.; */
@ -87,6 +92,7 @@ indicator will show up how the column is sorted right now.; */
z-index: 999; /* tmp fix */ z-index: 999; /* tmp fix */
} }
/* styles for resource lists */
.service[data-service]:before { .service[data-service]:before {
content: "help"; content: "help";
} }

View File

@ -164,6 +164,42 @@ nopaque.socket.on("foreign_jobs_update", function(msg) {
for (let subscriber of nopaque.foreignJobsSubscribers) {subscriber._update(patch);} for (let subscriber of nopaque.foreignJobsSubscribers) {subscriber._update(patch);}
}); });
// get context of one match if inspected
nopaque.socket.on("match_context", function(message) {
console.log("### match_context ###");
console.log(message);
contextResultsElement.innerHTML = "<p>&nbsp;</p>";
document.getElementById("context-modal-loading").classList.add("hide");
document.getElementById("context-modal-ready").classList.remove("hide");
let sentenceElement, token, tokenElement;
lookup["cpos"] = {...lookup["cpos"], ...message["cpos_lookup"]};
lookup["s"] = message["context_s_cpos"];
lookup["text"] = {...lookup["text"], ...message["text_lookup"]};
for (let [key, value] of Object.entries(message['context_s_cpos'])) {
sentenceElement = document.createElement("p");
for (cpos of value) {
token = lookup["cpos"][cpos];
tokenElement = document.createElement("span");
tokenElement.classList.add("token");
if (message["match_cpos_list"].includes(cpos)) {
tokenElement.classList.add("bold");
}
tokenElement.dataset.cpos = cpos;
tokenElement.innerText = token["word"];
// if (expertModeSwitchElement.checked) {
// tokenElement.classList.add("chip");
// addToolTipToTokenElement(tokenElement, token);
// }
// tokenElements.add(tokenElement);
sentenceElement.append(tokenElement);
sentenceElement.append(document.createTextNode(" "));
}
contextResultsElement.append(sentenceElement);
}
});
document.addEventListener("DOMContentLoaded", function() { document.addEventListener("DOMContentLoaded", function() {
M.AutoInit(); M.AutoInit();

View File

@ -93,66 +93,55 @@ RessourceList.options = {
class ResultList extends List { class ResultList extends List {
createResultRowElement(item, chunk) { createResultRowElement(item, chunk) {
let values, cpos, matchRowElement, lcCellElement, lcTokenElement, token; let values, cpos, token, matchRowElement, lcCellElement, hitCellElement, rcCellElement, textTitlesCellElement;
// gather values from item // gather values from item
values = item.values(); values = item.values();
console.log("CHONK"); console.log("CHONK");
console.log(chunk); console.log(chunk);
// get infos for full match row // get infos for full match row
matchRowElement = document.createElement("tr"); matchRowElement = document.createElement("tr");
for (cpos of values["lc"]) { matchRowElement.setAttribute("data-index", values["index"])
console.log(cpos); lcCellElement = document.createElement("td");
lcCellElement = document.createElement("td"); lcCellElement.classList.add("left-context");
lcTokenElement = document.createElement("span");
lcTokenElement.classList.add("token");
lcTokenElement.dataset.cpos = cpos;
token = chunk["cpos_lookup"][cpos];
lcTokenElement.innerText = token["word"];
lcCellElement.appendChild(lcTokenElement);
// let hit_tokens = "";
}
matchRowElement.appendChild(lcCellElement); matchRowElement.appendChild(lcCellElement);
// // get infos of match for (cpos of values["lc"]) {
// let textTitles = new Set(); token = chunk["cpos_lookup"][cpos];
// for (cpos of match["hit"]) { lcCellElement.insertAdjacentHTML("beforeend", `<span class="token" data-cpos="${cpos}">${token["word"]} </span>`);
// tokenElement = document.createElement("span"); }
// tokenElement.classList.add("token");
// tokenElement.dataset.cpos = cpos; // get infos for hit of match
// token = chunk["cpos_lookup"][cpos]; let textTitles = new Set();
// tokenElement.innerText = token["word"]; hitCellElement = document.createElement("td");
// hit_tokens += " " + tokenElement.outerHTML; hitCellElement.classList.add("match-hit");
// // get text titles of every hit cpos token textTitlesCellElement = document.createElement("td");
// textTitles.add(chunk["text_lookup"][token["text"]]["title"]); textTitlesCellElement.classList.add("titles");
// } matchRowElement.appendChild(hitCellElement);
// // add button to trigger more context to every match td for (cpos of values["hit"]) {
// var inspectBtn = document.createElement("a"); token = chunk["cpos_lookup"][cpos];
// inspectBtn.setAttribute("class", "btn-floating btn-flat waves-effect waves-light grey right inspect"); hitCellElement.insertAdjacentHTML("beforeend", `<span class="token" data-cpos="${cpos}">${token["word"]} </span>`);
// inspectBtn.onclick = function() {inspect()}; // get text titles of every hit cpos token
// inspectBtn.innerHTML = '<i class="material-icons">search</i>'; textTitles.add(chunk["text_lookup"][token["text"]]["title"]);
// hit_tokens += "<p>" + inspectBtn.outerHTML + "</p>"; // add button to trigger more context to every match td
// // get infos for right context of match var inspectBtn = document.createElement("a");
// let rc_tokens = ""; inspectBtn.setAttribute("class", "btn-floating btn-flat waves-effect waves-light grey right inspect");
// for (cpos of match["rc"]) { inspectBtn.innerHTML = '<i class="material-icons">search</i>';
// tokenElement = document.createElement("span"); inspectBtn.onclick = function () {inspect(values["index"])};
// tokenElement.classList.add("token"); }
// tokenElement.dataset.cpos = cpos; // add text titles at front as first td of one row
// token = chunk["cpos_lookup"][cpos]; hitCellElement.appendChild(inspectBtn);
// tokenElement.innerText = token["word"]; textTitlesCellElement.innerText = [...textTitles].join(", ");
// rc_tokens += " " + tokenElement.outerHTML; matchRowElement.insertAdjacentHTML("afterbegin", textTitlesCellElement.outerHTML);
// }
// // put all infos into an javascribt object // get infos for right context of match
// textTitleElement = document.createElement("span"); rcCellElement = document.createElement("td");
// textTitleElement.classList.add("text-titles"); rcCellElement.classList.add("right-context");
// textTitles = [...textTitles].join(","); matchRowElement.appendChild(rcCellElement);
// textTitleElement.innerText = textTitles; for (cpos of values["rc"]) {
// token = chunk["cpos_lookup"][cpos];
// matchRowElement.appendChild(textTitleElement); rcCellElement.insertAdjacentHTML("beforeend", `<span class="token" data-cpos="${cpos}">${token["word"]} </span>`);
// // matchRowElement.appendChild(lc_tokens); }
// // matchRowElement.appendChild(hit_tokens); console.log(matchRowElement);
// // matchRowElement.appendChild(rc_tokens);
// // matchRowElement.appendChild(index);
// }
console.log(matchRowElement.outerHTML);
return matchRowElement return matchRowElement
} }
} }

View File

@ -378,13 +378,16 @@
resultList.add(resultItems, items => { resultList.add(resultItems, items => {
for (let item of items) { for (let item of items) {
item.elm = resultList.createResultRowElement(item, chunk);} item.elm = resultList.createResultRowElement(item, chunk);}
resultList.update();
}); });
resultList.update();
}); });
// inspect match functions // inspect match functions
function inspect() { function inspect(dataIndex) {
console.log("Inspect!") console.log("Inspect!");
console.log(result["matches"][dataIndex]["hit"]);
contextModal.open();
nopaque.socket.emit("inspect_match", {"cpos": result["matches"][dataIndex]["hit"]});
} }
// Function to download data to a file // Function to download data to a file
@ -441,45 +444,6 @@
"position": "top", "position": "top",
"transitionMovement": 0}); "transitionMovement": 0});
} }
nopaque.socket.on("match_context", function(message) {
console.log("### match_context ###");
console.log(message);
contextResultsElement.innerHTML = "<p>&nbsp;</p>";
document.getElementById("context-modal-loading").classList.add("hide");
document.getElementById("context-modal-ready").classList.remove("hide");
var sentenceElement;
var token;
var tokenElement;
lookup["cpos"] = {...lookup["cpos"], ...message["cpos_lookup"]};
lookup["s"] = message["context_s_cpos"];
lookup["text"] = {...lookup["text"], ...message["text_lookup"]};
for (let [key, value] of Object.entries(message['context_s_cpos'])) {
sentenceElement = document.createElement("p");
for (cpos of value) {
token = lookup["cpos"][cpos];
tokenElement = document.createElement("span");
tokenElement.classList.add("token");
if (message["match_cpos_list"].includes(cpos)) {
tokenElement.classList.add("bold");
}
tokenElement.dataset.cpos = cpos;
tokenElement.innerText = token["word"];
if (expertModeSwitchElement.checked) {
tokenElement.classList.add("chip");
addToolTipToTokenElement(tokenElement, token);
}
tokenElements.add(tokenElement);
sentenceElement.append(tokenElement);
sentenceElement.append(document.createTextNode(" "));
}
contextResultsElement.append(sentenceElement);
}
});
// collapsible display options // collapsible display options
var elem = document.querySelector('.collapsible.expandable'); var elem = document.querySelector('.collapsible.expandable');
</script> </script>