$(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?", "Can I host a private event at Makerlab?", "Does Makerlab host any workshop?", "When is Makerlab open?", "How can I contact the Makerlab Team?"]; // 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 = $('
').addClass('chat-message round'); if (hasHtml) { $messageText = $('

').html(message); } else { $messageText = $('

').html(message.replace(/(https?:\/\/[^\s,]+)/g, '$1').replace(/(SOURCES:)/, '
$1')); } // var $messageText = $('

').html(message.replace(/(https?:\/\/[^\s,]+)/g, '$1')); $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 Makerlab', false, true); // Function to minimize the widget function minimizeWidget() { $chatContainer.addClass('minimized'); $chatHeader.hide(); $chatBody.hide() $chatInput.hide(); $chatContainer.append('

'); } // 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); }); } });