Graphify / static /js /index.js
Game4all's picture
Initial commit
51f2dc1
// mapping of tab to its contents
const TABS = {
"chat-tab": "chat-tab-contents",
"explore-tab": "explore-tab-contents"
};
// switch to the specified tab
function switchTab(newTab) {
Object.keys(TABS).forEach(tabId => {
const tabElement = document.getElementById(tabId);
if (tabElement) {
tabElement.classList.remove("tab-active");
}
});
// Hide all tab contents
Object.values(TABS).forEach(contentId => {
const contentElement = document.getElementById(contentId);
if (contentElement) {
contentElement.classList.add("hidden");
}
});
// Activate the new tab if it exists in the mapping
if (newTab in TABS) {
const newTabElement = document.getElementById(newTab);
const newContentElement = document.getElementById(TABS[newTab]);
if (newTabElement) newTabElement.classList.add("tab-active");
if (newContentElement) newContentElement.classList.remove("hidden");
}
}
function addMessage(message, role = "user") {
const chatContainer = document.getElementById("chat-messages-container");
const chatDiv = document.createElement("div");
chatDiv.classList.add("chat");
if (role === "user")
chatDiv.classList.add("chat-end");
else if (role === "bot")
chatDiv.classList.add("chat-start");
else
chatDiv.classList.add("chat-start");
const bubbleDiv = document.createElement("div");
bubbleDiv.classList.add("chat-bubble");
if (role === "user")
bubbleDiv.classList.add("chat-bubble-primary");
else if (role === "bot")
bubbleDiv.classList.add("chat-bubble-secondary");
else
bubbleDiv.classList.add("chat-bubble-secondary");
bubbleDiv.textContent = message;
chatDiv.appendChild(bubbleDiv);
chatContainer.appendChild(chatDiv);
chatContainer.scrollTop = chatContainer.scrollHeight;
}
function escapeString(str) {
return str
.replace(/\\/g, '\\\\') // Escape backslashes
.replace(/"/g, '\\"') // Escape double quotes
.replace(/\n/g, '\\n') // Escape newlines
.replace(/\r/g, '\\r') // Escape carriage returns
.replace(/\t/g, '\\t'); // Escape tabs
}
// extract entities from the given input text
async function extractEntities(text) {
let escaped_text = escapeString(text);
try {
let graph_data_req = await fetch("/extract_entities", {
method: "POST",
headers: new Headers({
"Content-Type": "application/json"
}),
body: JSON.stringify({
content: escaped_text
})
})
let graph_data = await graph_data_req.json();
console.log(graph_data);
var options = {};
var network = new vis.Network(document.getElementById('grapha'), graph_data, options);
addMessage("I've created a knowledge graph based on what you've provided me. Check the explore tab !", "bot");
} catch (e) {
console.error("Error while trying to extract entities into a KG", e);
}
}
document.addEventListener('DOMContentLoaded', _ => {
document.getElementById('chat-send-input').addEventListener('click', (ev) => {
let textbox = document.getElementById('chat-input');
let text = textbox.value;
addMessage(text, "user");
extractEntities(text);
textbox.value = "";
});
})