Transition Word Suggestion Tool

Transition Word Suggestion Tool

Enhance the flow and readability of your writing.

Please enter some text to analyze.

'; return; } // Split text into sentences but keep delimiters const sentences = text.match(/[^.?!]+[.?!]+(\s|$)/g) || [text]; let outputHTML = ''; sentences.forEach((sentence, index) => { if (index > 0) { // Add a suggestion point before each sentence (except the first) outputHTML += `[+] `; } outputHTML += `${sentence.trim()} `; }); analysisOutput.innerHTML = outputHTML; outputSection.classList.remove('hidden'); attachSuggestionListeners(); }; const attachSuggestionListeners = () => { document.querySelectorAll('.suggestion-point').forEach(point => { point.addEventListener('click', (e) => { e.stopPropagation(); activeSuggestionPoint = e.target; showSuggestionPopup(e.target); }); }); }; const showSuggestionPopup = (target) => { let popupHTML = '

Choose a transition word:

'; for (const category in transitionWords) { popupHTML += `
${category}
`; transitionWords[category].forEach(word => { popupHTML += `${word}`; }); } suggestionPopup.innerHTML = popupHTML; const rect = target.getBoundingClientRect(); suggestionPopup.style.display = 'block'; suggestionPopup.style.left = `${rect.left}px`; suggestionPopup.style.top = `${rect.bottom + window.scrollY + 5}px`; suggestionPopup.querySelectorAll('.suggestion-word').forEach(wordEl => { wordEl.addEventListener('click', () => { insertWord(wordEl.textContent); }); }); }; const insertWord = (word) => { if (activeSuggestionPoint) { const newWordNode = document.createTextNode(`${word}, `); activeSuggestionPoint.parentNode.insertBefore(newWordNode, activeSuggestionPoint); activeSuggestionPoint.remove(); activeSuggestionPoint = null; } suggestionPopup.style.display = 'none'; }; const downloadPdf = () => { const { jsPDF } = window.jspdf; const doc = new jsPDF({ orientation: 'p', unit: 'mm', format: 'a4' }); const originalText = textInput.value; const improvedTextContainer = analysisOutput; const title = "Writing Flow Analysis"; const genDate = new Date().toLocaleDateString('en-US'); const pageWidth = doc.internal.pageSize.getWidth(); const margin = 15; let yPos = 0; // --- PDF Template: Writing Flow Analysis --- doc.setFillColor(15, 118, 110); // Teal-700 doc.rect(0, 0, pageWidth, 25, 'F'); doc.setFont('helvetica', 'bold'); doc.setFontSize(16); doc.setTextColor(255, 255, 255); doc.text(title, margin, 16); yPos = 35; // Original Text Section doc.setFont('helvetica', 'bold'); doc.setFontSize(12); doc.setTextColor(30, 41, 59); doc.text("Original Text", margin, yPos); yPos += 8; doc.setFont('helvetica', 'normal'); doc.setFontSize(10); doc.setTextColor(71, 85, 105); const originalLines = doc.splitTextToSize(originalText, pageWidth - margin * 2); doc.text(originalLines, margin, yPos); yPos += originalLines.length * 4 + 15; // Improved Text Section doc.setFont('helvetica', 'bold'); doc.setFontSize(12); doc.setTextColor(30, 41, 59); doc.text("Improved Text (with suggestions)", margin, yPos); yPos += 8; html2canvas(improvedTextContainer, { scale: 2, useCORS: true }).then(canvas => { const imgData = canvas.toDataURL('image/png'); const imgProps = doc.getImageProperties(imgData); const pdfWidth = pageWidth - (margin * 2); const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width; if (yPos + pdfHeight > 280) { doc.addPage(); yPos = 15; } doc.addImage(imgData, 'PNG', margin, yPos, pdfWidth, pdfHeight); // Footer const pageCount = doc.internal.getNumberOfPages(); for(let i = 1; i <= pageCount; i++) { doc.setPage(i); doc.setLineWidth(0.2); doc.setDrawColor(156, 163, 175); doc.line(margin, 282, pageWidth - margin, 282); doc.setFontSize(8); doc.setTextColor(100, 116, 139); doc.text(`Analysis Date: ${genDate}`, margin, 287); doc.text(`Page ${i} of ${pageCount}`, pageWidth - margin, 287, { align: 'right' }); } doc.save(`Writing_Flow_Analysis.pdf`); }).catch(err => { console.error("Error generating PDF:", err); alert("Could not generate PDF. See console for details."); }); }; // --- Event Listeners --- analyzeTextBtn.addEventListener('click', analyzeText); downloadPdfBtn.addEventListener('click', downloadPdf); document.addEventListener('click', () => { suggestionPopup.style.display = 'none'; // Hide popup if clicking anywhere else }); suggestionPopup.addEventListener('click', (e) => e.stopPropagation()); // Don't hide if clicking inside popup });
Scroll to Top