Spaces:
Runtime error
Runtime error
$(document).ready(function() { | |
// Initialize variables | |
var $chatContainer = $('.chat-container'); | |
var $chatHeader = $('.chat-header'); | |
var $chatBody = $('.chat-body'); | |
var $chatInput = $('.chat-input'); | |
var $input = $('.chat-input input'); | |
var $submit = $('.chat_submit'); | |
var session_id = ''; | |
$chatBody.children().each(function() { | |
$(this).addClass('chat-message'); | |
}); | |
const buttonLabels = ["What is Makerlab?", "What is 3D printing?", | |
"Who are the founders of Makerlab?", "What are the 3D printing prices at Makerlab?", | |
"How can I host a birthday at Makerlab?", "Can I book an appointment at Makerlab?", | |
"Tell me about softwares used to create 3D printing designs", "Hi, I am bob. Tell me when Makerlab was founded.", | |
"Can I get my custom designs 3D printed at Makerlab?", "Who is the director of Makerlab?"]; | |
// Initialize SocketIO connection | |
var socket = io.connect('https://' + document.domain + ':' + location.port); | |
const container = document.getElementById("button-container"); | |
for (let i = 0; i < buttonLabels.length; i++) { | |
const button = document.createElement("button"); | |
button.innerHTML = buttonLabels[i]; | |
button.setAttribute("class", "queries"); | |
button.setAttribute("id", `button-${i}`); | |
button.style.margin = "5px"; | |
container.appendChild(button); | |
} | |
scrollButtons(); | |
// Function to send message to Flask-SocketIO app | |
function sendMessage(message) { | |
console.log("message: " + message ) | |
socket.emit('message', {'question': message}); | |
} | |
// Function to display message | |
function displayMessage(message, isUser, hasHtml) { | |
var $message = $('<div>').addClass('chat-message round'); | |
if (hasHtml) { | |
$messageText = $('<p>').html(message); | |
} else { | |
$messageText = $('<p>').html(message.replace(/(https?:\/\/[^\s,]+)/g, '<a href="$1" target="_blank">$1</a>').replace(/(SOURCES:)/, '<br>$1')); | |
} | |
// var $messageText = $('<p>').html(message.replace(/(https?:\/\/[^\s,]+)/g, '<a href="$1">$1</a>')); | |
$message.append($messageText); | |
if (isUser) { | |
$message.addClass('user'); | |
} else { | |
$message.addClass('bot') | |
} | |
if ($chatBody) { | |
$chatBody.append($message); | |
if ($chatBody[0]) { | |
$chatBody.animate({scrollTop: $chatBody[0].scrollHeight}, 300); | |
} | |
} else { | |
$('.chat-container').append($message); | |
$('.chat-container').animate({scrollTop: 0}, 300); | |
} | |
} | |
socket.on('response', function(data) { | |
console.log("Received response: " + data.response) | |
var response = data.response; | |
displayMessage(response, false); | |
}); | |
// Send message on submit | |
$submit.click(function(event) { | |
event.preventDefault(); | |
var message = $input.val().trim(); | |
console.log("Submit clicked: " + message) | |
if (message !== '') { | |
displayMessage(message, true); | |
sendMessage(message); | |
$input.val(''); | |
} | |
}); | |
// Send message on enter key press | |
$input.keydown(function(event) { | |
if (event.keyCode === 13) { | |
event.preventDefault(); | |
$submit.click(); | |
} | |
}); | |
// Initial message | |
displayMessage('Learn about <a href="https://makerlab.illinois.edu/" target="_blank">Makerlab</a>', false, true); | |
// Function to minimize the widget | |
function minimizeWidget() { | |
$chatContainer.addClass('minimized'); | |
$chatHeader.hide(); | |
$chatBody.hide() | |
$chatInput.hide(); | |
$chatContainer.append('<div class="chat-bot-icon"><i class="fa fa-android"></i></div>'); | |
} | |
// Function to maximize the widget | |
function maximizeWidget() { | |
$chatContainer.removeClass('minimized'); | |
$chatBody.show() | |
$chatHeader.show(); | |
$chatInput.show(); | |
$('.chat-bot-icon').remove(); | |
} | |
// Minimize the widget on click of close button | |
$chatHeader.find('.chat-close').click(function() { | |
minimizeWidget(); | |
}); | |
// Maximize the widget on click of chat-bot-icon | |
$chatContainer.on('click', '.chat-bot-icon', function() { | |
maximizeWidget(); | |
}); | |
// Add event listener to each button | |
$('.queries').click(function() { | |
// Set the value of the input field to the text content of the clicked button | |
$('input[type="text"]').val($(this).text()); | |
}); | |
function scrollButtons() { | |
var container = document.getElementById("button-container"); | |
var buttons = container.querySelectorAll(".queries"); | |
var current = 0; | |
var scrollInterval = setInterval(function() { | |
buttons[current].scrollIntoView({ behavior: "smooth", block: "nearest", inline: "center" }); | |
current = (current + 1) % buttons.length; | |
}, 1000); | |
container.addEventListener("mouseenter", function() { | |
clearInterval(scrollInterval); | |
}); | |
container.addEventListener("mouseleave", function() { | |
scrollInterval = setInterval(function() { | |
buttons[current].scrollIntoView({ behavior: "smooth", block: "nearest", inline: "center" }); | |
current = (current + 1) % buttons.length; | |
}, 1000); | |
}); | |
} | |
}); | |