document.addEventListener('DOMContentLoaded', () => { document.getElementById('outimg').style.display = 'none' document.getElementById('loader').style.visibility = 'hidden' const canvas = document.getElementById('drawing-area'); const canvasContext = canvas.getContext('2d'); const clearButton = document.getElementById('clear-button'); const saveButton = document.getElementById('save-button'); const state = { mousedown: false }; const baseLineWidth = 3; const devicePixelRatio = window.devicePixelRatio || 1; const lineWidth = baseLineWidth * devicePixelRatio*(7/9); const strokeStyle = '#333'; canvas.addEventListener('mousedown', handleWritingStart); canvas.addEventListener('mousemove', handleWritingInProgress); canvas.addEventListener('mouseup', handleDrawingEnd); canvas.addEventListener('mouseout', handleDrawingEnd); canvas.addEventListener('touchstart', handleWritingStart); canvas.addEventListener('touchmove', handleWritingInProgress); canvas.addEventListener('touchend', handleDrawingEnd); clearButton.addEventListener('click', handleClearButtonClick); saveButton.addEventListener('click', handleSaveButtonClick); function handleWritingStart(event) { event.preventDefault(); state.mousedown = true; const mousePos = getMousePositionOnCanvas(event); canvasContext.beginPath(); canvasContext.moveTo(mousePos.x, mousePos.y); canvasContext.lineWidth = lineWidth; canvasContext.strokeStyle = strokeStyle; canvasContext.shadowColor = null; canvasContext.shadowBlur = 0; } function handleWritingInProgress(event) { event.preventDefault(); if (state.mousedown) { const mousePos = getMousePositionOnCanvas(event); canvasContext.lineTo(mousePos.x, mousePos.y); canvasContext.stroke(); } } function handleDrawingEnd(event) { event.preventDefault(); if (state.mousedown) { canvasContext.shadowColor = null; canvasContext.shadowBlur = 0; canvasContext.stroke(); } state.mousedown = false; } function handleClearButtonClick(event) { event.preventDefault(); document.getElementById('outimg').style.display = 'none' document.getElementById('outtext').textContent = 'Your Output will be displayed here' clearCanvas(); } function handleSaveButtonClick(event) { event.preventDefault(); const dataUrl = canvas.toDataURL(); sendDataToFlask(dataUrl); } function getMousePositionOnCanvas(event) { const clientX = event.clientX || (event.touches && event.touches[0].clientX); const clientY = event.clientY || (event.touches && event.touches[0].clientY); const rect = canvas.getBoundingClientRect(); const scaleX = canvas.width / rect.width; const scaleY = canvas.height / rect.height; const canvasX = (clientX - rect.left) * scaleX; const canvasY = (clientY - rect.top) * scaleY; return { x: canvasX, y: canvasY }; } function clearCanvas() { canvasContext.clearRect(0, 0, canvas.width, canvas.height); } async function sendDataToFlask(dataUrl) { document.getElementById('loader').style.visibility = 'visible' const response = await fetch('/views', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ image: dataUrl }) }) const data = await response.json() const output_image = `data:image/png;base64,${data.output_image}` const output_string = data.output_string if(output_string){ document.getElementById('outimg').style.display = "block" document.getElementById('outtext').textContent = output_string document.getElementById('outimg').src = output_image; } document.getElementById('loader').style.visibility = 'hidden' } });